JP2023084094A - 面積高効率畳み込みブロック - Google Patents

面積高効率畳み込みブロック Download PDF

Info

Publication number
JP2023084094A
JP2023084094A JP2022164865A JP2022164865A JP2023084094A JP 2023084094 A JP2023084094 A JP 2023084094A JP 2022164865 A JP2022164865 A JP 2022164865A JP 2022164865 A JP2022164865 A JP 2022164865A JP 2023084094 A JP2023084094 A JP 2023084094A
Authority
JP
Japan
Prior art keywords
circuit
weights
pseudo
layer
input
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
Application number
JP2022164865A
Other languages
English (en)
Inventor
ボイド リチャード
Boyd Richard
トマ-イイ バシレ
Toma-Ii Vasile
パグリア ルカ
Puglia Luca
ビロ ゾルト
Biro Zsolt
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of JP2023084094A publication Critical patent/JP2023084094A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • 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
    • 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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • 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
    • 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

Landscapes

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

Abstract

【課題】回路面積を削減し、電力消費を改善し、不足を削減する回路及びシステムを提供する【解決手段】ニューラルネットワークのためのハードウェアアクセラレータにおいて、並列乗算を実装するために擬似乗算回路を使用する畳み込みブロックは、並列に配置された複数の擬似乗算回路を有する積和回路を含む。各擬似乗算回路は、重みのセットと入力のセットとを受信し、入力に、各入力についての夫々の重みを乗算する。乗算の結果は、その後、1つ又は複数の累積回路210によって総和すなわち累積される。活性化出力を生成するために任意の最終演算230が適用される前に、バイアスと呼ばれる追加のパラメータも、加算器220を用いて加算される。【選択図】図2

Description

本開示は、概して、コンピュータモデリング及びニューラルネットワークに関し、特に、ニューラルネットワーク実装を改善することに関する。
時とともに、コンピュータビジョン等のますます複雑なニューラルネットワーク応用が、そのようなニューラルネットワークを実装するハードウェアに対するますます複雑な需要をもたらしている。ニューラルネットワークは、高い正確性を達成することができるが、多くの場合、高い計算量を必要とし、これは、汎用ニューラルネットワークアクセラレータにとってさえ有効に提供することが困難であり得る。
これらのネットワークにおいて使用される計算の1つのタイプは、畳み込みブロックである。畳み込みは、2つの入力セットの積の総和を含み、この総和の後、典型的なニューラルネットワークでは、活性化関数(例えば、ReLU)等の追加の演算が実行され得る。アクセラレータでは、これらの畳み込みブロックは、入力セットの乗算及び後続の総和を実行するために大規模並列構造において実装されることがあり、これにより、回路内で実装するために大きい面積が要求され得る。
加えて、専用ハードウェアアクセラレータ等のニューラルネットワークハードウェア実装では、一度に(例えば、1クロックサイクル内で)1つの「入力」(例えば、コンピュータビジョン応用における画像、又は画像の一部分)を処理することが可能である複数の層が存在し得る。例えば、入力層は、典型的には3つの色チャネルによって記述される、画像の1×1、2×2、3×3、4×4、5×5、又はより大きい部分を受信してよく、初期処理層は、1クロックサイクル内でその入力についての出力チャネルの完全なセットを生成し得る。しかしながら、ネットワークは、多くの場合、これらの入力のうちの1つよりも多くを一度に受信及び処理する1つ又は複数の次元削減層を含む。それゆえ、削減後、典型的な固定機能ハードウェアアクセラレータ(例えば、ハードコード層アーキテクチャを有する)では、次元削減後の結果として得られるデータは、典型的には、上流層ほど頻繁に更新されず、これにより下流層が不足するとともに非効率的に使用される可能性があり、スループット及び動作時間が低減する。特に、これは、別個の固定ハードウェアが上流及び下流の処理層に対してプロビジョニングされるアーキテクチャにおいて起こり得る。結果として、典型的な下流層は、非効率的に利用され得る。
それゆえ、固定アーキテクチャアクセラレータについてのそのような畳み込みブロックの面積要件を低減し、ニューラルネットワークの下流の処理を改善し、回路ダウンタイムを削減することが必要とされる。
実施形態は、添付図面とともに、以下の詳細な説明によって容易に理解されるであろう。この説明を容易にするように、同様の参照符号は同様の構造要素を指す。実施形態は、添付の図面の図において、限定ではなく例示として示される。
1つの実施形態に係る、ニューラルネットワークにおける畳み込み層の一例である。
1つの実施形態に係る、並列乗算を実装するために擬似乗算回路を使用する例示の畳み込みブロックを示す図である。
1つの実施形態に係る、擬似乗算回路300を使用する畳み込みブロックの別の例を示す図である。
1つの実施形態に係る擬似乗算回路を示す図である。
次元削減層を有する例示のニューラルネットワークモデルアーキテクチャを示す図である。
次元削減後の不足を低減する畳み込み層の一例を示す図である。
1つの実施形態に係る、前のネットワーク層の重み及び入力活性値をローテーションさせることを含むネットワークの例示の時系列を示す図である。 1つの実施形態に係る、前のネットワーク層の重み及び入力活性値をローテーションさせることを含むネットワークの例示の時系列を示す図である。 1つの実施形態に係る、前のネットワーク層の重み及び入力活性値をローテーションさせることを含むネットワークの例示の時系列を示す図である。 1つの実施形態に係る、前のネットワーク層の重み及び入力活性値をローテーションさせることを含むネットワークの例示の時系列を示す図である。
1つの実施形態に係る、本明細書において開示されるもののような専用ハードウェアにおける実装のためにニューラルネットワークを最適化する例示のフローチャートを示す図である。
例示のコンピュータモデル推論及びコンピュータモデルトレーニングを示す図である。
例示のニューラルネットワークアーキテクチャを示す図である。
本明細書において開示される実施形態のうちのいずれかに係る、コンピュータモデルをトレーニング、解析、又は実装するために使用される1つ又は複数のコンポーネントを含み得る例示のコンピューティングデバイスのブロック図である。
概略
本明細書において、計算域を削減し、ニューラルネットワークの次元削減後の畳み込みブロックの再使用を改善する回路においてニューラルネットワークを実装する手法が説明される。
本明細書において、ニューラルネットワークの畳み込み層を実装する畳み込みブロックのために多くの場合に使用される積和(MAC)回路を実装する改善された回路が開示される。MAC回路は、擬似乗算回路を使用して、入力活性値にそれぞれの重みを乗算する。2の補数算術において或る数に負が乗算される場合、その数は反転され、その後「1」が加算される。乗算回路内で2の補数算術を完了するのではなく、擬似乗算回路は、数と重みとの乗算を実行し、2の補数算術を完了することなく負の重みの反転を適用する。その代わりに、回路において適用される負の重みごとに、乗算結果が累積されると、2の補数算術が完了される。1つの実施形態では、MAC回路は、「バイアス」パラメータについての加算を含み、これは、2の補数算術の完了を考慮するために変更される。バイアスパラメータの変更は、ネットワークを設計するソフトウェアによって実行されてよく、畳み込みブロックにおける負の重みの数に基づいてバイアスを増加させることによってバイアスが擬似乗算回路を考慮することが可能になり、それゆえ、バイアスパラメータが構想上で回路アーキテクチャと同時設計され、負の重みについて2の補数を完全にすることが可能になる。
追加の実施形態では、擬似乗算回路は、入力活性値をビットシフトすることによって乗算を適用し、それにより、モデル正確性を著しく制限することなく面積要件が更に削減される。様々な実施形態において、重み値は、擬似乗算回路の最大(又は最小)重み範囲に対するシフトの大きさを定義するために符号化され得る。ビットシフトを実装するために、回路は、擬似乗算回路の最大(又は最小)範囲に対する入力活性値の初期ビットシフトを含み、後続して、符号化された重みの大きさのビットシフトを適用してよい。重みは、負のビット及び0ビットを用いて符号化されてもよい。
追加の実施形態では、畳み込みブロックは、次元削減後の不足を低減する。畳み込み層は、チャネル重みのセットを入力活性値のセットに適用して、層出力のセットを生成する。畳み込みブロック回路は、構成可能であり、チャネル重みのセットのサブセットを入力活性値に適用して、チャネルバッファに記憶された現在のチャネル出力を生成する。各クロックサイクルにおいて、チャネル重みのサブセットは、畳み込みブロック回路によって選択及び適用され、それゆえ、畳み込みは、複数のクロックサイクルにわたってチャネル重みのフルセットを通して「ローテーション」し、畳み込みブロック回路の再使用が可能になる。重みサブセットの全てがローテーションされた後(例えば、複数のクロックサイクルの最後において)、チャネルバッファは、層出力を出力することができる。更なる実施形態では、畳み込みブロックは、畳み込みブロックの数及び複数のクロックサイクルがネットワークにおける前の次元削減の関数であるようにプロビジョニングされる。それゆえ、例えば、ネットワークの次元がNだけ削減される場合、次元削減後の畳み込み層への結果として得られる入力は、Nクロックサイクルごとのみで変更してよく、畳み込み層における畳み込みブロックが、畳み込みブロックの数がチャネル重みの数(例えば、チャネルについての複数のチャネル)をNで除算した数であるようにプロビジョニングされることが可能になる。
畳み込み層におけるMAC回路のための面積を削減し、畳み込みブロックを再使用し、次元削減後の回路の不足を低減することによって、ニューラルネットワークのためのハードウェアアクセラレーションの要求されるサイズ及び有効性を劇的に改善することができる。加えて、これらの手法は、ニューラルネットワークのソフトウェア-ハードウェア同時設計の有効な手段を表してよい。ネットワークをトレーニングにおいて、又は特定の回路における実装のためのトレーニングされたネットワークの準備において、ソフトウェアは、ハードウェア設計を「認識」し、それゆえ、並列擬似乗算回路の最適化、及びチャネル畳み込みを最適化するためにローテーションする重みを使用する次元削減後のより少ない畳み込みブロックのプロビジョニングを首尾よく可能にするMAC回路についての重み値(例えば、バイアス又は符号化された重み値)を決定してよい。
説明の目的で、例示的な実装の十分な理解を提供するために、特定の数、材料、及び構成が記載される。しかしながら、本開示は特定の詳細を伴うことなく実施され得ること、及び/又は、本開示が説明される態様の一部のみで実施され得ることが当業者には明らかとなるであろう。他の例では、例示的な実装を不明瞭にしないように、周知の特徴は省略又は簡略化されている。
以下の詳細な説明においては、本明細書の一部をなす添付の図面への参照がなされる。添付の図面において、実施され得る実施形態が例示によって示される。他の実施形態が利用されてよいこと、及び本開示の範囲から逸脱することなく、構造的又は論理的変更がなされ得ることを理解されたい。したがって、以下の詳細な説明は、限定する意味で捉えられるべきではない。
様々な動作が、特許請求される主題を理解する際に最も役立つ態様で、複数の別個のアクション又は動作として順番に説明され得る。しかしながら、説明の順序は、これらの動作が必ずしも順序に依存していることを示唆するように解釈されるべきではない。特に、これらの動作は、提示された順序で実行されなくてもよい。説明される動作は、説明される実施形態とは異なる順序で実行されてよい。様々な追加の動作が実行されてよく、及び/又は、説明される動作は追加の実施形態において省略されてよい。
本開示の目的で、「A及び/又はB」という文言は、(A)、(B)又は(A及びB)を意味する。本開示の目的で、「A、B、及び/又はC」という文言は、(A)、(B)、(C)、(A及びB)、(A及びC)、(B及びC)又は(A、B、及びC)を意味する。「間」という用語が測定範囲を参照して使用される場合、測定範囲の両端の値が含まれる。「a」、「an」及び「the」の意味は、複数の参照を含む。「in」の意味は、「in」及び「on」を含む。
説明は、「一実施形態では」又は「実施形態において」という文言を使用するが、これらは各々、同じ又は異なる実施形態のうちの1つ又は複数を指してよい。さらに、本開示の実施形態に関して使用される「備える(comprising)」、「含む(including)」、「有する(having)」等の用語は、同義語である。本開示は、「上方」、「下方」、「上」、「底」及び「側」等の視点に基づく説明を使用してよいが、そのような説明は、論述を容易にするために使用されており、開示された実施形態の応用を限定することを意図するものではない。添付の図面は必ずしも縮尺どおりに描画されているわけではない。「実質的に」、「近い」、「およそ」、「付近」、及び「約」という用語は、一般的に、目標値の±20%内であることを指す。別段に指定されない限り、共通のオブジェクトを記述するための序数詞「第1」、「第2」、及び「第3」等の使用は、単に同様の対象の異なるインスタンスが参照されていることを指し、そのように記述されたオブジェクトが時間的、空間的のいずれかでの所与のシーケンス、ランキング形式、又は他の任意の方法におけるものでなければならないことを示唆することを意図するものではない。
以下の詳細な説明では、例示的な実装の様々な態様は、当業者が自身の研究の本質を他の当業者に伝達するために共通して利用する用語を使用して説明される。
保留された2の補数算術を有する畳み込みブロック
図1は、1つの実施形態に係る、ニューラルネットワークにおける畳み込み層の一例である。図9~図10に関して以下で論述されるように、コンピュータモデルは、典型的には、入力を処理して出力を予測するのに使用されるパラメータを含む。そのようなコンピュータモデルは、入力データに基づいて様々な出力を予測するために、重みを含むパラメータを学習するように反復的にトレーニングされ得る。図10において更に論述されるように、ニューラルネットワークにおける個々の層は、入力活性値を受信し、入力活性値を処理して層の出力活性値を生成し得る。図1は、畳み込み層110の一例であり、畳み込み層110において、チャネル重み120のセットが入力活性値100に適用されて、畳み込み出力140のセットが生成される。
畳み込み層110において、チャネル重みは、データの「チャネル」の形式の追加の(又はより少ない)特徴を生成するために入力活性値100に適用されてよい。各チャネルについての出力は、時として畳み込みフィルタとも称される畳み込みカーネルを入力活性値に適用することによって生成されてよい。典型的には、畳み込みカーネルは、入力活性値行列内の各それぞれの入力値の、結果として得られる出力活性値に対するそれぞれの寄与度を示す重みの行列を含む。図1において示されている例では、畳み込み層110への入力活性値100は、2×2×3行列である。これは、例えば、画像の2ピクセル×2ピクセル部分を受信するニューラルネットワークへの入力層を表してよく、ここで、各ピクセルは、ピクセルの赤色、緑色、及び青色輝度を記述する3つの値を含む。それゆえ、入力画像について、赤-緑-青色空間における3つの色値は、入力活性値100におけるピクセルごとの情報の3つの別個のチャネルである。簡潔にするために、この例では、畳み込み層は、1×1フィルタサイズを適用して、8つの出力チャネル130を生成する。この例では、畳み込み層110は、ピクセルの各々にチャネル重み120のセットを適用して、ピクセルの各々についての出力チャネル130を生成し、畳み込み出力の2×2×8行列を形成する。それゆえ、ピクセルの出力チャネルごとの入力活性値は、それぞれのピクセルについて3つのチャネルを含む。
様々な実装において、入力活性値及び重みは、ネットワークにおいて、ビット単位で特定のサイズを有してよい。例えば、入力活性値(及び同様に、対応する前の層にとっての出力活性値)は、4ビット、8ビット、又は16ビットの幅であってよく、同様に、重みは、4、8、16等のような適したビット数によって表され得る。以下で更に論述されるように、活性値及び重みを表すのに使用されるビット数それら自体は、ニューラルネットワークのトレーニングされる態様であってよい。本明細書において論述されるようなアーキテクチャは、更なる正確性及び削減された面積も提供し、それにより、より少ないビット(及びそれゆえ削減された回路)がネットワーク内の層を有効に表すことが可能になる。
チャネルについてのフィルタ重み122は、畳み込み層によって処理される入力活性値ごとの重みを含む。図1において示されているように、チャネルごとのフィルタ重み122は、1×1フィルタ及び入力活性値100の3つのチャネルに対応する1×1×3行列である。その場合、畳み込み層110についての畳み込みを実行するために、各出力チャネル130は、それぞれの入力活性値100をチャネルについてのフィルタ重み122に適用することによって決定される。チャネル重み120のセットは、典型的には、入力活性値100に適用されるフィルタの各々についての(及び各々が出力チャネル130におけるチャネルをもたらす)フィルタ重み122のセットを含む。畳み込み層110についての計算を完了するために、チャネルについてのフィルタ重みのセットは、入力活性値100におけるピクセルの各々に(1×1フィルタの場合)適用される。入力活性値100をそれぞれのフィルタ重み122と乗算した後、その結果は累積され、各フィルタは、それぞれの出力チャネルをもたらす前に入力活性値を正規化又は更に処理するために、追加のパラメータ又は処理を含んでよい。この比較的単純な例においても、畳み込み出力の2×2×8セットをもたらすために、累積及び更なる処理の前に3つのフィルタ重みに3つの入力活性値が乗算され、畳み込み出力140を生成するために96(2×2×8×3)回の潜在的な乗算演算がもたらされる。例えば3×3又は5×5フィルタサイズ等のより大きいフィルタサイズを用いるより複雑なネットワークでは、乗算演算の数は急速に膨張し得る。
図2は、1つの実施形態に係る、並列乗算を実装するために擬似乗算回路を使用する例示の畳み込みブロックを示している。畳み込みブロックは、擬似乗算回路200のセットを含む積和回路を含んでよい。各擬似乗算回路200は、入力を受信し、入力に、その入力についてのそれぞれの重みを乗算する。図2において示されているように、擬似乗算回路200は、擬似乗算回路200A及び擬似乗算回路200Bから、擬似乗算回路200Nまで、並列に配置されてよい。乗算の結果は、その後、1つ又は複数の累積回路210によって総和(すなわち、累積)される。活性化出力を生成するために任意の最終演算230が適用される前に、バイアスと呼ばれる追加のパラメータも、加算器220を用いて加算されてよい。
一般に、数は、2の補数表現の負の数を使用してそのような回路において表され、それにより、負の数は、先頭の最上位ビットによって指定される(例えば、これは、値が負である場合に1であり、値が正である場合に0である)。例えば、1つのビットを用いて符号を表すとともに3つのビットを用いて大きさを表すことによって、4つのビットが、符号付き値のために使用されてよい。それゆえ、0の値は0000として表され、1は0001として表され、-1は1111として表される。2の補数表現の1つの利点は、数が直接加算され得るので、それにより、-1及び+1の加算が4ビットカウンタをオーバーフローさせ、0000の値をもたらし、結果として0が得られることである。しかしながら、2の補数の1つの複雑性は、値の符号を変更するには、ビットの反転及び1の加算を必要とすることである。例えば、+5を-5に変換するために、0101は1010の値に反転され、1が加算されて1011がもたらされる。結果として、畳み込みブロックを実装する典型的な積和回路において、負の重みが入力に適用される場合、負の符号を適用することには、負の重みを適切に考慮するために乗算及び加算の両方が必要とされる。
図2において示されている畳み込みブロックにおける並列乗算を改善するために、擬似乗算回路は、それぞれの入力に、関連付けられた重みを乗算し、負の重みの場合、2の補数表現を完全にする値の加算を保留している間に入力を反転させる。例えば、0110として表される+6に-1が乗算されると、0110から1001に反転され、この1001は、2の補数表現において-6ではなく-7である。結果として、擬似乗算回路200は、乗算を適用し、1の補数算術を完全にする(例えば、完了する)ために追加の加算を伴うことなく、符号の変更を考慮することによって簡略化される。2の補数を完了するために、後の時点で回路内で、例えば加算器220のバイアス加算に、追加の値が加算されてよい。別個の加算器220によって加算されるものとして示されているが、バイアスは、累積回路210において加算される値のうちの1つとして含まれてよい。それゆえ、バイアスは、擬似乗算回路において負の重みの各々を考慮するための量によって変更されてよい。1つの実施形態では、以下で更に論述されるように、変更済みのバイアスは、ニューラルネットワークがそのような擬似乗算回路200を含む回路上で実行されるように構成される場合に決定される。
1つの累積回路210が図2において示されているが、様々な実施形態において、複数の累積回路が、擬似乗算回路200A~Nの結果を累積するのに使用されてよい。それゆえ、累積は、入力カーネルのサイズ及びクロック頻度に依存して1つ又は複数のフェーズ又はクロックサイクルにおいて実行されてよい。
畳み込みブロックの結果を出力する前に、追加の回路によって、追加の演算230も実行されてよい。例えば、バイアス加算後の、入力からの累積された重み付き値は、その場合、値を出力値に変換するために活性化関数に適用されてよい。畳み込みブロック内では、回路は、32ビット整数等の拡張された範囲において、又は浮動小数点値として、値を表し得るが、畳み込みブロックの出力は、より小さい範囲の値(例えば、4、8、又は16ビットの符号なし整数)に限定されてよい。この出力は、畳み込みブロックの活性化を表してもよく、上記で記載されたような入力サイズと同様のサイズに限定されてよい。バイアスされた累積値を出力範囲にマッピングするのに活性化関数が使用されてよい。活性化関数は、線形関数又は非線形関数であってよく、活性化の例としては、とりわけ、正規化線形活性化関数、シグモイド関数、双曲線正接が挙げられる。
それゆえ、これらの擬似乗算回路200は、並列乗算の面積を削減し、さらに、回路のタイミングを改善し、(乗算段階における負の重みについての追加の加算が省略されるので)並列乗算を完了するために必要とされる時間量を削減し得る。
図3は、1つの実施形態に係る、擬似乗算回路300を使用する畳み込みブロックの別の例を示している。図2の例と同様に、擬似乗算回路は、入力及びそれぞれの重みを受信し、出力を生成する。図3は、重みの大きさ及び重みの負のビットを別々に適用する擬似乗算回路を示している。この例示の実施形態では、擬似乗算回路は、(例えば、入力の符号を変更することなく)重みの大きさを用いて入力の乗算を実行する部分乗算回路を含む。幾つかの実施形態では、入力は、符号なし整数であり、この場合、部分乗算回路は、それぞれの重みの大きさを用いて入力の符号なし乗算を実行し得る。重みの負のビットに対処するために、乗算回路の結果は、反転回路に提供され、当該反転回路は、負のビットが設定される(例えば、負のビットが1である)場合に結果を反転する。それゆえ、反転回路の結果は、重みを用いる入力の不完全な2の補数(例えば、負の重みについての不完全な算術を用いる)の乗算である。この不完全な2の補数乗算の結果は、累積回路310に提供される。それゆえ、複数の擬似乗算回路は各々、不完全な2の補数の結果を累積回路310に提供し、累積回路310は、結果を累積し、累積された結果を加算器320に提供する。図2に関して記載されたように、バイアス350は、別個の加算器320を介してではなく累積回路310の一部として加算されてよい。図3において示されているように、トレーニングされた畳み込み層によって決定されるようなトレーニングされたバイアス330は、累積回路310の結果に加算されるべきバイアス350を生成するために2の補数の加算340によって変更されてよい。1つの実施形態では、2の補数の加算340の値(それゆえ、トレーニングされたバイアス330が増加した量)は、擬似乗算回路における負の重みの数に基づく。この例では、擬似乗算回路ごとの負のビットは、トレーニングされたバイアス330に加算されるようにルーティングされてもよい(図示せず)。この例では、各負のビットは、トレーニングされたバイアス330に1を加算する。
別の実施形態では、バイアスは、擬似乗算回路を含む畳み込みブロック上での畳み込み層の実装を考慮するようにトレーニングした後にソフトウェアにおいて増加する。言い換えれば、トレーニングされたバイアス330は、コンピュータモデルが、擬似乗算回路を含むハードウェアにおける実行のために準備されている場合、オフラインで変更されてよい。この状況では、畳み込みブロック(例えば、本明細書において論述される様々な実施形態のMAC回路)によって受信されるバイアス350は、ハードウェア畳み込みブロックによって更に変更されなくてよく、これは、その変更が既に実行されているためである。この例では、擬似乗算回路300は、不完全な2の補数を生成してよく、算術は、2の補数算術を完了するために、モデルトレーニング又は実行ソフトウェアによって変更されるバイアス値によって完了されてよい。
図4は、1つの実施形態に係る擬似乗算回路を示している。図4の実施形態は、図2及び図3に関して論述されたような畳み込みブロック等の積和回路において使用されてよい。図4の実施形態では、擬似乗算回路は、入力データに対してビットシフト演算(単に「ビットシフト」又は「シフト」とも称される)を介して乗算を実装する。ビットシフトを使用することによって、乗算を実装するために必要とされる面積及び電力要件は、完全な乗算演算に対して著しく削減され、これは、上記で論述されたような保留された2の補数の加算との組み合わせにおいて実装される場合に特に削減される。この手法は、動作中の回路についての重み値の再プログラミング、それゆえ、擬似乗算回路400を使用する畳み込みブロック(又はMAC)の再使用も可能にする。そのような再プログラミング及び再使用は、重みを固定する典型的な最適化されたアーキテクチャを用いると可能ではなく、一方、典型的な再プログラミング可能MAC回路は、より低速であり、より低いスループットを有する。最終的に、乗算をビットシフトとして実装することによって、重みは、必要とされるシフトの数に対して符号化されてよく、それにより、重みを記憶、送信、又は操作するためのメモリ及び回路要件が低減される。
それゆえ、ビットシフトは、2のべき乗である重みを入力に適用してよい。指数部は、(典型的には最上位ビットに向かう左向きのシフトとして示される)正であってもよいし、(典型的には最下位ビットに向かう右向きのシフトとして示される)負であってもよい。例えば、擬似乗算回路400によって大きさとして使用される許容可能な重みの値は、2、2、2、2、2、2-1、2-2、2-5等を含んでよい。これらの重みを有効に実装するために、トレーニング中、コンピュータモデルは、重みが2のべき乗である大きさのみを有し得るという制約を用いてトレーニングされてよい。別の例として、コンピュータモデルは、より連続的な重み範囲を用いてトレーニングされてよく、当該重み範囲は、その後、ビットシフトを使用して擬似乗算回路における実装のための重み範囲に変換又は符号化される。別の例として、コンピュータモデルは、より連続的な重み範囲を用いて(例えば、浮動値として)初期的にトレーニングされ、その後、重みを実装のために2のべき乗に制約するために微調整されてよい。
擬似乗算回路400は、ともに乗算されるべき入力410及び重み420を受信する。図4において示されている実施形態では、重み420は、大きさ、負のビット、及び0ビットを含むように符号化される。1つの例として、Mが重みの大きさを符号化するビットの数である場合、重み420は、ビット[0-M-1]における重みの大きさ、ビット[M]における負のビット、及び重み420のビット[M+1]における0ビットを符号化してよい。他の順序化及び重み符号化方式が、対応して異なる回路構成とともに使用されてもよい。
1つの実施形態では、重み420の大きさは、最大シフト回路430によって実行されるような最大シフトに対して実行するためのビットシフトの数を符号化する。この実施形態では、入力410は、まず、擬似乗算回路400が実行するように構成される重みの最大範囲にシフトされる。言い換えれば、「最大シフト」は、(例えば、重みが0である場合)重み420による、擬似乗算回路400によって実行され得る最大乗算を表す。それゆえ、最大シフト回路430は、擬似乗算回路400についての重みの最大範囲に入力410を位置決めするために、入力に対してビットシフトを実行する回路である。
この例では、入力は、最大量だけ初期的にシフトされ、その後、重み420の大きさは、入力410を最大量に対する或る量だけシフトさせるために使用される。重み420の大きさの、最大シフトされた入力410への適用は、ビットシフト回路440によって実行される。ビットシフト回路440は、最大シフト回路430の出力を受信し、これを、重みの大きさの量だけシフトさせるように構成される。重みの最大値及び範囲は、ニューラルネットワークにおける畳み込みブロックについてトレーニングされた重みに基づいて、擬似乗算回路400において決定及び実装されてよい。例えば、トレーニング中のネットワークは、畳み込みブロックについての重みが2~2-2の範囲にわたり得ることを決定してよい。この例では、大きさについての符号化済みビットの数は、3であってよく、それによりシフトが8の範囲(000~111として表される数0~7)を有することが可能になる。この例では、乗算回路は、ビットを、2の範囲で2の最大値にシフトするように構成されてよく、それにより、値は、[2~2-3]の範囲内で乗算(シフト)され得る。したがって、最大シフトは、符号化された大きさに基づく更なるシフトのための開始位置として使用される。
図4において示されている実施形態は初期的に最大シフトを適用しているが、他の実施形態では、最小シフトが(範囲に対して値を最小化するために)初期的に適用され、重みの大きさに基づく後続のビットシフトが、入力の値を増加させる。それに応じて、初期シフトは、擬似乗算回路400の重み範囲の最後に入力をシフトさせるために適用されてよく、重みのシフトの大きさは、重み範囲の最後に対して適用されてよい。
この実施形態では、擬似乗算回路400において使用される重み420は、大きさ、負のビット、及び0ビットを含むように符号化される。上記で論述されたように、大きさは、乗算の大きさをビットシフト演算の数として表す。言い換えれば、大きさnは、入力410に2乗算を適用するためのビットシフト演算として適用される。1つの実施形態では、図4において示されているように、大きさは、最大シフトに対するシフトを適用するために符号化される。符号化された重みの大きさは、その場合、ニューラルネットワークにおける畳み込みブロックのための値のトレーニングされた重みの2を底とする対数(log)である。例えば、この実施形態の符号化された重みの大きさは、重み=log(abs(重み))によって定義される。
重みの大きさがビットシフト回路440によって適用された後、ビットシフト回路440の出力は、反転回路450によって受信され、反転回路450は、重み420の負のビットに基づいて反転を適用する。例えば、反転回路450は、負のビットが正である場合に適用されるXOR回路として実装されてよい。図4において示されているように、擬似乗算回路400は、負の値を適用するために反転を適用するが、2の補数の負の値を完全にするための加算を含まない。上記で論述されたように、2の補数の加算を保留すること(及び不完全な2の補数の結果を生成すること)は、削減された複雑度の擬似乗算回路をもたらすことができる。
ビットシフトは0を直接指定し得ないので、0ビットは、より有効に、かつビットシフトにおいて0値を表すことに対して削減された回路複雑度で、0値を指定し得る。重みの0ビットが設定される場合に、0ビットを適用し、擬似乗算回路から0を出力するのに、ゼロ化回路が使用されてよい。この例では、重みの0ビットがアクティブである場合に、0値を出力として選択することによって、0ビットを適用するのに、マルチプレクサ(MUX)460が使用されてよい。アクティブではない場合、MUX460は、例えば、累積回路(例えば、図2及び図3において示されているような)に進むために、反転回路450からの結果を出力する。他の構成では、0ビットは、最大シフト回路430に入る前に入力410をゼロ化すること等によって、擬似乗算回路の結果をゼロ化するための他の方法において実装されてよい。別の例として、0ビットは、0ビットが示される場合に電力使用量を削減するために0重みが実装される場合、シフト及び反転回路を更に無効化するために実装されてよい。
さらに、0の重みは、他の構成において特別に指定された0ビットを伴うことなく実装されてよい。例えば、0重みは、ビットシフト回路440の出力のレジスタ長を超過するビットシフトの大きさを用いて実装されてよい。
重みを2のべき乗として符号化した実験では、符号化されていない重みに対する回路の合成は、回路面積の46%の改善をもたらした。加えて、2の補数算術を保留した実験では、2の補数の保留は、加算を保留した入力点/乗算の数に依存して29%~34%回路面積を削減した。
アクティブなチャネル重みを用いる再使用可能畳み込みブロック
図5は、次元削減層530を有する例示のニューラルネットワークモデルアーキテクチャを示している。図5の例示のネットワークでは、2×2×1次元入力データ(例えば、画像における2×2ピクセルエリア)が処理されて、1つの1×1×4出力560がもたらされる。この例では、畳み込み層510は、入力データ500の1×1領域のチャネルに対して動作する1×1畳み込み層である。例えば、1×1領域は、入力データ500に関連付けられた入力画像の単一のピクセルを記述し得る。ピクセルは、ピクセルごとにデータの3つのチャネルをともに形成する、赤色、緑色、及び青色値によって記述され得る(図5において示されていない)。様々なネットワークにおいて、入力データ500及び様々なネットワーク層の次元は、当該技術分野において既知であるように異なってよい。
ネットワークにおいて表されるようなデータの次元は、データがネットワークにおいて処理されるにつれて追加のチャネルを追加又は除去することによって、増加又は減少し得る。入力のセットごとに層によって生成される活性値の数は、その層についてのチャネルの数と称され得る。多くのニューラルネットワークにおいて、畳み込み層510等のネットワークの層は、入力活性値の次元を増加させ得る一方、次元削減層530等の他の層は、入力活性値の次元を削減し得る。例えば、図5において示されている畳み込み層510は、入力データ500から出力データの8つのチャネルを作成する。したがって、畳み込み層510の結果は、この例では2×2×8行列として表される、活性化値520のセットである。
概念上では畳み込み層510が入力データ500を活性化値520に変換するが、実用時には、畳み込み層は、典型的には、チャネル重みを入力データ500の異なる部分に適用することによって活性化値520を生成する。図5の例では、同じチャネル重み515が、入力データ500の各1×1部分に適用されて、活性化値520のその部分が生成される。それゆえ、入力データ500は、順次ロードされ、活性化値520の完全なセットを順次生成するのに使用されてよい。プロビジョニングされた入力データ500及び畳み込みの計算を実行するための畳み込みブロックのプロビジョニングされた数に依存して、活性化値520のより多くの又はより少ない部分が、ニューラルネットワークを実装するハードウェアによって一度に生成されてよい。
1つの実施形態では、畳み込み層510は、上記で論述されたように、擬似乗算回路を含む畳み込みブロックのうちの任意のものによってハードウェアにおいて実装されてよい。この例では、1つの処理周期(例えば、クロックティック)内で、1つの1×1ピクセルのデータが、畳み込み層510に入力され、畳み込み層510は、チャネル重み515のセットを適用して、活性化値520の1×1×8部分を生成する。この例では、1クロックサイクル内で入力500についての出力の8つのチャネルを実行するために、8つの畳み込みブロック(チャネルごとに1つずつ)が、そのチャネルについてのそれぞれの入力及び重みを処理するのに使用されてよい。各畳み込みブロックは、上記で論述されたもの等の積和回路として実装されてよい。この例の畳み込み層による1つの1×1部分の処理は、図5においてシェーディングされている。結果として、これは、活性化値のセットを完了するための計算を実行する回路が入力データ500の様々な部分のために使用されるので、畳み込み層510からの完全な活性化値520を累積するために複数のクロックサイクルを必要とし得る。この例では、入力データ500は、各クロックサイクルでローテーションされてよく、チャネル重み515は、同じ畳み込みが入力データ500の異なる部分に適用されるときに一定に留まってよい。他の実施形態では、異なる重みが、入力データ500の異なる領域に適用されてよい。
図5において示されている例等の多くのニューラルネットワークは、活性化行列の次元を削減する次元削減層530(プーリング層等)を含んでよい。チャネルの数は畳み込み層のチャネルの数を変更することによって層間で削減され得る一方、この例では、次元削減層530は、入力データの次元を2×2から1×1に削減する。より一般的に述べると、次元削減層530は、その入力活性化値520の次元を、入力データ500がネットワークの前の層によって処理される頻度に対してその出力活性化値540に削減する。すなわち、次元削減層530の入力(活性化値520)は、畳み込み層510についてのクロックサイクルの数に基づく頻度において更新されて、入力データ500の全ての必要とされる部分が受信及び処理され、次元削減層530が動作する活性化値520が作成される。図5の例では、畳み込み層510が2×2入力データの各1×1部分に適用されるために、4クロックサイクルが使用される。したがって、次元削減層530はデータの結果として得られる2×2領域全体を必要とするので、次元削減層530は、4クロックサイクルのうちの1つでのみ、新たなデータに対して動作し得る。それゆえ、次元削減層530の後、活性化値540の次元は、活性化値520に対して削減され、入力データ500がより前の層によって処理される頻度によって制限され得る。
結果として、専用ハードウェアがチャネル重み555を有する畳み込み層550等の後続の層のためにプロビジョニングされる場合、後続の層は、畳み込み層550がチャネル重み555を用いて活性化値540を処理して活性化出力560を生成するので、多くの場合に不足し得る。すなわち、活性化値540は入力データ500の頻度及び畳み込み層510に基づいて変更するので、畳み込み層550は、より迅速に(例えば、1クロックサイクルにおいて)活性化値540を完全に処理し、後続して、次回に次元削減層530の出力が更新される(この例では、4クロックサイクル毎)まで、不足する。
多くの実装において、ネットワークは、ネットワークを通して多くの回数、次元を増加又は減少させ得る。例えば、画像の領域は、画像内でオブジェクト認識、オブジェクト追跡等を実行するために256×256又は128×128ピクセル領域としてニューラルネットワークに提供されてよく、これにより、最終的に32×32又は16×16ブロック領域を処理するために次元が削減され得る。これは、次元削減の影響を倍増させ、ハードウェアアクセラレータにおいてネットワークの後の部分における層をパイプライン化することを試みる回路についてのそのような層の著しい不足を引き起こし得る。
図6は、次元削減後の不足を低減する畳み込み層の一例を示している。図6において示されている畳み込み層は、例えば、ネットワークの任意の部分において、使用されてよく、ここで、畳み込み層への入力活性値は、畳み込み層の畳み込みブロックの処理時間よりも低い頻度で更新される。言い換えれば、入力活性値が、畳み込みブロックが畳み込み層についてのデータを処理し得る1つよりも多くのクロックサイクルの間に一定に留まり得る場合である。
図6における畳み込み層は、回路の必要とされる実効的な面積を削減し、アップタイム頻度を増加させるそのような層のために必要とされる回路を削減する手法を示している。畳み込み層の全てのチャネルについての畳み込みブロック(すなわち、入力のセットと、重みのセットとの間で乗算を実行する回路、例えば、積和回路)をプロビジョニングする(すなわち、ハードウェアにおいてインスタンス化する)のではなく、表面積を削減するために、畳み込み層は、畳み込み層におけるチャネルの数よりも少ない畳み込みブロック640を使用してよい。むしろ、各畳み込みブロック640は、異なるクロックサイクルにおいて異なる重みセットを適用するように構成されている。各クロックサイクルにおいて、チャネル重み600のサブセットが適用され、それにより、複数のクロックサイクル(例えば、入力活性値610の更新頻度)にわたって、出力チャネルの完全なセットが生成される。
畳み込み層は、ネットワークの1つ又は複数の前の層から入力活性値610のセットを受信する。例えば、次元削減層530からの出力である。同様に、畳み込み層は、畳み込み層についての出力チャネルの完全なセットについての重みを定義するチャネル重み600のセットを受信(又はこれにアクセス)する。チャネル重み600のセットは、固定であってもよいし、特定のニューラルネットワーク構成に従って再プログラミングされ得るプログラマブルレジスタに記憶されてもよい。
チャネルセレクタ620が、チャネル重みのサブセットを、畳み込みブロック640によって適用されるべき現在のチャネル重み630として選択する。それゆえ、特定のクロックサイクルにおいて各畳み込みブロックによって適用される重みは、現在のチャネル重み630のそれぞれのチャネル重みに対応する。各畳み込みブロック640は、フィルタ重み(例えば、図1のフィルタ重み122によって示されたような1つの出力チャネルについての重み)の1つのセットを使用して入力活性値610のセットに対して1回の畳み込み(例えば、任意選択で追加のパラメータを用いる、乗算及び累積)を実行するように構成された回路である。畳み込みブロック640は、畳み込みを実行する任意の適した積和回路を含んでよく、これは、上記で論述された擬似乗算回路のうちの任意のものを含んでよい。
図6の例では、2つの畳み込みブロック640が、入力活性値610が(例えば、ネットワークにおける前の次元削減に起因して)2クロックサイクルの間に一定である畳み込み層のためにプロビジョニングされる。この例では、チャネル重み600は、4つのチャネル重みW~Wを含む。チャネルセレクタ620は、2つのチャネル重み(プロビジョニングされた畳み込みブロック640の各々に1つが対応する)のサブセットを選択する。各クロックサイクルにおいて、チャネルセレクタ620は、チャネル重み600の異なるサブセットを選択してよい。1つの例では、チャネルセレクタは、クロックサイクルを使用して、畳み込みブロック640によって適用されるべきチャネル重み600の異なるサブセットを選択するマルチプレクサである。それゆえ、この例では、第1のクロックサイクル中、チャネルセレクタ620は、チャネル重み600のセットから重みW0,1の第1のサブセットを選択してよい。第2のクロックサイクル中、チャネルセレクタは、チャネル重み600のセットから重みW2,3の第2のサブセットを選択してよい。
各クロックサイクルにおいて、プロビジョニングされた畳み込みブロック640は、受信された現在のチャネル重み630を入力活性値610に適用して、対応するチャネルについての関連畳み込み計算を実行する。この例では、第1のクロックサイクルにおける第1の畳み込みブロック640は、現在のチャネル重みWを適用し、第1のクロックサイクルにおける第2の畳み込みブロック640は、現在のチャネル重みWを適用する。畳み込みブロック640の出力は、現在のチャネル出力650と指定され、チャネルセレクタ620によって選択されるチャネルのサブセットに関連してチャネルバッファ660に記憶される。例えば、重みW0及びW1が現在のチャネル重み630である場合、現在のチャネル出力650は、畳み込み層の出力のチャネル0及び1に対応するチャネルバッファ660における位置に記憶される。チャネルバッファ660は、出力チャネルの完全なセットがアセンブルされ、層出力670として出力され得るまで、チャネルの値を記憶してよい。
次のクロックサイクルでは、チャネルセレクタ620は、例えば重みW2,3を選択するために、チャネル重み600の別のサブセットを現在のチャネル重み630として選択する。畳み込みブロック640は、チャネルごとにそれぞれの重みを適用し、現在のチャネル出力650は、選択されたサブセットに対応するする位置におけるチャネルバッファ660に、ここではチャネル2及び3に、記憶される。チャネル重み600のサブセットを通してサイクルするための複数のクロックサイクルの後、チャネル出力の完全なセットは、チャネルバッファ660にロードされてよい。結果として、この例では、入力活性値610が一定であるクロックサイクルにわたって、畳み込みブロック640は、チャネル重み600のフルセットを受信し、入力活性値610に適用する。
結果として、畳み込み層を実装するためにプロビジョニングされる畳み込みブロック640の数は、チャネルの数、及び入力活性値610が(例えば、ネットワークにおけるより前の層の次元削減の関数として)一定に保たれ得るクロックサイクルの数に基づいてよい。図5において示されたように、4の係数を有する次元削減(例えば、2×2が1×1に削減される)が、畳み込み層550への入力が一定に保たれ得る同様の数のクロックサイクル(例えば、4)をもたらし得る。それゆえ、一般に、畳み込み層を実装するのに使用される畳み込みブロックの数は削減され得るとともに、チャネルごとに完全な畳み込みブロックが層において実装されることを必要としない。むしろ、回路においてプロビジョニングされる畳み込みブロックの数(したがって、並列に適用され得るチャネルのサブセットのサイズ)は、層についてのチャネルの総数を、ネットワークの前の部分の次元削減で除算した数(例えば、入力活性値が一定であり得るクロックサイクルの数)であってよい。複数の次元削減層がネットワークにおいてより前で適用される場合、ブロックの数は、畳み込み層の前に行われる組み合わせた削減を考慮してよい。例えば、1つの層が次元を2だけ削減し、別の層が4だけ削減する場合、層における畳み込みブロックのプロビジョニングに関連した次元削減は、8(2×4)であってよい。それゆえ、この例を続けると、層についてのチャネルのフルセットが32個のチャネルを有し、前の層が8の次元削減係数を有する(したがって、入力活性値610が8クロックサイクルの間一定に留まり得る)場合、4つの畳み込みブロックが使用され得る(32個のチャネルが8の削減係数で除算される)。
このようにして重みをローテーションさせ、それに応じて回路についての畳み込みブロックをプロビジョニングすることによって、ネットワークのこれらの下流の部分のためのプロビジョニングされた回路面積は、著しく削減され、その一方、回路の利用率が高まる。任意の数のこれらの畳み込みブロック又は層が、全体としてのネットワークの設計に基づいて直列又は並列で配置されてよい。
図7A~図7Dは、様々な実施形態に係る、前のネットワーク層の重み及び入力活性値をローテーションさせることを含むネットワークの例示の時系列を示している。各図7A~図7Dは、単純な例示のネットワークの層の入力及び活性値を示しており、これらの図において、畳み込み層710は、入力データ700のセットを受信して、活性値720のセットを生成し、活性値720は、次元削減層730によって処理されて、活性値740が生成される。この例では、次元削減層730は、活性値720の4つのセットを受信して、活性値720の次元を、4の係数によって、2×2から1×1まで削減する。活性値740は、畳み込み層750に入力され、畳み込み層750は、重みのローテーションするサブセットを使用して、畳み込み層750についての最終出力活性値770を生成する。畳み込み層750は、例えば、図6に関して論述された回路を用いて、実装されてよい。図7A~図7Dの例は、次元削減層730への入力を生成し、ローテーションする現在のチャネル重み755を使用して畳み込み層750の出力についてのチャネルバッファ760内のチャネルを生成するのに使用される複数のクロックサイクルを示している。この例では、畳み込み層750によって適用されるべき完全なチャネル重みセットは、4つのチャネルを含む。同様にこの例において示されているように、畳み込み層750は、各クロックサイクルにおいて1つのチャネル重みセットを処理するために1つの畳み込みブロックを含んでよい。上記で論述されたように、回路は、チャネルの数を次元削減の量で除算すること、この場合では畳み込み層750についての4つのチャネルを4の次元削減で除算することに基づいて、畳み込みブロックの数をプロビジョニングされてよい。
一般に、図7Aにおいて示されている回路アーキテクチャは、多数のシーケンス入力データ700をストリーミング/パイプライン化するために使用されてよい。入力データ700の1つの2×2領域が図7A~図7Dにおいて示されているが、典型的な応用では、入力データの前のセットがネットワーク(又はネットワークの第1の層)によって処理された後に、新たな入力データ700がロードされる。画像処理アプリケーションの1つの例として、入力データ700の各セットは、ネットワーク全体によって処理され得る画像のエリア又は部分を表してよい。例えば、2×2入力データ700のスライディング「ウィンドウ」がネットワークに入力されてよい。回路がパイプライン化されるので、ネットワークの各更なる部分は、入力データ700の異なるセットに対して同時に動作してよい。例えば、畳み込み層710が入力データ700の第1のセットに対して動作して活性値720を生成する一方で、2×2入力データ700の第2のセットは、活性値740を作成するために、事前に次元削減層730によって処理及び変換されている場合がある。同様に、2×2入力データの第3のセットは、出力活性値770として出力されるために畳み込み層750によってその処理を完了している場合がある。その意味において、ネットワーク回路は、入力データ700のセットを「ストリーミング」又は「パイプライン化」してよい。この例では、次元削減層730のために十分なデータをアセンブルするために必要とされるクロックサイクルの数は、入力データ700のセットがモデルの更なる層に渡される頻度を決定してよい。この例では、次元削減層730は、畳み込み層710からの出力チャネルの4つのセットを消費し、それにより、4の係数によって前の層の次元が削減される。図7A~図7Dに関して論述されるネットワークにおける例示のデータ処理は、4クロックサイクルにわたって行われ、入力データ700の新たな2×2ブロックの処理を表す。
図7Aにおいて示されている第1のクロックサイクルへの移行時、活性値740は、入力データの前のセットに対して動作する次元削減層730の出力から更新され、同様に、畳み込み層750からの出力活性値770は、前のチャネルバッファ760から更新されてよい。
図7Aにおいて示されているように、第1のクロックサイクル中、畳み込み層710は、ロードされた入力データ700の第1の部分に適用される。この例では、畳み込み層710は、重みを適用し、入力データ700の入力1×1領域からの出力の8つのチャネルを生成する回路を含む。この例では、畳み込み層710は、1クロックサイクルにおいて入力データ700の関連部分を完全に処理して、その入力データ700についてのフルセットチャネル活性値を生成するために十分な畳み込みブロックを(例えば、並列で)含んでよい。(第2のクロックサイクルを示す)図7Bによって示されているように、畳み込み層710は、第2のクロックサイクルにおいて入力データ700の第2の別個の部分を処理してよい。対照的に、畳み込み層710が各クロックサイクルにおいて完全に異なる入力データを受信及び処理するが、畳み込み層750は、各クロックサイクルにおいてフルチャネル重みのサブセットを適用する。図7Aにおいて示されているように、畳み込み層750によって適用されるべき現在のチャネル重み755は、現在のチャネル重みの第1のサブセットである。畳み込み層750の出力は、チャネルバッファ760に記憶される。
図7Bにおいて示されている第2のクロックサイクルにおいて、入力データ700の新たな部分が畳み込み層710によって処理されて、活性値720の別のセットが生成される。一方、チャネル重みの第2のサブセットが、畳み込み層750によって適用されるべき現在のチャネル重み755として選択されて、チャネルバッファ760に記憶される第2のチャネル出力が生成される。図7C及び図7Dにおいて示されているように、入力データ700の第3の部分及び第4の部分が畳み込み層710によって処理される一方、チャネル重みの第3のサブセット及び第4のサブセットは、選択された現在のチャネル重みであり、第3のチャネル及び第4のチャネルは、それぞれ、第3のクロックサイクル及び第4のクロックサイクルにおいてチャネルバッファ760に記憶される。
図7A~図7Dにおいて示されているように、ロードされた入力データ700の部分は畳み込み層710によって各クロックサイクルで完全に消費されてよく、スループットを制御するために読み出し/書き込みタイミング及び畳み込み層710についての畳み込みブロックのプロビジョニングを可能にする一方、次元削減に起因して、後の層は、より低い頻度で新たなデータを受信してよく、1クロックサイクルにおいて活性値を完全に消費するために十分な畳み込みブロックをプロビジョニングするのではなく、畳み込み層750等のこれらの層は、より少ない回路を使用し、その代わりに、ローテーションするチャネル重みを使用して畳み込みブロックを再使用してよい。この手法は、ハードウェアアクセラレータが、より効果的に、かつより小さい表面積で、ニューラルネットワークにおいてデータを能率化及び処理することを可能にする。上記で論述された擬似乗算回路及び符号化された重みの符号化等の他の手法と併せて、そのような回路は、著しく、そのような回路の実効面積を削減し、回路利用率を高め得る。
したがって、ニューラルネットワークアクセラレータを改善するこれらの手法は、個々に、又は互いと組み合わせて使用されてよい。例えば、図7A~図7Dにおいて示されているもの等のネットワークは、畳み込み層710又は畳み込み層750を処理するハードウェアにおいて擬似乗算回路を実装してよく、その各々は、負の重みごとに保留された1の補数の加算を含んでよく、更なる実施形態では、ビットシフトを使用して乗算を実行し、及び/又は、図4に関して論述されたように符号化された重み値を使用してよい。
ハードウェア-ソフトウェア同時設計
図8は、1つの実施形態に係る、本明細書において開示されるもののような専用ハードウェアにおける実装のためにニューラルネットワークを最適化する例示のフローチャートを示している。例えば、図8は、上記で開示された回路とともに使用するトレーニングされたコンピュータモデルを最適化し、他の実施形態では、コンピュータモデルを使用して、回路の構造及び最適化を決定するためにコンピュータシステムによって使用されてよく、モデルのトレーニングを変更するためにモデルの特性を使用することを含み得る手法を示している。
図8のフローの単純な例では、ネットワークを最適化するコンピュータシステムは、ニューラルネットワークの畳み込み層についての重み及びバイアスパラメータ等のニューラルネットワークのパラメータを識別し(810)、上記で論述されたような畳み込みブロックのうちの任意のもの等のネットワーク/層が実装される回路の特性も識別する(820)。1つの実施形態では、コンピュータシステムは、また、ニューラルネットワークをトレーニングしてよい(800)。幾つかの実施形態では、ニューラルネットワークは、回路の特性に基づいてトレーニングされてよく、その一方他の実施形態では、回路の特性は、トレーニングされたニューラルネットワークパラメータ(例えば、論理構造及びプロセス)を、ハードウェア回路を実装する際に使用する値に「変換」するのに使用される。
したがって、1つの例示の実施形態では、ネットワークを実装する回路は、図4に関して論述されたようにビットシフト乗算を実装してよく、ここで、ハードウェアにおいて適用され得る重みは、2のべき乗である。この例では、ニューラルネットワークは、重みがビットシフト演算によって実装可能であるように2のべき乗でなければならないという制約を用いてトレーニング(又は微調整)されてよい(800)。別の例として、ネットワークの活性化層間でデータを転送することが利用可能であるビットの数は、表面積及びネットワークの複雑度を低減するように変更されてもよい。例えば、層についての活性化値は、ネットワークの回路間で転送されるデータの複雑度を低減するために、かつネットワークが実装される設計された回路の複雑度に基づいて、1、2、4、6、又は8ビット又は当業者によって決定される別の長さとしてネットワークにおいて指定されてよい。1つの例では、ビットは、ネットワークの活性化層間で符号なしであってよく、それにより、4ビットの符号なし値についての活性化値は、範囲[0-15]内の整数を含み得る。この例では、また、活性化値の制限範囲は、ニューラルネットワークのパラメータをトレーニング又は微調整するのに使用されて、実装回路の特性がネットワークトレーニングに直接組み込まれてよい。ネットワーク特性の追加のタイプも使用されてよい。
トレーニングされたニューラルネットワークパラメータを使用して、パラメータは、指定された特性を有する回路における実装のために変更されてよい(830)。例えば、畳み込み層のチャネルごと(例えば、個々の畳み込みフィルタごと)に、トレーニングされたニューラルネットワークは、重みのセット及びバイアス(及び追加のパラメータ)を指定してよい。
擬似乗算回路を実装する回路においてフィルタを実装するために、トレーニングされたニューラルネットワークによって指定されるようなバイアスは、擬似乗算回路によって実行される不完全な(保留される)2の補数乗算を考慮するために変更されてよい。したがって、バイアスは、回路において実装されるようなバイアスが2の補数乗算を完全にするように変更されてよい。負の値が適用される場合に2の補数表現が正しくない(すなわち、符号を逆にする反転が1の加算で完了されない)ので、バイアスは、ネットワーク内の負の重みの数に基づく量だけ増加されてよい。この例では、畳み込みブロックについてのバイアスは、ネットワークのその畳み込みフィルタ(すなわち、特定のチャネル)における負の重みの各々について1だけ増加されてよい。それゆえ、[0.5,0.2,-0.3,-0.7,0.1,0.3,0.8,0.25,-1]の重み及び+2のバイアスを有するフィルタは、重みセット内の3つの負の重みのために、バイアスを、3だけ増加させて、+5の変更済みのバイアスにしてよい。擬似乗算回路を使用して畳み込みブロックにおいて実装される場合、+5の変更済みのバイアスは、負の重みが活性値を反転させる場合、3つの欠落した加算演算のために正しい。
同様に、ビットシフト演算を適用する回路において畳み込みフィルタを実装するために、ネットワークの重みは、そのようなフィルタを使用する畳み込みブロックにおける実行のために変更又は符号化されてよい。例えば、重みは、最も近い2のべき乗に調整又は近似されてよい。別の例では、上記で記載されたように、重みは、トレーニングされた重みを2のべき乗に既に制約するようにトレーニングされてよい(800)。加えて、重みは、ビットシフト回路への適用のために符号化されてよい。上記で論述され、図4において示されたように、1つの実施形態では、重みは、負のビット及び0ビットを有する大きさとして擬似乗算回路のために表されてよい。ネットワークからの重みを符号化するために、重みを2のべき乗の重みとして表されるものとして決定した後に(例えば、トレーニングされたネットワーク重みが2のべき乗として近似される場合)、大きさは、回路によって適用される初期シフトに対して必要とされるシフトの数に基づいて符号化されてよい。例えば、符号化された重みの大きさは、上記で論述されたように重みの2を底とする対数によって決定されてよい。
幾つかの実施形態では、回路それ自体は、例えばニューラルネットワークパラメータに基づいて、プロセスの一部として設計されてよい。1つの実施形態では、システムは、次元削減ブロックを識別し、図5~図7Dに関して論述されたように、実装回路のための畳み込みブロックをプロビジョニングする(840)。例えば、ネットワークは、次元削減ブロックがネットワークの次元を削減する場合、及びそれゆえ更なる層が不足し得る/それらの層への入力が複数のクロックサイクルの間一定に留まり得る場合を決定するために解析され得る。この状況では、それらの層についての畳み込みブロックは、ブロックが上記で論述されたように各クロックサイクルに対して層についての重みのサブセットを適用し得るように、削減されてよい。この実施形態では、ニューラルネットワークを実装するハードウェア回路は、クロックサイクルにわたる重みローテーションを含み、それゆえ、不足を低減しながら回路のための面積を削減するように設計される。ネットワークの各層は、回路の前の層の次元削減、及び、その層についての入力が、その層についてのプロビジョニング840のための畳み込みブロックの数を決定するために一定に留まり得るクロックサイクルの数に基づいて解析され得る。ネットワークの特性を決定し、畳み込みブロックをプロビジョニングした後、回路は、例えば、回路合成ツールを介して、生成されて(850)、製造されるべき回路のための個々のレジスタ、ゲート回路等がプロビジョニングされてよい。
最終的に、ハードウェア上でニューラルネットワークを実行するために、変更されたパラメータは、物理回路上での実行のために提供される(860)。
例示のコンピュータモデリング
図9は、例示のコンピュータモデル推論及びコンピュータモデルトレーニングを示している。コンピュータモデル推論は、出力又はモデル出力920を生成するための、コンピュータモデル910の入力データ900のセットへの適用を指す。コンピュータモデル910は、モデルパラメータとも称される、モデルのパラメータに基づいてモデル出力920を決定する。モデルのパラメータは、典型的には、以下で論述されるように、トレーニングデータ、及びそれぞれのトレーニングデータについてのモデルの所望の出力を使用して、モデルパラメータの最適化を発見するトレーニングプロセスに基づいて決定されてよい。コンピュータモデルの出力は、入力データ900に基づくとともに、モデルトレーニングにおいて使用される前の例示のデータに基づく予測値であるので、「推論」と称されてよい。
入力データ900及びモデル出力920は、特定のユースケースに従って異なる。例えば、コンピュータビジョン及び画像解析のために、入力データ900は、75×75ピクセル等の特定の解像度を有する画像、又は体積を記述する点群であってよい。他の応用では、入力データ900は、オブジェクトに関する情報を表す、疎ベクトル等のベクトルを含んでよい。例えば、レコメンドシステムにおいて、そのようなベクトルは、ユーザ-オブジェクトインタラクションを表してよく、それにより、疎ベクトルは、ユーザによってポジティブに評価される個々の項目を示す。加えて、入力データ900は、例えば、入力オブジェクトの様々な特徴を表すか、又は、コンピュータモデル910へのオブジェクトの入力の前の入力オブジェクトの前処理を表す、入力オブジェクトの別のタイプの処理されたバージョンであってよい。1つの例として、1024×1024解像度画像が処理され、64×64の個々の画像部分に細分され、これらの個々の画像部分は、コンピュータモデル910によって処理される入力データ900である。別の例として、上記で論述された疎ベクトル等の入力オブジェクトは、オブジェクトをコンピュータモデル910における入力データ900として表すのに使用され得る入力オブジェクトの埋め込み又は別のコンパクト表現を決定するために処理されてよい。入力オブジェクトについてのそのような追加の処理は、それら自体、データの学習された表現であってよく、それにより、別のコンピュータモデルは、入力オブジェクトを処理して、コンピュータモデル910についての入力データ900として使用される出力を生成する。ここでは更には論述されないが、そのような更なるコンピュータモデルは、コンピュータモデル910を用いて独立して又は共同でトレーニングされてよい。
上記で記載されたように、モデル出力920は、コンピュータモデル910の特定の応用に依存し、レコメンドシステム、コンピュータビジョンシステム、分類システム、ラベリングシステム、天候予測、自律制御、及び他の任意のタイプのモデリング出力/予測を表してよい。
コンピュータモデル910は、上記で記載されたように、入力データ900からモデル出力920を生成する特性及び関数を記述する様々なモデルパラメータを含む。特に、モデルパラメータは、モデル構造、モデル重み、及びモデル実行環境を含んでよい。モデル構造は、例えば、特定のタイプのコンピュータモデル910、並びにその構造及び編成を含んでよい。例えば、モデル構造は、複数の層から構成され得るニューラルネットワークを指定してよく、モデルパラメータは、ニューラルネットワーク内に含まれる個々のタイプの層及び層間の接続(例えば、いずれの層の出力がいずれの他の層への入力を構成するのか)を記述してよい。そのようなネットワークは、例えば、特徴抽出層、畳み込み層、プーリング/次元削減層、活性化層、出力/予測層等を含んでよい。幾つかの例ではモデル構造はコンピュータモデルの設計者によって決定されてよい一方、他の例では、モデル構造それ自体が、トレーニングプロセスを介して学習されてよく、それゆえ、モデルの特定の「モデルパラメータ」を形成してよい。
モデル重みは、コンピュータモデル910が入力データ900をモデル出力920に処理する際に用いる値を表してよい。コンピュータモデル910の各部分又は層がそのような重みを有してよい。例えば、重みは、入力を処理するための値を決定して、モデルの特定の部分において出力を決定するのに使用されてよい。言い換えれば、モデル重みは、入力データ900の値又は活性値を決定する閾値をモデルについての出力としていかに組み合わせ、又は操作するのかを記述してよい。1つの例として、畳み込み層は、典型的には、その層への入力のセットに適用されるべき、畳み込みカーネルとも称される、畳み込み「重み」のセットを含む。これらは後続して、典型的には「バイアス」パラメータとともに、畳み込み層についての出力を生成するための他の変換の重みと、組み合わされる。
モデル実行パラメータは、モデルについての実行条件を記述するパラメータを表す。特に、モデルの態様は、コンピュータモデルを実行する様々なタイプのハードウェア又は回路上で実装されてよい。例えば、モデルの一部は、汎用回路(例えば、汎用CPU)、特定のコンピュータモデル機能のために特殊化された回路(例えば、GPU又はプログラマブル積和回路)又は特定のコンピュータモデルアプリケーションのために特別に設計された回路等の様々なタイプの回路において実装されてよい。幾つかの構成では、コンピュータモデル910の異なる部分は、異なるタイプの回路上で実装されてよい。以下で論述されるように、モデルのトレーニングは、コンピュータモデル(例えば、同時トレーニングされる)の特定の態様のために使用されるハードウェアのタイプを最適化することを含んでもよいし、コンピュータモデルについての他のパラメータがモデルを実行する構成を考慮することなく決定された後に決定されてもよい。別の例では、実行パラメータは、プロセス内の特定の点において利用可能である値範囲、タスクを実行するために利用可能である動作等のような、モデルの異なる部分において利用可能であるプロセス又は関数のタイプを決定又は限定してもよい。
それゆえ、コンピュータモデルトレーニングは、コンピュータモデル940についてのモデルパラメータの値を決定又は「トレーニング」するのに使用されてよい。トレーニング中、モデルパラメータは、(時として損失関数とも称される)コスト関数を改善することを求める最適化関数に基づいてモデルパラメータを改善する、モデルパラメータ(例えば、個々の重み、活性化値、モデル実行環境等)の値を「学習」するように最適化される。トレーニングの前に、コンピュータモデル940は、ランダム初期化、他の若しくは同様のコンピュータモデルに基づいて選択される初期値、又は他の手段等によって、様々な方法において選択され得る初期値を有するモデルパラメータを有する。トレーニング中、モデルパラメータは、前のモデルパラメータに対してコスト/損失関数を改善するための最適化関数に基づいて変更される。
多くのアプリケーションにおいて、トレーニングデータ930は、コンピュータモデル940をトレーニングするために使用されるべきデータセットを含む。データセットは、コンピュータモデル940の特定の応用及び目的に従って異なる。教師あり学習タスクにおいて、トレーニングデータは、典型的には、トレーニングデータ、及びトレーニングデータに対するモデルの所望の出力を記述するトレーニングデータラベルのセットを含む。例えば、オブジェクト分類タスクの場合、トレーニングデータは、個々の画像を含んでよく、ここでは、画像内の個々の部分、領域又はピクセルがオブジェクトの分類を用いてラベル付けされる。このタスクの場合、トレーニングデータは、犬及び人物を描写するトレーニングデータ画像と、犬及び人物を含む画像の領域をラベル付けするトレーニングデータラベルとを含んでよく、それにより、コンピュータモデルは、それぞれ、その画像の同じ部分を犬及び人物として同様にラベル付けするように学習するように意図される。
コンピュータモデルをトレーニングするために、トレーニングモジュール(図示せず)は、トレーニング入力930をコンピュータモデル940に適用して、所与のトレーニング入力930についてのモデルによって予測される出力を決定する。トレーニングモジュールは、示されていないが、モデルのパラメータを所与としてその入力及び出力に従ってコンピュータモデルを実行し、結果に基づいてモデルパラメータを変更することによって、コンピュータモデルのトレーニングを実行するために使用されるコンピューティングモジュールである。トレーニングモジュールは、コンピュータモデル940の実際の実行環境を適用してもよいし、実行環境の結果をシミュレートして、例えば、コンピュータモデルの性能、ランタイム、メモリ、又は回路面積(例えば、専用ハードウェアが使用される場合い)を推定してもよい。トレーニングモジュールは、トレーニングデータ及びモデル評価とともに、図11において示されている例示のコンピューティングデバイス1100等の1つ又は複数の処理デバイスによってソフトウェア及び/又はハードウェアにおいてインスタンス化されてよい。様々な例において、トレーニングプロセスは、分散/クラウドコンピューティングシステム等、互いに組み合わせて複数のコンピューティングシステムによって実行されてもよい。
コンピュータモデル940についての現在のモデルパラメータに従ってトレーニング入力を処理した後、モデルの予測された出力は、評価され(950)、コンピュータモデルは、コスト関数に関して評価され、トレーニングモデルの最適化関数を使用して最適化される。最適化関数に依存して、モデル評価後の特定のトレーニングプロセス及びトレーニングパラメータは、コンピュータモデルの最適化関数を改善するために更新される。教師ありトレーニング(すなわち、トレーニングデータラベルが利用可能である)において、コスト関数は、トレーニングデータラベルに対してモデルの予測された出力を評価し、データについての「既知」のラベルに対する予測の相対コスト又は損失を評価してよい。これは、コンピュータモデルによる正しい予測の頻度の尺度を提供し、適合率(偽陽性の頻度)及び再現率(偽陰性の頻度)等の様々な方法において測定され得る。幾つかの状況におけるコスト関数は、モデルの他の特性、例えば、モデル複雑度、処理速度、メモリ要件、物理回路特性(例えば、電力要件、回路スループット)並びに(例えば、これらのモデルパラメータを評価又は変更するための)コンピュータモデル構造及び実行環境の他の特性を評価してもよい。
コスト関数の結果を決定した後、最適化関数は、モデルパラメータの変更を決定して、トレーニングデータについてのコスト関数を改善する。多くのそのような最適化関数は、当業者に既知である。多くのそのような手法は、モデルのパラメータに関してコスト関数を区別し、それゆえコスト関数を改善するモデルパラメータへの変更を決定する。モデルパラメータを変更するアルゴリズムを含む最適化関数についてのパラメータは、最適化関数についてのトレーニングパラメータである。例えば、最適化アルゴリズムは、当該技術分野において使用され、モデルの特定の使用のために適切である、勾配降下(又はその変形)、モメンタムベース最適化、又は他の最適化手法を使用してよい。それゆえ、最適化アルゴリズムは、モデルパラメータに対するパラメータ更新を決定する。幾つかの実装では、トレーニングデータは、バッチ処理され、パラメータ更新は、トレーニングデータのバッチに反復的に適用される。例えば、モデルパラメータは、初期化され、その後、データの第1のバッチに適用されて、モデルパラメータに対する第1の変更が決定されてよい。その後、データの第2のバッチは、変更されたモデルパラメータを用いて評価されて、モデルパラメータに対する第2の修正が決定されてよく、典型的には、利用可能なトレーニングデータの量又はモデルパラメータにおける増分的な改善が閾値未満である(例えば、追加のトレーニングデータがもはやモデルパラメータの改善を継続しない)ことのいずれかに基づいて、停止点まで以降も同様である。追加のトレーニングパラメータは、トレーニングデータについてのバッチサイズ、バリデーションデータとして使用するためのトレーニングデータの部分、パラメータ更新のステップサイズ、モデルの学習レート等を記述してよい。大域最適値を決定する、又は微分不可能モデルパラメータ空間に対処するのに追加の技法が使用されてもよい。
図10は、例示のニューラルネットワークアーキテクチャを示している。一般に、ニューラルネットワークは、入力層1010、1つ又は複数の隠れ層1020、及び出力層1030を含む。ネットワークの各層におけるデータについての値は、一般的に、ネットワークの1つ又は複数の前の層に基づいて決定される。ネットワークの各層は、ネットワークのその層の出力値を表す「活性値」と称される値のセットを生成し、ネットワークの次の層への入力であってよい。入力層1010について、活性値は、典型的には、入力データの値であるが、入力層1010は、入力データの表現を生成するための1つ又は複数の変換を通して変更されるものとして入力データを表してよい。例えば、レコメンドシステムにおいて、ユーザとオブジェクトとの間のインタラクションは、疎行列として表されてよい。個々のユーザ又はオブジェクトは、その後、そのユーザ又はオブジェクトに関連する疎行列におけるデータの変換として入力層1010として表されている。ニューラルネットワークは、別のコンピュータモデル(又は幾つか)の出力を、その入力層1010として受信してもよく、それにより、図10において示されているニューラルネットワークの入力層1010は、別のコンピュータモデルの出力である。それに応じて、各層は、ネットワークの1つ又は複数の前の層の活性値を表す「入力活性値」とも称される入力のセットを受信し、ネットワークのその層の活性値を表す「出力活性値」とも称される出力のセットを生成してよい。言い換えれば、1つの層の出力活性値は、ネットワークの別の層(ネットワークの1030の最終出力層を除く)の入力活性値になる。
ニューラルネットワークの各層は、典型的には、行列においてその出力活性値(すなわち、その出力とも称される)を表し、これは、ネットワークの特定の構造に従って1、2、3、又はn次元であってよい。図10において示されているように、各層の次元は、層の設計に従って異なってよい。出力層1030の次元は、モデルによって行われる予測の特性に依存する。例えば、マルチオブジェクト分類のためのコンピュータモデルは、アレイ内の各位置が入力層1010についての異なる分類の尤度を表す1次元アレイを有する出力層1030を生成してよい。画像の部分の分類についての別の例では、入力層1010は、512×512等の解像度を有する画像であってよく、出力層は、出力層1030が入力ピクセルの各々にn分類予測を提供する512×512×n行列であってよく、それにより、出力層1030における入力層1010における各ピクセルの対応する位置は、そのピクセルについての分類予測に対応するn次元アレイである。
隠れ層1020は、有効に出力層1030を生成することを支援する様々な方法において入力層1010を様々に特徴付ける出力活性値を提供する。それゆえ、隠れ層は、入力層1010の追加の特徴又は特性を提供するために考慮されてよい。2つの隠れ層が図10において示されているが、実用時には、任意の数の隠れ層が、様々なニューラルネットワーク構造において提供されてよい。
各層は、一般的に、ニューラルネットワークの1つ又は複数の前の層の出力活性値(これは、評価されている層への入力活性値であると考慮され得る)に基づいてその活性化行列における位置の出力活性化値を決定する。各層は、関数を入力活性値に適用して、その活性値を生成する。そのような層は、全結合層(例えば、全ての入力が層の全ての出力に接続される)、畳み込み層、逆畳み込み層、プーリング層、及びリカレント層を含んでよい。線形結合、畳み込みカーネル、活性化関数、プーリング等を含む様々なタイプの関数が層によって適用されてよい。層の関数のパラメータは、層の活性化入力から層についての出力活性値を決定するのに使用され、典型的には、モデルトレーニングプロセス中に変更される。前の層の特定の部分の寄与度を記述するパラメータは、典型的には、重みと称される。例えば、幾つかの層では、関数は、その層についての活性値を決定するためのそれぞれの重みを用いる各入力の乗算である。ニューラルネットワークの場合、それゆえ、全体としてのモデルについてのパラメータは、個々の層の各々についてのパラメータを含んでよく、大規模ネットワークでは、数百、数千、数百万、又はそれよりも多くの異なるパラメータを含むことができる。
ニューラルネットワークをトレーニングする1つの例として、コスト関数は、出力層1030において評価される。層ごとにパラメータの変更を決定するために、各前の層のパラメータは、それぞれの変更を決定するために評価されてよい。1つの例では、コスト関数(又は「誤差」)は、逆伝搬され、それにより、パラメータは、入力層1010に達するまで、シーケンスにおいて層ごとに最適化アルゴリズムによって評価される。
例示のデバイス
図11は、本明細書において開示される実施形態のうちのいずれかに係る、コンピュータモデルをトレーニング、解析、又は実装するために使用される1つ又は複数のコンポーネントを含み得る例示のコンピューティングデバイス1100のブロック図である。例えば、コンピューティングデバイス1100は、コンピュータモデルをトレーニングするトレーニングモジュールを含んでよく、コンピューティングデバイス1100の機能を実行するトレーニングされたコンピュータモデルを含んでよく、幾つかの状況では、コンピュータモデルを実行する専用ハードウェア及び/又はソフトウェアを含んでよい。
複数のコンポーネントがコンピューティングデバイス1100内に含まれるものとして図11において示されているが、これらのコンポーネントのうちの任意の1つ又は複数は、応用に適している場合、省略又は重複されてよい。幾つかの実施形態では、コンピューティングデバイス1100内に含まれるコンポーネントのうちの幾つか又は全ては、1つ又は複数のマザーボードに取り付けられてよい。幾つかの実施形態では、これらのコンポーネントのうちの幾つか又は全ては、単一のシステムオンチップ(SoC)ダイ上に製造される。
加えて、様々な実施形態において、コンピューティングデバイス1100は、図11において示されているコンポーネントのうちの1つ又は複数を含まなくてよいが、コンピューティングデバイス1100は、1つ又は複数のコンポーネントに結合するためのインターフェース回路を含んでよい。例えば、コンピューティングデバイス1100は、ディスプレイデバイス1106を含まなくてよいが、ディスプレイデバイス1106が結合され得るディスプレイデバイスインターフェース回路(例えば、コネクタ及びドライバ回路)を含んでよい。例の別のセットでは、コンピューティングデバイス1100は、オーディオ入力デバイス1124又はオーディオ出力デバイス1108を含まなくてよいが、オーディオ入力デバイス1124又はオーディオ出力デバイス1108が結合され得るオーディオ入力又は出力デバイスインターフェース回路(例えば、コネクタ及び支持回路)を含んでよい。
コンピューティングデバイス1100は、処理デバイス1102(例えば、1つ又は複数の処理デバイス)を含んでよい。本明細書において使用される場合、「処理デバイス」又は「プロセッサ」という用語は、レジスタ及び/又はメモリからの電子データを処理して、当該電子データをレジスタ及び/又はメモリに記憶され得る他の電子データに変換する任意のデバイス又はデバイスの部分を指し得る。処理デバイス1802は、1つ又は複数のデジタル信号プロセッサ(DSP)、特定用途向けIC(ASIC)、中央処理ユニット(CPU)、グラフィックス処理ユニット(GPU)、暗号プロセッサ(ハードウェア内で暗号アルゴリズムを実行する専用プロセッサ)、サーバプロセッサ、又は他の任意の適した処理デバイスを含んでよい。コンピューティングデバイス1100は、メモリ1104を含んでよく、メモリ1104それ自体は、揮発性メモリ(例えば、ダイナミックランダムアクセスメモリ(DRAM))、不揮発性メモリ(例えば、リードオンリメモリ(ROM))、フラッシュメモリ、ソリッドステートメモリ、及び/又はハードドライブ等の1つ又は複数のメモリデバイスを含んでよい。メモリ1104は、本明細書において論述されるように方法及び機能を実行する処理デバイスによって実行可能な命令を含んでよい。そのような命令は、様々なタイプのメモリにおいてインスタンス化されてよく、メモリは、1つ又は複数の非一時媒体上で記憶された命令として不揮発性メモリを含んでよい。幾つかの実施形態では、メモリ1104は、処理デバイス1102とダイを共有するメモリを含んでよい。このメモリは、キャッシュメモリとして使用されてよく、埋め込みダイナミックランダムアクセスメモリ(eDRAM)又はスピン注入トルク磁気ランダムアクセスメモリ(STT-MRAM)を含んでよい。
幾つかの実施形態では、コンピューティングデバイス1100は、通信チップ1112(例えば、1つ又は複数の通信チップ)を含んでよい。例えば、通信チップ1112は、コンピューティングデバイス1100との間でのデータの転送のためのワイヤレス通信を管理するように構成され得る。「ワイヤレス」という用語及びその派生形は、非固体媒体を通して変調された電磁放射の使用を通して、データを通信し得る回路、デバイス、システム、方法、技法、通信チャネル等を説明するために使用されてよい。この用語は、関連付けられたデバイスが幾つかの実施形態ではワイヤを含まないことがあるが、関連付けられたデバイスがワイヤを一切含まないことを示唆するものではない。
通信チップ1112は、多くのワイヤレス規格又はプロトコルのうちの任意のものを実装してよく、これらは、限定ではないが、Wi-Fi(登録商標)(IEEE 802.11ファミリ)、IEEE 802.16規格(例えば、IEEE 802.16‐2005修正)を含む米国電気電子技術者協会(IEEE)規格、任意の修正、更新及び/又は改定(例えば、アドバンストLTEプロジェクト、ウルトラモバイルブロードバンド(UMB)プロジェクト(「3GPP(登録商標)2」とも称される)等)を含むロングタームエボリューション(LTE)プロジェクトを含む。IEEE802.16準拠のブロードバンドワイヤレスアクセス(BWA)ネットワークは、一般的に、WiMAX(登録商標)(Worldwide Interoperability for Microwave Accessを表す頭字語)ネットワークと称され、これはIEEE802.16規格に対する適合性と相互運用性のテストに合格した製品の認証マークである。通信チップ1112は、移動通信用グローバルシステム(GSM(登録商標))、汎用パケット無線サービス(GPRS)、ユニバーサル移動体通信システム(UMTS)、高速パケットアクセス(HSPA)、発展型HSPA(E-HSPA)、又はLTEネットワークに従って動作してよい。通信チップ1112は、GSM(登録商標)エボリューション用エンハンストデータ(EDGE)、GSM EDGE無線アクセスネットワーク(GERAN)、ユニバーサル地上波無線アクセスネットワーク(UTRAN)又は発展型UTRAN(E-UTRAN)に従って動作してよい。通信チップ1112は、符号分割多重アクセス(CDMA)、時分割多重アクセス(TDMA)、デジタルエンハンストコードレス電気通信(DECT)、エボリューションデータオプティマイズド(EV-DO)及びそれらの派生物、並びに3G、4G、5G及びそれ以降のものとして指定される他の任意のワイヤレスプロトコルに従って動作してよい。通信チップ1112は、他の実施形態では、他のワイヤレスプロトコルに従って動作してよい。コンピューティングデバイス1100は、ワイヤレス通信を容易にするための、及び/又は(AM又はFM無線送信等の)他のワイヤレス通信を受信するためのアンテナ1122を含んでよい。
幾つかの実施形態では、通信チップ1112は、電気、光又は他の任意の適した通信プロトコル(例えば、Ethernet(登録商標))等の有線通信を管理してよい。上記で記載されたように、通信チップ1112は、複数の通信チップを含んでよい。例えば、第1の通信チップ1112は、Wi-Fi(登録商標)又はBluetooth(登録商標)等のより短距離のワイヤレス通信に専用であってよく、第2の通信チップ1112は、全地球測位システム(GPS)、EDGE、GPRS、CDMA、WiMAX(登録商標)、LTE、EV-DO又は他のもの等のより長距離のワイヤレス通信に専用であってよい。幾つかの実施形態では、第1の通信チップ1112は、ワイヤレス通信に専用であってよく、第2の通信チップ1112は、有線通信に専用であってよい。
コンピューティングデバイス1100は、バッテリ/電源回路1114を含んでよい。バッテリ/電源回路1114は、1つ又は複数のエネルギー貯蔵デバイス(例えば、バッテリ又はコンデンサ)及び/又はコンピューティングデバイス1100とは別個のエネルギー源(例えば、AC線電力)にコンピューティングデバイス1100のコンポーネントを結合するための回路を含んでよい。
コンピューティングデバイス1100は、ディスプレイデバイス1106(又は上記で論述されたように、対応するインターフェース回路)を含んでよい。ディスプレイデバイス1106は、例えば、ヘッドアップディスプレイ、コンピュータモニタ、プロジェクタ、タッチスクリーンディスプレイ、液晶ディスプレイ(LCD)、発光ダイオードディスプレイ、又はフラットパネルディスプレイ等の任意の視覚的インジケータを含んでよい。
コンピューティングデバイス1100は、オーディオ出力デバイス1108(又は上記で論述されたように、対応するインターフェース回路)を含んでよい。オーディオ出力デバイス1108は、例えば、スピーカ、ヘッドセット、又はイヤフォン等の可聴インジケータを生成する任意のデバイスを含んでよい。
コンピューティングデバイス1100は、オーディオ入力デバイス1124(又は上記で論述されたように、対応するインターフェース回路)を含んでよい。オーディオ入力デバイス1124は、マイクロフォン、マイクロフォンアレイ、又はデジタル機器(例えば、楽器デジタルインターフェース(MIDI)出力を有する機器)等の、音を表す信号を生成する任意のデバイスを含んでよい。
コンピューティングデバイス1100は、GPSデバイス1118(又は上記で論述されたように、対応するインターフェース回路)を含んでよい。GPSデバイス1118は、衛星ベースシステムと通信してよく、当該技術分野において既知であるように、コンピューティングデバイス1100のロケーションを受信してよい。
コンピューティングデバイス1100は、他の出力デバイス1110(又は上記で論述されたように、対応するインターフェース回路)を含んでよい。他の出力デバイス1110の例としては、オーディオコーデック、ビデオコーデック、プリンタ、情報を他のデバイスに提供するための有線若しくはワイヤレス送信機、又は追加の記憶デバイスが挙げられ得る。
コンピューティングデバイス1100は、他の入力デバイス1120(又は上記で論述されたように、対応するインターフェース回路)を含んでよい。他の入力デバイス1120の例としては、加速度計、ジャイロスコープ、コンパス、画像キャプチャデバイス、キーボード、マウス等のカーソル制御デバイス、スタイラス、タッチパッド、バーコードリーダ、クイックレスポンス(QR)コードリーダ、任意のセンサ、又は無線周波数識別(RFID)リーダが挙げられ得る。
コンピューティングデバイス1100は、ハンドヘルド又はモバイルコンピューティングデバイス(例えば、携帯電話、スマートフォン、モバイルインターネットデバイス、音楽プレーヤ、タブレットコンピュータ、ラップトップコンピュータ、ネットブックコンピュータ、ウルトラブックコンピュータ、携帯情報端末(PDA)、ウルトラモバイルパーソナルコンピュータ等)、デスクトップコンピューティングデバイス、サーバ又は他のネットワーク接続コンピューティングコンポーネント、プリンタ、スキャナ、モニタ、セットトップボックス、エンターテイメントコントロールユニット、車両制御ユニット、デジタルカメラ、デジタルビデオレコーダ、又はウェアラブルコンピューティングデバイス等の任意の所望のフォームファクタを有してよい。幾つかの実施形態では、コンピューティングデバイス1100は、データを処理する他の任意の電子デバイスであってよい。
選択例
以下の段落は、本明細書において開示された実施形態のうちの様々な例を提供する。
例1は、積和関数を実装する回路を提供し、前記回路は、擬似乗算回路のセットであって、各擬似乗算回路は、被乗数(例えば、活性値)及び乗数(例えば、重み)を受信し、不完全な2の補数算術を用いて前記被乗数に前記乗数を乗算することによって出力を生成するように構成されている、擬似乗算回路のセットと、前記擬似乗算回路のセットに結合され、前記擬似乗算回路のセットの前記出力及び前記擬似乗算回路のセットの2の補数算術を完全にするための値を累積するように構成された累積回路とを備える。
例2は、前記2の補数算術を完全にするために加算される前記値がバイアスパラメータである、例1の回路を提供する。
例3は、前記バイアスパラメータが構成可能である、例2の回路を提供する。
例4は、前記2の補数算術を完全にするために加算される前記値が、前記擬似乗算回路のセットによって受信される負の乗数の数に基づく、例1~3の回路のいずれかを提供する。
例5は、前記回路が、前記値を加算して、前記2の補数算術を完全にするように構成されている加算器回路を更に備える、例1~4の回路のいずれかを提供する。
例6は、前記被乗数が符号なし整数である、例1~5の回路のいずれかを提供する。
例7は、前記乗数が2のべき乗である、例1~6の回路のいずれかを提供する。
例8は、前記擬似乗算回路のセットが、ビットシフト演算を用いて前記乗算を実行するように構成されている、例1~7の回路のいずれかを提供する。
例9は、前記擬似乗算回路が、初期シフトに対して前記ビットシフト演算を適用する前に、最大又は最小重み範囲への前記初期シフトを用いて乗算を実行するように構成されている、例8の回路を提供する。
例10は、前記乗数が、前記ビットシフト演算についてのシフトの数を記述する大きさを含むように符号化される、例8~9の回路のいずれかを提供する。
例11は、前記擬似乗算回路が、前記乗数の大きさを前記被乗数と乗算するように構成された第1の部分と、前記第1の部分に結合され、前記第1の部分の前記出力を受信し、前記乗数が負である場合に前記第1の部分の結果を反転させるように構成された第2の部分であって、前記第2の部分の前記出力が、前記擬似乗算回路の前記出力である、第2の部分とを有する、例1~10の回路のいずれかを提供する。
例12は、前記乗数が、大きさ、負のビット、及び0ビットとして符号化される、例1~11のいずれかの回路を提供する。
例13は、ニューラルネットワークの畳み込み層を実装する回路を提供し、前記畳み込み層は、チャネル重みのセットを、入力活性値のセットに適用して、層出力のセットを生成し、前記回路は、前記チャネル重みのセットのサブセットを、複数のクロックサイクルのクロックサイクルごとの現在のチャネル重みとして選択するように構成されたチャネルセレクタ回路と、前記現在のチャネル重みを受信し、前記現在のチャネル重みを入力活性値のセットに適用し、前記現在のチャネル重みについての現在のチャネル出力を生成するように構成された畳み込みブロックのセットと、前記現在のチャネル出力を前記層出力のセットのサブセットとして記憶し、前記複数のクロックサイクルの後に層出力の前記セットを出力するように構成されたチャネルバッファとを備える。
例14は、前記畳み込みブロックのセットにおける畳み込みブロックの数が、前記チャネル重みのセットにおけるチャネル重みの数未満である、例13の回路を提供する。
例15は、畳み込みブロックの数が、前記チャネル重みの数を前記複数のクロックサイクルで除算した数に実質的に等しい、例13~14の回路のいずれかを提供する。
例16は、前記入力活性値のセットが、前記複数のクロックサイクル中に一定である、例13~15の回路のいずれかを提供する。
例17は、前記入力活性値のセットが、前記ニューラルネットワークの1つ又は複数の前の層によって生成される、例13~16の回路のいずれかを提供する。
例18は、前記1つ又は複数の前の層が、次元削減層を含む、例17の回路を提供する。
例19は、前記複数のクロックサイクルにおけるクロックサイクルの数が、前記次元削減層の前記次元削減に基づく、例18の回路を提供する。
例20は、前記1つ又は複数の前の層が、前記複数のクロックサイクルの各クロックサイクルについての出力を生成する少なくとも1つの層を含む、例17~19のいずれかの回路を提供する。
例21は、前記1つ又は複数の前の層が、前記複数のクロックサイクルの各クロックサイクルで異なる入力を受信する少なくとも1つの層を含む、例17~20のいずれかの回路を提供する。
例22は、前記畳み込みブロックのセットのうちの1つ又は複数が、例1~12のいずれかの前記回路を含む、例13~21の回路を提供する。
例23は、ハードウェアアクセラレータにおいて畳み込み層についてのパラメータを実装する方法を提供し、前記方法は、ニューラルネットワークの畳み込み層のパラメータを識別する段階であって、前記パラメータは、重みのセット、及びそれぞれの入力のセットを乗算した前記重みのセットの累積された結果に加算されるべきバイアスを含む、識別する段階と、前記畳み込み層が、負の値を有する前記重みのセットの数に基づいて前記バイアスを増加させる段階、又は、前記1つ又は複数の回路によって実行可能である最大乗算に対する前記重みの大きさを表すために前記重みのセットを符号化する段階によって実行される1つ又は複数の回路の特性に基づいて前記畳み込み層の前記パラメータを変更する段階とを備える。
例24は、前記バイアスを増加させ、前記重みのセットを符号化することによって、前記パラメータを変更する段階を更に備える、例23の方法を提供する。
例25は、前記バイアスが増加され、前記方法が、擬似乗算回路のセットに前記重みのセット及び増加された変更済みのバイアスを提供する段階であって、前記擬似乗算回路が、不完全な2の補数算術を用いて前記重みのセットの各々にそれぞれの入力を乗算し、前記乗算演算の結果を累積し、前記変更済みのバイアスを加算するように構成されている、提供する段階を更に備える、例23~24の方法のいずれかを提供する。
例26は、前記重みが符号化され、前記方法が、前記符号化された重みのセットを乗算回路のセットに提供する段階であって、前記乗算回路が各々、入力を受信し、前記符号化された重みのセットからそれぞれの符号化された重みを受信し、前記最大乗算を前記入力に適用し、前記最大乗算が適用された後に前記それぞれの符号化された重みを適用するように構成されている、提供する段階を更に備える、例23~25の方法のいずれかを提供する。
例27は、削減係数によって入力の次元を削減する前記1つ又は複数の回路における1つ又は複数の次元削減層を識別する段階と、前記畳み込み層についてのチャネルの数を前記削減係数で除算することによって前記回路についての畳み込みブロックの数を決定する段階と、前記1つ又は複数の回路についての前記畳み込みブロックの数をプロビジョニングして、各クロックサイクルに対する前記畳み込みブロックの数に対する前記重みのセットのサブセットを適用する段階であって、前記重みのセットの前記サブセットは、複数のクロックサイクルの各クロックサイクルで変化する、プロビジョニングする段階とを更に備える、例23~26の方法のいずれかを提供する。
要約書で説明される事項を含む、示された本開示の実装の上記の説明は、包括的であること、又は開示された厳密な形式に本開示を限定することを意図するものではない。本開示の特定の実装及び例が例示の目的で本明細書において説明されている一方で、当業者が認識するように、様々な均等の変形が本開示の範囲内で可能である。これらの変形は、上記の詳細な説明に鑑みて、本開示に対して行われてよい。
[他の可能な項目]
[項目1]
畳み込みニューラルネットワークの積和関数を実装する回路であって、
複数の擬似乗算回路であって、各擬似乗算回路は、被乗数及び乗数を受信し、不完全な2の補数算術を用いて前記被乗数に前記乗数を乗算することによって出力を生成するように構成されている、複数の擬似乗算回路と、
前記複数の擬似乗算回路に結合され、前記複数の擬似乗算回路の前記出力を累積して、累積出力を生成するように構成された累積回路と、
前記累積回路に結合され、前記累積出力に値を加算して、前記複数の擬似乗算回路の前記2の補数算術を完全にするように構成された加算器回路と
を備える、回路。
[項目2]
前記2の補数算術を完全にするために加算される前記値は、バイアスパラメータである、項目1に記載の回路。
[項目3]
前記2の補数算術を完全にするために加算される前記値は、前記複数の擬似乗算回路によって受信される負の乗数の数に基づく、項目1に記載の回路。
[項目4]
前記不完全な2の補数算術は、前記擬似乗算回路内で加算を伴うことなく前記被乗数を反転させることによって、前記被乗数の符号を変更することを含む、項目1に記載の回路。
[項目5]
前記2の補数算術を完全にするために加算される前記値は、前記複数の擬似乗算回路によって適用される負の乗数の数である、項目1に記載の回路。
[項目6]
前記複数の擬似乗算回路は、ビットシフト演算を用いて前記乗算を実行するように構成されている、項目1に記載の回路。
[項目7]
前記擬似乗算回路は、初期シフトに対して前記ビットシフト演算を適用する前に、最大又は最小重み範囲への前記初期シフトを用いて乗算を実行するように構成されている、項目6に記載の回路。
[項目8]
前記乗数は、前記ビットシフト演算についてのシフトの数を記述する大きさを含むように符号化される、項目6に記載の回路。
[項目9]
前記擬似乗算回路は、
前記乗数の大きさを前記被乗数と乗算するように構成された第1の部分と、
前記第1の部分に結合され、前記第1の部分の前記出力を受信し、前記乗数が負である場合に前記第1の部分の結果を反転させるように構成された第2の部分であって、前記第2の部分の前記出力は、前記擬似乗算回路の前記出力である、第2の部分と
を有する、項目1に記載の回路。
[項目10]
ニューラルネットワークの畳み込み層を実装する回路であって、前記畳み込み層は、複数のチャネル重みを、入力活性値のセットに適用して、複数の層出力を生成し、前記回路は、
前記複数のチャネル重みのサブセットを、複数のクロックサイクルのクロックサイクルごとの現在のチャネル重みとして選択するように構成されたチャネルセレクタ回路と、
前記現在のチャネル重みを受信し、前記現在のチャネル重みを入力活性値のセットに適用し、前記現在のチャネル重みについての現在のチャネル出力を生成するように構成された畳み込みブロックのセットと、
前記現在のチャネル出力を前記複数の層出力のサブセットとして記憶し、前記複数のクロックサイクルの後に層出力の前記セットを出力するように構成されたチャネルバッファと
を備える、回路。
[項目11]
前記畳み込みブロックのセットにおける畳み込みブロックの数は、前記チャネル重みのセットにおけるチャネル重みの数未満である、項目10に記載の回路。
[項目12]
畳み込みブロックの数は、前記チャネル重みの数を前記複数のクロックサイクルで除算した数に等しい、項目10に記載の回路。
[項目13]
前記入力活性値のセットは、前記複数のクロックサイクル中に一定である、項目10に記載の回路。
[項目14]
前記入力活性値のセットは、前記ニューラルネットワークの1つ又は複数の前の層によって生成される、項目10に記載の回路。
[項目15]
前記1つ又は複数の前の層は、次元削減層を含み、前記複数のクロックサイクルにおけるクロックサイクルの数は、前記次元削減層の前記次元削減に基づく、項目14に記載の回路。
[項目16]
前記1つ又は複数の前の層は、前記複数のクロックサイクルのクロックサイクルごとに出力を生成する少なくとも1つの層を含む、項目14に記載の回路。
[項目17]
前記1つ又は複数の前の層は、前記複数のクロックサイクルの各クロックサイクルで異なる入力を受信する少なくとも1つの層を含む、項目14に記載の回路。
[項目18]
ハードウェアアクセラレータにおいてニューラルネットワークの畳み込み層についてのパラメータを実装する方法であって、
前記ニューラルネットワークの畳み込み層のパラメータを識別する段階であって、前記パラメータは、複数の重み、及びそれぞれの複数の入力を乗算した前記複数の重みの累積された結果に加算されるべきバイアスを含む、識別する段階と、
前記畳み込み層が、
負の値を有する前記複数の重みの数に基づいて前記バイアスを増加させる段階、又は、
前記1つ又は複数の回路によって実行可能である最大乗算に対する前記重みの大きさを表すために前記複数の重みを符号化する段階
によって実行される1つ又は複数の回路の特性に基づいて前記畳み込み層の前記パラメータを変更する段階と
を備える、方法。
[項目19]
前記バイアスは増加され、前記方法は、
擬似乗算回路のセットに前記重みのセット及び増加された変更済みのバイアスを提供する段階であって、前記擬似乗算回路は、
不完全な2の補数算術を用いて前記重みのセットの各々にそれぞれの入力を乗算して、複数の乗算結果を生成し、
前記複数の乗算結果を累積し、
前記変更済みのバイアスを加算する
ように構成されている、提供する段階
を更に備える、項目18に記載の方法。
[項目20]
前記重みは符号化され、前記方法は、
前記符号化された重みのセットを乗算回路のセットに提供する段階であって、前記乗算回路は各々、
入力を受信し、
前記符号化された重みのセットからそれぞれの符号化された重みを受信し、
前記最大乗算を前記入力に適用し、
前記最大乗算が適用された後に前記それぞれの符号化された重みを適用する
ように構成されている、提供する段階
を更に備える、項目18に記載の方法。
[項目21]
削減係数によって入力の次元を削減する前記1つ又は複数の回路における1つ又は複数の次元削減層を識別する段階と、
前記畳み込み層についてのチャネルの数を前記削減係数で除算することによって前記1つ又は複数の回路についての畳み込みブロックの数を決定する段階と、
前記1つ又は複数の回路についての前記畳み込みブロックの数をプロビジョニングして、各クロックサイクルに対する前記畳み込みブロックの数に対する前記重みのセットのサブセットを適用する段階であって、前記重みのセットの前記サブセットは、複数のクロックサイクルの各クロックサイクルで変化する、プロビジョニングする段階と
を更に備える、項目18に記載の方法。
[項目22]
ハードウェアアクセラレータにおいてニューラルネットワークの畳み込み層を実装するためのハードウェアパラメータを決定するシステムであって、前記システムは、
前記ニューラルネットワークの前記畳み込み層のトレーニングされたパラメータを受信することであって、前記トレーニングされたパラメータは、それぞれの複数の入力を乗算され、累積されるべき複数の重みを含む、受信することと、
ハードウェアアクセラレータ上で前記畳み込み層を実装するための前記ハードウェアパラメータを、
負の値を有する前記複数の重みの数に基づいて乗算結果を累積した後に、前記ハードウェアアクセラレータによって加算されるべき値を決定すること、又は、
前記ハードウェアアクセラレータによって実行可能である最大乗算に対する前記複数の重みの大きさを表すために前記複数の重みを符号化すること
によって決定することと
を行うように構成された1つ又は複数の処理要素を備える、システム。
[項目23]
前記トレーニングパラメータは、バイアス値を含み、前記ハードウェアアクセラレータによって加算されるべき前記決定された値は、前記バイアス値に、負の値を有する前記複数の重みの前記数を加算した値である、項目22に記載のシステム。
[項目24]
前記ニューラルネットワークは、前記畳み込み層の前に次元削減を含み、前記畳み込み層は、複数のチャネル出力を生成する複数の畳み込みフィルタを含み、前記1つ又は複数の処理要素は、
前記次元削減に基づいて前記ハードウェアアクセラレータの前記畳み込み層についてプロビジョニングされるべき畳み込みブロックの数を決定するように更に構成されている、項目22に記載のシステム。
[項目25]
前記畳み込みブロックの決定された数は、前記畳み込み層への前記入力が前記ハードウェアアクセラレータにおいて一定に保たれるクロックサイクルの数に基づく、項目24に記載のシステム。

Claims (25)

  1. 畳み込みニューラルネットワークの積和関数を実装する回路であって、
    複数の擬似乗算回路であって、各擬似乗算回路は、被乗数及び乗数を受信し、不完全な2の補数算術を用いて前記被乗数に前記乗数を乗算することによって出力を生成するように構成されている、複数の擬似乗算回路と、
    前記複数の擬似乗算回路に結合され、前記複数の擬似乗算回路の前記出力を累積して、累積出力を生成するように構成された累積回路と、
    前記累積回路に結合され、前記累積出力に値を加算して、前記複数の擬似乗算回路の前記2の補数算術を完全にするように構成された加算器回路と
    を備える、回路。
  2. 前記2の補数算術を完全にするために加算される前記値は、バイアスパラメータである、請求項1に記載の回路。
  3. 前記2の補数算術を完全にするために加算される前記値は、前記複数の擬似乗算回路によって受信される負の乗数の数に基づく、請求項1に記載の回路。
  4. 前記不完全な2の補数算術は、前記擬似乗算回路内で加算を伴うことなく前記被乗数を反転させることによって、前記被乗数の符号を変更することを含む、請求項1に記載の回路。
  5. 前記2の補数算術を完全にするために加算される前記値は、前記複数の擬似乗算回路によって適用される負の乗数の数である、請求項1に記載の回路。
  6. 前記複数の擬似乗算回路は、ビットシフト演算を用いて前記乗算を実行するように構成されている、請求項1に記載の回路。
  7. 前記擬似乗算回路は、初期シフトに対して前記ビットシフト演算を適用する前に、最大又は最小重み範囲への前記初期シフトを用いて乗算を実行するように構成されている、請求項6に記載の回路。
  8. 前記乗数は、前記ビットシフト演算についてのシフトの数を記述する大きさを含むように符号化される、請求項6に記載の回路。
  9. 前記擬似乗算回路は、
    前記乗数の大きさを前記被乗数と乗算するように構成された第1の部分と、
    前記第1の部分に結合され、前記第1の部分の前記出力を受信し、前記乗数が負である場合に前記第1の部分の結果を反転させるように構成された第2の部分であって、前記第2の部分の前記出力は、前記擬似乗算回路の前記出力である、第2の部分と
    を有する、請求項1~8のいずれか1項に記載の回路。
  10. ニューラルネットワークの畳み込み層を実装する回路であって、前記畳み込み層は、複数のチャネル重みを、入力活性値のセットに適用して、複数の層出力を生成し、前記回路は、
    前記複数のチャネル重みのサブセットを、複数のクロックサイクルのクロックサイクルごとの現在のチャネル重みとして選択するように構成されたチャネルセレクタ回路と、
    前記現在のチャネル重みを受信し、前記現在のチャネル重みを入力活性値のセットに適用し、前記現在のチャネル重みについての現在のチャネル出力を生成するように構成された畳み込みブロックのセットと、
    前記現在のチャネル出力を前記複数の層出力のサブセットとして記憶し、前記複数のクロックサイクルの後に層出力の前記セットを出力するように構成されたチャネルバッファと
    を備える、回路。
  11. 前記畳み込みブロックのセットにおける畳み込みブロックの数は、前記チャネル重みのセットにおけるチャネル重みの数未満である、請求項10に記載の回路。
  12. 畳み込みブロックの数は、前記チャネル重みの数を前記複数のクロックサイクルで除算した数に等しい、請求項10に記載の回路。
  13. 前記入力活性値のセットは、前記複数のクロックサイクル中に一定である、請求項10に記載の回路。
  14. 前記入力活性値のセットは、前記ニューラルネットワークの1つ又は複数の前の層によって生成される、請求項10に記載の回路。
  15. 前記1つ又は複数の前の層は、次元削減層を含み、前記複数のクロックサイクルにおけるクロックサイクルの数は、前記次元削減層の次元削減に基づく、請求項14に記載の回路。
  16. 前記1つ又は複数の前の層は、前記複数のクロックサイクルのクロックサイクルごとに出力を生成する少なくとも1つの層を含む、請求項14に記載の回路。
  17. 前記1つ又は複数の前の層は、前記複数のクロックサイクルの各クロックサイクルで異なる入力を受信する少なくとも1つの層を含む、請求項14~16のいずれか1項に記載の回路。
  18. ハードウェアアクセラレータにおいてニューラルネットワークの畳み込み層についてのパラメータを実装する方法であって、
    前記ニューラルネットワークの畳み込み層のパラメータを識別する段階であって、前記パラメータは、複数の重み、及びそれぞれの複数の入力を乗算した前記複数の重みの累積された結果に加算されるべきバイアスを含む、識別する段階と、
    前記畳み込み層が、
    負の値を有する前記複数の重みの数に基づいて前記バイアスを増加させる段階、又は、
    1つ又は複数の回路によって実行可能である最大乗算に対する前記複数の重みの大きさを表すために前記複数の重みを符号化する段階
    によって実行される前記1つ又は複数の回路の特性に基づいて前記畳み込み層の前記パラメータを変更する段階と
    を備える、方法。
  19. 前記バイアスは増加され、前記方法は、
    擬似乗算回路のセットに前記複数の重みのセット及び増加された変更済みのバイアスを提供する段階であって、前記擬似乗算回路は、
    不完全な2の補数算術を用いて前記複数の重みのセットの各々にそれぞれの入力を乗算して、複数の乗算結果を生成し、
    前記複数の乗算結果を累積し、
    前記変更済みのバイアスを加算する
    ように構成されている、提供する段階
    を更に備える、請求項18に記載の方法。
  20. 前記複数の重みは符号化され、前記方法は、
    前記符号化された複数の重みのセットを乗算回路のセットに提供する段階であって、前記乗算回路は各々、
    入力を受信し、
    前記符号化された複数の重みのセットからそれぞれの符号化された重みを受信し、
    前記最大乗算を前記入力に適用し、
    前記最大乗算が適用された後に前記それぞれの符号化された重みを適用する
    ように構成されている、提供する段階
    を更に備える、請求項18に記載の方法。
  21. 削減係数によって入力の次元を削減する前記1つ又は複数の回路における1つ又は複数の次元削減層を識別する段階と、
    前記畳み込み層についてのチャネルの数を前記削減係数で除算することによって前記1つ又は複数の回路についての畳み込みブロックの数を決定する段階と、
    前記1つ又は複数の回路についての前記畳み込みブロックの数をプロビジョニングして、各クロックサイクルに対する前記畳み込みブロックの数に対する前記複数の重みのセットのサブセットを適用する段階であって、前記複数の重みのセットの前記サブセットは、複数のクロックサイクルの各クロックサイクルで変化する、プロビジョニングする段階と
    を更に備える、請求項18~20のいずれか1項に記載の方法。
  22. ハードウェアアクセラレータにおいてニューラルネットワークの畳み込み層を実装するためのハードウェアパラメータを決定するシステムであって、前記システムは、
    前記ニューラルネットワークの前記畳み込み層のトレーニングされたパラメータを受信することであって、前記トレーニングされたパラメータは、それぞれの複数の入力を乗算され、累積されるべき複数の重みを含む、受信することと、
    ハードウェアアクセラレータ上で前記畳み込み層を実装するための前記ハードウェアパラメータを、
    負の値を有する前記複数の重みの数に基づいて乗算結果を累積した後に、前記ハードウェアアクセラレータによって加算されるべき値を決定すること、又は、
    前記ハードウェアアクセラレータによって実行可能である最大乗算に対する前記複数の重みの大きさを表すために前記複数の重みを符号化すること
    によって決定することと
    を行うように構成された1つ又は複数の処理要素を備える、システム。
  23. 前記トレーニングされたパラメータは、バイアス値を含み、前記ハードウェアアクセラレータによって加算されるべき前記決定された値は、前記バイアス値に、負の値を有する前記複数の重みの前記数を加算した値である、請求項22に記載のシステム。
  24. 前記ニューラルネットワークは、前記畳み込み層の前に次元削減を含み、前記畳み込み層は、複数のチャネル出力を生成する複数の畳み込みフィルタを含み、前記1つ又は複数の処理要素は、
    前記次元削減に基づいて前記ハードウェアアクセラレータの前記畳み込み層についてプロビジョニングされるべき畳み込みブロックの数を決定するように更に構成されている、請求項22又は23に記載のシステム。
  25. 前記畳み込みブロックの決定された数は、前記畳み込み層への前記入力が前記ハードウェアアクセラレータにおいて一定に保たれるクロックサイクルの数に基づく、請求項24に記載のシステム。
JP2022164865A 2021-12-06 2022-10-13 面積高効率畳み込みブロック Pending JP2023084094A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/542,835 2021-12-06
US17/542,835 US20220092399A1 (en) 2021-12-06 2021-12-06 Area-Efficient Convolutional Block

Publications (1)

Publication Number Publication Date
JP2023084094A true JP2023084094A (ja) 2023-06-16

Family

ID=80740557

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022164865A Pending JP2023084094A (ja) 2021-12-06 2022-10-13 面積高効率畳み込みブロック

Country Status (2)

Country Link
US (1) US20220092399A1 (ja)
JP (1) JP2023084094A (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11532313B2 (en) * 2020-08-27 2022-12-20 Google Llc Selectively storing, with multiple user accounts and/or to a shared assistant device: speech recognition biasing, NLU biasing, and/or other data
CN114692833B (zh) * 2022-03-30 2023-11-21 广东齐芯半导体有限公司 一种卷积计算电路、神经网络处理器以及卷积计算方法
US11762946B1 (en) * 2022-09-23 2023-09-19 Recogni Inc. Systems for using shifter circuit and 3×3 convolver units to emulate functionality of larger sized convolver units

Also Published As

Publication number Publication date
US20220092399A1 (en) 2022-03-24

Similar Documents

Publication Publication Date Title
US10929746B2 (en) Low-power hardware acceleration method and system for convolution neural network computation
US20210004663A1 (en) Neural network device and method of quantizing parameters of neural network
US11790212B2 (en) Quantization-aware neural architecture search
JP2023084094A (ja) 面積高効率畳み込みブロック
EP3907601A1 (en) Accelerating neural networks with low precision-based multiplication and exploiting sparsity in higher order bits
US20200364552A1 (en) Quantization method of improving the model inference accuracy
US11574239B2 (en) Outlier quantization for training and inference
US8995756B2 (en) 3D vision processing
US11593628B2 (en) Dynamic variable bit width neural processor
US20200302283A1 (en) Mixed precision training of an artificial neural network
US20230376274A1 (en) Floating-point multiply-accumulate unit facilitating variable data precisions
CN113126953A (zh) 针对浮点处理的方法和装置
US20220188075A1 (en) Floating point multiply-accumulate unit for deep learning
US20240095522A1 (en) Neural network generation device, neural network computing device, edge device, neural network control method, and software generation program
US11526761B2 (en) Neural network training with decreased memory consumption and processor utilization
US11853868B2 (en) Multi dimensional convolution in neural network processor
CN113947177A (zh) 一种量化校准方法、计算装置和计算机可读存储介质
US20230161783A1 (en) Device for accelerating self-attention operation in neural networks
WO2023220892A1 (en) Expanded neural network training layers for convolution
US20230229505A1 (en) Hardware accelerator for performing computations of deep neural network and electronic device including the same
US20230139347A1 (en) Per-embedding-group activation quantization
US20230325665A1 (en) Sparsity-based reduction of gate switching in deep neural network accelerators
WO2024065848A1 (en) Improving accuracy of machine learning operations by compensating for lower precision with scale shifting
US20230059976A1 (en) Deep neural network (dnn) accelerator facilitating quantized inference
US20240135750A1 (en) Initializer for circle distribution for image and video compression and posture detection