JP2021510888A - 加速された量子化積和演算 - Google Patents

加速された量子化積和演算 Download PDF

Info

Publication number
JP2021510888A
JP2021510888A JP2020551488A JP2020551488A JP2021510888A JP 2021510888 A JP2021510888 A JP 2021510888A JP 2020551488 A JP2020551488 A JP 2020551488A JP 2020551488 A JP2020551488 A JP 2020551488A JP 2021510888 A JP2021510888 A JP 2021510888A
Authority
JP
Japan
Prior art keywords
input
precision
value
quantized
layer
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.)
Granted
Application number
JP2020551488A
Other languages
English (en)
Other versions
JP6946572B2 (ja
Inventor
ミシェル ヴァントリーズ,ダナ
ミシェル ヴァントリーズ,ダナ
ファン,ランディ
ディアマント,ロン
エルマー,トーマス
アミリネニ,サンディープ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Amazon Technologies Inc
Original Assignee
Amazon Technologies Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Amazon Technologies Inc filed Critical Amazon Technologies Inc
Publication of JP2021510888A publication Critical patent/JP2021510888A/ja
Application granted granted Critical
Publication of JP6946572B2 publication Critical patent/JP6946572B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/06Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
    • G06F7/14Merging, i.e. combining at least two sets of record carriers each arranged in the same ordered sequence to produce a single set having the same ordered sequence
    • G06F7/16Combined merging and sorting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/50Adding; Subtracting
    • G06F7/505Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination
    • G06F7/509Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination for multiple operands, e.g. digital integrators
    • G06F7/5095Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination for multiple operands, e.g. digital integrators word-serial, i.e. with an accumulator-register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/544Methods 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/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Software Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Neurology (AREA)
  • Image Analysis (AREA)
  • Complex Calculations (AREA)

Abstract

本出願で開示されるのは、ニューラルネットワークなどの用途における畳み込み演算またはその他の行列乗算を加速するための技法である。コンピュータ実装方法は、記憶装置から畳み込み演算のための低精度入力を受け取ることと、差分値を生成するために低精度入力から高精度ゼロ値を表す低精度値を減算することであって、低精度入力が高精度入力から非対称に量子化される、ことと、を含む。本方法はまた、積和を生成するために差分値に対して積和演算を行うことと、積和をスケーリング係数でスケーリングすることによって高精度出力を生成することと、を含む。【選択図】図9

Description

[0001]人工ニューラルネットワークとは、生物学的ニューラルネットワークに基づくアーキテクチャを有するコンピューティングシステムである。画像やビデオから物体、活動、文字などを識別または分類するなどの、特定のタスクをどのようにして行うかを学習するために、訓練データを使用して人工ニューラルネットワークを訓練することができる。ディープ・ニューラル・ネットワークなどの人工ニューラルネットワークは、多層の処理ノードを含み得る。層の各処理ノードは、先行する層の処理ノードによって生成された入力データに対して計算を行って出力データを生成することができる。例えば、処理ノードは、乗算や加算などの1組の算術演算を行って中間出力を生成するか、または中間出力に対して後処理演算を行って最終出力を生成し得る。ディープ・ニューラル・ネットワークなどの人工ニューラルネットワークは、数千以上の処理ノードおよび数百万以上のパラメータを含み得る。
[0002]一般に、ニューラルネットワークは、開発され、訓練され、多くのエンドユーザの利用に供され得る。次いでエンドユーザは、訓練されたニューラルネットワークを使用して、既存のネットワークを変更するかまたは変更せずに様々なタスク(推論プロセスと呼ばれ得る)を行うことができる。ニューラルネットワークが構築されているとき、最優先事項は、機能する正確なネットワークを取得することであり得る。よって、正確さを維持するために訓練中には一般に浮動小数点数および浮動小数点演算が使用される。訓練プロセスは、十分な記憶空間および計算パワーを有するコンピューティングシステムで行うことができ、多くの場合、リアルタイムの性能は不要であり、数時間、数日、または数ヵ月単位で行われ得る。しかしながら、推論プロセスは、事前に訓練されたネットワークを使用して、モバイル機器や組み込み機器などの、限られた記憶空間および計算パワーを有する多くのコンピューティングデバイス上で行われ得る。よって、多くの場合、大量の浮動小数点データを格納するメモリにアクセスすることおよび/または浮動小数点計算を行うこと(高電力消費を引き起こし得る)が、推論プロセスにとってのボトルネックになり得る。
[0003]図面を参照して本開示による様々な実施形態を説明する。
例示的な多層人工ニューラルネットワークを示す図である。 例示的な畳み込みニューラルネットワーク(CNN)を示す図である。 畳み込みニューラルネットワークにおいて畳み込み層によって入力画素配列に対して行われた畳み込み演算を示す図である。 畳み込みニューラルネットワークにおいて畳み込み層によって入力画素配列に対して行われた畳み込み演算を示す図である。 例示的な入力画素に対して行われた例示的な畳み込み演算、非線形活性化演算、およびプーリング演算を示す図である。 例示的な入力画素に対して行われた例示的な畳み込み演算、非線形活性化演算、およびプーリング演算を示す図である。 例示的な入力画素に対して行われた例示的な畳み込み演算、非線形活性化演算、およびプーリング演算を示す図である。 例示的な入力画素に対して行われた例示的な畳み込み演算、非線形活性化演算、およびプーリング演算を示す図である。 例示的な入力画素に対して行われた例示的な畳み込み演算、非線形活性化演算、およびプーリング演算を示す図である。 例示的な人工ニューラルネットワークのための例示的な装置を示す図である。 処理要素の配列を含む簡略化された例示的な計算エンジンを示す図である。 浮動小数点数を使用した例示的な畳み込み演算を示す図である。 整数を使用した例示的な畳み込み演算を示す図である。 特定の実施形態による整数を使用した例示的な畳み込み演算を示す図である。 特定の実施形態による例示的な畳み込み演算を行うための簡略化された例示的な計算エンジンを示す図である。 特定の実施形態による人工ニューラルネットワークにおける計算を加速する例示的な方法を示す簡略化された流れ図である。 特定の実施形態による例示的なコンピューティングデバイスを示す図である。
[0016]本明細書で開示される技法は、一般に、人工ニューラルネットワークに関し、より具体的には、人工ニューラルネットワークの量子化された計算を加速することに関する。
[0017]人工ニューラルネットワーク(「ニューラルネットワーク」とも呼ばれる)は、ある層上の処理ノードが別の層上の処理ノードに結合し得る、2つ以上の層に配置された複数の処理ノードを含み得る。処理ノードを、例えば、入力層、いくつかの中間層(隠れ層としても知られている)、および出力層を含む層に分割することができる。層(例えば、入力層、中間層など)上の各処理ノードは、入力データ要素の順次ストリームを受け取り、各入力データ要素を重みと乗算し、入力データ要素の加重和を計算し、加重和を次の層に転送し得る。畳み込みニューラルネットワークなどの人工ニューラルネットワークは、数千以上の処理ノード、ならびに数百万以上の重みおよび入力データ要素を含み得る。入力データ要素および重みは、一般に、正確を期して浮動小数点数(32ビット浮動小数点数など)によって表され得る。よって、計算に使用されるデータのサイズは非常に大きい場合がある。そのため、大きな記憶空間、高帯域幅のバス、および高い並列浮動小数点処理性能を有する処理ユニットが必要とされる場合があり、これにより、記憶空間、データ転送帯域幅、および/または計算パワーの限られた機器上でのニューラルネットワークの適用が制限され得る。いくつかの実施態様では、計算に使用されるデータのサイズを縮小し、推論中の計算の効率を高めるために、計算(行列乗算など)に整数(8ビットの整数など)の量子化された入力および重みデータが使用され、次いで計算結果が、後続の層によるさらなる処理のために浮動小数点数に逆量子化され得る。しかしながら、計算および量子化・逆量子化プロセスは、多くの場合依然として非常に複雑であり得る。
[0018]いくつかの実施形態によれば、ニューラルネットワークを使用した推論中に計算に使用される浮動小数点データは、(例えば8ビットの数に)非対称に量子化され、行列乗算(畳み込みなど)の前に前処理(例えばシフト)され得る。結果として、浮動小数点データ内のゼロ値が、バイアスを回避するために整数に(量子化誤差なしで)完全に量子化され得るのみならず、行列乗算前に整数「0」に変換されることにもなり、そのため行列乗算がさらに簡略化され得る。前処理により、実装面積がより小さいバイト単位で整列したメモリを使用した量子化データの格納および管理が可能となり得る。加えて、前処理(シフトなど)により、行列乗算のために行われるべき乗算および加算の回数を減らし、行列乗算の結果の逆量子化を簡略化することもできる。例えば、行列乗算は、他の技法による4組の乗算および加算ではなく、1組の乗算および加算を使用して行われ、行列乗算の結果を浮動小数点スケーリング係数でスケーリング(すなわち乗算)することによって逆量子化を行うことができる。したがって、長い浮動小数点値(32ビットの浮動小数点値など)を表すのに短い整数値(8ビットの整数など)が使用されるので、計算に使用されるデータのサイズを縮小することができ、行列乗算および逆量子化を著しく簡略化することができる。そのため、記憶空間および計算パワーの限られた機器が、推論プロセスを、場合によってはリアルタイムで処理することができる。
[0019]本明細書で使用される場合、2つのノード間の接続は必ずしも2つのノード間に物理的な接続があることを意味するとは限らない。いくつかの実施形態では、この接続は、あるノードと関連付けられた値と別のノードと関連付けられた値との間の関係を指し得る。例えば、2つのノード間の接続は、一方のノード上の値が他方のノード上の値を決定する際にどのように重み付けされるかを指示する係数(重みなど)によって表され得る。
[0020]本明細書で使用される場合、ネットワークノード、ノード、処理ノード、ニューラル・ネットワーク・ノード、またはニューロンとは、必ずしもハードウェアユニットまたは物理的な機器を指すとは限らない。いくつかの実施形態では、ネットワークノード、ノード、処理ノード、ニューラル・ネットワーク・ノード、またはニューロンとは、1組の入力値の加重和などの1組の算術演算を行うように構成された処理要素(PE)のセットを指し得る。いくつかの実施形態では、ネットワークノード、ノード、処理ノード、ニューラル・ネットワーク・ノード、またはニューロンとは、1組の入力値の加重和などの1組の算術演算を指し得る。
[0021]本明細書で使用される場合、量子化とは、大きいデータ型の数(32ビットの浮動小数点数など)をより小さいデータ型の数(8ビットの符号付きまたは符号なしの整数など)に変換することを指し、逆量子化(または再量子化)とは、小さいデータ型の数から大きいデータ型の数を回復することを指し得る。量子化と逆量子化とは、互いに逆の線形変換であり得る。ニューラルネットワークでは、量子化された値は、大量の低精度演算が許容できる場合(畳み込みなど)に使用され、逆量子化された値は、高精度演算が好ましい場合(活性化など)に使用され得る。
[0022]以下の説明では、様々な実施形態が説明される。説明を目的として、実施形態の十分な理解を提供するために具体的な構成および詳細が記載される。しかしながら、それらの実施形態はそれらの具体的な詳細なしでも実施され得ることも当業者には理解されるであろう。さらに、説明される実施形態を不明瞭にしないように周知の特徴が省略または簡略化される場合もある。各図および説明は限定のためのものではない。「例」という語は、本明細書では、「例、具体例、または実例の役割を果たすこと」を意味するために使用される。本明細書で「例」として記載される実施形態または設計は、必ずしも、他の実施形態または設計に優って好ましいかまたは有利であると解釈されるとは限らない。
[0023]人工ニューラルネットワークは、機械学習の研究および産業用途で使用されてきており、例えば、画像認識、音声認識、コンピュータビジョン、テキスト処理などにおいて多くの画期的な成果を達成してきた。ニューラルネットワークにおける基本計算単位は、ニューロン(ノードとも呼ばれる)である。ニューロンは、ある他のニューロンまたは外部ソースから入力を受け取り、出力を計算し得る。各入力は、他の入力に対するその入力の重要度に基づいて割り当てられ得る、関連付けられた重み(w)を有し得る。ニューロンはまた、その入力の加重和に関数(非線形関数など)を適用し得る。
[0024]フィードフォワード・ニューラル・ネットワークとは、人工ニューラルネットワークの1種である。これは、層として配置された多数のノードを含み得る。隣接する層のノードは、その間に接続またはエッジを有し得る。これらの接続は接続と関連付けられた対応する重みを有し得る。情報は、入力ノードから、(もしあれば)隠れノードを通って出力ノードに流れ得る。このネットワークにはサークルやループはない。対照的に、リカレント・ニューラル・ネットワーク(長・短期記憶(LSTM)ネットワークなど)は、サークルまたはループを形成するノード間の接続を含み得る。
[0025]図1に、例示的な多層ニューラルネットワーク100を示す。多層ニューラルネットワーク100は、入力層110と、隠れ(または中間)層120と、出力層130とを含み得る。多くの実施態様では、多層ニューラルネットワーク100は、2つ以上の隠れ層を含み、ディープ・ニューラル・ネットワークと呼ばれ得る。一般に、任意の連続関数をモデル化するには、単一の隠れ層を有するニューラルネットワークで十分であり得る。しかしながら、そのようなネットワークは、複数の隠れ層を有するニューラルネットワークと比較して飛躍的に多数のノードを必要とし得る。ディープ・ニューラル・ネットワークを比較的浅いネットワークよりずっとうまく機能するように訓練できることが示されている。
[0026]入力層110は、外界からネットワークに情報(すなわち入力データ)を提供し得る複数の入力ノード(ノード112、ノード114、およびノード116など)を含み得る。入力ノードは情報を次の層に渡してもよく、入力ノードによって計算が行われなくてもよい。隠れ層120は、ノード122、ノード124、およびノード126などの、複数のノードを含み得る。隠れ層のノードには外界との直接接続がなくてもよい(よって「隠れ」の名がある)。隠れ層のノードは計算を行い、入力ノードからの情報を次の層(別の隠れ層や出力層130など)に転送し得る。フィードフォワード・ニューラル・ネットワークには単一の入力層および単一の出力層があり得るが、フィードフォワード・ニューラル・ネットワークの隠れ層はゼロかまたは複数であり得る。出力層130は、特定のオブジェクトまたは活動を認識したり、条件または動作を決定したりするなど、情報を計算し、ネットワークから外界に転送する役割を果たす複数の出力ノードを含み得る。
[0027]図1に示されるように、フィードフォワード・ニューラル・ネットワークでは、(もしあればバイアスノードを除く)ノードは、直接先行する層およびすぐ次の層内の(もしあればバイアスノードを除く)すべてのノードへの接続を有し得る。よって、これらの層は全結合層と呼ばれ得る。ノード間のすべての接続が接続と関連付けられた重みを有し得るが、図1にはそれらの重みの一部だけしか示されていない。複雑なネットワークでは、数百または数千のノードおよび数千または数百万のノード間の接続があり得る。
[0028]上記のように、フィードフォワード・ニューラル・ネットワークは、ゼロ(単層パーセプトロンと呼ばれる)、または1つもしくは複数の隠れ層(多層パーセプトロン(MLP)と呼ばれる)を含み得る。たとえ図1には多層パーセプトロンに単一の隠れ層しか示されていないとしても、多層パーセプトロンは、(1つの入力層および1つの出力層に加えて)1つまたは複数の隠れ層を含み得る。多くの隠れ層を有するフィードフォワード・ニューラル・ネットワークは、ディープ・ニューラル・ネットワークと呼ばれ得る。単層パーセプトロンは線形関数のみを学習し得るが、多層パーセプトロンは非線形関数を学習することができる。
[0029]図1に示される例では、ノード112は、1の値を有するバイアスノードであり得るか、または通常の入力ノードであり得る。ノード114およびノード116は、入力データセットに依存する数値であり得る、外部入力X1および外部入力X2を取り得る。上記のように、入力層110では計算が行われず、よって、入力層110のノード112、ノード114、およびノード116からの出力は、それぞれ、1、X1、およびX2であり、これらは隠れ層120に供給され得る。
[0030]図1に示される例では、ノード122は、1の値を有するバイアスノードであり得るか、または通常のネットワークノードであり得る。隠れ層120のノード124およびノード126の出力は、入力層110からの出力(すなわち、1、X1、X2など)と、接続115と関連付けられた重みとに依存し得る。例えば、ノード124は、数値入力X1および数値入力X2を取り、それらの入力と関連付けられた重みw1および重みw2を有し得る。加えて、ノード124は、重みw0と関連付けられた、1などの(バイアスと呼ばれる)別の入力も有し得る。バイアスの主機能は、あらゆるノードに(ノードが受け取る通常の入力に加えて)訓練可能な一定値を提供することである。バイアス値は、1が活性化関数を左または右にシフトさせることを可能にし得る。たとえ図1にはノード124への3つの入力しか示されていなくても、様々な実施態様において、ノードは、数十、数百、数千、またはそれ以上の入力および関連付けられた重みを含み得ることに留意されたい。
[0031]ノード124からの出力Yは次式で計算され得る。

Y=f(w1×X1+w2×X2+w0)(1)

式中、関数fは、多くの場合活性化関数と呼ばれる非線形関数であり得る。ノードがK個の入力を有する場合、ノードからの出力は次式で計算され得る。
Figure 2021510888

よって、各ニューラルネットワーク層上の計算は、入力行列と重み行列との乗算および行列乗算の積に適用される活性化関数として説明され得る。次いで、中間層上のノードからの出力が、出力層130などの次の層上のノードに供給され得る。
[0032]大部分の実世界の関数は非線形であり、ニューロンがこれらの非線形表現を学習できることが望ましいので、活性化関数の目的は、ニューラル・ネットワーク・ノードの出力に非線形性を導入することである。活性化関数は、単数を取り、その単数に対して特定の固定された数学演算を行い得る。人工ニューラルネットワークではいくつかの活性化関数が使用され得る。1つの例示的な活性化関数がシグモイド関数σ(x)であり、シグモイド関数σ(x)は実数値の入力を取り、その入力を0から1までの値に変換する。
σ(x)=1/(1+exp(−x))(3)
別の例示的な活性化関数がTanh関数であり、Tanh関数は実数値の入力を取り、その入力を[−1,1]の範囲内の値に変換する。
tanh(x)=2σ(2x)−1(4)
第3の例示的な活性化関数が正規化線形ユニット(ReLU)関数である。ReLU関数は実数値の入力を取り、その入力を0より上で閾値処理する(すなわち、負の値を0で置換する)。
f(x)=max(0,x)(5)
別の例示的な活性化関数がLeaky ReLU関数であり、これは次式として定義され得る。
Leaky−ReLU(x)=max(0,x)+αmin(0,x)(6)
式中、αは、事前に決定されたパラメータまたは学習できるパラメータであり得る。
[0033]図1に示される例の出力層130は、隠れ層120から入力を取り、接続125と関連付けられた重みを使用して隠れノードと同様の計算を行い得るノード132およびノード134を含み得る。計算結果(Y1およびY2)は多層パーセプトロンの出力である。いくつかの実施態様では、分類のためのMLPにおいて、ソフトマックス関数が出力層において活性化関数として使用され得る。ソフトマックス関数は、実数値のスコアのベクトルを取り、そのベクトルを、合計が1になる0から1までの値のベクトルにマップする。
[0034]所与の入力特徴セットX=(x1,x2,…)およびターゲットYについて、多層パーセプトロンは、特徴と分類または回帰のためのターゲットとの間の関係を学習することができる。多層パーセプトロンは、逆伝搬アルゴリズムを使用して学習し得る。(多くの場合BackPropと呼ばれる)誤差の逆方向伝搬は、人工ニューラルネットワークを訓練できるいくつかの方法のうちの1つである。BackPropは、誤差を低減するためにニューラルネットワークのパラメータを変更ことによってラベル付き訓練データおよびノードにおける誤差から学習する教師あり訓練方式であり得る。
[0035]上記のように、人工ニューラルネットワーク内の隣接する層のノード間の接続は接続と関連付けられた重みを有し、重みは、所与の入力ベクトルについて出力ベクトルが何であるかを決定し得る。学習または訓練プロセスによりこれらの接続に適切な重みが割り当てられ得る。いくつかの実施態様では、重みの初期値はランダムに割り当てられ得る。訓練データセット内のあらゆる入力について、人工ニューラルネットワークの出力が観察され、予期された出力と比較され、予期された出力と観察された出力との間の誤差が前の層に逆伝搬され得る。重みは、誤差に基づいてしかるべく調整され得る。このプロセスは、出力誤差が所定の閾値を下回るまで繰り返される。
[0036]誤差の逆方向伝搬は、勾配を決定するために入れ子関数y=f(g(x))に使用される連鎖律に基づくものであり得る。
Figure 2021510888

式中、
Figure 2021510888

は、活性化関数の導関数であり、
Figure 2021510888

は重みwに比例し得る。出力ノードにおける誤差が計算され、勾配を計算するためにネットワークを介して逆伝搬され得る。勾配降下法などの最適化法が、ネットワークにおける重みを調整して出力層での誤差を低減するために使用され得る。順方向伝搬は出力層で大規模行列をベクトルで乗算するまで各層で大規模行列を連続して乗算することを伴い得るので、逆伝搬は順方向伝搬よりも計算上安くつく可能性がある。逆伝搬ではまず、行列を第1のベクトルで乗算して第2のベクトルを取得し、別の行列を第2のベクトルで乗算して第3のベクトルを取得し、以下同様に行い得る。言い換えると、逆伝搬は、行列・行列乗算の代わりにより効率のよい行列・ベクトル乗算を使用する。
[0037]重み調整の後、今度は重みが誤差を最小化するように調整されているので、ネットワークは同じ入力に対して前よりうまく機能するはずである。このプロセスは、訓練データセット内のすべての訓練サンプルに対してこれらのサンプルから学習するために繰り返され得る。
[0038]多くの場合、上記のようなフィードフォワード・ニューラル・ネットワークを、画像分類などの実世界の用途に使用することは、実際的ではない。例えば、200×200画素の二次元(2D)画像では、40,000個の入力ノードがニューラルネットワークにおいて使用され得る。隠れ層が20,000個のノードを有する場合、重みの行列のサイズは40,000×20,000(すなわち8億個の要素)になる。各重みが32ビット(すなわち4バイト)の浮動小数点値である場合、重みに使用される合計メモリは3.2GBになる。これは第1層だけについてである。層の数が増加するにつれて、重みのサイズも増加し得る。加えて、個々の画素を使用して画像をベクトル化すると、画像の複雑な2D空間構造が無視される可能性もある。
[0039]これらの問題を克服する1つの方法は、上記のような大規模行列乗算ではなくより小さい畳み込みフィルタを使用して2D畳み込みを行う畳み込みニューラルネットワークを使用することである。1組の畳み込みフィルタ(11×11行列など)を学習することは、大規模行列(40,000×20,000など)を学習するよりずっと容易で高速であり得る。また2D畳み込みは、当然ながら、画像の2D構造を考慮に入れることもできる。畳み込みニューラルネットワークは、局所接続性および重み共有を有するフィードフォワード・ニューラル・ネットワークとして説明され得る。局所接続性は、畳み込みフィルタが、それが作用する画像よりずっと小さい次元を有し得ることを指す。重み共有は、畳み込みを行うときに画像全体にわたって同じフィルタが使用され得ることに起因するものであり、これは、画像内の多くの位置で同じローカルフィルタが使用されることを意味する。言い換えると、画像内の異なる位置のすべてのフィルタリング間で重みが共有される。
[0040]畳み込みニューラルネットワーク(ConvNetまたはCNNとも呼ばれる)は、画像認識や分類などの用途に非常に有効なニューラルネットワークの一種である。例えば、CNNは、ロボットや自動運転車で使用するために、顔、物体、および交通標識を識別するのに使用され得る。CNNは、(文の分類などの)自然言語処理タスクでも使用され得る。手書き数字認識のために1990年代にYann LeCunらによって開発されたLeNetが、深層学習の分野を推進するのに役立った最初の畳み込みニューラルネットワークのうちの1つである。近年、LeNetを改善するためにいくつかの新しいアーキテクチャが提案されているが、それらはすべてLeNetからの主概念を使用している。
[0041]図2に、画像またはオブジェクトの分類のための例示的な畳み込みニューラルネットワーク(CNN)200を示す。CNN200は、次の4つの主な演算を含み得る。(1)畳み込み、(2)非線形関数(ReLUなど)、(3)プーリングまたはサブサンプリング、および(4)分類(全結合層)。これらの演算は、あらゆる畳み込みニューラルネットワークの基本構成要素であり得る。CNNが異なればこれら4つの主な演算の異なる組み合わせも異なり得る。
[0042]入力画像210などの分類されるべき画像が、画素値の行列で表され得る。入力画像210は、各チャネルが画像の特定の構成要素を表す、複数のチャネルを含み得る。例えば、デジタルカメラからの画像は、赤チャネル、緑チャネル、および青チャネルを有し得る。各チャネルは、0から255(すなわち8ビット)の範囲内の画素値を有する画素の2D行列で表され得る。グレースケール画像はただ1つのチャネルを有し得る。以下の説明では、CNN200を使用した単一の画像チャネルの処理を説明する。他のチャネルも同様に処理され得る。
[0043]図2に示されるように、入力画像210は、第1のフィルタを使用して第1の畳み込み層215によって処理され得る。畳み込みの詳細については、図3Aおよび図3Bを参照して後述する。第1の畳み込み層215は、上記のような非線形活性化関数(ReLUなど)も行い得る。第1の畳み込み層215からの出力行列220は、入力画像210より小さい次元を有し、畳み込み特徴、活性化マップ、または特徴マップと呼ばれ得る。第1の畳み込み層215は、複数の出力行列(または特徴マップ)220を生成するために複数のフィルタを使用して入力画像210に対して畳み込みを行い得る。使用されるフィルタの数は、畳み込み層の深さと呼ばれ得る。図2に示される例では、第1の畳み込み層215は深さ3を有し得る。出力行列(または特徴マップ)220はプーリング層225に渡され、そこで出力行列220は、行列230を生成するためにサブサンプリングまたはダウンサンプリングされ得る。プーリング演算の詳細については、図4Dおよび図4Eを参照して後述する。
[0044]行列230は、フィルタを使用して第2の畳み込み層235によって処理され得る。上記のように非線形活性化関数(ReLUなど)も第2の畳み込み層235によって行われ得る。第2の畳み込み層235からの出力行列240(または特徴マップ)は行列230より小さい次元を有し得る。第2の畳み込み層235は、複数の出力行列(または特徴マップ)240を生成するために複数のフィルタを使用して行列230に対して畳み込みを行い得る。図2に示される例では、第2の畳み込み層235は深さ6を有し得る。出力行列240はプーリング層245に渡され、そこで出力行列240は、行列250を生成するためにサブサンプリングまたはダウンサンプリングされ得る。
[0045]プーリング層245からの二次元出力行列250は、平滑化層255によって一次元(1D)ベクトルに平滑化され、図1に記載されるように全結合層260(すなわち、多層パーセプトロン(MLP))を通され得る。全結合層260は、平滑化層255からの1D出力ベクトルを取る入力層270(図1の入力層110など)を含み得る。全結合層260は、隠れ層280(図1の隠れ層120など)および出力層290(図1の出力層130など)も含み得る。全結合層260は、特徴マップまたは行列250と、例えば、ソフトマックス関数とを使用して、入力画像210内のオブジェクトをいくつかのカテゴリのうちの1つに分類し得る。
[0046]全結合層の演算は行列乗算で表され得る。例えば、入力層270上にM個のノードがあり、隠れ層280上にN個のノードがあり、入力X=[x,x,x,…,x]である場合、入力層270上のM個のノードと隠れ層280上のN個のノードとの間の接続の重みを次式で表すことができる。
Figure 2021510888

隠れ層280の出力Yは次式によって決定され得る。
Figure 2021510888

全結合層でM個の入力を各々含むK個のサンプルのバッチが受け取られる場合、入力は、それらK個のサンプルについてのK×M行列で表され得る。隠れ層280の出力Yは、K×N個の要素を含み、2D行列乗算によって決定され得る。
[0047]CNN内の畳み込み演算は、入力画像210から特徴を抽出するために使用され得る。畳み込み演算は、入力画像の小領域を使用して画像特徴を抽出することによって画素間の空間関係を保持する。畳み込みでは、行列(フィルタ、カーネル、または特徴検出器と呼ばれる)が、特定のステップサイズ(ストライドと呼ばれる)で入力画像(または特徴マップ)上をスライドし得る。位置(またはステップ)ごとに、フィルタ行列と入力画像におけるオーバーラップ行列との間の要素別の乗算が計算され、合計されて、出力行列(特徴マップなど)の単一要素を表す最終値が取得され得る。よって、フィルタは、元の入力画像から特徴を検出するように作用し得る。
[0048]図3Aおよび図3Bに、畳み込みニューラルネットワークにおいて畳み込み層によってフィルタ310を使用して入力画素配列320に対して行われた畳み込み演算を示す。入力画素配列320は、入力画像、入力画像のチャネル、または別の畳み込み層もしくはプーリング層によって生成された特徴マップを含み得る。図3Aに、第1のステップで入力画素配列320の第1の領域322に対して行われた畳み込み演算を示す。図3Bに、フィルタ310を1ストライドだけスライドさせた後に第2のステップで入力画素配列320の第2の領域324に対して行われた畳み込み演算を示す。
[0049]フィルタ310は二次元行列を含んでいてもよく、2D行列の各要素は重みを表す。フィルタ310の重みは、画像内の画素値の空間分布から特定の特徴を検出または抽出するように設計または訓練され得る。抽出された特徴は、人間の目にとって有意である場合もそうでない場合もある。入力画素配列から異なる特徴を検出または抽出するために異なるフィルタが使用され得る。例えば、いくつかのフィルタは、画像内のエッジを検出するか、または画像を鮮明化もしくは不鮮明化するために使用され得る。フィルタ310は、R行(高さ)、S列(幅)を有し、高さH画素、幅W画素を有し得る入力画素配列320より通常は小さい。フィルタ310の各重みは、入力画素配列320におけるR行S列の領域内の画素にマップされ得る。例えば、図3Aに示されるように、畳み込み層(第1の畳み込み層215や第2の畳み込み層235など)または畳み込み層の処理ノードは、入力画素配列320の(R×S画素を含む)領域322の画素値を受け取り、フィルタ310内と領域322内との対応する要素間の要素別の乗算を行い、要素別の乗算の積を合計して畳み込み出力値332を生成し得る。言い換えると、畳み込み出力値332は、
Figure 2021510888

による、フィルタ310内の重みと領域322内の対応する画素との間の乗算結果の和、すなわち、フィルタ310を表す行列と領域322の画素値を表す行列との間のドット積であり得る。
[0050]同様に、図3Bに示されるように、畳み込み層(畳み込み層の別の処理ノードなど)も、入力画素配列320の(R×S画素を含む)領域324の画素値を受け取り、フィルタ310内と領域324内との対応する要素間の要素別の乗算を行い、要素別の乗算の積を合計して畳み込み出力値334を生成し得る。図3Bに示されるように、畳み込み演算を、事前に決定されたストライドDでスライディングウィンドウ方式で行うことができる。例えば、図3Bに示される例では、領域324は領域322から(画素単位で)距離Dのところにあり、次の畳み込み演算のための次の領域は、領域324から同じ距離Dのところに位置し得る。ストライドDは、フィルタ310の幅Sより小さくても大きくてもよい。
[0051]畳み込み演算の出力は、高さE行、幅F列の畳み込み出力行列330を形成し得る。上記のように、行列330は特徴マップと呼ばれ得る。行列330の次元は、入力画素配列320より小さくてもよく、入力画素配列320の次元とフィルタ310の次元とストライドDとに基づいて決定され得る。例えば、ストライドDが水平方向と垂直方向の両方に1画素である場合、Eは、H−R+1であり、FはW−S+1であり得る。いくつかの実施態様では、図3Aおよび図3Bの各畳み込み出力(出力値332や出力値334など)は、畳み込み層の処理ノードの出力に対応し得る。
[0052]入力画素配列上であるフィルタを使用する畳み込みが1つの特徴マップを生成するために使用され、同じ入力画素配列上で別のフィルタを使用する畳み込みが異なる特徴マップを生成し得る。実際には、CNNは、フィルタの数、フィルタサイズ、ネットワークのアーキテクチャなどといった訓練プロセスの前のいくつかのユーザ指定のパラメータ(ハイパーパラメータと呼ばれ得る)に基づいて訓練プロセス中にそれ自体でフィルタの重みを学習し得る。使用されるフィルタの数が多いほど、多くの画像特徴が抽出され、ネットワークが新しい画像におけるパターンをより良く認識し得る。
[0053]上記のように、出力特徴マップのサイズは、深さ、ストライド、およびゼロパディングなどのパラメータに基づいて決定され得る。上記のように、深さは、畳み込み演算に使用されるフィルタの数に対応し得る。図2に示されるCNN200では、第1の畳み込み層215において入力画像に対して畳み込み演算を行うために3つの別々のフィルタが使用され、よって、3つの異なる出力行列(または特徴マップ)220を生成する。ストライドは、フィルタ行列を入力画素配列上でスライドさせる画素数である。例えば、ストライドが1である場合、フィルタ行列は一度に1画素だけ移動される。ストライドが2である場合、フィルタ行列は一度に2画素だけ移動される。ストライドが大きいほど小さい特徴マップが生成され得る。いくつかの実施態様では、フィルタ行列が入力画素配列の隣接する要素に適用され得るように、入力行列は境界の周囲を0でパディングされ得る。ゼロパディングは、特徴マップのサイズの制御を可能にし得る。
[0054]図2に示されるように、どの畳み込み演算の後にも活性化関数(ReLUなど)を使用した追加の非線形演算が使用され得る。上記のように、ReLUは、特徴マップ内のすべての負の画素値を0で置き換える要素別の演算である。ReLUの目的は、CNNに非線形性を導入することである。Tanh関数やシグモイド関数などの他の非線形関数も使用できるが、ReLUは多くの場合よりうまく働くことが判明している。
[0055]空間プーリング(サブサンプリングまたはダウンサンプリングとも呼ばれる)は、最重要の情報を保持しつつ、各特徴マップの次元を縮小し得る。特に、プーリングは、特徴次元をより小さく、より扱いやすくし、ネットワークにおけるパラメータおよび計算の数を低減させ得る。またプーリングは、局所近傍における最大値または平均値が使用されることが原因で入力画像の小さい歪みがプーリングの出力を変化させることのないように、ネットワークを入力画像内の小さい変形、歪み、および変換に対して不変にし得る。よって、プーリングは、画像内のオブジェクトがそれらがどこに位置しようと検出され得るように入力画像の等価の表現を取得するのに役立ち得る。空間プーリングは、最大プーリング、平均プーリング、合計プーリングなどといった様々な方法で行われ得る。最大プーリングでは、各空間近傍(2×2ウィンドウなど)内の最大要素がその空間近傍を表すために使用され得る。最大要素を取る代わりに、各ウィンドウ内のすべての要素の(平均プーリングの)平均または(合計プーリングの)合計が空間近傍を表すために使用されてもよい。多くの用途では、最大プーリングが他のプーリング法よりもうまく機能し得る。
[0056]図4A〜図4Eに、例示的な入力画素データに対して行われた例示的な畳み込み演算、非線形活性化演算、およびプーリング演算を示す。入力画素データは、例えば、デジタル画像、デジタル画像のチャネル、または畳み込みニューラルネットワーク内の前の層によって生成された特徴マップを表し得る。図4Aに、例示的な入力画素データを含む例示的な入力行列410を示す。入力行列410は、画素配列の各要素が整数や浮動小数点数などの実数を含み得る、6×6画素配列を含み得る。図4Bに、例示的なフィルタ420を示す。フィルタ420は、行列の各要素がフィルタの重みを表す、3×3行列を含み得る。フィルタ420は、入力行列410から特定の特徴を抽出するために使用され得る。例えば、図4Bに示される例示的なフィルタ420は、画像内のエッジを検出するためのフィルタであり得る。
[0057]入力行列410とフィルタ420とは、図4Cに示されるような出力行列430を生成するために畳み込まれ得る。出力行列430の各要素は、フィルタ420内の対応する要素と入力行列410のオーバーラップする領域412との間の要素別の乗算の和(すなわちドット積)であり、フィルタ420と同じ次元(3×3など)を有するウィンドウが特定のストライド(水平および/または垂直に1要素など)で入力行列410上をスライドするステップごとに決定され得る。例えば、出力行列430の行1列3の要素432の値は、フィルタ420を表す行列と入力行列410の領域412を表す行列との間のドット積であり、2×0+1×1+0×0+5×1+3×(−4)+2×1+2×0+1×1+1×0=1+5−12+2+1=−3である。同様に、出力行列430の行4列1の要素434の値は、フィルタ420を表す行列と入力行列410の領域414を表す行列との間のドット積であり、0×0+2×1+1×0+0×1+0×(−4)+1×1+5×0+3×1+2×0=2+1+3=6である。6×6画素配列を有する入力行列410と3×3行列で表されるフィルタ420とでは、使用されるストライドが1要素または1画素であるとき、出力行列430は4×4行列であり得る。
[0058]次いで、図4Dに示されるような行列440を生成するために、出力行列430に非線形活性化関数(例えば、ReLU、シグモイド、Tanhなど)が適用され得る。図4Dに示される例では、ReLU関数が使用され、よって、出力行列430内のすべての負の値が行列440では0で置き換えられる。行列440内のデータをサブサンプリングまたはダウンサンプリングするために行列440にプーリング演算(最大、平均、または合計プーリング演算など)が適用され得る。図4Dおよび図4Eに示される例では、行列440に最大プーリング演算が適用され、4×4行列440が4つの2×2領域442、444、446、および448に分割され得る。各領域の最大値が各領域を表すサブサンプルとして選択され得る。例えば、領域442から最大値9が選択され、領域444から最大値2が選択され、領域446から最大値5が選択され、領域448から最大値6が選択される。よって、畳み込み演算、非線形活性化演算、およびプーリング演算の後に6×6入力行列410から4つの要素9、2、6、5を有する特徴マップ450が生成され得る。
[0059]図2に戻って、CNN200は、2組の畳み込み層、ReLU層、およびプーリング層を含み、第2の畳み込み層235は、6個のフィルタを使用してプーリング層225の出力に対して畳み込み演算を行って合計6個の特徴マップを生成し得る。次いで、これら6個の特徴マップ全部に対して個別にReLUが適用され得る。次に、6個の正規化特徴マップの各々に対して最大プーリング演算が行われ得る。これらの畳み込み層、ReLU層、およびプーリング層は、組み合わさって、画像から有用な特徴を抽出し、ネットワークに非線形性を導入し、特徴次元を低減させると同時、それらの特徴をスケールおよび変換と等価にし得る。プーリング層245の出力行列250は、入力画像の高レベル特徴を表し、全結合層260への入力として使用され得る。
[0060]全結合層260は、多層パーセプトロンであり得る。上記のように、全結合層では、層内のあらゆるノードが(1つまたは複数の)隣接する層上のあらゆるノードに結合される。全結合層260は、出力行列250で表された入力画像の高レベル特徴を使用して、入力画像を訓練データセットに基づく様々なクラスに分類し得る。また全結合層は、これらの高レベル特徴の非線形結合関数を学習するための低コストの方法としても使用され得る。畳み込み層およびプーリング層からの特徴は分類タスクに適し得るが、それらの特徴の非線形結合はさらに一層適し得る。
[0061]全結合層260は、出力層に対してソフトマックス活性化関数を使用し得る。ソフトマックス関数は、実数値のスコアのベクトルを取り、そのベクトルを、合計が1になる0から1までの値(確率)を有するベクトルに変換する。よって、全結合層からの出力値の合計は1であり得る。いくつかの実施形態では、サポート・ベクター・マシン(SVM)分類器などの他の分類器も使用することができる。
[0062]図2に示される例では、2組の畳み込み層およびプーリング層が使用される。これらの演算を単一のCNNにおいて何回でも繰り返すことができることに留意されたい。加えて、プーリング層が畳み込み層ごとに使用されない場合もある。いくつかの実施態様では、CNNは、プーリング演算を行う前に複数の畳み込み演算およびReLU演算を行い得る。
[0063]CNN200などの畳み込みニューラルネットワークの訓練プロセスは、図2に記載されるフィードフォワード・ニューラル・ネットワークに関して上述した訓練プロセスと同様であり得る。第1に、すべてのパラメータおよび重み(フィルタ内の重みおよび全結合層のための重みを含む)が乱数値で初期設定され得る。第2に、畳み込みニューラルネットワークは、入力として訓練サンプル(訓練画像など)を取り、順方向伝搬ステップ(畳み込み演算、非線形活性化演算、およびプーリング演算を、全結合層における順方向伝搬演算と共に含む)を行い、可能なクラスごとの出力確率を決定し得る。重みなどの畳み込みニューラルネットワークのパラメータは、訓練例にランダムに割り当てられるので、出力確率もランダムであり得る。
[0064]出力層での全誤差(すべての可能なクラスの総和など)は、すべての可能なクラスの確率誤差を合計することによって計算され得る。例えば、全誤差は、次式に基づいて計算される。
全誤差=1/2Σ(目標確率−出力確率) (10)
式中、目標確率は、画像内のオブジェクトの実際のクラスに対応する「1」と、他のクラスに対応する「0」とを含み得る。次いで、上記の逆伝搬法などの技法を使用して、ネットワークにおいて訓練されるべきパラメータおよび重みに関する誤差の勾配が計算され、勾配降下法を使用してネットワークにおいて訓練されるべきパラメータおよび重みが出力誤差を最小化するように更新され得る。重みは、それらの全誤差への寄与に従って微調整または調整され得る。同じ訓練サンプルが入力として再度使用される場合、出力確率が目標確率により近づく可能性もあり、これは、ネットワークがこの特定の画像の分類を学習したことを指示する。上記のように、フィルタの数、フィルタサイズ、ネットワークのアーキテクチャなどといった畳み込みニューラルネットワークのいくつかのパラメータは、事前に選択され、訓練プロセスの間不変のままであり得る。上記の訓練プロセスは、訓練データセット内のすべての訓練サンプルについて繰り返され得る。
[0065]訓練プロセスの終了時には、CNNのすべての重みおよびパラメータが、訓練データセットからの訓練サンプルを正しく分類するように最適化され得る。CNNに未知のサンプル(試験サンプルや新しいサンプルなど)が入力されると、CNNは順方向伝搬ステップを経て、訓練された重みおよびパラメータを使用してクラスごとの確率を出力し、これは、訓練プロセスに対して推論(または予測)プロセスと呼ばれ得る。訓練データセットが十分であれば、訓練されたネットワークは未知のサンプルを正しいクラスに分類し得る。
[0066]AlexNet(2012)、ZFNet(Zeiler&Fergus Netの略称)(2013)、GoogLeNet(2014)、VGGNet(ネットワークの性能がネットワークの深さ(層の数)に依存し得ることを示す)(2014)、レジデュアルネットワーク(ResNet)(2015)、および密に結合された畳み込みネットワーク(DenseNet)(2016)などの、上記のCNN200に対する多くの変形形態および改変形態があり得る。
[0067]上記のフィードフォワード・ニューラル・ネットワークでは、すべてのサンプルが独立しているとみなされる。リカレント・ニューラル・ネットワーク(RNN)では、上記と同じ演算が系列内のあらゆる要素に対して行われ、ある入力要素についての出力は前の入力要素についての出力に依存し得る。最も一般的に使用されるタイプのRNNのうちの1つが、長・短期記憶(LSTM)ネットワークであり、これは入力層と、1つまたは複数のLSTM層と、全結合層とを含み得る。
[0068]上記の訓練プロセスおよび推論プロセスは、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組み合わせで行われ得る。しかしながら、人工ニューラルネットワークを訓練し、または訓練された人工ニューラルネットワークを推論に使用するには、一般に、例えば、行列乗算や畳み込みを行うための相当な量の計算パワーが必要である。よって、訓練および/または推論にはグラフィック・プロセッシング・ユニット(GPU)、テンソル・プロセッシング・ユニット(TPU)、ニューラル・ネットワーク・プロセッシング・ユニット(NPU)、FPGA、ASIC、または他の高並列処理回路などの専用ハードウェア回路が使用され得る。訓練および推論は、クラウド、データセンタ、または機器上で行われ得る。
[0069]図5に、例示的な人工ニューラルネットワークのための例示的な装置500を示す。装置500は、データ・センタ・サーバなどのコンピュータシステムの一部であり得る。いくつかの実施形態では、装置500は、マルチテナント・コンピュート・サービス・システム(クラウドなど)の一部であり、ホストデバイス(図5には示されていない)と通信して、コンピューティングデバイスに計算リソースおよびメモリリソースを提供し得る。装置500は、相互接続518を介してメモリ512と、ダイレクト・メモリ・アクセス(DMA)・コントローラ516と、ホストインターフェース514とに結合されたニューラル・ネットワーク・プロセッサ502を含み得る。ニューラル・ネットワーク・プロセッサ502は、訓練されたニューラルネットワークを使用した推論を支援するために計算リソースを提供し得る。ニューラル・ネットワーク・プロセッサ502の動作の詳細を以下で説明する。
[0070]メモリ512は、命令、入力データ(画像の画素データなど)、および、例えばホストデバイスから受け取られた訓練されたニューラルネットワークの重み(フィルタデータなど)またはその他のパラメータを格納するように構成され得る。メモリ512は、ニューラル・ネットワーク・プロセッサ502の出力(入力画像に関する1つまたは複数の画像認識判断など)または何らかの中間データを格納するためにも使用され得る。メモリ512は、ダイナミック・ランダム・アクセス・メモリ(DRAM)、シンクロナスDRAM(SDRAM)、ダブル・データ・レートDRAM(DDR DRAM)、ストレージ・クラス・メモリ(SCM)、フラッシュ・メモリ・デバイスなどといった任意の適切なメモリを含み得る。
[0071]DMAコントローラ516は、ニューラル・ネットワーク・プロセッサ502とホストデバイスとの間でデータを転送するDMA操作を行うように構成され得る。例えば、ホストデバイスは、メモリ512において、命令、入力データ、重み、およびニューラルネットワークのその他のパラメータを格納し得る。ホストデバイスは、ニューラル・ネットワーク・プロセッサ502に(メモリ記述子の形などで)格納された命令、データ、重み、およびニューラルネットワークのその他のパラメータのメモリアドレスを提供し得る。ニューラル・ネットワーク・プロセッサ502は次いで、ホストデバイスによって提供されたメモリアドレスに基づいて、格納された命令、データ、重み、またはニューラルネットワークのその他のパラメータを取得し得る。ニューラル・ネットワーク・プロセッサ502はまた、メモリ512において計算の結果(1つまたは複数の画像認識判断や中間データなど)を格納し、格納された結果のメモリアドレスをホストデバイスに提供し得る。
[0072]ホストインターフェース514は、ホストデバイスとニューラル・ネットワーク・プロセッサ502との間の通信を可能にし得る。例えば、ホストインターフェース514は、ホストデバイスとニューラル・ネットワーク・プロセッサ502との間で格納されたデータ(例えば、入力データ、重み、計算の結果など)のメモリアドレスを含むメモリ記述子を送るように構成され得る。ホストインターフェース514は、例えば、周辺機器相互接続エクスプレス(PCIe)インターフェースやホストデバイスと通信するための任意の適切なインターフェースを含み得る。
[0073]ニューラル・ネットワーク・プロセッサ502は、画像分類などの、推論のためのニューラルネットワーク計算を支援する計算リソースを提供し得る。図5に示される例では、ニューラル・ネットワーク・プロセッサ502は、システム・オン・チップ(SoC)、FPGA、またはASICなどの集積回路を含み得る。ニューラル・ネットワーク・プロセッサ502は、ステートバッファ522、計算エンジン524、出力バッファ526、およびポストプロセッサ528などのいくつかの回路構成要素を含み得る。いくつかの実施態様では、ニューラル・ネットワーク・プロセッサ502は、以下で詳細に論じるように、計算エンジン542およびポストプロセッサ528にステートバッファ522への読取りおよび書込みアクセスを提供する読取りアクセスエンジン536および書込みアクセスエンジン538も含み得る。
[0074]ステートバッファ522は、計算エンジン524で計算に使用されるデータのキャッシングを提供するように構成され得る。ステートバッファ522でキャッシュされるデータは、例えば、メモリ512から取得された入力データおよび重み、計算エンジン524からの出力データ、ならびに/またはポストプロセッサ528からの出力データを含み得る。キャッシングにより、計算エンジン524の性能に及ぼす(メモリ512、DMAコントローラ516、相互接続518などにおける待ち時間によって生じる)メモリアクセスのボトルネックの影響が低減され得る。ステートバッファ522は、オンチップ・メモリ・デバイスであってもよく、例えば、スタティック・ランダム・アクセス・メモリ(SRAM)を含み得る。いくつかの実施形態では、ステートバッファ522は、計算エンジン524の編成に基づいて分割され得る。例えば、ステートバッファ522は複数のSRAMバンクを含み、各バンクは、1行の計算エンジン524の入力データおよび重みを格納するように構成され得る。
[0075]計算エンジン524は、ニューラルネットワーク計算のための1つまたは複数の算術演算(ベクトル乗算など)を行うように構成された処理要素(PE)の配列を含み得る。いくつかの実施態様では、計算エンジン524は、行列畳み込みおよび/または行列乗算に使用され得る行列乗算ユニットであり、よって、畳み込み層または全結合層を実装するために使用され得る。例えば、いくつかの実施態様では、計算エンジン524は、行と列とに配置された処理要素の二次元配列を含むシストリックアレイを含み得る。
[0076]図6に、処理要素620の配列を含む簡略化された例示的な計算エンジン600を示す。計算エンジン600は、計算エンジン524の簡略化された例であり得る。図6に示される例では、計算エンジン600は、M行の各々にN個のPEとN列の各々にM個のPEとを有するPEのM×N配列を含み得る。各PEは、行入力バス622と、列入力バス624と、列出力バス626と、行出力バス628とを含み得る。PEは、行入力バス622を介して同じ行の(左の)先行するPEから(または外部回路から)入力を受け取り得る。PEはまた、列入力バス624を介して同じ列の(上の)先行するPEから(または外部回路から)も入力を受け取り得る。入力は浮動小数点値であり得る。PEは、入力に基づいて浮動小数点演算(積和演算(MAC)など)を行い、算術演算の結果を、列出力バス626を介して同じ列の後続の(下の)PEに(または外部回路に)送り得る。PEはまた、行出力バス628を介して、同じ行の(右の)後続のPEに入力を転送し得る。
[0077]計算エンジン600の各行は、複数の入力データ要素を含む1つの入力データセットを処理し得るが、計算エンジン600の各列は、異なる入力データセットからの入力データ要素の加重和を生成し得る。例えば、計算エンジン600がM個の入力画素群610、612、614、…、および616を処理することになる場合、第1行は画素群610の入力データ要素を受け取り、第2行は画素群612の入力データ要素を受け取り、第3行は画素群614の入力データ要素を受け取り、以下同様であり、第M行は入力群616の入力データ要素を受け取り得る。各PEは、一度に1つの入力データ要素を処理することになる乗算器623を含み得る。例えば、PEは、(例えば行入力バス622から)入力データ要素および重みを受け取り、乗算器623を使用して、重み付き入力データ要素を表す乗算の積を生成し得る。重みは、畳み込みカーネル(すなわちフィルタ)の要素または全結合層の2つの層上のノード間の接続の重みであり得る。加えて、PEは、同じ列の先行するPEから(例えば列入力バス624から)部分加重和も受け取り得る。部分加重和は、そのPEより上の行のPEによって受け取られた入力データセットの入力データ要素の加重和を表す。PEは、重み付き入力データ要素を部分加重和に加算し、更新された部分加重和を(例えば列出力バス626を介して)同じ列の下のPEに渡し得る加算器625を含み得る。各列の最終行のPEは、その列のすべてのPEによって受け取られた入力データ要素の加重和を生成し得る。
[0078]計算エンジン600の各PEの演算は、計算エンジン600とニューラル・ネットワーク・プロセッサ(ニューラル・ネットワーク・プロセッサ502など)の他の構成要素との間の相互運用性を向上させるためにクロック信号に同期され得る。各PEはまた、加算器および乗算器回路の入力データ、重み、および出力データを格納し、回路へと回路からとのデータの流れを同期するために、順序論理回路(例えば、レジスタ、ラッチ、フリップフロップ、状態機械など)も含み得る。各PEの順序論理回路を、同じクロック信号またはクロック信号の複製によってクロック制御して、データがクロックサイクル中に順次にPEに、かつ/またはPEから同期してシフトされ得るようにすることができる。例えば、第1のクロックサイクルでは、第2行のPE620bが、画素群612の第1の入力データ要素と、第1行のPE620aからの画素群610の重み付きの第1の入力データ要素を含む部分和とを受け取り得る。第1のクロックサイクル内に、PE620bは、入力データ要素を重みと乗算し、乗算の積を部分和に加算して更新された部分和を生成し、更新された部分和を内部レジスタに格納し得る。第2のクロックサイクルでは、PE620bは更新された部分和を下の第3行のPE620cに転送し、PE620cは乗算および累算を行って更新された部分和を生成し得る。第3のクロックサイクルでは、PE620cは更新された部分和を下の第4行の次のPEに転送し、次のPEは乗算および累算を行って更新された部分和を生成し得る。更新された部分和は、第Mのクロックサイクルで第M行のPE620dによって出力バッファ630(PSUMバッファとも呼ばれる)に出力されるまで、各列に沿って下方に伝搬され得る。
[0079]いくつかの実施態様では、計算エンジン600の各列がニューラルネットワーク層の処理ノードに対応し、異なる重みセット{w}を適用して、入力データセット{x}ごとに異なる加重和
Figure 2021510888

を生成し得る。
[0080]図5を参照すると、ポストプロセッサ528は、ニューラルネットワーク層の最終出力を生成するために出力バッファ526に格納され得る(畳み込み層や全結合層などの、ニューラルネットワーク層として機能し得る)計算エンジン524の出力に対して後処理を行うように構成され得る。図5に示される例では、ポストプロセッサ528は、活性化エンジン528aと、プーリングエンジン528bとを含み得る。活性化エンジン528aは、畳み込み層の出力に対して、Tanh、シグモイド、ReLUなどといった1つまたは複数の活性化(非線形)関数を行って出力データを生成し、出力データをステートバッファ522で格納し得る。いくつかの実施態様では、活性化エンジン528aは、1つまたは複数の乗算器回路を含み得る。プーリングエンジン528bは、畳み込み層または活性化エンジン528aの出力に対して、例えば、最大プーリング、平均プーリングなどを行ってサブサンプルを生成し、サブサンプルをステートバッファ522で格納し得る。いくつかの実施態様では、プーリングエンジン528bは、1つまたは複数の乗算器回路も含み得る。プーリングエンジン528bおよび/または活性化エンジン528aは、特定の畳み込み層についてはスキップされるように制御されてもよい。例えば、上記のように、CNNは、プーリング演算を行う前に複数の畳み込み演算およびReLU演算を行い得る。
[0081]いくつかの実施態様では、ポストプロセッサ528は、全結合層の出力に対してソフトマックス関数を行うことができるソフトマックスエンジン(図5には示されていない)も含み得る。上記のように、ソフトマックスエンジンは、全結合層からの実数値のスコアのベクトルを取り、その実数値のスコアのベクトルを、合計が1になる0から1までの確率値のベクトルにマップし得る。
[0082]読取りアクセスエンジン536は、例えば、計算エンジン524やポストプロセッサ528を含む読取りアクセス要求デバイスにステートバッファ522への読取りアクセスを提供し得る。書込みアクセスエンジン538は、例えば、ポストプロセッサ528を含む書込みアクセス要求デバイスにステートバッファ522への書込みアクセスを提供し得る。読取りアクセスエンジン536と書込みアクセスエンジン538とは各々、電力を削減し、待ち時間を短縮するために、一連のアクセス操作(複数のクロックサイクルにわたる複数の読取り操作または書込み操作など)を1回のアクセス操作に変換し得る。読取りアクセスエンジン536と書込みアクセスエンジン538とは各々、ステートバッファ522に基づいて編成され得る。例えば、読取りアクセスエンジン536と書込みアクセスエンジン538とは各々、各サブエンジンが対応するSRAMバンクへのアクセスを提供する、ステートバッファ522の複数のSRAMバンクに対応する複数のサブエンジンを含み得る。読取りアクセスエンジン536のサブエンジンは、(例えば、1行の計算エンジン524やポストプロセッサ528による)複数のデータ要素についての対応するSRAMバンクへの一連の読取りアクセス操作を、複数のデータ要素についての1回の読取りアクセスに変換し得る。書込みアクセスエンジン538のサブエンジンも、(例えばポストプロセッサ528による)対応するSRAMバンクにおいて複数のデータ要素を格納するための一連の書込みアクセスを、複数のデータ要素についての1回の書込みアクセスに変換し得る。
[0083]ディープ・ニューラル・ネットワークや畳み込みニューラルネットワークなどのニューラルネットワークは、数千以上の処理ノードおよび数百万以上のパラメータを含み得る。これらのパラメータは、大きな記憶空間を使用し得る。例えば、オリジナルのAlexNetは、32ビット浮動小数点(FP32)形式で200MBを超える記憶空間を使用し得る。200MBほとんどすべてがノード間の接続の重みによって占められる。一般に、重みは大規模なグループとして配置され、各グループは1つの層の重みを含み、各グループ内の重みは特定の範囲内、例えば、−3.0から6.0までなどであり得る。これらの重みは一般には、わずかに異なる浮動小数点数であるので、zipや、Lemple−Zivや、Huffmanアルゴリズムなどの圧縮法ではうまく圧縮できない可能性がある。
[0084]上記のように、ニューラルネットワークの訓練は、一般には、重みに少しの調整を加えることによって行われ、そのような少しの調整では、通常、浮動小数点精度が正しく機能する必要がある。低精度で訓練を行おうと試みるいくつかの実験があったが、その結果は、訓練プロセスの逆伝搬および勾配を処理するには8を上回るビットが必要であること示しているようである。他方、事前に訓練されたモデルを取得し、推論を実行すれば、例えば、CCDノイズや、照明の変化や、入力と訓練例との間のその他の低レベルの差などの入力中のノイズを処理し、より高レベルの類似性に焦点を当てるよう訓練され得るディープ・ニューラル・ネットワークの固有の特性によりそのような高精度が不要になり得る。よって、事前に訓練されたニューラルネットワークは、低精度の計算を一種のノイズとして扱い、精度の低い数でさえも正確な結果を生み出し得る。したがって、推論に量子化された値を使用しても最終結果に影響を及ぼさない可能性がある。加えて、訓練プロセスを再度行う必要なく使用できる、FP32データ形式のパラメータを用いる多くの公知の、または事前に訓練されたモデルもあり得る。よって、これらの公知の、または事前に訓練されたネットワークのパラメータを、8ビットの符号なし整数(UINT8)などの精度の低い整数に変換することにより、より高速で、より費用効果の高い計算が可能となり得る。
[0085]ニューラルネットワークのパラメータのデータサイズを縮小する1つの方法が、浮動小数点形式のパラメータを、8ビット(すなわち1バイト)の整数などのより短い整数に量子化することである。例えば、FP32の数を8ビットの整数に量子化することにより、データサイズを元のデータサイズの25%に縮小することができる。一般には、管理を容易にし、記憶効率を高めるために、各整数のビット数が8の倍数である(すなわちバイト単位で整列される)ことが望ましい。いくつかの実施態様では、量子化およびデータサイズ縮小は、浮動小数点値の対称線形量子化によって達成され得る。例えば、パラメータが−3.0から6.0の範囲内である場合、パラメータを、例えば、8ビットの整数に量子化するには、浮動小数点数−6.0が符号付き整数−128に量子化され、浮動小数点数6.0が整数+127に量子化され、浮動小数点数0が整数0に量子化され得る。パラメータ範囲の最小値および最大値を、最小値が常に最大の負の数になるように制約すれば、行列乗算のオペランドへのオフセットを回避し得るので、実施に好都合であり得る。しかしながら、対称量子化は、少なくとも一部のニューラルネットワークには許容できない精度の損失を引き起こし得る。例えば、対称量子化では、ネットワークパラメータの範囲が対称でない場合、低い範囲または高い範囲の整数が絶対に使用されず、量子化分解能が低減される可能性がある。
[0086]いくつかの実施態様では、量子化およびデータサイズ縮小は、層ごとのネットワークパラメータの最小値および最大値を格納し、次いで各浮動小数点値を、ある範囲(8ビットの符号なし整数では0〜255など)内の線形の整数セット内の最も近い整数(8ビットの整数など)に非対称に量子化することによって達成されてもよく、範囲の最低値は層ごとのパラメータの最小値に対応し、範囲の最高値は層ごとのパラメータの最大値に対応し得る。例えば、パラメータが−3.0から6.0の範囲内である場合、量子化された整数0は浮動小数点数−3.0を表し、量子化された整数255は浮動小数点数6.0を表し、量子化された整数128は浮動小数点数約1.5を表し得る。このようにして、整数の全範囲が利用され、量子化分解能が対称量子化に優って改善され得る。
[0087]ネットワークパラメータの量子化は、計算を、例えば、8ビットの整数で行うことによって、推論のための計算リソースを減らすこともできる。例えば、8ビットの値のフェッチには、FP32の値に使用されるメモリ帯域幅の25%しか使用されず、よって、キャッシュがより十分に利用され、RAMアクセスのボトルネックが回避され得る。1クロックサイクル当たりに多くの操作を行うために8ビットの整数を使用して単一命令複数データ(SIMD)操作も行われ得る。8ビットの整数パラメータを使用した推論を行うためにデジタル信号プロセッサやベクトルプロセッサなどの多くのプロセッサを使用することができる。よって、計算に8ビットのパラメータを使用することにより、推論が加速され、使用電力が削減され、記憶および計算容量がより少ないシステム(モバイル機器や組込みシステムなど)または浮動小数点演算を効率的に行うのに適さないシステムで推論を行うことが可能となり得る。
[0088]量子化された値は、大量の低精度演算が許容できる場合(畳み込みなど)に使用され得る。しかしながら、活性化関数やプーリング関数などのいくつかの演算では、高精度演算が行われ得る。よって、いくつかの演算には逆量子化された値が使用される必要があり得る。したがって、いくつかの実施態様では、重みや特徴マップなどの、畳み込みまたは行列乗算に使用されるデータが量子化された値に符号化され、活性化層/プーリング層への入力は逆量子化された値に逆変換される必要があり得る。
[0089]図7Aに、浮動小数点数を使用した例示的な畳み込み演算700を示す。畳み込み演算700はブロック710から開始し、そこで、重みや浮動小数点値で表された試験サンプルなどの入力が畳み込み層の入力で受け取られ得る。次いで浮動小数点入力は、例えば、図5の装置500や図6の計算エンジン600を使用して、畳み込みまたはその他の行列乗算に使用され得る。部分加重和などの畳み込みまたはその他の行列乗算の出力もまた、浮動小数点形式であってもよく、活性化エンジンおよび/またはプーリングエンジンによるさらなる処理のために出力バッファ(出力バッファ526など)に送られ得る。上記のように、活性化エンジンおよび/またはプーリングエンジンは、高精度浮動小数点演算を行い得る。上記のように、そのような演算は、大きな記憶空間、高いバス帯域幅、および高い浮動小数点計算パワーを必要とし得る。
[0090]図7Bに、整数を使用した例示的な畳み込み演算740を示す。畳み込み演算740は、畳み込み演算700より少ないリソースを使用してより効率的に行われ得る。畳み込み演算700の場合と同様に、ブロック710で、浮動小数点値で表された重みや試験サンプルなどの入力が畳み込み層の入力で受け取られ得る。いくつかの実施形態では、最小値および最大値が事前に計算され得る。例えば、重みは一般にロード時に既知であり、重みの範囲を重みと共に定数として格納することができる。場合によっては、畳み込み層への入力(例えば、画像の入力は通常0.0から255.0の範囲内のRGB値である)および多くの活性化関数の出力も既知の範囲を有し、よって、範囲を決定するための畳み込み層への入力の分析が不要であり得る。いくつかの実施形態では、入力の最小値および最大値、例えば、前の層の出力である入力は、既知ではなく、ブロック742およびブロック744で決定され得る。例えば、2つの8ビットの数の和は9ビットを有し、2つの8ビットの数の積は16ビットを有し、行列乗算における一連の8ビットの乗算の和は16を上回るビット、例えば20ビットから32ビットを有し得る。
[0091]ブロック750で、浮動小数点入力が、8ビットの符号付き整数(INT8)、8ビットの符号なし整数(UINT8)、16ビットの符号付き整数(INT16)、16ビットの符号なし整数(UINT16)などの符号付きまたは符号なしの整数に量子化され得る。量子化は、例えば、ブロック742およびブロック744で決定された最小値および最大値に基づく、上記の、以下でより詳細に説明されるような対称または非対称の線形量子化であり得る。ブロック760で、量子化された整数を使用して畳み込みまたはその他の行列乗算が行われ得る。上記のように、畳み込みまたはその他の行列乗算は、量子化された整数を使用してより効率的に行われ、より少ないリソースを使用して行われ得る。ブロック770で、畳み込みの整数出力が、ブロック730の浮動小数点出力が浮動小数点演算を必要とし得る後続の層(活性化層など)によって使用され得るように、最小値および最大値に基づいて逆量子化され得る。
[0092]量子化は、実数値を整数値に変換する変換に基づいて行われ得る(逆量子化についてはその逆である)。量子化に使用できる例示的な変換は以下を含む。
X=S・X+バイアス (11)
および
X=S・X−バイアス (12)
式中、Xは、量子化された整数値であり、Xは、FP32の実数値であり、Sは、スケーリングに使用される正のFP32の数(すなわち、スケーリング係数)である。多くの場合、FP32の実数値0を、最適化された実施態様のために量子化された整数値で厳密に表せることが望ましい。例えば、上記のように、畳み込み層またはプーリング層では、ゼロパディングを実施することが有用であり得る。多くの場合、行列(特徴マップなど)は、多くの実数値0を含み得る疎行列であり得る。そのような層の量子化された実施態様が実行可能であるためには、実数値0が、ゼロ点整数と呼ばれる量子化された数で厳密に表せる(すなわち、実数値0についての量子化誤差がない)ことが望ましい。加えて、CNNにおける一般的な最適化は、0であることが既知である特定のパディング計算をスキップすることである。これが可能であり得るのは、0を厳密に表せる場合のみである。実数値0を量子化された整数によって正確に表せない、すなわち、ゼロ点整数が実数値0に厳密に対応しない場合、実数値0は通常ランダムに分配されず、よって量子化誤差がゼロ平均値を有しない場合があるので、結果に不正確さが導入される可能性があり、結果にバイアスを導入し得る。
[0093]式(11)では、Xが0になるには、ゼロ点整数がXqz=−バイアス/Sになるはずである。よって、Xqzが整数であるためには−バイアス/Sが整数である必要があり、これを満たすことは容易ではない場合もある。いくつかの実施態様では、バイアスが省かれ、その結果として対称量子化が得られ得る。上記のように、対称量子化は、少なくとも一部のニューラルネットワークには許容できない精度の損失を引き起こし得る。
[0094]式(12)では、X=0では、Sを任意の値とすることができ、バイアスをゼロ点整数Xqzとすることができる。よって、式(12)では、実数値0を厳密に表せるという条件を容易に満たすことができ、ゼロ点整数は定義上整数値である。したがって、式(12)を以下のように書き換えることができる。
Figure 2021510888

または
例えば、Xの範囲が[−0.5,3.5]である場合、Sは1/64であってもよく、Xqzは32であってもよく、これにより、X=−0.5の場合にはX=32+(64・(−0.5))=0、X=0の場合にはX=32+64・0=32=Xqz、X=3.499の場合にはX=32+64・3.499=255になり得る。式(12)または式(13)によって定義される変換は、浮動小数点入力の範囲が実数値0に対して対称であること(すなわち、−最大値と最大値とによる範囲)を前提としないので、非対称であることに留意されたい。(符号付き整数の代わりに)8ビットの符号なし整数(UINT8)を使用して、式(12)または式(13)によって定義される変換を使用するFP32の入力を表すこともできることにも留意されたい。
[0095]重み行列Wと入力データ(特徴マップなど)行列Xとの乗算から得られる積行列は、次式によって決定され得る。
Figure 2021510888

式(14)に示される行列Xおよび行列Wは2×2行列であるが、行列Xおよび行列Wのサイズは変動し得ることに留意されたい。例えば、行列Xは任意のM×N行列であり、行列Wは任意のN×K行列であり得る。上記のような浮動小数点実数値Xから量子化された整数値Xへの変換では、実数値の浮動小数点数の行列の乗算は、量子化された重み行列と、量子化された特徴マップ行列と、2つのゼロ点整数(特徴マップの)Xqzおよび(重み行列の)Wqzと、2つの浮動小数点スケーリング係数(特徴マップの)Sおよび(重み行列の)Sとを使用した量子化された入力値の行列の乗算によって計算され得る。
[0096]例えば、いくつかの実施態様では、式(14)に記載される行列乗算は、以下の展開形を使用して行われ得る。
Figure 2021510888

式(15)で示されるように、たとえ量子化プロセスが、UINT8計算がFP32計算よりずっと高速であるために、重みおよび特徴マップのデータサイズを縮小し、より効率的な計算を実現することができても、式(15)によって示される実施態様は、二次展開による4つの積和を含み、これは複雑であり、よって計算が高くつく可能性がある。例えば、図6に示されるようなPE配列を使用してこれら4つの積和を行うには、データがPE配列を4回通過する必要があり、通過ごとに1つの積和が計算され得る。よって、式(15)で示される実施態様は求められるほど効率的ではない可能性がある。
[0097]特定の実施形態によれば、重み行列Wと入力データ(特徴マップなど)行列Xとの乗算は、二次展開なしで、以下の形でずっと効率的に行われ得る。
Figure 2021510888

よって、式(16)による行列乗算は3ステップで行われ得る。第1のステップでは、量子化された入力(重みや特徴マップなど)が、量子化された入力からゼロ点整数XqzまたはWqzを減算して差分値を生成することによってシフトされ得る。
adj=(X (ik)−Xqz) (17)
および
adj=(W (kj)−Wqz) (18)
式中、XadjおよびYadjは、入力が8ビットの符号なし整数に量子化される場合には9ビットの符号付き整数であり得る。このようにして、整数値XqzまたはWqzに量子化される実数値0は、Xqz−Xqz=0およびWqz−Wqz=0であるので、9ビットの符号付き整数形式の整数値0になり得る。上記のように、特徴マップは、多くの実数値0を含むか、または多くのパディングされた0を含み得る疎行列である可能性があり、0との乗算は0になるので、これにより後続の乗算がさらに簡略化され得る。
[0098]第2のステップでは、第1のステップで生成された、シフトされた量子化入力XadjおよびYadjが、次式に従って乗算および累算され得る。
Figure 2021510888

上記のように、XおよびWが8ビットの符号なし整数である場合、XadjおよびYadjは、9ビットの符号付き整数であり得る。よって、乗算は9ビットの符号付き整数に対して行われ、各乗算の積は、例えば、18ビットの整数で表され得る。積の和Zは、例えば、32ビットの整数で表され得る。
[0099]第3のステップでは、第2のステップからの積の和Zが、整数の積和を浮動小数点数に変換するために、浮動小数点スケーリング係数Sによってスケーリングされ得る。
(ij)=S・Z (20)
よって、式(15)を使用した実施態様と比較して、行列乗算のために、4つの積和ではなく、ただ1つの積和が計算され、よってPE配列により1回のパスで行われ得る。
[0100]上記のように、シフトされた量子化入力XadjおよびYadjは、9ビットの符号付き整数(INT9)で表されてもよく、よって乗算はINT9のオペランドを使用して行われてもよく、9は2の累乗ではない。メモリにおける2の累乗ではないビット数を有するデータ型の格納および管理は、あまり効率的はない場合もある。INT9データを16ビット形式で格納すると記憶空間が無駄になり得る。特定の実施形態によれば、量子化された入力XおよびWは、UINT8形式でメモリに保存され、メモリから取得され得る。行列乗算の前に式(17)および式(18)に従って量子化された入力からゼロ点整数XqzまたはWqzを減算することにより量子化された入力XおよびWをシフトさせるために、減算エンジンを含む前処理モジュールが使用され得る。シフトされた量子化入力XadjおよびYadjを使用した行列乗算の結果は、行列乗算の結果を後続の層への入力としての浮動小数点形式のより正確な実数値に変換するために、浮動小数点スケーリング係数Sによってスケーリングされ得る。
[0101]図8に、特定の実施形態による整数を使用した例示的な畳み込み演算800を示す。図7Bの畳み込みの場合と同様に、ブロック810で、浮動小数点値で表された、重みや試験サンプルまたは中間特徴マップなどの畳み込み層への入力が受け取られ得る。いくつかの実施形態では、前の層の出力である入力などの入力の最小値および最大値は、事前に知られておらず、ブロック812およびブロック814で決定され得る。いくつかの実施形態では、最小値および最大値が事前に計算され得る。例えば、ニューラルネットワークの重みは一般にロード時に既知であり、重みの範囲を重みと共に定数として格納することができる。場合によっては、入力データ(0.0から255.0の範囲内のRGB値で表された画像など)および多くの活性化関数の出力も既知の範囲を有し、よって、範囲を決定するための畳み込み層への入力の分析が不要であり得る。
[0102]ブロック820で、浮動小数点入力が、8ビットの符号なし整数(UINT8)、8ビットの符号付き整数(INT8)、16ビットの符号付き整数(INT16)、16ビットの符号なし整数(UINT16)などの符号付きまたは符号なしの整数に量子化され得る。量子化は、例えば、ブロック812およびブロック814で決定された最小値および最大値に基づく、式(12)または式(13)に関して上述したような、非対称の線形量子化であり得る。量子化された入力はメモリ825に格納されてもよく、メモリ825はオンチップ・ステート・バッファやオフチップメモリであり得る。いくつかの実施形態では、メモリ825は、スケーリング係数(SやSなど)およびゼロ点整数(XqzやWqzなど)も格納し得る。
[0103]ブロック830で、量子化された入力がメモリ825から読み取られ、式(17)および式(18)に関して上述したように、差分値を生成するために、量子化された入力からゼロ点整数を減算することによって前処理され得る。やはり上記のように、量子化された入力からゼロ点整数を減算することにより、量子化された入力がシフトされ、量子化された入力が、例えば、9ビットの符号付き整数の差分値に変換され得る。前処理の後、整数値(すなわち、ゼロ点整数)に量子化される実数値0が9ビットの符号付き整数形式の整数値0になり、入力データ(特徴マップなど)は、多くの実数値0を含むか、または多くのパディングされた0を含み得る疎行列である可能性があり、0との乗算は0になるので、これにより後続の乗算が簡略化され得る。
[0104]ブロック840で、式(19)に関して上述したように、シフトされた量子化整数(差分値など)を使用して畳み込みまたはその他の行列乗算が行われ得る。やはり上記のように、畳み込みまたはその他の行列乗算は、量子化された整数を使用してより効率的に行われ、より少ないリソースを使用して行われ得る。畳み込みは、8ビットの符号なし整数ではなく、例えば、9ビットの符号付き整数を使用して行われ、よって、いくつかの実施態様で使用される積和演算(MAC)ハードウェア(処理要素など)は、8ビットの符号なし整数に使用されるMACハードウェアとわずかに異なり得ることに留意されたい。
[0105]ブロック850で、式(20)に関して上述したように、浮動小数点形式のより正確な実数値に変換するために、畳み込みまたはその他の行列乗算(すなわち、積和)の整数出力がスケーリング係数(Sなど)によってスケーリングされ得る。ブロック860の浮動小数点出力は、浮動小数点演算を必要とし得る後続の層(活性化層など)への入力として使用され得る。
[0106]様々な実施態様において、上記の畳み込み演算または行列乗算は、ハードウェア、ソフトウェア、またはソフトウェアとハードウェアの組み合わせとして行われ得る。例えば、いくつかの実施態様では、上記の畳み込み演算または行列乗算は、例えば、並列処理ユニット、ベクトルプロセッサ、デジタル信号プロセッサ、グラフィック・プロセッシング・ユニット、テンソル・プロセッシング・ユニット、ネットワーク・プロセッシング・ユニット、FPGA、ASICなどによって実行され得るソフトウェアで実施され得る。いくつかの実施態様では、上記の畳み込み演算または行列乗算は、装置500と同様の装置または何らかの変更を伴う計算エンジン600と同様の計算エンジンを使用して実施され得る。
[0107]図9に、特定の実施形態による例示的な畳み込み演算(畳み込み演算800など)を行うための簡略化された例示的な計算エンジン900を示す。計算エンジン900は、計算エンジン524の具体的な実施態様であり、何らかの変更を伴う計算エンジン600と同様であり得る。計算エンジン900は、M行の各々にN個のPEとN列の各々にM個のPEとを有するPEのM×N配列を含み得る。各行はまた、メモリまたはバッファから(UINT8形式などの)量子化された入力および(UINT8形式などの)ゼロ点整数を取る減算エンジン930a、930b、930c、…、または930dも含み得る。例えば、減算エンジンへの入力は、8ビットの重みW934、8ビットの入力データ要素X932(画像または特徴マップの画素など)、重みの8ビットのゼロ点整数Wqz936、および入力データ要素の8ビットのゼロ点整数Xqz938を含み得る。ゼロ点整数Wqz936およびゼロ点整数Xqz938は、それぞれ、例えば、式(12)および式(13)に関して上述したように、重みの範囲および入力データ要素の範囲に基づいて決定され得る。いくつかの実施態様では、Xqz938およびWqz936は、ソフトウェアによってプログラム可能であり得る。減算エンジンは、重みW934からゼロ点整数Wqz936を減算して、[−255,255]の範囲内のINT9形式のシフトされた重みWq_shift944(差分値など)を生成し、入力データ要素X932からゼロ点整数Xqz938を減算して、INT9形式のシフトされた入力データ要素Xq_shift942を生成し得る。減算エンジンは、INT9形式のシフトされた重みWq_shift944およびINT9形式のシフトされた入力データ要素Xq_shift942を、各行の第1のPE920a、920b、920c、…、または920dに渡し得る。減算エンジンはまたWqz936およびXqz938を次の行の減算エンジンに渡し得る。
[0108]各PEは、行入力バス922と、列入力バス924と、列出力バス926と、行出力バス928とを含み得る。PEは、行入力バス922を介して同じ行の(左の)先行するPEから(または減算エンジンから)入力を受け取り得る。入力は、8ビットの整数などの整数であり得る。PEはまた、列入力バス924を介して同じ列の(上の)先行するPEから(または外部回路から)も入力を受け取り得る。入力は、8以上のビットを各々含む整数であり得る。PEは、入力(9ビットの符号付き整数など)に基づいて整数算術演算(積和演算(MAC)など)を行い、算術演算の結果を、列出力バス926を介して同じ列の後続の(下の)PEに(またはバッファなどの外部回路に)送り得る。PEはまた、行出力バス928を介して、同じ行の(右の)後続のPEに入力を転送し得る。
[0109]計算エンジン900の各行は、複数の入力データ要素を含む1つの入力データセットを処理し得るのに対し、計算エンジン900の各列は、異なる入力データセットからの入力データ要素の加重和を生成し得る。例えば、計算エンジン900がM個の入力画素群910、912、914、…、および916を処理することになる場合、第1行は画素群910の入力データ要素を受け取り、第2行は画素群912の入力データ要素を受け取り、第3行は画素群914の入力データ要素を受け取り、以下同様であり、第M行は入力群916の入力データ要素を受け取り得る。各PEは、一度に1つの入力データ要素(9ビットの符号付き整数形式の入力画素など)および1つの(INT9形式などの)重みを扱うことになる乗算器923を含み得る。例えば、PEは、(例えば行入力バス922から)入力データ要素および重みを受け取り、乗算器923を使用して、重み付き入力データ要素を表す乗算の積を生成し得る。重みは、畳み込みカーネル(すなわちフィルタ)の要素または全結合層の2つの層上のノード間の接続の重みであり得る。加えて、PEは、同じ列の先行するPEから(例えば列入力バス924から)部分加重和も受け取り得る。部分加重和は、そのPEより上の行のPEによって受け取られた入力データセットの入力データ要素の加重和を表す。PEは、重み付き入力データ要素を部分加重和に加算し、更新された部分加重和を(例えば列出力バス926を介して)下のPEに渡し得る加算器925を含み得る。最終行のPE(PE920dなど)は、同じ列のすべてのPEによって受け取られた入力データ要素の加重和を生成し得る。
[0110]計算エンジン900の各PEの演算は、計算エンジン900とニューラル・ネットワーク・プロセッサ(ニューラル・ネットワーク・プロセッサ902など)の他の構成要素との間の相互運用性を向上させるためにクロック信号に同期され得る。各PEはまた、加算器および乗算器回路の入力データ、重み、および出力データを格納し、回路へと回路からとのデータの流れを同期するために、順序論理回路(例えば、レジスタ、ラッチ、状態機械など)も含み得る。各PEの順序論理回路を、同じクロック信号またはクロック信号の複製によってクロック制御して、データがクロックサイクル中に順次にPEに、かつ/またはPEからシフトされ得るようにすることができる。例えば、第1のクロックサイクルでは、第2行のPE920bが、画素群912の第1の入力データ要素と、第1行のPE920aからの画素群910の重み付きの第1の入力データ要素を含む部分和とを受け取り得る。第1のクロックサイクル内に、PE920bは、入力データ要素を重みと乗算し、乗算の積を部分和に加算して更新された部分和を生成し、更新された部分和を内部レジスタに格納し得る。第2のクロックサイクルでは、PE920bは更新された部分和を下の第3行のPE920cに転送し、PE920cは乗算および累算を行って更新された部分和を生成し得る。第3のクロックサイクルでは、PE920cは更新された部分和を下の第4行の次のPEに転送し、次のPEは乗算および累算を行って更新された部分和を生成し得る。更新された部分和は、第Mのクロックサイクルで第M行のPE920dによって出力バッファ940に出力されるまで、各列に沿って下方に伝搬され得る。
[0111]いくつかの実施態様では、出力バッファ940からの部分和は、後続の層が使用するための浮動小数点形式の実数値に変換するために、活性化エンジン(活性化エンジン528aなど)またはプーリングエンジン(プーリングエンジン528bなど)によって、Sなどのスケーリング係数を使用してスケーリングされ得る。
[0112]式(16)に示されるように因数分解形で行列乗算を行い、PE配列の前で減算エンジンを使用して符号なし整数入力をシフトさせて差分値を生成することによっていくつかの利点が得られ得る。例えば、入力データ(画像または特徴マップにおける重みや画素値など)は、UINT8形式でメモリに格納され、これにより、INT9形式のデータより容易なハードウェア設計および効率的な記憶および管理が可能になり得る。ソフトウェアは8ビット形式のデータを扱い、9ビットの算術演算を認識しなくてもよく、これにより、9ビット形式のデータを保持するメモリをアドレス指定するよりも容易なソフトウェア設計が可能になり得る。量子化誤差なしで非ゼロの符号なし整数(すなわちゼロ点整数)に非対称に量子化される実数値0が、乗算の前に減算エンジンによって符号付き整数値0に変換され、これにより後続の乗算が簡略化され得る。各行列乗算および逆量子化は、PE配列を使用して1回のパスで行われ得る。
[0113]9ビットの算術演算を行うことにより、8ビットの符号なし整数を使用した算術演算と比較して、シリコン面積および動作周波数の点でハードウェアに対する影響が最小限に抑えられ得る。例えば、UINT8の乗算および加算を計算するためのシリコン面積(または価格)をAとすると、UINT16の乗算および加算を計算するためのシリコン面積(または価格)は約4Aであり、UINT32の乗算および加算を計算するためのシリコン面積(または価格)は約16Aであり得るのに対し、FP32の乗算および加算を計算するためのシリコン面積(または価格)は約20Aであり得る。INT9オペランドを使用した算術演算は、UINT8オペランドを使用した算術演算と比較して、最小限の余分なハードウェア(約1.05Aなど)で達成可能であり得る。よって、FP32オペランドを使用した行列乗算と比較して、本明細書で開示される技法を使用した行列乗算は、計算コストを約19分の1に削減することができる(すなわち、20A/1.05A)。
[0114]図10は、特定の実施形態による人工ニューラルネットワークにおける計算を加速する例示的な方法を示す簡略化された流れ図1000である。この例示的な方法は、例えば、GPU、TPU、フィールド・プログラマブル・ゲート・アレイ(FPGA)、システム・オン・チップ(SoC)、特定用途向け集積回路(ASIC)、プログラマブル・アレイ・ロジック(PAL)、複合プログラマブル・ロジック・デバイス(CPLD)、ニューラル・ネットワーク・プロセッサ502、計算エンジン524もしくは900、または命令コードを有する汎用コンピュータなど、上記のシステムを使用して実施され得る。命令コードは、非一時的な記憶媒体(メモリデバイスなど)に格納され得る。図10に示され、以下で説明される方法は、例示であり非限定的であることが意図されている。
[0115]任意選択で、ブロック1010で、人工ニューラルネットワークの層(畳み込み層など)への浮動小数点入力が受け取られ得る。浮動小数点入力は、人工ニューラルネットワークの層の重みおよび/または入力データ要素を含み得る。例えば、重みは、事前に訓練されたニューラルネットワークの重みであり得る。入力データ要素は、例えば、ニューラルネットワークによって分析されるべき画像やニューラルネットワークの先行する層によって生成された特徴マップを含み得る。浮動小数点入力は、例えば、32ビットの浮動小数点形式であり得る。
[0116]任意選択で、ブロック1020で、浮動小数点入力がnビットの整数入力に線形に量子化され、nは2の累乗または8の累乗、例えば8や16であり得る。量子化は非対称であってもよく、浮動小数点入力の最小値が整数ゼロとして量子化され、浮動小数点入力の最大値が2−1として量子化され、浮動小数点入力のゼロ値が量子化誤差なしでゼロ点整数値として量子化され得る。いくつかの実施形態では、量子化は、例えば、式(12)や式(13)を使用したスケーリング係数とバイアス(ゼロ点整数など)とに基づくものであり得る。例えば、n=8であり、入力(重みなど)が−0.5から3.5の範囲内である場合、入力の最小値(浮動小数点数−0.5)は整数0として量子化され、入力の最大値(浮動小数点数3.5)は整数255として量子化され、浮動小数点値0は整数32(すなわちゼロ点整数)として量子化され得る。よって、浮動小数点入力の範囲が浮動小数点ゼロに対して対称でない場合、量子化された整数入力の範囲はゼロ点整数に対して対称ではない場合がある。層の重みと入力データ要素とは、異なる範囲を有する場合があり、よってそれぞれの範囲に基づいて独立して量子化され得る。したがって、重みのゼロ点整数は入力データ要素のゼロ点整数と異なる場合があり、重みのスケーリング係数は入力データ要素のスケーリング係数と異なる場合がある。
[0117]任意選択で、ブロック1030で、整数入力が、バッファや揮発性または不揮発性メモリデバイスなどの記憶装置に格納され得る。浮動小数点入力(32ビットや4バイトの浮動小数点値など)が、例えば、8ビットの符号なし整数として量子化されるので、整数入力を格納するための記憶空間のサイズは著しく縮小され得る。上記のように、各整数入力のビット数が、8や16などの、2の累乗または8の倍数なので、整数入力は、記憶装置により効率的に格納され、ソフトウェアによってより容易に管理され得る。
[0118]ブロック1040で、畳み込み層が記憶装置から整数入力を読み取り得る。整数入力のデータサイズが浮動小数点入力と比較してずっと小さいので、記憶装置から読み取られるべきデータの量およびデータを転送するために使用される帯域幅が著しく低減され得る。
[0119]ブロック1050で、ゼロ点整数に量子化される浮動小数点入力のゼロ値が今度は整数ゼロで表されるように、整数入力がゼロ点整数だけシフトされ得る。シフトは、例えば、図9に関して上述したように、整数入力からゼロ点整数を減算して差分値を生成するように構成された減算エンジンの配列によって行われ得る。シフト後に、整数入力は1ビット多い符号付き整数に変換され得る。例えば、整数入力が8ビットの符号なし整数である場合、シフトされた整数入力は9ビットの符号付き整数であり得る。例えば、ブロック1020に関して上述した例では、シフト後に、整数0として量子化される浮動小数点数−0.5は符号付き整数−32で表され、整数255として量子化される浮動小数点数3.0は符号付き整数223で表され、整数32として量子化される浮動小数点値0(すなわちゼロ点整数値)は今度は符号付き整数0で表され得る。
[0120]ブロック1060で、積和を生成するためにシフトされた整数入力に対して積和演算が行われ得る。図9に関して上述したように、いくつかの実施態様では、積和演算は複数の行を含むPE配列によって行われ、そこで各行のPEは対応する減算エンジンからシフトされた整数入力を受け取り得る。各PEは、同じ列のPEからの乗算の積が合計されて積和が生成され得る、整数の積和を行うように構成され得る。
[0121]ブロック1070で、積和が浮動小数点スケーリング係数でスケーリングされて、後続の層によってさらなる処理に使用され得る浮動小数点出力が生成され得る。例えば、浮動小数点出力は、活性化層または別の畳み込み層によってさらに処理され得る特徴マップの一部であり得る。いくつかの実施形態では、スケーリングは、例えば、活性化層、プーリング層、または浮動小数点乗算を行うことができる人工ニューラルネットワークの任意の他の処理モジュールで行われ得る。浮動小数点スケーリング係数は、式(20)に示されるように重みのスケーリング係数と入力データ要素の重みとの積であり得る。
[0122]図10には例示的な方法が順次操作として記載されているが、いくつかの操作は並列に、または同時に行われ得る。いくつかの操作は異なる順序で行われ得る。操作が、図に含まれていない追加的なステップを有する場合もある。いくつかの操作は任意選択であり、よって様々な実施形態において省略される場合もある。いくつかの操作は別の操作と一緒に行われ得る。さらに、この方法の実施形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはこれらの任意の組み合わせとして実施され得る。
[0123]いくつかの実施態様では、上記の技法を、人工ニューラルネットワーク以外のシステムにおいて畳み込み演算または行列乗算を行うために使用することもできる。例えば、本明細書で開示される技法を、ニューラルネットワークを使用しない画像処理における畳み込み演算に使用することができる。
[0124]いくつかの実施態様では、上記の技法を、16ビット、32ビット、64ビット、もしくはそれ以上の浮動小数点もしくは小数点データ、または16ビット、32ビット、64ビット、もしくはそれ以上の整数データなどの、高精度形式のデータのための畳み込み演算またはその他の行列乗算を行うために使用される記憶空間、搬送帯域幅、および計算パワーを削減するために使用することができる。いくつかの実施態様では、高精度データのデータを、例えば、16ビットの浮動小数点データや16ビットもしくは8ビットの整数データなどの、低精度データに量子化することができる。高精度データと低精度データとは、同じ範囲の、ただし異なる精度または分解能のデータを表し得る。例えば、0.0から1.0までの値を表すために16ビットのデータが使用される場合、精度または分解能は2−16であり得るが、0.0から1までの値を表す8ビットのデータの精度または分解能は2−8である。上記のように、ニューラルネットワークでは、訓練には高精度データが使用され得るが、推論中の少なくとも一部の操作には低精度データで十分であり得る。様々な実施態様において、低精度データの各要素のビット数は、低精度データをより効率的に記憶装置に格納し、コントローラまたはソフトウェアによって管理できるように、8の倍数であり得る(すなわちバイト単位で整列され得る)。
[0125]図11に、コンピューティングデバイス1100の一例を示す。コンピューティングデバイス1100の機能および/またはいくつかの構成要素は、無制限に、本開示の別の箇所で開示される他の実施形態でも無制限に使用され得る。コンピューティングデバイス1100は、タスクの処理を容易にする計算を行い得る。実例として、コンピューティングデバイス1100を、マルチテナント・コンピュート・サービス・システムにおけるサーバの一部とすることができる。コンピューティングデバイス1100の様々なハードウェアリソースおよびソフトウェアリソース(画像認識サービスの提供と関連付けられたハードウェアリソースおよびソフトウェアリソースなど)を要求に応じてクライアントに割り振ることができる。
[0126]一例では、コンピューティングデバイス1100は、処理論理1102と、バス・インターフェース・モジュール1108と、メモリ1110と、ネットワーク・インターフェース・モジュール1112とを含み得る。これらのモジュールは、ハードウェアモジュール、ソフトウェアモジュール、またはハードウェアとソフトウェアの組み合わせであり得る。特定の例では、モジュールは、本開示の範囲から逸脱することなく、構成要素またはエンジンと区別なく使用され得る。コンピューティングデバイス1100は、図示されていないその他のモジュールを含み得る。いくつかの実施態様では、コンピューティングデバイス1100は、より少ないモジュールを含み得る。いくつかの実施態様では、モジュールのうちの1つまたは複数が1つのモジュールに組み合わされ得る。モジュールのうちの1つまたは複数は、通信チャネル1114上で互いに通信し得る。通信チャネル1114は、1つまたは複数のバス、メッシュ、マトリクス、ファブリック、これらの通信チャネルの組み合わせ、または何らかの他の適切な通信チャネルを含み得る。
[0127]処理論理1102は1つまたは複数の集積回路を含んでいてもよく、これらは、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、システム・オン・チップ(SoC)、ネットワーク・プロセッシング・ユニット(NPU)、命令を実行するように構成されたプロセッサまたは論理演算および浮動小数点演算を行うように構成された任意の他の回路を含み得る。処理論理1102に含まれ得るプロセッサの例には、ARM(登録商標)、MIPS(登録商標)、AMD(登録商標)、Intel(登録商標)、Qualcomm(登録商標)などによって開発されたプロセッサが含まれ得る。特定の実施態様では、プロセッサが複数の処理コアを含んでいてもよく、各処理コアは、その他の処理コアから独立して命令を実行するように構成され得る。さらに、特定の実施態様では、各プロセッサまたは処理コアは、複数の処理スレッド間の論理的分離を維持しながら、同じプロセッサまたは処理コアで命令を実行する複数の処理スレッドを実装し得る。プロセッサまたは処理コアで実行されるそのような処理スレッドは、ソフトウェアに対して別々の論理プロセッサまたは処理コアとして示され得る。いくつかの実施態様では、複数のプロセッサ、処理コア、または同じコアで実行される処理スレッドが、例えば、バス、レベル1(L1)キャッシュ、および/またはレベル2(L2)キャッシュなどの、特定のリソースを共有し得る。処理論理1102によって実行される命令は、コンピュータ可読記憶媒体上に、例えば、コンピュータプログラムの形で格納され得る。コンピュータ可読記憶媒体は、非一時的であり得る。場合によっては、コンピュータ可読媒体は、メモリ1110の一部であり得る。処理論理1102は、例えば、ニューラル・ネットワーク・プロセッサ302などを含む、人工ニューラルネットワーク計算を行うためのハードウェア回路も含み得る。
[0128]クライアントによって要求されたパーソナル・アシスタント・サービスを提供するためにクライアントに処理論理1102へのアクセスを許可することができる。例えば、コンピューティングデバイス1100は、画像認識ソフトウェアアプリケーションを実行するための仮想マシンをホストし得る。画像認識ソフトウェアアプリケーションは、実行されると、例えば、画像に含まれるオブジェクトを予測する処理論理1102にアクセスし得る。別の例として、処理論理1102へのアクセスを、クライアント機器(例えば、リモートコンピュータや、スマートフォンなど)上で実行されている画像認識ソフトウェアアプリケーションが、画像の認識を行うために処理論理1102に直接アクセスできるベアメタルインスタンスの一部として許可することもできる。
[0129]メモリ1110は、揮発性もしくは不揮発性のどちらか、または揮発性と不揮発性の両方のタイプのメモリを含み得る。メモリ1110は、例えば、ランダム・アクセス・メモリ(RAM)、読取り専用メモリ(ROM)、電気的消去可能プログラム可能読取り専用メモリ(EEPROM)、フラッシュメモリ、および/または何らかの他の適切な記憶媒体を含み得る。場合によっては、メモリ1110の一部または全部がコンピューティングデバイス1100の内部にあってもよく、場合によっては、メモリの一部または全部がコンピューティングデバイス1100の外部にあってもよい。メモリ1110は、処理論理1102によって実行されると、コンピューティングデバイス1100にネットワーキング機能を提供する命令を実行するための実行環境を提供する実行可能命令を含むオペレーティングシステムを格納し得る。メモリ1110はまた、例えば、人工ニューラルネットワークの計算を行うためのソフトウェアアプリケーションも格納し得る。例えば、メモリ1110は、上記の式の計算に関連したソフトウェアルーチンを格納し得る。処理論理1102がFPGAの形である場合には、メモリ1110は、処理論理1102の様々な論理回路構成要素を表すネットリストデータを格納し得る。
[0130]バス・インターフェース・モジュール1108は、外部通信媒体上での、ホストデバイスおよび/またはコンピューティングシステム内の他の構成要素などの外部エンティティとの通信を可能にし得る。バス・インターフェース・モジュール1108は、ケーブル、ソケット、ポートに接続するため、または外部通信媒体へのその他の接続のための物理インターフェースを含み得る。バス・インターフェース・モジュール1108は、入力トランザクションおよび出力トランザクションを管理するハードウェアおよび/またはソフトウェアをさらに含み得る。バス・インターフェース・モジュール1108は、周辺機器相互接続(PCI)ベースのプロトコル、不揮発性メモリエクスプレス(NVMe)、アドバンスト・ホスト・コントローラ・インターフェース(AHCI)、小型コンピュータシステムインターフェース(SCSI)、シリアルアタッチトSCSI(SAS)、シリアルATアタッチメント(SATA)、パラレルATA(PATA)、何らかの他の標準バスプロトコル、または専用バスプロトコルなどのローカル・バス・プロトコルを実装し得る。バス・インターフェース・モジュール1108は、特に、コネクタ、電源管理、およびエラー処理を含む、これらのバスプロトコルのいずれかのための物理層を含み得る。いくつかの実施態様では、コンピューティングデバイス1100は、複数の外部エンティティと通信するための複数のバス・インターフェース・モジュールを含み得る。これら複数のバス・インターフェース・モジュールは、同じローカル・バス・プロトコル、異なるローカル・バス・プロトコル、または同じバスプロトコルと異なるバスプロトコルの組み合わせを実装し得る。
[0131]ネットワーク・インターフェース・モジュール1112は、ネットワークと通信するためのハードウェアおよび/またはソフトウェアを含み得る。このネットワーク・インターフェース・モジュール1112は、例えば、ネットワークへの有線接続のための物理コネクタもしくは物理ポート、および/またはネットワークへの無線通信のためのアンテナを含み得る。ネットワーク・インターフェース・モジュール1112は、ネットワーク・プロトコル・スタックを実装するように構成されたハードウェアおよび/またはソフトウェアをさらに含み得る。ネットワーク・インターフェース・モジュール1112は、例えば、特に、TCP/IP、InfiniBand、RoCE、米国電気電子技術者協会(IEEE)802.11無線プロトコル、ユーザ・データグラム・プロトコル(UDP)、非同期転送モード(ATM)、トークンリング、フレームリレー、ハイレベル・データ・リンク制御(HDLC)、光ファイバ分散データインターフェース(FDDI)、および/またはポイントツーポイントプロトコル(PPP)などのネットワークプロトコルを使用してネットワークと通信し得る。いくつかの実施態様では、コンピューティングデバイス1100は、異なるネットワークと通信するように各々構成された、複数のネットワーク・インターフェース・モジュールを含み得る。例えば、これらの実施態様では、コンピューティングデバイス1100は、有線のイーサネットネットワーク、無線の802.11ネットワーク、セルラーネットワーク、InfiniBandネットワークなどと通信するためのネットワーク・インターフェース・モジュールを含み得る。いくつかの実施形態では、コンピューティングデバイス1100は、ネットワーク・インターフェース・モジュール1112を介してサーバから、忘却ゲート因子、入力因子、出力因子などの生成のための前述の重みベクトルなどのパラメータセットを受け取り得る。
[0132]上記の、コンピューティングデバイス1100の様々な構成要素およびモジュールは、ディスクリートコンポーネントとして、システム・オン・チップ(SoC)として、ASICとして、NPUとして、FPGAとして、またはそれらの任意の組み合わせとして実装され得る。いくつかの実施形態では、SoCまたはその他の構成要素は、トラフィック監視、トラフィックシェーピング、計算などといった様々なサービスを提供するために別のコンピューティングシステムに通信可能に結合され得る。この技術のいくつかの実施形態では、SoCまたはその他の構成要素は、本明細書で開示される複数のサブシステムを含み得る。
[0133]本明細書に記載されるモジュールは、ソフトウェアモジュール、ハードウェアモジュール、またはそれらの適切な組み合わせであり得る。モジュールがソフトウェアモジュールである場合、モジュールを、非一時的なコンピュータ可読媒体上で具体化し、本明細書に記載されるコンピュータシステムのいずれかにおいてプロセッサが処理することができる。記載のプロセスおよびアーキテクチャを、リアルタイムで、またはユーザインタラクションの前に非対称モードで行うことができることに留意されたい。モジュールは、図11に示される方法で構成されてもよく、かつ/または、本明細書に記載される機能を、別々のモジュールとして存在する1つもしくは複数のモジュールが提供することもでき、かつ/または、本明細書に記載されるモジュール機能を複数のモジュールに拡散することもできる。
[0134]したがって、本明細書および図面は、限定的な意味ではなく例示として評価されるべきである。しかしながら、特許請求の範囲に記載される本開示のより広い趣旨および範囲から逸脱することなく、それらに様々な改変および変更が加えられ得ることは明らかであろう。
[0135]他の変形形態も本開示の範囲内にある。よって、開示の技法には様々な改変形態および代替構造の余地があるが、それらの特定の例示の実施形態が図面に示されており、以上で詳細に説明されている。しかしながら、本開示を開示の特定の1つまたは複数の形態に限定する意図はなく、むしろ反対に、添付の特許請求の範囲で定義される、本開示の趣旨および範囲内に当たるすべての改変形態、代替構造、および均等物を網羅することが意図されていることを理解されたい。
開示の技術のいくつかの実施形態を以下の各項により説明する。
1.人工ニューラルネットワークの畳み込み層への浮動小数点入力を受け取ることと、
浮動小数点入力をnビットの整数入力に線形に量子化することであって、
nが8の倍数であり、
浮動小数点入力の最小値が整数ゼロとして量子化され、
浮動小数点入力の最大値が2−1として量子化され、
浮動小数点入力のゼロ値が量子化誤差なしで浮動小数点入力のゼロ値を表す整数として量子化される、ことと、
整数入力をメモリに格納することと、
畳み込み層が、メモリから整数入力を読み取ることと、
減算エンジンが、浮動小数点入力のゼロ値が整数値ゼロによって表されるように、整数入力から浮動小数点入力のゼロ値を表す整数を減算することによって差分値を作成することと、
畳み込み層が、積和を生成するために差分値に対して1組の(n+1)ビットの整数の積和演算を行うことと、
人工ニューラルネットワークの活性化層、プーリング層、または出力バッファが、積和を浮動小数点スケーリング係数でスケーリングすることによって浮動小数点出力を生成することと
を含む、コンピュータ実装方法。
2.nが8である、第1項に記載のコンピュータ実装方法。
3.浮動小数点入力の最小値と最大値とが浮動小数点入力のゼロ値に対して対称ではない、前項のいずれか一項に記載のコンピュータ実装方法。
4.畳み込み演算のための低精度入力を格納するように構成された記憶装置であって、低精度入力が非対称量子化を使用して高精度入力から生成される、記憶装置と、
記憶装置から低精度入力を受け取り、低精度入力から高精度ゼロ値を表す低精度値を減算することにより、差分値を作成するように構成された減算エンジンの配列と、
差分値を使用して積和を生成するように構成された処理要素(PE)配列であって、PE配列が複数行の処理要素を含み、各行の処理要素が対応する減算エンジンから差分値を受け取るように構成された、PE配列と、
積和をスケーリング係数によってスケーリングして高精度出力を生成するように構成された処理エンジンと
を含む装置。
5.低精度入力がnビット形式で記憶装置に格納され、
nが8の倍数である、
第4項に記載の装置。
6.高精度入力が32ビットの浮動小数点入力を含み、
低精度入力が8ビットの符号なし整数を含み、
差分値が9ビットの符号付き整数を含む、
第5項に記載の装置。
7.非対称量子化において、
高精度入力の最小値が低精度入力におけるゼロ値として量子化され、
高精度入力の最大値が低精度入力における最大値として量子化され、
高精度入力のゼロ値が、量子化誤差なしで高精度ゼロ値を表す低精度値として量子化される、
第4項〜第6項のいずれか一項に記載の装置。
8.高精度入力が、人工ニューラルネットワークの層の重みおよび入力データ要素を含み、
重みおよび入力データ要素が独立して量子化される、
第4項〜第7項のいずれか一項に記載の装置。
9.減算エンジンの配列が、重みと入力データ要素の両方に対応する低精度入力から減算するように構成される、第8項に記載の装置。
10.装置が、フィールド・プログラマブル・ゲート・アレイ(FPGA)、システム・オン・チップ(SoC)、特定用途向け集積回路(ASIC)、プログラマブル・アレイ・ロジック(PAL)、または複合プログラマブル・ロジック・デバイス(CPLD)を含む、第4項〜第9項のいずれか一項に記載の装置。
11.処理要素配列が、積和を生成するために差分値を使用して1組の乗算および加算を行うように構成される、第4項〜第10項のいずれか一項に記載の装置。
12.処理エンジンが、人工ニューラルネットワークの活性化エンジン、プーリングエンジン、または出力バッファを含む、第4項〜第11項のいずれか一項に記載の装置。
13.記憶装置から、畳み込み演算のための低精度入力を受け取ることであって、低精度入力が非対称量子化を使用して高精度入力から生成される、ことと、
減算エンジンが、差分値を作成するために低精度入力から高精度ゼロ値を表す低精度値を減算することと、
処理エンジンが、積和を生成するために差分値に対して積和演算を行うことと、
後処理エンジンが、積和をスケーリング係数でスケーリングすることによって高精度出力を生成することと
を含む、コンピュータ実装方法。
14.高精度入力が32ビットの浮動小数点入力を含み、
低精度入力が8ビットの符号なし整数を含み、
差分値が9ビットの符号付き整数を含む、
第13項に記載のコンピュータ実装方法。
15.非対称量子化において、
高精度入力の最小値が低精度入力におけるゼロ値として量子化され、
高精度入力の最大値が低精度入力における最大値として量子化され、
高精度入力のゼロ値が、量子化誤差なしで高精度ゼロ値を表す低精度値として量子化される、
第13項または第14項に記載のコンピュータ実装方法。
16.高精度入力の最小値と最大値とが高精度入力のゼロ値に対して対称ではない、第15項に記載のコンピュータ実装方法。
17.高精度入力が、人工ニューラルネットワークの層の重みまたは入力データ要素を含む、第13項〜第16項のいずれか一項に記載のコンピュータ実装方法。
18.処理エンジンが、高精度の積和演算ではなく低精度の積和演算を行うように構成される、第13項〜第17項のいずれか一項に記載のコンピュータ実装方法。
19.積和演算が処理要素配列によって行われる、第13項〜第18項のいずれか一項に記載のコンピュータ実装方法。
20.積和をスケーリング係数でスケーリングすることが、積和を、人工ニューラルネットワークの活性化エンジン、プーリングエンジン、または出力バッファを使用してスケーリングすることを含む、第13項〜第19項のいずれか一項に記載のコンピュータ実装方法。
[0136]開示の実施形態を説明する文脈における(特に、添付の特許請求の範囲の文脈における)「a」および「and」および「the」の各用語および類似した指示対象の使用は、本明細書で特に指示されるか、または文脈と明らかに矛盾しない限り、単数形と複数形の両方を含むと解釈されるべきである。「comprising」、「having」、「including」および「containing」の各用語は、特に注記されない限り、非限定用語(すなわち、「〜を含むがこれに限定されない」を意味する)と解釈されるべきである。「connected」という用語は、何かが介在しているとしても、部分的または完全に内部に含まれるか、取り付けられるか、または1つに結合されることと解釈されるべきである。本明細書における値の範囲の記述は、本明細書で特に指示されない限り、単に、その範囲内に該当する各別々の値に個別に言及する簡単な方法として使用するためのものにすぎず、各別々の値は、それが本明細書に個別に記載された場合と同様に本明細書に組み込まれる。本明細書で特に指示されるか、または文脈と明らかに矛盾しない限り、本明細書に記載されるすべての方法を任意の適切な順序で行うことができる。本明細書で提供されるありとあらゆる例の使用、または例示的表現(「such as」など)は、単に、本開示の実施形態をより良く解明するためのものにすぎず、特に求められない限り、本開示の範囲に対する限定を提示するものではない。本明細書におけるいかなる表現も、特許請求されない要素を本開示の実施に不可欠であるものとして指示していると解釈されるべきではない。
[0137]「X、Y、またはZのうちの少なくとも1つ」などの論理和表現は、特に言及されない限り、項目、項などが、X、Y、もしくはZ、またはそれらの任意の組み合わせ(X、Y、および/またはZなど)であり得ることを提示するために一般に使用されるように文脈内で理解されるべきことが意図されている。よって、そのような論理和表現は、一般に、特定の実施形態が、Xのうちの少なくとも1つ、Yのうちの少なくとも1つ、またはZのうちの少なくとも1つが各々存在することを必要とすることを示唆するためのものではなく、示唆すべきでもない。
[0138]本明細書には、本発明者らに知られている本開示を実行するための最良の形態を含む、本開示の様々な実施形態が記載されている。それらの実施形態の変形形態は、前述の説明を読めば当業者には明らかになるであろう。本発明者らは、当業者がそのような変形形態を適宜用いることを予期しており、本発明者らは、本開示が、本明細書に具体的に記載される以外の方法で実施されることを意図している。したがって、本開示は、適用法によって許容されるように添付の特許請求の範囲に記載される主題のすべての改変形態および均等物を含む。さらに、本明細書で特に指示されるか、または文脈と明らかに矛盾しない限り、それらのすべての可能な変形形態における上記の要素の任意の組み合わせも本開示によって包含される。

Claims (15)

  1. 畳み込み演算のための低精度入力を格納するように構成された記憶装置であって、前記低精度入力が非対称量子化を使用して高精度入力から生成される、記憶装置と、
    前記記憶装置から前記低精度入力を受け取り、前記低精度入力から高精度ゼロ値を表す低精度値を減算することにより、差分値を作成するように構成された減算エンジンの配列と、
    前記差分値を使用して積和を生成するように構成された処理要素(PE)配列であって、前記PE配列が複数行の処理要素を含み、各行の処理要素が対応する減算エンジンから差分値を受け取るように構成された、PE配列と、
    前記積和をスケーリング係数によってスケーリングして高精度出力を生成するように構成された処理エンジンと
    を含む装置。
  2. 前記低精度入力がnビット形式で前記記憶装置に格納され、
    nが8の倍数である、
    請求項1に記載の装置。
  3. 前記高精度入力が32ビットの浮動小数点入力を含み、
    前記低精度入力が8ビットの符号なし整数を含み、
    前記差分値が9ビットの符号付き整数を含む、
    請求項2に記載の装置。
  4. 前記非対称量子化において、
    前記高精度入力の最小値が前記低精度入力におけるゼロ値として量子化され、
    前記高精度入力の最大値が前記低精度入力における最大値として量子化され、
    前記高精度入力のゼロ値が、量子化誤差なしで前記高精度ゼロ値を表す前記低精度値として量子化される、
    前記請求項のいずれか一項に記載の装置。
  5. 前記高精度入力が、人工ニューラルネットワークの層の重みおよび入力データ要素を含み、
    前記重みおよび前記入力データ要素が独立して量子化される、
    前記請求項のいずれか一項に記載の装置。
  6. 減算エンジンの前記配列が、前記重みと前記入力データ要素の両方に対応する低精度入力から減算するように構成される、請求項5に記載の装置。
  7. 前記装置が、フィールド・プログラマブル・ゲート・アレイ(FPGA)、システム・オン・チップ(SoC)、特定用途向け集積回路(ASIC)、プログラマブル・アレイ・ロジック(PAL)、または複合プログラマブル・ロジック・デバイス(CPLD)を含む、前記請求項のいずれか一項に記載の装置。
  8. 前記処理要素配列が、前記積和を生成するために前記差分値を使用して1組の乗算および加算を行うように構成される、前記請求項のいずれか一項に記載の装置。
  9. 前記処理エンジンが、人工ニューラルネットワークの活性化エンジン、プーリングエンジン、または出力バッファを含む、前記請求項のいずれか一項に記載の装置。
  10. 記憶装置から、畳み込み演算のための低精度入力を受け取ることであって、前記低精度入力が非対称量子化を使用して高精度入力から生成される、ことと、
    減算エンジンが、差分値を作成するために前記低精度入力から高精度ゼロ値を表す低精度値を減算することと、
    処理エンジンが、積和を生成するために前記差分値に対して積和演算を行うことと、
    後処理エンジンが、前記積和をスケーリング係数でスケーリングすることによって高精度出力を生成することと
    を含む、コンピュータ実装方法。
  11. 前記高精度入力が32ビットの浮動小数点入力を含み、
    前記低精度入力が8ビットの符号なし整数を含み、
    前記差分値が9ビットの符号付き整数を含む、
    請求項10に記載のコンピュータ実装方法。
  12. 前記非対称量子化において、
    前記高精度入力の最小値が前記低精度入力におけるゼロ値として量子化され、
    前記高精度入力の最大値が前記低精度入力における最大値として量子化され、
    前記高精度入力のゼロ値が、量子化誤差なしで前記高精度ゼロ値を表す前記低精度値として量子化される、
    請求項10または11に記載のコンピュータ実装方法。
  13. 前記高精度入力の前記最小値と前記最大値とが前記高精度入力の前記ゼロ値に対して対称ではない、請求項12に記載のコンピュータ実装方法。
  14. 前記高精度入力が、人工ニューラルネットワークの層の重みまたは入力データ要素を含む、請求項10〜13のいずれか一項に記載のコンピュータ実装方法。
  15. 前記処理エンジンが、高精度の積和演算ではなく低精度の積和演算を行うように構成される、請求項10〜14のいずれか一項に記載のコンピュータ実装方法。
JP2020551488A 2018-03-23 2019-03-20 加速された量子化積和演算 Active JP6946572B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/934,681 2018-03-23
US15/934,681 US10678508B2 (en) 2018-03-23 2018-03-23 Accelerated quantized multiply-and-add operations
PCT/US2019/023133 WO2019183202A1 (en) 2018-03-23 2019-03-20 Accelerated quantized multiply-and-add operations

Publications (2)

Publication Number Publication Date
JP2021510888A true JP2021510888A (ja) 2021-04-30
JP6946572B2 JP6946572B2 (ja) 2021-10-06

Family

ID=66001373

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020551488A Active JP6946572B2 (ja) 2018-03-23 2019-03-20 加速された量子化積和演算

Country Status (5)

Country Link
US (2) US10678508B2 (ja)
EP (1) EP3738082B1 (ja)
JP (1) JP6946572B2 (ja)
CN (1) CN111937010B (ja)
WO (1) WO2019183202A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023120205A1 (ja) * 2021-12-24 2023-06-29 ソニーセミコンダクタソリューションズ株式会社 推論装置、推論方法及び推論プログラム

Families Citing this family (99)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017211735A (ja) * 2016-05-24 2017-11-30 ソニー株式会社 演算処理装置、及び、演算処理方法
US10963775B2 (en) * 2016-09-23 2021-03-30 Samsung Electronics Co., Ltd. Neural network device and method of operating neural network device
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
CN110413551B (zh) * 2018-04-28 2021-12-10 上海寒武纪信息科技有限公司 信息处理装置、方法及设备
EP3637272A4 (en) * 2017-06-26 2020-09-02 Shanghai Cambricon Information Technology Co., Ltd DATA-SHARING SYSTEM AND RELATED DATA-SHARING PROCESS
CN110210610B (zh) * 2018-03-27 2023-06-20 腾讯科技(深圳)有限公司 卷积计算加速器、卷积计算方法及卷积计算设备
US11783167B1 (en) 2018-04-20 2023-10-10 Perceive Corporation Data transfer for non-dot product computations on neural network inference circuit
US11568227B1 (en) 2018-04-20 2023-01-31 Perceive Corporation Neural network inference circuit read controller with multiple operational modes
US11586910B1 (en) 2018-04-20 2023-02-21 Perceive Corporation Write cache for neural network inference circuit
US11531868B1 (en) 2018-04-20 2022-12-20 Perceive Corporation Input value cache for temporarily storing input values
US10740434B1 (en) 2018-04-20 2020-08-11 Perceive Corporation Reduced dot product computation circuit
US11531727B1 (en) 2018-04-20 2022-12-20 Perceive Corporation Computation of neural network node with large input values
US10769526B2 (en) * 2018-04-24 2020-09-08 Intel Corporation Machine learning accelerator architecture
KR20190125141A (ko) * 2018-04-27 2019-11-06 삼성전자주식회사 뉴럴 네트워크의 파라미터들을 양자화하는 방법 및 장치
US11948074B2 (en) * 2018-05-14 2024-04-02 Samsung Electronics Co., Ltd. Method and apparatus with neural network parameter quantization
WO2019220095A1 (en) * 2018-05-16 2019-11-21 Isize Limited Encoding and decoding image data
US11562208B2 (en) * 2018-05-17 2023-01-24 Qualcomm Incorporated Continuous relaxation of quantization for discretized deep neural networks
KR102516366B1 (ko) * 2018-05-30 2023-03-31 삼성전자주식회사 특징 데이터 획득 방법 및 장치
US11615300B1 (en) * 2018-06-13 2023-03-28 Xilinx, Inc. System and method for implementing neural networks in integrated circuits
US10671891B2 (en) * 2018-07-19 2020-06-02 International Business Machines Corporation Reducing computational costs of deep reinforcement learning by gated convolutional neural network
JP6970058B2 (ja) * 2018-07-19 2021-11-24 株式会社東芝 演算装置
CA3051429A1 (en) * 2018-08-08 2020-02-08 Applied Brain Research Inc. Digital circuits for evaluating neural engineering framework style neural networks
EP3844620A1 (en) * 2018-08-29 2021-07-07 Qualcomm Incorporated Method, apparatus, and system for an architecture for machine learning acceleration
KR20200028168A (ko) * 2018-09-06 2020-03-16 삼성전자주식회사 컨볼루셔널 뉴럴 네트워크를 이용하는 컴퓨팅 장치 및 그 동작 방법
US10853067B2 (en) 2018-09-27 2020-12-01 Intel Corporation Computer processor for higher precision computations using a mixed-precision decomposition of operations
US10726516B2 (en) * 2018-10-11 2020-07-28 Futurewei Technologies, Inc. Arithmetic logic unit (ALU)-centric operations in graphics processing units (GPUs)
CN111126558B (zh) * 2018-10-31 2024-04-02 嘉楠明芯(北京)科技有限公司 一种卷积神经网络计算加速方法及装置、设备、介质
US11475352B2 (en) * 2018-11-07 2022-10-18 Alibaba Group Holding Limited Quantizing machine learning models with balanced resolution via damped encoding
KR20200061164A (ko) * 2018-11-23 2020-06-02 삼성전자주식회사 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서
US11995533B1 (en) 2018-12-05 2024-05-28 Perceive Corporation Executing replicated neural network layers on inference circuit
US11893470B2 (en) * 2018-12-06 2024-02-06 MIPS Tech, LLC Neural network processing using specialized data representation
US11586883B2 (en) * 2018-12-14 2023-02-21 Microsoft Technology Licensing, Llc Residual quantization for neural networks
US11347297B1 (en) 2019-01-23 2022-05-31 Perceive Corporation Neural network inference circuit employing dynamic memory sleep
US11061738B2 (en) * 2019-02-28 2021-07-13 Movidius Limited Methods and apparatus to store and access multi dimensional data
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
CN113366454A (zh) 2019-03-15 2021-09-07 英特尔公司 用于图形操作的多片架构
CN112534405A (zh) 2019-03-15 2021-03-19 英特尔公司 用于脉动阵列上的块稀疏操作的架构
US11663454B2 (en) * 2019-03-29 2023-05-30 Aspiring Sky Co. Limited Digital integrated circuit with embedded memory for neural network inferring
US11797345B2 (en) * 2019-04-30 2023-10-24 Prakash C R J Naidu Hardware accelerator for efficient convolution processing
US20200356836A1 (en) * 2019-05-07 2020-11-12 Apple Inc. Fast deep learning fully-connected column-major implementation
US11625585B1 (en) 2019-05-21 2023-04-11 Perceive Corporation Compiler for optimizing filter sparsity for neural network implementation configuration
CN111988609A (zh) * 2019-05-22 2020-11-24 富士通株式会社 图像编码装置、概率模型生成装置和图像解码装置
JP2021005211A (ja) * 2019-06-26 2021-01-14 キオクシア株式会社 情報処理方法及び情報処理装置
US11379555B2 (en) * 2019-06-28 2022-07-05 Amazon Technologies, Inc. Dilated convolution using systolic array
US12008467B2 (en) * 2019-07-01 2024-06-11 Baidu Usa Llc Asymmetric quantization for compression and for acceleration of inference for neural networks
KR20210014902A (ko) * 2019-07-31 2021-02-10 삼성전자주식회사 프로세서 및 그 제어 방법
US11501145B1 (en) * 2019-09-17 2022-11-15 Amazon Technologies, Inc. Memory operation for systolic array
US11842169B1 (en) 2019-09-25 2023-12-12 Amazon Technologies, Inc. Systolic multiply delayed accumulate processor architecture
CN110766155A (zh) * 2019-09-27 2020-02-07 东南大学 一种基于混合精度存储的深度神经网络加速器
US11681902B2 (en) 2019-09-27 2023-06-20 Amazon Technologies, Inc. Transposed convolution using systolic array
US11651209B1 (en) 2019-10-02 2023-05-16 Google Llc Accelerated embedding layer computations
TWI774067B (zh) * 2019-10-18 2022-08-11 旺宏電子股份有限公司 記憶體裝置及其記憶體內計算方法
US11663746B2 (en) 2019-11-15 2023-05-30 Intel Corporation Systolic arithmetic on sparse data
US11861761B2 (en) 2019-11-15 2024-01-02 Intel Corporation Graphics processing unit processing and caching improvements
US11467806B2 (en) 2019-11-27 2022-10-11 Amazon Technologies, Inc. Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range
US11816446B2 (en) * 2019-11-27 2023-11-14 Amazon Technologies, Inc. Systolic array component combining multiple integer and floating-point data types
KR20210076687A (ko) * 2019-12-16 2021-06-24 삼성전자주식회사 뉴럴 프로세싱 장치 및 뉴럴 프로세싱 장치에서 뉴럴 네트워크를 처리하는 방법
CN111046964B (zh) * 2019-12-18 2021-01-26 电子科技大学 一种基于卷积神经网络的人和车辆红外热图像识别方法
CN113159267A (zh) * 2020-01-07 2021-07-23 Tcl集团股份有限公司 一种图像数据处理方法、装置及终端设备
US11847451B2 (en) * 2020-01-07 2023-12-19 SK Hynix Inc. Processing-in-memory (PIM) device for implementing a quantization scheme
US11960856B1 (en) * 2020-01-15 2024-04-16 Flex Logix Technologies, Inc. Multiplier-accumulator processing pipeline using filter weights having gaussian floating point data format
CN111260036B (zh) * 2020-01-19 2023-01-10 苏州浪潮智能科技有限公司 一种神经网络加速方法和装置
CN111291876B (zh) * 2020-01-21 2023-03-28 星宸科技股份有限公司 运算装置、运算方法和运算芯片
CN111339490B (zh) * 2020-02-18 2024-04-19 三星(中国)半导体有限公司 矩阵乘法计算方法和装置
US11436011B2 (en) * 2020-02-18 2022-09-06 Samsung Electronics Co., Ltd. Processing method and processing device with matrix multiplication computation
US11275562B2 (en) 2020-02-19 2022-03-15 Micron Technology, Inc. Bit string accumulation
US11823054B2 (en) 2020-02-20 2023-11-21 International Business Machines Corporation Learned step size quantization
CN111340769A (zh) * 2020-02-22 2020-06-26 苏州杰锐思智能科技股份有限公司 一种卷积神经网络系统及表面裂纹检测方法
JP7469912B2 (ja) 2020-03-03 2024-04-17 キヤノン株式会社 情報処理装置、推論装置、それらの制御方法、プログラム、記憶媒体
US11449758B2 (en) * 2020-03-11 2022-09-20 Qualcomm Incorproated Quantization and inferencing for low-bitwidth neural networks
CN111461302B (zh) * 2020-03-30 2024-04-19 嘉楠明芯(北京)科技有限公司 一种基于卷积神经网络的数据处理方法、设备及存储介质
US11551148B2 (en) * 2020-04-29 2023-01-10 Marvell Asia Pte Ltd System and method for INT9 quantization
US11204977B2 (en) * 2020-05-05 2021-12-21 Intel Corporation Scalable sparse matrix multiply acceleration using systolic arrays with feedback inputs
DE102020131666A1 (de) * 2020-05-05 2021-11-11 Intel Corporation Skalierbare Multiplikationsbeschleunigung dünnbesetzter Matrizen unter Verwendung systolischer Arrays mit Rückkopplungseingaben
US11308027B1 (en) 2020-06-29 2022-04-19 Amazon Technologies, Inc. Multiple accumulate busses in a systolic array
US20220004182A1 (en) * 2020-07-02 2022-01-06 Nec Laboratories America, Inc. Approach to determining a remaining useful life of a system
CN113919477A (zh) * 2020-07-08 2022-01-11 嘉楠明芯(北京)科技有限公司 一种卷积神经网络的加速方法及装置
US11915126B2 (en) * 2020-09-04 2024-02-27 Recogni Inc. Low power hardware architecture for a convolutional neural network
CN111932437B (zh) * 2020-10-10 2021-03-05 深圳云天励飞技术股份有限公司 图像处理方法、装置、电子设备及计算机可读存储介质
EP4248305A1 (en) * 2020-11-19 2023-09-27 Google LLC Systolic array cells with output post-processing
CN112884146B (zh) * 2021-02-25 2024-02-13 香港理工大学深圳研究院 一种训练基于数据量化与硬件加速的模型的方法及系统
CN112862079B (zh) * 2021-03-10 2023-04-28 中山大学 一种流水式卷积计算架构设计方法及残差网络加速系统
JP7420100B2 (ja) 2021-03-15 2024-01-23 オムロン株式会社 処理装置、処理方法、およびプログラム
CN113128116B (zh) * 2021-04-20 2023-09-26 上海科技大学 可用于轻量级神经网络的纯整型量化方法
CN113570033B (zh) * 2021-06-18 2023-04-07 北京百度网讯科技有限公司 神经网络处理单元、神经网络的处理方法及其装置
US11880682B2 (en) 2021-06-30 2024-01-23 Amazon Technologies, Inc. Systolic array with efficient input reduction and extended array performance
CN113486200A (zh) * 2021-07-12 2021-10-08 北京大学深圳研究生院 一种稀疏神经网络的数据处理方法、处理器和系统
CN113554163B (zh) * 2021-07-27 2024-03-29 深圳思谋信息科技有限公司 卷积神经网络加速器
CN117223008A (zh) * 2021-07-30 2023-12-12 华为技术有限公司 计算机系统和数据处理方法
US20230075087A1 (en) * 2021-09-03 2023-03-09 Adobe Inc. Equivariant models for generating vector representations of temporally-varying content
US20230133360A1 (en) * 2021-10-28 2023-05-04 Taiwan Semiconductor Manufacturing Company, Ltd. Compute-In-Memory-Based Floating-Point Processor
GB2614327A (en) * 2021-12-31 2023-07-05 Imagination Tech Ltd Configurable pooling process unit for neural network accelerator
CN116384444A (zh) * 2021-12-31 2023-07-04 想象技术有限公司 用于神经网络加速器的可配置池化处理单元
CN114492778A (zh) * 2022-02-16 2022-05-13 安谋科技(中国)有限公司 神经网络模型的运行方法、可读介质和电子设备
US20230401433A1 (en) * 2022-06-09 2023-12-14 Recogni Inc. Low power hardware architecture for handling accumulation overflows in a convolution operation
US20230059976A1 (en) * 2022-10-18 2023-02-23 Intel Corporation Deep neural network (dnn) accelerator facilitating quantized inference
CN117407793B (zh) * 2023-11-03 2024-05-28 上海无问芯穹智能科技有限公司 一种用于大语言模型的并行化策略优化方法、系统、设备及介质
CN117217318B (zh) * 2023-11-07 2024-01-26 瀚博半导体(上海)有限公司 基于Transformer网络模型的文本生成方法和装置
CN117634577B (zh) * 2024-01-25 2024-06-07 深圳市九天睿芯科技有限公司 向量处理器、神经网络加速器、芯片及电子设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018010618A (ja) * 2016-05-03 2018-01-18 イマジネイション テクノロジーズ リミテッド 畳み込みニューラルネットワークハードウエア構成
JP6293963B1 (ja) * 2017-08-31 2018-03-14 Tdk株式会社 ニューロモルフィック素子を含むアレイの制御装置、離散化ステップサイズの演算方法およびプログラム

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9613001B2 (en) * 2013-12-20 2017-04-04 Intel Corporation Processing device for performing convolution operations
US9805303B2 (en) 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US10474627B2 (en) * 2015-10-08 2019-11-12 Via Alliance Semiconductor Co., Ltd. Neural network unit with neural memory and array of neural processing units that collectively shift row of data received from neural memory
US10380481B2 (en) * 2015-10-08 2019-08-13 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs concurrent LSTM cell calculations
US11029949B2 (en) * 2015-10-08 2021-06-08 Shanghai Zhaoxin Semiconductor Co., Ltd. Neural network unit
US10176425B2 (en) * 2016-07-14 2019-01-08 University Of Dayton Analog neuromorphic circuits for dot-product operation implementing resistive memories
US10726514B2 (en) * 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
CN107291419B (zh) * 2017-05-05 2020-07-31 中国科学院计算技术研究所 用于神经网络处理器的浮点乘法器及浮点数乘法
CN107480770B (zh) 2017-07-27 2020-07-28 中国科学院自动化研究所 可调节量化位宽的神经网络量化与压缩的方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018010618A (ja) * 2016-05-03 2018-01-18 イマジネイション テクノロジーズ リミテッド 畳み込みニューラルネットワークハードウエア構成
JP6293963B1 (ja) * 2017-08-31 2018-03-14 Tdk株式会社 ニューロモルフィック素子を含むアレイの制御装置、離散化ステップサイズの演算方法およびプログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JACOB, BENOIT ET AL., QUANTIZATION AND TRAINING OF NEURAL NETWORKS FOR EFFICIENT INTEGER-ARITHMETIC-ONLY INFERENCE [ONLINE, JPN6021012774, 15 December 2017 (2017-12-15), ISSN: 0004483019 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023120205A1 (ja) * 2021-12-24 2023-06-29 ソニーセミコンダクタソリューションズ株式会社 推論装置、推論方法及び推論プログラム

Also Published As

Publication number Publication date
US10983754B2 (en) 2021-04-20
JP6946572B2 (ja) 2021-10-06
CN111937010B (zh) 2021-09-21
EP3738082A1 (en) 2020-11-18
EP3738082B1 (en) 2023-01-11
WO2019183202A1 (en) 2019-09-26
US10678508B2 (en) 2020-06-09
CN111937010A (zh) 2020-11-13
US20190294413A1 (en) 2019-09-26
US20200293284A1 (en) 2020-09-17

Similar Documents

Publication Publication Date Title
JP6946572B2 (ja) 加速された量子化積和演算
US11868895B2 (en) Dynamic processing element array expansion
WO2022083536A1 (zh) 一种神经网络构建方法以及装置
WO2022042713A1 (zh) 一种用于计算设备的深度学习训练方法和装置
CN110050267B (zh) 用于数据管理的系统和方法
KR102545128B1 (ko) 뉴럴 네트워크를 수반한 클라이언트 장치 및 그것을 포함하는 시스템
CN112308200B (zh) 神经网络的搜索方法及装置
JP2021508895A (ja) ニューラルネットワークアレイの性能の改善
CN111914997B (zh) 训练神经网络的方法、图像处理方法及装置
WO2022111617A1 (zh) 一种模型训练方法及装置
CN113705769A (zh) 一种神经网络训练方法以及装置
WO2023231794A1 (zh) 一种神经网络参数量化方法和装置
WO2022012668A1 (zh) 一种训练集处理方法和装置
WO2021042857A1 (zh) 图像分割模型的处理方法和处理装置
WO2022179588A1 (zh) 一种数据编码方法以及相关设备
CN112215332A (zh) 神经网络结构的搜索方法、图像处理方法和装置
WO2022100490A1 (en) Methods and systems for deblurring blurry images
CN113191489A (zh) 二值神经网络模型的训练方法、图像处理方法和装置
CN111738403A (zh) 一种神经网络的优化方法及相关设备
CN114821096A (zh) 一种图像处理方法、神经网络的训练方法以及相关设备
CN114298289A (zh) 一种数据处理的方法、数据处理设备及存储介质
CN112532251A (zh) 一种数据处理的方法及设备
CN116095183A (zh) 一种数据压缩方法以及相关设备
US11868878B1 (en) Executing sublayers of a fully-connected layer
US11263517B1 (en) Flexible weight expansion

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201019

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20201019

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20201019

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20210331

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210409

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210706

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210819

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210915

R150 Certificate of patent or registration of utility model

Ref document number: 6946572

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150