JP2022541721A - 効率的な乗算のための代替数字形式をサポートするシステムおよび方法 - Google Patents
効率的な乗算のための代替数字形式をサポートするシステムおよび方法 Download PDFInfo
- Publication number
- JP2022541721A JP2022541721A JP2021573175A JP2021573175A JP2022541721A JP 2022541721 A JP2022541721 A JP 2022541721A JP 2021573175 A JP2021573175 A JP 2021573175A JP 2021573175 A JP2021573175 A JP 2021573175A JP 2022541721 A JP2022541721 A JP 2022541721A
- Authority
- JP
- Japan
- Prior art keywords
- value
- bit
- multiplication
- circuitry
- bits
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 63
- 238000013528 artificial neural network Methods 0.000 claims abstract description 115
- 230000004913 activation Effects 0.000 claims description 40
- 238000013473 artificial intelligence Methods 0.000 description 51
- 238000012545 processing Methods 0.000 description 42
- 210000002569 neuron Anatomy 0.000 description 28
- 230000006870 function Effects 0.000 description 25
- 238000013507 mapping Methods 0.000 description 25
- 238000013527 convolutional neural network Methods 0.000 description 24
- 230000004044 response Effects 0.000 description 19
- 230000008569 process Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 13
- 230000015654 memory Effects 0.000 description 13
- 238000011176 pooling Methods 0.000 description 10
- 238000012549 training Methods 0.000 description 10
- 239000013598 vector Substances 0.000 description 7
- 238000003491 array Methods 0.000 description 5
- 230000000295 complement effect Effects 0.000 description 5
- 239000000872 buffer Substances 0.000 description 3
- 230000000670 limiting effect Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000007781 pre-processing Methods 0.000 description 3
- 230000003190 augmentative effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 210000004027 cell Anatomy 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 238000012805 post-processing Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000002194 synthesizing effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 241000699670 Mus sp. Species 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000000593 degrading effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000012530 fluid Substances 0.000 description 1
- 239000011521 glass Substances 0.000 description 1
- 238000010348 incorporation Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012886 linear function Methods 0.000 description 1
- 230000007787 long-term memory Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000011144 upstream manufacturing Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/01—Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/487—Multiplying; Dividing
- G06F7/4876—Multiplying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
- G06F7/5235—Multiplying only using indirect methods, e.g. quarter square method, via logarithmic domain
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
- G06F7/533—Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
- G06F7/5334—Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/48—Indexing scheme relating to groups G06F7/48 - G06F7/575
- G06F2207/4802—Special implementations
- G06F2207/4818—Threshold devices
- G06F2207/4824—Neural networks
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Nonlinear Science (AREA)
- Image Analysis (AREA)
Abstract
本明細書の開示は、ニューラルネットワークに対する第1の値および第2の値の乗算を実施する、シフト回路類および加算回路類を含む、システム、方法、およびデバイスを含む。第1の値は、第1のビット、およびゼロまたは2n(nは0以上の整数)の値を表す2つ以上の第2のビットを含む、所定のフォーマットを有する。デバイスは、2つ以上の第2のビットが2nの値を表すとき、シフト回路類を介して第2の値を(n+1)ビット分シフトして第1の結果を提供し、第1の値の第1のビットの値に基づいて、ゼロまたは第2の値を選択的に出力して第2の結果を提供し、加算回路を介して第1の結果および第2の結果を加算して、第1および第2の値の乗算の結果を提供する。【選択図】図2C
Description
本開示は、一般に、効率的な乗算のための数字形式を使用するシステムおよび方法を含むがそれらに限定されない、ニューラルネットワークに対する値の乗算を実施するシステムおよび方法に関する。
人工知能(AI)アクセラレータにおける1つの課題は、ニューラルネットワークに対するAI処理を実施する際の消費電力の制御または低減に関連する。例えば、ニューラルネットワークは、畳み込み層を含むことができる、畳み込みニューラルネットワークであってもよい。畳み込み層では、AIアクセラレータは、畳み込み演算を入力層に適用して、従来の全結合の順伝播型ニューラルネットワークと比較してパラメータの数を低減する形で、結果を次の層に渡すことができる。しかしながら、畳み込みニューラルネットワークで使用される多次元(例えば、複数のチャネル)の入出力が複雑になればなるほど、エネルギーおよびレイテンシを低減する方法が有益であり得る。更に、畳み込み演算を実施するのに必要な乗算が顕著な数であることを鑑みて、効率的な乗算が有益なことがある。
本明細書に開示する様々な実施形態は、ニューラルネットワークの第1の値および第2の値の乗算を実施するデバイスに関する。いくつかの実施形態では、デバイスはシフト回路類および加算回路類を含む回路類を含んでもよい。第1の値は、第1のビット、およびゼロまたは2n(nは0以上の整数)の値を表す2つ以上の第2のビットを含む、所定のフォーマットを有してもよい。回路類は、2つ以上の第2のビットが2nの値を表すとき、シフト回路類を介して第2の値を(n+1)ビット分シフトして、第1の乗算結果を提供するように構成されてもよい。回路類は、第1の値の第1のビットの値に基づいて、ゼロまたは第2の値を選択的に出力して、第2の乗算結果を提供するように構成されてもよい。回路類は、加算回路類を介して第1の乗算結果および第2の乗算結果を加算して、第1の値および第2の値の乗算の結果を提供するように構成されてもよい。
いくつかの実施形態では、第1の値の第1のビットは第1の値の最下位ビットであってもよい。いくつかの実施形態では、回路類は、2つ以上の第2のビットがゼロの値を表すとき、ゼロの値を第1の乗算結果として提供するように構成されてもよい。いくつかの実施形態では、第2の値はリニア数形式を使用して二進数を表してもよい。
いくつかの実施形態では、第2の値は、第1のビットと、ゼロまたは2m(mはゼロ以上の整数)の値を表す2つ以上の第2のビットとを備える、所定の形式を有してもよい。いくつかの実施形態では、回路類は更に、第1の値の2つ以上の第2のビットが2nの値を表し、第2の値の2つ以上の第2のビットが2mの値を表すとき、シフト回路類を介して2m+1の値を(n+1)ビット分シフトして、第3の乗算結果を提供するように構成されてもよい。回路類は更に、第2の値の第1のビットの値に基づいて、ゼロまたは2n+1の値を選択的に出力して、第4の乗算結果を提供するように構成されてもよい。回路類は更に、第1の値の第1のビットの値に基づいて、ゼロまたは2m+1の値を選択的に出力して、第5の乗算結果を提供するように構成されてもよい。回路類は更に、第1の値の第1のビットの値に基づいて、ゼロまたは第2の値の第1のビットの値を選択的に出力して、第6の乗算結果を提供するように構成されてもよい。回路類は更に、加算回路類を介して第3~第6の乗算結果を加算して、第1の値および第2の値の乗算の結果を提供するように構成されてもよい。
いくつかの実施形態では、第1の値の2つ以上の第2のビットとしての「1 1」は、4の値を表してもよい。いくつかの実施形態では、第1の値は更に、第1の値が符号ありか符号なしかを示す第3のビットを含んでもよい。いくつかの実施形態では、回路類は、第1の値の第3のビットの値に基づいて、第1の値および第2の値の乗算の結果の符号を決定するように構成されてもよい。いくつかの実施形態では、回路類は更に、重みデータと活性化関数を表す活性化データとを使用して、ニューラルネットワークの第1の層に対する畳み込みを実施するように構成されてもよく、第1の値は、ニューラルネットワークの第1の層に対する重みデータおよび活性化データのうち一方の値を表してもよい。いくつかの実施形態では、第2の値は、ニューラルネットワークの第1の層に対する重みデータおよび活性化データの他方の値を表してもよい。
本明細書に開示する様々な実施形態は、ニューラルネットワークの第1の値および第2の値の乗算を実施する方法に関し、第1の値は、第1のビットと、ゼロまたは2n(nは0以上の整数)の値を表す2つ以上の第2のビットとを備える、所定の形式を有する。いくつかの実施形態では、第1の値および第2の値の乗算を実施することは、2つ以上の第2のビットが2nの値を表すとき、シフト回路類によって第2の値を(n+1)ビット分シフトして、第1の乗算結果を提供することを含んでもよい。第1の値および第2の値の乗算を実施することは、第1の値の第1のビットの値に基づいて、ゼロまたは第2の値を選択的に出力して、第2の乗算結果を提供することを含んでもよい。第1の値および第2の値の乗算を実施することは、加算回路類によって、第1の乗算結果および第2の乗算結果を加算して、第1の値および第2の値の乗算の結果を提供することを含んでもよい。
いくつかの実施形態では、第1の値の第1のビットは第1の値の最下位ビットであってもよい。いくつかの実施形態では、第1の値および第2の値の乗算を実施することは、2つ以上の第2のビットがゼロの値を表すとき、ゼロの値を第1の乗算結果として提供することを含んでもよい。いくつかの実施形態では、第2の値はリニア数形式を使用して二進数を表してもよい。
いくつかの実施形態では、第2の値は、第1のビットと、ゼロまたは2m(mはゼロ以上の整数)の値を表す2つ以上の第2のビットとを備える、所定の形式を有してもよい。第1の値および第2の値の乗算を実施することは更に、第1の値の2つ以上の第2のビットが2nの値を表し、第2の値の2つ以上の第2のビットが2mの値を表すとき、シフト回路類によって、2m+1の値を(n+1)ビット分シフトして、第3の乗算結果を提供することを含んでもよい。第1の値および第2の値の乗算を実施することは更に、第2の値の第1のビットの値に基づいて、ゼロまたは2n+1の値を選択的に出力して、第4の乗算結果を提供することを含んでもよい。第1の値および第2の値の乗算を実施することは更に、第1の値の第1のビットの値に基づいて、ゼロまたは2m+1の値を選択的に出力して、第5の乗算結果を提供することを含んでもよい。第1の値および第2の値の乗算を実施することは更に、第1の値の第1のビットの値に基づいて、ゼロまたは第2の値の第1のビットの値を選択的に出力して、第6の乗算結果を提供することを含んでもよい。第1の値および第2の値の乗算を実施することは更に、加算回路類によって、第3~第6の乗算結果を加算して、第1の値および第2の値の乗算の結果を提供することを含んでもよい。
いくつかの実施形態では、第1の値の2つ以上の第2のビットとしての「1 1」は、4の値を表してもよい。いくつかの実施形態では、第1の値は更に、第1の値が符号ありか符号なしかを示す第3のビットを含んでもよい。いくつかの実施形態では、第1の値および第2の値の乗算を実施することは更に、第1の値の第3のビットの値に基づいて、第1の値および第2の値の乗算の結果の符号を決定することを含んでもよい。いくつかの実施形態では、ニューラルネットワークの第1の層に対する畳み込みは、重みデータと活性化関数を表す活性化データとを使用して実施されてもよく、第1の値は、ニューラルネットワークの第1の層に対する重みデータおよび活性化データのうち一方の値を表してもよい。いくつかの実施形態では、第2の値は、ニューラルネットワークの第1の層に対する重みデータおよび活性化データの他方の値を表してもよい。
上記および他の態様ならびに実現例について、以下で詳細に考察する。上述の情報および以下で詳述する説明は、様々な態様および実現例の実例を含み、特許請求する態様および実現例の性質ならびに特徴を理解するための概観または枠組みを提供する。本発明の1つもしくは複数の態様または実施形態に組み込むのに好適なものとして、本明細書に開示される任意の特徴は、本開示のあらゆる態様および実施形態全体にわたって一般化できるものであることが意図されるものと理解されるであろう。図面は、様々な態様および実現例の例示ならびに更なる理解を提供し、本明細書に組み込まれるとともに本明細書の一部を構成する。
添付図面は縮尺通りに描かれることを意図しない。様々な図面における同様の参照番号および記号は同様の要素を示す。明瞭にするため、全ての図面において全ての構成要素に符号が付されるわけではない。
特定の実施形態を詳細に示す図面に移る前に、本開示は、明細書に記載されるかまたは図面に例示される、詳細もしくは方法論に限定されないことが理解されるべきである。また、本明細書で使用する専門用語は、単に説明のためのものであって限定とみなされるべきでないことが理解されるべきである。
以下の本発明の様々な実施形態についての説明を読むために、本明細書のセクションおよびそれらそれぞれの内容について、次の説明が有用であり得る。
セクションAは、本発明のシステム、方法、およびデバイスの一実施形態を実践または実現するのに有用な、環境、システム、構成、および/または他の態様について記載する。
セクションBは、代替数字形式を使用して値の乗算を実施するためのデバイス、システム、および方法の実施形態について記載する。
セクションAは、本発明のシステム、方法、およびデバイスの一実施形態を実践または実現するのに有用な、環境、システム、構成、および/または他の態様について記載する。
セクションBは、代替数字形式を使用して値の乗算を実施するためのデバイス、システム、および方法の実施形態について記載する。
A.人工知能に関連する処理のための環境
システム、デバイス、および/または方法の実施形態の詳細についてセクションBで考察する前に、システム、デバイス、および/または方法の特定の実施形態を実践もしくは実現するのに有用な、環境、システム、構成、および/または他の態様について考察するのが有用であり得る。ここで図1Aを参照すると、人工知能(AI)に関連する処理を実施するためのシステムの一実施形態が示される。概要では、システムは、入力データ110を使用してAIに関連する処理を実施することができる、1つまたは複数のAIアクセラレータ108を含む。AIアクセラレータ108として参照しているが、場合によっては、ニューラルネットワークアクセラレータ(NNA)、ニューラルネットワークチップもしくはハードウェア、AIプロセッサ、AIチップなどと呼ばれる。AIアクセラレータ108は、入力データ110および/またはパラメータ128(例えば、重みおよび/またはバイアス情報)にしたがって、AIに関連する処理を実施して、出力データ112を出力または提供することができる。AIアクセラレータ108は、1つもしくは複数のニューラルネットワーク114(例えば、人工ニューラルネットワーク)、1つもしくは複数のプロセッサ24、および/または1つもしくは複数の記憶デバイス126を含むことができ、ならびに/あるいは実装することができる。
システム、デバイス、および/または方法の実施形態の詳細についてセクションBで考察する前に、システム、デバイス、および/または方法の特定の実施形態を実践もしくは実現するのに有用な、環境、システム、構成、および/または他の態様について考察するのが有用であり得る。ここで図1Aを参照すると、人工知能(AI)に関連する処理を実施するためのシステムの一実施形態が示される。概要では、システムは、入力データ110を使用してAIに関連する処理を実施することができる、1つまたは複数のAIアクセラレータ108を含む。AIアクセラレータ108として参照しているが、場合によっては、ニューラルネットワークアクセラレータ(NNA)、ニューラルネットワークチップもしくはハードウェア、AIプロセッサ、AIチップなどと呼ばれる。AIアクセラレータ108は、入力データ110および/またはパラメータ128(例えば、重みおよび/またはバイアス情報)にしたがって、AIに関連する処理を実施して、出力データ112を出力または提供することができる。AIアクセラレータ108は、1つもしくは複数のニューラルネットワーク114(例えば、人工ニューラルネットワーク)、1つもしくは複数のプロセッサ24、および/または1つもしくは複数の記憶デバイス126を含むことができ、ならびに/あるいは実装することができる。
上述の要素または構成要素はそれぞれ、ハードウェア、またはハードウェアとソフトウェアの組み合わせの形で実装される。例えば、これらの要素または構成要素はそれぞれ、任意のアプリケーション、プログラム、ライブラリ、スクリプト、タスク、サービス、プロセス、あるいはデジタルおよび/またはアナログ要素(例えば、1つもしくは複数のトランジスタ、論理ゲート、レジスタ、メモリデバイス、抵抗素子、導電素子、容量素子)を含むことができる回路類などのハードウェア上で実行する、任意のタイプおよび形態の実行可能命令を含むことができる。
入力データ110は、AIアクセラレータ108のニューラルネットワーク114を構成、調整、訓練、および/または活性化するための、ならびに/あるいはプロセッサ124によって処理するための、任意のタイプもしくは形態のデータを含むことができる。ニューラルネットワーク114は、場合によっては、人工ニューラルネットワーク(ANN)と呼ばれる。ニューラルネットワークの構成、調整、および/または訓練は、履歴データなど、(例えば、入力データ110としての)訓練データセットがニューラルネットワークに提供されて処理される、機械学習のプロセスを指すかあるいは含むことができる。調整または構成は、ニューラルネットワーク114を訓練または処理して、ニューラルネットワークが精度を改善するのを可能にすることを指すかまたは含むことができる。ニューラルネットワーク114の調整または構成は、例えば、ニューラルネットワーク114に関する問題のタイプもしくは所望の目標に対して成功することが証明されているアーキテクチャを使用した、ニューラルネットワークの設計、形成、構築、合成、および/または確立を含むことができる。場合によっては、1つまたは複数のニューラルネットワーク114は、同じもしくは類似のベースラインモデルで開始してもよいが、調整、訓練、または学習プロセスの間、ニューラルネットワーク114の結果は、ベースラインモデルであるかあるいは異なる目標もしくは目的のために調整または訓練された異なるニューラルネットワークよりも高いレベルの精度および信頼性で、特定のタイプの入力を処理し、特定のタイプの出力を生成するように、各ニューラルネットワーク114を調整することができるような、十分に異なるものであることができる。ニューラルネットワーク114の調整は、各ニューラルネットワーク114に対して異なるパラメータ128を設定すること、各ニューラルネットワーク114に対してパラメータ114を異なるように微調整すること、または異なる重み(例えば、ハイパーパラメータ、もしくは学習率)、テンソルフローなどを割り当てることを含むことができる。したがって、ニューラルネットワークならびに/あるいはシステムの調整または訓練プロセスおよび目標に基づいて、ニューラルネットワーク114に対して適切なパラメータ128を設定することで、システム全体の性能を改善することができる。
AIアクセラレータ108のニューラルネットワーク114は、例えば、畳み込みニューラルネットワーク(CNN)、深層畳み込みネットワーク、順伝播型ニューラルネットワーク(例えば、多層パーセプトロン(MLP))、深層順伝播型ニューラルネットワーク、放射基底関数ニューラルネットワーク、コホネン自己組織化ニューラルネットワーク、回帰型ニューラルネットワーク、モジュール型ニューラルネットワーク、長期/短期メモリニューラルネットワークなど、任意のタイプのニューラルネットワークを含むことができる。ニューラルネットワーク114は、自然言語処理など、データ(例えば、画像、音声、映像)処理、オブジェクトもしくは特徴認識、レコメンダ機能、データもしくは画像分類、データ(例えば、画像)解析などを実施するために展開または使用することができる。
一例として、また1つまたは複数の実施形態では、ニューラルネットワーク114は、畳み込みニューラルネットワークとして構成することができ、または畳み込みニューラルネットワークを含むことができる。畳み込みニューラルネットワークは、それぞれ異なる目的に役立ち得る、1つもしくは複数の畳み込みセル(またはプーリング層)およびカーネルを含むことができる。畳み込みニューラルネットワークは、畳み込みカーネル(場合によっては、単に「カーネル」と呼ばれる)を含み、組み込み、および/または使用することができる。畳み込みカーネルは入力データを処理することができ、プーリング層は、例えば、maxなどの非線形関数を使用して、データを単純化し、それによって不要な特徴を低減することができる。畳み込みニューラルネットワークを含むニューラルネットワーク114は、画像、音声、または任意のデータの認識もしくは他の処理を容易にすることができる。例えば、(例えば、センサからの)入力データ110を、ファンネルを形成する畳み込みニューラルネットワークの畳み込み層に渡して、入力データ110の検出された特徴を圧縮することができる。畳み込みニューラルネットワークの第1の層は第1の特性を検出することができ、第2の層は第2の特性を検出することができ、その先も同様である。
畳み込みニューラルネットワークは、視覚心像、音声情報、および/または他の任意のタイプもしくは形態の入力データ110を解析するように構成された、深層順伝播型人工ニューラルネットワークのタイプであることができる。畳み込みニューラルネットワークは、最小限の前処理を使用するように設計された、多層パーセプトロンを含むことができる。畳み込みニューラルネットワークは、重み共有アーキテクチャおよび翻訳不変性特性に基づいて、シフト不変または空間不変人工ニューラルネットワークを含むことができ、またはそのように呼ぶことができる。畳み込みニューラルネットワークは、他のデータ分類/処理アルゴリズムと比較して相対的に少ない前処理を使用することができるので、畳み込みニューラルネットワークは、他のデータ分類/処理アルゴリズムのためにマニュアル設計されてもよいフィルタを自動的に学習して、ニューラルネットワーク114の構成、確立、またはセットアップと関連付けられた効率を改善することによって、他のデータ分類/処理技術と比べて技術的利点を提供することができる。
ニューラルネットワーク114は、ニューロンもしくはノードの、入力層116および出力層122を含むことができる。ニューラルネットワーク114はまた、ニューロンもしくはノードの、畳み込み層、プーリング層、全結合層、および/または正規化層を含むことができる、1つまたは複数の隠れ層118、119を有することができる。ニューラルネットワーク114では、各ニューロンは、前の層におけるいくつかの位置から入力を受信することができる。全結合層では、各ニューロンは、前の層の全ての要素からの入力を受信することができる。
ニューラルネットワーク114の各ニューロンは、前の層の受容野からの入力値に何らかの関数を適用することによって、出力値を計算することができる。入力値に適用される関数は、重みのベクトルおよびバイアス(一般的には実数)によって指定される。ニューラルネットワーク114における(例えば、訓練フェーズ中の)学習は、バイアスおよび/または重みを漸増的に調節することによって進行することができる。重みのベクトルおよびバイアスは、フィルタと呼ぶことができ、入力の何らかの特徴(例えば、特定の形状)を表すことができる。畳み込みニューラルネットワークの際立った特徴は、多くのニューロンが同じフィルタを共有できることである。これにより、各受容野が独自のバイアスおよび重みのベクトルを有するのではなく、単一のバイアスおよび重みの単一のベクトルを、該フィルタを共有する全ての受容野にわたって使用することができるので、メモリフットプリントが低減される。
例えば、畳み込み層では、システムは、畳み込み演算を入力層116に適用して、結果を次の層に渡すことができる。畳み込みは、個々のニューロンの応答をエミュレートして刺激を入力することができる。各畳み込みニューロンは、その受容野に対してのみデータを処理することができる。畳み込み演算は、全結合順伝播型ニューラルネットワークと比較して、ニューラルネットワーク114で使用されるニューロンの数を低減することができる。したがって、畳み込み演算は、自由パラメータの数を低減して、より少ないパラメータでネットワークをより深層化することを可能にすることができる。例えば、入力データ(例えば、画像データ)サイズにかかわらず、同じ共有重みをそれぞれ有するサイズ5×5のタイリング領域は、25個のみの学習可能パラメータを使用してもよい。このように、畳み込みニューラルネットワークを有する第1のニューラルネットワーク114は、逆伝播を使用することによって多くの層を有する従来の多層ニューラルネットワークを訓練する際の、勾配消失または発散の問題を解決することができる。
ニューラルネットワーク114(例えば、畳み込みニューラルネットワークで構成される)は、1つまたは複数のプーリング層を含むことができる。1つまたは複数のプーリング層は、ローカルプーリング層またはグローバルプーリング層を含むことができる。プーリング層は、1つの層におけるニューロンクラスタの出力を組み合わせて、次の層における単一のニューロンとすることができる。例えば、最大プーリングは、前の層におけるニューロンのクラスタそれぞれからの最大値を使用することができる。別の例は、前の層におけるニューロンのクラスタそれぞれからの平均値を使用することができる、平均プーリングである。
ニューラルネットワーク114(例えば、畳み込みニューラルネットワークで構成される)は、全結合層を含むことができる。全結合層は、1つの層の全てのニューロンを別の層の全てのニューロンに結合することができる。ニューラルネットワーク114は、畳み込み層で重みを共有して構成することができ、それは同じフィルタが層内の各受容野に使用されることを指すことができ、それにより、メモリフットプリントが低減され、第1のニューラルネットワーク114の性能が改善される。
隠れ層118、119は、入力データ(例えば、仮想現実システムなどからのセンサデータ)に基づいて、情報を検出するように調整または構成されるフィルタを含むことができる。システムがニューラルネットワーク114(例えば、畳み込みニューラルネットワーク)の各層を通るにつれて、システムは、第1の層からの入力を翻訳し、変換された入力を第2の層に出力することができ、その先も同様である。ニューラルネットワーク114は、検出、処理、および/または計算されるオブジェクトもしくは情報のタイプ、ならびに入力データ110のタイプに基づいて、1つまたは複数の隠れ層118、119を含むことができる。
いくつかの実施形態では、畳み込み層は、ニューラルネットワーク114(例えば、CNNとして構成される)のコアビルディングブロックである。層のパラメータ128は、小さい受容野を有するが、入力ボリュームの深さ全体を通って延在する、学習可能なフィルタ(またはカーネル)のセットを含むことができる。順方向パスの間、各フィルタは、入力ボリュームの幅および高さにわたって畳み込まれて、フィルタのエントリと入力との間のドット積を計算し、該フィルタの二次元活性化マップを作成する。結果として、ニューラルネットワーク114は、入力のある空間位置である特定のタイプの特徴を検出すると活性化する、フィルタを学習させることができる。深さ次元に沿って全てのフィルタの活性化マップを積み重ねることで、畳み込み層の全出力ボリュームが形成される。したがって、出力ボリュームの全てのエントリは、入力の小さい領域に注目し、同じ活性化マップのニューロンとパラメータを共有する、ニューロンの出力として解釈することもできる。畳み込み層では、ニューロンは、前の層の制限されたサブエリアから入力を受信することができる。一般的に、サブエリアは正方形形状のもの(例えば、サイズ5×5)である。ニューロンの入力エリアはその受容野と呼ばれる。そのため、全結合層では、受容野は前の層全体である。畳み込み層では、受容エリアは前の層全体よりも小さいものであり得る。
第1のニューラルネットワーク114は、(例えば、入力データ110に基づいて、オブジェクト、イベント、ワード、および/または他の特徴の確率を検出もしくは決定することによって)入力データ110を検出、分類、セグメント化、および/または翻訳するように訓練することができる。例えば、ニューラルネットワーク114の第1の入力層116は、入力データ110を受信し、入力データ110を処理してデータを第1の中間出力に変換し、第1の中間出力を第1の隠れ層118に伝達することができる。第1の隠れ層118は、第1の中間出力を受信し、第1の中間出力を処理して第1の中間出力を第2の中間出力に変換し、第2の中間出力を第2の隠れ層119に伝達することができる。第2の隠れ層119は、第2の中間出力を受信し、第2の中間出力を処理して第2の中間出力を第3の中間出力に変換し、第3の中間出力を、例えば出力層122に伝達することができる。出力層122は、第3の中間出力を受信し、第3の中間出力を処理して第3の中間出力を出力データ112に変換し、出力データ112を(例えば、場合によっては、ユーザに対するレンダリングのため、格納のためなど、後処理エンジンに)伝達することができる。出力データ112は、例として、オブジェクト検出データ、強化/翻訳/拡張されたデータ、推奨、分類、および/またはセグメント化されたデータを含むことができる。
再び図1Aを参照すると、AIアクセラレータ108は、1つまたは複数の記憶デバイス126を含むことができる。記憶デバイス126は、AIアクセラレータ108と関連付けられた任意のタイプもしくは形態のデータを、格納、保持、または維持するように、設計または実装することができる。例えば、データは、AIアクセラレータ108によって受信される入力データ110、および/または出力データ112(例えば、次のデバイスもしくは処理段階に出力される前)を含むことができる。データは、ニューラルネットワーク114および/またはプロセッサ124の処理段階のいずれかに使用される、またはいずれかからの、中間データを含むことができる。データは、記憶デバイス126から読み取るかまたはアクセスすることができる、ニューラルネットワーク114のニューロンに入力される、また該ニューロンで処理する、1つもしくは複数のオペランドを含むことができる。例えば、データは、記憶デバイス126に格納し、そこから読み取るかまたはアクセスすることができる、入力データ、重み情報、および/またはバイアス情報、活性化関数情報、ならびに/あるいは1つもしくは複数のニューロン(またはノード)のためのパラメータ128、および/またはニューラルネットワーク114の層を含むことができる。データは、記憶デバイス126に書き込み、またそこに格納することができる、ニューラルネットワーク114のニューロンからの出力データを含むことができる。例えば、データは、記憶デバイス126に転送するかもしくは書き込み、格納することができる、ニューラルネットワーク114の1つもしくは複数のニューロン(またはノード)および/または層のための、活性化データ、改良もしくは更新されたデータ(例えば、訓練段階などからの重み情報および/またはバイアス情報、活性化関数情報、および/または他のパラメータ128)を含むことができる。
いくつかの実施形態では、AIアクセラレータ108は1つまたは複数のプロセッサ124を含むことができる。1つまたは複数のプロセッサ124は、ニューラルネットワーク114またはAIアクセラレータ108のうち任意の1つもしくは複数に対する入力データを前処理するための、ならびに/あるいはニューラルネットワーク114またはAIアクセラレータ108のうち任意の1つもしくは複数に対する出力データを後処理するための、任意の論理、回路類、および/または処理構成要素(例えば、マイクロプロセッサ)を含むことができる。1つまたは複数のプロセッサ124は、ニューラルネットワーク114またはAIアクセラレータ108の1つもしくは複数の演算を構成、制御、および/または管理するための、論理、回路類、処理構成要素、および/または機能性を提供することができる。例えば、プロセッサ124は、ニューラルネットワーク114と関連付けられたデータまたは信号を受信して、(例えば、ニューラルネットワーク114の演算を実装する回路類に対するクロックゲート制御を介して)消費電力を制御または低減してもよい。別の例として、プロセッサ124は、(例えば、AIアクセラレータ108の様々な構成要素における、例えば並列の)別個の処理のため、(例えば、AIアクセラレータ108の同じ構成要素における、異なる時間もしくは段階での)逐次処理のため、あるいは記憶デバイスの異なるメモリスライスに、または異なる記憶デバイスに格納するため、データを区画化および/または再配置してもよい。いくつかの実施形態では、プロセッサ124は、特定の重み、活性化関数、および/またはパラメータ情報の識別、選択、ならびに/あるいはニューラルネットワーク114のニューロンおよび/または層へのロードによって、特定の文脈に対して演算を行い、特定のタイプの処理を提供し、ならびに/あるいは特定のタイプの入力データをアドレスするように、ニューラルネットワーク114を構成することができる。
いくつかの実施形態では、AIアクセラレータ108は、ディープラーニングおよび/またはAIワークロードを扱うかもしくは処理するように、設計および/または実装される。例えば、AIアクセラレータ108は、人工ニューラルネットワーク、マシンビジョン、および機械学習を含む人工知能用途のため、ハードウェアアクセラレーションを提供することができる。AIアクセラレータ108は、ロボティックス関連、物のインターネット(IoT)関連、または他のデータ集約的もしくはセンサ駆動のタスクを扱う演算向けに構成することができる。AIアクセラレータ108は、マルチコアまたは複数の処理要素(PE)設計を含んでもよく、人工現実(例えば、仮想、拡張、もしくは混合現実)システム、スマートフォン、タブレット、およびコンピュータなど、様々なタイプおよび形態のデバイスに組み込むことができる。AIアクセラレータ108の特定の実施形態は、少なくとも1つのデジタル信号プロセッサ(DSP)、コプロセッサ、マイクロプロセッサ、コンピュータシステム、プロセッサのヘテロジニアスコンピューティング構成、グラフィックス処理装置(GPU)、フィールドプログラマブルゲートアレイ(FPGA)、および/または特定用途向け集積回路(ASIC)を含むかあるいはそれらを使用して実装することができる。AIアクセラレータ108は、トランジスタベース、半導体ベース、および/または量子コンピューティングベースのデバイスであることができる。
次に図1Bを参照すると、AIに関連する処理を実施するためのデバイスの例示の一実施形態が示される。概要では、デバイスは、例えば、図1Aに関連して上述した1つまたは複数の特徴を有する、AIアクセラレータ108を含むかまたはそれに対応することができる。AIアクセラレータ108は、1つまたは複数の記憶デバイス126(例えば、スタティックランダムアクセスメモリ(SRAM)デバイスなどのメモリ)、1つまたは複数のバッファ、複数の処理要素(PE)回路またはPE回路のアレイ、他の論理または回路類(例えば、加算器回路類)、ならびに/あるいは他の構造または構成(例えば、相互接続、データバス、クロック回路類、電力ネットワーク)を含むことができる。上述の要素または構成要素はそれぞれ、ハードウェア、または少なくともハードウェアとソフトウェアの組み合わせの形で実装される。ハードウェアは、例えば、回路要素(例えば、1つもしくは複数のトランジスタ、論理ゲート、レジスタ、メモリデバイス、抵抗素子、導電素子、容量素子、および/またはワイヤもしくは導電性コネクタ)を含むことができる。
AIアクセラレータ108において実装されたニューラルネットワーク114(例えば、人工ニューラルネットワーク)では、ニューロンは、様々な形態を取ることができ、処理要素(PE)またはPE回路と呼ぶことができる。ニューロンは、対応するPE回路として実装することができ、ニューロンで起こり得る処理/活性化は、PE回路で実施することができる。PEは接続されて、異なるパターンが異なる機能的目的に役立つ、特定のネットワークパターンまたはアレイとなる。人工ニューラルネットワークのPEは、(例えば、半導体の実現例の実施形態では)電気的に動作し、アナログ、デジタル、またはハイブリッドのいずれかであってもよい。生体シナプスの作用に匹敵するために、PE間の接続に、適正なシステム出力を作成するように校正または「訓練」することができる、乗法的な重みを割り当てることができる。
PEは、(例えば、ニューロンのマッカロック-ピッツモデルを表す)次式に関して定義することができる。
ζ=Σiwixi (1)
y=σ(ζ) (2)
式中、ζは入力の重み付き合計(例えば、入力ベクトルおよびタップ重みベクトルの内積)であり、σ(ζ)は重み付き合計の関数である。重みおよび入力要素がベクトルwおよびxを形成する場合、重み付き合計ζは単純なドット積となる。
ζ=w・x (3)
これは、活性化関数(例えば、閾値比較の場合)または伝達関数のどちらかと呼ばれることがある。いくつかの実施形態では、1つまたは複数のPEはドット積エンジンと呼ばれる場合がある。ニューラルネットワーク114に対する入力(例えば、入力データ110)xは、入力空間からのものであることができ、出力(例えば、出力データ112)は出力空間の一部である。いくつかのニューラルネットワークでは、出力空間Yは、{0,1}のように単純なものであってもよく、または複雑な多次元(例えば、複数チャネル)空間(例えば、畳み込みニューラルネットワークの場合)であってもよい。ニューラルネットワークは、入力空間の自由度ごとに1つの入力、および出力空間の自由度ごとに1つの出力を有する傾向がある。
ζ=Σiwixi (1)
y=σ(ζ) (2)
式中、ζは入力の重み付き合計(例えば、入力ベクトルおよびタップ重みベクトルの内積)であり、σ(ζ)は重み付き合計の関数である。重みおよび入力要素がベクトルwおよびxを形成する場合、重み付き合計ζは単純なドット積となる。
ζ=w・x (3)
これは、活性化関数(例えば、閾値比較の場合)または伝達関数のどちらかと呼ばれることがある。いくつかの実施形態では、1つまたは複数のPEはドット積エンジンと呼ばれる場合がある。ニューラルネットワーク114に対する入力(例えば、入力データ110)xは、入力空間からのものであることができ、出力(例えば、出力データ112)は出力空間の一部である。いくつかのニューラルネットワークでは、出力空間Yは、{0,1}のように単純なものであってもよく、または複雑な多次元(例えば、複数チャネル)空間(例えば、畳み込みニューラルネットワークの場合)であってもよい。ニューラルネットワークは、入力空間の自由度ごとに1つの入力、および出力空間の自由度ごとに1つの出力を有する傾向がある。
いくつかの実施形態では、PEは、シストリックアレイとして配置および/または実装することができる。シストリックアレイは、セルまたはノードと呼ばれる、PEなどの結合されたデータ処理装置(DPU)のネットワーク(例えば、ホモジニアスネットワーク)であることができる。各ノードまたはPEは、上流側の隣接するノードまたはPEから受信したデータの関数として、部分結果を独立して計算することができ、結果を自身に格納することができ、結果を例えば下流側に渡すことができる。シストリックアレイは、特定用途向けに構成されたハードワイヤードまたはソフトウェアであることができる。ノードまたはPEは、固定された同一のものであることができ、シストリックアレイの相互接続はプログラム可能であることができる。シストリックアレイは同期型データ転送に依存することができる。
再び図1Bを参照すると、PE120に対する入力xは、記憶デバイス126(例えば、SRAM)から読み取られるかまたはアクセスされる、入力ストリーム132の一部であることができる。入力ストリーム132は、PEの1つの行(水平のバンクもしくはグループ)に方向付けることができ、PEのうち1つもしくは複数にわたって共有するか、またはそれぞれのPEに対する入力としてのデータ部分(重なり合うもしくは重なり合わないデータ部分)に区画化することができる。重みストリーム(例えば、記憶デバイス126から読み取られる)における重み134(もしくは重み情報)は、PEの列(垂直のバンクもしくはグループ)に方向付けるかまたは提供することができる。列のPEはそれぞれ、同じ重み134を共有するか、または対応する重み134を受信してもよい。標的のPEそれぞれに対する入力および/または重みは、(例えば、他のPEを通過せずに)標的のPEに(例えば、記憶デバイス126から)直接ルーティングすることができ、あるいは1つもしくは複数のPEを通して(例えば、PEの行もしくは列に沿って)ルーティングすることができる。各PEの出力は、PEアレイの外に(例えば、他のPEを通過せずに)直接ルーティングすることができ、あるいは1つもしくは複数のPEを通して(例えば、PEの列に沿って)PEアレイを出るようにルーティングすることができる。PEの各列の出力は、それぞれの列の加算器回路類において合算または加算し、PEのそれぞれの列に対するバッファ130に提供することができる。バッファ130は、受信した出力を記憶デバイス126に提供、転送、ルーティング、書き込み、および/または格納することができる。いくつかの実施形態では、記憶デバイス126によって格納された出力(例えば、ニューラルネットワークの1つの層からの活性化データ)を、記憶デバイス126から検索するかまたは読み取り、後の時間における(ニューラルネットワークの後続層の)処理のため、PE120のアレイに対する入力として使用することができる。特定の実施形態では、記憶デバイス126によって格納された出力を、AIアクセラレータ108に対する出力データ112として、記憶デバイス126から検索するかまたは読み取ることができる。
次に図1Cを参照すると、AIに関連する処理を実施するためのデバイスの例示の一実施形態が示される。概要では、デバイスは、例えば、図1Aおよび図1Bに関連して上述した1つまたは複数の特徴を有する、AIアクセラレータ108を含むかまたはそれに対応することができる。AIアクセラレータ108は、1つまたは複数のPE120、他の論理または回路類(例えば、加算器回路類)、ならびに/あるいは他の構造または構成(例えば、相互接続、データバス、クロック回路類、電力ネットワーク)を含むことができる。上述の要素または構成要素はそれぞれ、ハードウェア、または少なくともハードウェアとソフトウェアの組み合わせの形で実装される。ハードウェアは、例えば、回路要素(例えば、1つもしくは複数のトランジスタ、論理ゲート、レジスタ、メモリデバイス、抵抗素子、導電素子、容量素子、および/またはワイヤもしくは導電性コネクタ)を含むことができる。
いくつかの実施形態では、PE120は、1つもしくは複数の乗累算(MAC)ユニットまたは回路140を含むことができる。1つまたは複数のPEは、場合によっては、(単独でまたは集合的に)MACエンジンと呼ぶことができる。MACユニットは、乗累算を実施するように構成される。MACユニットは、乗算器回路、加算器回路、および/または累算器回路を含むことができる。乗累算は、2つの数字の積を計算し、その積を累算器に加える。MAC演算は、累算器オペランドa、ならびに入力bおよびcに関連して、次のように表すことができる。
a←a+(b×c) (4)
いくつかの実施形態では、MACユニット140は、組み合わせ論理に実装された乗算器とそれに続く加算器(例えば、組み合わせ論理を含むもの)、ならびに結果を格納する累算器レジスタ(例えば、順序および/または組み合わせ論理を含むもの)を含んでもよい。累算器レジスタの出力は、加算器の1つの入力にフィードバックすることができるので、各クロックサイクルにおいて、乗算器の出力を累算器レジスタに加算することができる。
a←a+(b×c) (4)
いくつかの実施形態では、MACユニット140は、組み合わせ論理に実装された乗算器とそれに続く加算器(例えば、組み合わせ論理を含むもの)、ならびに結果を格納する累算器レジスタ(例えば、順序および/または組み合わせ論理を含むもの)を含んでもよい。累算器レジスタの出力は、加算器の1つの入力にフィードバックすることができるので、各クロックサイクルにおいて、乗算器の出力を累算器レジスタに加算することができる。
上述したように、MACユニット140は、乗算および加算両方の機能を実施することができる。MACユニット140は2つの段階で演算することができる。MACユニット140は、最初に、第1の段階で所与の数(入力)の積を計算し、結果を第2の段階の演算(例えば、加算および/または累算)のために転送することができる。nビットのMACユニット140は、nビット乗算器、2nビット加算器、および2nビット累算器を含むことができる。(例えば、PEにおける)複数のMACユニット140またはMACユニットのアレイ140は、並列積分、畳み込み、相関、行列乗算、データ分類、および/またはデータ解析タスクのため、シストリックアレイの形で配置することができる。
本明細書に記載する様々なシステムおよび/またはデバイスを、コンピューティングシステムに実装することができる。図1Dは、代表的なコンピューティングシステム150のブロック図を示している。いくつかの実施形態では、図1Aのシステムは、コンピューティングシステム150の処理装置156(またはプロセッサ156)の少なくとも一部を形成することができる。コンピューティングシステム150は、例えば、スマートフォン、他の移動電話、タブレットコンピュータ、ウェアラブルコンピューティングデバイス(例えば、スマートウォッチ、眼鏡、ヘッドマウントディスプレイ)、デスクトップコンピュータ、ラップトップコンピュータなどのデバイス(例えばコンシューマデバイス)として実装するか、あるいは分散型コンピューティングデバイスを実装することができる。コンピューティングシステム150は、VR、AR、MR体験を提供するために実装することができる。いくつかの実施形態では、コンピューティングシステム150は、プロセッサ156、記憶デバイス158、ネットワークインターフェース151、ユーザ入力デバイス152、およびユーザ出力デバイス154など、従来の専用またはカスタムのコンピュータ構成要素を含むことができる。
ネットワークインターフェース151は、(ローカル/リモート)サーバまたはバックエンドシステムのネットワークインターフェースも接続される、ローカル/ワイドエリアネットワーク(例えば、インターネット)に対する接続を提供することができる。ネットワークインターフェース151は、有線インターフェース(例えば、イーサネット)、ならびに/あるいはWi-Fi、ブルートゥース、またはセルラーデータネットワーク規格(例えば、3G、4G、5G、LTEなど)などの様々なRFデータ通信規格を実装する無線インターフェースを含むことができる。
ユーザ入力デバイス152は、ユーザがコンピューティングシステム150に信号を提供するのに用いることができる、任意のデバイス(または複数のデバイス)を含むことができ、コンピューティングシステム150は、特定のユーザ要求または情報を示すものとして信号を解釈することができる。ユーザ入力デバイス152は、キーボード、タッチパッド、タッチスクリーン、マウスもしくは他のポインティングデバイス、スクロールホイール、クリックホイール、ダイアル、ボタン、スイッチ、キーパッド、マイクロフォン、センサ(例えば、モーションセンサ、視線追跡センサなど)などのいずれかまたは全てを含むことができる。
ユーザ出力デバイス154は、コンピューティングシステム150がユーザに情報を提供するのに用いることができる、任意のデバイスを含むことができる。例えば、ユーザ出力デバイス154は、コンピューティングシステム150によって生成されるかまたは該システムに送達される画像を表示する、ディスプレイを含むことができる。ディスプレイは、例えば、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)を含む発光ダイオード(LED)、投影システム、陰極線管(CRT)などの様々な画像生成技術を、サポートしている電子部品(例えば、デジタル・アナログもしくはアナログ・デジタル変換器、信号プロセッサなど)とともに組み込むことができる。入力および出力両方のデバイスとして機能する、タッチスクリーンなどのデバイスを使用することができる。ユーザ出力デバイス154は、ディスプレイに加えてまたはディスプレイの代わりに提供することができる。例としては、インジケータ光、スピーカ、触覚「ディスプレイ」デバイス、プリンタなどが挙げられる。
いくつかの実現例としては、コンピュータプログラム命令を非一時的なコンピュータ可読記憶媒体に格納する、マイクロプロセッサ、記憶装置、およびメモリなどの電子構成要素が挙げられる。本明細書に記載する特徴の多くは、コンピュータ可読記憶媒体として符号化されたプログラム命令のセットとして指定される、プロセスとして実現することができる。これらのプログラム命令は、1つまたは複数のプロセッサによって実行されると、プログラム命令に示されている様々な動作をプロセッサに実施させる。プログラム命令またはコンピュータコードの例としては、コンパイラによって作成されるものなどの機械コード、およびインタープリタを使用してコンピュータ、電子構成要素、またはマイクロプロセッサによって実行される、より高次のコードを含むファイルが挙げられる。好適なプログラミングを通して、プロセッサ156は、コンピューティングシステム150に対して、サーバまたはクライアントによって実施されるものとして本明細書に記載する機能性、またはメッセージ管理サービスと関連付けられた他の機能性のいずれかを含む、様々な機能性を提供することができる。
コンピューティングシステム150は例示であり、変形および修正が可能であることが認識されるであろう。本開示と関連して使用されるコンピュータシステムは、本明細書には具体的に記載しない他の能力を有することができる。更に、コンピューティングシステム150について、特定のブロックを参照して記載しているが、該ブロックは説明の便宜上定義されているものであり、構成部品の特定の物理的配置を示唆しようとするものではないことが理解されるべきである。例えば、異なるブロックを、同じ設備に、同じサーバラックに、または同じマザーボード上に配置することができる。更に、ブロックは必ずしも物理的に別個の構成要素に対応していなくてもよい。ブロックは、例えば、プロセッサをプログラミングするか、または適切な制御回路類を提供することによって、様々な動作を実施するように構成することができ、様々なブロックは、初期の構成がどのように得られるかに応じて再構成可能であってもなくてもよい。本開示の実現例は、回路類およびソフトウェアの任意の組み合わせを使用して実装される電子デバイスを含む、様々な装置で実現することができる。
B.代替数字形式を使用した値の乗算のための方法およびデバイス
本明細書の開示は、効率的な乗算のための数字形式を使用するシステムおよび方法を含むがそれらに限定されない、ニューラルネットワークに対する値の乗算を実施するシステム、方法、およびデバイスの実施形態を含む。いくつかの態様では、本開示は、例えばAIチップにおけるエネルギー効率が良い乗算により適した代替形式で数字を表す技術を対象とする。
本明細書の開示は、効率的な乗算のための数字形式を使用するシステムおよび方法を含むがそれらに限定されない、ニューラルネットワークに対する値の乗算を実施するシステム、方法、およびデバイスの実施形態を含む。いくつかの態様では、本開示は、例えばAIチップにおけるエネルギー効率が良い乗算により適した代替形式で数字を表す技術を対象とする。
一態様では、ニューラルネットワークで使用される数字(例えば、訓練中に決定することができる活性化関数からの重みもしくは値)は、例えば、符号付き絶対数表現または2の補数などの従来の二進数形式など、リニア形式で表すことができる。しかしながら、かかるリニア形式での2つの数字の乗算には、加算器またはシフト演算よりも多くのエネルギーを消費することがある、乗算器演算が関与する。この課題に対処するため、本開示は、従来の数字形式に代わる数字形式(以下、「代替数字形式」と呼ばれる場合がある)を使用して、値の乗算を実施する解決策を提供し、それにより、それらの値の乗算は、乗算器演算の代わりによりエネルギー効率が良い演算(例えば、加算器またはシフト演算)で実施することができる。
別の態様では、代替形式の使用によって、乗算における部分積の数を低減することができ、それによって更にエネルギーおよびレイテンシが低減される。例えば、代替形式を使用して乗算を実施する際、いくつかの実施形態では、4ビットデータB=(b3 b2 b1 b0)は、b0+2×b1+4×b2(符号ビットb3は考慮しない)の代わりに、数字b0+2×β(β=2n(nは0以上の整数))を表すことができる。Bによって表される数字が別の4ビット数によって乗算される場合、部分積の数は2であるが(例えば、b0×A+2×β×A)、Bがリニア数形式である場合の部分積の数は3になる(例えば、b0×A+2×b1×A+4×b2×A)。つまり、例えば2つの4ビット数の乗算の場合、この代替形式は、部分積(および部分積演算)の最大数を、リニア数形式と比較して3から2に低減することができる。
更なる態様では、この代替数字形式は、様々な可能な規定の数字または値のセット(例えば、ニューラルネットワークに対する重みを表す)の使用を組み込むことができ、値の範囲(例えば、いくつかの実施形態では、「000」~「111」によって表される範囲を0~9に拡張することができる)を拡張することができる一方で、いくつかの値のみを飛ばすかまたは却下することができる(例えば、いくつかの実施形態では、代替形式の使用にしたがって6および7は表されない)。例えば、4ビットデータ「0110」および「0111」はそれぞれ、リニア形式で表されるような6および7の代わりに、8および9を表す。したがって、この代替数字は、ニューラルネットワークの性能(例えば、精度)を大幅に低下させることなく、値の範囲を拡張することができる。
図2Aは、本開示の例示の一実現例による、AIに関連する処理を実施するデバイスの一実施形態を示すブロック図である。いくつかの実施形態では、AIアクセラレータ210は、乗累算を実施するように構成された、1つまたは複数のMACユニット215を含んでもよい。MACユニット215は、乗算回路類216、加算器回路、および/または累算器回路を含むことができる。乗算回路類216は、第1の値211および第2の値212を入力として受信し、第1および第2の値の乗算結果213を加算器回路に提供することができる。いくつかの実施形態では、第1の値211は、ニューラルネットワークの第1の層に対する重みデータ(例えば、畳み込み演算のための重み値)および活性化データ(例えば、活性化関数の値)のうち一方の値を表してもよく、第2の値213は、ニューラルネットワークの第1の層に対する重みデータおよび活性化データの他方の値を表してもよい。
いくつかの実施形態では、乗算回路類216は、乗算器演算の代わりに、よりエネルギー効率が良い演算(例えば、加算器またはシフト演算)で乗算を実施することができるので、MACユニット215は、図1CのMACユニット140と同様に、ただしMACユニット140よりもエネルギー効率が良い形で、乗算および加算両方の機能を実施することができる。乗算回路類216については、以下の項で詳細に記載する。
図2Bは、本開示の例示の一実現例による、AIに関連する処理を実施する代替数字形式の一実施形態を示すブロック図である。図2Bを参照すると、いくつかの実施形態では、(b3 b2 b1 b0)によって示される4ビットデータ(B)は、第1のビット221(b0によって示される)と、2つ以上の第2のビット222((b2 b1)によって示される)とを含む所定の形式を有して、ゼロまたは2n(nは0以上の整数)の値を表すので、Bは値b0+2×β(式中、βは2n)を表すことができる。いくつかの実施形態では、4ビットデータBは、Bによって表される値の符号を表す、第3のビットb3を含む。例えば、この所定の形式によれば、B=(0 1 1 0)は、第1のビットb0としての「0」と、22(n=2)を表す第2のビット(b2 b1)としての「1 1」と、正の符号を表す「0」とを含み、それによって+8(=0+2×22)を表す。また、B=(0 1 1 1)は、第1のビットb0としての「1」と、22(n=2)を表す第2のビット(b2 b1)としての「1 1」と、正の符号を表す第3のビットb3としての「0」とを含み、それによって+9(=1+2×22)を表す。
図2Bはまた、それぞれの4ビットデータBによって表される十進数値225を示すマッピングテーブル220を示している。図2Bに示されるように、代替形式の4ビットデータB=(0 0 0 0)~(0 1 0 1)は、リニア数形式の場合と同じ値を表すことができるが、B=(0 1 1 0)および(0 1 1 1)は、リニア数形式の場合とは異なる値を表すことができる(図2Bの円で囲んだ範囲226を参照)。更に、図2Bに示されるようないくつかの実施形態では、上述した所定の形式を使用して、値6および7は代替数字形式で表されない。
いくつかの実施形態では、代替数字形式は、上述したのとは異なる形で所定の形式を定義することができる。例えば、第2のビット(b2 b1)として、「0 1」が21(n=1)を表し、「1 0」が22(n=2)を表し、「1 1」が23(n=3)を表す場合、4ビットデータBは、十進数値0~1、4~5、8~9、16~17を表すことができるので、表される値の範囲を0~17に拡張することができるが、値2~3、6~7、および10~15は表されないことがある。いくつかの実施形態では、第2のビットは2を超えるビットを含むことができ、第1のビットは1を超えるビットを含むことができる。例えば、代替数字形式は、第1のビットが(b1 b0)に対応し、第2のビット(b4 b3 b2)が2nを表すように、所定の形式を定義することができる。
図2Cは、本開示の例示の一実現例による、代替数字形式を使用して乗算を実施する回路類の一実施形態を示すブロック図である。図2Cを参照すると、アクセラレータ210(図2Aを参照)の乗算回路類216は、代替数字形式の第1の値211およびリリニア数形式の第2の値212に対して乗算を実施するため、マッピング回路類231、シフト回路類232、加算回路類234、累算器235、および/または符号生成器236を含んでもよい。いくつかの実施形態では、加算回路類234および累算器235は、図1Cにそれぞれ示される加算器および累算器と類似の構成を有してもよい。
この例では、代替数字形式の第1の値は、4ビット(b3 b2 b1 b0)を含むBによって示され、b0は第1のビットであり、(b2 b1)は2n(nは0以上の整数)を表す第2のビットであり、b3は第1の値の符号を表す第3のビット223である。この形式では、Bは値(b0+2×β)を表すことができ、β=2nである。リニア数形式の第2の値は、4ビット(a3 a2 a1 a0)を含むAによって示されるので、Aは値(a0+2×a1+4×a2)を表すことができる。乗算回路類216は、第1の値Bおよび第2の値Aを乗算して、値(b0+2×β)×(a0+2×a1+4×a2)=b0×(a0+2×a1+4×a2)+2n+1×(a0+2×a1+4×a2)に対応する乗算結果213を提供することができる。第1および第2の部分積2n+1×(a0+2×a1+4×a2)およびb0×(a0+2×a1+4×a2)はそれぞれ、pp1およびpp2によって示される。
B×A=pp1+pp2=2n+1×(a0+2×a1+4×a2)+b0×(a0+2×a1+4×a2)・・・・・・式(1)
例えば、B=(0 1 1 1)およびA=(0 1 1 1)の場合、図2Bに示されるマッピングにしたがって、β=2n=4を得ることができ、乗算回路類216は、十進数形態の(1+2×4)×(1+2×1+4×1)=63に対応する乗算結果を提供することができる。次に、乗算回路類216がどのようにして、代替数字形式を使用してエネルギー効率が良い形で乗算結果を提供することができるかについて記載する。
B×A=pp1+pp2=2n+1×(a0+2×a1+4×a2)+b0×(a0+2×a1+4×a2)・・・・・・式(1)
例えば、B=(0 1 1 1)およびA=(0 1 1 1)の場合、図2Bに示されるマッピングにしたがって、β=2n=4を得ることができ、乗算回路類216は、十進数形態の(1+2×4)×(1+2×1+4×1)=63に対応する乗算結果を提供することができる。次に、乗算回路類216がどのようにして、代替数字形式を使用してエネルギー効率が良い形で乗算結果を提供することができるかについて記載する。
いくつかの実施形態では、シフト回路類232は、データを2kで乗算するように、データを右方向にk回シフトすることができる、1つまたは複数のシフトレジスタであってもよい。いくつかの実施形態では、シフトレジスタのシフト制御入力信号は、シフトレジスタがいつ何回シフトされるかを決定することができる。いくつかの実施形態では、シフト回路類232は、指定のビット数分データを循環シフトすることができる、バレルシフタであってもよい。いくつかの実施形態では、シフト回路類232は、組込みビット演算を使用して循環シフトを実現することができる、図1Aのプロセッサ124と類似のプロセッサであってもよい。
いくつかの実施形態では、マッピング回路類231は、第1の値Bの第2のビット(b2 b1)の値がゼロであるか否かを決定するように構成されてもよい。マッピング回路類231は、第2のビット(b2 b1)の値がゼロであるという決定に応答して、ゼロの値を第1の部分積pp1(例えば、第1の乗算結果)として提供するように構成されてもよい。
いくつかの実施形態では、第1の値Bの第2のビット(b2 b1)の値がゼロではないという決定に応答して、シフト回路類232は、第2の値Aのビット(a2 a1 a0)の値をロードまたは格納してもよい(図2Cの22)。マッピング回路類231は、第1の値Bの第2のビット(b2 b1)の値を入力として受信し(図2Cの21)、整数nを取得し、(n+1)サイクルの間にシフト制御入力信号を生成して、シフト回路類232に(n+1)ビット分データをシフトさせるように構成されてもよい(図2Cの23)。(n+1)サイクルの間にシフト制御入力信号を受信したのに応答して、シフト回路類232は、格納されたビット値(a2 a1 a0)を(n+1)ビット分シフトして、第1の部分積pp1=2n+1×(a0+2×a1+4×a2)を出力してもよい(式1を参照)。例えば、B=(0 1 1 1)の場合、マッピング回路類231は、第1の値Bの第2のビット(b2 b1)の「1 1」を入力として受信し、n=2を取得し、(n+1)=3サイクルの間にシフト回路類232に入力されるシフト制御入力信号を生成して、シフト回路類232に格納された値(a0+2×a1+4×a2)を(n+1)ビット分シフトさせることができ、それは第1の部分積pp1=2n+1×(a0+2×a1+4×a2)に対応する。
いくつかの実施形態では、マッピング回路類231は、図2Bのマッピングテーブル220と類似のルックアップテーブルであってもよい。いくつかの実施形態では、マッピング回路類231は、第2のビット(b2 b1)の値に基づいてルックアップテーブルを探索し、整数nを取得または検索し、(n+1)サイクルの間にシフト回路類に入力されるシフト制御入力信号を生成することができる。いくつかの実施形態では、プロセッサ、例えば図1Aのプロセッサ124は、第2のビット(b2 b1)の値に基づいて、ルックアップテーブルを探索することができる。いくつかの実施形態では、マッピング回路類231は、二進数(b2 b1)をBから読み取り、二進数(b2 b1)の値に基づいて、(n+1)サイクルの間にシフト制御入力信号を生成するように構成されてもよい。例えば、二進数の「11」は十進数の「3」に等しいので、B=(0 1 1 1)の場合、マッピング回路類231は、二進数(「1 1」)の値に基づいて、(n+1)=3サイクルの間にシフト制御入力信号を生成することができる。
いくつかの実施形態では、シフト回路類232は、シフトされた値、例えば第1の部分積pp1=2n+1×(a0+2×a1+4×a2)を、加算回路類234に出力するように構成されてもよい(図2Cの24)。第1の部分積pp1を受信したのに応答して、加算回路類234は、受信した第1の部分積およびゼロ(このとき、累算された値は累算器235に存在しないため)を加算し、加算された値を累算器235に出力するように構成されてもよい(図2Cの25)。
次に、シフト回路類232は、第2の値Aのビット(a2 a1 a0)の値をロードまたは格納してもよい(図2Cの22)。いくつかの実施形態では、乗算回路類216は、第2の値Aのビット(a2 a1 a0)の値を再度ロードまたは格納しないように、(例えば、「ビットをクリアする」を低に設定することによって)最終値を保持するようにシフト回路類232を制御することができる。いくつかの実施形態では、乗算回路類216は、第1の値の第1のビット(b0)の値に基づいて、ビットの格納された値(a2 a1 a0)を出力するように、シフト回路類232を制御することができる。いくつかの実施形態では、乗算回路類216は、ゼロ(b0の値がゼロの場合)またはビットの格納された値(a2 a1 a0)(b0の値が「1」の場合)を加算回路類234に選択的に出力するように、シフト回路類232を制御することができる(図2Cの24)。このようにして、シフト回路類232は、第2の部分積pp2=b0×(a0+2×a1+4×a2)を加算回路類234に出力することができる(図2Cの24)。第2の部分積pp2を受信したのに応答して、加算回路類234は、第2の部分積pp2と、累算器235から前に受信していた第1の部分積pp1とを加算し(図2Cの27)、加算された値(例えば、pp1+pp2)を累算器235に出力するように構成されてもよい(図2Cの25)。加算された値を受信したのに応答して、累算器235は、加算された値(pp1+pp2)を符号生成器236に出力するように構成されてもよい。加算された値(pp1+pp2)を受信したのに応答して、符号生成器236は、第1の値Bの第3のビットb3の値223および第2の値Aの第3のビットa3の値233に基づいて、乗算結果213として、加算された値の正の値または加算された値の負の値を出力するように構成されてもよい(図2Cの28)。
図2Cに示される乗算回路類216は、代替数字形式を使用して2つの数字の乗算を実施することができ、それにより、乗算器演算の代わりによりエネルギー効率が良い演算(例えば、加算器またはシフト演算)で、それら2つの数字の乗算を実施することができる。更に、代替形式を使用して2つの4ビットの数字を乗算する際、乗算回路類216は、2つの部分積(例えば、式1のpp1およびpp2)を用いて乗算を実施し、それによって、リニア数形式と比較して、部分積(および部分積演算)の最大数を3から2に低減することができる。
図2Cは、代替数字形式の第1の値と、リニア数形式としての符号付き絶対数表現形式の第2の値との乗算を示している。しかしながら、本開示は、図2Cに示される実施形態に限定されない。第2の値が異なるリニア数形式であっても、例えば、2の補数形式または符号なし形式であっても、乗算回路類216は、代替数字形式の第1の値と、異なるリニア数形式の第2の値とを類似の方式で乗算することができる。例えば、第2の値が2の補数形式の場合、累算器235からの出力は2の補数形式であってもよく、したがって符号生成器236は、第1の値の第3のビットb3および第2の値の第3のビットa3に基づいて、乗算結果の符号を決定するだけでなく、符号決定の結果にしたがって、累算器出力を適切な2の補数形式に変換してもよい。第2の値が符号なし形式の場合、シフト回路類232は、図2Cの22で、(a2 a1 a0)の代わりに(a3 a2 a1 a0)の値を格納またはロードしてもよく、符号生成器236は、第1の値の第3のビットb3のみに基づいて乗算結果の符号を決定することができる。
図2Dは、本開示の例示の一実現例による、代替数字形式を使用して乗算を実施する回路類の別の実施形態を示すブロック図である。図2Dを参照すると、乗算回路類240は、(1)両方とも代替数字形式である第1の値241および第2の値242に対して乗算を実施すること、またしたがって(2)マッピング回路類244が、第1の値241の第2のビットの値を整数にマッピングするだけでなく、第2の値242の第2のビットの値も整数にマッピングするように構成されることを除いて、図2Cの乗算回路類216と同じ構成を有してもよい。
図2Dのこの例では、第1の値241は、代替数字形式を有し、4ビット(b3 b2 b1 b0)を含むBによって示され、b0は第1のビットであり、(b2 b1)は2n(nは0以上の整数)を表す第2のビットであり、b3は第1の値241の符号を表す第3のビットである。この形式では、Bは値(b0+2×β)を表すことができ、β=2nである。第2の値242も、代替数字形式を有し、4ビット(c3 c2 c1 c0)を含むCによって示され、c0は第1のビットであり、(c2 c1)は2m(mは0以上の整数)を表す第2のビットであり、c3は第2の値242の符号を表す第3のビットである。この形式では、Cは値(c0+2×γ)を表すことができ、γ=2mである。乗算回路類240は、第1の値Bおよび第2の値Cを乗算して、値(b0+2×β)×(c0+2×γ)=b0×c0+b0×2m+1+c0×2n+1+2n+1×2m+1に対応する乗算結果243を提供することができる。積項2n+1×2m+1、c0×2n+1、b0×2m+1、およびb0×c0はそれぞれ、pt1、pt2、pt3、およびpt4によって示される。
B×C=pt1+pt2+pt3+pt4=2n+1×2m+1+c0×2n+1+b0×2m+1+b0×c0・・・・・・式(2)
例えば、B=(0 1 1 1)およびC=(0 1 1 1)の場合、図2Bに示されるマッピングにしたがって、β=2n=4およびγ=2m=4を得ることができ(m=n=2)、乗算回路類240は、十進数形態の(23×23+1×23+1×23+1×1)=81に対応する乗算結果を提供することができる。次に、乗算回路類240がどのようにして、代替数字形式を使用してエネルギー効率が良い形で乗算結果を提供することができるかについて記載する。
B×C=pt1+pt2+pt3+pt4=2n+1×2m+1+c0×2n+1+b0×2m+1+b0×c0・・・・・・式(2)
例えば、B=(0 1 1 1)およびC=(0 1 1 1)の場合、図2Bに示されるマッピングにしたがって、β=2n=4およびγ=2m=4を得ることができ(m=n=2)、乗算回路類240は、十進数形態の(23×23+1×23+1×23+1×1)=81に対応する乗算結果を提供することができる。次に、乗算回路類240がどのようにして、代替数字形式を使用してエネルギー効率が良い形で乗算結果を提供することができるかについて記載する。
いくつかの実施形態では、シフト回路類232は、1の値(「1」)をロードまたは格納してもよい(図2Dの40)。マッピング回路類244は、第2の値Cの第2のビット(c2 c1)の値を入力として受信し(図2Dの41)、整数mを取得し、(m+1)サイクルの間にシフト制御入力信号を生成して、シフト回路類232に(m+1)ビット分データ(例えば、「1」)をシフトさせるように構成されてもよい(図2Dの42)。(m+1)サイクルの間にシフト制御入力信号を受信したのに応答して、シフト回路類232は、格納された値(例えば、「1」)を(m+1)ビット分シフトして、2m+1をその中に保持してもよい。次に、マッピング回路類244は、第1の値Bの第2のビット(b2 b1)の値を入力として受信し(図2Dの43)、整数nを取得し、(n+1)サイクルの間にシフト制御入力信号を生成して、シフト回路類232に、格納されたデータ(例えば、2m+1)を(n+1)ビット分シフトさせるように構成されてもよい(図2Dの44)。(n+1)サイクルの間にシフト制御入力信号を受信したのに応答して、シフト回路類232は、格納された値(例えば、2m+1)を(n+1)ビット分シフトして、積項pt1に対応する2n+1×2m+1を加算回路類234に出力してもよい(図2Dの46)。例えば、B=(0 1 1 1)およびC=(0 1 1 1)の場合、マッピング回路類244は、m=n=2を取得し、対応するシフト制御入力信号を生成することができ、それによってシフト回路類232は、格納された値(例えば、「1」)を最初に(m+1)=3ビット分、続いて(n+1)=3ビット分シフトして、積項pt1に対応する2n+1×2m+1(=64)を加算回路類234に出力することができる。
いくつかの実施形態では、シフト回路類232は、シフトされた値、例えば積項pt1=2n+1×2m+1を、加算回路類234に出力するように構成されてもよい(図2Dの46)。第1の積項pt1を受信したのに応答して、加算回路類234は、受信した第1の積項およびゼロ(このとき、累算された値は累算器235に存在しないため)を加算し、加算された値を累算器235に出力するように構成されてもよい(図2Dの47)。
いくつかの実施形態では、シフト回路類232は、第2の値Cの第1のビットc0の値をロードまたは格納してもよい(図2Dの45)。次に、マッピング回路類244は、第1の値Bの第2のビット(b2 b1)の値を入力として受信し(図2Dの43)、整数nを取得し、(n+1)サイクルの間にシフト制御入力信号を生成して、シフト回路類232に、格納されたデータ(例えば、第1のビットc0の値)を(n+1)ビット分シフトさせるように構成されてもよい(図2Dの44)。いくつかの実施形態では、マッピング回路類244は、第2のビット(b2 b1)の値を受信せず、整数nを取得しないように、シフト回路類232に出力された最終値(例えば、ここでは(n+1))を保持することができる。(n+1)サイクルの間にシフト制御入力信号を受信したのに応答して、シフト回路類232は、格納された値(例えば、第1のビットc0の値)を(n+1)ビット分シフトして、積項pt2に対応するc0×2n+1を加算回路類234に出力してもよい(図2Dの46)。積項pt2を受信したのに応答して、加算回路類234は、受信した積項pt2と、累算器235から前に受信していた積項pt1とを加算し(図2Cの49)、加算された値(例えば、pt1+pt2)を累算器235に出力するように構成されてもよい(図2Cの47)。
いくつかの実施形態では、シフト回路類232は、1の値(「1」)をロードまたは格納してもよい(図2Dの40)。マッピング回路類231は、第2の値Cの第2のビット(c2 c1)の値を入力として受信し(図2Dの41)、整数mを取得し、(m+1)サイクルの間にシフト制御入力信号を生成して、シフト回路類232に(m+1)ビット分データをシフトさせるように構成されてもよい(図2Dの42)。(m+1)サイクルの間にシフト制御入力信号を受信したのに応答して、シフト回路類232は、格納された値(例えば、「1」)を(m+1)ビット分シフトして、2m+1をその中に保持してもよい。いくつかの実施形態では、乗算回路類240は、第1の値の第1のビット(b0)の値に基づいて、格納された値2m+1を出力するように、シフト回路類232を制御することができる。いくつかの実施形態では、乗算回路類240は、ゼロ(b0の値がゼロの場合)または2m+1の格納された値(b0の値が「1」の場合)を加算回路類234に選択的に出力するように、シフト回路類232を制御することができる(図2Cの46)。このようにして、シフト回路類232は、積項pt3=b0×2m+1を加算回路類234に出力することができる(図2Dの46)。積項pt3を受信したのに応答して、加算回路類234は、受信した積項pt3と、累算器235から前に受信していた加算された値(pt1+pt2)とを加算し(図2Dの49)、新しく加算された値(例えば、pt1+pt2+pt3)を累算器235に出力するように構成されてもよい(図2Cの47)。
いくつかの実施形態では、シフト回路類232は、第2の値Cの第1のビットc0の値をロードまたは格納してもよい(図2Dの45)。いくつかの実施形態では、乗算回路類240は、第1の値の第1のビット(b0)の値に基づいて、第1のビットc0の格納された値を出力するように、シフト回路類232を制御することができる。いくつかの実施形態では、乗算回路類240は、ゼロ(b0の値がゼロの場合)または第1のビットc0の格納された値(b0の値が「1」の場合)を加算回路類234に選択的に出力するように、シフト回路類232を制御することができる(図2Cの46)。このようにして、シフト回路類232は、積項pt4=b0×c0を加算回路類234に出力することができる(図2Dの46)。積項pt4を受信したのに応答して、加算回路類234は、受信した積項pt4と、累算器235から前に受信していた前に加算された値(pt1+pt2+pt3)とを加算し(図2Dの49)、新しく加算された値(例えば、pt1+pt2+pt3+pt4)を累算器235に出力するように構成されてもよい(図2Cの47)。
いくつかの実施形態では、加算された値を受信したのに応答して、累算器235は、加算された値(pt1+pt2+pt3+pt4)を符号生成器236に出力するように構成されてもよい。加算された値(pt1+pt2+pt3+pt4)を受信したのに応答して、符号生成器236は、第1の値Bの第3のビットb3の値245および第2の値Aの第3のビットa3の値246に基づいて、乗算結果243として、加算された値の正の値または加算された値の負の値を出力するように構成されてもよい(図2Dの50)。
図2Dに示される乗算回路類240は、代替数字形式である2つの数字の乗算を実施することができ、それにより、乗算器演算の代わりによりエネルギー効率が良い演算(例えば、加算器またはシフト演算)で、それら2つの数字の乗算を実施することができる。更に、代替形式で2つの4ビットの数字を乗算する場合、乗算回路類216は、4つの積項(例えば、式2のpt1、pt2、pt3、およびpt4)を用いて乗算を実施し、それによって、両方の数字がリニア数形式である場合と比較して積項(および積演算)の最大数を6から4に低減することができる。
本開示のいくつかの実施形態では、デバイス(例えば、図2AのAIアクセラレータ210)は、ニューラルネットワークの第1の値(例えば、図2Cおよび図2Dの第1の値211または241)と第2の値(例えば、図2Cおよび図2Dの第2の値212または242)との乗算を実施するため、シフト回路類(例えば、図2Cおよび図2Dのシフト回路類232)と加算回路類(例えば、図2Cおよび図2Dの加算回路類234)とを含む、回路(例えば、図2A、図2C、および図2Dの乗算回路類216または240)を含む。第1の値は、第1のビット(例えば、図2Cおよび図2Dのb0)と、ゼロまたは2n(nは0以上の整数)の値を表す2つ以上の第2のビット(図2Bのマッピングテーブル226を参照)とを含む、所定の形式を有してもよい(例えば、図2Cおよび図2Dで、B=(0 1 1 1)の場合、22にマッピングされた(b2 b1))。回路類は、2つ以上の第2のビットが2nの値を表すとき、シフト回路類を介して第2の値(例えば、図2Cの(a2 a1 a0)の値)を(n+1)ビット分シフトして、第1の乗算結果(例えば、式1の第1の部分積pp1)を提供するように構成されてもよい。回路類は、第1の値の第1のビット(例えば、図2Cおよび図2Dのb0)の値に基づいて、ゼロまたは第2の値(例えば、図2Cの(a2 a1 a0)の値)を選択的に出力して、第2の乗算結果(例えば、式1の第2の部分積pp2)を提供するように構成されてもよい。回路類は、第1の乗算結果および第2の乗算結果を、加算回路類(例えば、図2Cおよび図2Dの加算回路類234および累算器235)を介して加算して、第1の値および第2の値の乗算の結果(例えば、図2Cの乗算結果213)を提供するように構成されてもよい。
いくつかの実施形態では、第1の値の2つ以上の第2のビットとしての「1 1」は、4の値を表してもよい。例えば、代替数字形式の4ビットデータBが(0 1 1 1)の場合、第2のビットとしての「1 1」は4(=22、n=2)を表すので、Bはb0+2×22=9にマッピングされる(図2Bのマッピングテーブル220も参照)。いくつかの実施形態では、第1の値の第1のビットは第1の値の最下位ビット(LSB)であってもよい。例えば、図2Bに示されるように、4ビットデータBの第1のビットb0はLSBである。いくつかの実施形態では、第1の値は更に、第1の値が符号ありまたは符号なしであるかを示す、第3のビット(例えば、図2Bの第3のビットb3)を含んでもよい(例えば、図2Bでは、第3のビットb3の値223はBの符号ビットである)。いくつかの実施形態では、回路類(例えば、図2Cの符号生成器236)は、第1の値の第3のビットの値に基づいて(例えば、図2Cの第3のビットb3の値223に基づいて)、第1の値および第2の値の乗算の結果(例えば、乗算結果213)の符号を決定するように構成されてもよい。
いくつかの実施形態では、回路類は、2つ以上の第2のビットがゼロの値を表すとき、ゼロの値を第1の乗算結果として提供するように構成されてもよい。例えば、図2Cを参照すると、マッピング回路類231は、第1の値Bの第2のビット(b2 b1)の値がゼロであるか否かを決定するように構成されてもよい。マッピング回路類231は、第2のビット(b2 b1)の値がゼロであるという決定に応答して、ゼロの値を第1の部分積pp1(例えば、第1の乗算結果)として提供するように構成されてもよい。いくつかの実施形態では、第1の値Bの第2のビット(b2 b1)の値がゼロではないという決定に応答して、シフト回路類232は、第2の値Aのビット(a2 a1 a0)の値をロードまたは格納してもよい(図2Cの22)。いくつかの実施形態では、第2の値は、リニア数形式を使用して二進数を表してもよい(例えば、図2Cでは、第2の値Aは符号付き絶対数表現形式である)。
いくつかの実施形態では、第2の値(例えば、図2Dの第2の値C)は、第1のビット(例えば、図2Dの第1のビットc0)と、ゼロまたは2m(mはゼロ以上の整数)の値(例えば、C=(0 1 1 1)の場合、第2のビット(c2 c1)は4=22、m=2を表す)を表す2つ以上の第2のビット(例えば、図2Dの第2のビット(c2 c1))とを備える、所定の形式を有してもよい。いくつかの実施形態では、回路類(例えば、図2Dの乗算回路類240)は更に、第1の値の2つ以上の第2のビットが2nの値を表し(例えば、第1の値Bの第2のビット(b2 b1)が4=22、n=2を表し)、第2の値の2つ以上の第2のビットが2mの値を表す(例えば、第2の値Cの第2のビット(c2 c1)が4=22、m=2を表す)とき、シフト回路類(例えば、図2Dのシフト回路類232)を介して2m+1の値を(n+1)ビット分シフトして、第3の乗算結果(例えば、式(2)の積項pt1=2n+1×2m+1)を提供するように構成されてもよい。回路類は更に、第2の値の第1のビット(例えば、図2Dの第2の値Cの第1のビットc0)の値に基づいて、ゼロまたは2n+1の値を選択的に出力して、第4の乗算結果(例えば、式(2)の積項pt2=c0×2n+1)を提供するように構成されてもよい。回路類は更に、第1の値の第1のビット(例えば、図2Dの第1の値Bの第1のビットb0)の値に基づいて、ゼロまたは2m+1の値を選択的に出力して、第5の乗算結果(例えば、式(2)の積項pt3=b0×2m+1)を提供するように構成されてもよい。回路類は更に、第1の値の第1のビット(例えば、図2Dの第1の値Bの第1のビットb0)の値に基づいて、ゼロまたは第2の値の第1のビット(例えば、図2Dの第2の値Cの第1のビットc0)の値を選択的に出力して、第6の乗算結果(例えば、式(2)の積項pt4=b0×c0)を提供するように構成されてもよい。回路類は更に、加算回路類(例えば、図2Dの加算回路類234および累算器235)を介して第3~第6の乗算結果を加算して(例えば、式(2)のpt1+pt2+pt3+pt4)、第1の値および第2の値の乗算の結果(例えば、図2Dの乗算結果243)を提供するように構成されてもよい。
いくつかの実施形態では、回路類(例えば、MACユニット140)は更に、重みデータ(例えば、入力データおよび重み値に対して畳み込み演算を実施する重み値)、および活性化関数(例えば、ニューラルネットワークの層における活性化関数の値)を表す活性化データを使用して、ニューラルネットワークの第1の層に対して畳み込みを実施するように構成されてもよく、第1の値(例えば、図2A、図2C、および図2Dの第1の値211または241)は、ニューラルネットワークの第1の層に対する重みデータおよび活性化データの一方の値を表してもよい。いくつかの実施形態では、第2の値(例えば、図2A、図2C、および図2Dの第2の値212または242)は、ニューラルネットワークの第1の層に対する重みデータおよび活性化データの他方の値を表してもよい。
図2Eは、本開示の例示の一実現例による、代替数字形式を使用して乗算を実施する方法を示すフローチャートである。概要では、方法は、シフト回路類によって、2つ以上の第2のビットが2nの値を表すとき、第2の値を(n+1)ビット分シフトして、第1の乗算結果を提供することを含む(251)。方法は、第1の値の第1のビットの値に基づいて、ゼロまたは第2の値を選択的に出力して、第2の乗算結果を提供することを含むことができる(252)。方法は、加算回路類によって、第1の乗算結果および第2の乗算結果を加算して、第1の値および第2の値の乗算の結果を提供することを含むことができる(253)。
方法は、ニューラルネットワークの第1の値(例えば、図2Cおよび図2Dの第1の値211または241)および第2の値(例えば、図2Cおよび図2Dの第2の値212または242)の乗算を実施することを含む。いくつかの実施形態では、第1の値は、第1のビット(例えば、図2Cおよび図2Dのb0)と、ゼロまたは2n(nは0以上の整数)の値(例えば、図2Cおよび図2Dで、B=(0 1 1 1)の場合、22(n=2)にマッピングされた(b2 b1))を表す2つ以上の第2のビットとを備える、所定の形式を有する。
251の更なる詳細では、いくつかの実施形態では、デバイス(例えば、図2AのAIアクセラレータ210)の回路類(例えば、図2A、図2C、および図2Dの乗算回路類216または240)は、2つ以上の第2のビットが2nの値(例えば、図2Cおよび図2Dで、B=(0 1 1 1)の場合、22(n=2)にマッピングされた(b2 b1))を表すとき、シフト回路類(例えば、図2Cおよび図2Dのシフト回路類232)を介して、第2の値(例えば、図2Cの(a2 a1 a0)の値)を(n+1)ビット分シフトして、第1の乗算結果(例えば、式1の第1の部分積pp1=2n+1×(a0+2×a1+4×a2))を提供してもよい。いくつかの実施形態では、第1の値の第1のビットは第1の値の最下位ビット(LSB)であってもよい。例えば、図2Bに示されるように、4ビットデータBの第1のビットb0はLSBである。いくつかの実施形態では、第1の値の2つ以上の第2のビットとしての「1 1」は、4の値を表してもよい。例えば、代替数字形式の4ビットデータBが(0 1 1 1)の場合、第2のビットとしての「1 1」は4(=22、n=2)を表すので、Bはb0+2×22=9にマッピングされる(図2Bのマッピングテーブル220も参照)。いくつかの実施形態では、第2の値はリニア数形式を使用して二進数を表してもよい。
いくつかの実施形態では、回路類は、2つ以上の第2のビットがゼロの値を表すとき、ゼロの値を第1の乗算結果として提供するように構成されてもよい。例えば、図2Cを参照すると、マッピング回路類231は、第1の値Bの第2のビット(b2 b1)の値がゼロであるか否かを決定するように構成されてもよい。マッピング回路類231は、第2のビット(b2 b1)の値がゼロであるという決定に応答して、ゼロの値を第1の部分積pp1(例えば、第1の乗算結果)として提供するように構成されてもよい。いくつかの実施形態では、第1の値Bの第2のビット(b2 b1)の値がゼロではないという決定に応答して、シフト回路類232は、第2の値Aのビット(a2 a1 a0)の値をロードまたは格納してもよい(図2Cの22)。いくつかの実施形態では、第2の値は、リニア数形式を使用して二進数を表してもよい(例えば、図2Cでは、第2の値Aは符号付き絶対数表現形式である)。
252の更なる詳細では、いくつかの実施形態では、回路類は、第1の値の第1のビット(例えば、図2Cおよび図2Dのb0)の値に基づいて、ゼロまたは第2の値(例えば、図2Cの(a2 a1 a0)の値)を選択的に出力して、第2の乗算結果(例えば、式1の第2の部分積pp2=b0×(a0+2×a1+4×a2))を提供するように構成されてもよい。
253の更なる詳細では、いくつかの実施形態では、回路類は、第1の乗算結果(例えば、式1の第2の部分積pp1)および第2の乗算結果(例えば、式1の第2の部分積pp2)を、加算回路類(例えば、図2Cおよび図2Dの加算回路類234および累算器235)を介して加算して、第1の値および第2の値の乗算の結果(例えば、図2Cの乗算結果213)を提供するように構成されてもよい。
いくつかの実施形態では、第1の値は更に、第1の値が符号ありまたは符号なしであるかを示す、第3のビット(例えば、図2Bの第3のビットb3)を含んでもよい(例えば、図2Bでは、第3のビットb3の値223はBの符号ビットである)。いくつかの実施形態では、回路類は、第1の値の第3のビットの値に基づいて(例えば、図2Cの第3のビットb3の値223に基づいて)、第1の値および第2の値の乗算の結果(例えば、乗算結果213)の符号を決定するように構成されてもよい。
いくつかの実施形態では、回路類(例えば、MACユニット140)は更に、重みデータ(例えば、入力データおよび重み値に対して畳み込み演算を実施する重み値)、および活性化関数(例えば、ニューラルネットワークの層における活性化関数の値)を表す活性化データを使用して、ニューラルネットワークの第1の層に対して畳み込みを実施するように構成されてもよく、第1の値(例えば、図2A、図2C、および図2Dの第1の値211または241)は、ニューラルネットワークの第1の層に対する重みデータおよび活性化データの一方の値を表してもよい。いくつかの実施形態では、第2の値(例えば、図2A、図2C、および図2Dの第2の値212または242)は、ニューラルネットワークの第1の層に対する重みデータおよび活性化データの他方の値を表してもよい。
図2Fは、本開示の別の例示の一実現例による、代替数字形式を使用して乗算を実施する方法を示すフローチャートである。概要では、方法は、シフト回路類によって、第1の値の2つ以上の第2のビットが2nの値を表し、第2の値の2つ以上の第2のビットが2mの値を表すとき、2m+1の値を(n+1)ビット分シフトして、第3の乗算結果を提供することを含む(261)。方法は、第2の値の第1のビットの値に基づいて、ゼロまたは2n+1の値を選択的に出力して、第4の乗算結果を提供することを含むことができる(262)。方法は、第1の値の第1のビットの値に基づいて、ゼロまたは2m+1の値を選択的に出力して、第5の乗算結果を提供することを含むことができる(263)。方法は、第1の値の第1のビットの値に基づいて、ゼロまたは第2の値の第1のビットの値を選択的に出力して、第6の乗算結果を提供することを含むことができる(264)。方法は、加算回路類によって、第3~第6の乗算結果を加算して、第1の値および第2の値の乗算の結果を提供することを含むことができる(265)。
いくつかの実施形態では、第2の値(例えば、図2Dの第2の値C)は、第1のビット(例えば、図2Dの第1のビットc0)と、ゼロまたは2m(mはゼロ以上の整数)の値を表す2つ以上の第2のビット(例えば、図2Dの第2のビット(c2 c1))とを備える、所定の形式を有してもよい。例えば、第2の値C=(0 1 1 1)の場合、第2のビット(c2 c1)は4=22、m=2を表す。
261の更なる詳細では、いくつかの実施形態では、デバイス(例えば、図2AのMACユニット215)の回路類(例えば、図2Dの乗算回路類240)は、第1の値の2つ以上の第2のビットが2nの値を表し(例えば、第1の値Bの第2のビット(b2 b1)が4=22、n=2を表し)、第2の値の2つ以上の第2のビットが2mの値を表す(例えば、第2の値Cの第2のビット(c2 c1)が4=22、m=2を表す)とき、シフト回路類(例えば、図2Dのシフト回路類232)を介して2m+1の値を(n+1)ビット分シフトして、第3の乗算結果(例えば、式(2)の積項pt1=2n+1×2m+1)を提供してもよい。例えば、図2Dを参照すると、第1の値B=(0 1 1 1)および第2の値C=(0 1 1 1)の場合、乗算回路類240は、第1の値Bの第2のビット(1 1)が4=22(n=2)を表し、第2の値Cの第2のビット(1 1)が4=22(m=2)を表すとき、シフト回路類232を介して23の値を3ビット分シフトして、2n+1×2m+1=64を第3の乗算結果として提供してもよい。
262の更なる詳細では、いくつかの実施形態では、回路類(例えば、図2Dの乗算回路類240)は、第2の値の第1のビット(例えば、図2Dの第2の値Cの第1のビットc0)の値に基づいて、ゼロまたは2n+1の値を選択的に出力して、第4の乗算結果(例えば、式(2)の積項pt2=c0×2n+1)を提供してもよい。例えば、図2Dを参照すると、第1の値B=(0 1 1 1)および第2の値C=(0 1 1 1)の場合、乗算回路類240は、ゼロまたは23を選択的に出力して、c0×2n+1=8を第4の乗算結果として提供してもよい。
263の更なる詳細では、いくつかの実施形態では、回路類(例えば、図2Dの乗算回路類240)は、第1の値の第1のビット(例えば、図2Dの第1の値Bの第1のビットb0)の値に基づいて、ゼロまたは2m+1の値を選択的に出力して、第5の乗算結果(例えば、式(2)の積項pt3=b0×2m+1)を提供してもよい。例えば、第1の値B=(0 1 1 1)および第2の値C=(0 1 1 1)の場合、乗算回路類240は、ゼロまたは23を選択的に出力して、b0×2m+1=8を第5の乗算結果として提供してもよい。
264の更なる詳細では、いくつかの実施形態では、回路類は、第1の値の第1のビット(例えば、図2Dの第1の値Bの第1のビットb0)の値に基づいて、ゼロまたは第2の値の第1のビット(例えば、図2Dの第2の値Cの第1のビットc0)の値を選択的に出力して、第6の乗算結果(例えば、式(2)の積項pt4=b0×c0)を提供してもよい。例えば、第1の値B=(0 1 1 1)および第2の値C=(0 1 1 1)の場合、乗算回路類240は、ゼロまたは1を選択的に出力して、b0×c0=1を第6の乗算結果として提供してもよい。
265の更なる詳細では、いくつかの実施形態では、回路類は、加算回路類(例えば、図2Dの加算回路類234および累算器235)を介して第3~第6の乗算結果を加算して(例えば、式(2)のpt1+pt2+pt3+pt4)、第1の値および第2の値の乗算の結果(例えば、図2Dの乗算結果243)を提供してもよい。例えば、第1の値B=(0 1 1 1)および第2の値C=(0 1 1 1)の場合、乗算回路類240は、pt1(=64)、pt2(=8)、pt3(=8)、およびpt4(=1)を加算して、81(=64+8+8+1)を第1の値Bおよび第2の値Cの乗算の結果として提供してもよい。
いくつかの例示的な実現例について記載してきたが、上記は例示であって限定ではなく、例として提示されていることが明白である。特に、本明細書に提示する例の多くには、方法行為またはシステム要素の特定の組み合わせが関与するが、それらの行為および要素は、同じ目的を遂行するために他の形で組み合わせることができる。1つの実現例に関連して考察される行為、要素、および特徴は、他の1つまたは複数の実現例における類似の役割から除外されないものとする。
本明細書に開示する実施形態と関連して記載される、様々なプロセス、動作、例示の論理、論理ブロック、モジュール、および回路を実現するのに使用される、ハードウェアおよびデータ処理構成要素は、汎用シングルもしくはマルチチッププロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他のプログラマブル論理デバイス、離散的ゲートもしくはトランジスタ論理、離散的ハードウェア構成要素、または本明細書に記載の機能を実施するように設計された上記のものの任意の組み合わせを用いて、実現または実施されてもよい。汎用プロセッサは、マイクロプロセッサ、または任意の従来のプロセッサ、コントローラ、マイクロコントローラ、もしくは状態機械であってもよい。プロセッサはまた、DSPとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、DSPコアと連動した1つもしくは複数のマイクロプロセッサ、または他の任意のかかる構成など、コンピューティングデバイスの組み合わせとして実現されてもよい。いくつかの実施形態では、特定のプロセスおよび方法は、所与の機能に特異的な回路類によって実施されてもよい。メモリ(例えば、メモリ、メモリユニット、記憶デバイスなど)は、本開示に記載する様々なプロセス、層、およびモジュールを完成させるかもしくは容易にする、データおよび/またはコンピュータコードを格納する、1つまたは複数のデバイス(例えば、RAM、ROM、フラッシュメモリ、ハードディスク記憶装置など)を含んでもよい。メモリは、揮発性メモリもしくは不揮発性メモリであるかまたはそれらを含んでもよく、本開示に記載する様々なアクティビティおよび情報構造をサポートする、データベース構成要素、オブジェクトコード構成要素、スクリプト構成要素、または他の任意のタイプの情報構造を含んでもよい。例示的実施形態によれば、メモリは、処理回路を介してプロセッサに通信可能に接続され、本明細書に記載の1つもしくは複数のプロセスを(例えば、処理回路および/またはプロセッサによって)実行するためのコンピュータコードを含む。
本開示は、様々な動作を遂行するための任意の機械可読媒体上における、方法、システム、およびプログラム製品を想到する。本開示の実施形態は、既存のコンピュータプロセッサを使用して、またはこの目的もしくは別の目的のために組み込まれる、適切なシステムのための専用コンピュータプロセッサによって、または配線接続システムによって、実現されてもよい。本開示の範囲内の実施形態は、格納された機械実行可能命令もしくはデータ構造を保持するかまたは有する、機械可読媒体を備えるプログラム製品を含む。かかる機械可読媒体は、汎用もしくは専用コンピュータ、またはプロセッサを有する他の機械によってアクセスすることができる、任意の利用可能な媒体であることができる。例として、かかる機械可読媒体は、RAM、ROM、EPROM、EEPROM、または他の光学ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、あるいは機械実行可能命令またはデータ構造の形態で所望のプログラムコードを保持または格納するのに使用することができ、汎用もしくは専用コンピュータまたはプロセッサを有する他の機械でアクセスすることができる、他の任意の媒体を含むことができる。上記のものの組み合わせはまた、機械可読媒体の範囲に含まれる。機械実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用処理機械に、特定の機能または機能群を実施させる、命令およびデータを含む。
本明細書で使用する用語および専門用語は、説明のためのものであって限定とみなされるべきではない。本明細書における、「~を含む」、「~を備える」、「~を有する」、「~を含有する」、「~を伴う」、「~によって特徴付けられる」、「~を特徴とする」およびそれらの変形の使用は、該用語とともに列挙される項目、それらの等価物、および追加の項目、ならびに排他的に該用語とともに列挙される項目から成る代替実現例を網羅することを意味する。一実現例では、本明細書に記載するシステムおよび方法は、記載する要素、行為、または構成要素のうちの1つ、2つ以上の各組み合わせ、または全てから成る。
単数形で言及される本明細書のシステムおよび方法の実現例または要素または行為に対する任意の言及は、複数のこれらの要素を含む実現例も包含することができ、本明細書の任意の実現例または要素または行為に対する複数形での任意の言及は、単一の要素のみを含む実現例も包含することができる。単数形または複数形での言及は、本明細書に開示されるシステムもしくは方法、それらの構成要素、行為、または要素を、単数または複数の構成に限定しようとするものではない。任意の情報、行為、または要素に基づいた任意の行為または要素に対する言及は、行為または要素が、任意の情報、行為、または要素に少なくとも部分的に基づく場合の実現例を含むことができる。
本明細書に開示する任意の実現例は、他の任意の実現例または実施形態と組み合わせることができ、「ある実現例」、「いくつかの実現例」、「一実現例」などに対する言及は、必ずしも相互に排他的ではなく、実現例と関連して記載する特定の特徴、構造、または特性が、少なくとも1つの実現例または実施形態に含まれ得ることを示すものとする。かかる用語は、本明細書で使用するとき、必ずしも全てが同じ実現例を指すものではない。任意の実現例は、本明細書に開示する態様および実現例と一致する任意の手法で、他の任意の実現例と包括的または排他的に組み合わせることができる。
図面、詳細な説明、または任意のクレームにおける技術的特徴に参照符号が付される場合、参照符号は、図面、詳細な説明、およびクレームの了解度を向上するために含まれるものである。したがって、参照符号が存在してもしなくても、任意のクレーム要素の範囲に対する限定的影響を何ら有さない。
本明細書に記載するシステムおよび方法は、それらの特性から逸脱することなく、他の特定の形態で具体化されてもよい。「約」、「およそ」、「実質的に」、または他の程度を表す用語に対する言及は、別段の明示がない限り、所与の測定値、単位、または範囲から±10%の変動を含む。結合された要素は、直接または介在要素を用いて、互いに電気的、機械的、または物理的に結合することができる。本明細書に記載するシステムおよび方法の範囲は、したがって、上述の記載ではなく添付のクレームによって示され、クレームの等価物の意味および範囲内にある変更は包含される。
「結合された」という用語およびその変形は、2つの部材を直接または間接的に互いに接合することを含む。かかる接合は、静的(例えば、恒久的もしくは固定)または可動(例えば、除去可能もしくは解放可能)であってもよい。かかる接合は、互いに直接結合され、または互いに対して結合された2つの部材によって、別個の介在部材および互いに結合された任意の追加の中間部材を使用して互いに結合された2つの部材によって、あるいは2つの部材の一方とともに単一の単位体として一体的に形成された介在部材を使用して互いに結合された2つの部材によって、達成されてもよい。「結合された」またはその変形が、追加の用語によって修正された場合(例えば、直接結合された)、上述の「結合された」の包括的定義は、追加の用語の平易な言葉の意味によって修正され(例えば、「直接結合された」は、任意の別個の介在部材を有さない2つの部材の接合を意味する)、それによって上述の「結合された」の包括的定義よりも狭い定義になる。かかる結合は機械的、電気的、または流体的であってもよい。
「または」に対する言及は包括的と解釈することができるので、「または」を使用して記載されるいずれの用語も、記載される用語の単一、2つ以上、および全てのいずれかを示すことができる。「『A』および『B』のうち少なくとも1つ」は、「A」のみ、「B」のみ、ならびに「A」および「B」の両方を含むことができる。「備える」または他のオープンな用語と併せて使用されるかかる言及は、追加の項目を含むことができる。
様々な要素のサイズ、寸法、構造、形状、および比率、パラメータの値、取付け構造、材料使用、色、向きにおける変形例など、記載される要素および行為の修正は、本明細書に開示する主題の教示および利点から実質的に逸脱することなく行うことができる。例えば、一体的に形成されるものとして示される要素は、複数の部分または要素で構築することができ、要素の位置を反転させるかまたは別の形で変動させることができ、離散的要素または位置の性質もしくは数を改変または変更することができる。他の置換、修正、変更、および省略も、本開示の範囲から逸脱することなく、開示の要素および動作の設計、動作条件、および配置に対して行うことができる。
本明細書における要素の位置に対する言及(例えば、「上側」、「下側」、「上方」、「下方」)は単に、図面における様々な要素の向きを説明するために使用されるものである。様々な要素の向きは、他の例示的実施形態によって異なってもよく、かかる変形は本開示に包含されるものとする。
Claims (15)
- ニューラルネットワークの第1の値および第2の値の乗算を実施する、シフト回路類および加算回路類を備える回路類を備えるデバイスであって、前記第1の値が、第1のビットと、ゼロまたは2n(nは0以上の整数)の値を表す2つ以上の第2のビットとを備える、所定の形式を有し、前記回路類が、
前記2つ以上の第2のビットが2nの値を表すとき、前記シフト回路類を介して前記第2の値を(n+1)ビット分シフトして、第1の乗算結果を提供し、
前記第1の値の前記第1のビットの値に基づいて、ゼロまたは前記第2の値を選択的に出力して、第2の乗算結果を提供し、
前記加算回路類を介して前記第1の乗算結果および前記第2の乗算結果を加算して、前記第1の値および前記第2の値の前記乗算の結果を提供するように構成された、
デバイス。 - 前記第1の値の前記第1のビットが前記第1の値の最下位ビットである、請求項1に記載のデバイス。
- 前記回路類が、前記2つ以上の第2のビットがゼロの値を表すとき、ゼロの値を前記第1の乗算結果として提供するように構成された、請求項1または2に記載のデバイス。
- 前記第2の値がリニア数形式を使用して二進数を表す、請求項1から3のいずれか一項に記載のデバイス。
- 前記第2の値が、第1のビットと、ゼロまたは2m(mはゼロ以上の整数)の値を表す2つ以上の第2のビットとを備える、前記所定の形式を有し、前記回路類が更に、
前記第1の値の前記2つ以上の第2のビットが2nの値を表し、前記第2の値の前記2つ以上の第2のビットが2mの値を表すとき、前記シフト回路類を介して2m+1の値を(n+1)ビット分シフトして、第3の乗算結果を提供し、
前記第2の値の前記第1のビットの値に基づいて、ゼロまたは2n+1の値を選択的に出力して、第4の乗算結果を提供し、
前記第1の値の前記第1のビットの値に基づいて、ゼロまたは2m+1の値を選択的に出力して、第5の乗算結果を提供し、
前記第1の値の前記第1のビットの値に基づいて、ゼロまたは前記第2の値の前記第1のビットの値を選択的に出力して、第6の乗算結果を提供し、
前記加算回路類を介して前記第3から第6の乗算結果を加算して、前記第1の値および前記第2の値の前記乗算の結果を提供するように構成された、請求項1から4のいずれか一項に記載のデバイス。 - 前記第1の値の前記2つ以上の第2のビットとしての「1 1」が4の値を表す、請求項1から5のいずれか一項に記載のデバイス。
- 前記第1の値が更に、前記第1の値が符号ありかまたは符号なしかを示す第3のビットを備え、好ましくは、前記回路類が、前記第1の値の前記第3のビットの値に基づいて、前記第1の値および前記第2の値の前記乗算の前記結果の符号を決定するように構成された、請求項1から6のいずれか一項に記載のデバイス。
- 前記回路類が更に、重みデータと活性化関数を表す活性化データとを使用して、前記ニューラルネットワークの第1の層に対する畳み込みを実施するように構成され、
前記第1の値が、前記ニューラルネットワークの前記第1の層に対する前記重みデータおよび前記活性化データの一方の値を表し、好ましくは、前記第2の値が、前記ニューラルネットワークの前記第1の層に対する前記重みデータおよび前記活性化データの他方の値を表す、請求項1から7のいずれか一項に記載のデバイス。 - ニューラルネットワークの第1の値および第2の値の乗算を実施することを含む方法であって、前記第1の値が、第1のビットと、ゼロまたは2n(nは0以上の整数)の値を表す2つ以上の第2のビットとを備える、所定の形式を有し、
前記第1の値および前記第2の値の前記乗算を実施することが、
前記2つ以上の第2のビットが2nの値を表すとき、シフト回路類によって前記第2の値を(n+1)ビット分シフトして、第1の乗算結果を提供することと、
前記第1の値の前記第1のビットの値に基づいて、ゼロまたは前記第2の値を選択的に出力して、第2の乗算結果を提供することと、
加算回路類によって、前記第1の乗算結果および前記第2の乗算結果を加算して、前記第1の値および前記第2の値の前記乗算の結果を提供することと、を含む、
方法。 - 前記第1の値の前記第1のビットが前記第1の値の最下位ビットである、請求項9に記載の方法。
- 前記第1の値および前記第2の値の前記乗算を実施することが、
前記2つ以上の第2のビットがゼロの値を表すとき、ゼロの値を前記第1の乗算結果として提供すること、および/または好ましくは、前記第2の値がリニア数形式を使用して二進数を表すことを含む、請求項9または10に記載の方法。 - 前記第2の値が、第1のビットと、ゼロまたは2m(mはゼロ以上の整数)の値を表す2つ以上の第2のビットとを備える、前記所定の形式を有し、
前記第1の値および前記第2の値の前記乗算を実施することが更に、
前記第1の値の前記2つ以上の第2のビットが2nの値を表し、前記第2の値の前記2つ以上の第2のビットが2mの値を表すとき、前記シフト回路類によって、2m+1の値を(n+1)ビット分シフトして、第3の乗算結果を提供することと、
前記第2の値の前記第1のビットの値に基づいて、ゼロまたは2n+1の値を選択的に出力して、第4の乗算結果を提供することと、
前記第1の値の前記第1のビットの値に基づいて、ゼロまたは2m+1の値を選択的に出力して、第5の乗算結果を提供することと、
前記第1の値の前記第1のビットの値に基づいて、ゼロまたは前記第2の値の前記第1のビットの値を選択的に出力して、第6の乗算結果を提供することと、
前記加算回路類によって、前記第3から第6の乗算結果を加算して、前記第1の値および前記第2の値の前記乗算の結果を提供することと、を含む、請求項9から11のいずれか一項に記載の方法。 - 前記第1の値の前記2つ以上の第2のビットとしての「1 1」が4の値を表す、請求項9から12のいずれか一項に記載の方法。
- 前記第1の値が更に、前記第1の値が符号ありかまたは符号なしかを示す第3のビットを備え、好ましくは、前記第1の値および前記第2の値の前記乗算を実施することが更に、
前記第1の値の前記第3のビットの値に基づいて、前記第1の値および前記第2の値の前記乗算の前記結果の符号を決定することを含む、請求項9から13のいずれか一項に記載の方法。 - 重みデータと活性化関数を表す活性化データとを使用して、前記ニューラルネットワークの第1の層に対する畳み込みを実施することを更に含み、
前記第1の値が、前記ニューラルネットワークの前記第1の層に対する前記重みデータおよび前記活性化データの一方の値を表し、好ましくは、前記第2の値が、前記ニューラルネットワークの前記第1の層に対する前記重みデータおよび前記活性化データの他方の値を表す、請求項9から14のいずれか一項に記載の方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/511,085 US10977002B2 (en) | 2019-07-15 | 2019-07-15 | System and method for supporting alternate number format for efficient multiplication |
US16/511,085 | 2019-07-15 | ||
PCT/US2020/041454 WO2021011316A1 (en) | 2019-07-15 | 2020-07-09 | System and method for supporting alternate number format for efficient multiplication |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022541721A true JP2022541721A (ja) | 2022-09-27 |
Family
ID=71842869
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021573175A Pending JP2022541721A (ja) | 2019-07-15 | 2020-07-09 | 効率的な乗算のための代替数字形式をサポートするシステムおよび方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10977002B2 (ja) |
EP (1) | EP3999949A1 (ja) |
JP (1) | JP2022541721A (ja) |
KR (1) | KR20220031117A (ja) |
CN (1) | CN114127680B (ja) |
WO (1) | WO2021011316A1 (ja) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11347477B2 (en) * | 2019-09-27 | 2022-05-31 | Intel Corporation | Compute in/near memory (CIM) circuit architecture for unified matrix-matrix and matrix-vector computations |
US11551148B2 (en) * | 2020-04-29 | 2023-01-10 | Marvell Asia Pte Ltd | System and method for INT9 quantization |
US11714998B2 (en) * | 2020-05-05 | 2023-08-01 | Intel Corporation | Accelerating neural networks with low precision-based multiplication and exploiting sparsity in higher order bits |
KR20220023490A (ko) * | 2020-08-21 | 2022-03-02 | 삼성전자주식회사 | 전자 장치 및 그 제어 방법 |
CN113361699B (zh) * | 2021-07-16 | 2023-05-26 | 安谋科技(中国)有限公司 | 乘法电路、片上系统和电子设备 |
US20230146445A1 (en) * | 2021-10-31 | 2023-05-11 | Redpine Signals, Inc. | Modular Analog Multiplier-Accumulator Unit Element for Multi-Layer Neural Networks |
KR20240077167A (ko) | 2022-11-24 | 2024-05-31 | 주식회사 모빌린트 | 합성곱 연산을 위한 데이터 처리 방법 및 컴퓨팅 장치 |
CN116402106B (zh) * | 2023-06-07 | 2023-10-24 | 深圳市九天睿芯科技有限公司 | 神经网络加速方法、神经网络加速器、芯片及电子设备 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4864529A (en) * | 1986-10-09 | 1989-09-05 | North American Philips Corporation | Fast multiplier architecture |
US5119325A (en) * | 1990-12-04 | 1992-06-02 | Motorola, Inc. | Multiplier having a reduced number of partial product calculations |
US20050228845A1 (en) * | 2004-04-12 | 2005-10-13 | Mathstar, Inc. | Shift and recode multiplier |
JP4988627B2 (ja) * | 2008-03-05 | 2012-08-01 | ルネサスエレクトロニクス株式会社 | フィルタ演算器及び動き補償装置 |
US20180232627A1 (en) * | 2017-02-16 | 2018-08-16 | Intel IP Corporation | Variable word length neural network accelerator circuit |
CN108564169B (zh) * | 2017-04-11 | 2020-07-14 | 上海兆芯集成电路有限公司 | 硬件处理单元、神经网络单元和计算机可用介质 |
CN107273090B (zh) * | 2017-05-05 | 2020-07-31 | 中国科学院计算技术研究所 | 面向神经网络处理器的近似浮点乘法器及浮点数乘法 |
EP3625670B1 (en) * | 2017-05-17 | 2022-02-23 | Google LLC | Performing matrix multiplication in hardware |
CN109521994B (zh) * | 2017-09-19 | 2020-11-10 | 华为技术有限公司 | 乘法硬件电路、片上系统及电子设备 |
CN109472353B (zh) * | 2018-11-22 | 2020-11-03 | 浪潮集团有限公司 | 一种卷积神经网络量化电路及量化方法 |
CN109635944B (zh) * | 2018-12-24 | 2020-10-27 | 西安交通大学 | 一种稀疏卷积神经网络加速器及实现方法 |
-
2019
- 2019-07-15 US US16/511,085 patent/US10977002B2/en active Active
-
2020
- 2020-07-09 JP JP2021573175A patent/JP2022541721A/ja active Pending
- 2020-07-09 CN CN202080051898.9A patent/CN114127680B/zh active Active
- 2020-07-09 KR KR1020227004925A patent/KR20220031117A/ko not_active Application Discontinuation
- 2020-07-09 EP EP20747291.1A patent/EP3999949A1/en active Pending
- 2020-07-09 WO PCT/US2020/041454 patent/WO2021011316A1/en unknown
Also Published As
Publication number | Publication date |
---|---|
WO2021011316A1 (en) | 2021-01-21 |
US20210019115A1 (en) | 2021-01-21 |
CN114127680A (zh) | 2022-03-01 |
US10977002B2 (en) | 2021-04-13 |
CN114127680B (zh) | 2024-07-30 |
KR20220031117A (ko) | 2022-03-11 |
EP3999949A1 (en) | 2022-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2022540548A (ja) | エネルギー効率的な入力オペランド固定アクセラレータにおいて小チャネルカウント畳み込みを実施するためのシステムおよび方法 | |
US11615319B2 (en) | System and method for shift-based information mixing across channels for shufflenet-like neural networks | |
JP2022541721A (ja) | 効率的な乗算のための代替数字形式をサポートするシステムおよび方法 | |
JP2022540550A (ja) | ニューラルネットワークアクセラレータにおいてスパースデータを読み取るおよび書き込むためのシステムおよび方法 | |
JP2022539660A (ja) | 畳み込みからの早期抜け出しのためのシステム、方法、およびデバイス | |
US11385864B2 (en) | Counter based multiply-and-accumulate circuit for neural network | |
JP2022539662A (ja) | 分散処理を加速させるパイプライン並列化のためのシステムおよび方法 | |
JP2022539495A (ja) | 負および正の値に対する非対称スケーリングファクタをサポートするシステムおよび方法 | |
US11429394B2 (en) | Efficient multiply-accumulation based on sparse matrix | |
JP2022539661A (ja) | 電力効率の良い乗累算回路類 | |
JP2022540301A (ja) | 逆畳み込みのための最適化 | |
US11899745B1 (en) | Systems and methods for speech or text processing using matrix operations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230703 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20240619 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20240702 |