(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024119963
(43)【公開日】2024-09-03
(54)【発明の名称】半導体ハードウェアにおいてニューラルネットワークを処理するための実装および方法
(51)【国際特許分類】
G06N 3/063 20230101AFI20240827BHJP
G06N 3/0495 20230101ALI20240827BHJP
【FI】
G06N3/063
G06N3/0495
【審査請求】有
【請求項の数】11
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024095760
(22)【出願日】2024-06-13
(62)【分割の表示】P 2023565626の分割
【原出願日】2022-04-29
(31)【優先権主張番号】63/184,576
(32)【優先日】2021-05-05
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】63/184,630
(32)【優先日】2021-05-05
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
2.VISUAL BASIC
3.PYTHON
4.JAVASCRIPT
(71)【出願人】
【識別番号】523402774
【氏名又は名称】ユニークファイ, インク
【氏名又は名称原語表記】UNIQUIFY, INC.
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】リー, ジョシュア
(57)【要約】 (修正有)
【課題】システム、方法、コンピュータ命令および人工知能処理要素(AIPE)を提供する。
【解決手段】畳み込み演算を実行するAIPEは、ニューラルネットワーク動作の入力データから導出されたシフト可能な入力を取り込むことと、ニューラルネットワークの対応する対数量子化されたパラメータまたは定数値から導出されたシフト命令を取り込むことと、シフト命令に従ってシフト可能な入力を左方向または右方向にシフトして、ニューラルネットワークの対応する対数量子化されたパラメータとの入力データの乗算を表すシフトされた出力を形成することと、を実行する。
【選択図】
図78
【特許請求の範囲】
【請求項1】
人工知能処理要素(AIPE)であって、前記AIPEが、
ニューラルネットワーク動作の入力データから導出されたシフト可能な入力を取り込むことと、
ニューラルネットワークの対応する対数量子化されたパラメータまたは定数値から導出されたシフト命令を取り込むことと、
前記シフト命令に従って前記シフト可能な入力を左方向または右方向にシフトして、前記ニューラルネットワークの前記対応する対数量子化されたパラメータとの前記入力データの乗算を表すシフトされた出力を形成すること
とを実行するように構成されたシフタ回路を備える。
【請求項2】
前記シフト命令が、シフト方向およびシフト量を含み、前記シフト量が、前記対応する対数量子化されたパラメータの指数の大きさから導出され、前記シフト方向が、前記対応する対数量子化されたパラメータの前記指数の符号から導出され、
前記シフタ回路が、前記シフト可能な入力を、前記シフト方向に従って前記左方向または前記右方向にシフトし、前記シフト可能な入力を、前記シフト量によって示された量だけ前記シフト方向にシフトする、
請求項1に記載のAIPE。
【請求項3】
前記シフト可能な入力の第1の符号ビットおよび前記対応する対数量子化されたパラメータの第2の符号ビットを取り込み、前記シフトされた出力の第3の符号ビットを形成するように構成された回路
をさらに備える請求項1に記載のAIPE。
【請求項4】
前記対数量子化されたパラメータの前記符号ビットが負符号を示す場合のために、前記シフトされた出力および前記対数量子化されたパラメータのうちの前記対応する1つの符号ビットを取り込み、1の補数データを形成するように構成された第1の回路と、
前記対応する対数量子化されたパラメータの前記符号ビットによって前記1の補数データをインクリメントし、前記シフトされた出力を、前記対応する対数量子化されたパラメータとの前記入力データの前記乗算を表す2の補数データに変更するように構成された第2の回路と
をさらに備える請求項1に記載のAIPE。
【請求項5】
前記シフタ回路が対数シフタ回路またはバレルシフタ回路である、
請求項1に記載のAIPE。
【請求項6】
前記ニューラルネットワーク動作の出力を取り込むように構成された回路
をさらに備え、
前記回路が、前記シフタ回路への信号入力に従って、前記ニューラルネットワーク動作の前記出力から、または前記ニューラルネットワーク動作の前記入力データから生成された大きさを変更された入力データから、前記シフト可能な入力を提供する、
請求項1に記載のAIPE。
【請求項7】
信号入力に従って、前記ニューラルネットワークの前記対応する対数量子化されたパラメータまたは前記定数値から導出された前記シフト命令を提供するように構成された回路
をさらに備える請求項1に記載のAIPE。
【請求項8】
前記シフタ回路に結合された加算器回路
をさらに備え、
前記加算器回路が、前記シフトされた出力に基づいて加算し、前記ニューラルネットワーク動作の出力を形成するように構成される、請求項1に記載のAIPE。
【請求項9】
前記加算器回路が整数加算器回路である、
請求項8に記載のAIPE。
【請求項10】
前記加算器回路が、前記シフトされた出力を、前記ニューラルネットワークの複数のバイアスパラメータのうちの対応する1つに加算し、前記ニューラルネットワーク動作の前記出力を形成するように構成される、
請求項8に記載のAIPE。
【請求項11】
別のシフタ回路と、
前記別のシフタ回路からの出力をラッチする前記別のシフタ回路に結合されたレジスタ回路と
をさらに備え、
前記別のシフタ回路が、前記シフトされた出力に関連付けられた符号ビットおよび前記シフトされた出力の各セグメントを取り込み、前記符号ビットに基づいて別のシフタ回路入力を左または右にシフトし、前記別のシフタ回路から前記出力を形成するように構成され、
前記レジスタ回路が、前記ニューラルネットワーク動作が完了していないことを示す信号の受信の場合に、前記別のシフタ回路からの前記ラッチされた出力を、前記別のシフタ回路への前記別のシフタ回路入力として提供し、前記ニューラルネットワーク動作が完了していることを示す前記信号の受信の場合に、前記ラッチされた出力を前記ニューラルネットワーク動作の出力として提供するように構成される、
請求項1に記載のAIPE。
【請求項12】
前記各セグメントが、前記別のシフタ回路入力の幅の2進対数のサイズを有する、
請求項11に記載のAIPE。
【請求項13】
前記シフタ回路による前記別のシフタ回路入力の前記シフトから生じる、前記別のシフタ回路からのオーバーフローまたはアンダーフローを取り込むように構成されたカウンタ
をさらに備え、
前記別のシフタ回路が、前記各セグメントからの前記オーバーフローまたは前記アンダーフローを取り込み、前記オーバーフローまたは前記アンダーフローの量によって、その後のセグメントを左または右にシフトするように構成される、
請求項11に記載のAIPE。
【請求項14】
前記ラッチされた出力を取り込んでエンコードされた出力を生成し、すべてのセグメントからの前記エンコードされた出力およびオーバーフロー動作またはアンダーフロー動作の結果からの符号ビットを連結して、前記ニューラルネットワーク動作の前記出力を形成するように構成されたワンホットからバイナリへのエンコーディング回路
をさらに備える請求項11に記載のAIPE。
【請求項15】
前記シフト命令に関連付けられた符号ビットが正符号を示している場合に、前記シフトされた出力の各セグメントを取り込み、正の累算シフタ回路入力を左にシフトするように構成された第2のシフタ回路を含んでいる正の累算シフタ回路であって、前記第2のシフタ回路が、前記第2のシフタ回路からの前記シフトされた正の累算シフタ回路入力を、第1のラッチされた出力としてラッチするように構成された第1のレジスタ回路に結合され、前記第1のレジスタ回路が、前記ニューラルネットワーク動作が完了していないことを示す信号の受信の場合に、前記第1のラッチされた出力を前記正の累算シフタ回路入力として提供するように構成される、正の累算シフタ回路と、
前記シフト命令に関連付けられた前記符号ビットが負符号を示している場合に、前記シフトされた出力の前記各セグメントを取り込み、負の累算シフタ回路入力を左にシフトするように構成された第3のシフタ回路を含んでいる負の累算シフタ回路であって、前記第3のシフタ回路が、前記第3のシフタ回路からの前記シフトされた負の累算シフタ回路入力を、第2のラッチされた出力としてラッチするように構成された第2のレジスタ回路に結合され、前記第2のレジスタ回路が、前記ニューラルネットワーク動作が完了していないことを示す信号の受信の場合に、前記第2のラッチされた出力を前記負の累算シフタ回路入力として提供するように構成される、負の累算シフタ回路と、
前記ニューラルネットワーク動作が完了していることを示す前記信号の受信の場合に、前記正の累算シフタ回路からの前記第1のラッチされた出力および前記負の累算シフタ回路からの前記第2のラッチされた出力に基づいて加算し、前記ニューラルネットワーク動作の出力を形成するように構成された加算器回路と
をさらに備える請求項1に記載のAIPE。
【請求項16】
前記正の累算シフタ回路入力の前記シフトから生じる、前記正の累算シフタ回路からの第1のオーバーフローを取り込むように構成された第1のカウンタであって、前記第2のシフタ回路が、前記各セグメントからの前記第1のオーバーフローを取り込んで、その後のセグメントを前記第1のオーバーフローの量だけ左にシフトするように構成される、第1のカウンタと、
前記負の累算シフタ回路入力の前記シフトから生じる、前記負の累算シフタ回路からの第2のオーバーフローを取り込むように構成された第2のカウンタであって、前記第3のシフタ回路が、前記各セグメントからの前記第2のオーバーフローを取り込んで、その後のセグメントを前記第2のオーバーフローの量だけ左にシフトするように構成される、第2のカウンタと
をさらに備える請求項15に記載のAIPE。
【請求項17】
前記第1のラッチされた出力を取り込んで第1のエンコードされた出力を生成し、すべてのセグメントからの前記第1のエンコードされた出力および正符号ビットを連結して第1の加算器回路入力を形成するように構成された第1のワンホットからバイナリへのエンコーディング回路と、
前記第2のラッチされた出力を取り込んで第2のエンコードされた出力を生成し、すべてのセグメントからの前記第2のエンコードされた出力および負符号ビットを連結して第2の加算器回路入力を形成するように構成された第2のワンホットからバイナリへのエンコーディング回路と
をさらに備え、
前記加算器回路が、前記第1の加算器回路入力を前記第2の加算器回路入力に加算して前記ニューラルネットワーク動作の前記出力を形成することによって、前記第1のラッチされた出力および前記第2のラッチされた出力に基づいて前記加算を実施する、
請求項15に記載のAIPE。
【請求項18】
前記入力データが、大きさを変更されて、前記シフト可能な入力を形成する、
請求項1に記載のAIPE。
【請求項19】
前記シフトされた出力をラッチするように構成されたレジスタ回路
をさらに備え、
加算演算を示す制御信号の受信の場合に、
前記シフタ回路が、前記シフト可能な入力の各セグメントを取り込み、前記シフトされた出力に関連付けられた符号ビットに基づいて前記シフトされた出力を左または右にシフトして、前記シフトされた出力および前記シフト可能な入力の加算演算を表す別のシフトされた出力を形成するように構成される、
請求項1に記載のAIPE。
【請求項20】
前記ニューラルネットワーク動作がパラメトリックReLU動作である場合、前記シフタ回路が、前記シフト可能な入力の符号ビットが正である場合にシフトを実行せずに、前記シフト可能な入力を前記シフトされた出力として提供するように構成される、
請求項1に記載のAIPE。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
【0002】
[0001]本出願は、2021年5月5日に出願され、「Systems and Methods Involving Artificial Intelligence and Cloud Technology for Edge and Server SOC」と題された、米国特許仮出願第63/184,576号および2021年5月5日に出願され、「Systems and Methods Involving Artificial Intelligence and Cloud Technology for Edge and Server SOC」と題された、米国特許仮出願第63/184,630号の恩恵およびこれらの米国特許仮出願に対する優先権を請求し、これらの米国特許仮出願の開示は、その全体が参照によって本明細書に明示的に組み込まれている。
【0003】
[0002]本開示は、一般に、人工知能システムを対象にしており、より詳細には、ハードウェアおよびソフトウェアにおけるニューラルネットワークおよび人工知能(AI:artificial intelligence)処理を対象にしている。
関連技術
【0004】
[0003]ニューラルネットワークは、複数のニューラルネットワーク層によって表された人工ニューロンのネットワークまたは回路であり、ニューラルネットワーク層の各々は、パラメータの集合によってインスタンス化される。ニューラルネットワーク層は、2種類のニューラルネットワークパラメータによって表される。ニューラルネットワークパラメータの1つの種類は、基礎になるニューラルネットワーク動作(例えば、畳み込みの場合、バッチ正規化など)に応じてデータと乗算される重みである。ニューラルネットワークパラメータのもう1つの種類は、データに、またはデータとの重みの乗算の結果に加算され得る値であるバイアスである。
【0005】
[0004]ニューラルネットワークのニューラルネットワーク層は、データが供給される入力層から開始し、次に隠れ層、その次に出力層が続く。層は、人工ニューロンで構成され、畳み込み層の場合、カーネルまたはフィルタとも呼ばれる。ニューラルネットワークを構成する層の異なる種類の例は、畳み込み層、完全接続層、回帰層、活性化層、バッチ正規化層などを含むことができるが、これらに限定されない。
【0006】
[0005]ニューラルネットワークのトレーニングまたは学習は、入力データのラベルで通常は表された目的格のセットおよびテストデータとして知られている入力データのセットに従って、ニューラルネットワーク内のパラメータの値を変更または改良するプロセスである。ニューラルネットワークのトレーニング、学習、または最適化は、勾配に基づく最適化などの数学的方法または非数学的方法によって、目的格の特定のセットに対してニューラルネットワーク内のパラメータの値を最適化することを含む。トレーニング/学習/最適化の各反復(エポックと呼ばれる)では、オプティマイザ(例えば、ソフトウェアプログラム、専用ハードウェア、またはこれらの組合せ)が、設定された目的格またはラベルに基づいて最も小さい誤差を生み出すように、パラメータの最適化された値を見つけ出す。ニューラルネットワーク推論の場合、テストデータおよびラベルを使用してニューラルネットワークがトレーニング、学習、または最適化された後に、任意のデータをトレーニング済みニューラルネットワークに適用/供給して出力値を取得し、その後、ニューラルネットワーク用に設定されたルールに従って出力値を解釈することができる。関連する技術におけるニューラルネットワークのトレーニング、ニューラルネットワーク推論、および対応するハードウェア実装の例は次の通りである。
【0007】
[0006]
図1は、関連する技術に従ってニューラルネットワークのトレーニングの例を示している。関連する技術では、ニューラルネットワークのトレーニングを促進するために、最初に、ニューラルネットワークパラメータがランダムな浮動小数点数または整数に初期化される。次に、ニューラルネットワークをトレーニングするための反復プロセスが次のように開始される。出力値を取得するために、テストデータがニューラルネットワークに入力され、すべての層を通って前方に伝搬される。そのようなテストデータは、浮動小数点数または整数の形態であることができる。出力値をテストラベルの値と比較することによって、誤差が計算される。次に、従来技術において知られているように、ニューラルネットワークの誤差を小さくするためにパラメータをどのように変更するかを決定するための方法が実行され、そうすると、実行された方法に従ってパラメータが変更される。この反復プロセスは、ニューラルネットワークが許容できる(例えば、しきい値以内の)誤差を生み出すまで繰り返され、結果として得られたニューラルネットワークは、トレーニング済み、学習済み、または最適化済みであると言われる。
【0008】
[0007]
図2は、関連する技術に従ってニューラルネットワーク推論動作の例を示している。ニューラルネットワーク推論を容易にするために、最初に、出力値を取得するために、推論データがニューラルネットワークに入力され、すべての層を通って前方に伝搬される。次に、ニューラルネットワークの出力値が、ニューラルネットワークによって設定された目的格に従って解釈される。
【0009】
[0008]
図3は、関連する技術に従ってニューラルネットワークのハードウェア実装の例を示している。ハードウェアにおいてニューラルネットワークを実装するために、最初に、入力データおよびニューラルネットワークパラメータが取得される。次に、ハードウェア乗算器を使用することによって、入力データ(被乗数)がパラメータ(乗数)と乗算され、積を取得する。その後、ハードウェア加算器を使用することによって、これらの積がすべて加算され、合計値を取得する。最後に、適用可能な場合、必要に応じてバイアスパラメータを合計値に加算するために、ハードウェア加算器が使用される。
【0010】
[0009]
図4は、関連する技術に従って、量子化されたニューラルネットワークのトレーニングの例を示している。量子化されたニューラルネットワークのトレーニングを促進するために、最初に、ニューラルネットワークのニューラルネットワークパラメータ(例えば、重み、バイアス)が、ランダムな浮動小数点数または整数に初期化される。次に、反復プロセスが実行され、この反復プロセスでは、出力値を取得するために、テストデータがニューラルネットワークに入力され、ニューラルネットワークのすべての層を通って前方に伝搬される。出力値をテストラベルの値と比較することによって、誤差が計算される。従来技術において知られているように、ニューラルネットワークの誤差を減らすためにパラメータをどのように変更するかを決定するための方法が使用され、それに応じてパラメータが変更される。この反復プロセスは、ニューラルネットワークが望ましいしきい値以内の許容できる誤差を生み出すまで繰り返される。そのような誤差が生み出された後に、パラメータのサイズを縮小するために、パラメータが量子化される(例えば、32ビットの浮動小数点数を8ビットの整数に量子化する)。
【0011】
[0010]
図5は、関連する技術に従って、量子化されたニューラルネットワークの場合のニューラルネットワーク推論の例を示している。推論プロセスは、
図2の標準的なニューラルネットワークの推論プロセスと同じであるが、ニューラルネットワークパラメータが整数に量子化される。
【0012】
[0011]
図6は、関連する技術に従って、量子化されたニューラルネットワークの場合のニューラルネットワークのハードウェア実装の例を示している。このハードウェア実装は、
図3に示された標準的なニューラルネットワークのハードウェア実装と同じである。この事例では、量子化されたニューラルネットワークに使用されるハードウェア乗算器およびハードウェア加算器は、通常、パラメータの整数量子化に起因して、
図3の浮動小数点加算器/乗算器とは対照的に、整数乗算器および整数加算器の形態である。
【0013】
[0012]ニューラルネットワーク動作に必要とされる計算を容易にするために、通常、乗累算回路(MAC:multiplier-accumulator circuits)またはMACの等価回路(乗算器および加算器)を使用して、ニューラルネットワーク動作の乗算演算および加算演算を実行する。関連する技術におけるすべてのAI処理ハードウェアは、ほとんどのニューラルネットワーク動作の計算を実行するために、根本的に、MACまたはMACの等価回路に依存する。
【発明の概要】
【0014】
[0013]乗算演算の複雑さに起因して、MACは、ニューラルネットワークおよびその他の人工知能動作を処理するためにアレイ内で使用された場合、大量の電力を消費し、かなりの設置面積を占めるだけでなく、計算するために長時間を要する。入力データおよびニューラルネットワークパラメータの量が膨大になる可能性があるため、ニューラルネットワーク動作を処理するためにMACの大規模な(例えば、数万個の)アレイが利用されることがある。複雑なニューラルネットワーク動作は、タイムリーな方法でニューラルネットワークを処理する必要がある大規模なMACアレイを必要とすることがあるため、そのような要件は、エッジデバイスまたはパーソナルデバイスでのニューラルネットワークに基づくアルゴリズムの使用を難しくする可能性がある。
【0015】
[0014]本明細書に記載された例示的な実装は、ハードウェア、ソフトウェア、またはこれらの組合せにおいて実装されるような第二世代ニューラルネットワークプロセッサ(ニューラルネットワーク2.0またはNN2.0)を対象にする。提案された例示的な実装は、畳み込みニューラルネットワーク(CNN:Convolutional Neural network)、回帰型ニューラルネットワーク(RNN:Recurrent Neural Network)、完全接続ニューラルネットワーク(FNN:Fully-connected Neural Network)、およびオートエンコーダ(AE:Auto Encoder)、バッチ正規化、パラメトリック整流線形ユニットなどの、乗算および加算を使用するすべてのニューラルネットワーク層/動作において、MACハードウェアを置き換えることができる。
【0016】
[0015]本明細書に記載された例示的な実装では、NN2.0は、ハードウェアにおいてシフタ機能を利用し、乗算器および/または加算器の代わりにシフタを使用することによって、ニューラルネットワークの実装の面積および電力を大幅に削減する。この技術は、計算されたそれらの勾配値の任意係数によってパラメータを調整することによって、ニューラルネットワークのトレーニングが達成されるということに基づく。言い換えると、ニューラルネットワークのトレーニングでは、その勾配に基づく任意量によって各パラメータの漸進的な調整が行われる。ニューラルネットワーク(AIモデル)をトレーニングするためにNN2.0が使用されるたびに、NN2.0は、ハードウェアまたはソフトウェアにおいて、2進数シフタなどのシフタが、畳み込み演算、バッチ正規化、またはパラメトリック/リーキーReLUなどの何かの活性化関数などの、乗算演算および/または加算演算を必要とするニューラルネットワーク動作に利用されることができるように、重みなどのニューラルネットワークのパラメータが(例えば、2の整数乗として表されることができる値に)対数量子化されることを保証し、それによって、乗算演算および/または加算演算をシフト演算に置き換える。場合によっては、パラメータまたは重みは、2進対数量子化(パラメータを2の整数乗である数値に量子化すること)されてよい。本明細書に記載された例示的な実装によって、わずかな電力を消費し、わずかな物理的設置面積のみを有しながら、MACアレイを使用して達成されることができる速度よりも非常に高速な方法で、ニューラルネットワーク動作の計算を実行することが可能になる。
【0017】
[0016]本明細書に記載された例示的な実装は、ニューラルネットワーク/人工知能動作を処理するための専用回路を容易にするために、人工知能処理要素(AIPE:artificial intelligence processing element)の形態で新しい回路を含む。しかし、本明細書に記載された機能は、望ましい実装に応じて、同等のフィールドプログラマブルゲートアレイ(FPGA:field programmable gate arrays)または特定用途向け集積回路(ASIC:application specific integrated circuits)によって等価回路において、あるいは汎用中央処理装置(CPU:central processing unit)プロセッサに読み込まれるメモリ内の命令として、実装されることができる。FPGA、ASIC、またはCPUを含んでいる場合においても、本明細書に記載された機能のアルゴリズムの実装は、シフトによる乗算または加算の置き換えによって、ニューラルネットワーク動作またはその他のAI動作を処理するためのハードウェアの設置面積、電力、および実行時間における削減につながり、その他の方法ではFPGA、ASIC、またはCPU上で通常の乗算によって消費されていた計算サイクルまたは計算リソースを節約する。
【0018】
[0017]本開示の態様は、人工知能処理要素(AIPE)を含むことができる。AIPEは、ニューラルネットワーク動作の入力データから導出されたシフト可能な入力を取り込むことと、ニューラルネットワークの対応する対数量子化されたパラメータまたは定数値から導出されたシフト命令を取り込むことと、シフト命令に従ってシフト可能な入力を左方向または右方向にシフトして、ニューラルネットワークの対応する対数量子化されたパラメータとの入力データの乗算を表すシフトされた出力を形成することとを実行するように構成されたシフタ回路を備えることができる。
【0019】
[0018]本開示の態様は、シフタ回路を備えているニューラルネットワーク動作を処理するためのシステムを含むことができ、シフタ回路は、入力データを、ニューラルネットワークの動作に関連付けられた対応する対数量子化されたパラメータと乗算するように構成される。入力データを対応する対数量子化されたパラメータと乗算するために、シフタ回路は、入力データから導出されたシフト可能な入力を取り込むことと、対応する対数量子化されたパラメータから導出されたシフト命令に従って、シフト可能な入力を左方向または右方向にシフトして、ニューラルネットワーク動作の対応する対数量子化されたパラメータとの入力データの乗算を表す出力を生成することとを実行するように構成される。
【0020】
[0019]本開示の態様は、入力データを、ニューラルネットワークの動作に関連付けられた対応する対数量子化されたパラメータと乗算することを含んでいる、ニューラルネットワーク動作を処理するための方法を含むことができる。この乗算は、入力データから導出されたシフト可能な入力を取り込むことと、対応する対数量子化されたパラメータから導出されたシフト命令に従って、シフト可能な入力を左方向または右方向にシフトして、ニューラルネットワーク動作の対応する対数量子化されたパラメータとの入力データの乗算を表す出力を生成することとを含むことができる。
【0021】
[0020]本開示の態様は、入力データを、ニューラルネットワークの動作に関連付けられた対応する対数量子化されたパラメータと乗算することを含んでいる、ニューラルネットワーク動作を処理するための命令を格納しているコンピュータプログラムを含むことができる。乗算のための命令は、入力データから導出されたシフト可能な入力を取り込むことと、対応する対数量子化されたパラメータから導出されたシフト命令に従って、シフト可能な入力を左方向または右方向にシフトして、ニューラルネットワーク動作の対応する対数量子化されたパラメータとの入力データの乗算を表す出力を生成することとを含むことができる。これらの命令は、非一過性コンピュータ可読媒体などの媒体に格納され、1つまたは複数のプロセッサによって実行されることができる。
【0022】
[0021]本開示の態様は、入力データを、ニューラルネットワークの動作に関連付けられた対応する対数量子化されたパラメータと乗算するための手段を含む、ニューラルネットワーク動作を処理するためのシステムを含むことができる。乗算のための手段は、入力データから導出されたシフト可能な入力を取り込むための手段と、対応する対数量子化されたパラメータから導出されたシフト命令に従って、シフト可能な入力を左方向または右方向にシフトして、ニューラルネットワーク動作の対応する対数量子化されたパラメータとの入力データの乗算を表す出力を生成するための手段とを含むことができる。
【0023】
[0022]本開示の態様はシステムをさらに含むことができ、このシステムは、1つまたは複数のニューラルネットワーク層に関連付けられた1つまたは複数の対数量子化されたパラメータ値によって表されたトレーニング済みニューラルネットワークを格納するように構成されたメモリであって、1つまたは複数のニューラルネットワーク層の各々が、実行される対応するニューラルネットワーク動作を表す、メモリと、シフト可能な入力データをシフトまたは加算するように構成された1つまたは複数のハードウェア要素と、1つまたは複数のハードウェア要素を制御して、メモリから読み取られた1つまたは複数のニューラルネットワーク層の各々について、対応する対数量子化されたパラメータ値に基づいてシフト可能な入力データを左または右にシフトして、シフトされたデータを形成するように構成されたコントローラ論理とを含み、実行される対応するニューラルネットワーク動作に従って、形成されたシフト済みデータを加算またはシフトすることができる。
【0024】
[0023]本開示の態様は、メモリ内で、1つまたは複数のニューラルネットワーク層に関連付けられた1つまたは複数の対数量子化されたパラメータ値によって表されたトレーニング済みニューラルネットワークを管理することであって、1つまたは複数のニューラルネットワーク層の各々が、実行される対応するニューラルネットワーク動作を表す、管理することと、1つまたは複数のハードウェア要素を制御して、メモリから読み取られた1つまたは複数のニューラルネットワーク層の各々について、対応する対数量子化されたパラメータ値に基づいてシフト可能な入力データを左または右にシフトして、シフトされたデータを形成することとを含み、実行される対応するニューラルネットワーク動作に従って、形成されたシフト済みデータを加算またはシフトすることができる方法をさらに含むことができる。
【0025】
[0024]本開示の態様は、メモリ内で、1つまたは複数のニューラルネットワーク層に関連付けられた1つまたは複数の対数量子化されたパラメータ値によって表されたトレーニング済みニューラルネットワークを管理することであって、1つまたは複数のニューラルネットワーク層の各々が、実行される対応するニューラルネットワーク動作を表す、管理することと、メモリから読み取られた1つまたは複数のニューラルネットワーク層の各々について、対応する対数量子化されたパラメータ値に基づいてシフト可能な入力データを左または右にシフトして、シフトされたデータを形成することと、実行される対応するニューラルネットワーク動作に従って、形成されたシフト済みデータを加算またはシフトすることとを含むことができる方法をさらに含むことができる。
【0026】
[0025]本開示の態様は、命令を含んでいるコンピュータプログラムをさらに含むことができ、これらの命令は、メモリ内で、1つまたは複数のニューラルネットワーク層に関連付けられた1つまたは複数の対数量子化されたパラメータ値によって表されたトレーニング済みニューラルネットワークを管理することであって、1つまたは複数のニューラルネットワーク層の各々が、実行される対応するニューラルネットワーク動作を表す、管理することと、1つまたは複数のハードウェア要素を制御して、メモリから読み取られた1つまたは複数のニューラルネットワーク層の各々について、対応する対数量子化されたパラメータ値に基づいてシフト可能な入力データを左または右にシフトして、シフトされたデータを形成することとを含み、実行される対応するニューラルネットワーク動作に従って、形成されたシフト済みデータを加算またはシフトすることができる。コンピュータプログラムおよび命令は、ハードウェア(例えば、プロセッサ、FPGA、コントローラなど)によって実行される非一過性コンピュータ可読媒体に格納されることができる。
【0027】
[0026]本開示の態様は、1つまたは複数のニューラルネットワーク層に関連付けられた1つまたは複数の対数量子化されたパラメータ値によって表されたトレーニング済みニューラルネットワークを格納するためのメモリの手段であって、1つまたは複数のニューラルネットワーク層の各々が、実行される対応するニューラルネットワーク動作を表す、メモリの手段と、メモリの手段から読み取られた1つまたは複数のニューラルネットワーク層の各々について、対応する対数量子化されたパラメータ値に基づいてシフト可能な入力データを左または右にシフトして、シフトされたデータを形成するためのシフトの手段と、実行される対応するニューラルネットワーク動作に従って、形成されたシフト済みデータを加算またはシフトするための手段とを含むことができるシステムをさらに含むことができる。
【0028】
[0027]本開示の態様は、メモリ内で、1つまたは複数のニューラルネットワーク層に関連付けられた1つまたは複数の対数量子化されたパラメータ値によって表されたトレーニング済みニューラルネットワークを管理することであって、1つまたは複数のニューラルネットワーク層の各々が、実行される対応するニューラルネットワーク動作を表す、管理することと、メモリから読み取られた1つまたは複数のニューラルネットワーク層の各々について、対応する対数量子化されたパラメータ値に基づいてシフト可能な入力データを左または右にシフトして、シフトされたデータを形成することと、実行される対応するニューラルネットワーク動作に従って、形成されたシフト済みデータを加算またはシフトすることとを含むことができる方法をさらに含むことができる。
【0029】
[0028]本開示の態様は、命令を含んでいるコンピュータプログラムをさらに含むことができ、これらの命令は、メモリ内で、1つまたは複数のニューラルネットワーク層に関連付けられた1つまたは複数の対数量子化されたパラメータ値によって表されたトレーニング済みニューラルネットワークを管理することであって、1つまたは複数のニューラルネットワーク層の各々が、実行される対応するニューラルネットワーク動作を表す、管理することと、メモリから読み取られた1つまたは複数のニューラルネットワーク層の各々について、対応する対数量子化されたパラメータ値に基づいてシフト可能な入力データを左または右にシフトして、シフトされたデータを形成することと、実行される対応するニューラルネットワーク動作に従って、形成されたシフト済みデータを加算またはシフトすることとを含むことができる。コンピュータプログラムおよび命令は、ハードウェア(例えば、プロセッサ、FPGA、コントローラなど)によって実行される非一過性コンピュータ可読媒体に格納されることができる。
【0030】
[0029]本開示の態様は、1つまたは複数のニューラルネットワーク層に関連付けられた1つまたは複数の対数量子化されたパラメータ値によって表されたトレーニング済みニューラルネットワークを格納するためのメモリの手段であって、1つまたは複数のニューラルネットワーク層の各々が、実行される対応するニューラルネットワーク動作を表す、メモリの手段と、メモリの手段から読み取られた1つまたは複数のニューラルネットワーク層の各々について、対応する対数量子化されたパラメータ値に基づいてシフト可能な入力データを左または右にシフトして、シフトされたデータを形成するためのシフトの手段と、実行される対応するニューラルネットワーク動作に従って、形成されたシフト済みデータを加算またはシフトするための手段とを含むことができるシステムをさらに含むことができる。
【0031】
[0030]本開示の態様は、本明細書に記載されているように、入力データから導出された(例えば、係数によって大きさを変更された)シフト可能な入力を取り込むことと、対応する対数量子化されたパラメータから導出されたシフト命令に従って、シフト可能な入力を左方向または右方向にシフトして、ニューラルネットワーク動作の対応する対数量子化されたパラメータとの入力データの乗算を表す出力を生成することとを含むことができる方法を含むことができる。本明細書に記載されているように、対応する対数量子化されたパラメータに関連付けられたシフト命令は、シフト方向およびシフト量を含むことができ、シフト量が、対応する対数量子化されたパラメータの指数の大きさから導出され、シフト方向が、対応する対数量子化されたパラメータの指数の符号から導出され、シフト可能な入力をシフトすることが、シフト方向に従って、シフト量によって示された量だけ、シフト可能な入力を左方向または右方向にシフトすることを含む。
【0032】
[0031]本開示の態様は、ニューラルネットワークの動作を処理するための方法を含むことができ、この方法は、ニューラルネットワークの動作の入力データから導出されたシフト可能な入力データを取り込むことと、ニューラルネットワークの動作の入力データの対応する対数量子化された重みパラメータに関連付けられた入力を取り込むことであって、入力がシフト方向およびシフト量を含み、シフト量が、対応する対数量子化された重みパラメータの指数の大きさから導出され、シフト方向が、対応する対数量子化された重みパラメータの指数の符号から導出される、取り込むことと、対応する対数量子化された重みパラメータに関連付けられた入力に従ってシフト可能な入力データをシフトし、ニューラルネットワークの動作の処理の出力を生成することとを含むことができる。
【0033】
[0032]本開示の態様は、ニューラルネットワークの動作を処理するためのシステムを含むことができ、このシステムは、ニューラルネットワークの動作の入力データから導出されたシフト可能な入力データを取り込むための手段と、ニューラルネットワークの動作の入力データの対応する対数量子化された重みパラメータに関連付けられた入力を取り込むための手段であって、入力がシフト方向およびシフト量を含み、シフト量が、対応する対数量子化された重みパラメータの指数の大きさから導出され、シフト方向が、対応する対数量子化された重みパラメータの指数の符号から導出される、手段と、対応する対数量子化された重みパラメータに関連付けられた入力に従ってシフト可能な入力データをシフトし、ニューラルネットワークの動作の処理の出力を生成するための手段とを含むことができる。
【0034】
[0033]本開示の態様は、ニューラルネットワークの動作を処理するためのコンピュータプログラムを含むことができ、このコンピュータプログラムは、ニューラルネットワークの動作の入力データから導出されたシフト可能な入力データを取り込むことと、ニューラルネットワークの動作の入力データの対応する対数量子化された重みパラメータに関連付けられた入力を取り込むことであって、入力がシフト方向およびシフト量を含み、シフト量が、対応する対数量子化された重みパラメータの指数の大きさから導出され、シフト方向が、対応する対数量子化された重みパラメータの指数の符号から導出される、取り込むことと、対応する対数量子化された重みパラメータに関連付けられた入力に従ってシフト可能な入力データをシフトし、ニューラルネットワークの動作の処理の出力を生成することとを含んでいる命令を含むことができる。コンピュータプログラムおよび命令は、非一過性コンピュータ可読媒体に格納され、1つまたは複数のプロセッサによって実行されるように構成されることができる。
【図面の簡単な説明】
【0035】
【
図1】[0034]
図1は、関連する技術に従って、標準的なニューラルネットワークのトレーニングプロセスの例を示す図である。
【
図2】[0035]
図2は、関連する技術に従って、標準的なニューラルネットワークの推論プロセスの例を示す図である。
【
図3】[0036]
図3は、関連する技術に従って、標準的なニューラルネットワークのハードウェア実装の例を示す図である。
【
図4】[0037]
図4は、関連する技術に従って、量子化されたニューラルネットワークのトレーニングプロセスの例を示す図である。
【
図5】[0038]
図5は、関連する技術に従って、量子化されたニューラルネットワークの推論プロセスの例を示す図である。
【
図6】[0039]
図6は、関連する技術に従って、量子化されたニューラルネットワークのハードウェア実装の例を示す図である。
【
図7】[0040]
図7は、例示的な実装に従って、対数量子化されたニューラルネットワークのアーキテクチャ全体を示す図である。
【
図8】[0041]
図8は、例示的な実装に従って、対数量子化されたニューラルネットワークのためのトレーニングプロセスの例を示す図である。
【
図9A】[0042]
図9Aおよび
図9Bは、例示的な実装に従って、対数量子化されたニューラルネットワークのトレーニングのための例示的なフローを示す図である。
【
図9B】[0042]
図9Aおよび
図9Bは、例示的な実装に従って、対数量子化されたニューラルネットワークのトレーニングのための例示的なフローを示す図である。
【
図10】[0043]
図10は、例示的な実装に従って、対数量子化されたニューラルネットワークの推論プロセスの例を示す図である。
【
図11】[0044]
図11は、例示的な実装に従って、対数量子化されたニューラルネットワークのハードウェア実装の例を示す図である。
【
図12】[0045]
図12は、例示的な実装に従って、対数量子化されたニューラルネットワークのハードウェア実装のフロー図の例を示す図である。
【
図14AB】[0047]
図14A~
図14Cは、パラメータの更新間の比較を示す図である。
図14Aは、通常のニューラルネットワークのパラメータ更新プロセスの例である。
図14Bおよび
図14Cは、対数量子化されたニューラルネットワークのパラメータ更新プロセスの例である。
【
図14C】[0047]
図14A~
図14Cは、パラメータの更新間の比較を示す図である。
図14Aは、通常のニューラルネットワークのパラメータ更新プロセスの例である。
図14Bおよび
図14Cは、対数量子化されたニューラルネットワークのパラメータ更新プロセスの例である。
【
図15】[0048]
図15は、例示的な実装に従って、対数量子化されたニューラルネットワークのオプティマイザの例を示す図である。
【
図17A】[0050]
図17A、
図17B、および
図18は、例示的な実装に従って、対数量子化されたニューラルネットワーク内の畳み込み層をトレーニングするための例示的なプロセスを示す図である。
【
図17B】[0050]
図17A、
図17B、および
図18は、例示的な実装に従って、対数量子化されたニューラルネットワーク内の畳み込み層をトレーニングするための例示的なプロセスを示す図である。
【
図18】[0050]
図17A、
図17B、および
図18は、例示的な実装に従って、対数量子化されたニューラルネットワーク内の畳み込み層をトレーニングするための例示的なプロセスを示す図である。
【
図19AB】[0051]
図19A、
図19B、および
図20は、例示的な実装に従って、対数量子化されたニューラルネットワーク内の緻密層をトレーニングするための例示的なプロセスを示す図である。
【
図20】[0051]
図19A、
図19B、および
図20は、例示的な実装に従って、対数量子化されたニューラルネットワーク内の緻密層をトレーニングするための例示的なプロセスを示す図である。
【
図21】[0052]
図21および
図22は、例示的な実装に従って、対数量子化されたニューラルネットワーク内のバッチ正規化の例示的なプロセスを示す図である。
【
図22】[0052]
図21および
図22は、例示的な実装に従って、対数量子化されたニューラルネットワーク内のバッチ正規化の例示的なプロセスを示す図である。
【
図23】[0053]
図23および
図24は、例示的な実装に従って、対数量子化されたニューラルネットワーク内の回帰型ニューラルネットワーク(RNN)のトレーニングの例を示す図である。
【
図24】[0053]
図23および
図24は、例示的な実装に従って、対数量子化されたニューラルネットワーク内の回帰型ニューラルネットワーク(RNN)のトレーニングの例を示す図である。
【
図25】[0054]
図25および
図26は、例示的な実装に従って、RNNフォワードパスの例を示す図である。
【
図26】[0054]
図25および
図26は、例示的な実装に従って、RNNフォワードパスの例を示す図である。
【
図27】[0055]
図27および
図28は、例示的な実装に従って、対数量子化されたニューラルネットワーク内のRNNをトレーニングするための例示的なプロセスを示す図である。
【
図28】[0055]
図27および
図28は、例示的な実装に従って、対数量子化されたニューラルネットワーク内のRNNをトレーニングするための例示的なプロセスを示す図である。
【
図29】[0056]
図29および
図30は、例示的な実装に従って、対数量子化されたニューラルネットワーク内のLeakyReLUのトレーニングの例を示す図である。
【
図30】[0056]
図29および
図30は、例示的な実装に従って、対数量子化されたニューラルネットワーク内のLeakyReLUのトレーニングの例を示す図である。
【
図31】[0057]
図31および
図32は、例示的な実装に従って、対数量子化されたニューラルネットワーク内のパラメトリックReLU(PReLU:Parametric ReLU)のトレーニングの例を示す図である。
【
図32】[0057]
図31および
図32は、例示的な実装に従って、対数量子化されたニューラルネットワーク内のパラメトリックReLU(PReLU:Parametric ReLU)のトレーニングの例を示す図である。
【
図33】[0058]
図33は、通常のニューラルネット推論動作(NN1.0)と対数量子化されたニューラルネットワーク(NN2.0)推論動作の間の違いの例を示す図である。
【
図34】[0059]
図34は、例示的な実装に従って、対数量子化されたニューラルネットワーク推論の入力データおよびバイアスデータの大きさを変更する例を示す図である。
【
図35】[0060]
図35および
図36は、例示的な実装に従って、通常のニューラルネットワーク内の完全接続ニューラルネットワークの推論の例を示す図である。
【
図36】[0060]
図35および
図36は、例示的な実装に従って、通常のニューラルネットワーク内の完全接続ニューラルネットワークの推論の例を示す図である。
【
図37】[0061]
図37および
図38は、例示的な実装に従って、対数量子化されたニューラルネットワークNN2.0内の完全に接続された緻密層の推論動作の例を示す図である。
【
図38】[0061]
図37および
図38は、例示的な実装に従って、対数量子化されたニューラルネットワークNN2.0内の完全に接続された緻密層の推論動作の例を示す図である。
【
図39】[0062]
図39および
図40は、例示的な実装に従って、通常のニューラルネットワーク内の畳み込み層の推論動作の例を示す図である。
【
図40】[0062]
図39および
図40は、例示的な実装に従って、通常のニューラルネットワーク内の畳み込み層の推論動作の例を示す図である。
【
図41】[0063]
図41および
図42は、例示的な実装に従って、量子化されたニューラルネットワーク(NN2.0)内の畳み込み層の推論動作の例を示す図である。
【
図42】[0063]
図41および
図42は、例示的な実装に従って、量子化されたニューラルネットワーク(NN2.0)内の畳み込み層の推論動作の例を示す図である。
【
図43AB】[0064]
図43A、
図43B、および
図44は、例示的な実装に従って、量子化されたニューラルネットワーク(NN2.0)内のバッチ正規化の推論動作の例を示す図である。
【
図44】[0064]
図43A、
図43B、および
図44は、例示的な実装に従って、量子化されたニューラルネットワーク(NN2.0)内のバッチ正規化の推論動作の例を示す図である。
【
図45】[0065]
図45および
図46は、例示的な実装に従って、通常のニューラルネットワーク内のRNNの推論動作の例を示す図である。
【
図46】[0065]
図45および
図46は、例示的な実装に従って、通常のニューラルネットワーク内のRNNの推論動作の例を示す図である。
【
図47】[0066]
図47および
図48は、例示的な実装に従って、対数量子化されたニューラルネットワーク(NN2.0)内のRNNの推論動作の例を示す図である。
【
図48】[0066]
図47および
図48は、例示的な実装に従って、対数量子化されたニューラルネットワーク(NN2.0)内のRNNの推論動作の例を示す図である。
【
図49】[0067]
図49は、例示的な実装に従って、ReLU関数、LeakyReLU関数、およびPReLU関数の例示的なグラフを示す図である。
【
図50】[0068]
図50および
図51は、例示的な実装に従って、物体検出モデルを対数量子化されたNN2.0の物体検出モデルに変換する例を示す図である。
【
図51】[0068]
図50および
図51は、例示的な実装に従って、物体検出モデルを対数量子化されたNN2.0の物体検出モデルに変換する例を示す図である。
【
図52AB】[0069]
図52Aおよび
図52Bは、例示的な実装に従って、顔検出モデルを対数量子化されたNN2.0の顔検出モデルに変換する例を示す図である。
【
図53AB】[0070]
図53Aおよび
図53Bは、例示的な実装に従って、顔認識モデルを対数量子化されたNN2.0の顔認識モデルに変換する例を示す図である。
【
図54AB】[0071]
図54Aおよび
図54Bは、例示的な実装に従って、オートエンコーダモデルを対数量子化されたNN2.0のオートエンコーダモデルに変換する例を示す図である。
【
図55AB】[0072]
図55Aおよび
図55Bは、例示的な実装に従って、緻密ニューラルネットワークモデルを対数量子化されたNN2.0の緻密ニューラルネットワークモデルに変換する例を示す図である。
【
図56】[0073]
図56は、例示的な実装に従って、ハードウェア内で発生する標準的な2進乗算の例を示す図である。
【
図57】[0074]
図57および
図58は、例示的な実装に従って、乗算演算を置き換えるためのNN2.0のシフト演算の例を示す図である。
【
図58】[0074]
図57および
図58は、例示的な実装に従って、乗算演算を置き換えるためのNN2.0のシフト演算の例を示す図である。
【
図59】[0075]
図59は、例示的な実装に従って、乗算演算を置き換えるためのNN2.0のシフト演算の例を示す図である。
【
図60】[0076]
図60および
図61は、例示的な実装に従って、乗算演算を置き換えるための2の補数データを使用するNN2.0のシフト演算の例を示す図である。
【
図61】[0076]
図60および
図61は、例示的な実装に従って、乗算演算を置き換えるための2の補数データを使用するNN2.0のシフト演算の例を示す図である。
【
図62】[0077]
図62は、例示的な実装に従って、乗算演算を置き換えるための2の補数データを使用するNN2.0のシフト演算の例を示す図である。
【
図63】[0078]
図63および
図64は、例示的な実装に従って、累算/加算演算を置き換えるためのNN2.0のシフト演算の例を示す図である。
【
図64】[0078]
図63および
図64は、例示的な実装に従って、累算/加算演算を置き換えるためのNN2.0のシフト演算の例を示す図である。
【
図65】[0079]
図65および
図66は、例示的な実装に従って、シフト演算を使用するNN2.0の加算演算のオーバーフロー処理の例を示す図である。
【
図66】[0079]
図65および
図66は、例示的な実装に従って、シフト演算を使用するNN2.0の加算演算のオーバーフロー処理の例を示す図である。
【
図67】[0080]
図67~
図69は、例示的な実装に従って、NN2.0のセグメント組み立て動作の例を示す図である。
【
図68】[0080]
図67~
図69は、例示的な実装に従って、NN2.0のセグメント組み立て動作の例を示す図である。
【
図69】[0080]
図67~
図69は、例示的な実装に従って、NN2.0のセグメント組み立て動作の例を示す図である。
【
図70】[0081]
図70および
図71は、例示的な実装に従って、累算/加算演算を置き換えるためのNN2.0のシフト演算の例を示す図である。
【
図71】[0081]
図70および
図71は、例示的な実装に従って、累算/加算演算を置き換えるためのNN2.0のシフト演算の例を示す図である。
【
図72】[0082]
図72は、例示的な実装に従って、AI処理要素(AIPE)の一般的なアーキテクチャの例を示す図である。
【
図73】[0083]
図73は、例示的な実装に従って、算術シフトアーキテクチャを含んでいるAIPEの例を示す図である。
【
図74】[0084]
図74は、例示的な実装に従って、乗算演算を置き換えるためのAIPEのシフト演算の例を示す図である。
【
図75】[0085]
図75は、例示的な実装に従って、乗算演算を置き換えるためのAIPEのシフト演算の例を示す図である。
【
図76】[0086]
図76~
図78は、例示的な実装に従って、畳み込み演算を実行するAIPEの例を示す図である。
【
図77】[0086]
図76~
図78は、例示的な実装に従って、畳み込み演算を実行するAIPEの例を示す図である。
【
図78】[0086]
図76~
図78は、例示的な実装に従って、畳み込み演算を実行するAIPEの例を示す図である。
【
図79】[0087]
図79および
図80は、例示的な実装に従って、バッチ正規化動作を実行するAIPEの例を示す図である。
【
図80】[0087]
図79および
図80は、例示的な実装に従って、バッチ正規化動作を実行するAIPEの例を示す図である。
【
図81】[0088]
図81および
図82は、例示的な実装に従って、パラメトリックReLU動作を実行するAIPEの例を示す図である。
【
図82】[0088]
図81および
図82は、例示的な実装に従って、パラメトリックReLU動作を実行するAIPEの例を示す図である。
【
図83】[0089]
図83および
図84は、例示的な実装に従って、加算演算を実行するAIPEの例を示す図である。
【
図84】[0089]
図83および
図84は、例示的な実装に従って、加算演算を実行するAIPEの例を示す図である。
【
図85】[0090]
図85は、例示的な実装に従って、NN2.0アレイの例を示す図である。
【
図87】[0092]
図87は、例示的な実装に従って、
図86A~86DのAIPE構造を使用するNN2.0アレイの例を示す図である。
【
図88】[0093]
図88は、一部の例示的な実装が適用され得る例示的なコンピューティング環境を示す図である。
【
図89】[0094]
図89は、例示的な実装に従って、AIPE制御のための例示的なシステムを示す図である。
【発明を実施するための形態】
【0036】
[0095]以下の詳細な説明は、本出願の図および例示的な実装の詳細を提供する。図間の冗長な要素の参照番号および説明は、明確にするために省略される。説明全体を通じて使用される用語は、例として提供されており、制限となるよう意図されていない。例えば、「自動的」という用語の使用は、本出願の実装を実践する当業者の望ましい実装に応じて、実装の特定の態様に対するユーザまたは管理者の制御を伴う完全に自動的な実装または半自動的な実装を含んでよい。選択が、ユーザインターフェイスまたはその他の入力手段を介して、ユーザによって実施されることができ、あるいは望ましいアルゴリズムによって実施されることができる。本明細書に記載されている例示的な実装は、単独で、または組み合わせて利用されることができ、例示的な実装の機能は、望ましい実装に従って任意の手段によって実装されることができる。
【0037】
[0096]
図7は、例示的な実装に従って、対数量子化されたニューラルネットワークのアーキテクチャ全体を示している。NN2.0アーキテクチャは、トレーニングおよび推論プラットフォームを含んでいる対数量子化されたニューラルネットワークプラットフォームである。以下では、NN2.0アーキテクチャのトレーニングおよび推論プロセスが説明される。
【0038】
[0097]トレーニングデータ701およびトレーニングされていないニューラルネットワーク702が、トレーニングプラットフォーム703に入力される。トレーニングプラットフォーム703は、オプティマイザ704および対数量子化器705を含んでいる。オプティマイザ704は、従来技術において知られている任意の最適化アルゴリズムに従ってモデルのパラメータを最適化する。対数量子化器705は、最適化されたパラメータを対数量子化する。オプティマイザ704および対数量子化器705は、望ましい実装に従って、誤差が望ましいしきい値を下回ってニューラルネットワークがトレーニングされるまで、または別の終了条件が満たされるまで、反復的に実行される。結果として得られる出力は、対数量子化されたパラメータによって表されたトレーニング済みニューラルネットワーク706である。
【0039】
[0098]トレーニング済みニューラルネットワーク706および推論データ707は、以下を含むことができる推論プラットフォーム708に入力される。データおよびバイアススケーラ709は、本明細書で説明されるように、トレーニング済みニューラルネットワーク706の推定データ707およびバイアスパラメータの大きさを変更し、左または右にシフト可能なデータおよびパラメータを形成する。推論エンジン710は、本明細書において説明されるように、ハードウェアまたはハードウェアとソフトウェアの何らかの組合せによってトレーニング済みニューラルネットワーク706を使用して、大きさを変更された推論データ707を推論する。データスケーラ711は、望ましい実装に応じて、推論エンジン710の出力の大きさを適切な出力範囲に変更する。推論プラットフォーム708は、データおよびバイアススケーラ709、推論エンジン710、および/またはデータスケーラ711の結果に基づいて出力712を生成してよい。
図7に示されたアーキテクチャの要素は、ハードウェアとソフトウェアの任意の組合せで実装されることができる。本明細書に記載された例示的な実装は、本明細書において説明されるように、シフトによって推論において必要とされる乗算および/または加算を容易にするために、ハードウェアに実装された新しい人工知能処理ユニット(AIPE)を含むが、そのような例示的な実装は、他の方法または従来のハードウェアによって(例えば、フィールドプログラマブルゲートアレイ(FPGA)、ハードウェアプロセッサなどによって)実装されることもでき、代わりに、より単純なシフト演算への乗算/加算演算の変更に起因して、そのような従来のハードウェア上の処理サイクル、電力消費、および面積を節約する。
【0040】
[0099]
図8は、例示的な実装に従って、対数量子化されたニューラルネットワークをトレーニングする例を示している。望ましい実装に応じて、例えば
図4で説明された「round(オペランド)」演算を利用する代わりに、「floor(オペランド)」または[ceiling(オペランド)]または「truncate(オペランド)」などの、オペランドを整数に変える任意の数学演算が使用されることができ、本開示は特にこれらに制限されない。
【0041】
[0100]
図9Aおよび
図9Bは、例示的な実装に従って、対数量子化されたニューラルネットワークのトレーニングのための例示的なフローを示している。
【0042】
[0101]901で、最初にフローが、ニューラルネットワークのパラメータ(例えば、重み、バイアス)を初期化し、これらのパラメータは、望ましい実装に従って、ランダムな浮動小数点数または整数の形態であることができる。902で、ニューラルネットワークによって処理された出力値を取得するために、テストデータがニューラルネットワークに入力され、ニューラルネットワーク層のすべてを通って前方に伝搬される。903で、出力値をテストラベルの値と比較することによって、出力値の誤差が計算される。904で、ニューラルネットワークの誤差を減らすためにパラメータをどのように変更するかを決定するための最適化方法が使用され、それに応じてパラメータが変更される。905で、パラメータが許容可能であるかどうか、すなわち、ニューラルネットワークがしきい値以内の誤差を生み出すかどうか、またはその他の終了条件が満たされるかどうかに関する判定が行われる。そうである場合(はい)、フローが906に進み、そうでない場合(いいえ)、フローが902に進む。それに応じて、望ましい誤差が満たされるか、または終了条件が満たされる(例えば、手動で終了される、反復回数が満たされるなど)まで、902~905のフローが反復される。
【0043】
[0102]906で、次に、パラメータのサイズを縮小し、それによって、シフタのハードウェア実装のためにパラメータを準備するために、結果として得られたパラメータが対数量子化される。1つの例では、32ビットの浮動小数点数が7ビットのデータに対数量子化されるが、本開示はこの例に制限されず、望ましい実装に従って他の実装が利用されることができる。例えば、64ビットの浮動小数点数が8ビットのデータに対数量子化されることができる。さらに、パラメータを対数量子化するために、906でのフローが最後に実行される必要はない。例示的な実装では、
図9Bの916に示されているように、パラメータの反復トレーニングプロセスの一部として対数量子化が使用されることができるように、パラメータの対数量子化は、902と905の間の(例えば、905の前に実行される)反復プロセスの一部であることができる。最適化および対数量子化が一緒に発生してパラメータ(例えば、7ビットのデータのパラメータ)を生成するように、望ましい実装に応じて、そのような例示的な実装が利用されることができる。それによって、結果として得られた対数量子化されニューラルネットワークは、任意の入力(例えば、浮動小数点数、整数)を取り込み、それに応じて、出力データ(例えば、独自のデータ形式、整数、浮動小数点数)を提供することができる。
【0044】
[0103]
図10は、例示的な実装に従って、対数量子化されたニューラルネットワークの推論プロセスの例を示している。ニューラルネットワーク推論を容易にするために、最初に、出力値を取得するために、推論データがニューラルネットワークに入力され、すべての層を通って前方に伝搬される。次に、ニューラルネットワークの出力値が、ニューラルネットワークによって設定された目的格に従って解釈される。しかし、この例では、パラメータが対数量子化される。したがって、推論プロセスは、望ましい実装に応じて、本明細書で説明されるように、シフタ回路またはAIPEを介して実施されることができるか、またはハードウェアプロセッサおよびシフト演算を使用してソフトウェアで実施されることができる。
【0045】
[0104]
図11は、例示的な実装に従って、対数量子化されたニューラルネットワークのハードウェア実装の例を示している。ハードウェアにおいて対数量子化されたニューラルネットワークを実装するために、最初に、入力データおよびニューラルネットワークパラメータが取得される。次に、ハードウェアまたはソフトウェアのデータスケーラを使用することによって、ハードウェアシフタによるシフト演算に備えて、係数によって入力データおよびバイアスの大きさが変更される。ハードウェアシフタを使用することによって、対数量子化されたパラメータ値に基づいて、入力データがシフトされる。その後、ハードウェア加算器を使用することによって、シフトされた値のすべてが一緒に加算される。最後に、バイアスを合計値に加算するために、ハードウェア加算器が使用される。
図11の例示的な実装では、対数量子化されたパラメータ(例えば、7ビットの対数量子化されたパラメータ)との大きさを変更された(例えば、2
10によって大きさを変更された)入力データ値の乗算を容易にするため、および加算演算のために、32ビットのシフタが利用される。しかし、望ましい実装に応じて、他の変形が利用されることができ、本開示はそれらに限定されない。入力データ値は、任意の係数によって大きさを変更されることができ、対数量子化されたパラメータは、同様に任意の種類の対数量子化された係数(例えば、8ビット、9ビット)であることができ、シフタが、望ましい実装を容易にするために適切に(例えば、16ビット、32ビット、64ビットなどに)サイズ設定される。
【0046】
[0105]
図12は、例示的な実装に従って、ハードウェア実装における対数量子化されたニューラルネットワーク推論のフロー図の例を示している。1201で、フローが、入力データおよび対数量子化されたニューラルネットワークパラメータを取得する。1202で、フローが、適切な係数によって入力データおよびバイアスの大きさを変更し、入力データおよびバイアスを、シフト演算のためのシフト可能な形態に変換する。1203で、対数量子化されたパラメータから導出されたシフト命令によって、シフト可能な入力データがシフトされる。このシフトは、望ましい実装に応じて、本明細書において説明されるように、ハードウェアシフタによって実行されることができ、またはハードウェアプロセッサもしくはフィールドプログラマブルゲートアレイ(FPGA)によって実行されることができる。以下では、このシフトの詳細がさらに説明される。
【0047】
[0106]1204で、シフトされた値のすべてが加算される。加算演算は、望ましい実装に応じて、本明細書において説明されるように、ハードウェア加算器によって実行されることができるか、またはハードウェアプロセッサもしくはFPGAによって実行されることができる。同様に、1205で、大きさを変更されたバイアスが、ハードウェア加算器、ハードウェアプロセッサ、またはFPGAによる1204での加算演算の結果として得られた合計値に加算される。
【0048】
[0107]
図13Aおよび
図13Bは、量子化と対数量子化の比較をそれぞれ示している。
図13Aは、qv=10によって0~104の整数を量子化する例を示しており、Quantization(n)=round(n/qv)*qvである。
図13Bは、2~180の整数を対数量子化する例を示しており、Log Quantization(+-n)=+-2
round(log2(n))である。
図13Aおよび
図13Bの比較において示されているように、対数量子化は、パラメータ値に関わらず、範囲が、同じ範囲とは対照的な2
nの形態であるため、より小さいパラメータの一層の正確さを可能にする。
【0049】
[0108]
図14A~
図14Cは、通常のニューラルネットワークのトレーニングおよび対数量子化されたニューラルネットワークのトレーニングそれぞれについて、パラメータの更新間の比較を示している。本明細書に記載された例示的な実装は、勾配を適切に調整することによって重みパラメータの対数量子化を実行することを含んでいるが、本明細書に記載された例示的な実装に従って、勾配の調整後に更新された重みパラメータの対数量子化が実行されることもできる。そのような例示的な実装では、結果として得られるパラメータ値が対数量子化された値になるように、勾配と乗算するための適切な学習率を決定することによって、
図9Bのフローおよび916が変更されることができる。
【0050】
[0109]本明細書に記載された例示的な実装では、シフト演算に対応するように、望ましい実装に従って入力データの大きさが変更される。モデル内のほとんどのパラメータは、0.5、0.25、0.125などの1.0未満の値に対応する「右へのシフト」演算をもたらす。したがって、入力データが左にシフトされ、これは入力に2Nを掛けることと同等であり、Nは正の整数である。
【0051】
[0110]一例として、未加工の入力値がxold=0.85であると仮定する。この入力は、220によって大きさを変更され、0.85x220=0.85x1,048,576=891,289.6という結果になる。そのように大きさを変更された入力は、round(891,289.6)=891,290となるように、整数に四捨五入され、新しい入力値xnew=891,290として使用される。
【0052】
[0111]バイアスは、ニューラルネットワーク動作において(乗算されるのではなく)加算されるパラメータとして定義される。次のような標準的なニューラルネットワーク動作では、バイアス項は加算項である。
a=x*w+b
【0053】
[0112]ここで、aはアクソン(出力)であり、xは入力であり、wは重みであり、bはバイアスである。本明細書に記載された例示的な実装では、同じ量によって入力およびバイアスの大きさが変更される。例えば、220によって入力の大きさが変更された場合、220によってバイアスの大きさが変更される。
【0054】
[0113]
図15は、例示的な実装に従って、オプティマイザの例を示している。本明細書に記載された例示的な実装では、任意のその他の勾配に基づくオプティマイザの上に最適化が構築されることができる。最適化は、段階ごとの、(トレーニングステップにおいて)ステップが実行される回数、各段階においてステップによる影響を受ける層、および/またはユーザによって設定されたしきい値以内の変数を量子化する(「量子化」-量子化しきい値未満の値を量子化する)かどうか、もしくは選択された層内のすべての変数を強制的に量子化する(「強制」-しきい値に関わらず、すべてのパラメータを量子化する)かどうかに加えて、段階の数がユーザによって設定されて、複数の段階で実行されることができる。各段階は、段階のステップ数(例えば、段階ごとの最適化の数)、ステップ間隔(例えば、段階ごとの動作の数)、および動作(例えば、動作の種類(量子化/強制)および量子化する層)によって定義される。
【0055】
[0114]望ましい実装に応じて、ユーザは以下のパラメータを設定してもよい。
【0056】
[0115]quant_method:「切り詰め」または「最も近い」。量子化する場合に使用する四捨五入方法。
【0057】
[0116]freeze_threshold:残りの重みに対して量子化+フリーズ動作を強制する前に量子化されなければならない重みのパーセンテージを決定するためのしきい値。
【0058】
[0117]mask_threshold:重みを量子化+フリーズするために、その重みがどの程度対数量子化された形態に近くなければならないかを決定するためのしきい値。
【0059】
[0118]例示的な実装では、モデルの量子化方法は次の通りであることができる。
【0060】
[0119]Closest:値xについて、最も近いlog2値に量子化する。
【0061】
[0120]Down:値xについて、log2の最も近い切り捨てに量子化する。
【0062】
[0121]Stochastic:値xについて、log2の切り上げおよび切り捨てを見つける。切り上げが選択される確率は、(x-切り捨て)/(切り上げ-切り捨て)である。
【0063】
[0122]例示的な実装では、モデルのフリーズ方法は次の通りである。
【0064】
[0123]Threshold:フリーズ動作中に、fz_threshold以上のフリーズされた重みのパーセンテージを有するすべての層をフリーズする。トレーニングの最後に、残りのすべての層もフリーズされる。
【0065】
[0124]Ranked:フリーズ動作中に、フリーズされた重みのパーセンテージに関して、層がランク付けされる。その後、フリーズ動作が実行されるたびに同じ数の層がフリーズされるように、最も高くランク付けされた層がフリーズされて管理される。
【0066】
[0125]Ordered:フリーズ動作中に、同じ数の層がフリーズされるように、入力->出力の順序に関して、層がフリーズされて管理される。
【0067】
[0126]例示的な実装では、トレーニング段階の選択肢は次の通りであることができる。デフォルトは、標準的な(NN1.0)ニューラルネットワーク動作であると仮定される。
【0068】
[0127]Fz_all:NN2.0動作である場合、層を量子化してフリーズし、層にマスクを適用する。
【0069】
[0128]Fz_bn:NN2.0動作である場合、バッチ正規化層を量子化してフリーズし、バッチ正規化層にマスクを適用する。
【0070】
[0129]Fz_conv:NN2.0動作である場合、畳み込み層を量子化してフリーズし、畳み込み層にマスクを適用する。
【0071】
[0130]Quant_all:NN2.0動作である場合、すべての層を量子化し、すべての層にマスクを適用する。
【0072】
[0131]Quant_bn:NN2.0動作である場合、バッチ正規化層を量子化し、バッチ正規化層にマスクを適用する。
【0073】
[0132]Quant_conv:NN2.0動作である場合、畳み込み層を量子化し、畳み込み層にマスクを適用する。
【0074】
[0133]例示的な実装のトレーニングの内訳は次の通りであることができる。
【0075】
[0134]入力:トレーニング段階のタプルのうちのタプル。
【0076】
[0135]例A:((4,1,Fz_all),)
【0077】
[0136]第1のエントリは、段階の動作で実施されるエポックの数を決定する(この場合、4つのエポックのfz_all)。
【0078】
[0137]第2のエントリは、NN2.0動作が実行される回数を決定する。言い換えると、このタプルは、エポックごとにfz_all動作が実行されることを示している。
【0079】
[0138]第3のエントリは、NN2.0のどの段階の動作が実行されるかを示している。
【0080】
[0139]例B:((2,1,Default),(4,1,Fz_conv),(4,2,fz_bn))
【0081】
[0140]この例では、合計で10個のエポックについてトレーニングが実行される。最初の2つのエポックは、NN1.0を使用してトレーニングされる。次の4つのエポックは、エポックごとの最後にNN2.0動作を実行する。4つのエポックの終了までに、すべての畳み込み層がフリーズされる。最後の4つのエポックは、1エポックおきにNN2.0を実行する。4つのエポックの終了までに、すべてのバッチ正規化層がフリーズされる。
【0082】
[0141]
図16A、
図16B、および
図16Cは、例示的な実装に従って、畳み込み演算の例を示している。具体的には、
図16Aは畳み込みの例を示しており、
図16Bは深さ方向畳み込みの例を示しており、
図16Cは分離可能畳み込みの例を示している。
図16Aの例示的な畳み込みでは、次式のように、入力信号に対して2次元(2D:two-dimensional)畳み込みが適用される。
Conv(x)=Σ(重み*x)+バイアス
【0083】
[0142]
図16Bの深さ方向畳み込みの例では、各チャネルに対して別々に2D畳み込みが適用され、出力が連結される。
図16Cの分離可能畳み込みの例では、各チャネルに対して別々に2D畳み込みが適用され、出力が連結されて畳み込みが深さ方向に実施される。
【0084】
[0143]
図17A、
図17B、および
図18は、例示的な実装に従って、畳み込み層をトレーニングするための例示的なプロセスを示している。具体的には、
図17Aが畳み込みのフォワードパスの例を示しており、
図17Bが畳み込みの重みの更新および対数量子化の例を示しており、
図18が
図17Aおよび
図17Bを参照して畳み込み層のトレーニングの例示的なフローを示している。
図18のフローでは、1801で、フローが、入力データに対して各値を乗算してから積を累算し、各カーネル(
図17Aでは3x3x3)を畳み込む。カーネルごとに1つの出力行列(
図17Aでは3x3)が生成される。1802で、フローが、出力とグランドトゥルースデータの間の誤差を計算した後に、重み勾配を計算する。1803で、フローが、
図17Bに示されているように、事前に定義された更新アルゴリズムに従って、重み勾配を使用して重みを更新する。1804で、フローが、低い対数量子化コストを有する重み値を対数量子化する。高い量子化損失を伴う重みは、望ましい実装に応じて、今後の反復まで量子化されないままであることができ、または直ちに量子化されることができる。
図17Bの例では、値「2.99」は、対数量子化コストが、0.5の最大対数量子化損失より高い2.99-2.00=0.99であるため、量子化されないままになる。1805で、畳み込みのトレーニングが完了するまで、1801~1804のプロセスが反復される。
【0085】
[0144]
図19A、
図19B、および
図20は、例示的な実装に従って、緻密層をトレーニングするための例示的なプロセスを示している。具体的には、
図19Aが緻密層のフォワードパスの例を示しており、
図19Bが緻密層の重みの更新および対数量子化の例を示しており、
図20が
図19Aおよび
図19Bを参照して緻密層のトレーニングの例示的なフローを示している。
図20のフローでは、2001で、フローが、各入力行データ(
図19Aの入力(1x3)))を重み行列(
図19Aの重み(3x4))の各列と乗算し、次に積を累算し、結果として、
図19Aに示されたような出力(1x4)を得る。2002で、フローが、出力とグランドトゥルースデータの間の誤差を計算した後に、重み勾配を計算する。2003で、フローが、
図19Bに示されているように、事前に定義された更新アルゴリズムに従って、重み勾配を使用して重みを更新する。2004で、フローが、低い対数量子化コストを有する重み値を対数量子化する。高い量子化損失を伴う重みは、望ましい実装に応じて、今後の反復まで量子化されないままであることができ、または直ちに量子化されることができる。2005で、緻密層のトレーニングが完了するまで、2001~2004のプロセスが反復される。
【0086】
[0145]バッチ正規化のトレーニングに関しては、d次元の入力x=(x(1)...x(d))を含む層に対して、各次元が正規化される。
【0087】
[0146]次元は、次式に基づいてチャネルを表してよい。
【数1】
ここで、平均および分散が、トレーニングデータセットすべてにわたって計算される。
【0088】
[0147]次のように、活性化x
(k)ごとに、パラメータγ
(k)、β
(k)の対が、正規化された値の大きさを変更してシフトしてよい。元のモデルパラメータと共に、パラメータの対が学習される。
【数2】
【0089】
[0148]バッチ正規化データに関して、次式によってバッチ正規化(BN:batch normalization)が表される。
【数3】
【0090】
[0149]データの平均および分散が計算される。
【0091】
[0150]イプシロン(ε)の値は、通常、ゼロ除算を回避するための小さい数値である。次に、BNがW.x+Bの形態に変換される。
【数4】
ここで、
【数5】
【数6】
である。Wの項が対数量子化され、バイアス項Bが適切に大きさを変更される。次に、Wが入力xに掛けられ、バイアスBが乗算の結果に加算される。
【0092】
[0151]
図21および
図22は、例示的な実装に従って、バッチ正規化のトレーニングの例を示している。具体的には、
図22は、
図21の例で使用されるバッチ正規化のトレーニングのフローを示している。2201で、フローが、バッチ正規化の重みとの入力の要素ごとの乗算を実施する。2202で、フローが、バッチ正規化のバイアスを加算する。2203で、フローが、アクソンの出力をラベルと比較することによって勾配を計算する。2204で、フローが、バッチ正規化の変数を更新する。2205で、フローが、対数量子化された値に近い(例えば、しきい値以内の)バッチ正規化の重みを対数量子化する。2206で、フローが、バッチ正規化の重みが完全に対数量子化されるまで2205を繰り返す。
【0093】
[0152]
図23および
図24は、例示的な実装に従って、回帰型ニューラルネットワーク(RNN)フォワードパスの例を示している。具体的には、
図23および
図24は、RNNフォワードパスの例を示している。2401で、フローが、
図23の第1のデータおよび重み(2x2)を乗算する。2402で、フローが、第1のデータおよび重みの積のすべてを累算する。2403で、第1の反復の間に、フローが、データと同じ形状を有しているゼロアレイに隠れ層(2x2)を掛ける。2404で、フローが、ゼロアレイおよび隠れ層のすべての積を累算する。2405で、フローが、2402および2404からの出力の合計値を保存し、この合計値が次の、またはその後の反復において使用される。2406で、フローが、
図23の第2のデータに重み(2x2)を掛ける。2407で、フローが、第2のデータおよび重みのすべての積を累算する。2408で、フローが、2407からの出力に隠れ層(2x2)を掛ける。2409で、フローが、保存された出力および隠れ層のすべての積を累算する。2410で、データが完全に処理されるまでフローが繰り返す。
【0094】
[0153]
図25および
図26は、例示的な実装に従って、RNNフォワードパスの別の例を示している。具体的には、
図25および
図26は、RNNフォワードパスの例を示している。2601で、フローが、
図25の第1のデータに重み(2x2)を掛ける。2602で、フローが、第1のデータおよび重みの積のすべてを累算する。2603で、第1の反復の間に、フローが、データ(1x2)と同じ形状を有しているゼロアレイ(init_state)に隠れ層(2x2)を掛ける。2604で、フローが、ゼロアレイおよび隠れ層(2x2)のすべての積を累算する。2605で、フローが、2602および2604からの出力の合計値を保存し、この合計値が次の、またはその後の反復において使用される。2606で、フローが、
図25の第2のデータに重み(2x2)を掛ける。2607で、フローが、第2のデータおよび重み(2x2)のすべての積を累算する。2608で、フローが、2607からの出力に隠れ層(2x2)を掛ける。2609で、フローが、保存された出力および隠れ層(2x2)のすべての積を累算する。2610で、データが完全に処理されるまでフローが繰り返す。
【0095】
[0154]
図27および
図28は、例示的な実装に従って、RNNの重みの更新および対数量子化の例を示している。具体的には、
図27は、RNNの重みの更新および量子化の例を示しており、
図28は、RNNの重みの更新および量子化の例示的なフローを示している。2801で、フローが、出力とグランドトゥルースデータの間の誤差を計算することによって、重み勾配を計算する。場合によっては、重み(2x2)および隠れ層(2x2)は、両方とも緻密層である。2802で、フローが、事前に定義されたか、または事前に構成された更新アルゴリズムに基づいて、重み勾配を使用して重みを更新する。2803で、フローが、低い(例えば、しきい値以内の)対数量子化コストを有する重み値を対数量子化する。高い(例えば、しきい値を超える)量子化損失を有する重みは量子化されず、今後またはその後の反復のために残される。
【0096】
[0155]
図29および
図30は、例示的な実装に従って、LeakyReLUをトレーニングする例を示している。具体的には、
図29は、LeakyReLUのトレーニングの例を示しており、
図30は、LeakyReLUのトレーニングの例示的なフローを示している。LeakyReLUは、LeakyReLU(x)=max(0,x)+negative_slope*min(0,x)に対応する要素ごとの関数を適用してよく、x≧0の場合はLeakyReLU(x)=xであり、そうでない場合はLeakyReLU(x)=negative_slope*xである。3001で、フローが、yがゼロ(0)以上であるかどうかを判定する。3002で、フローによるyがゼロ(0)以上であるということの決定に応答して、yがxの値に設定され、トレーニングプロセスが完了する。3003で、フローによるyがゼロ(0)未満であるということの決定に応答して、xに負の傾斜が掛けられる。標準的なニューラルネットワーク動作では、デフォルトで、負の傾斜が0.3に設定される。NN2.0では、0.3の値を対数量子化することによって、負の傾斜が0.25または2
-2に設定される。3004で、フローが、更新された傾斜値を使用してNNをトレーニングする。トレーニング中に他の層のアクソンの値が変化することがあるため、更新された傾斜値を使用してNNがトレーニングされる。
【0097】
[0156]
図31および
図32は、例示的な実装に従って、パラメトリックReLU(PReLU)をトレーニングする例を示している。具体的には、
図31は、PReLUのトレーニングの例を示しており、
図32は、PReLUのトレーニングの例示的なフローを示している。PReLUのトレーニングは、PReLU(x)=max(0,x)+α*min(0,x)に対応する要素ごとの関数を適用してよく、x≧0の場合はPReLU(x)=xであり、そうでない場合はPReLU(x)=α*xである。そのような場合、αはトレーニング可能なパラメータである。3201で、フローが、yがゼロ(0)以上であるかどうかを判定する。3202で、フローによるyがゼロ(0)以上であるということの決定に応答して、yがxの値に設定され、PReLUのトレーニングプロセスが完了する。3203で、フローによるyがゼロ(0)未満であるということの決定に応答して、勾配を計算して層の重みを更新するために、xにαが掛けられる。3204で、αが対数量子化された重みに近い(例えば、しきい値以内である)場合、フローがαを対数量子化された数値に変更する。3205で、αが3204で対数量子化されていない場合、アルファが対数量子化されるまで、3203および3204のプロセスが繰り返す。
【0098】
[0157]
図33は、通常のニューラルネット動作(NN1.0)とNN2.0動作の間の違いの例を示している。ニューラルネットワークがトレーニング、学習、または最適化された後に、出力値を取得するために、推論データ(任意のデータ)がトレーニング済みニューラルネットワークに適用されてよい。ニューラルネットワーク用に設定されたルールに基づいて、出力値が解釈される。例えば、NN1.0では、出力を生成するために、データが重みと乗算されてよい。NN2.0では、ニューラルネットワーク動作の結果として得られる出力を生成するために、NN2.0の対数量子化された重みに基づいてデータがシフトされてよい。
【0099】
[0158]NN2.0においてシフト演算を使用する場合に生じる可能性がある問題は、右シフト演算において情報(層のアクソンにおける桁)が失われることがあるということである。例えば、緻密層への入力が4(2進数では0100)であり、重みが2
-5であると仮定すると、それは、入力(4=0100)が5だけ右にシフトされて、乗算による通常の0.125の代わりに、0の結果を生成するということを意味する。これは、NN2.0における右シフトに起因して、情報の損失につながることがある。係数によってすべての入力データを拡大し(左にシフトし)、すべての右シフト演算を十分に適用するための十分な空白を残すことによって、この問題が考慮されてよい。正確な係数値は、個別のニューラルネットワークおよび/またはニューラルネットワークと共に使用されるデータセットによって変わってよい。例えば、係数2
24が使用されてよい。しかし、本開示は、他の係数値が使用され得るように、係数2
24に限定されるよう意図されていない。各層のバイアスは、例えば
図34に示されているように、大きさを変更された入力との整合性を維持するために、入力データに使用される係数と同じ係数によって大きさを変更される(左にシフトされる)べきである。
【0100】
[0159]
図35および
図36は、例示的な実装に従って、通常のニューラルネットワーク内の緻密層を含んでいる完全接続ニューラルネットワークの推論の例を示している。具体的には、
図35は、緻密層を含んでいる完全接続ニューラルネットワーク(例えば、NN1.0)の例を示しており、
図36は、緻密層を含んでいる完全接続ニューラルネットワークの例示的なフローを示している。
図35のニューラルネットワークは、入力層、隠れ層、および出力層を含んでいる。入力層は、隠れ層に供給される複数の入力を含んでよい。3601で、フローが入力データを取得する。隠れ層に供給される入力データは、浮動小数点数を含んでいる。3602で、フローが、入力データを最適化された重みと乗算する。3603で、フローが、対応する最適化され重みを掛けられた入力データおよびバイアスの合計値を計算し、出力を生成する。
【0101】
[0160]
図37および
図38は、例示的な実装に従って、対数量子化されたニューラルネットワークNN2.0内の完全に接続された緻密層の推論の例を示している。具体的には、
図37は、緻密層を含んでいる完全接続NN2.0の例を示しており、
図38は、緻密層を含んでいる完全接続NN2.0の例示的なフローを示している。
図37のNN2.0は、入力層、隠れ層、および出力層を含んでいる。入力層は、隠れ層に供給される複数の入力を含んでよい。3801で、フローが入力データの大きさを変更する。入力データは、係数によって大きさを変更された浮動小数点数を含む。例えば、浮動小数点数は2
24の係数によって大きさを変更されてよい。本開示は、スケール係数の異なる値が使用され得るように、本明細書で開示された例示的なスケール係数に限定されるよう意図されていない。3802で、フローが、対応する対数量子化された重みから導出されたシフト命令に基づいて入力データをシフトする。重みは、パラメータを対数量子化することから導出された7ビットのデータを含んでよい。3803で、フローがバイアスを加算する。入力データの大きさを変更するために使用された係数と同じ係数によって、バイアスの大きさが変更されてよい。
【0102】
[0161]
図39および
図40は、例示的な実装に従って、通常のニューラルネットワーク内の畳み込み推論動作の例を示している。具体的には、
図39は、畳み込み層の畳み込み推論動作の例を示しており、
図40は、畳み込み層の畳み込み推論動作の例示的なフローを示している。4001で、フローが、入力データすべてにわたって各カーネル(
図39に示されているような3x3x3)を畳み込む。4002で、フローが各値を乗算し、積を累算または加算する。
図39の例では、カーネルごとに1つの出力行列(3x3)が生成されてよい。4003で、フローが各出力行列に、対応するバイアスを加算する。各カーネルは、カーネルの出力行列(
図39では3x3)全体にわたってブロードキャストされる異なるバイアスを有してよい。
【0103】
[0162]
図41および
図42は、例示的な実装に従って、NN2.0の畳み込み推論動作の例を示している。具体的には、
図41は、NN2.0の畳み込み層の畳み込み推論動作の例を示しており、
図42は、NN2.0の畳み込み層の畳み込み推論の例示的なフローを示している。4201で、フローが、係数によって入力データの各々の大きさを変更し、同じ係数によって各バイアス値の大きさを変更する。層がNN2.0への入力層である場合、フローは係数(例えば、2
24)を掛けることによって入力データの各々を拡大する。層が入力層でない場合、入力データ値は、すでに大きさを変更されていると仮定され、カーネルの重みは、シフトに使用するための対数量子化された値にトレーニングされていると仮定される。4202で、フローは、入力データすべてにわたって各カーネル(
図41では2x2x3)を畳み込む。要素ごとのシフトが各値に使用されてよく、結果が累算される。一部の態様では、カーネルごとに1つの出力行列(
図41では3x3)が生成される。カーネル内の重み値は、(重みの符号を決定するための+/-)(左/右シフトのための+/-の後に、シフトする量が続く)の形式を有してよい。例えば、+(-5)は、重みの符号は負であり、その後に、5による右へのシフトが続くということを示す。これは、入力値に2
-5を掛けることと同等である。4203で、フローが各出力行列に、対応するバイアスを加算する。各カーネルは、カーネルの出力行列(
図41では3x3)全体にわたってブロードキャストされ得る各バイアスを有してよい。
【0104】
[0163]バッチ正規化の推論に関して、バッチ正規化は次式に対応してよい。
【数7】
【0105】
[0164]ここで、γおよびβはトレーニング可能なパラメータであってよく、一方、平均および分散は定数であってよく、トレーニング中に設定されてよい。イプシロン(ε)も、数値安定性のために使用される定数であり、1E-3などの、ただしこれに限定されない小さい値を有する。平均、分散、およびイプシロンは、すべてブロードキャストされる。平均および分散は、チャネルごとに(各チャネルの高さ/幅にわたってブロードキャストされる)1つの値を有し、一方、イプシロンは、すべての次元にわたってブロードキャストされる1つの値である。場合によっては、バッチ正規化方程式に従う要素ごとの動作が、入力データ(x)を使用してアクソンを計算するために使用されてよい。
【0106】
[0165]
図43A、
図43B、および
図44は、例示的な実装に従って、バッチ正規化の推論の例を示している。具体的には、
図43Aは、NN2.0用に変換されたバッチ正規化方程式を示しており、
図43Bは、NN2.0のバッチ正規化の推論を示しており、
図44は、NN2.0のバッチ正規化の推論の例示的なフローを示している。NN2.0のバッチ正規化方程式は、
図43Aに示されているように変換される。NN2.0のバッチ正規化の最終的な形式が、
図43Aの方程式3として示されている。場合によっては、トレーニング中に、
図43Aの方程式4内のWおよび方程式43Aの方程式4内のBが最適化されるということが仮定されてよく、Wは対数量子化され、WおよびBは推論用に設定されて準備ができている。
【0107】
[0166]4401で、フローが、
図43Bに示されているように、対数量子化された重み(w)値に基づいて、要素ごとに入力データをシフトする。4402で、フローが要素ごとにバイアスを加算する。この層は、バッチ正規化層であるため、入力データの大きさが変更されていると仮定されるような入力層である可能性は低い。バイアスは、入力データと同じ係数によって大きさを変更されてもよい。4403で、フローがアクソンを計算する。
【0108】
[0167]
図45および
図46は、例示的な実装に従って、通常のニューラルネットワーク内のRNNの推論の例を示している。具体的には、
図45は、RNNの推論の例を示しており、
図46は、RNNの推論の例示的なフローを示している。4601で、フローが、
図45の第1のデータに重み(2x2)を掛ける。4602で、フローが、第1のデータおよび重みのすべての積を累算する。4603で、第1の反復の間に、フローが、データ(1x2)と同じ形状を有しているゼロアレイ(init_state)に隠れ層(2x2)を掛ける。4604で、フローが、ゼロアレイのすべての積を累算する。4605で、フローが、4602および4604からの出力の合計値を保存し、この合計値が次の、またはその後の反復において使用される。4606で、フローが、
図45の第2のデータに重み(2x2)を掛ける。4607で、フローが、第2のデータおよび重みのすべての積を累算する。4608で、フローが、4605からの出力に隠れ層(2x2)を掛ける。4609で、フローが、保存された出力のすべての積を累算する。4610で、データが4609で完全に処理されない場合、データが完全に処理されるまで、4605~4609のプロセスが繰り返す。
【0109】
[0168]
図47および
図48は、例示的な実装に従って、NN2.0のRNNの推論の例を示している。具体的には、
図47は、NN2.0のRNNの推論の例を示しており、
図48は、NN2.0のRNNの推論の例示的なフローを示している。4801で、フローが、シフトを使用して、ゼロアレイ(init_state)に隠れ層(2x2)を掛けて、その値を累算する。
図47に示されているように、結果として得られたベクトルが保存される(出力1 A)。4802で、フローが、シフトを使用して、第1のデータ(データA)に重み(2x2)を掛けて、その値を累算する。重み(2x2)および隠れ層(2x2)は、両方とも緻密層である。
図47に示されているように、結果として得られたベクトルが保存される(出力2 A)。4803で、フローが、4801および4802からのベクトル出力を一緒に加算する。
図47に示されているように、結果として得られたベクトルが保存される(出力3 A)。4804で、フローが、シフトを使用して、4803からのベクトル出力に隠れ層(2x2)を掛けて、その値を累算する。
図47に示されているように、結果として得られたベクトルが保存される(出力1 B)。4805で、フローが、シフトを使用して、第2のデータ(データB)に重み(2x2)を掛けて、その値を累算する。
図47に示されているように、結果として得られたベクトルが保存される(出力2 B)。4806で、データが4805で完全に処理されない場合、データが完全に処理されるまで、4802~4805のプロセスが繰り返す。
【0110】
[0169]場合によっては、ReLU、LeakyReLU、またはパラメトリックReLU(PReLU)を含んでよい3種類の整流線形ユニット(relu)活性化関数が、一般に使用される。ReLUは、次式に対応してよい。
【0111】
[0170]ReLU(x)=(x)+=max(0,x)
【0112】
[0171]LeakyReLUは、次式に対応してよい。
【0113】
[0172]LeakyReLU(x)=max(0,x)+negative_slope*min(0,x)であり、ここで、
【数8】
である。
【0114】
[0173]PReLUは、次式に対応してよい。
【0115】
[0174]PReLU(x)=max(0,x)+α*min(0,x)であり、ここで、
【数9】
である。
【0116】
[0175]これらの3つの関数は、入力(通常は、ニューラルネットワークの層を通じて計算されるアクソンのテンソル)を取り込み、関数を適用して出力を計算するように構成される。アクソンのテンソルでの各入力値は、それらの値に基づいて独立して機能する。例えば、入力値がゼロ(0)より大きい場合、出力=入力となるように、3つの関数がすべて同じように動作する。しかし、入力値がゼロ(0)より小さい場合、関数は異なって動作する。
【0117】
[0176]ReLUの場合、入力値<0である場合、出力=0である。LeakyReLUの場合、出力=negative_slope*入力であり、negative_slopeは、トレーニングの開始時に(通常は0.3に)設定され、トレーニング全体を通じて固定される。PReLUの場合、出力=α*入力であり、αはトレーニング可能であり、トレーニング中に最適化される。αは、PReLU層ごとに1つの値を有し、すべての次元にわたってブロードキャストされる。ネットワーク内に2つ以上のPReLUが存在する場合などの一部の事例では、各PReLUは、対応するトレーニング済みの最適化されたαを含む。
【0118】
[0177]
図49は、例示的な実装に従って、3つの関数すべての例示的なグラフを示している。3つの活性化関数はすべて、入力値が0より大きい場合、出力=入力となるように、標準的な推論と同じように推論する。入力値がゼロ(0)より小さい場合、NN2.0のReLUの推論は、
図49の短破線に示されているように、出力=0を有してよい。入力値がゼロ(0)より小さい場合、NN2.0のReLUの推論は標準的なReLUと同じであってよい。負の入力値の場合のNN2.0のLeakyReLUの推論は、negative_slopeが対数量子化されるように変更される(
図49の長破線として示されている0.25=2
-2のデフォルトを有する)。(乗算の代わりに)シフトを利用して出力を計算するために、対数量子化が実行される。negative_slopeの値は、トレーニング開始前に設定され、それに応じて、他の層内のトレーニング可能なパラメータがトレーニングされて最適化される。負の入力値の場合のNN2.0のPReLUの推論は、トレーニング可能なパラメータ(
図49の点線として示されているα=0.5=2
-1)がトレーニング中に対数量子化され、シフトを利用して出力値を計算できるようにするという点においても異なっている。
【0119】
[0178]
図50および
図51は、例示的な実装に従って、YOLOなどの物体検出モデルを対数量子化されたNN2.0のモデルに変換する方法の例を示している。標準的なYOLOアーキテクチャは、backbone5001、neck5002、およびhead5003を含んでよい。backboneは、CSPDarknet53 Tinyを含んでよく、一方、neckおよびheadは、畳み込みブロックを含む。入力層は、シフトの目的で、係数2
n(例えば、2
24)によって大きさを変更されてよい。畳み込み層およびバッチ正規化層のためのバイアスは、入力層の大きさを変更するために使用された係数と同じ係数2
n(例えば、2
24)によって大きさを変更されてもよい。出力は、入力層、ならびに畳み込み層およびバッチ正規化層のためのバイアスの大きさを変更するために使用された係数と同じ係数2
24によって縮小されてよい。
【0120】
[0179]
図51は、モデルをNN2.0モデルに変換するためにYOLOのどの動作/層を対数量子化するかの例を示している。backbone5101への入力は、シフトの目的で、2
nの係数によって大きさを変更される。例えば、係数は2
24であってよいが、本開示は、係数が異なる値になり得るように、2
24の例に限定されるよう意図されていない。backbone5101、neck5102、および/またはhead5103は、データを処理する複数の層(例えば、ニューラルネットワーク層)を含んでよい。例えば、層の一部は、畳み込み層、バッチ正規化層、またはLeakyReLU層を含んでよい。畳み込み層、バッチ正規化層、およびLeakyReLU層などの、乗算および/または加算を利用する動作/層は、モデルをNN2.0モデルにするために対数量子化される。backbone、neck、および/またはhead内の他の層は、そのような他の層が乗算演算および/または加算演算を利用しないため、対数量子化されない。例えば、他の層の一部は、連結層、アップサンプル層、またはゼロパディング層を含んでよく、これらの層は、それらの各動作を実行するための乗算を含んでおらず、そのため連結層、アップサンプル層、またはゼロパディング層は、対数量子化されない。しかし、場合によっては、乗算演算および/または加算演算を使用しない他の層が対数量子化されてよい。畳み込み層、緻密層、RNN、バッチ正規化、またはLeakyReLUなどの、ただしこれらに限定されない、乗算演算および/または加算演算を利用する層は、通常、モデルをNN2.0モデルにするために対数量子化される。headの出力は、通常のモデルと同じ出力値を生成するために、入力の大きさを変更するために使用された係数と同じ係数によって縮小されてよい。例えば、headの出力は2
24の係数によって縮小されてよい。
【0121】
[0180]
図52Aおよび
図52Bは、例示的な実装に従って、MTCNNなどの顔検出モデルを対数量子化されたNN2.0のモデルに変換する方法の例を示している。具体的には、
図52Aは、MTCNNモデルの標準的なアーキテクチャを示しており、一方、
図52Bは、モデルをNN2.0モデルに変換するために対数量子化されるMTCNNモデルの層を示している。
図52Aは、PNet、RNet、およびONetの例示的なアーキテクチャを含んでおり、対数量子化されることができる各アーキテクチャ内の層を識別する。例えば、
図52AのPNetの畳み込み層およびPReLU層が対数量子化されることができ、一方、
図52AのRNetおよびONetの畳み込み層、PReLU層、および緻密層が対数量子化されることができる。
図52Bを参照すると、NN2.0に従うPNet、RNet、およびONetのアーキテクチャは、入力および出力のために大きさを変更する層に加えて、
図52AのモデルをNN2.0モデルに変換するために対数量子化された層を含んでいる。
【0122】
[0181]
図53Aおよび
図53Bは、例示的な実装に従って、VGGFaceなどの顔認識モデルを対数量子化されたNN2.0モデルに変換する方法の例を示している。具体的には、
図53Aは、標準的なアーキテクチャのVGGFaceモデルを示しており、一方、
図53Bは、モデルをNN2.0モデルに変換するために対数量子化されるVGGFaceモデルの層を示している。
図53Aは、ResNet50およびResBlockの例示的なアーキテクチャを含んでおり、対数量子化されることができる各アーキテクチャ内の層を識別する。例えば、
図53Aの畳み込み層、バッチ正規化層、ならびにResBlock層およびResBlock畳み込み層を含んでいるスタック層が、対数量子化されることができる。
図53Bを参照すると、NN2.0に従うResNet50およびResBlockのアーキテクチャは、入力および出力のために大きさを変更する層に加えて、
図53AのモデルをNN2.0モデルに変換するために対数量子化された層を含んでいる。
【0123】
[0182]
図54Aおよび
図54Bは、例示的な実装に従って、オートエンコーダモデルを対数量子化されたNN2.0モデルに変える方法の例を示している。具体的には、
図54Aは、オートエンコーダモデルの標準的なアーキテクチャを示しており、一方、
図54Bは、モデルをNN2.0モデルに変換するために対数量子化されるオートエンコーダモデルの層を示している。
図54Aは、オートエンコーダ層の構造の例を含んでおり、対数量子化されることができる層を識別する。例えば、
図54Aのエンコーダおよびデコーダ内の緻密層が対数量子化されることができる。
図54Bを参照すると、NN2.0に従うオートエンコーダ層は、入力および出力のために大きさを変更する層に加えて、
図54AのモデルをNN2.0モデルに変換するために対数量子化された層を含んでいる。
【0124】
[0183]
図55Aおよび
図55Bは、例示的な実装に従って、緻密ニューラルネットワークモデルを対数量子化されたNN2.0モデルに変える方法の例を示している。具体的には、
図55Aは、緻密ニューラルネットワークモデルの標準的なアーキテクチャを示しており、一方、
図55Bは、モデルをNN2.0モデルに変換するために対数量子化される緻密ニューラルネットワークモデルの層を示している。
図55Aは、緻密ニューラルネットワークモデル層の構造の例を含んでおり、対数量子化されることができる層を識別する。例えば、
図55Aのモデルのアーキテクチャ内の緻密層が対数量子化されることができる。
図55Bを参照すると、NN2.0に従うモデル層は、入力および出力のために大きさを変更する層に加えて、
図55AのモデルをNN2.0モデルに変換するために対数量子化された層を含んでいる。
【0125】
[0184]
図56は、例示的な実装に従って、ハードウェア内で発生する標準的な2進乗算の例を示している。ハードウェア内で発生する例示的な乗算は、2進数を使用してよい。例えば、
図56に示されているように、データ5601は6の値を有してよく、パラメータ5602は3の値を有してよい。16ビットのパラメータデータが入力され、乗算器5603を使用して16x16乗算器によって乗算され、乗算器5603が32ビットの数値5604を生成するように、データ5601およびパラメータ5602は16ビットのデータである。望ましい場合に16ビットの数値5606を生成するために、切り詰め演算5605を使用して32ビットの数値が切り詰められてよい。16ビットの数値5606は、18の値を有する。
【0126】
[0185]
図57および
図58は、例示的な実装に従って、NN2.0のシフト演算の例を示している。具体的には、
図57は、NN2.0のシフト演算の例を示しており、
図58は、NN2.0のシフト演算の例示的なフローを示している。
【0127】
[0186]5801で、フローが、データスケーリング係数によってデータの大きさを変更する。
図57の例では、入力データ5701が6の値を有してよく、入力データが、スケーリング係数2
10によって大きさを変更される。データスケーリング係数は、大きさを変更されたデータを生成してよい。他のデータスケーリング係数が使用されてよく、本開示は本明細書で提供された例に限定されるよう意図されていない。入力データ5701は、入力データ5701にデータスケーリング係数2
10を掛けることによって大きさを変更され、その結果、6,144の値を有する大きさを変更されたデータを得る。大きさを変更されたデータの16ビットの2進表現は、0001100000000000である。
【0128】
[0187]5802で、フローが、対数量子化されたパラメータから導出されたシフト命令に基づいて、大きさを変更されたデータをシフトする。
図57の例では、パラメータ5702が3の値を有し、大きさを変更されたデータをシフトするシフト命令を生成するために、パラメータ5702が対数量子化される。パラメータ5702は対数量子化され、値+3を対数量子化する方法は、log-quantize(+3)=>+2
round(log
2
(3))=+2
round(+1.5649)+2
(+2)=+4のようになる。
【0129】
[0188]5802でのシフトは、シフタ5709に提供されたシフト命令に従って実施される。シフト命令は、符号ビット5704、シフト方向5705、およびシフト量5706のうちの1つまたは複数を含むことができる。対数量子化されたパラメータから導出されたシフト命令5703は、6ビットのデータとして提示され、符号ビット5704は、シフト命令5703の最上位ビットであり、シフト方向5705は、2番目の最上位ビットであり、シフト量5706は、シフト命令5703の残りの4ビットである。0または1の値を有する符号ビット5704は、対数量子化されたパラメータの符号に基づく。例えば、0の値を有する符号ビット5704は、対数量子化されたパラメータの正符号を示す。1の値を有する符号ビット5704は、対数量子化されたパラメータの負符号を示す。
図57の例では、符号ビット5704が0の値を有するように、パラメータ+3が正符号を有している。0または1の値を有するシフト方向5705は、対数量子化されたパラメータの指数の符号に基づく。例えば、0の値を有するシフト方向5705は、左シフト方向に対応する正符号を有する指数に基づく。1の値を有するシフト方向5705は、右シフト方向に対応する負符号を有する指数に基づく。
図57の例では、シフトビット5705が、左シフト方向に対応する0の値を有するように、対数量子化されたパラメータの指数(+2)が正符号を有している。シフト量5706は、対数量子化されたパラメータの指数の大きさに基づく。
図57の例では、シフト量5706が2になるように、指数が2の大きさを有している。2のシフト量5706が0010に対応するように、シフト量5706が、シフト命令5703の最後の4ビットから成る。シフト方向5705およびシフト量5706が決定された状態で、シフトが大きさを変更されたデータに適用されてよい。大きさを変更されたデータ、シフト方向、およびシフト量がシフタ5709に供給される。大きさを変更されたデータが16ビットのデータとして表されるため、シフタ5709は、この例に示されているように16ビットのシフタであってよい。シフタ5709は、シフト方向5705(左方向)およびシフト量5706(2)に基づいてシフト演算を適用し、24,576に対応する0110000000000000のシフトされた値5710を生成する。乗算を利用する、示されたシフト演算と数学的に同等の動作は、次の通りである。大きさを変更されたデータが6,144の値を有し、パラメータ+3の対数量子化された値が+4であり、6,144x4の積=24,576である。NN2.0のシフト演算は、乗算演算を使用せずに、シフトによって同じ結果を取得する。
【0130】
[0189]5803で、フローが、データの符号ビットおよびシフト命令からの符号ビットのXOR演算を実行し、シフトされた値の符号ビットを決定する。
図57の例では、データの符号ビット5707が0の値を有しており、シフト命令からの符号ビット5704が0の値を有している。シフトされた値5710の符号ビット5711が0の値を有するように、両方の値がXOR5708に入力され、0 XOR 0の結果が0になる。
【0131】
[0190]5804で、フローが、シフトされた値の符号ビットを設定する。シフトされた値5710の符号ビット5711は、XOR5708の結果に基づく。
図57の例では、符号ビット5711が0に設定されるように、符号ビット5704と符号ビット5707のXORの結果が0になる。
【0132】
[0191]
図59は、例示的な実装に従って、NN2.0のシフト演算の例を示している。
図59のNN2.0のシフト演算のフローは、
図58のフローと一致している。
図59の例は、
図57の例におけるパラメータの値とは異なるパラメータ値を含んでいる。例えば、
図59のパラメータ5902は-0.122の値を有しており、この値が、log-quantize(-0.122)=-2
round(log
2
(0.122))=-2
round(-3.035)=-2
(-3)=-0.125のように対数量子化される。その結果、対数量子化されたパラメータの符号に起因して、符号ビット5904が1の値を有し、対数量子化されたパラメータの指数の符号に起因して、シフト方向5905が1の値を有する。3の大きさを有している指数に起因して、シフト量は3である。シフト量5906は、対数量子化されたパラメータ5903の最後の4ビット内で、2進数の形態である。シフト量およびシフト方向を大きさを変更されたデータに適用し、-768のシフトされた値5910を生成するために、シフト方向5905、シフト量5906、および大きさを変更されたデータ5901がシフタ5909に入力される。符号ビット5911の1の値をもたらす符号ビット5904および符号ビット5907のXORに起因して、シフトされた値5910が負符号を有する。シフトされた値5910が-768の値を有するように、1の値を有する符号ビット5911が、負符号を有するシフトされた値5910をもたらす。大きさを変更されたデータは6x2
10=6,144の値を有し、パラメータの対数量子化された値は-2
(-3)=-0.125の値を有する。大きさを変更されたデータおよび対数量子化されたパラメータの積は、6,144x-0.125=-768である。シフトされた値5910は、乗算を使用することによってではなく、シフタを使用して取得されたー768の値を有する。NN2.0のシフト演算は、乗算演算を使用せずに、シフトによって同じ結果を取得する。
【0133】
[0192]
図60および
図61は、例示的な実装に従って、2の補数データを使用するNN2.0のシフト演算の例を示している。具体的には、
図60は、2の補数データを使用するNN2.0のシフト演算の例を示しており、
図61は、2の補数データを使用するNN2.0のシフト演算の例示的なフローを示している。
【0134】
[0193]6101で、フローが、データスケーリング係数によってデータの大きさを変更する。
図60の例では、入力データ6001が6の値を有してよく、入力データが、スケーリング係数2
10によって大きさを変更される。データスケーリング係数は、16ビットのデータとして表されるデータを生成してよい。他のデータスケーリング係数が使用されてよく、本開示は本明細書で提供された例に限定されるよう意図されていない。入力データ6001は、入力データ6001にデータスケーリング係数2
10を掛けることによって大きさを変更され、その結果、6,144の値を有する大きさを変更されたデータを得る。2進数として表された16ビットの大きさを変更されたデータは、0001100000000000である。
【0135】
[0194]6102で、フローが、シフト命令に基づいて、大きさを変更されたデータの算術シフトを実行する。
図60の例では、パラメータ6002が3の値を有し、大きさを変更されたデータをシフトするシフト命令を生成するために、パラメータ6002が対数量子化される。パラメータ6002は対数量子化され、+3の値を対数量子化する方法は、log-quantize(+3)=>+2
round(log
2
(3))=+2
(+2)=+4のようになる。対数量子化されたパラメータから導出されたシフト命令6003は、6ビットのデータとして提示され、符号ビット6004は、シフト命令6003の最上位ビットであり、シフト方向6005は、2番目の最上位ビットであり、シフト量6006は、対数量子化されたパラメータの残りの4ビットである。0または1の値を有する符号ビット6004は、対数量子化されたパラメータの符号に基づく。例えば、0の値を有する符号ビット6004は、対数量子化されたパラメータの正符号を示す。1の値を有する符号ビット6004は、対数量子化されたパラメータの負符号を示す。
図60の例では、符号ビット6004が0の値を有するように、パラメータ+3が正符号を有している。0または1の値を有するシフト方向6005は、対数量子化されたパラメータの指数の符号に基づく。例えば、0の値を有するシフト方向6005は、左シフト方向に対応する正符号を有する指数に基づく。1の値を有するシフト方向6005は、右シフト方向に対応する負符号を有する指数に基づく。
図60の例では、シフトビット6005が、左シフト方向に対応する0の値を有するように、対数量子化されたパラメータの指数(2)が正符号を有している。シフト量6006は、対数量子化されたパラメータの指数の大きさに基づく。
図60の例では、シフト量6006が2になるように、指数が2の大きさを有している。2のシフト量6006が0010に対応するように、シフト量6006が、シフト命令データ6003の最後の4ビットから成る。シフト方向6005およびシフト量6006が決定された状態で、シフトが大きさを変更されたデータに適用されてよい。大きさを変更されたデータ、シフト方向、およびシフト量が算術シフタ6009に供給される。大きさを変更されたデータが16ビットのデータとして表されるため、算術シフタ6009は、この例に示されているように16ビットの算術シフタであってよい。算術シフタ6009は、シフト方向6005(左方向)およびシフト量6006(2)に基づいてシフト演算を適用し、0110000000000000のシフトされた値6010を生成する。
【0136】
[0195]6103で、フローが、シフト命令からの符号ビットとのシフトされたデータのXOR演算を実行する。
図60の例では、符号ビット6004は、シフトされた値6010(算術シフタ6009の出力)と共にXOR6011に供給される0の値を有する。符号ビット6004とシフトされた値6010のXOR演算の結果は、シフトされた値6012をもたらす。
図60の例では、符号ビット6004が0の値を有するため、符号ビット6004とシフトされた値6010のXOR演算の結果として、シフトされた値6012がシフトされた値6010から変更されない。
【0137】
[0196]6104で、フローが、シフト命令からの符号ビットが1である場合、XORの結果の値を1だけインクリメントする。
図60の例では、シフトされた値6012がインクリメンタ(例えば、+1または0)に入力され、インクリメンタには符号ビット6004が供給される。フローがXORの結果のシフトされた値6012をインクリメントせず、シフトされた値6013をもたらすように、シフト命令の符号ビット6004は0である。
【0138】
[0197]
図62は、例示的な実装に従って、2の補数データを使用するNN2.0のシフト演算の例を示している。
図62のNN2.0のシフト演算のフローは、
図61のフローと一致している。
図62の例は、
図60の例におけるシフト命令とは異なるシフト命令を含んでいる。例えば、
図62のパラメータ6202が-0.122の値を有し、大きさを変更されたデータをシフトするシフト命令を生成するために、この値が対数量子化される。パラメータ6202は対数量子化され、-0.122の値を対数量子化する方法は、log-quantize(-0.122)=>-2
round(log
2
(0.122))=2
round(-3.035)=-2
(-3)=0.125のようになる。対数量子化されたパラメータ6203から導出されたシフト命令は、6ビットのデータとして提示され、符号ビット6204は、シフト命令6203の最上位ビットであり、シフト方向6205は、2番目の最上位ビットであり、シフト量6206は、対数量子化されたパラメータ6203の残りの4ビットである。対数量子化されたパラメータの負符号に起因して、符号ビット6204が1の値を有し、対数量子化されたパラメータの指数の符号に起因して、シフト方向6205が1の値を有する。3の大きさを有している指数に起因して、シフト量は3である。シフト量6206は、対数量子化されたパラメータの指数の大きさに基づく。
図62の例では、シフト量6206が3になるように、指数が3の大きさを有している。3のシフト量6206が0011に対応するように、シフト量6206が、シフト命令6203の最後の4ビット内の2進数の形態である。シフト量およびシフト方向を大きさを変更されたデータ6201に適用し、0000001100000000のシフトされた値6210を生成するために、シフト方向、シフト量、および大きさを変更されたデータが16ビットの算術シフタ6209に入力される。シフトされた値6210およびシフト命令からの符号ビット6204がXOR6211に入力される。符号ビット6204とシフトされた値6210のXOR演算の結果は、シフトされた値6212をもたらす。XORの結果の出力(例えば、シフトされた値6212)および符号ビットがインクリメンタ(例えば、+1または0)に入力される。シフト命令の符号ビットが1である場合、インクリメンタは、シフトされた値6212を1だけインクリメントしてよい。
図62の例では、シフト命令の符号ビットが1の値を有していることに起因して、シフトされた値6212が1だけインクリメントされるように、シフト命令の符号ビット6204が1である。その結果、シフトされた値6212がインクリメントされ、0000001100000000のシフトされた値6213を生成する。シフトされた値6213は、-768の値を有する。大きさを変更されたデータは6x2
10=6,144の値を有し、対数量子化されたパラメータは-2
(-3)=-0.125の値を有する。大きさを変更されたデータおよび対数量子化されたパラメータの積は、6,144x-0.125=-768である。シフトされた値6212は、乗算を使用することによってではなく、シフタを使用して取得されたー768の値を有する。NN2.0のシフト演算は、乗算演算を使用せずに、シフトによって同じ結果を取得する。
【0139】
[0198]
図63および
図64は、例示的な実装に従って、加算演算がシフト演算に置き換えられることができる、NN2.0の累算演算/加算演算の例を示している。具体的には、
図63は、NN2.0の累算演算/加算演算の例を示しており、
図64は、NN2.0の累算演算/加算演算の例示的なフローを示している。NN2.0の累算演算は、シフト演算を利用し、正数用の正の累算シフタおよび負数用の負の累算シフタという、シフタの2つの別々のセットを使用して、N個の符号付き大きさデータの累算または加算を実行してよい。
【0140】
[0199]6401で、フローが、データの大きさの部分を複数のセグメントに分割する。
図63の例では、データ6301の大きさの部分が、seg1~seg6として指定された6つの5ビットのセグメントに分割される。しかし、場合によっては、データの大きさの部分が複数のセグメントに分割されることができ、本開示は、6つのセグメントに限定されるよう意図されていない。30番目のビットは、将来使用するために予約されてよく、31番目のビットは符号ビット6304であり、一方、残りのビットが、6つの5ビットのセグメントおよび予約された30番目のビットを含む。
【0141】
[0200]6402で、フローが、各セグメントを正の累算シフタおよび負の累算シフタの両方に入力する。
図63の例では、1番目のデータ列(1番目のデータ)の1番目のセグメント(seg1)が、正の累算シフタ6302および負の累算シフタ6303に入力される。他のセグメント(seg2~seg6)は、セグメント1と同じ正の累算シフタ構造および負の累算シフタ構造の構造を有する。代替として、6つのセグメントすべてが、すべてのセグメントのシフト演算の中間結果を格納するための適切なバッファと共に、同じ正の累算シフタおよび負の累算シフタを共有するアーキテクチャが存在することができる。
【0142】
[0201]6403で、フローが、符号ビットに基づいてシフト演算を実行することを決定する。
図63の例では、シフト演算を決定するために、シフタ6302および6303によって符号ビット6304が利用される。例えば、符号ビット6304が、正数に対応する0の値を有する場合、正の累算シフト演算が実行される。符号ビット6304が、負数に対応する1の値を有する場合、負の累算シフト演算が実行される。各データ(データ#1、データ#2、...データ#N)は、対応する符号ビット6304を有する。
【0143】
[0202]6404で、フローが、セグメント値によって表されたシフト量だけデータをシフトする。演算の開始時に、シフタは、シフタへの入力として定数1を受信する。次に、シフタは、その後のすべての演算のためのシフタへの入力として、シフタの出力を受信する。
【0144】
[0203]6405で、フローが、すべてのデータが処理されるまで、各セグメントおよびデータ列について、6401~6404のプロセスを続行する。
【0145】
[0204]
図65および
図66は、例示的な実装に従って、シフト演算を使用するNN2.0の加算演算のオーバーフロー処理の例を示している。具体的には、
図65は、シフタを使用するNN2.0の加算演算のオーバーフロー処理の例を示しており、
図66は、シフタを使用するNN2.0の加算演算のオーバーフロー処理の例示的なフローを示している。
【0146】
[0205]6601で、フローが、シフタからの1番目のセグメント(seg1)のオーバーフロー信号をオーバーフローカウンタに入力する。
図65の例では、シフタ6501からのオーバーフロー信号が、オーバーフローカウンタ6502に入力されている。
【0147】
[0206]6602で、seg1のオーバーフローカウンタが最大値に達した場合、フローが、seg1のオーバーフローカウンタの出力をシフト量としてseg2のシフタに入力し、seg1のオーバーフローカウンタからのオーバーフローカウンタ値に基づいてseg2のデータをシフトする。
図65の例では、オーバーフローカウンタ6502からのデータがseg1のオーバーフロー6503に入力され、seg1のオーバーフロー6503が最大値に達した場合、seg1のオーバーフロー6503の出力が、シフタ6504によって入力として受信される。シフタ6504は、seg1のオーバーフロー6503からの入力をシフト量として使用して、seg2のデータを、seg1のオーバーフロー6503によって提供されたオーバーフローカウンタ値に対応する量だけシフトする。
【0148】
[0207]6603で、seg2のオーバーフローカウンタが最大値に達した場合、フローが、seg2のオーバーフローカウンタの出力をシフト量としてseg3のシフタに入力し、seg2のオーバーフローカウンタからのオーバーフローカウンタ値に基づいてseg3のデータをシフトする。
図65の例では、オーバーフローカウンタ6505からのデータがseg2のオーバーフロー6506に入力され、seg2のオーバーフロー6506が最大値に達した場合、seg2のオーバーフロー6506の出力が、第3のシフタ(図示されていない)によって入力として受信される。第3のシフタは、seg2のオーバーフロー6506からの入力をシフト量として使用して、seg3のデータを、seg2のオーバーフロー6506によって提供されたオーバーフローカウンタ値に対応する量だけシフトする。
【0149】
[0208]6604で、フローが、データのセグメントがすべて処理されたかどうかを判定する。処理されていない場合、データのセグメントがすべて処理されるまで、6601~6603のプロセスが繰り返す。
【0150】
[0209]
図67および
図68は、例示的な実装に従って、NN2.0のセグメント組み立て動作の例を示している。具体的には、
図67は、NN2.0のセグメント組み立て動作の例を示しており、
図68は、NN2.0のセグメント組み立て動作の例示的なフローを示している。セグメント組み立て動作は、6つのセグメントの累算演算の出力を組み立ててよい。6801で、累算のシフトが実行された後に、フローが、ワンホットの2進数である出力データをエンコードされた2進数に変換する。例えば、出力データ6701-1は、32ビットのワンホットデータを含んでよく、このワンホットデータが、5ビットのエンコードされた2進数6702-1に変換される。6つのセグメントの各々の出力されたワンホットデータが、5ビットのエンコードされた2進数に変換される。
図67の例では、1番目、2番目、5番目、および6番目のセグメントの変換が示されているが、3番目および4番目のセグメントの変換は示されていない。6802で、フローが、セグメントを30ビットのデータ6703に連結する。6つのセグメントが連結されて、30ビットのデータを形成し、30ビットのデータ内のセグメントの配置は、セグメントの番号に基づいて順序付けられる。例えば、1番目の5ビットの2進数6702-1が、0~4ビット番号の位置に配置され、それに続いて2番目の5ビットの2進数6702-2、次に3番目、その次に4番目、その次に5番目6702-5が続き、30ビットデータの最後に、6番目の5ビットの2進数6702-6で終了する。6803で、フローが、符号ビット6704および30番目のビット6705を、30ビットのデータ6703に連結する。符号ビット6704、30番目のビット6705、および30ビットのデータ6703を形成する6つのセグメントの組合せが、32ビットのデータ6706を形成する。
図67の例は、「+の累算の組み立て」のための32ビットのデータ6706の形成を示している。同様の手順が、「-の累算の組み立て」に関して発生するが、本明細書では、重複する説明を減らすために示されていない。6804で、フローがセグメントの組み立てを実行する。
図69に示されているように、「+の累算」および「-の累算」のためのセグメント組み立て手順が実行された後に、「+の累算」および「-の累算」からのデータ(6901、6902)が加算器6903に入力されて一緒に加算され、最終的なデータを形成する。
【0151】
[0210]
図70および
図71は、例示的な実装に従って、加算演算がシフト演算に置き換えられることができる、NN2.0の累算演算/加算演算の例を示している。具体的には、
図70は、NN2.0の累算演算/加算演算の例を示しており、
図71は、NN2.0の累算演算/加算演算の例示的なフローを示している。NN2.0の累算演算は、シフト演算を利用し、正および負の両方のデータについて右および左の両方にシフトすることができるシフタの1つのセットを使用して、N個の符号付き大きさデータの累算または加算を実行してよい。
【0152】
[0211]7101で、フローが、データの大きさの部分を複数のセグメントに分割する。
図70の例では、データ7001の大きさの部分が、seg1~seg6として指定された6つの5ビットのセグメントに分割される。しかし、場合によっては、データの大きさの部分が複数のセグメントに分割されることができ、本開示は、6つのセグメントに限定されるよう意図されていない。30番目のビットは、将来使用するために予約されてよく、31番目のビットは符号ビット7003であり、一方、残りのビットが、6つの5ビットのセグメントおよび予約された30番目のビットを含む。
【0153】
[0212]7102で、フローが、各セグメントをシフタに入力する。
図70の例では、データ7001のセグメントがシフタ7002に入力されている。他のセグメント(seg2~seg6)は、セグメント1と同じシフタ構造の構造を有する。代替として、6つのセグメントすべてが、すべてのセグメントのシフト演算の中間結果を格納するための適切なバッファと共に、同じシフタを共有するアーキテクチャが存在することができる。
【0154】
[0213]7103で、フローが、符号ビットに基づいてシフト演算を実行することを決定する。
図70の例では、シフト方向を決定するために、シフタ7002によって符号ビット7003が利用される。例えば、符号ビット7003が0の値を有している場合、データが左にシフトされる。符号ビット7003が1の値を有している場合、データが右にシフトされる。
【0155】
[0214]7104で、フローが、セグメント値によって表されたシフト量だけデータをシフトする。演算の開始時に、シフタは、シフタへの入力として定数1を受信する。次に、シフタは、その後のすべての演算のためのシフタへの入力として、シフタの出力を受信する。
【0156】
[0215]7105で、すべての入力データが処理されるまで、フローが7101~7104のプロセスを続行する。
【0157】
[0216]
図72は、例示的な実装に従って、AI処理要素(AIPE)の一般的なアーキテクチャの例を示している。AIPEは、畳み込み、緻密層、ReLU、リーキーReLU、最大プーリング、加算、および/または乗算などの、ただしこれらに限定されない、複数のニューラルネットワーク動作を処理するように構成される。AIPEは、データ7202およびパラメータ7203を入力として受信するシフタ回路7201などの、さまざまなコンポーネントを備えてよい。AIPEは、シフタ回路7201の出力を入力として受信する加算器回路またはシフタ回路7204を備えてもよい。AIPEは、加算器回路またはシフタ回路7204の出力を入力として受信するフリップフロップ7205などのレジスタ回路を備えてもよい。データ7202およびパラメータ7203と共に、フリップフロップ7205などのレジスタ回路の出力がAIPEにフィードバックされ、多重化される。
【0158】
[0217]
図72に示されているように、AIPEは、ニューラルネットワーク動作の入力データ(M1、M2)から導出されたシフト可能な入力7206を取り込むことと、
図72に示されているように、ニューラルネットワークの対応する対数量子化されたパラメータ7203または定数0などの定数値から導出されたシフト命令7207を取り込むことと、(例えば、
図57~63に示されたような)シフト命令7207に従ってシフト可能な入力を左方向または右方向にシフトして、ニューラルネットワークの対応する対数量子化されたパラメータとの入力データの乗算を表すシフトされた出力7208(Mout)を形成することとを実行するように構成されたシフタ回路7201を少なくとも含むことができる。そのようなシフタ回路7201は、対数シフタ回路またはバレルシフタ回路などの、ただしこれらに限定されない、従来技術において知られている任意のシフタ回路であることができる。本明細書に記載されているように、
図37および
図38に示されたフローによってシフト可能な入力7206を形成するために、入力データの大きさが変更されることができる。そのようなフローは、専用の回路によって、コンピュータデバイスによって、または任意のその他の望ましい実装によって実行されることができる。
【0159】
[0218]
図72のアーキテクチャに基づいて
図57~
図62に示された例示的な実装では、シフト命令は、シフト方向(例えば、5705、5905、6005、6205)およびシフト量(例えば、5706、5906、6006、6206)を含むことができ、シフト量が、対応する対数量子化されたパラメータ(例えば、5702、5902、6002、6202)の指数の大きさから導出され、シフト方向が、対応する対数量子化されたパラメータの指数の符号から導き出され、シフタ回路が、シフト可能な入力を、シフト方向に従って左方向または右方向にシフトし、シフト可能な入力を、例えば5710、5910、6010、および6210に示されたシフト量によって示された量だけ、シフト方向にシフトする。
【0160】
[0219]例示的な実装は、本明細書に記載されているような対数量子化されたパラメータから導出されたシフト命令を利用するが、本開示はそれに限定されず、その他の実装も可能である。例えば、必要に応じて、大きさを変更された(例えば、浮動小数点パラメータ、整数パラメータ、またはその他から大きさを変更された)パラメータをシフトするためのシフト命令が、入力としてデータから導出されてよい。そのような例示的な実装では、対数量子化されたデータ値が使用可能である場合、対数量子化されたデータ値からシフト命令が同様に導出されることができる。例えば、それによって、大きさを変更されたパラメータ値をシフトするシフト命令を生成するために、対応する対数量子化されたデータ値の指数の大きさからシフト量が導出されることができ、対応する対数量子化された値の指数の符号からシフト方向が導出されることができる。対数量子化された値から導出されたシフト命令によって値をシフトする動作が、データとパラメータの乗算と同等であることに起因して、そのような実装が可能である。
【0161】
[0220]
図72のアーキテクチャに基づく例示的な実装および
図57~
図62の例示的な実装では、AIPEは、シフト可能な入力の第1の符号ビット(5707、5907)および対応する対数量子化されたパラメータの第2の符号ビット(例えば、5704、5904)を取り込み、シフトされた出力の第3の符号ビット(例えば、5711、5911)を形成するように構成された、XOR回路(例えば、5708、5908)または任意のそれと同等のものなどの回路をさらに含むことができる。
【0162】
[0221]
図73および
図74の例において拡張されたような
図72のアーキテクチャに基づく例示的な実装、および
図57~
図64の例示的な実装では、AIPEは、シフトされた出力(例えば、6010、6210、7310)および対数量子化されたパラメータのうちの対応する1つの符号ビット(例えば、6004、6204、7306)を取り込んで1の補数データ(例えば、7405、7406)を形成するように構成されたXOR回路(例えば、6011、6211、7311)またはそれと同等のものなどの第1の回路と、対応する対数量子化されたパラメータの符号ビットによって1の補数データをインクリメントし、1の補数データを、対応する対数量子化されたパラメータとの入力データの乗算を表す2の補数データ(例えば、7405、7406)に変更するように構成されたインクリメンタ/加算器回路(7204、7302)などの第2の回路とをさらに備えることができる。
【0163】
[0222]
図72のアーキテクチャに基づき、
図73~
図82の例において拡張されたような例示的な実装では、AIPEは、ニューラルネットワーク動作の出力を取り込むように構成された、マルチプレクサ7210または任意のそれと同等のものなどの回路を備えることができ、この回路は、シフタ回路7201への信号入力(s1)に従って、ニューラルネットワーク動作の出力(例えば、M2)から、またはニューラルネットワーク動作の入力データから生成された大きさを変更された入力データ(例えば、7202、M1)から、シフト可能な入力を提供する。そのような回路(例えば、マルチプレクサ7210)は、回路への入力のうちのどの入力がシフタ回路7201に提供されるかを制御するための制御信号(s1)を取り込むことができる。
【0164】
[0223]
図72のアーキテクチャに基づき、
図73~
図82の例において拡張されたような例示的な実装では、AIPEは、信号入力(s2)に従って、ニューラルネットワークの対応する対数量子化されたパラメータ(例えば、K)または定数値(例えば、定数0)から導出されたシフト命令を提供するように構成されたマルチプレクサ7211などの回路を備えることができる。
【0165】
[0224]
図72のアーキテクチャに基づき、
図73~
図82の例において拡張されたような例示的な実装では、AIPEは、シフタ回路に結合された加算器回路7204、7302を備えることができ、加算器回路7204、7302、7608は、シフトされた出力に基づいて加算し、ニューラルネットワーク動作の出力(例えば、Out、aout)を形成するように構成される。そのような加算器回路7204、7302、7608は、望ましい実装に従って、1つまたは複数のシフタ、整数加算器回路、浮動小数点加算器回路、または任意のそれと同等の回路の形態をとることができる。
【0166】
[0225]
図72のアーキテクチャに基づき、
図73~
図82の例において拡張されたような例示的な実装では、加算器回路7204、7302、7608は、シフトされた出力を、トレーニング済みニューラルネットワークの複数のバイアスパラメータ7305のうちの対応する1つに加算して、ニューラルネットワーク動作の出力(aout)を形成するように構成される。
【0167】
[0226]
図72のアーキテクチャに基づき、
図62~
図72の例示的な実装において拡張されたような例示的な実装では、AIPEは、別のシフタ回路7204と、別のシフタ回路7204からの出力(Out)をラッチする、別のシフタ回路7204に結合された出力フリップフロップ7205および/またはマルチプレクサ7209あるいはこれらと同等のものなどのレジスタ回路とを備えることができる。例えば
図70に示されているように、別のシフタ回路7204は、シフトされた出力に関連付けられた符号ビットSおよびシフトされた出力の各セグメントを取り込み、符号ビットに基づいて別のシフタ回路入力を左または右にシフトし、別のシフタ回路から出力を形成するように構成される。
【0168】
[0227]
図72のアーキテクチャに基づき、
図62~
図72の例示的な実装において拡張されたような例示的な実装では、AIPEは、シフタ回路による別のシフタ回路入力のシフトから生じる、別のシフタ回路からのオーバーフローまたはアンダーフロー(例えば、6503、6506)を取り込むように構成されたオーバーフローカウンタ(例えば、6502、6505)などのカウンタを備えることができ、別のシフタ回路が、
図65および
図70に示されているように、各セグメントからのオーバーフローまたはアンダーフローを取り込み、オーバーフローまたはアンダーフローの量によって、その後のセグメントを左または右にシフトするように構成される。そのようなカウンタは、従来技術において知られているような任意の回路を使用して、望ましい実装に従って実装されることができる。
【0169】
[0228]
図72のアーキテクチャに基づく例示的な実装では、AIPEは、
図67および
図70の機能を提供する回路6710または任意のそれと同等のものなどの、ワンホットからバイナリへのエンコーディング回路を備えることができる。ワンホットからバイナリへのエンコーディング回路は、ラッチされた出力を取り込んでエンコードされた出力を生成し、すべてのセグメントからのエンコードされた出力およびオーバーフロー動作またはアンダーフロー動作の結果からの符号ビットを連結して、ニューラルネットワーク動作(6701~6706)の出力を形成するように構成される。
【0170】
[0229]
図72のアーキテクチャに基づく例示的な実装では、AIPEは、シフト命令に関連付けられた符号ビットが正符号を示している場合に、シフトされた出力の各セグメントを取り込み、正の累算シフタ回路入力を左にシフトするように構成された第2のシフタ回路を含んでいる正の累算シフタ回路6302であって、第2のシフタ回路が、第2のシフタ回路からのシフトされた正の累算シフタ回路入力を、第1のラッチされた出力としてラッチするように構成された第1のレジスタ回路に結合され、第1のレジスタ回路が、ニューラルネットワーク動作が完了していないことを示す信号の受信の場合に、第1のラッチされた出力を正の累算シフタ回路入力として提供するように構成される、正の累算シフタ回路6302と、シフト命令に関連付けられた符号ビットが負符号を示している場合に、シフトされた出力の各セグメントを取り込み、負の累算シフタ回路入力を左にシフトするように構成された第3のシフタ回路を含んでいる負の累算シフタ回路6303であって、第3のシフタ回路が、第3のシフタ回路からのシフトされた負の累算シフタ回路入力を、第2のラッチされた出力としてラッチするように構成された第2のレジスタ回路に結合され、第2のレジスタ回路が、ニューラルネットワーク動作が完了していないことを示す信号の受信の場合に、第2のラッチされた出力を負の累算シフタ回路入力として提供するように構成される、負の累算シフタ回路6303と、ニューラルネットワーク動作が完了していることを示す信号の受信の場合に、正の累算シフタ回路からの第1のラッチされた出力6901および負の累算シフタ回路からの第2のラッチされた出力6902に基づいて加算し、ニューラルネットワーク動作の出力を形成するように構成された加算器回路6903とを備えることができる。
【0171】
[0230]
図72のアーキテクチャに基づき、
図81の例において拡張されたような例示的な実装では、ニューラルネットワーク動作がパラメトリックReLU動作である場合、シフタ回路8107が、シフト可能な入力の符号ビットが正である場合にシフトを実行せずに、シフト可能な入力をシフトされた出力として提供するように構成される。
【0172】
[0231]
図73は、例示的な実装に従って、算術シフトアーキテクチャを含んでいるAIPEの例を示している。
図73のAIPEは、算術シフタ7301および加算器7302を利用して、畳み込み、緻密層、ReLU、パラメトリックReLU、バッチ正規化、最大プーリング、加算、および/または乗算などの、ただしこれらに限定されない、ニューラルネットワーク動作を処理する。算術シフタ7301は、データ7303、およびパラメータを対数量子化することから導出されたシフト命令7304を入力として受信する。データ7303は、2の補数に基づく32ビットのデータを含んでよく、一方、シフト命令7304は、7ビットのデータを含んでよい。算術シフタ7301は、32ビットの算術シフタを含んでよい。算術シフタ7301は、シフト命令7304に基づいてデータ7303をシフトする。算術シフタ7301の出力は、出力を2の補数データにする回路を通り、その後、バイアス7305に加算される。バイアス7305は、32ビットのバイアスを含んでよい。加算器7302は、マルチプレクサ(mux)M3の出力、およびXOR7311の出力、ならびにシフト命令7304の符号ビット7306からの1つのキャリーイン入力(Ci)という3つの入力を受信する。加算器は、2つの入力およびキャリーイン入力を一緒に加算して、mux M4に入る出力aoutを形成する。mux M4の出力が、フリップフロップ7307によってラッチされる。次に、フリップフロップ7307の出力が、別のニューラルネットワーク動作のためにmux M1にフィードバックされることができ、フリップフロップ7307からのffoutの符号ビットが、mux M2を制御してシフト命令7304または定数1から選択するために、OR回路7312に使用されることができる。
【0173】
[0232]
図74は、例示的な実装に従って、シフタおよび加算器を使用するAIPEの動作の例を示している。AIPEは、シフト演算を使用して乗算を置き換える。例えば、データ7401が12の値を有し、対数量子化されたパラメータから導出されたシフト命令7402が+2の値を有する場合、このデータおよびシフト命令の乗算は12x(+2)であり、この乗算は12x(+2
+1)と記述されてよく、(+2
+1)が対数量子化されたパラメータである。このパラメータの指数の符号が正(+)であり、これはシフト方向が左であることを意味し、指数の大きさが1であり、これはシフト量が1であることを意味する。そのため、データ12は、左に1だけシフトされる。データ12を左に1だけシフトすると、
図74の7403に示されているように、24が得られる。別の例では、データ7401が12の値を有し、シフト命令7402が+0.5の値を有する。このデータおよびシフト命令の乗算は12x(+0.5)であり、この乗算は12x(+2
-1)と記述されてよく、(+2
-1)が対数量子化されたパラメータである。このパラメータの指数の符号が負(-)であり、これはシフト方向が右であることを意味し、指数の大きさが1であり、これはシフト量が1であることを意味する。そのため、データ12は、右に1だけシフトされる。データ12を右に1だけシフトすると、
図74の7404に示されているように、6が得られる。別の例では、データ7401が12の値を有し、シフト命令7402が-2の値を有し、このデータおよびシフト命令の乗算は12x(-2)であり、この乗算は12x(-2
+1)と記述されてよく、(-2
+1)が対数量子化されたパラメータである。このパラメータの指数の符号が正(+)であり、これはシフト方向が左であることを意味し、指数の大きさが1であり、これはシフト量が1であることを意味する。そのため、データ12は、左に1だけシフトされる。しかし、このパラメータの基数が負の値を有するため、シフトされた値には2の補数の手順が発生し、
図74の7405に示されているように、-24が得られる。別の例では、データ7401が12の値を有し、シフト命令7402が-0.5の値を有する。このデータおよびシフト命令の乗算は12x(-0.5)であり、この乗算は12x(-0.5
-1)と記述されてよく、(-0.5
-1)が対数量子化されたパラメータである。このパラメータの指数の符号が負(-)であり、これはシフト方向が右であることを意味し、指数の大きさが1であり、これはシフト量が1であることを意味する。そのため、データ12は、右に1だけシフトされる。しかし、このパラメータの基数が負の値を有するため、シフトされた値には2の補数の手順が発生し、
図74の7406に示されているように、-6が得られる。
【0174】
[0233]
図75は、例示的な実装に従って、シフタおよび加算器を使用するAIPEの動作の例を示している。AIPEは、シフト演算を使用して乗算を置き換える。例えば、データ7501が-12の値を有し、対数量子化されたパラメータから導出されたシフト命令7502が+2の値を有する場合、このデータおよびシフト命令の乗算は-12x(+2)であり、この乗算は-12x(+2
+1)と記述されてよく、(+2
+1)が対数量子化されたパラメータである。このパラメータの指数の符号が正(+)であり、これはシフト方向が左であることを意味し、指数の大きさが1であり、これはシフト量が1であることを意味する。そのため、データ-12は、左に1だけシフトされる。データ-12を左に1だけシフトすると、
図75の7503に示されているように、-24が得られる。別の例では、データ7501が-12の値を有し、シフト命令7502が+0.5の値を有する。このデータおよびシフト命令の乗算は-12x(+0.5)であり、この乗算は-12x(+2
-1)と記述されてよく、(+2
-1)が対数量子化されたパラメータである。このパラメータの指数の符号が負(-)であり、これはシフト方向が右であることを意味し、指数の大きさが1であり、これはシフト量が1であることを意味する。そのため、データ-12は、右に1だけシフトされる。データ-12を右に1だけシフトすると、
図75の7504に示されているように、-6が得られる。別の例では、データ7501が-12の値を有し、シフト命令7502が-2の値を有し、このデータおよびシフト命令の乗算は-12x(-2)であり、この乗算は-12x(-2
+1)と記述されてよく、(-2
+1)が対数量子化されたパラメータである。このパラメータの指数の符号が正(+)であり、これはシフト方向が左であることを意味し、指数の大きさが1であり、これはシフト量が1であることを意味する。そのため、データ-12は、左に1だけシフトされる。しかし、このパラメータの基数が負の値を有するため、シフトされた値には2の補数の手順が発生し、
図75の7505に示されているように、+24が得られる。別の例では、データ7501が-12の値を有し、シフト命令7502が-0.5の値を有する。このデータおよびシフト命令の乗算は-12x(-0.5)であり、この乗算は-12x(-0.5
-1)と記述されてよく、(-0.5
-1)が対数量子化されたパラメータである。このパラメータの指数の符号が負(-)であり、これはシフト方向が右であることを意味し、指数の大きさが1であり、これはシフト量が1であることを意味する。そのため、データ-12は、右に1だけシフトされる。しかし、このパラメータの基数が負の値を有するため、シフトされた値には2の補数の手順が発生し、
図75の7506に示されているように、+6が得られる。
【0175】
[0234]
図76、
図77、および
図78は、例示的な実装に従って、畳み込み演算を実行するAIPEの例を示している。具体的には、
図76は、畳み込み演算を実行するように構成されたAIPEアーキテクチャの例を示しており、
図77は、畳み込み演算の初期サイクルの例示的なフローを示しており、
図78は、畳み込み演算のその後のサイクルの例示的なフローを示している。AIPEは、算術シフタを使用して畳み込み演算を実行してよい。
【0176】
[0235]7701で、畳み込み演算の初期サイクルの間に、フローが、データ7601、および対応するパラメータを対数量子化することから導出されたシフト命令7602を読み込む。データ7601は、例として、複数のデータ値(X1,X2,...X9)を含んでよい。シフト命令SH7602は、各パラメータ値に対応するシフト命令(SH1,SH2,...SH9)を形成するように、パラメータ値(K1,K2,...K9)から導出されてよい。
図76の例では、データ7601およびシフト命令7602が9の値を有しているが、本開示は本明細書で開示された例に限定されるよう意図されていない。データ7601およびシフト命令7602は、1つまたは複数の値を有してよい。畳み込み演算の初期サイクルでは、フローが、X1をデータ7601に読み込み、SH1をシフト命令7602に読み込む。
【0177】
[0236]7702で、フローが、データmux M1の制御ビットおよびパラメータmux M2の制御ビットを設定する。データ7601の制御ビット7603は、0に設定されてよい。パラメータの制御ビット7604は、1に設定されてよい。
【0178】
[0237]7703で、フローが、シフト命令によってデータをシフトする。データ7601、および対数量子化されたパラメータから導出されたシフト命令7602が算術シフタ7605に供給され、算術シフタ7605が、シフト命令7602に基づくシフト量だけデータ7601をシフトする。次に、算術シフタ7605の出力が、2の補数データに変換される。算術シフタ7605の出力が、加算器7608に供給される。この時点で、算術シフタ7605の出力は、畳み込みプロセスの最初のサイクルの値(X1*K1)を含んでいる。しかし、畳み込みプロセスの最初のサイクルの値は、乗算演算を使用することによってではなく、算術シフタ7605を使用して取得される。畳み込みプロセスは、各データおよびパラメータ(X1*K1+X2*K2+...+X9*K9)の積の合計である。
【0179】
[0238]7704で、フローが、バイアス値を有するバイアスを読み込み、バイアスmux M2の制御ビットを設定する。バイアス値を有するバイアス7606が読み込まれ、バイアス制御ビット7607が1に設定される。バイアス値を有する読み込まれたバイアス7606が、加算器7608に供給される。
【0180】
[0239]7705で、フローが、加算器によって、シフトされたデータおよびバイアスを処理する。加算器7608によって、算術シフタ7605の出力またはシフトされたデータがバイアス7606に加算される。畳み込みプロセスの最初のサイクルでは、バイアスが加算される。
【0181】
[0240]7706で、フローが、加算器の出力を捕捉する。加算器7608の出力が、フリップフロップ7610に送信されて捕捉される。
【0182】
[0241]7801で、畳み込み演算のその後のサイクルの間に、フローが、データ、およびパラメータを対数量子化することから導出されたシフト命令を読み込む。例えば、初期サイクルの後に、フローが、2番目のサイクルの間に、X2を含むデータ7601およびSH2を含むシフト命令7602を読み込む。その後のサイクルでは、その後のサイクルの間に、前のサイクルの出力がバイアスmux M3にフィードバックされる。例えば、2番目のサイクルでは、最初のサイクルの加算器の捕捉された出力が、加算器7608への入力のために、フリップフロップ7610によってバイアスmux M3に送信される。
【0183】
[0242]7802で、フローが、データmuxの制御ビットおよびパラメータmuxの制御ビットを設定する。データ7601の制御ビット7603は、0に設定されてよい。パラメータの制御ビット7604は、1に設定されてもよい。
【0184】
[0243]7803で、フローが、シフト命令によってデータをシフトする。データ7601、およびその後のサイクルの対数量子化されたパラメータから導出されたシフト命令7602が算術シフタ7605に供給され、算術シフタ7605が、シフト命令7602に基づくシフト量だけデータ7601をシフトする。次に、算術シフタ7605の出力が、2の補数に変換される。算術シフタ7605の出力が、加算器7608に供給される。この時点で、算術シフタ7605の出力は、畳み込みプロセスの2番目のサイクルの値(X2*K2)を含んでいる。しかし、畳み込みプロセスの2番目のサイクルおよびその後のサイクルの値は、乗算演算を使用することによってではなく、算術シフタ7605を使用して取得される。
【0185】
[0244]7804で、フローが、バイアスmuxの制御ビットを設定する。2番目のサイクルでは(およびその後のサイクルでは)、バイアスmux M3がフィードバックされた前の演算の出力を選択するように、バイアス制御ビット7607が0に設定される。
【0186】
[0245]7805で、フローが、加算器によって、シフトされたデータおよびバイアスmuxの出力を処理する。加算器7608によって、算術シフタ7605の出力またはシフトされたデータがバイアスmuxの出力に加算される。しかし、畳み込みプロセスの2番目およびその後のサイクルでは、0に設定されているバイアス制御ビット7609が、フリップフロップ7610からのフィードバック(前のサイクルの加算器の出力)がマルチプレクサM4を通過することを許可する。そのため、2番目のサイクルのこの時点で、畳み込みプロセスの最初のサイクルおよび2番目のサイクルのデータおよびシフト命令の積の合計値(b+X1*SH1+X2*SH2)を含むように、最初のサイクルの加算器の出力が、2番目のサイクルの算術シフタ7605の出力に加算される。
【0187】
[0246]7806で、フローが、加算器の出力を捕捉する。加算器7608の出力が、フリップフロップ7610に送信されて捕捉される。
【0188】
[0247]7807で、フローが、データおよびシフト命令のすべてが処理されるまで、各データおよびシフト命令について、7801~7806のプロセスを続行する。
【0189】
[0248]
図79および
図80は、例示的な実装に従って、バッチ正規化動作を実行するAIPEの例を示している。具体的には、
図79が、バッチ正規化動作を実行するように構成されたAIPEアーキテクチャの例を示しており、
図80が、バッチ正規化動作を実行するAIPEの例示的なフローを示している。AIPEは、算術シフタを使用してバッチ正規化動作を実行してよい。
図79の例では、データ=X、パラメータ=γ、βであり、バッチ正規化が次式に対応してよい。
【0190】
【0191】
【0192】
[0251]
【数12】
ここで、
【数13】
および
【数14】
である。
【0193】
[0252]8001で、フローが、データおよび対数量子化されたパラメータを読み込む。データ7901、および対数量子化されたパラメータから導出されたシフト命令7902が読み込まれ、一方、入力データ7901と共に、前のニューラルネットワーク動作の出力も使用可能であり、多重化される。フローは、バイアスを読み込んでもよい。
図79の例では、
【数15】
が対数量子化され、シフト命令7902のSHに読み込まれてよく、
【数16】
がバイアス7904のD3に読み込まれてよい。データおよび対数量子化されたパラメータが、算術加算器7907に供給される。
【0194】
[0253]8002で、フローが、データmuxの制御ビットおよびパラメータmuxの制御ビットを設定する。データmux7901の制御ビット7905は、読み込まれたデータ7901が使用される場合、0に設定されてよく、前のニューラルネット動作の出力が使用される場合、1に設定されてよい。パラメータの制御ビット7906は、1に設定されてもよい。
【0195】
[0254]8003で、フローが、シフト命令によってデータをシフトする。フリップフロップ7903からのフィードバックを伴う多重化されたデータ7901および対数量子化されたパラメータから導出されたシフト命令7902が、算術シフタ7907に供給される。算術シフタ7907は、対数量子化されたパラメータに基づくシフト命令によってデータをシフトする。次に、算術シフタ7907の出力が、2の補数に変換される。算術シフタ7907の出力が、加算器7908に供給される。
【0196】
[0255]8004で、フローが、バイアスmuxの制御ビットを設定する。バイアス制御ビット7909は、1に設定されてよい。バイアス符号ビット7909を1に設定することによって、D3で読み込まれたバイアス値が加算器7908に提供されることを許可する。
【0197】
[0256]8005で、フローが、加算器によって、シフトされたデータおよびバイアスを処理する。バッチ正規化動作を完了するために、加算器7908によって、算術シフタ7907の出力またはシフトされたデータがバイアス7904に加算される。加算器7908の出力が、フリップフロップ7903に送信される。
【0198】
[0257]8006で、フローが出力制御ビットを設定する。出力制御ビット7910は、1に設定されてよい。1に設定されている出力制御ビット7910は、フリップフロップに送信される加算器7908の出力が捕捉されることを許可する。
【0199】
[0258]8007で、フローが、加算器の出力を捕捉する。加算器7908の出力は、1に設定されている出力制御ビット7910に一部において基づいて、フリップフロップ7903によって捕捉される。
【0200】
[0259]
図81および
図82は、例示的な実装に従って、パラメトリックReLU動作を実行するAIPEの例を示している。具体的には、
図81が、パラメトリックReLU動作を実行するように構成されたAIPEアーキテクチャの例を示しており、
図82が、パラメトリックReLU動作を実行するAIPEの例示的なフローを示している。AIPEは、算術シフタを使用してパラメトリックReLU動作を実行してよい。
図81の例では、データ=X、対数量子化されたパラメータ=aである。パラメトリックReLUの関数は、X≧0の場合、Y=Xであり、またはX<0の場合、Y=a*Xである。
【0201】
[0260]8201で、フローが、データおよび対数量子化されたパラメータを読み込み、前のニューラルネットワーク動作からのフィードバックも、D2として使用可能であり、データmux M1に入力される。データ8101、および対数量子化されたパラメータから導出されたシフト命令8102が読み込まれ、一方、データ8101と共に、フリップフロップ8103内の前のニューラルネットワーク動作の出力がAIPEにフィードバックされ、多重化される。フローは、バイアスを読み込んでもよい。この例の場合、D3で、定数0を有するバイアス8104が読み込まれてよい。
【0202】
[0261]8202で、フローが、データmuxの制御ビットおよびパラメータmuxの制御ビットを設定する。データ8101の制御ビット8105は、1に設定されてよい。シフト命令8102の制御ビット8106は、1に設定されてよい。1に設定されている制御ビット8105は、フリップフロップ8103からのフィードバックがシフタへの入力として選択されることを許可する。1に設定されている制御ビット8106は、シフト命令8102が算術シフタ8107への入力として選択されることを許可する。
【0203】
[0262]8204で、フローが、シフト命令によってデータをシフトする。算術シフタ8107は、対数量子化されたパラメータに基づくシフト命令8102によってデータ8101をシフトする。次に、算術シフタ8107の出力が、2の補数に変換される。算術シフタ8107の出力が、加算器8108に供給される。
【0204】
[0263]8205で、フローがバイアス制御ビットを設定する。バイアス制御ビット8109は、1に設定されてよい。バイアス制御ビット8109を1に設定することによって、D3で読み込まれたバイアス値が加算器8108に提供されることを許可する。
【0205】
[0264]8206で、フローが、加算器によって、シフトされたデータおよびバイアスを処理する。パラメトリックReLU動作を完了するために、加算器8108によって、算術シフタ8107の出力またはシフトされたデータがバイアス8104に加算される。加算器8108の出力が、フリップフロップ8103に送信される。
【0206】
[0265]8207で、フローが加算器mux制御ビットを設定する。加算器mux制御ビット8110は、1に設定されてよい。加算器mux制御ビット8110を1に設定することによって、加算器8108の出力が、加算器8108に関連付けられたマルチプレクサを通過し、フリップフロップ8103に供給されることを許可する。
【0207】
[0266]8208で、フローが、加算器の出力を捕捉する。フリップフロップ8103が加算器8108の出力を受信して捕捉することを許可されるように、加算器mux制御ビットが1に設定されているため、加算器8108の出力がマルチプレクサを通過する。フリップフロップ8103の符号ビット8111は、制御ビット8106との比較のために、OR回路に供給されてよい。
【0208】
[0267]
図83および
図84は、例示的な実装に従って、加算演算を実行するAIPEの例を示している。具体的には、
図83が、加算演算を実行するように構成されたAIPEアーキテクチャの例を示しており、
図84が、加算演算を実行するAIPEの例示的なフローを示している。
図83の例では、データが、X1~X9を含んでいる第1の入力およびY1~Y9を含んでいる第2の入力を含んでよい。加算演算は、加算演算=X1+Y1,X2+Y2,...X9+Y9となるように、第1および第2の入力を加算してよい。
【0209】
[0268]8401で、フローがデータおよびバイアスを読み込む。D1で、X1を含むデータ8301が読み込まれてよく、一方、D3で、Y1を含むバイアス8306が読み込まれてよい。
【0210】
[0269]8402で、フローが、データmuxおよびパラメータmuxの制御ビットを設定する。データ8301の制御ビット8303は、0に設定されてよい。パラメータ8302の制御ビット8304は、0に設定されてもよい。0に設定されている制御ビット8303は、データ8301(D1)が算術シフタ8305に供給されることを許可する。0に設定されている制御ビット8304は、定数0が算術シフタ8305に供給されることを許可する。
【0211】
[0270]8403で、フローが、シフト命令によってデータをシフトする。データ8301およびパラメータ8302は、算術シフタ8305に供給される。算術シフタ8305は、定数0であるパラメータ8302に基づくシフト量だけデータをシフトする。したがって、シフタが、シフトしないのと同じである量0だけデータをシフトしたため、シフタの出力は入力データ8301と同じである。算術シフタ8305の出力が、加算器8308に供給される。
【0212】
[0271]8404で、フローがバイアスmux制御ビットを設定する。バイアスmux制御ビット8307は、1に設定されてよい。1に設定されているバイアスmux制御ビット8307は、D3でのバイアス8306が加算器8308に提供されることを許可してよい。
【0213】
[0272]8405で、フローが、加算器によって、シフトされたデータおよびバイアスを処理する。加算演算を実行するために、加算器8308によって、算術シフタ8305の出力またはシフトされたデータがバイアス8306に加算される。加算器8308の出力が、フリップフロップ8310に送信される。
【0214】
[0273]8406で、フローが加算器mux制御ビットを設定する。加算器mux制御ビット8309は、1に設定されてよい。1に設定されている加算器mux制御ビット8309は、加算器8308の出力がフリップフロップ8310に提供されることを許可する。
【0215】
[0274]8407で、フローが、加算器の出力を捕捉する。加算器8308の出力は、1に設定されている加算器mux制御ビット8309に一部において起因して、フリップフロップ8310に提供される。8408で、フリップフロップ8310が加算器8308の出力を捕捉する。
【0216】
[0275]8409で、フローが、データのすべてが処理されるまで、残りのデータについて、8401~8408のプロセスを続行する。
【0217】
[0276]
図85は、例示的な実装に従って、ニューラルネットワークアレイの例を示している。
図85の例では、ニューラルネットワークアレイが複数のAI処理要素(AIPE)を含んでおり、本明細書で開示されたさまざまな動作を実行するために、データおよび対数量子化されたパラメータ(カーネル)がAIPEに入力される。AIPEアーキテクチャは、シフタおよび論理ゲートを利用するように構成される。本明細書で開示された例は、7ビットの対数量子化されたパラメータと共に32ビットのデータを含み、データは、1ビット~Nビットであることができ、対数量子化されたパラメータは、1ビット~Mビットのパラメータであることができ、NおよびMは任意の正の整数である。一部の例は1つの32ビットのシフタを含むが、シフタの数は、2つ以上であってよく、1つのシフタからO個のシフタまで変化してよく、Oは正の整数である。場合によっては、アーキテクチャは、データの128ビット、対数量子化されたパラメータの9ビット、および直列に(次々に)接続された7つのシフタを含む。また、本明細書に示された論理ゲートは、特定のアーキテクチャに応じて変化することができる論理ゲートの標準的なセットである。
【0218】
[0277]場合によっては、AIPEアーキテクチャは、シフタ、加算器、および/または論理ゲートを利用してよい。本明細書で開示された例は、7ビットの対数量子化されたパラメータと共に32ビットのデータを含み、データは、1ビット~Nビットであることができ、対数量子化されたパラメータは、1ビット~Mビットのパラメータであることができ、NおよびMは任意の正の整数である。一部の例は1つの32ビットのシフタおよび1つの32ビットの2入力加算器を含むが、シフタおよび加算器の数は、2つ以上であってよく、1つのシフタからO個のシフタまで、および1つの加算器からP個の加算器まで変化してよく、OおよびPは正の整数である。場合によっては、アーキテクチャは、データの128ビット、パラメータの9ビット、ならびに直列に(次々に)接続された2つのシフタおよび直列に(次々に)接続された2つの加算器を含む。
【0219】
[0278]
図86A、
図86B、
図86C、および
図86Dは、例示的な実装に従って、特定の各ニューラルネットワーク動作に専用のAIPE構造の例を示している。具体的には、
図86Aは、畳み込み演算を実行するように構成されたAIPE構造の例を示しており、
図86Bは、バッチ正規化動作を実行するように構成されたAIPE構造の例を示しており、
図86Cは、プーリング演算を実行するように構成されたAIPE構造の例を示しており、
図86Dは、パラメトリックReLU動作を実行するように構成されたAIPE構造の例を示している。AIPE構造は、4つの異なる回路を備え、各回路は、畳み込み演算、バッチ正規化動作、プーリング演算、およびパラメトリックReLU動作を実行するための専用である。場合によっては、AIPE構造は、4つより多いか、または少ない異なる回路を備えてよく、本明細書で開示された例に限定されるよう意図されていない。例えば、AIPE構造は複数の回路を備えてよく、各回路は、各ニューラルネットワーク動作を実行するための専用である。
【0220】
[0279]
図86Aの回路は、畳み込み演算を実行するためにデータを入力させ、このデータをレジスタに登録する。この回路は、カーネルも受信し、カーネルは、対数量子化されたパラメータから導出されたシフト命令であり、やはり登録される。次に、シフタによって、シフト命令に基づいて最初のシフト演算が実行され、シフタからの出力が登録される。データのシフト後に、出力が、レジスタの出力のフィードバックに加算され、レジスタは、前の演算のシフタからの出力を受信する。初期サイクルでは、フィードバックがゼロを含むが、その後のサイクルでは、前のサイクルの出力が、次のサイクルの出力に加算される。次に、この結合された出力が多重化され、シフトされた出力としてレジスタに提供される。
【0221】
[0280]
図86Bの回路は、バッチ正規化動作を実行するためにデータを入力させ、このデータをレジスタに登録する。この回路は、カーネルも受信し、カーネルは、対数量子化されたパラメータから導出されたシフト命令であり、やはり登録される。次に、シフタによって、シフト命令に基づいて最初のシフト演算が実行され、シフタからの出力が登録される。データのシフト後に、バイアスを受信する加算器によって、データが加算される。加算された、シフトされたデータおよびバイアスの出力が、出力データとしてレジスタに提供される。
【0222】
[0281]
図86Cの回路は、プーリング演算を実行するためにデータを入力させ、このデータをレジスタに登録する。データが比較器に提供され、比較器が、入力データおよび出力データを比較する。比較の結果が、出力データが入力データより大きいということを示す場合、出力データが選択される。比較の結果が、入力データが出力データより大きいということを示す場合、入力データが選択される。入力データがマルチプレクサに提供され、マルチプレクサは、比較の結果を示す比較器からの信号ビットを受信する。マルチプレクサは、第2のレジスタにデータを供給し、第2のレジスタの出力がマルチプレクサにフィードバックされ、比較器からの信号ビットが、マルチプレクサからのどのデータが第2のレジスタに供給されるかを示すようにする。第2のレジスタの出力が比較器にフィードバックされ、比較器が比較を実行できるようにする。第2のレジスタの出力は、データ出力である。
【0223】
[0282]
図86Dの回路は、パラメトリックReLU動作を実行するためにデータを入力させ、このデータをレジスタに登録する。データが、シフタ、比較器、およびマルチプレクサに提供される。この回路は、シフタに提供される対数量子化されたReLUパラメータから導出されたシフト命令も受信する。シフタによって、シフト命令に基づいてシフト演算が実行され、シフタからの出力がマルチプレクサに提供される。比較器が、元の入力データおよびシフタの出力(シフトされたデータ)を比較する。比較の結果が、シフトされたデータが元の入力データより大きいということを示す場合、シフトされたデータが選択される。比較の結果が、元の入力データがシフトされたデータより大きいということを示す場合、元の入力データが選択される。比較器は、元の入力データまたはシフトされたデータのうちのどのデータを選択するべきかの命令を、マルチプレクサに提供する。次に、マルチプレクサは、比較器からの命令に基づいて、元の入力データまたはシフトされたデータをレジスタに提供する。レジスタの出力は、ReLU動作の出力である。
【0224】
[0283]
図87は、例示的な実装に従って、AIPE構造を使用するアレイの例を示している。アレイ構造は、複数のAIPE構造を含んでよく、アレイ構造は、ニューラルネットワーク動作を実行するように構成される。アレイ構造は、畳み込み演算を実行するAIPE構造のアレイを含む。畳み込みを実行するAIPE構造のアレイは、一例として、16x16x16のAIPEを含んでよい。アレイ構造は、バッチ正規化動作を実行するAIPE構造のアレイを含む。バッチ正規化を実行するAIPE構造のアレイは、一例として、16x1x16のAIPEを含んでよい。アレイ構造は、パラメトリックReLU動作を実行するAIPE構造のアレイを含む。パラメトリックReLU動作を実行するAIPE構造のアレイは、一例として、16x1x16のAIPEを含んでよい。アレイ構造は、プーリング演算を実行するAIPE構造のアレイを含む。プーリング演算を実行するAIPE構造のアレイは、一例として、16x1x16のAIPEを含んでよい。アレイの各出力はマルチプレクサに提供され、マルチプレクサの出力が出力バッファに提供される。アレイは、入力バッファから入力を受信し、対数量子化されたパラメータから導出されたシフト命令をカーネルバッファから受信する。入力バッファおよびカーネルバッファは、AXI1入力2出力デマルチプレクサから入力を受信してよい。デマルチプレクサは、AXI読み取り入力を受信する。
【0225】
[0284]したがって、
図86A~
図87に示されているように、本明細書に記載された例示的な実装の変形は、特定のニューラルネットワーク動作を対象にするための専用回路を提供するように、変更されることができる。システムは、
図86Aに示されているようなシフタ回路によって畳み込みを容易にするための第1の回路、
図86Bに示されているようなシフタ回路によって畳み込みを容易にするための第2の回路、
図86Cに示されているような比較器によって最大プーリングを容易にするための第3の回路、および
図86Dに示されているようなパラメトリックReLUを容易にするための第4の回路などの、専用回路から成ることができる。そのような回路は、望ましい実装を容易にするために、本明細書に記載されているように、任意の組合せで、または単独の機能として使用されることができ、AIPE回路と共に使用されることもできる。
【0226】
[0285]
図88は、パラメータを生成するため、および/または対数量子化するため、AI/NNネットワークをトレーニングするため、あるいはアルゴリズムの形態で本明細書に記載された例示的な実装を実行するための装置などの、一部の例示的な実装での使用に適した例示的なコンピュータデバイスを含む例示的なコンピューティング環境を示している。コンピューティング環境8800内のコンピュータデバイス8805は、1つまたは複数の処理ユニット、コア、またはプロセッサ8810、メモリ8815(例えば、RAM、ROM、および/または同様のもの)、内部ストレージ8820(例えば、磁気、光、半導体ストレージ、および/または有機)、および/あるいはI/Oインターフェイス8825を含むことができ、これらのいずれかが、情報を伝達するために通信メカニズムまたはバス8830上で結合されるか、あるいはコンピュータデバイス8805に組み込まれることができる。また、I/Oインターフェイス8825は、望ましい実装に応じて、カメラから画像を受信するか、あるいはプロジェクタまたはディスプレイに画像を提供するように構成される。
【0227】
[0286]コンピュータデバイス8805は、入力/ユーザインターフェイス8835および出力デバイス/インターフェイス8840に通信可能に結合されることができる。入力/ユーザインターフェイス8835および出力デバイス/インターフェイス8840のうちのいずれか1つまたは両方は、有線インターフェイスまたは無線インターフェイスであることができ、取り外し可能であることができる。入力/ユーザインターフェイス8835は、入力を提供するために使用されることができる、物理的または仮想の、任意のデバイス、コンポーネント、センサ、またはインターフェイス(例えば、ボタン、タッチスクリーンインターフェイス、キーボード、ポインティング/カーソル制御、マイクロホン、カメラ、点字、モーションセンサ、光学式リーダ、および/または同様のもの)を含んでよい。出力デバイス/インターフェイス8840は、ディスプレイ、テレビ、モニタ、プリンタ、スピーカ、点字などを含んでよい。一部の例示的な実装では、入力/ユーザインターフェイス8835および出力デバイス/インターフェイス8840は、コンピュータデバイス8805に組み込まれるか、または物理的に結合されることができる。他の例示的な実装では、他のコンピュータデバイスが、コンピュータデバイス8805の入力/ユーザインターフェイス8835および出力デバイス/インターフェイス8840として機能するか、またはそれらの機能を提供してよい。
【0228】
[0287]コンピュータデバイス8805の例としては、高移動性のデバイス(例えば、スマートフォン、車両およびその他の機械内のデバイス、人間および動物によって運ばれるデバイスなど)、モバイルデバイス(例えば、タブレット、ノートブック、ラップトップ、パーソナルコンピュータ、ポータブルテレビ、ラジオなど)、および携帯用に設計されていないデバイス(例えば、デスクトップコンピュータ、その他のコンピュータ、インフォメーションセンター、1つまたは複数のプロセッサが組み込まれた、および/または結合されたテレビ、ラジオなど)が挙げられるが、これらに限定されない。
【0229】
[0288]コンピュータデバイス8805は、同じ構成または異なる構成の1つまたは複数のコンピュータデバイスを含む任意の数のネットワーク化されたコンポーネント、デバイス、およびシステムと通信するために、(例えば、I/Oインターフェイス8825を介して)外部ストレージ8845およびネットワーク8850に通信可能に結合されることができる。コンピュータデバイス8805または任意の接続されたコンピュータデバイスは、サーバ、クライアント、シンサーバ、一般的な機械、専用機械、または別のラベルとして機能するか、これらのサービスを提供するか、またはこれらと見なされることができる。
【0230】
[0289]I/Oインターフェイス8825は、少なくともコンピューティング環境8800内の接続されたすべてのコンポーネント、デバイス、およびネットワークとの間で情報を伝達するために、任意の通信またはI/Oプロトコルまたは規格(例えば、イーサネット、802.11x、ユニバーサルシステムバス、WiMax、モデム、セルラーネットワークプロトコルなど)を使用する有線および/または無線インターフェイスを含むことができるが、これらに限定されない。ネットワーク8850は、任意のネットワークまたはネットワークの組合せ(例えば、インターネット、ローカルエリアネットワーク、広域ネットワーク、電話網、セルラーネットワーク、衛星ネットワークなど)であることができる。
【0231】
[0290]コンピュータデバイス8805は、一過性の媒体および非一過性の媒体を含む、コンピュータ使用可能媒体またはコンピュータ可読媒体を使用すること、および/またはこれらを使用して通信することができる。一過性の媒体は、送信媒体(例えば、金属ケーブル、光ファイバ)、信号、搬送波などを含む。非一過性の媒体は、磁気媒体(例えば、ディスクおよびテープ)、光媒体(例えば、CD ROM、デジタルビデオディスク、ブルーレイディスク)、半導体媒体(例えば、RAM、ROM、フラッシュメモリ、半導体ストレージ)、およびその他の不揮発性ストレージまたはメモリを含む。
【0232】
[0291]コンピュータデバイス8805は、一部の例示的なコンピューティング環境内で技術、方法、アプリケーション、プロセス、またはコンピュータ実行可能命令を実装するために使用されることができる。コンピュータ実行可能命令は、一過性の媒体から取り出され、非一過性の媒体に格納され、非一過性の媒体から取り出されることができる。実行可能な命令は、任意のプログラミング、スクリプト記述、および機械語のうちの1つまたは複数(例えば、C、C++、C#、Java、Visual Basic、Python、Perl、JavaScriptなど)から生じることができる。
【0233】
[0292]プロセッサ8810は、ネイティブ環境または仮想環境内で、任意のオペレーティングシステム(OS:operating system)(図示されていない)の下で実行されることができる。論理ユニット8860と、アプリケーションプログラミングインターフェイス(API:application programming interface)ユニット8865と、入力ユニット8870と、出力ユニット8875と、異なるユニットが、互いに、OSと、および他のアプリケーション(図示されていない)と通信するためのユニット間通信メカニズム8895とを含む、1つまたは複数のアプリケーションがデプロイされることができる。説明されたユニットおよび要素は、設計、機能、構成、または実装において変化することができ、提供された説明に限定されない。プロセッサ8810は、中央処理装置(CPU)などのハードウェアプロセッサの形態であるか、またはハードウェアユニットとソフトウェアユニットの組合せであることができる。
【0234】
[0293]一部の例示的な実装では、APIユニット8865によって情報または実行命令が受信された場合、それらの情報または実行命令が1つまたは複数の他のユニット(例えば、論理ユニット8860、入力ユニット8870、出力ユニット8875)に伝達されてよい。場合によっては、前述の一部の例示的な実装では、論理ユニット8860は、ユニット間の情報の流れを制御し、APIユニット8865、入力ユニット8870、出力ユニット8875によって提供されるサービスを方向付けるように構成されてよい。例えば、論理ユニット8860単独で、またはAPIユニット8865と共に、1つまたは複数のプロセスまたは実装のフローが制御されてよい。入力ユニット8870は、例示的な実装において説明された計算のための入力を取得するように構成されてよく、出力ユニット8875は、例示的な実装において説明された計算に基づいて出力を提供するように構成されてよい。
【0235】
[0294]望ましい実装に応じて、プロセッサ8810は、
図89に示されているように、AI/ニューラルネットワークモデルのデータ値またはパラメータを、システムのメモリに提供される対数量子化されたデータ値または対数量子化された値に変換するように構成されることができる。次に、対数量子化されたデータ値または対数量子化されたパラメータは、
図89のシステムのコントローラによって使用され、ニューラルネットワークまたはAI動作を容易にするために、対応するパラメータまたはデータ値をシフトするためのシフト命令に変換されることができる。そのような例示的な実装では、プロセッサ8810は、
図9Aおよび9Bに示されているようなプロセスを実行して、機械学習アルゴリズムのトレーニングを実施し、結果として対数量子化されたパラメータを得るように構成されることができ、対数量子化されたパラメータは、コントローラによって使用するためにメモリに格納されることができる。他の例示的な実装では、プロセッサ8810は、方法またはプロセスを実行し、入力データを、AIPEに提供するための対数量子化されたデータに変換するように構成されることもできる。
【0236】
[0295]
図89は、例示的な実装に従って、AIPE制御のための例示的なシステムを示している。例示的な実装では、コントローラ8900は、本明細書に記載されているように、制御信号(例えば、
図72~
図85に示されたs1、s2、s3、s4)を介して1つまたは複数のAIPE8901を制御し、望ましいニューラルネットワーク動作を実行することができる。コントローラ8900は、望ましい実装に従って、メモリコントローラ、中央処理装置などの、従来技術において知られているような任意の論理回路または任意の種類のハードウェアコントローラとして実装されることができるコントローラ論理を使用して構成される。例示的な実装では、コントローラ8900は、対数量子化されたパラメータをメモリ8902から取り出し、それらのパラメータを、対数量子化されたパラメータから導出された符号ビット、シフト方向、およびシフト命令を含んでいるシフト命令に変換してよい。そのようなシフト命令および制御信号が、コントローラ8900からAIPE8901に提供されることができる。望ましい実装に応じて、入力データは、望ましい実装に従う任意の入力インターフェイス8903によってAIPE8901に直接提供されることができ(例えば、2
xの係数によってデータストリームを拡大するように構成された変換回路、入力処理回路、FPGA、ハードウェアプロセッサなどによって処理されるようなデータストリーム)、またはメモリ8902から取り出されたときに、コントローラ8900によって提供されることもできる。AIPE8901の出力は、望ましい実装に従って、ニューラルネットワーク動作の出力を任意の望ましいデバイスまたはハードウェアに提示することができる、出力インターフェイス8904によって処理されることができる。出力インターフェイス8904は、望ましい実装に従って、任意のハードウェア(例えば、FPGA、ハードウェア、専用回路)として実装されることができる。さらに、コントローラ8900、AIPE8901、メモリ8902、入力インターフェイス8903、および/または出力インターフェイス8904のいずれかまたはすべては、望ましい実装に従って、1つまたは複数のハードウェアプロセッサまたはFPGAとして実装されることができる。
【0237】
[0296]メモリ8902は、望ましい実装に従って、ダブルデータレートシンクロナスダイナミックランダムアクセスメモリ(DDR SDRAM:Double Data Rate Synchronous Dynamic Random-Access Memory)、磁気ランダムアクセスメモリ(MRAM:magnetic random access memory)などの、ただしこれらに限定されない、任意の形態の物理メモリであることができる。例示的な実装では、データが対数量子化されてメモリ8902に格納される場合、データは、メモリ8902から取り出されたときに、対数量子化されたニューラルネットワークパラメータを利用してシフト命令を導出する代わりに、ニューラルネットワークパラメータをシフトするためのシフト命令を導出するために使用されることができる。対数量子化されたデータからのシフト命令の導出は、対数量子化されたパラメータからの導出に類似する方法で実施されることができる。
【0238】
[0297]例示的な実装では、
図89に示されているようなシステムが存在することができ、このシステムでは、メモリ8902が、1つまたは複数のニューラルネットワーク層に関連付けられた1つまたは複数の対数量子化されたパラメータ値によって表されたトレーニング済みニューラルネットワークを格納するように構成されることができ、1つまたは複数のニューラルネットワーク層の各々が、実行される対応するニューラルネットワーク動作を表す。そのようなシステムは、シフト可能な入力データをシフトまたは加算するように構成された1つまたは複数のハードウェア要素(例えば、本明細書に記載されているようなAIPE8901、ハードウェアプロセッサ、FPGAなど)と、1つまたは複数のハードウェア要素を(例えば、制御信号s1、s2、s3、s4などを介して)制御して、メモリから読み取られた1つまたは複数のニューラルネットワーク層の各々について、対応する対数量子化されたパラメータ値から導出されたシフト命令に基づいてシフト可能な入力データを左または右にシフトして、シフトされたデータを形成するように構成された(例えば、コントローラ8900、ハードウェアプロセッサ、論理回路などとして実装されるような)コントローラ論理とを含み、実行される対応するニューラルネットワーク動作に従って、形成されたシフト済みデータを(例えば、本明細書に記載されているように、加算器回路またはシフタ回路を介して)加算またはシフトすることができる。
【0239】
[0298]望ましい実装に応じて、システムは、入力データの大きさを変更してシフト可能な入力データを形成するように構成されたデータスケーラをさらに含むことができる。そのようなデータスケーラは、望ましい実装に従って、(例えば、専用回路の論理、ハードウェアプロセッサなどを介して)ハードウェアにおいて、またはソフトウェアにおいて実装されることができる。そのようなデータスケーラは、加算器回路またはシフタ回路を介して、シフトされたデータに加算するために、メモリ8902から読み取られた1つまたは複数のニューラルネットワーク層からのバイアスパラメータの大きさを変更するか、または(例えば、シフト可能な入力データを形成するために、xが整数である2xの係数によって)入力データの大きさを変更するように構成されることができる。
【0240】
[0299]本明細書に記載された例示的な実装において示されているように、AIPE8901またはそれと同等のハードウェア要素は、シフトを実行するように構成された1つまたは複数のシフタ回路(例えば、バレルシフタ回路、対数シフタ回路、算術シフタ回路など)を含むことができる。AIPE8901またはそれと同等のハードウェア要素は、本明細書に記載されているような加算を実行するように構成された1つまたは複数の加算器回路(例えば、算術加算器回路、整数加算器回路など)をさらに含むことができる。必要に応じて、加算演算は、(例えば、セグメント、正/負の累算器などを介して)本明細書に記載されているような加算を実行するように構成された1つまたは複数のシフト回路を含むことができる。
【0241】
[0300]コントローラ8900は、AIPE8901または同等のハードウェア要素に提供されるシフト命令を生成するように構成されることができる。そのようなシフト命令は、AIPEまたは同等のハードウェア要素に対して、シフト可能な入力データを左または右にシフトするように制御/指示するための、シフト方向およびシフト量を含むことができる。本明細書に記載されているように(例えば、
図59~
図62に示されているように)、シフト量は、対応する対数量子化された重みパラメータの指数の大きさから導出されることができ(例えば、2
2は2の大きさを有し、それによって、シフト量を2にする)、シフト方向は、対応する対数量子化された重みパラメータの指数の符号から導出されることができる(例えば、2
2は正符号を有し、それによって、左へのシフトを示す)。
【0242】
[0301]望ましい実装に応じて、AIPE8901または同等のハードウェア要素は、
図60または
図62に示されているように、対応する対数量子化された重みパラメータの符号ビットおよび入力データの符号ビットに基づいて、形成されたシフト済みデータの符号ビットを提供するように構成されることができる。シフト命令は、望ましい実装に従って、XOR回路において使用するために、または2の補数の目的で、対応する対数量子化された重みパラメータの符号ビットを含むことができる。
【0243】
[0302]本明細書でさまざまな例示的な実装において説明されたように、
図88のコンピューティング環境および/または
図89のシステムは、(例えば、畳み込み、バッチ正規化などを容易にするために)入力データをニューラルネットワークの動作に関連付けられた対応する対数量子化されたパラメータと乗算することを含むことができるニューラルネットワーク動作を処理するために、方法またはコンピュータ命令を実行するように構成されることができる。乗算のためのそのような方法およびコンピュータ命令は、本明細書に記載されているように、入力データから導出された(例えば、係数によって大きさを変更された)シフト可能な入力を取り込むことと、対応する対数量子化されたパラメータから導出されたシフト命令に従って、シフト可能な入力を左方向または右方向にシフトして、ニューラルネットワーク動作の対応する対数量子化されたパラメータとの入力データの乗算を表す出力を生成することとを含むことができる。本明細書に記載されているように、対応する対数量子化されたパラメータに関連付けられたシフト命令は、シフト方向およびシフト量を含むことができ、シフト量が、対応する対数量子化されたパラメータの指数の大きさから導出され、シフト方向が、対応する対数量子化されたパラメータの指数の符号から導出され、シフト可能な入力をシフトすることが、シフト方向に従って、シフト量によって示された量だけ、シフト可能な入力を左方向または右方向にシフトすることを含む。下記は、
図88および
図89に示されたシステムに関して説明されるが、方法またはコンピュータ命令を容易にするための他の実装も可能であり、本開示はそれらに限定されない。例えば、方法は、フィールドプログラマブルゲートアレイ(FPGA)によって、集積回路(例えば、ASIC)によって、または1つまたは複数のハードウェアプロセッサによって実行されることができる。
【0244】
[0303]本明細書に記載されているように、
図88のコンピュータ環境および/または
図89で説明されたようなシステムには、ニューラルネットワークの動作を処理するための方法またはコンピュータ命令が存在することができ、この方法またはコンピュータ命令は、ニューラルネットワークの動作の入力データから導出されたシフト可能な入力データを取り込むことと、ニューラルネットワークの動作の入力データの対応する対数量子化された重みパラメータに関連付けられた入力を取り込むことであって、入力がシフト方向およびシフト量を含み、シフト量が、対応する対数量子化された重みパラメータの指数の大きさから導出され、シフト方向が、対応する対数量子化された重みパラメータの指数の符号から導出される、取り込むことと、対応する対数量子化された重みパラメータに関連付けられた入力に従ってシフト可能な入力データをシフトし、ニューラルネットワークの動作の処理の出力を生成することとを含むことができる。
【0245】
[0304]本明細書に記載された例示的な実装において示されたように、方法およびコンピュータ命令は、(例えば、XOR回路あるいはソフトウェアまたは回路での同等の機能を介して)対応する対数量子化されたパラメータの符号ビットおよび入力データの符号ビットに基づいて、ニューラルネットワーク動作の対応する対数量子化されたパラメータとの入力データの乗算の出力の符号ビットを決定することを含むことができる。
【0246】
[0305]本明細書に記載された例示的な実装において示されたように、乗算のための方法およびコンピュータ命令は、対応する対数量子化されたパラメータの符号ビットが負である場合に、ニューラルネットワーク動作の対応する対数量子化されたパラメータとの入力データの乗算の出力を1の補数データに変換することと、1の補数データをインクリメントして、ニューラルネットワーク動作の対応する対数量子化されたパラメータとの入力データの乗算の出力として、2の補数データを形成することとを含むことができる。
【0247】
[0306]本明細書に記載された例示的な実装において示されたように、方法およびコンピュータ命令は、ニューラルネットワーク動作に関連付けられた値を、対応する対数量子化されたパラメータとの入力データの乗算の生成された出力に加算して、ニューラルネットワーク動作の処理の出力を形成することを含むことができる。そのような加算は、望ましい実装に応じて、加算器回路(例えば、整数加算器回路または浮動小数点加算器回路)によって、または1つまたは複数のシフタ回路(例えば、バレルシフタ回路、対数シフタ回路など)によって実施されることができる。そのような1つまたは複数のシフタ回路は、望ましい実装に応じて、シフトを管理する1つまたは複数のシフタ回路と同じであるか、またはそれらのシフタ回路から分離することができる。ニューラルネットワーク動作に関連付けられた値は、バイアスパラメータであることができるが、これに限定されない。
【0248】
[0307]本明細書で例示的な実装において説明されたように、方法およびコンピュータ命令は、ニューラルネットワークが畳み込み演算である場合に、入力データが畳み込み演算の複数の入力要素を含むことと、シフト可能な入力が複数のシフト可能な入力要素を含み、シフト可能な入力要素の各々が、複数の対数量子化されたパラメータからの対応する対数量子化されたパラメータによって乗算される複数の入力要素のうちの1つに対応する、ことと、ニューラルネットワーク動作の対応する対数量子化されたパラメータとの入力データの乗算の出力が複数のシフト可能な出力を含み、複数のシフト可能な出力の各々が、複数の対数量子化されたパラメータからの対応する対数量子化されたパラメータに関連付けられた入力に従って、シフト可能な入力要素の各々のシフトに対応する、こととを含むことができ、複数のシフト可能な出力が、加算演算またはシフト演算によって合計される。
【0249】
[0308]本明細書で例示的な実装において説明されたように、方法およびコンピュータ命令は、ニューラルネットワーク動作がパラメトリックReLU動作である場合に、シフト命令に従ってシフト可能な入力をシフトして、ニューラルネットワーク動作の対応する対数量子化されたパラメータとの入力データの乗算の出力を生成することが、入力データの符号ビットが負である場合のためにのみ実行され、入力データの符号ビットが正である場合のために、シフトせずに、シフト可能な入力が、ニューラルネットワーク動作の対応する対数量子化されたパラメータとの入力データの乗算の出力として提供される、ことを含むことができる。
【0250】
[0309]詳細な説明の一部は、コンピュータ内の動作のアルゴリズムおよび記号表現に関して提示されている。これらのアルゴリズム的記述および記号表現は、革新的技術の本質を他の当業者に伝達するために、データ処理技術の当業者によって使用される手段である。アルゴリズムは、望ましい最終状態または最終結果につながる一連の定義されたステップである。例示的な実装では、実行されるステップは、有形の結果を達成するために、有形の量の物理的操作を必要とする。
【0251】
[0310]説明から明らかであるように、特に具体的に述べられない限り、説明全体を通じて、「処理」、「計算」、「算出」、「決定」、「表示」などの用語を利用する説明は、コンピュータシステムのレジスタおよびメモリ内の物理(電子)量として表されたデータを操作して、コンピュータシステムのメモリまたはレジスタあるいはその他の情報の格納デバイス、送信デバイス、または表示デバイス内の物理量として同様に表された他のデータに変換する、コンピュータシステムまたはその他の情報処理デバイスの動作およびプロセスを含むことができると理解される。
【0252】
[0311]例示的な実装は、本明細書における動作を実行するための装置に関連してもよい。この装置は、必要な目的のために特別に構築されてよく、あるいは1つまたは複数のコンピュータプログラムによって選択的に作動または再構成される1つまたは複数の汎用コンピュータを含んでよい。そのようなコンピュータプログラムは、コンピュータ可読ストレージ媒体またはコンピュータ可読信号媒体などのコンピュータ可読媒体に格納されてよい。コンピュータ可読ストレージ媒体は、光ディスク、磁気ディスク、読み取り専用メモリ、ランダムアクセスメモリ、半導体デバイスおよびドライブ、あるいは電子情報を格納するのに適している任意のその他の種類の有形または非一過性の媒体などの、有形の媒体を含んでよいが、これらに限定されない。コンピュータ可読信号媒体は、搬送波などの媒体を含んでよい。本明細書において提示されたアルゴリズムおよび表示は、本質的に、どの特定のコンピュータまたはその他の装置にも関連していない。コンピュータプログラムは、望ましい実装の動作を実行する命令を含んでいる純粋なソフトウェア実装を含むことができる。
【0253】
[0312]さまざまな汎用システムが、本明細書における例に従って、プログラムおよびモジュールと共に使用されてよく、または望ましい方法のステップを実行するために、さらに特殊な装置を構築することが便利であると判明してもよい。加えて、例示的な実装は、いずれかの特定のプログラミング言語を参照して説明されない。本明細書に記載された例示的な実装の技術を実装するために、さまざまなプログラミング言語が使用されてよいということが理解されるであろう。プログラミング言語の命令は、1つまたは複数の処理デバイス(例えば、中央処理装置(CPU)、プロセッサ、またはコントローラ)によって実行されてよい。
【0254】
[0313]従来技術において知られているように、前述の動作は、ハードウェア、ソフトウェア、またはソフトウェアとハードウェアの何らかの組合せによって実行されることができる。例示的な実装のさまざまな態様は、回路および論理デバイス(ハードウェア)を使用して実装されてよいが、他の態様は、機械可読媒体に格納された命令(ソフトウェア)を使用して実装されてもよく、これらの命令は、プロセッサによって実行された場合、プロセッサに、本出願の実装を実行するための方法を実行させる。さらに、本出願の一部の例示的な実装は、ハードウェアのみにおいて実行されてよく、一方、他の例示的な実装は、ソフトウェアのみにおいて実行されてよい。さらに、説明されたさまざまな機能は、単一のユニットにおいて実行されることができ、または任意の数の方法で、複数のコンポーネントにわたって分散されることができる。ソフトウェアによって実行される場合、方法は、コンピュータ可読媒体に格納された命令に基づいて、汎用コンピュータなどのプロセッサによって実行されてよい。必要に応じて、命令は、圧縮された形式および/または暗号化された形式で媒体に格納されることができる。
【0255】
[0314]さらに、本明細書の検討および本出願の技術の実践から、本出願の他の実装が当業者にとって明らかになるであろう。説明された例示的な実装のさまざまな態様および/またはコンポーネントが、単独で、または任意の組合せで使用されてよい。本明細書および例示的な実装は、単なる例と見なされるということが意図され、本出願の真の範囲および思想は、以下の特許請求の範囲によって示されている。
【手続補正書】
【提出日】2024-07-18
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
入力データに対してバッチ正規化動作を実行するように構成された人工知能処理要素(AIPE)であって、前記AIPEが、
前記入力データから導出されたシフト可能な入力を取り込むことと、
ニューラルネットワークの第1のトレーニング可能なパラメータから導出された対数量子化された値から導出されたシフト命令を取り込むことと、
前記シフト命令に従って前記シフト可能な入力を左方向または右方向にシフトして、前記対数量子化された値との前記入力データの乗算を表すシフトされた出力を形成することと
を実行するように構成されたシフタ回路と、
バイアス値を前記シフトされた出力に加算して、前記バッチ正規化動作の出力を生成するように構成された加算器回路と
を備え、
前記バイアス値が、前記ニューラルネットワークの前記第1のトレーニング可能なパラメータ、および前記第1のトレーニング可能なパラメータとは別の前記ニューラルネットワークの第2のトレーニング可能なパラメータから導出される、
人工知能処理要素(AIPE)。
【請求項2】
前記シフト命令が、シフト方向およびシフト量を含み、前記シフト量が、前記対数量子化された値の指数の大きさから導出され、前記シフト方向が、前記対数量子化された値の前記指数の符号から導出され、
前記シフタ回路が、前記シフト可能な入力を、前記シフト方向に従って前記左方向または前記右方向にシフトし、前記シフト可能な入力を、前記シフト量によって示された量だけ前記シフト方向にシフトする、
請求項1に記載のAIPE。
【請求項3】
前記シフト可能な入力の第1の符号ビットおよび前記対数量子化された値の第2の符号ビットを取り込み、前記シフトされた出力の第3の符号ビットを形成するように構成された回路
をさらに備える請求項1に記載のAIPE。
【請求項4】
前記シフトされた出力および前記対数量子化された値の符号ビットを取り込み、前記対数量子化された値の前記符号ビットが負符号を示す場合に1の補数データを形成するように構成された第1の回路と、
前記対数量子化された値の前記符号ビットによって前記1の補数データをインクリメントし、前記シフトされた出力を、前記対数量子化された値との前記入力データの前記乗算を表す2の補数データに変更するように構成された第2の回路と
をさらに備える請求項1に記載のAIPE。
【請求項5】
前記シフタ回路が対数シフタ回路またはバレルシフタ回路である、
請求項1に記載のAIPE。
【請求項6】
前記加算器回路が整数加算器回路である、
請求項1に記載のAIPE。
【請求項7】
前記入力データが、大きさを変更されて、前記シフト可能な入力を形成する、
請求項1に記載のAIPE。
【請求項8】
前記入力データの分散によって変更されたニューラルネットワークの第1のパラメータから、前記対数量子化された値が導出される、
請求項1に記載のAIPE。
【請求項9】
前記入力データの分散および平均によって変更された前記ニューラルネットワークの前記第1のパラメータ、ならびに前記ニューラルネットワークの前記第2のパラメータから、前記バイアス値が導出される、
請求項1に記載のAIPE。
【請求項10】
入力データに対してバッチ正規化動作を実行するように構成された人工知能処理要素(AIPE)であって、前記AIPEが、
前記入力データから導出されたシフト可能な入力を取り込むことと、
ニューラルネットワークの第1のトレーニング可能なパラメータから導出された対数量子化された値から導出されたシフト命令を取り込むことと、
前記シフト命令に従って前記シフト可能な入力を左方向または右方向にシフトして、前記対数量子化された値との前記入力データの乗算を表すシフトされた出力を形成することと
を実行するように構成された第1のシフタ回路と、
前記シフトされた出力をシフトしてバイアス値を加算し、前記バッチ正規化動作の出力を生成するように構成された第2のシフタ回路と
を備え、
前記バイアス値が、前記ニューラルネットワークの前記第1のトレーニング可能なパラメータ、および前記第1のトレーニング可能なパラメータとは別の前記ニューラルネットワークの第2のトレーニング可能なパラメータから導出される、
人工知能処理要素(AIPE)。
【請求項11】
入力データに対してバッチ正規化動作を実行するように構成された人工知能処理要素(AIPE)であって、前記AIPEが、
前記入力データから導出されたシフト可能な入力を取り込むことと、
ニューラルネットワークの第1のトレーニング可能なパラメータから導出された対数量子化された値から導出されたシフト命令を取り込むことと、
前記シフト命令に従って前記シフト可能な入力を左方向または右方向にシフトして、前記対数量子化された値との前記入力データの乗算を表すシフトされた出力を形成することと、
前記シフトされた出力をシフトしてバイアス値を加算し、前記バッチ正規化動作の出力を生成することと
を実行するように構成されたシフタ回路
を備え、
前記バイアス値が、前記ニューラルネットワークの前記第1のトレーニング可能なパラメータ、および前記第1のトレーニング可能なパラメータとは別の前記ニューラルネットワークの第2のトレーニング可能なパラメータから導出される、
人工知能処理要素(AIPE)。
【外国語明細書】