(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-07-24
(45)【発行日】2023-08-01
(54)【発明の名称】電子デバイスの活性化関数機能ブロック
(51)【国際特許分類】
G06N 3/063 20230101AFI20230725BHJP
G06F 17/10 20060101ALI20230725BHJP
【FI】
G06N3/063
G06F17/10 Z
(21)【出願番号】P 2020531467
(86)(22)【出願日】2018-08-27
(86)【国際出願番号】 US2018048059
(87)【国際公開番号】W WO2019112657
(87)【国際公開日】2019-06-13
【審査請求日】2021-08-27
(32)【優先日】2017-12-08
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ガブリエル エイチ. ロー
【審査官】今城 朋彬
(56)【参考文献】
【文献】特開平05-242068(JP,A)
【文献】米国特許出願公開第2017/0323196(US,A1)
【文献】千承佑、外2名,ニューラルネットワークを用いた外観検査システム,第20回 回路とシステム軽井沢ワークショップ 論文集,日本,電子情報通信学会,2007年04月24日,pp.505-510
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
G06F 17/10-17/18
(57)【特許請求の範囲】
【請求項1】
電子デバイスであって、
指数線形ユニット(ELU)活性化関数を実行する活性化関数機能ブロック
を備え、
前記活性化関数機能ブロックは、
前記活性化関数機能ブロックに対する複数のビット
の入力値に基づいて前記ELU活性化関数の結果を生成する第1選択回路のセット及び第2選択回路のセットを含み、
前記第1選択回路の各々は、第2出力の生成に用いられるために第2選択回路の各々によって受信される第1出力を生成し、
前記第2選択回路からの前記第2出力は、前記ELU活性化関数の結果として前記活性化関数機能ブロックから出力される、
電子デバイス。
【請求項2】
前記第1選択回路の各々は、前記入力値のシフトされたバージョンの入力ビットを第1入力として受信し、定数値のビットを第2入力として受信し、第1選択ビットを選択入力として受信し、
前記第1選択回路の各々は、前記第1選択ビットの値に基づいて、前記第1入力又は前記第2入力の値を前記第1出力として出力する、
請求項1の電子デバイス。
【請求項3】
前記第2選択回路の各々は、前記第1選択回路からの第1出力を第3入力として受信し、前記入力値のビットを第4入力として受信し、第2選択ビットを選択入力として受信し、
前記第2選択回路の各々は、前記第2選択ビットの値に基づいて、前記第3入力又は前記第4入力を前記第2出力として出力する、
請求項
2の電子デバイス。
【請求項4】
前記入力値の符号ビットは、前記第2選択ビットとして用いられる、
請求項3の電子デバイス。
【請求項5】
前記活性化関数機能ブロック内の選択ビット生成回路であって、前記第1選択ビットを生成する選択ビット生成回路を備え、
前記選択ビット生成回路は、
前記入力値の特定のビットの値を比較入力として受信し、前記特定のビットの値と目標値との比較結果を比較出力として出力する比較回路と、
前記比較出力を第1NAND入力として受信し、前記入力値の符号ビットを第2NAND入力として受信し、前記第1選択ビットをNAND出力として出力するNANDゲートと、を含む、
請求項
2の電子デバイス。
【請求項6】
前記活性化関数機能ブロック内のシフト回路を備え、
前記シフト回路は、
前記入力値を受信し、
特定の量だけシフトされた前記入力値のシフトされたバージョンを出力する、
請求項
2の電子デバイス。
【請求項7】
前記定数値は、前記入力値が-1未満の場合に、前記ELU活性化関数の結果として出力される所定値に設定される、
請求項
2の電子デバイス。
【請求項8】
前記第1選択回路及び前記第2選択回路は、マルチプレクサ、論理ゲート、トランスミッションゲート、動的ロジックゲートのうち一部又は全てを含む、
請求項
1の電子デバイス。
【請求項9】
第1選択回路のセット及び第2選択回路のセットを含む活性化関数機能ブロックにおいて指数線形ユニット(ELU)活性化関数を実行する方法であって、
前記活性化関数機能ブロックに対する複数のビットの入力値に基づいて前記ELU活性化関数の結果を生成することを含み、
前記生成することは、
前記第1選択回路の各々が第1出力を生成することと、
前記第2選択回路の各々が前記第1出力を受信することと、
前記第2選択回路の各々が第2出力を生成することと、
前記第2選択回路からの前記第2出力を、前記ELU活性化関数の結果として出力することと、を含む、
方法。
【請求項10】
前記第1選択回路の各々が、前記入力値のシフトされたバージョンの入力ビットを第1入力として受信し、定数値のビットを第2入力として受信し、第1選択ビットを選択入力として受信することと、
前記第1選択回路の各々が、前記第1選択ビットの値に基づいて、前記第1入力又は前記第2入力の値を前記第1出力として出力することと、を含む、
請求項9の方法。
【請求項11】
前記第2選択回路の各々が、前記第1選択回路からの第1出力を第3入力として受信し、前記入力値のビットを第4入力として受信し、第2選択ビットを選択入力として受信することと、
前記第2選択回路の各々が、前記第2選択ビットの値に基づいて、前記第3入力又は前記第4入力を前記第2出力として出力することと、を含む、
請求項10の方法。
【請求項12】
前記入力値の符号ビットを、前記第2選択ビットとして用いることを含む、
請求項11の方法。
【請求項13】
前記活性化関数機能ブロックは、選択ビット生成回路を備え、
前記方法は、
前記入力値の特定のビットの値を目標値と比較した結果に基づいて、比較出力を生成することと、
前記比較出力及び前記入力値の符号ビットを入力とするNAND論理ゲートから出力された結果を前記第1選択ビットとして出力することと、
によって、前記選択ビット生成回路において前記第1選択ビットを生成することを含む、
請求項10の方法。
【請求項14】
前記活性化関数機能ブロックは、シフト回路を備え、
前記方法は、
前記シフト回路が、入力値を受信することと、
前記シフト回路が、特定の量だけシフトされた前記入力値のシフトされたバージョンを出力することと、を含む、
請求項10の方法。
【請求項15】
前記第1選択回路及び前記第2選択回路は、マルチプレクサ、論理ゲート、トランスミッションゲート、動的ロジックゲートのうち一部又は全てを含む、
請求項9の方法。
【発明の詳細な説明】
【背景技術】
【0001】
(関連技術)
いくつかの電子デバイスは、ニューラルネットワーク(又は「人工ニューラルネットワーク」)を使用して、対応する計算動作を実行する。一般に、ニューラルネットワークは、生物の脳のニューラルネットワーク等のように、動作を実行するように「学習」又はトレーニングすることができる、生物のニューラルネットワークに類似する内部要素を含むシステムである。ニューラルネットワークは、既知の情報を使用して動作を実行するようにトレーニングされ、ニューラルネットワークの内部要素をトレーニング及び設定して、ニューラルネットワークが未知の情報に対して動作を実行することができるようになる。例えば、ニューラルネットワークは、顔の画像を含むことが分かっているデジタル画像を使用して、デジタル画像が顔の画像を含むか否かを認識するようにトレーニングされ、後で未知のデジタル画像を分析する場合に、ニューラルネットワークの内部構造が適切に反応するように、すなわち、デジタル画像が顔の画像を含むことを識別するように、トレーニングされ得る。
【0002】
ニューラルネットワークは、生物の脳内でシナプスを介してニューロンが相互接続されているのと同じような構成で相互接続された人工的なニューロン、すなわち「ノード」の集合を含む。ニューラルネットワークは、入力ノード、中間ノード及び出力ノードを有し、出力ノード以外の各ノードが、関連する重みを有する有向エッジを介して1つ以上の他のノード(すなわち「下流」ノード)に接続された、有向及び重み付きグラフ構造の形態として視覚化することができる。本明細書で使用される「有向エッジ」は、少なくとも2つのノード間の論理的又は実際の相互接続であり、これを介して、例えば上流ノードから下流ノードへ等のように特定の方向に情報が移動する。入力ノードは、ニューラルネットワークの外部のソースから入力を受信し、受信した入力を処理して入力値(例えば、数値)を生成する。次に、入力値は、入力ノードから下流の中間ノードに転送され、場合によっては、対応する有向エッジの重みに応じて途中で重み付けされる(すなわち、重み付け値で乗算されたり、重み付け値と加算されたり等することによって調整される)。各中間ノード内で、受信した値が合計され、中間ノードに対応付けられた活性化関数を使用して処理され、中間ノードの結果値が生成される。次に、結果値は、中間ノードから下流の中間ノード又は出力ノードに転送され、場合によっては、対応する有向エッジの重みに応じて途中で重み付けされる。ニューラルネットワークは、多くの場合、いくつかの(多数であり得る)中間ノードの層を含み、中間ノードの各層は、入力値を受信し、生成した結果を別の層の中間ノード又は出力ノードに転送する。重み付けされた結果値が最終的に中間ノードの最後の層から出力ノードに転送されると、出力ノードは、結果値を処理してニューラルネットワークの出力を生成する。上述した画像処理の例を続けると、出力ノードからの出力は、対象のデジタル画像が顔の画像を含むか否かを示す形態である。
【0003】
上述したように、ニューラルネットワーク内のノード間の対応するエッジに沿って転送される値に重みが適用され、中間ノードは、各々の活性化関数を使用して受信値の合計を処理する。ニューラルネットワークが所望の出力を生成するように、エッジに関連する重みを調整/設定することによって、ニューラルネットワークを、例えばデジタル画像内の顔を適切に識別する等の意図した結果を生成するようにトレーニングすることができる。
【0004】
電子デバイスは、ニューラルネットワークを使用することで、他の技術を使用した場合よりも簡単に特定の動作を実行することができる。しかし、ニューラルネットワークは、特に、ニューラルネットワーク内の層の数が増えるとコンピュータ負荷が大きくなり、結果を生成するのに時間がかかる可能性がある。例えば、既存のソフトウェア技術を使用して活性化関数を実行することは、複数のサブ動作を実行する/実行する必要があり得る。対応する数の中間ノードに対して数十又は数百の活性化関数を実行する必要がある場合、サブ動作の数が非常に多く、処理するのにかなりの時間を要することがある。
【図面の簡単な説明】
【0005】
【
図1】いくつかの実施形態による、電子デバイスを示すブロック図である。
【
図2】いくつかの実施形態による、整流線形ユニット(ReLU)活性化関数の結果のグラフと、ReLU活性化関数の近似のハードウェア回路実装と、を示す図である。
【
図3】いくつかの実施形態による、漏洩ReLU活性化関数の結果のグラフと、漏洩ReLU活性化関数の近似のハードウェア回路実装と、を示す図である。
【
図4】いくつかの実施形態による、指数線形ユニット(ELU)活性化関数の結果のグラフと、ELU活性化関数の近似と、ELU活性化関数の近似のハードウェア回路実装と、を示す図である。
【
図5】いくつかの実施形態による、ELU活性化関数の結果のグラフと、ELU活性化関数の近似と、ELU活性化関数の近似のハードウェア回路実装と、を示す図である。
【
図6】いくつかの実施形態による、活性化関数の結果を生成するプロセスを示すフローチャートである。
【発明を実施するための形態】
【0006】
図面及び説明を通じて、同じ符号は同じ図の要素を指す。
【0007】
以下の説明は、当業者が、説明する実施形態を製造及び使用することを可能にするために提示され、特定のアプリケーション及びその要件に照らして提供される。説明する実施形態に対する様々な変更は、当業者には容易に明らかであり、本明細書で定義された一般原理は、他の実施形態及び用途に適用されてもよい。従って、説明する実施形態は、示された実施形態に限定されず、本明細書で開示された原理及び特徴と一致する最も広い範囲が与えられるべきである。
【0008】
(概要)
説明する実施形態は、処理動作を実行する処理回路を有する電子デバイスを含む。処理回路は、ニューラルネットワーク及び他の処理動作に使用されるような活性化関数を実施する専用ハードウェア回路を有する活性化関数機能ブロックを含む。言い換えると、活性化関数機能ブロックは、受信した入力に基づいて活性化関数の結果を生成する特定目的向け回路要素を含む。説明する実施形態では、活性化関数機能ブロック内のハードウェア回路は、対応する線形関数に基づいて、2つ以上の数値範囲に亘って活性化関数の結果を近似するように構成されている。従って、ハードウェア回路は、複数の別個の数値範囲の各々について、その範囲内の入力が与えられると、その範囲に関連する線形関数の結果を生成するように構成されており、当該結果は、その範囲における活性化関数の結果の近似である。
【0009】
ハードウェア回路に実装される活性化関数は、線形関数を使用して結果を近似することができる任意の活性化関数を含むことができる。例えば、整流線形ユニット(ReLU)活性化関数を、ハードウェア回路に実装することができる(他の活性化関数については以下に詳細に説明する)。ReLU活性化関数の場合、上述した範囲は、ReLU活性化関数が同様のタイプの結果を返す範囲に対応する2つの範囲を含む。より具体的には、2つの範囲は、0及び全ての正の入力値の第1範囲と、負の入力値を含む第2範囲と、を含む。第1範囲では、ハードウェア回路は、入力値に等しい結果(線形関数y=x)を生成し、第2範囲では、ハードウェア回路は、定数線形関数y=0の結果0を生成する。従って、ハードウェア回路は、入力が3の場合には結果3を生成し、入力が-2の場合には結果0を生成する。
【0010】
説明する実施形態では、ハードウェア回路は、所定の入力の適切な範囲に関連する結果をハードウェア回路に生成させる回路要素を含む。言い換えると、回路要素は、所定の入力値が含まれる範囲を決定し、ハードウェア回路にその範囲の結果を生成させる役割がある。いくつかの実施形態では、回路要素は、入力内のビットのサブセット(すなわち、入力の全てのビットよりも少ないビットを含む入力のビットの何らかの組み合わせ)のみに基づいて、範囲を決定する。例えば、ハードウェア回路は、入力からの符号ビットのみを使用して、入力値が負の数であるか正の数であるかを決定してもよい(簡潔にするために、この説明では0は正であると仮定する)。別の例として、符号ビットと、数値を表す整数及び端数部分を有する入力の整数部分の一部又は全てと、を使用して、入力値が-1~1であるかどうかを決定することができる。
【0011】
活性化関数をハードウェアに実装することによって、説明する実施形態は、既存の技術、特に汎用処理回路を使用して活性化関数の結果を計算する技術と比べて、活性化関数を評価する速度が大幅に改善される。線形関数を使用して、入力値の対応する範囲における活性化関数の結果を近似することによって、ハードウェア回路がより簡潔なものになる。ビットのサブセットのみを使用して適切な範囲を特定することによって、ハードウェア回路は、より複雑な比較演算を実行する代わりに、少数のビットを処理するだけでよい。要するに、本明細書で説明するハードウェア回路を使用して活性化関数を実行することによって、ニューラルネットワーク処理及び他の動作等の活性化関数に依存する動作を、より高速に、より少ない電力で、処理回路のより少ない領域及びより低い複雑さで実行することができ、これにより、処理回路及び処理回路を使用する電子デバイスの設計、製造及び動作が改善される。
【0012】
(電子デバイス)
図1は、いくつかの実施形態による、電子デバイス100を示すブロック図である。
図1に示すように、電子デバイス100は、処理回路102を含む。処理回路102は、処理動作を実行するように構成された1つ以上の電子回路(例えば集積回路、ディスクリート回路要素等)を含み、例えば、マイクロプロセッサ内のプロセッサコア又は処理パイプライン、汎用グラフィックス処理装置(GPGPU)内の計算ユニット、特定用途向け集積回路(ASIC)内の処理回路等が挙げられる。通常、処理回路102は、ハードウェアで、すなわち、様々な回路要素及びデバイスを使用して実装される。例えば、サブシステムのいくつか又は全てを1つ以上の半導体チップ上で完全に製造することができ、ディスクリート回路要素と組み合わせて半導体チップから生成することができ、ディスクリート回路要素のみから製造すること等ができる。
【0013】
処理回路102は、活性化関数機能ブロック104を含む。活性化関数機能ブロック104は、活性化関数を評価する動作を行う機能ブロックである。言い換えると、活性化関数機能ブロック104は、入力値に基づいて活性化関数の結果を生成する集積回路及び/又はディスクリート回路要素等のハードウェア回路を含む。整流線形ユニット(ReLU)、漏洩ReLU等のように活性化関数機能ブロック104で実行され得る活性化関数は、以下により詳細に説明する。
【0014】
いくつかの実施形態では、ニューラルネットワークの動作を実行するために、処理回路102及び活性化関数機能ブロック104が少なくとも部分的に使用される。これらの実施形態では、処理回路102内の汎用処理回路又は専用処理回路は、ニューラルネットワーク内のノードに関して命令又は他の処理動作を実行する。これらの動作は、様々なノードの処理動作と、結果値の重み付け及び/又は合計と、ニューラルネットワークを介した情報/値フローの処理と、を含む。さらに、活性化関数機能ブロック104は、中間ノードの活性化関数の結果値を生成するために本明細書で説明する動作を実行する。言い換えると、所定のニューラルネットワークの動作のうちいくつかは処理回路102によって実行されるが、特定の活性化関数の評価に関しては、処理回路102は、活性化関数機能ブロック104に依存する。例えば、いくつかの実施形態では、処理回路102は、ニューラルネットワークの様々なプログラムコード命令(すなわち、ニューラルネットワークを実施するプログラムコード命令)が実行される実行パイプラインを含み、活性化関数機能ブロック104内の特定目的向け回路は、パイプライン内で使用され、対応する活性化関数の結果を生成する。これらの実施形態のうちいくつかでは、活性化関数機能ブロック104は、演算論理ユニット(ALU)、整数又は浮動小数点実行ユニット等のパイプラインの実行ステージに含まれる。別の例として、いくつかの実施形態では、処理回路102は、ニューラルネットワークの様々なプログラムコード命令が実行されるGPGPU計算ユニットを含み、活性化関数機能ブロック104内の特定目的向け回路は、計算ユニット内で使用され又は計算ユニットによって使用され、対応する活性化関数の結果を生成する。
【0015】
本明細書では、ニューラルネットワークの例を使用して活性化関数機能ブロック104の動作を説明するが、いくつかの実施形態では、処理回路102及び/又は活性化関数機能ブロック104は、ニューラルネットワーク以外の計算動作を実行するために使用される。一般に、所定の計算動作に有用な結果を生成するために活性化関数を使用できる場合にはいつでも、結果を生成するために、処理回路102によって活性化関数機能ブロック104を使用することができる。
【0016】
電子デバイス100は、例示目的のために簡略化されているが、いくつかの実施形態では、電子デバイス100は、追加の若しくは異なるサブシステム、機能ブロック、要素、及び/又は、通信経路を含む。例えば、電子デバイス100は、ディスプレイサブシステム、電力サブシステム、I/Oサブシステム等を含むことができる。一般に、電子デバイス100は、本明細書で説明する動作を実行するのに十分なサブシステムを含む。
【0017】
電子デバイス100は、計算動作を実行する任意のデバイスであってもよいし、このような任意のデバイスに含まれてもよい。例えば、電子デバイス100は、デスクトップコンピュータ、ラップトップコンピュータ、ウェアラブルコンピューティングデバイス、タブレットコンピュータ、仮想現実又は拡張現実装置、スマートフォン、人工知能(AI)デバイス、サーバ、ネットワーク機器、玩具、AV機器、家電機器、車両等、及び/又は、これらの組み合わせであってもよいし、これらに含まれてもよい。
【0018】
(整流線形ユニット活性化関数)
いくつかの実施形態では、活性化関数機能ブロック104は、整流線形ユニット(ReLU)活性化関数を実行する回路要素を含む。
図2は、いくつかの実施形態による、ReLU活性化関数の結果のグラフと、ReLU活性化関数の近似のハードウェア回路実装と、を示す図である。
図2に示すハードウェア回路は、いくつかの実施形態のハードウェア回路の一般的な例として示されていることに留意されたい。別の実施形態のハードウェア回路は、異なる回路要素及び/又は回路要素の構成を含む。例えば、マルチプレクサ(MUX)を使用する代わりに、いくつかの実施形態は、ANDゲート、XORゲート、トランスミッションゲート、動的ロジック、及び/又は、複合/カスタムロジック等のロジックゲートを使用する。
【0019】
図2に示す実施形態及び
図3~
図5の実施形態の場合、入力(すなわち、
図2の入力200、
図3の入力300等)は、ビット[0]が符号ビットであり、ビット[1]~[N]が数値を表すフォーマットを想定している。別の実施形態では、符号ビットが異なる位置(例えばビット[N])に存在するフォーマット等の他の数値フォーマットが使用される。入力のタイプに応じて、ビット[1]~[N]は、単純な数値(例えば整数)、仮数(mantissa/significand)及び指数情報(例えば浮動小数点値)等を含んでもよいし、これらとして解釈されてもよい。
図2~
図5の楕円で示すように、入力は、例えば64、250等の任意の数のビットを有することができ、ハードウェア回路の対応する構成は、入力200の処理/結果202の生成に使用される。
【0020】
図2のReLU活性化関数の結果のグラフに示すように、関数は、σ(x)として、0未満の全ての入力値xに対して、すなわち、xの全ての負の値を含む第1範囲に対して、結果0を返し、0以上の全ての入力値xに対して、すなわち、xの全ての正の値を含む第2範囲に対して、結果xを返す(この説明を通して、0はxの正の値であると仮定している)。活性化関数機能ブロック104内のハードウェア回路は、負の入力値xの第1範囲に対して0を生成し、正の入力値xの第2範囲に対してxの値を生成することによって、ReLUの入力/結果動作を近似するように構成されている。
【0021】
例えば
図2~
図3等の本明細書のいくつかの例の「近似」は、厳密には「近似した」活性化関数の値であるが、例えば、少なくともいくつかの実際の近似を含む
図4~
図5等の別の例との一貫性を単に保つために、近似として説明することに留意されたい。言い換えると、
図2~
図3のハードウェア回路によるReLUの近似は正確であるが、別の例のハードウェア回路は、正確さが劣る。特に、ニューラルネットワークのトレーニング可能な性質を考慮すると、すなわち、ニューラルネットワークの有向エッジの重みが、近似における全ての軽微な不正確さに対応するようにトレーニング中に調整され得るという事実を考慮すると、別の例の近似は、機能的には正確であり十分であることに留意されたい。また、
図4~
図5では近似のグラフが示されているが、
図2~
図3の近似は結果と同じように見えるので、
図2~
図3では結果のグラフのみが示されている。
【0022】
ハードウェア回路に示すように、符号ビット、すなわち、入力200のビット[0]は、一連のマルチプレクサ(MUX)の選択入力に転送される。各マルチプレクサは、入力200の異なる単一ビットを1つの入力とし、定数0を別の入力とする。例えば、第1(
図2の左端)マルチプレクサは、入力200のビット[1]を1つの入力とし、定数0を他の入力とする。入力200の数値が負である場合、符号ビットは1であり(本明細書の例では1と想定する)、これにより、選択入力を介して、各マルチプレクサは、定数0を、結果202の各ビットに転送する。入力200の数値が正である場合、符号ビットは0であり、これにより、選択入力を介して、各マルチプレクサは、入力200の対応する単一ビットの値を、結果202の各ビットに転送する。さらに、結果の第1/左端のビットは、定数値0に設定される。説明したように動作することによって、ReLUの動作はハードウェア回路により近似され、符号ビットは、ハードウェア回路によって生成された結果202を選択するように、すなわち、ReLU活性化関数の2つの可能な範囲の中から入力200が含まれる範囲を「決定」するように機能する。
【0023】
(漏洩整流線形ユニット活性化関数)
いくつかの実施形態では、活性化関数機能ブロック104は、漏洩整流線形ユニット(漏洩ReLU)活性化関数を実行する回路要素を含む。
図3は、いくつかの実施形態による、漏洩ReLU活性化関数の結果のグラフと、漏洩ReLU活性化関数の近似のハードウェア回路実装と、を示す図である。
図3に示すハードウェア回路は、いくつかの実施形態のハードウェア回路の一般的な例として示されていることに留意されたい。別の実施形態のハードウェア回路は、異なる回路要素及び/又は回路要素の構成を含む。例えば、マルチプレクサ(MUX)を使用する代わりに、いくつかの実施形態は、ANDゲート、XORゲート、トランスミッションゲート、動的ロジック、及び/又は、複合/カスタムロジック等のロジックゲートを使用する。
【0024】
図3の漏洩ReLU活性化関数の結果のグラフに示すように、関数は、σ(x)として、0未満の全ての入力値xに対して、すなわち、xの全ての負の値を含む第1範囲に対して、xの小数値(例えばx/16)の結果を返し、0以上の全ての入力値xに対して、すなわち、xの全ての正の値を含む第2範囲に対して、結果xを返す。活性化関数機能ブロック104内のハードウェア回路は、負の入力値xの第1範囲に対してxの小数値を生成し、正の入力値xの第2範囲に対してxの値を生成することによって、漏洩ReLUの入力/結果動作に近似するように構成されている。
【0025】
図3の例では、入力の上記の「小数」値であるシフトされたバージョンの入力300が、マルチプレクサの入力として使用するために生成される。例えば、入力300の負の値を考慮するための対応する調整で、入力300を4ビット位置だけシフトさせ、入力300を実質的に16で除算することができる。シフト演算後の個々のビットの値は、
図3において、個別のビット毎に「>>」で表されたボックスを用いて示されている。
図3には特定のシフト回路要素が示されていないが、いくつかの実施形態では、シフト演算が、このようなシフト回路要素において、グループとして入力300の全てのビットに対して行われ、シフトされたビットは、示されるようにマルチプレクサに転送される。
【0026】
ハードウェア回路に示すように、符号ビット、すなわち、入力300のビット[0]は、一連のマルチプレクサ(MUX)の選択入力に転送される。各マルチプレクサは、入力300の異なる単一ビットを1つの入力とし、シフト演算が行われた後の入力300の単一ビットの値を他の入力とする。例えば、第1(
図3の左端)マルチプレクサは、入力300のビット[1]を1つの入力とし、シフト演算後の入力300のビット[1]を他の入力とする。入力300の数値が負である場合、符号ビットは1であり、これにより、選択入力を介して、各マルチプレクサは、シフト演算が行われた後の入力300の単一ビットの値を、結果302の各ビットに転送する。入力300の数値が正である場合、符号ビットは0であり、これにより、選択入力を介して、各マルチプレクサは、入力300の対応する単一ビットの値を、結果302の各ビットに転送する。さらに、結果の第1/左端のビットは、定数値0に設定される。説明したように動作することによって、漏洩ReLUの動作はハードウェア回路によって近似され、符号ビットは、ハードウェア回路によって生成された結果302を選択するように、すなわち、漏洩ReLU活性化関数の2つの可能な範囲の中から入力300が含まれる範囲を「決定」するように機能する。
【0027】
いくつかの実施形態では、入力の小数値を、動作中に、すなわち、活性化関数機能ブロック104が起動動作中及び起動動作後に動作している間に調整することができる。例えば、活性化関数機能ブロック104は、小数値x/16を使用して動作してもよいが、小数値x/8又はx/32を使用するように調整されてもよい。これらの実施形態では、対応する小数値を生成するために、例えばx/8には3ビット位置のシフト、x/32には5ビット位置のシフト等のように、入力値に対して異なる量のシフトを実行するように、上述したシフト演算が調整されてもよい。いくつかの実施形態では、シフト量を、電子デバイス100上で実行されているソフトウェアアプリケーション若しくはオペレーティングシステム、プログラマ、ユーザ又はシステム管理者等の外部ソースによって、活性化関数機能ブロック104に提供することができる。例えば、値を、レジスタ、フラグ又はメモリ位置に書き込むことができ、この値は、シフト量、ひいてはxの小数値を決定するためにシフト回路要素によって使用される。
【0028】
(指数線形ユニット活性化関数‐第1実施形態)
いくつかの実施形態では、活性化関数機能ブロック104は、指数線形ユニット(ELU)活性化関数を実施する回路要素を含む。
図4は、いくつかの実施形態による、ELU活性化関数の結果のグラフと、ELU活性化関数の近似と、よるELU活性化関数の近似のハードウェア回路実装と、を示す図である。
図4に示すハードウェア回路は、いくつかの実施形態のハードウェア回路の一般的な例として示されていることに留意されたい。別の実施形態のハードウェア回路は、異なる回路要素及び/又は回路要素の構成を含む。例えば、マルチプレクサ(MUX)を使用する代わりに、いくつかの実施形態は、ANDゲート、XORゲート、トランスミッションゲート、動的ロジック、及び/又は、複合/カスタムロジック等のロジックゲートを使用する。
【0029】
図4のELU活性化関数の結果のグラフに示すように、関数は、f(α、x)として、0から始まり負の値の下方に向かって、すなわち、xの全ての負の値を含む第1範囲に対して、指数関数的に-αに近づくα(e
x-1)の結果を返し、0以上の全ての入力値xに対して、すなわち、xの全ての正の値を含む第2範囲に対して、結果xを返す。
図4のELU活性化関数の近似のグラフに示すように、正の値の第2範囲において、近似は、f(α、x)として、各入力値xに対してxの値を返す。しかし、負の値の第1範囲では、近似は、指数曲線を無視し、全ての入力値に対して定数値-αを返す。活性化関数機能ブロック104内のハードウェア回路は、負の入力値xの第1範囲に対し-αを生成し、正の入力値xの第2範囲に対してxの値を生成することによって、右端のグラフに示すように、ELU活性化関数の入力/結果動作に近似するように構成されている。
【0030】
図4に示すように、ELU活性化関数の結果の近似は、少なくともいくつかの負の値について不正確であり、誤っており、これは、-1~0のELU活性化関数の結果曲線の初期の部分において特に顕著である。不正確ではあるが、特にニュートラルネットワークのトレーニング可能な性質を考えると、近似は機能的には正確で十分である。言い換えると、ELU活性化関数の結果と近似との間の僅かな差は、ニューラルネットワークのトレーニング中に、αへの調整、及び/又は、対応する有向エッジの重みへの調整を用いて補正することができる。説明したように指数関数の正確な結果を計算する必要性を回避することによって、これらの実施形態では、ELU活性化関数を(回路の複雑さ及び領域、時間、電力消費量等の点で)評価するのに要する労力を大幅に低減する。
【0031】
ハードウェア回路に示すように、符号ビット、すなわち、入力400のビット[0]は、複数のマルチプレクサ(MUX)の選択入力に転送される。各マルチプレクサは、入力400の異なる単一ビットを1つの入力とし、定数-αの対応するビットを他の入力とする。例えば、第1(
図4の左端)マルチプレクサは、入力400のビット[1]を1つの入力とし、定数-αの対応するビットを他の入力とする。入力400の数値が負である場合、符号ビットは1であり、これにより、選択入力を介して、各マルチプレクサは、定数-αを結果402の各ビットに転送する。入力400の数値が正である場合、符号ビットは0であり、これにより、選択入力を介して、各マルチプレクサは、入力400の対応する単一ビットの値を、結果402の各ビットに転送する。さらに、結果の第1/左端のビットは、入力400の符号ビットと等しく設定される。説明したように動作することによって、ELUの動作がハードウェア回路によって近似され、符号ビットは、ハードウェア回路によって生成された結果402を選択するように、すなわち、ELU活性化関数の2つの可能な範囲の中から入力400が含まれる範囲を「決定」するように機能する。
【0032】
(指数線形ユニット活性化関数‐第2実施形態)
上述したように、いくつかの実施形態では、活性化関数機能ブロック104は、ELU活性化関数を実行する回路要素を含む。
図5は、いくつかの実施形態による、ELU活性化関数の結果のグラフと、ELU活性化関数の近似と、ELU活性化関数の近似のハードウェア回路実装と、を示す図である。
図5に示すハードウェア回路は、いくつかの実施形態のハードウェア回路の一般的な例として示されていることに留意されたい。別の実施形態のハードウェア回路は、異なる回路要素及び/又は回路要素の構成を含む。例えば、マルチプレクサ(MUX)を使用する代わりに、いくつかの実施形態は、ANDゲート、XORゲート、トランスミッションゲート、動的ロジック、及び/又は、複合/カスタムロジック等のロジックゲートを使用する。
【0033】
図5と同様に、
図4は、ELU活性化関数を実行する回路要素を有する活性化関数機能ブロック104の一実施形態を示すことを想起されたい。
図4と
図5の違いは、ELU活性化関数の特定の近似にある。後述するように、
図4で使用した2つの範囲と対照的に、
図5に示す近似は、第3範囲を含み、この第3範囲では、別の線形関数を使用してELU関数の一部が近似される。従って、
図5のハードウェア回路の方が少し複雑だが、活性化関数機能ブロック104によって生成される結果は、完全ではないが、より正確にELU活性化関数の結果を複製する。
【0034】
図5のELU活性化関数の結果のグラフに示すように、関数は、f(α、x)として、0から始まり負の値の下方に向かって、すなわち、xの全ての負の値を含む第1範囲に対して、指数関数的に-αに近づくα(e
x-1)の結果を返し、0以上の全ての入力値xに対して、すなわち、xの全ての正の値を含む第2範囲に対して、結果xを返す。
図5のELU活性化関数の近似のグラフに示すように、正の値の第2範囲において、近似は、f(α、x)として、各入力値xに対してxの値を返す。しかし、負の値の第1範囲では、近似は、指数曲線を無視し、負の値に対して2つの異なる種類の結果を返す。-1以上0未満の入力値の場合、近似は、f(α、x)として、各入力値xに対してαxの値を返し、これは、-1~0の近似の急勾配において観察できる。-1未満の入力値の場合、近似は、f(α、x)として、全ての入力値に対して-αの定数値を返す。活性化関数機能ブロック104内のハードウェア回路は、負の入力値の第1範囲内の-1~0の入力値に対してαxを生成し、負の入力値の第1範囲内の-1未満の入力値に対して-αを生成し、0及び正の入力値xの第2範囲に対してxの値を生成することによって、ELUの入力/結果動作に近似するように構成されている。
【0035】
図5に示すように、ELU活性化関数の結果の近似は、少なくともいくつかの負の値について不正確であり、誤っており、これは、-1~0のELU活性化関数の結果曲線の初期の部分において特に顕著である。不正確ではあるが、特にニュートラルネットワークのトレーニング可能な性質を考えると、近似は、機能的には正確で十分である。言い換えると、ELU活性化関数の結果と近似との間の僅かな差は、ニューラルネットワークのトレーニング中に、αへの調整、及び/又は、対応する有向エッジの重みへの調整を用いて補正することができる。説明したように指数関数の正確な結果を計算する必要性を回避することによって、これらの実施形態では、ELU活性化関数を(回路の複雑さ及び領域、時間、電力消費量等の点で)評価するのに要する労力を大幅に低減する。
【0036】
図5の例では、入力の入力値xに対する前述のαxの値として機能するシフトされたバージョンの入力500が、特定のマルチプレクサに対する入力として使用するために生成される。例えば、αが2に等しいと仮定すると、
図5の例で行われるように、入力500は、入力500の負の値を考慮するための対応する調整を用いて、1ビット位置だけシフトされ、入力500は実質的に2で乗算され得る。シフト演算後の個々のビットの値は、
図5において、個々のビット毎に「>>」で表されたボックスを用いて示される。特定のシフト回路要素が
図5に示されていないが、いくつかの実施形態では、このようなシフト回路要素において、シフト演算が入力500の全てのビットに対してグループとして行われ、シフトされたビットは、図示したようにマルチプレクサに転送される。
【0037】
次に、
図5に示すハードウェア回路について説明する。この説明では、
図5に示すマルチプレクサの最上段の行が「第1行」と呼ばれ、マルチプレクサの最下段の行が「第2行」と呼ばれる。ハードウェア回路に示すように、入力500のビット[1]は、比較回路(「=-1」で表すボックスを用いて
図5に示されている)に転送され、比較回路は、入力500が1に等しいと入力500のビット[1]が示す場合に、出力をアサートする(例えば1に設定する)。ここで、負の数は切り捨てられることが想定され、よって、-1の値は、入力500の実際の数値が-1~0の間の何れかの数値であること、すなわち、-1より大きい負の小数であることを意味する。入力500の特定のビット(ビット[1])は、比較回路において、入力500が1に等しいかどうかを決定するために使用されると説明していることに留意されたい。しかし、いくつかの実施形態では、この決定を行うために、異なる1つ以上のビット配列が使用される。一般に、これらの実施形態は、入力500の整数部分をチェックして、整数部分が1(例えば21、5、又は、別の値ではない)に等しいかどうかを決定し、整数部分が1に等しいと決定した場合に結果をアサートする。
【0038】
比較回路によって出力された結果は、ANDゲートの1つの入力として使用され、ANDゲートの他の入力は、入力500の符号ビット、すなわち、ビット[0]が使用される。入力500が負の場合、符号ビットは1であることを想起されたい。これにより、比較回路によって実行されるチェックと組み合わされると、ANDゲートによって出力される結果は、入力500が-1~0の負の値であるかどうかを示す。
【0039】
ANDゲートによって出力された結果は、第1行のマルチプレクサ(MUX)の選択入力に転送される。第1行の各マルチプレクサは、定数-αの異なる対応するビットを1つの入力とし、シフト演算が行われた後の入力500の単一ビットの値を他の入力とする。例えば、第1行における第1(
図5の左端)マルチプレクサは、定数-αの対応するビットを1つの入力とし、シフト演算後の入力500のビット[1]を他の入力とする。ANDゲートによって出力された結果が1である場合(すなわち、入力500が-1~0の負の値である場合)、選択入力を介して、第1行の各マルチプレクサは、シフト演算が行われた後の入力500の単一ビットの値を、第2行の対応するマルチプレクサの1つの入力に転送する。ANDゲートによって出力された結果が0である場合(すなわち、入力500が-1未満の負の値である場合)、選択入力を介して、第1行の各マルチプレクサは、定数-αの対応するビットの値を、第2行の対応するマルチプレクサの1つの入力に転送する。
【0040】
第2行のマルチプレクサは、選択入力として、入力500の符号ビットを受信する。第2行の各マルチプレクサは、入力500の異なる単一ビットを1つの入力とし、第1行の対応するマルチプレクサの出力を他の入力とする。例えば、第2行における第1(
図5の左端)マルチプレクサは、入力500のビット[1]を1つの入力とし、第1行の第1/左端のマルチプレクサの出力を他の入力とする。入力500の数値が負である場合、符号ビットは1であり、これにより、選択入力を介して、各マルチプレクサは、第1行の対応するマルチプレクサの出力の値を、結果502の各ビットに転送する。入力500の数値が正である場合、符号ビットは0であり、これにより、選択入力を介して、各マルチプレクサは、入力500の対応する単一ビットの値を、結果502の各ビットに転送する。さらに、結果の第1/左端のビットは、入力400の符号ビットと等しく設定される。説明したように動作することによって、ELUの動作がハードウェア回路によって近似され、符号ビット及び入力500の整数部分は、ハードウェア回路によって生成された結果502を選択するように、すなわち、ELU活性化関数の3つの可能な範囲の中から入力500が含まれる範囲を「決定」するように機能する。
【0041】
(他の活性化関数)
上述した活性化関数、すなわち、ReLU、漏洩ReLU及びELUは、活性化関数機能ブロック104で実行され得る多数の活性化関数のうちの3つに過ぎない。一般に、対応する範囲で2つ以上の線形関数を使用して近似することができる全ての活性化関数を、説明する実施形態で実行することができる。他の活性化関数のいくつかの例には、双曲線正接(tanh)活性化関数、ソフト‐ステップ/ロジスティック活性化関数、バイナリステップ活性化関数、ソフト‐サイン活性化関数等が挙げられる。いくつかの実施形態では、ReLU等の活性化関数の導関数を、活性化関数機能ブロック104で実行することができる。いくつかの実施形態では、上述したシフトと同様に、結果値を生成するために使用される様々な回路要素を使用して、活性化関数機能ブロック104で各活性化関数の近似を実行することができる。
【0042】
様々な図で示すように、特定の数の範囲を実施することは、マルチプレクサ、ANDゲート等の回路要素を追加して、入力が対応する範囲内の場合に、活性化関数の結果が活性化関数機能ブロック104から出力されるようにすることを含む。例えば、2を超える全ての範囲に対して、対応する選択入力を有するマルチプレクサの別の層を追加することができる(いくつかの選択入力は、
図2~
図5に示す選択入力と比べると、比較的複雑になり得る)。
【0043】
(活性化関数の結果の生成)
説明する実施形態は、活性化関数機能ブロック(例えば、活性化関数機能ブロック104)内の対応するハードウェア回路を使用して、活性化関数の結果を生成するための動作を実行する。
図6は、いくつかの実施形態による、活性化関数の結果を生成するプロセスを示すフローチャートである。
図6に示す動作は、いくつかの実施形態によって実行される機能の一般的な例として示されていることに留意されたい。他の実施形態によって実行される動作には、異なる動作及び/又は異なる順序で実行される動作が含まれる。さらに、プロセスを説明する際に特定のメカニズム(例えば、活性化関数機能ブロック104)が使用されるが、いくつかの実施形態では、他のメカニズムが動作を実行することができる。
【0044】
図6の説明では、
図2に示すハードウェア回路を用いた活性化関数機能ブロックで実行される活性化関数として、ReLU活性化関数が使用される。さらに、ニュートラルネットワーク内のノードの動作を実行するために、活性化関数機能ブロックが使用されていると想定する。言い換えると、任意の目的でReLU関数を評価するために使用することができる汎用機能ブロックである活性化関数機能ブロックが、ニューラルネットワーク内の所定のノードのReLU関数を評価するために使用されている。
図6では、ReLU関数について説明するが、他の実施形態は、他の活性化関数及び/又は他のハードウェア回路の構成を使用する。
【0045】
さらに、
図6の説明では、符号付き整数値、浮動小数点値等の数値を表す複数のビットを含む入力であって、対応する部分に符号ビット及び数値を表す複数のビットを含む入力を、活性化関数機能ブロックが受信するものとして説明する。ニューラルネットワークの構成、すなわち、活性化関数が評価されているノードに接続されている前/上流のノードの数に応じて、活性化関数機能ブロックが受信する入力は、ニューラルネットワーク内の前/上流のノードからの2つ以上の重み付けされた出力の合計であってもよいし、ニューラルネットワーク内の単一の前/上流のノードからの重み付けされた出力であってもよい。例えば、ステップ600で受信される入力は、ニューラルネットワークの入力ノードの重み付けされた出力、ニューラルネットワーク内の前の中間ノードの活性化関数の重み付けされた結果、又は、ニューラルネットワーク内の前のノードからの重み付けされた出力及び/若しくは重み付けされた結果の合計であってもよい。
【0046】
図6に示すプロセスは、活性化関数機能ブロックが、複数のビットを含む入力を受信したときに開始する(ステップ600)。上述したように、この動作の間、活性化関数機能ブロックは、符号ビットと、数値を表すビットと、を表す複数のビットを含む入力を受信する。
【0047】
次に、活性化関数機能ブロック内のハードウェア回路は、入力のビットのサブセットに基づいて、複数の範囲の中から、入力が含まれる範囲を決定する(ステップ602)。この動作の間、ハードウェア回路は、ReLU活性化関数に関して、入力が負の値(すなわち、0未満の任意の値)を有するか、正の値(すなわち、0を含む0以上の任意の値)を有するかを決定する。この「決定」を行うために、ハードウェア回路は、入力の符号ビットを、ハードウェア回路内のマルチプレクサの選択入力に転送する(
図2参照)。上述したように、選択入力により、各マルチプレクサは、マルチプレクサの2つの入力のうち出力に転送する1つの入力を選択し、これにより、入力が含まれる範囲が選択される。言い換えると、ハードウェア回路は、入力の値が含まれる範囲に基づいて、結果を生成する。
【0048】
本明細書で使用する「決定」とは、一般的な用語であり、別個の決定動作又はそれによる具体的な結果を意味するものではない。代わりに、「決定」という用語は、所望の結果が活性化関数機能ブロックによって生成されるように、ハードウェア回路が所定の対応する範囲をどのように処理するかを説明するために使用される。
【0049】
また、ビットのサブセットのみが決定動作に使用されることに留意されたい。具体的には、単一ビットである符号ビットは、決定動作で使用される唯一のビットである。説明する実施形態では、入力の1ビットのみを使用して、入力が含まれる範囲を決定し、対応する結果を生成することが可能であるため、活性化関数機能ブロック内のハードウェア回路は、他の比較演算(より大きい、より小さい、以上である、等)を行う回路よりも単純にすることができ、これは、活性化関数機能ブロックが、より少ない電力を必要とし、より低い設計複雑度を有することができ、半導体レイアウト又は回路実装上でより少ないスペースを占めることができること等を意味する。
【0050】
次に、ハードウェア回路は、範囲に関連する線形関数の結果を生成する(ステップ604)。この動作では、ハードウェア回路は、各マルチプレクサの出力に、選択入力によって選択された入力の値を生成する。ReLU関数の場合、各マルチプレクサの出力は、入力が含まれる範囲が負であるか正であるかに応じて、入力の対応するビットの値又は定数値0となる。例えば、入力が正の値であり、マルチプレクサのうち特定の1つへの入力の対応するビットの値が1である(すなわち、正の値の範囲内である)場合、その特定のマルチプレクサの出力は、1である。一方、入力が負の値である場合、その特定のマルチプレクサの出力は、定数0である。次に、活性化関数機能ブロックによって出力された結果は、場合によっては重み付けされた後に、ニューラルネットワーク内の下流のノード(後続の中間ノード又は出力ノード等)に転送され、そこで処理される。
【0051】
いくつかの実施形態では、コンピューティングデバイス(例えば電子デバイス100及び/又はその一部)は、非一時的なコンピュータ可読記憶媒体に記憶されたコード及び/又はデータを使用して、本明細書で説明する動作の一部又は全てを実行する。より具体的には、コンピューティングデバイスは、説明する動作を実行する場合に、コンピュータ可読記憶媒体からコード及び/又はデータを読み出して、コードを実行する及び/又はデータを使用する。コンピュータ可読記憶媒体は、コンピューティングデバイスによって使用されるコード及び/又はデータを記憶する任意のデバイス、媒体又はこれらの組み合わせであってもよい。例えば、コンピュータ可読記憶媒体は、フラッシュメモリ、ランダムアクセスメモリ(eDRAM、RAM、SRAM、DRAM、DDR、DDR2/DDR3/DDR4 SDRAM等)、読み出し専用メモリ(ROM)、及び/若しくは、磁気若しくは光学記憶媒体(例えばディスクドライブ、磁気テープ、CD、DVD)を含む揮発性メモリ又は不揮発性メモリを含むことができるが、これらに限定されない。
【0052】
いくつかの実施形態では、1つ以上のハードウェアモジュールは、本明細書で説明する動作を実行するように構成されている。例えば、ハードウェアモジュールは、1つ以上のプロセッサ/コア/中央処理装置(CPU)、特定用途向け集積回路(ASIC)チップ、フィールドプログラマブルゲートアレイ(FPGA)、計算ユニット、組み込みプロセッサ、グラフィックスプロセッサ(GPU)/グラフィックコア、パイプライン、アクセラレーテッド処理ユニット(APU)、システム管理ユニット、電力コントローラ、及び/又は、他のプログラマブルロジックデバイスを含むことができるが、これらに限定されない。このようなハードウェアモジュールが起動されると、ハードウェアモジュールは、動作の一部又は全てを実行する。いくつかの実施形態では、ハードウェアモジュールは、命令(プログラムコード、ファームウェア等)を実行することによって動作を実行するように構成された1つ以上の汎用回路を含む。
【0053】
いくつかの実施形態では、本明細書で説明する構造及びメカニズムの一部又は全てを表すデータ構造(例えば、処理回路102、活性化関数機能ブロック104、及び/又は、これらの一部)が、データベース又は他のデータ構造を含む非一時的なコンピュータ可読記憶媒体に記憶され、データベース又は他のデータ構造は、コンピューティングデバイスにより読み出され、構造及びメカニズムを含むハードウェアを製造するために直接的又は間接的に使用され得る。例えば、データ構造は、Verilog又はVHDL等のハイレベル設計言語(HDL)におけるハードウェア機能の動作レベル記述又はレジスタ転送レベル(RTL)記述であってもよい。記述は、合成ツールにより読み出され、合成ツールは、記述を合成して、上述した構造及びメカニズムを含むハードウェアの機能を表すゲート/回路要素のリストを含むネットリストを、合成ライブラリから生成することができる。次に、ネットリストは、マスクに適用する幾何学形状を記述するデータセットを生成するために構成され、ルーティングされる。次いで、上述した構造及びメカニズムに対応する1つ以上の半導体回路(例えば、集積回路)を製造するために、マスクを様々な半導体製造ステップにおいて使用することができる。或いは、コンピュータアクセス可能な記憶媒体上のデータベースは、必要に応じてネットリスト(合成ライブラリの有無にかかわらず)若しくはデータセット、又は、グラフィックデータシステム(GDS)IIデータであってもよい。
【0054】
この説明では、いくつかの実施形態を説明する際に、機能ブロックを参照することができる。一般に、機能ブロックは、説明する動作を実行する1つ以上の相互に関連する回路要素(場合によっては、多数の回路要素)を含む。例えば、回路要素は、集積回路、ディスクリート回路要素等を含むことができる。いくつかの実施形態では、機能ブロック内の回路は、説明する動作を実行するためにプログラムコード(例えば、マイクロコード、ファームウェア、アプリケーション等)を実行する回路を含む。例えば、機能ブロックは、対応するプログラムコードを実行するための汎用回路又は専用回路を有する1つ以上の処理パイプライン、計算ユニット、処理回路等を含むことができる。
【0055】
この説明では、変数又は不特定の値(すなわち、値の特定のインスタンスを持たない値の一般的な説明)は、N等の文字で表される。本明細書で使用するように、同様の文字を他の箇所で使用する場合があるが、各々の場合での変数及び不特定の値は必ずしも同じではなく、すなわち、一般的な変数及び不特定の値のいくつか又は全てに対して意図される様々な変数量及び値が存在し得る。言い換えると、この説明で変数及び不特定の値を表すのに使用されるN及び任意の他の文字は、必ずしも互いに関連するわけではない。
【0056】
実施形態の上記の説明は、例示及び説明のためにのみ示されたものである。これらは、網羅的であること、又は、実施形態を開示された形態に限定することを意図していない。従って、当業者には多くの変更及び変形が明らかである。さらに、上記の開示には、実施形態を限定することを意図していない。実施形態の範囲は、添付の特許請求の範囲によって定義される。