IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ オキュラス ブイアール,エルエルシーの特許一覧

特表2022-538750ニューラルネットワークのためのカウンタベースの乗算累算回路
<>
  • 特表-ニューラルネットワークのためのカウンタベースの乗算累算回路 図1A
  • 特表-ニューラルネットワークのためのカウンタベースの乗算累算回路 図1B
  • 特表-ニューラルネットワークのためのカウンタベースの乗算累算回路 図1C
  • 特表-ニューラルネットワークのためのカウンタベースの乗算累算回路 図1D
  • 特表-ニューラルネットワークのためのカウンタベースの乗算累算回路 図2
  • 特表-ニューラルネットワークのためのカウンタベースの乗算累算回路 図3A
  • 特表-ニューラルネットワークのためのカウンタベースの乗算累算回路 図3B
  • 特表-ニューラルネットワークのためのカウンタベースの乗算累算回路 図4
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-09-06
(54)【発明の名称】ニューラルネットワークのためのカウンタベースの乗算累算回路
(51)【国際特許分類】
   G06N 3/063 20060101AFI20220830BHJP
【FI】
G06N3/063
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2021571013
(86)(22)【出願日】2020-06-19
(85)【翻訳文提出日】2022-01-24
(86)【国際出願番号】 US2020038782
(87)【国際公開番号】W WO2021003032
(87)【国際公開日】2021-01-07
(31)【優先権主張番号】16/460,719
(32)【優先日】2019-07-02
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.ブルートゥース
(71)【出願人】
【識別番号】515046968
【氏名又は名称】メタ プラットフォームズ テクノロジーズ, リミテッド ライアビリティ カンパニー
【氏名又は名称原語表記】META PLATFORMS TECHNOLOGIES, LLC
(74)【代理人】
【識別番号】110002974
【氏名又は名称】弁理士法人World IP
(72)【発明者】
【氏名】ライ, リャンジェン
(72)【発明者】
【氏名】チャン, ピアス イ-ジェン
(57)【要約】
本明細書の開示は、ニューラルネットワークの計算効率を改善するシステム、方法、および、デバイスを含む。一態様では、加算器回路類は、ニューラルネットワークの処理からの入力データとニューラルネットワークのための累算データの第1の数のビットとを加算して合計データを生成するように構成される。一態様では、マルチプレクサは、i)累算データの第2の数のビットと、ii)所定の値だけインクリメントされた累算データの第2の数のビットを含むインクリメントされたデータとの間で、加算器回路類からの加算のキャリー値にしたがって選択を行うように構成される。累算データの第2の数のビット、または、インクリメントされたデータのうちの選択された1つが付加される合計データは、付加されたデータを形成し得る。
【選択図】図3A
【特許請求の範囲】
【請求項1】
ニューラルネットワークのための乗算累算回路であって、
前記ニューラルネットワークの処理からの入力データと、前記ニューラルネットワークのための累算データの第1の数のビットとを加算することによって合計データを生成するように構成された加算器回路類と、
i)前記累算データの第2の数のビットと、ii)所定の値だけインクリメントされた前記累算データの前記第2の数のビットを含むインクリメントされたデータとの間で、前記加算器回路類による前記加算のキャリー値にしたがって選択を行うように構成されたマルチプレクサであって、前記累算データの前記第2の数のビットまたは前記インクリメントされたデータのうちの選択された1つが付加された前記合計データは、付加されたデータを形成する、マルチプレクサとを備える、乗算累算回路。
【請求項2】
前記マルチプレクサは、前記加算の前記キャリー値がゼロであることに応答して、前記累算データの前記第2の数のビットを選択するように構成される、請求項1に記載の乗算累算回路。
【請求項3】
前記マルチプレクサは、前記加算の前記キャリー値が1であることに応答して、前記インクリメントされたデータを選択するように構成される、請求項1または2に記載の乗算累算回路。
【請求項4】
前記加算器回路類は、前記付加されたデータの前記第1の数のビットを次のクロックサイクルの間の前記加算器回路類の入力に提供するように設定される、請求項1から3のいずれか一項に記載の乗算累算回路。
【請求項5】
前記マルチプレクサは、前記付加されたデータの前記第2の数のビットを次のクロックサイクルの間の前記マルチプレクサの入力に提供するように設定され、好ましくは、
前記付加されたデータの前記第2の数のビットを1だけインクリメントして前記インクリメントされたデータを生成し、前記インクリメントされたデータを前記マルチプレクサの追加の入力に提供するように構成されるインクリメント回路類を更に備える、請求項1から4のいずれか一項に記載の乗算累算回路。
【請求項6】
前記マルチプレクサは、前記加算器回路類のキャリー出力に結合される制御入力を含み、前記マルチプレクサは、前記加算器回路類の前記キャリー出力から前記加算の前記キャリー値を前記制御入力において受信するように構成される、請求項1から5のいずれか一項に記載の乗算累算回路。
【請求項7】
前記加算器回路類の入力に結合された出力を含み、第1のデータと第2のデータとを乗算して前記入力データを生成するように構成される乗算器回路類を更に備え、好ましくは、前記第1のデータが前記ニューラルネットワークの重みであり、前記第2のデータが前記ニューラルネットワークの活性化値であり、かつ/または、好ましくは、前記第1のデータが第3の数のビットを有し、前記第2のデータが前記第3の数のビットを有し、前記第1の数は前記第3の数の2倍である、請求項1から6のいずれか一項に記載の乗算累算回路。
【請求項8】
ニューラルネットワークのための方法であって、
前記ニューラルネットワークの処理からの入力データと、前記ニューラルネットワークのための累算データの第1の数のビットとを、加算器回路類によって加算して合計データを生成することと、
i)前記累算データの第2の数のビットと、ii)所定の値だけインクリメントされた前記累算データの前記第2の数のビットを含むインクリメントされたデータとの間で、前記加算器回路類からの前記加算のキャリー値にしたがってマルチプレクサによって選択を行うことであって、前記累算データの前記第2の数のビットまたは前記インクリメントされたデータのうちの選択された一方が付加された前記合計データが、付加されたデータを形成する、選択を行うこととを含む、方法。
【請求項9】
前記選択を行うことが、前記マルチプレクサによって、前記加算の前記キャリー値がゼロであることに応答して、前記累算データの前記第2の数のビットを選択することを含む、請求項8に記載の方法。
【請求項10】
前記選択を行うことは、前記マルチプレクサによって、前記加算の前記キャリー値が1であることに応答して、前記インクリメントされたデータを選択することを含む、請求項8または9に記載の方法。
【請求項11】
前記加算器回路類の出力からの前記付加されたデータの前記第1の数のビットを、次のクロックサイクルの間の前記加算器回路類の入力に、前記加算器回路類によって提供することを更に含む、請求項8から10のいずれか一項に記載の方法。
【請求項12】
前記マルチプレクサの出力からの前記付加されたデータの前記第2の数のビットを、次のクロックサイクルの間の前記マルチプレクサの入力に、前記マルチプレクサによって提供することを更に含み、好ましくは、
前記マルチプレクサの前記出力からの前記累算データの前記第2の数のビットを、インクリメント回路類によって、1だけインクリメントして、前記インクリメントされたデータを生成することと、
前記インクリメント回路類によって、前記インクリメントされたデータを前記マルチプレクサの追加の入力に提供することと、を更に含む、請求項8から11のいずれか一項に記載の方法。
【請求項13】
前記マルチプレクサの制御入力において、前記加算器回路類のキャリー出力からの前記加算の前記キャリー値を受信することを更に含む、請求項8から12のいずれか一項に記載の方法。
【請求項14】
乗算器回路類によって、第1のデータと第2のデータとを乗算して前記入力データを生成することを更に含む、請求項8から13のいずれか一項に記載の方法。
【請求項15】
前記第1のデータが前記ニューラルネットワークの重みであり、前記第2のデータが前記ニューラルネットワークの活性化値であり、かつ/または、好ましくは、前記第1のデータが第3の数のビットを有し、前記第2のデータが前記第3の数のビットを有し、前記第1の数は前記第3の数の2倍である、請求項14に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、参照によりその内容全体が全ての目的のために本明細書に組み込まれている、2019年7月2日に出願の米国特許出願第16/460,719号に基づく優先権を主張するものである。
【0002】
本開示は、全体として、カウンタまたはインクリメンタを用いるニューラルネットワークのための乗算累算回路を含むがそれらに限定されない、ニューラルネットワークのための処理機構に関する。
【背景技術】
【0003】
ニューラルネットワークの近年の発展により、例えば、コンピュータビジョン、音声認識、機械翻訳、ソーシャルネットワークフィルタリング、ボードゲームおよびビデオゲームのプレイ、ならびに、医学的診断、他のような、様々な人工知能(AI)タスクが自動的に実施され得る。一実現例では、ニューラルネットワークは、人間の脳のニューロンをモデル化する、複数のノードからなるネットワークを含む。ノードは、それらの入力に対する乗累算のような計算を実施し、計算結果をそれらの後続のノードに提供、送信、または、転送する場合がある。次いで、後続のノードは、それらの入力としてのそれらの前のノードからの計算結果に対して乗累算のような計算を実施し、追加の計算結果をそれらの後続のノードに提供、送信、または、転送する場合がある。(例えば、数千を超える、または、数百万を超えるものを含む)ノードからなる大規模ネットワークによる計算によってAIタスクは実施され得る。しかしながら、大きいノード数に対して乗累算を実施することは、計算量を大きなものとし、AIタスクを遅延させる可能性がある。
【発明の概要】
【0004】
本明細書において開示される様々な実施形態は、ニューラルネットワークのための乗算累算回路に関する。いくつかの実施形態では、乗算累算回路は、ニューラルネットワークの処理からの入力データと、ニューラルネットワークのための累算データの第1の数のビットとを加算することによって合計データを生成するように構成された加算器回路類を含む。いくつかの実施形態では、乗算累算回路は、i)累算データの第2の数のビットと、ii)所定の値だけインクリメントされた累算データの第2の数のビットを含むインクリメントされたデータとの間で、加算器回路類による加算のキャリー値によって、選択を行うように構成されたマルチプレクサを含む。いくつかの実施形態では、累算データの第2の数のビットまたはインクリメントされたデータのうちの選択された1つが付加された(appended)合計データが、付加されたデータを形成する。
【0005】
いくつかの実施形態では、マルチプレクサは、ゼロである加算のキャリー値に応答して、累算データの第2の数のビットを選択するように構成される。いくつかの実施形態では、マルチプレクサは、1である加算のキャリー値に応答して、インクリメントされたデータを選択するように構成される。いくつかの実施形態では、加算器回路類は、付加されたデータの第1の数のビットを次のクロックサイクルの間の加算器回路類の入力に提供するように設定される。いくつかの実施形態では、マルチプレクサは、付加されたデータの第2の数のビットを次のクロックサイクルの間のマルチプレクサの入力に提供するように設定される。いくつかの実施形態では、乗算累算回路は、付加されたデータの第2の数のビットを1だけインクリメントしてインクリメントされたデータを生成し、インクリメントされたデータをマルチプレクサの追加の入力に提供するように構成されるインクリメント回路類を含む。いくつかの実施形態では、マルチプレクサは、加算器回路類のキャリー出力に結合され、加算器回路類のキャリー出力から加算のキャリー値を受信するように構成された制御入力を含む。
【0006】
いくつかの実施形態では、乗算累算回路は、加算器回路類の入力に結合された出力を含む乗算器回路類を含む。いくつかの実施形態では、乗算器回路類は、第1のデータと第2のデータとを乗算して入力データを生成するように構成される。いくつかの実施形態では、第1のデータはニューラルネットワークの重みで、第2のデータはニューラルネットワークの活性化値である。いくつかの実施形態では、第1のデータは第3の数のビットを有し、第2のデータは第3の数のビットを有し、第1の数は第3の数の2倍である。
【0007】
本明細書において開示される様々な実施形態は、ニューラルネットワークのための方法に関する。いくつかの実施形態では、方法は、ニューラルネットワークの処理からの入力データと、ニューラルネットワークのための累算データの第1の数のビットとを、加算器回路類によって加算して合計データを生成することを含む。いくつかの実施形態では、方法は、i)累算データの第2の数のビットと、ii)所定の値だけインクリメントされた累算データの第2の数のビットを含むインクリメントされたデータとの間で、加算器回路類からの加算のキャリー値にしたがってマルチプレクサによって選択を行うことを含む。いくつかの実施形態では、累算データの第2の数のビットまたはインクリメントされたデータのうちの選択された一方が付加された合計データが、付加されたデータを形成する。
【0008】
いくつかの実施形態では、上記選択を行うことは、マルチプレクサによって、ゼロである加算のキャリー値に応答して、累算データの第2の数のビットを選択することを含む。いくつかの実施形態では、上記選択を行うことは、マルチプレクサによって、1である加算のキャリー値に応答して、インクリメントされたデータを選択することを含む。いくつかの実施形態では、方法は、加算器回路類の出力からの付加されたデータの第1の数のビットを、次のクロックサイクルの間の加算器回路類の入力に、加算器回路類によって提供することを含む。いくつかの実施形態では、方法は、マルチプレクサの出力からの付加されたデータの第2の数のビットを、次のクロックサイクルの間のマルチプレクサの入力に、マルチプレクサによって提供することを含む。いくつかの実施形態では、方法は、マルチプレクサの出力からの累算データの第2の数のビットを、インクリメント回路類によって、1だけインクリメントして、インクリメントされたデータを生成することを含む。いくつかの実施形態では、方法は、インクリメント回路類によって、インクリメントされたデータをマルチプレクサの追加の入力に提供することを含む。いくつかの実施形態では、方法は、マルチプレクサの制御入力において、加算器回路類のキャリー出力からの加算のキャリー値を受信することを含む。
【0009】
いくつかの実施形態では、方法は、乗算器回路類によって第1のデータと第2のデータとを乗算して、入力データを生成することを含む。いくつかの実施形態では、第1のデータはニューラルネットワークの重みであり、第2のデータはニューラルネットワークの活性化値である。いくつかの実施形態では、第1のデータは第3の数のビットを有し、第2のデータは第3の数のビットを有し、第1の数は第3の数の2倍である。
【0010】
上記および他の態様ならびに実現例について、以下で詳細に考察する。上述の情報および以下で詳述する説明は、様々な態様および実現例の実例を含み、特許請求する態様および実現例の性質ならびに特徴を理解するための概観または枠組みを提供する。本発明の1つまたは複数の態様および実施形態に組み込むのに好適なものとして、本明細書に記載される任意の特徴は、本開示のあらゆる態様および実施形態全体にわたって一般化できるものであることが意図されるものと理解されるであろう。図面は、様々な態様および実現例の例示ならびに更なる理解を提供し、本明細書に組み込まれるとともに本明細書の一部を構成する。
【0011】
添付図面は縮尺通りに描かれることを意図しない。様々な図面における同様の参照番号および記号は同様の要素を示す。明瞭にするため、全ての図面において全ての構成要素に符号が付されるわけではない。
【図面の簡単な説明】
【0012】
図1A】本開示の例示の一実現例による、人工知能(AI)に関連する処理を実施するシステムの一実施形態を示すブロック図である。
図1B】本開示の例示の一実現例による、AIに関連する処理を実施するデバイスの一実施形態を示すブロック図である。
図1C】本開示の例示の一実現例による、AIに関連する処理を実施するデバイスの一実施形態を示すブロック図である。
図1D】本開示の例示の一実現例によるコンピューティング環境を示すブロック図である。
図2】本開示の例示の一実現例による、図1Cの乗累算(MAC)ユニットを示すブロック図である。
図3A】本開示の例示の一実現例による、図2の累算器を示すブロック図である。
図3B】本開示の例示の一実現例による、図2の累算器を示すのブロック図である。
図4】本開示の例示の一実現例による、ニューラルネットワークのための乗累算を実施するプロセスを示すフローチャートである。
【発明を実施するための形態】
【0013】
特定の実施形態を詳細に示す図面に移る前に、本開示は、明細書に記載されるかまたは図面に例示される、詳細もしくは方法論に限定されないことが理解されるべきである。また、本明細書で使用する専門用語は、単に説明のためのものであって限定とみなされるべきでないことが理解されるべきである。
【0014】
以下の本発明の様々な実施形態についての説明を読むために、本明細書のセクションおよびそれらそれぞれの内容について、以下の説明が有用であり得る。
セクションAは、本発明のシステム、方法、およびデバイスの一実施形態を実践または実現するのに有用な、環境、システム、構成、および/または、他の態様について記載する。
セクションBは、カウンタまたはインクリメンタに基づくニューラルネットワークのための乗累算のためのデバイス、システム、および、方法の実施形態を記載する。
【0015】
A.人工知能に関連する処理のための環境
システム、デバイス、および/または方法の実施形態の詳細についてセクションBで考察する前に、システム、デバイス、および/または方法の特定の実施形態を実践もしくは実現するのに有用な、環境、システム、構成、および/または他の態様について考察するのが有用であり得る。ここで図1Aを参照すると、人工知能(AI)に関連する処理を実施するためのシステムの一実施形態が示される。概要では、システムは、入力データ110を使用してAIに関連する処理を実施することができる、1つまたは複数のAIアクセラレータ108を含む。AIアクセラレータ108として参照しているが、場合によっては、ニューラルネットワークアクセラレータ(NNA)、ニューラルネットワークチップもしくはハードウェア、AIプロセッサ、AIチップなどと呼ばれる。AIアクセラレータ108は、入力データ110および/またはパラメータ128(例えば、重みおよび/またはバイアス情報)にしたがって、AIに関連する処理を実施して、出力データ112を出力または提供することができる。AIアクセラレータ108は、1つもしくは複数のニューラルネットワーク114(例えば、人工ニューラルネットワーク)、1つもしくは複数のプロセッサ24、および/または1つもしくは複数の記憶デバイス126を含むことができ、ならびに/あるいは実装することができる。
【0016】
上述の要素または構成要素はそれぞれ、ハードウェア、またはハードウェアとソフトウェアの組み合わせの形で実装される。例えば、これらの要素または構成要素はそれぞれ、任意のアプリケーション、プログラム、ライブラリ、スクリプト、タスク、サービス、プロセス、あるいはデジタルおよび/またはアナログ要素(例えば、1つもしくは複数のトランジスタ、論理ゲート、レジスタ、メモリデバイス、抵抗素子、導電素子、容量素子)を含むことができる回路類などのハードウェア上で実行する、任意のタイプおよび形態の実行可能命令を含むことができる。
【0017】
入力データ110は、AIアクセラレータ108のニューラルネットワーク114を構成、調整、訓練、および/または活性化するための、ならびに/あるいはプロセッサ124によって処理するための、任意のタイプもしくは形態のデータを含むことができる。ニューラルネットワーク114は、場合によっては、人工ニューラルネットワーク(ANN)と呼ばれる。ニューラルネットワークの構成、調整、および/または訓練は、履歴データなど、(例えば、入力データ110としての)訓練データセットがニューラルネットワークに提供されて処理される、機械学習のプロセスを指すかあるいは含むことができる。調整または構成は、ニューラルネットワーク114を訓練または処理して、ニューラルネットワークが精度を改善するのを可能にすることを指すかまたは含むことができる。ニューラルネットワーク114の調整または構成は、例えば、ニューラルネットワーク114に関する問題のタイプもしくは所望の目標に対して成功することが証明されているアーキテクチャを使用した、ニューラルネットワークの設計、形成、構築、合成、および/または確立を含むことができる。場合によっては、1つまたは複数のニューラルネットワーク114は、同じもしくは類似のベースラインモデルで開始してもよいが、調整、訓練、または学習プロセスの間、ニューラルネットワーク114の結果は、ベースラインモデルであるかあるいは異なる目標もしくは目的のために調整または訓練された異なるニューラルネットワークよりも高いレベルの精度および信頼性で、特定のタイプの入力を処理し、特定のタイプの出力を生成するように、各ニューラルネットワーク114を調整することができるような、十分に異なるものであることができる。ニューラルネットワーク114の調整は、各ニューラルネットワーク114に対して異なるパラメータ128を設定すること、各ニューラルネットワーク114に対してパラメータ128を異なるように微調整すること、または異なる重み(例えば、ハイパーパラメータ、もしくは学習率)、テンソルフローなどを割り当てることを含むことができる。したがって、ニューラルネットワークならびに/あるいはシステムの調整または訓練プロセスおよび目標に基づいて、ニューラルネットワーク114に対して適切なパラメータ128を設定することで、システム全体の性能を改善することができる。
【0018】
AIアクセラレータ108のニューラルネットワーク114は、例えば、畳み込みニューラルネットワーク(CNN)、深層畳み込みネットワーク、順伝播型ニューラルネットワーク(例えば、多層パーセプトロン(MLP))、深層順伝播型ニューラルネットワーク、放射基底関数ニューラルネットワーク、コホネン自己組織化ニューラルネットワーク、回帰型ニューラルネットワーク、モジュール型ニューラルネットワーク、長期/短期メモリニューラルネットワークなど、任意のタイプのニューラルネットワークを含むことができる。ニューラルネットワーク114は、自然言語処理など、データ(例えば、画像、音声、映像)処理、オブジェクトもしくは特徴認識、レコメンダ機能、データもしくは画像分類、データ(例えば、画像)解析などを実施するために展開または使用することができる。
【0019】
一例として、また1つまたは複数の実施形態では、ニューラルネットワーク114は、畳み込みニューラルネットワークとして構成することができ、または畳み込みニューラルネットワークを含むことができる。畳み込みニューラルネットワークは、それぞれ異なる目的に役立ち得る、1つもしくは複数の畳み込みセル(またはプーリング層)およびカーネルを含むことができる。畳み込みニューラルネットワークは、畳み込みカーネル(場合によっては、単に「カーネル」と呼ばれる)を含み、組み込み、および/または使用することができる。畳み込みカーネルは入力データを処理することができ、プーリング層は、例えば、maxなどの非線形関数を使用して、データを単純化し、それによって不要な特徴を低減することができる。畳み込みニューラルネットワークを含むニューラルネットワーク114は、画像、音声、または任意のデータの認識もしくは他の処理を容易にすることができる。例えば、(例えば、センサからの)入力データ110を、ファンネルを形成する畳み込みニューラルネットワークの畳み込み層に渡して、入力データ110の検出された特徴を圧縮することができる。畳み込みニューラルネットワークの第1の層は第1の特性を検出することができ、第2の層は第2の特性を検出することができ、その先も同様である。
【0020】
畳み込みニューラルネットワークは、視覚心像、音声情報、および/または他の任意のタイプもしくは形態の入力データ110を解析するように構成された、深層順伝播型人工ニューラルネットワークのタイプであることができる。畳み込みニューラルネットワークは、最小限の前処理を使用するように設計された、多層パーセプトロンを含むことができる。畳み込みニューラルネットワークは、重み共有アーキテクチャおよび翻訳不変性特性に基づいて、シフト不変または空間不変人工ニューラルネットワークを含むことができ、またはそのように呼ぶことができる。畳み込みニューラルネットワークは、他のデータ分類/処理アルゴリズムと比較して相対的に少ない前処理を使用することができるので、畳み込みニューラルネットワークは、他のデータ分類/処理アルゴリズムのためにマニュアル設計されてもよいフィルタを自動的に学習して、ニューラルネットワーク114の構成、確立、またはセットアップと関連付けられた効率を改善することによって、他のデータ分類/処理技術と比べて技術的利点を提供することができる。
【0021】
ニューラルネットワーク114は、ニューロンもしくはノードの、入力層116および出力層122を含むことができる。ニューラルネットワーク114はまた、ニューロンもしくはノードの、畳み込み層、プーリング層、全結合層、および/または正規化層を含むことができる、1つまたは複数の隠れ層118、119を有することができる。ニューラルネットワーク114では、各ニューロンは、前の層におけるいくつかの位置から入力を受信することができる。全結合層では、各ニューロンは、前の層の全ての要素からの入力を受信することができる。
【0022】
ニューラルネットワーク114の各ニューロンは、前の層の受容野からの入力値に何らかの関数を適用することによって、出力値を計算することができる。入力値に適用される関数は、重みのベクトルおよびバイアス(一般的には実数)によって指定される。ニューラルネットワーク114における(例えば、訓練フェーズ中の)学習は、バイアスおよび/または重みを漸増的に調節することによって進行することができる。重みのベクトルおよびバイアスは、フィルタと呼ぶことができ、入力の何らかの特徴(例えば、特定の形状)を表すことができる。畳み込みニューラルネットワークの際立った特徴は、多くのニューロンが同じフィルタを共有できることである。これにより、各受容野が独自のバイアスおよび重みのベクトルを有するのではなく、単一のバイアスおよび重みの単一のベクトルを、該フィルタを共有する全ての受容野にわたって使用することができるので、メモリフットプリントが低減される。
【0023】
例えば、畳み込み層では、システムは、畳み込み演算を入力層116に適用して、結果を次の層に渡すことができる。畳み込みは、個々のニューロンの応答をエミュレートして刺激を入力することができる。各畳み込みニューロンは、その受容野に対してのみデータを処理することができる。畳み込み演算は、全結合順伝播型ニューラルネットワークと比較して、ニューラルネットワーク114で使用されるニューロンの数を低減することができる。したがって、畳み込み演算は、自由パラメータの数を低減して、より少ないパラメータでネットワークをより深層化することを可能にすることができる。例えば、入力データ(例えば、画像データ)サイズにかかわらず、同じ共有重みをそれぞれ有するサイズ5×5のタイリング領域は、25個のみの学習可能パラメータを使用してもよい。このように、畳み込みニューラルネットワークを有する第1のニューラルネットワーク114は、逆伝播を使用することによって多くの層を有する従来の多層ニューラルネットワークを訓練する際の、勾配消失または発散の問題を解決することができる。
【0024】
ニューラルネットワーク114(例えば、畳み込みニューラルネットワークで構成される)は、1つまたは複数のプーリング層を含むことができる。1つまたは複数のプーリング層は、ローカルプーリング層またはグローバルプーリング層を含むことができる。プーリング層は、1つの層におけるニューロンクラスタの出力を組み合わせて、次の層における単一のニューロンとすることができる。例えば、最大プーリングは、前の層におけるニューロンのクラスタそれぞれからの最大値を使用することができる。別の例は、前の層におけるニューロンのクラスタそれぞれからの平均値を使用することができる、平均プーリングである。
【0025】
ニューラルネットワーク114(例えば、畳み込みニューラルネットワークで構成される)は、全結合層を含むことができる。全結合層は、1つの層の全てのニューロンを別の層の全てのニューロンに結合することができる。ニューラルネットワーク114は、畳み込み層で重みを共有して構成することができ、それは同じフィルタが層内の各受容野に使用されることを指すことができ、それにより、メモリフットプリントが低減され、第1のニューラルネットワーク114の性能が改善される。
【0026】
隠れ層118、119は、入力データ(例えば、仮想現実システムなどからのセンサデータ)に基づいて、情報を検出するように調整または構成されるフィルタを含むことができる。システムがニューラルネットワーク114(例えば、畳み込みニューラルネットワーク)の各層を通るにつれて、システムは、第1の層からの入力を翻訳し、変換された入力を第2の層に出力することができ、その先も同様である。ニューラルネットワーク114は、検出、処理、および/または計算されるオブジェクトもしくは情報のタイプ、ならびに入力データ110のタイプに基づいて、1つまたは複数の隠れ層118、119を含むことができる。
【0027】
いくつかの実施形態では、畳み込み層は、ニューラルネットワーク114(例えば、CNNとして構成される)のコアビルディングブロックである。層のパラメータ128は、小さい受容野を有するが、入力ボリュームの深さ全体を通って延在する、学習可能なフィルタ(またはカーネル)のセットを含むことができる。順方向パスの間、各フィルタは、入力ボリュームの幅および高さにわたって畳み込まれて、フィルタのエントリと入力との間のドット積を計算し、該フィルタの二次元活性化マップを作成する。結果として、ニューラルネットワーク114は、入力のある空間位置である特定のタイプの特徴を検出すると活性化する、フィルタを学習させることができる。深さ次元に沿って全てのフィルタの活性化マップを積み重ねることで、畳み込み層の全出力ボリュームが形成される。したがって、出力ボリュームの全てのエントリは、入力の小さい領域に注目し、同じ活性化マップのニューロンとパラメータを共有する、ニューロンの出力として解釈することもできる。畳み込み層では、ニューロンは、前の層の制限されたサブエリアから入力を受信することができる。一般的に、サブエリアは正方形形状のもの(例えば、サイズ5×5)である。ニューロンの入力エリアはその受容野と呼ばれる。そのため、全結合層では、受容野は前の層全体である。畳み込み層では、受容エリアは前の層全体よりも小さいものであり得る。
【0028】
第1のニューラルネットワーク114は、(例えば、入力データ110に基づいて、オブジェクト、イベント、ワード、および/または他の特徴の確率を検出もしくは決定することによって)入力データ110を検出、分類、セグメント化、および/または翻訳するように訓練することができる。例えば、ニューラルネットワーク114の第1の入力層116は、入力データ110を受信し、入力データ110を処理してデータを第1の中間出力に変換し、第1の中間出力を第1の隠れ層118に伝達することができる。第1の隠れ層118は、第1の中間出力を受信し、第1の中間出力を処理して第1の中間出力を第2の中間出力に変換し、第2の中間出力を第2の隠れ層119に伝達することができる。第2の隠れ層119は、第2の中間出力を受信し、第2の中間出力を処理して第2の中間出力を第3の中間出力に変換し、第3の中間出力を、例えば出力層122に伝達することができる。出力層122は、第3の中間出力を受信し、第3の中間出力を処理して第3の中間出力を出力データ112に変換し、出力データ112を(例えば、場合によっては、ユーザに対するレンダリングのため、格納のためなど、後処理エンジンに)伝達することができる。出力データ112は、例として、オブジェクト検出データ、強化/翻訳/拡張されたデータ、推奨、分類、および/またはセグメント化されたデータを含むことができる。
【0029】
再び図1Aを参照すると、AIアクセラレータ108は、1つまたは複数の記憶デバイス126を含むことができる。記憶デバイス126は、AIアクセラレータ108と関連付けられた任意のタイプもしくは形態のデータを、格納、保持、または維持するように、設計または実装することができる。例えば、データは、AIアクセラレータ108によって受信される入力データ110、および/または出力データ112(例えば、次のデバイスもしくは処理段階に出力される前)を含むことができる。データは、ニューラルネットワーク114および/またはプロセッサ124の処理段階のいずれかに使用される、またはいずれかからの、中間データを含むことができる。データは、記憶デバイス126から読み取るかまたはアクセスすることができる、ニューラルネットワーク114のニューロンに入力される、また該ニューロンで処理する、1つもしくは複数のオペランドを含むことができる。例えば、データは、記憶デバイス126に格納し、そこから読み取るかまたはアクセスすることができる、入力データ、重み情報、および/またはバイアス情報、活性化関数情報、ならびに/あるいは1つもしくは複数のニューロン(またはノード)のためのパラメータ128、および/またはニューラルネットワーク114の層を含むことができる。データは、記憶デバイス126に書き込み、またそこに格納することができる、ニューラルネットワーク114のニューロンからの出力データを含むことができる。例えば、データは、記憶デバイス126に転送するかもしくは書き込み、格納することができる、ニューラルネットワーク114の1つもしくは複数のニューロン(またはノード)および/または層のための、活性化データ、改良もしくは更新されたデータ(例えば、訓練段階などからの重み情報および/またはバイアス情報、活性化関数情報、および/または他のパラメータ128)を含むことができる。
【0030】
いくつかの実施形態では、AIアクセラレータ108は1つまたは複数のプロセッサ124を含むことができる。1つまたは複数のプロセッサ124は、ニューラルネットワーク114またはAIアクセラレータ108のうち任意の1つもしくは複数に対する入力データを前処理するための、ならびに/あるいはニューラルネットワーク114またはAIアクセラレータ108のうち任意の1つもしくは複数に対する出力データを後処理するための、任意の論理、回路類、および/または処理構成要素(例えば、マイクロプロセッサ)を含むことができる。1つまたは複数のプロセッサ124は、ニューラルネットワーク114またはAIアクセラレータ108の1つもしくは複数の演算を構成、制御、および/または管理するための、論理、回路類、処理構成要素、および/または機能性を提供することができる。例えば、プロセッサ124は、ニューラルネットワーク114と関連付けられたデータまたは信号を受信して、(例えば、ニューラルネットワーク114の演算を実装する回路類に対するクロックゲート制御を介して)消費電力を制御または低減してもよい。別の例として、プロセッサ124は、(例えば、AIアクセラレータ108の様々な構成要素における、例えば並列の)別個の処理のため、(例えば、AIアクセラレータ108の同じ構成要素における、異なる時間もしくは段階での)逐次処理のため、あるいは記憶デバイスの異なるメモリスライスに、または異なる記憶デバイスに格納するため、データを区画化および/または再配置してもよい。いくつかの実施形態では、プロセッサ124は、特定の重み、活性化関数、および/またはパラメータ情報の識別、選択、ならびに/あるいはニューラルネットワーク114のニューロンおよび/または層へのロードによって、特定の文脈に対して演算を行い、特定のタイプの処理を提供し、ならびに/あるいは特定のタイプの入力データをアドレスするように、ニューラルネットワーク114を構成することができる。
【0031】
いくつかの実施形態では、AIアクセラレータ108は、ディープラーニングおよび/またはAIワークロードを扱うかもしくは処理するように、設計および/または実装される。例えば、AIアクセラレータ108は、人工ニューラルネットワーク、マシンビジョン、および機械学習を含む人工知能用途のため、ハードウェアアクセラレーションを提供することができる。AIアクセラレータ108は、ロボティックス関連、物のインターネット(IoT)関連、または他のデータ集約的もしくはセンサ駆動のタスクを扱う演算向けに構成することができる。AIアクセラレータ108は、マルチコアまたは複数の処理要素(PE)設計を含んでもよく、人工現実(例えば、仮想、拡張、もしくは混合現実)システム、スマートフォン、タブレット、およびコンピュータなど、様々なタイプおよび形態のデバイスに組み込むことができる。AIアクセラレータ108の特定の実施形態は、少なくとも1つのデジタル信号プロセッサ(DSP)、コプロセッサ、マイクロプロセッサ、コンピュータシステム、プロセッサのヘテロジニアスコンピューティング構成、グラフィックス処理装置(GPU)、フィールドプログラマブルゲートアレイ(FPGA)、および/または特定用途向け集積回路(ASIC)を含むかあるいはそれらを使用して実装することができる。AIアクセラレータ108は、トランジスタベース、半導体ベース、および/または量子コンピューティングベースのデバイスであることができる。
【0032】
次に図1Bを参照すると、AIに関連する処理を実施するためのデバイスの例示の一実施形態が示される。概要では、デバイスは、例えば、図1Aに関連して上述した1つまたは複数の特徴を有する、AIアクセラレータ108を含むかまたはそれに対応することができる。AIアクセラレータ108は、1つまたは複数の記憶デバイス126(例えば、スタティックランダムアクセスメモリ(SRAM)デバイスなどのメモリ)、1つまたは複数のバッファ、複数の処理要素(PE)回路またはPE回路のアレイ、他の論理または回路類(例えば、加算器回路類)、ならびに/あるいは他の構造または構成(例えば、相互接続、データバス、クロック回路類、電力ネットワーク)を含むことができる。上述の要素または構成要素はそれぞれ、ハードウェア、または少なくともハードウェアとソフトウェアの組み合わせの形で実装される。ハードウェアは、例えば、回路要素(例えば、1つもしくは複数のトランジスタ、論理ゲート、レジスタ、メモリデバイス、抵抗素子、導電素子、容量素子、および/またはワイヤもしくは導電性コネクタ)を含むことができる。
【0033】
AIアクセラレータ108において実装されたニューラルネットワーク114(例えば、人工ニューラルネットワーク)では、ニューロンは、様々な形態を取ることができ、処理要素(PE)またはPE回路と呼ぶことができる。ニューロンは、対応するPE回路として実装することができ、ニューロンで起こり得る処理/活性化は、PE回路で実施することができる。PEは接続されて、異なるパターンが異なる機能的目的に役立つ、特定のネットワークパターンまたはアレイとなる。人工ニューラルネットワークのPEは、(例えば、半導体の実現例の実施形態では)電気的に動作し、アナログ、デジタル、またはハイブリッドのいずれかであってもよい。生体シナプスの作用に匹敵するために、PE間の接続に、適正なシステム出力を作成するように校正または「訓練」することができる、乗法的な重みを割り当てることができる。
【0034】
PEは、(例えば、ニューロンのマッカロック-ピッツモデルを表す)次式に関して定義することができる。
ζ=Σ (1)
y=σ(ζ) (2)
式中、ζは入力の重み付き合計(例えば、入力ベクトルおよびタップ重みベクトルの内積)であり、σ(ζ)は重み付き合計の関数である。重みおよび入力要素がベクトルwおよびxを形成する場合、重み付き合計ζは単純なドット積となる。
ζ=w・x (3)
これは、活性化関数(例えば、閾値比較の場合)または伝達関数のどちらかと呼ばれることがある。いくつかの実施形態では、1つまたは複数のPEはドット積エンジンと呼ばれる場合がある。ニューラルネットワーク114に対する入力(例えば、入力データ110)xは、入力空間からのものであることができ、出力(例えば、出力データ112)は出力空間の一部である。いくつかのニューラルネットワークでは、出力空間Yは、{0,1}のように単純なものであってもよく、または複雑な多次元(例えば、複数チャネル)空間(例えば、畳み込みニューラルネットワークの場合)であってもよい。ニューラルネットワークは、入力空間の自由度ごとに1つの入力、および出力空間の自由度ごとに1つの出力を有する傾向がある。
【0035】
いくつかの実施形態では、PEは、シストリックアレイとして配置および/または実装することができる。シストリックアレイは、セルまたはノードと呼ばれる、PEなどの結合されたデータ処理装置(DPU)のネットワーク(例えば、ホモジニアスネットワーク)であることができる。各ノードまたはPEは、上流側の隣接するノードまたはPEから受信したデータの関数として、部分結果を独立して計算することができ、結果を自身に格納することができ、結果を例えば下流側に渡すことができる。シストリックアレイは、特定用途向けに構成されたハードワイヤードまたはソフトウェアであることができる。ノードまたはPEは、固定された同一のものであることができ、シストリックアレイの相互接続はプログラム可能であることができる。シストリックアレイは同期型データ転送に依存することができる。
【0036】
再び図1Bを参照すると、PE120に対する入力xは、記憶デバイス126(例えば、SRAM)から読み取られるかまたはアクセスされる、入力ストリーム132の一部であることができる。入力ストリーム132は、PEの1つの行(水平のバンクもしくはグループ)に方向付けることができ、PEのうち1つもしくは複数にわたって共有するか、またはそれぞれのPEに対する入力としてのデータ部分(重なり合うもしくは重なり合わないデータ部分)に区画化することができる。重みストリーム(例えば、記憶デバイス126から読み取られる)における重み134(もしくは重み情報)は、PEの列(垂直のバンクもしくはグループ)に方向付けるかまたは提供することができる。列のPEはそれぞれ、同じ重み134を共有するか、または対応する重み134を受信してもよい。標的のPEそれぞれに対する入力および/または重みは、(例えば、他のPEを通過せずに)標的のPEに(例えば、記憶デバイス126から)直接ルーティングすることができ、あるいは1つもしくは複数のPEを通して(例えば、PEの行もしくは列に沿って)ルーティングすることができる。各PEの出力は、PEアレイの外に(例えば、他のPEを通過せずに)直接ルーティングすることができ、あるいは1つもしくは複数のPEを通して(例えば、PEの列に沿って)PEアレイを出るようにルーティングすることができる。PEの各列の出力は、それぞれの列の加算器回路類において合算または加算し、PEのそれぞれの列に対するバッファ130に提供することができる。バッファ130は、受信した出力を記憶デバイス126に提供、転送、ルーティング、書込み、および/または格納することができる。いくつかの実施形態では、記憶デバイス126によって格納された出力(例えば、ニューラルネットワークの1つの層からの活性化データ)を、記憶デバイス126から検索するかまたは読み取り、後の時間における(ニューラルネットワークの後続層の)処理のため、PE120のアレイに対する入力として使用することができる。特定の実施形態では、記憶デバイス126によって格納された出力を、AIアクセラレータ108に対する出力データ112として、記憶デバイス126から検索するかまたは読み取ることができる。
【0037】
次に図1Cを参照すると、AIに関連する処理を実施するためのデバイスの例示の一実施形態が示される。概要では、デバイスは、例えば、図1Aおよび図1Bに関連して上述した1つまたは複数の特徴を有する、AIアクセラレータ108を含むかまたはそれに対応することができる。AIアクセラレータ108は、1つまたは複数のPE120、他の論理または回路類(例えば、加算器回路類)、ならびに/あるいは他の構造または構成(例えば、相互接続、データバス、クロック回路類、電力ネットワーク)を含むことができる。上述の要素または構成要素はそれぞれ、ハードウェア、または少なくともハードウェアとソフトウェアの組み合わせの形で実装される。ハードウェアは、例えば、回路要素(例えば、1つもしくは複数のトランジスタ、論理ゲート、レジスタ、メモリデバイス、抵抗素子、導電素子、容量素子、および/またはワイヤもしくは導電性コネクタ)を含むことができる。
【0038】
いくつかの実施形態では、PE120は、1つもしくは複数の乗累算(MAC)ユニットまたは回路140を含むことができる。1つまたは複数のPEは、場合によっては、(単独でまたは集合的に)MACエンジンと呼ぶことができる。MACユニットは、乗累算を実施するように構成される。MACユニットは、乗算器回路、加算器回路、および/または累算器回路を含むことができる。乗累算は、2つの数字の積を計算し、その積を累算器に加える。MAC演算は、累算器オペランドa、ならびに入力bおよびcに関連して、次のように表すことができる。
a←a+(b×c) (4)
いくつかの実施形態では、MACユニット140は、組み合わせ論理に実装された乗算器とそれに続く加算器(例えば、組み合わせ論理を含むもの)、ならびに結果を格納する累算器レジスタ(例えば、順序および/または組み合わせ論理を含むもの)を含んでもよい。累算器レジスタの出力は、加算器の1つの入力にフィードバックすることができるので、各クロックサイクルにおいて、乗算器の出力を累算器レジスタに加算することができる。
【0039】
上述したように、MACユニット140は、乗算および加算両方の機能を実施することができる。MACユニット140は2つの段階で演算することができる。MACユニット140は、最初に、第1の段階で所与の数(入力)の積を計算し、結果を第2の段階の演算(例えば、加算および/または累算)のために転送することができる。nビットのMACユニット140は、nビット乗算器、2nビット加算器、および2nビット累算器を含むことができる。(例えば、PEにおける)複数のMACユニット140またはMACユニットのアレイ140は、並列積分、畳み込み、相関、行列乗算、データ分類、および/またはデータ解析タスクのため、シストリックアレイの形で配置することができる。
【0040】
本明細書に記載する様々なシステムおよび/またはデバイスを、コンピューティングシステムに実装することができる。図1Dは、代表的なコンピューティングシステム150のブロック図を示している。いくつかの実施形態では、図1Aのシステムは、コンピューティングシステム150の処理装置156(またはプロセッサ156)の少なくとも一部を形成することができる。コンピューティングシステム150は、例えば、スマートフォン、他の移動電話、タブレットコンピュータ、ウェアラブルコンピューティングデバイス(例えば、スマートウォッチ、眼鏡、ヘッドマウントディスプレイ)、デスクトップコンピュータ、ラップトップコンピュータなどのデバイス(例えばコンシューマデバイス)として実装するか、あるいは分散型コンピューティングデバイスを実装することができる。コンピューティングシステム150は、VR、AR、MR体験を提供するために実装することができる。いくつかの実施形態では、コンピューティングシステム150は、プロセッサ156、記憶デバイス158、ネットワークインターフェース151、ユーザ入力デバイス152、およびユーザ出力デバイス154など、従来の専用またはカスタムのコンピュータ構成要素を含むことができる。
【0041】
ネットワークインターフェース151は、(ローカル/リモート)サーバまたはバックエンドシステムのネットワークインターフェースも接続される、ローカル/ワイドエリアネットワーク(例えば、インターネット)に対する接続を提供することができる。ネットワークインターフェース151は、有線インターフェース(例えば、イーサネット)、ならびに/あるいはWi-Fi、ブルートゥース、またはセルラーデータネットワーク規格(例えば、3G、4G、5G、LTEなど)などの様々なRFデータ通信規格を実装する無線インターフェースを含むことができる。
【0042】
ユーザ入力デバイス152は、ユーザがコンピューティングシステム150に信号を提供するのに用いることができる、任意のデバイス(または複数のデバイス)を含むことができ、コンピューティングシステム150は、特定のユーザ要求または情報を示すものとして信号を解釈することができる。ユーザ入力デバイス152は、キーボード、タッチパッド、タッチスクリーン、マウスもしくは他のポインティングデバイス、スクロールホイール、クリックホイール、ダイアル、ボタン、スイッチ、キーパッド、マイクロフォン、センサ(例えば、モーションセンサ、視線追跡センサなど)などのいずれかまたは全てを含むことができる。
【0043】
ユーザ出力デバイス154は、コンピューティングシステム150がユーザに情報を提供するのに用いることができる、任意のデバイスを含むことができる。例えば、ユーザ出力デバイス154は、コンピューティングシステム150によって生成されるかまたは該システムに送達される画像を表示する、ディスプレイを含むことができる。ディスプレイは、例えば、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)を含む発光ダイオード(LED)、投影システム、陰極線管(CRT)などの様々な画像生成技術を、サポートしている電子部品(例えば、デジタル・アナログもしくはアナログ・デジタル変換器、信号プロセッサなど)とともに組み込むことができる。入力および出力両方のデバイスとして機能する、タッチスクリーンなどのデバイスを使用することができる。ユーザ出力デバイス154は、ディスプレイに加えてまたはディスプレイの代わりに提供することができる。例としては、インジケータ光、スピーカ、触覚「ディスプレイ」デバイス、プリンタなどが挙げられる。
【0044】
いくつかの実現例としては、コンピュータプログラム命令を非一時的なコンピュータ可読記憶媒体に格納する、マイクロプロセッサ、記憶装置、およびメモリなどの電子構成要素が挙げられる。本明細書に記載する特徴の多くは、コンピュータ可読記憶媒体として符号化されたプログラム命令のセットとして指定される、プロセスとして実現することができる。これらのプログラム命令は、1つまたは複数のプロセッサによって実行されると、プログラム命令に示されている様々な動作をプロセッサに実施させる。プログラム命令またはコンピュータコードの例としては、コンパイラによって作成されるものなどの機械コード、およびインタープリタを使用してコンピュータ、電子構成要素、またはマイクロプロセッサによって実行される、より高次のコードを含むファイルが挙げられる。好適なプログラミングを通して、プロセッサ156は、コンピューティングシステム150に対して、サーバまたはクライアントによって実施されるものとして本明細書に記載する機能性、またはメッセージ管理サービスと関連付けられた他の機能性のいずれかを含む、様々な機能性を提供することができる。
【0045】
コンピューティングシステム150は例示であり、変形および修正が可能であることが認識されるであろう。本開示と関連して使用されるコンピュータシステムは、本明細書には具体的に記載しない他の能力を有することができる。更に、コンピューティングシステム150について、特定のブロックを参照して記載しているが、該ブロックは説明の便宜上定義されているものであり、構成部品の特定の物理的配置を示唆しようとするものではないことが理解されるべきである。例えば、異なるブロックを、同じ設備に、同じサーバラックに、または同じマザーボード上に配置することができる。更に、ブロックは必ずしも物理的に別個の構成要素に対応していなくてもよい。ブロックは、例えば、プロセッサをプログラミングするか、または適切な制御回路類を提供することによって、様々な動作を実施するように構成することができ、様々なブロックは、初期の構成がどのように得られるかに応じて再構成可能であってもなくてもよい。本開示の実現例は、回路類およびソフトウェアの任意の組み合わせを使用して実装される電子デバイスを含む、様々な装置で実現することができる。
【0046】
B.ニューラルネットワークのための乗累算のための方法およびデバイス
本明細書の開示は、カウンタまたはインクリメンタに基づくニューラルネットワークのための乗累算のためのシステム、方法、および、デバイスの実施形態を含む。いくつかの態様において、本開示はニューラルネットワークにおいて乗累算(MAC)ユニットの累算の効率を改善することに向けられており、例えば、AIアクセラレータに実装される。MACユニットは、複数の重みと対応する活性化との乗算、および、複数の異なる乗算結果の累算を実施し得る。複数の異なる乗算結果の累算は多数のビットを含む場合があり、計算的に消耗的であり、電力的に非効率的である可能性がある。一態様では、累算加算器の出力は、最下位ビット(LSB)部分および最上位ビット(MSB)部分の2つの部分に分割され得る。LSB部分には乗算結果が加算され得る。一方、マルチプレクサは、例えば、1(例えば、1ビットまたは他の値)だけインクリメントされたMSB部分の合計、および、MSB部分を受信し得る。LSB部分と乗算結果との合計のキャリー出力(合計を実施する累算加算器のオーバーフロー表示またはオーバーフロービットとして提供され得る)に応じて、マルチプレクサは、1だけインクリメントされたMSB部分の合計、または、MSB部分を出力し得る。それから、マルチプレクサの出力は、累算加算器の出力として、LSB部分および乗算結果の合計と組み合わされ得る。いくつかの実施形態では、キャリー出力にしたがった選択のためのマルチプレクサへ追加の入力(例えば、3つ以上の可能な値を有し得る)を提供するために、MSB部分との合計のための複数の可能なインクリメント値が実装され得る。
【0047】
有利であることに、この種の累算加算器は、演算速度を改善し、レイテンシを減らすことができる。例えば、従来のアプローチによる累算では、多数のビットによってキャリーを伝えることが必要である。多数のビットによってキャリーを伝えることは、累算のプロセスを遅延させ得る。例えば、LSB部分だけに対して累算を実施し、LSB部分の累算からのキャリー出力によって、i)MSB部分、または、ii)1だけインクリメントされたMSB部分のいずれかを選択することによって、キャリーは、従来のアプローチにおけるより少ない数のビットによって伝播され得る。それ故、より少ない数のビットによってキャリーを伝えることによって、累算を実施するためのクリティカルパスが減じられ得る。
【0048】
一態様では、入力データは、重みと対応する活性化値または活性化関数とを乗算した乗算結果である。付加されたデータは、次のクロックサイクルの間の累算データとして用いられ得る。それ故、一実施形態では、重みと対応する活性化値または活性化関数とを乗算した乗算結果は1クロックサイクルの間に加算され得、他の重みと対応する活性化値または活性化関数とを乗算した追加の乗算結果は次の1クロックサイクルの間に加算され得る。
【0049】
図2を参照すると、本開示の例示の一実現例による、図1Cの乗累算(MAC)ユニット140のブロック図が示される。いくつかの実施形態では、MACユニット140は、乗算器回路類210A、210B、210C、...210N、加算器回路類215、累算器220、および、レジスタ230を含む。これらの構成要素は、式(4)に関して先に述べたように、例えば、重み205A、205B、...205N、および、活性化値208A、208B、...208Nをともに受信して、付加されたデータ225(「更新された累算データ225」とも称する)を生成するように動作する。他の実施形態では、MACユニット140は、図2に示されるものより多い、とは異なる、または、より少ない構成要素を含む。例えば、またいくつかの実施形態では、加算器回路類215は省略され得、乗算器回路類210の出力は入力データとして累算器220に送られ得る。
【0050】
1つの構成では、各乗算器回路類210Xは重み205Xおよび活性化値208Xを受信して、重み205Xと活性化値208Xとを乗算して乗算結果212Xを生成し、乗算結果212Xを加算器回路類215に提供する。加算器回路類215は、乗算器回路類210A~210Nからの乗算結果を加算して合計データ218を生成し、合計データ218を入力データとして累算器220に提供し得る。1つの構成では、累算器220は、加算器回路類215から合計データ218を、レジスタ230から累算データ235を受信し、付加されたデータ(または、更新された累算データ225)を生成し、付加されたデータ(または、更新された累算データ225)をレジスタ230に提供する。
【0051】
1つのアプローチでは、乗累算は各クロックサイクルごとに実施される。例えば、乗算器回路類210A~210Nは、1クロックサイクルの間に、1セットの重み205A~205N、および、活性化値208A~208Nの対応する1セットを受信することができて、重み205A~205Nの1セットに活性化値208A~208Nの対応するセットを乗算して、このクロックサイクルの間に、1セットの乗算結果212A~212Nを生成する。加算器回路類215は、乗算器回路類210A~210Nからの乗算結果のセットを加算して合計データ218を生成して、このクロックサイクルの間に、合計データ218を累算器220に提供し得る。累算器220は、合計データ218を累算データ235に加えて更新された累算データ225を生成し、更新された累算データ225をレジスタ230に提供し得る。レジスタ230は、このクロックサイクルの間に受信した更新された累算データ225を、次のクロックサイクルの間の累算データ235として出力し得る。次のクロックサイクルの間に、乗算器回路類210A~210N、加算器回路類215、累算器220、および、レジスタ230は、追加のセットの重みおよび対応するセットの活性化値208に対して上記のプロセスを繰り返すことができる。例えば、1個のニューロンまたはノードの入力が50個のニューロンまたはノードの出力に結合されていると仮定すると、MACユニット140は1クロックサイクルの間に並行して計算を実施し得る10個の乗算器回路類210(例えば、Nは10である)を使用することができ、その結果、MACユニット140は5クロックサイクルにおいて50の重みおよび50個の活性化値に対する乗累算を実施し得る。
【0052】
一実現例では、累算器220による多数のビットの累算は計算として非効率であり得る。例えば、重み205が8ビットを有し活性化値が8ビットを有すると仮定すると、乗算結果212は16ビットを有する。N個の加算に対しては、合計データ218はceil(16+log2N)に対応するK個のビットを有する。ここで、ceil()は天井関数である。更に、合計データ218を累算することにより、累算データ235は、K個のビットより多いJ個のビット(例えば、28ビット)を有するようになる。一実現例では、累算器220はJ個の加算器を含み、固定のK個のビットを有する合計データ218を、K個のビットを有する累算データのLSB部分に加算し、累算データの残りのビットによってキャリーを伝える。しかしながら、J個の加算器による加算の実施は遅く、大量の電力を消費する可能性がある。
【0053】
有利であることに、開示された累算器220は、累算データを2つの部分に分離し、第1の部分は入力データに加算し、i)第2の部分、または、ii)所定の値(例えば、「1」)だけ加えられた第2の部分のうちのいずれかが上記加算からのキャリー値によって選択される。これによって、計算の速度および効率を改善する。更に多くのビットについて加算または累算を未然に回避することによって、以下に図3Aおよび図3Bについて後述するように、累算のためのクリティカルパスは減じられ得、演算速度を改善するか、または、電力効率を改善することができる。
【0054】
図3Aを参照すると、本開示の例示の一実現例による、図2の累算器220Aのブロック図が示されている。いくつかの実施形態では、累算器220Aは、Kビット加算器回路類310、(J-K)ビットインクリメンタ350、および、(J-K)ビットマルチプレクサ320を含む。J-Kは、Jの値とKの値との差を示し得る。これらの構成要素はともに動作して、入力データとして合計データ218または乗算結果212を、そして、累算データ235を受信し得、合計データ218および累算データ235の合計に等しい更新された累算データ225を生成し得る。いくつかの例示の実施形態では、Jは28で、Kは16~20である。他の実施形態では、累算器220Aは、図3Aに示されるものより多い、より少ない、または、とは異なる構成要素を含む。
【0055】
Kビット加算器回路類310は、累算データ235Aの第1の部分および入力データ218を受信し、累算データ235Aの第1の部分に入力データ218を加算し、更新された累算データ225Aの第1の部分を生成することができる、構成要素であるか、または、その構成要素を含む、例えば、Kビット加算器回路類310は、レジスタ230から累算データ235AのKビットのLSB部分を、そして、加算器回路類215からKビットを有する入力データ218を受信し、更新された累算データ225AのKビットのLSB部分を生成する。Kビット加算器回路類310は、更新された累算データ225AのKビットのLSB部分をレジスタ230に提供し得る。
【0056】
(J-K)ビットマルチプレクサ320は、Kビット加算器回路類310からの加算のキャリー値にしたがって、i)累算データ235Bの第2の部分という入力と、ii)インクリメントされたデータ355という入力との間で選択して、出力として提供する構成要素、スイッチ、または、回路類であり得る、または、その構成要素、スイッチ、または、回路類を含み得る。一態様では、インクリメンタ350(または、カウンタ)は、累算データ235Bの第2の部分を受信して、所定の値(例えば、「1」、または、他の値)だけ累算データ235Bの第2の部分をインクリメントして、インクリメントされたデータ355を生成する。例えば、(J-K)ビットマルチプレクサ320は、累算データ235Bの(J-K)ビットのMSB部分、および、(J-K)ビットを有するインクリメントされたデータ355を受信し、キャリー値によって、i)累算データ235Bの(J-K)ビットのMSB部分と、ii)(J-K)ビットを有するインクリメントされたデータ355との間で選択を行うことができる。1つの構成では、Kビット加算器回路類310の1ビットキャリー出力は、(J-K)ビットマルチプレクサ320の制御入力に結合され得る。「1」であるキャリー値に応答して、(J-K)ビットマルチプレクサ320はインクリメントされたデータ355を選択し得る。同様に、「0」であるキャリー値に応答して、(J-K)ビットマルチプレクサ320は累算データ235Bの第2の部分を選択し得る。
【0057】
並行して実施される2つの部分(例えば、LSB部分およびMSB部分)に計算を分離することによって、加算または累算は、Kビット加算器回路類310によって、減らしたビット数に対して(例えば、LSB部分に対して)実施され得、演算速度を改善し、計算効率化を達成することができる。具体的には、Kビット加算器回路310のクリティカルパスは、完全なJビット加算器回路類と比較して、減じられ得る。一態様では、J-KはKより小さくてもよく、Kビット加算器回路類310のキャリー出力のキャリー値が生成された直後にマルチプレクサ320の出力が選択され得る。したがって、累算器220Aは累算のための低クリティカルパスを達成し、演算速度および電力効率を改善し得る。
【0058】
図3Bを参照すると、本開示の例示の一実現例による、図2の累算器220Bのブロック図が示されている。図3Bの累算器220Bは、以下の点以外は、図3Aの累算器220Aと類似している。即ち、加算器回路類310は、累算データ235Aの第1の部分に、複数の乗算結果212(または、複数の合計データ218)を加算して複数のビットを有するキャリー値を生成し得、マルチプレクサ320は、複数のビットを有するキャリー値にしたがって3つ以上の入力データから1つを選択して出力し得る。
【0059】
1つの例示の一実現例では、加算器回路類310は、同時に、または、順次に、異なる乗算器210から3つまたは4つの乗算結果212を有する累算データ235Aを加算し得る。累算データ235Aに3つまたは4つの乗算結果212を加算することによって、加算器回路類310は2ビットを有するキャリー値を生成し得る。マルチプレクサ320は、累算データ235Bの第2の部分、そして、異なるインクリメンタ350A、350B、350C(または、カウンタ)からインクリメントされたデータ355A、355B、355Cを受信し得る。インクリメンタ350Aは、累算データ235Bの第2の部分を受信し、「1」だけインクリメントし、インクリメントされたデータ355Aを生成し得、インクリメンタ350Bは、累算データ235Bの第2の部分を受信し、「2」だけインクリメントし、インクリメントされたデータ355Bを生成し得、インクリメンタ350Cは、累算データ235Cの第2の部分を受信し、「3」だけインクリメントし、インクリメントされたデータ355Cを生成し得る。あるいは、その代わりに、インクリメンタ350Aは、累算データ235Bの第2の部分を受信し、「1」(または、他の値)だけインクリメントし、インクリメントされたデータ355Aを生成し得、インクリメンタ350Bは、インクリメントされたデータ355Aを受信し、「1」(または、他の値)だけインクリメントし、インクリメントされたデータ355Bを生成し得、インクリメンタ350Cは、インクリメントされたデータ355Bを受信し、「1」(または、他の値)だけインクリメントし、インクリメントされたデータ355Cを生成し得るように、インクリメンタ350A、350B、350Cは直列接続またはカスケード接続される。
【0060】
一態様では、マルチプレクサ320は、その制御入力のキャリー値によって、その複数の入力データから1つを選択し得る。例えば、キャリー値が「00」である場合、マルチプレクサ320は累算データ235Bの第2の部分を選択して出力し得る。他の1つの例では、キャリー値が「01」である場合、マルチプレクサ320はインクリメントされたデータ355Aを選択して出力し得る。他の1つの例では、キャリー値が「10」である場合、マルチプレクサ320はインクリメントされたデータ355Bを選択して出力し得る。他の1つの例では、キャリー値が「11」である場合、マルチプレクサ320はインクリメントされたデータ355Cを選択して出力し得る。複数の乗算結果212の累算を実施して、複数のビットを有するキャリー値にしたがってMSB部分を選択することによって、累算器220Bの演算速度は更に改善され得る。図3Bでは、マルチプレクサ320は2ビットを有するキャリー値を受信して、キャリー値にしたがって4つの入力235B、355A、355B、および、355Cのうちの1つを選択し出力するが、他の実施形態では、マルチプレクサ320は、任意のビット数を有するキャリー値を受信して、キャリー値にしたがって任意の数の入力のうちの1つを選択し出力することができる。
【0061】
図4を参照すると、本開示の例示の一実現例による、ニューラルネットワークのための乗累算を実施するプロセス400を例示するフローチャートが示されている。いくつかの実施形態では、プロセス400は、図3Aまたは図3Bの累算器220によって実施される。いくつかの実施形態では、プロセス400は、1つまたは複数の他のエンティティによって実施される。いくつかの実施形態では、プロセス400は、図4に示されるものより多い、より少ない、または、とは異なるステップを含む。
【0062】
1つのアプローチでは、累算器220は、入力データおよび累算データの第1の数のビットを加算する(410)。入力データは、ニューラルネットワークの処理から、生成、獲得、計算、または、受信され得る。例えば、入力データは、重みおよび対応する活性化値を乗算した結果でもよい。入力データはKビットを有し得、累算データはKビットより多いJビットを有し得る。累算器220は、Kビットを有する入力データを有する累算データのLSB部分のKビットを加算し得る。一態様では、J-K(例えば、Jの値とKの値の差)はK以下である。
【0063】
1つのアプローチでは、累算器220は、ステップ410の加算からのキャリー値が選択を制御するための所定の閾値(例えば、「1」)であるかどうかを検査または確認することができる(415)。累算器220は、i)累算データの第2の数のビットと、ii)インクリメントされたデータとの間で、ステップ410の加算からのキャリー値にしたがって、キャリー値「1」または「0」にしたがって、選択を行うことができる。1つのアプローチでは、累算器220は、累算データの第2の部分を受信して、所定の値(例えば、「1」)だけ累算データの第2の部分をインクリメントして、インクリメントされたデータを生成する。例えば、累算器220は、累算データの(J-K)ビットのMSB部分および(J-K)ビットを有するインクリメントされたデータを受信して、i)累算データ235Bの(J-K)ビットのMSB部分と、ii)(J-K)ビットを有しているインクリメントされたデータ355との間で、キャリー値にしたがって選択を行う。例えば、「0」である、ステップ410の加算からのキャリー値に応答して、累算器220は、累算データ235Bの第2の部分を選択し得る(420)。例えば、「1」である、ステップ410の加算からのキャリー値に応答して、累算器220は、インクリメントされたデータ355を選択し得る(430)。
【0064】
1つのアプローチでは、累算器220は、ステップ420の選択されたデータとともにステップ410の加算の結果を、更新された累算データ、または、付加されたデータとして、出力し、生成し、および/または、提供し得る(440)。例えば、加算の結果は、付加されたデータのLSB部分のKビットに対応するKビットを有し、選択されたデータは、付加されたデータのMSB部分の(J-K)ビットに対応する(J-K)ビットを有する。累算器220は、付加されたデータをレジスタ(例えば、図2のレジスタ230であり、クロック信号によって動作させ得るレジスタの配列またはバンクであり得る)に、送信し、出力し、伝達し、向けて送り、かつ/または、提供し得る。一態様では、1クロックサイクルの間の付加されたデータは、次のクロックサイクルの累算データとして、レジスタを介して累算器220によって受信され得る。例えば、加算器回路類(例えば、図3Aの加算器回路類310)の出力からの付加されたKビットのデータは、レジスタを介して次のクロックサイクルの間の加算器回路類の入力に提供され得る。同様に、マルチプレクサ(例えば、図3Aのマルチプレクサ320)の出力からの付加されたデータの(J-K)ビットは、レジスタを介して次のクロックサイクルの間のマルチプレクサの入力に、送信、供給、または、提供され得る。
【0065】
いくつかの実施形態では、入力データは、第1のデータおよび第2のデータを乗算することによって、作り出され、導出され、生成され、かつ/または、提供される。第1のデータは、ニューラルネットワークの(例えば、層のノードの)重みであり得るか、または、その重みを含み得、第2のデータは、ニューラルネットワークの(例えば、層のノードの)活性化値であり得る。一態様では、第1のデータはMビットを有し、第2のデータはMビットを有し、入力データは、Mビットの少なくとも2倍である、Kビットを有する。
【0066】
いくつかの例示的な実現例について記載してきたが、上記は例示であって限定ではなく、例として提示されていることが明白である。特に、本明細書に提示する例の多くには、方法行為またはシステム要素の特定の組み合わせが関与するが、それらの行為および要素は、同じ目的を遂行するために他の形で組み合わせることができる。1つの実現例に関連して考察される行為、要素、および特徴は、他の1つまたは複数の実現例における類似の役割から除外されないものとする。
【0067】
本明細書に開示する実施形態と関連して記載される、様々なプロセス、動作、例示の論理、論理ブロック、モジュール、および回路を実現するのに使用される、ハードウェアおよびデータ処理構成要素は、汎用シングルもしくはマルチチッププロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他のプログラマブル論理デバイス、離散的ゲートもしくはトランジスタ論理、離散的ハードウェア構成要素、または本明細書に記載の機能を実施するように設計された上記のものの任意の組み合わせを用いて、実現または実施されてもよい。汎用プロセッサは、マイクロプロセッサ、または任意の従来のプロセッサ、コントローラ、マイクロコントローラ、もしくは状態機械であってもよい。プロセッサはまた、DSPとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、DSPコアと連動した1つもしくは複数のマイクロプロセッサ、または他の任意のかかる構成など、コンピューティングデバイスの組み合わせとして実現されてもよい。いくつかの実施形態では、特定のプロセスおよび方法は、所与の機能に特異的な回路類によって実施されてもよい。メモリ(例えば、メモリ、メモリユニット、記憶デバイスなど)は、本開示に記載する様々なプロセス、層、およびモジュールを完成させるかもしくは容易にする、データおよび/またはコンピュータコードを格納する、1つまたは複数のデバイス(例えば、RAM、ROM、フラッシュメモリ、ハードディスク記憶装置など)を含んでもよい。メモリは、揮発性メモリもしくは不揮発性メモリであるかまたはそれらを含んでもよく、本開示に記載する様々なアクティビティおよび情報構造をサポートする、データベース構成要素、オブジェクトコード構成要素、スクリプト構成要素、または他の任意のタイプの情報構造を含んでもよい。例示的実施形態によれば、メモリは、処理回路を介してプロセッサに通信可能に接続され、本明細書に記載の1つもしくは複数のプロセスを(例えば、処理回路および/またはプロセッサによって)実行するためのコンピュータコードを含む。
【0068】
本開示は、様々な動作を遂行するための任意の機械可読媒体上における、方法、システム、およびプログラム製品を想到する。本開示の実施形態は、既存のコンピュータプロセッサを使用して、またはこの目的もしくは別の目的のために組み込まれる、適切なシステムのための専用コンピュータプロセッサによって、または配線接続システムによって、実現されてもよい。本開示の範囲内の実施形態は、格納された機械実行可能命令もしくはデータ構造を保持するかまたは有する、機械可読媒体を備えるプログラム製品を含む。かかる機械可読媒体は、汎用もしくは専用コンピュータ、またはプロセッサを有する他の機械によってアクセスすることができる、任意の利用可能な媒体であることができる。例として、かかる機械可読媒体は、RAM、ROM、EPROM、EEPROM、または他の光学ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、あるいは機械実行可能命令またはデータ構造の形態で所望のプログラムコードを保持または格納するのに使用することができ、汎用もしくは専用コンピュータまたはプロセッサを有する他の機械でアクセスすることができる、他の任意の媒体を含むことができる。上記のものの組み合わせはまた、機械可読媒体の範囲に含まれる。機械実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用処理機械に、特定の機能または機能群を実施させる、命令およびデータを含む。
【0069】
本明細書で使用する用語および専門用語は、説明のためのものであって限定とみなされるべきではない。本明細書における、「~を含む」、「~を備える」、「~を有する」、「~を含有する」、「~を伴う」、「~によって特徴付けられる」、「~を特徴とする」およびそれらの変形の使用は、該用語とともに列挙される項目、それらの等価物、および追加の項目、ならびに排他的に該用語とともに列挙される項目から成る代替実現例を網羅することを意味する。一実現例では、本明細書に記載するシステムおよび方法は、記載する要素、行為、または構成要素のうちの1つ、2つ以上の各組み合わせ、または全てから成る。
【0070】
単数形で言及される本明細書のシステムおよび方法の実現例または要素または行為に対する任意の言及は、複数のこれらの要素を含む実現例も包含することができ、本明細書の任意の実現例または要素または行為に対する複数形での任意の言及は、単一の要素のみを含む実現例も包含することができる。単数形または複数形での言及は、本明細書に開示されるシステムもしくは方法、それらの構成要素、行為、または要素を、単数または複数の構成に限定しようとするものではない。任意の情報、行為、または要素に基づいた任意の行為または要素に対する言及は、行為または要素が、任意の情報、行為、または要素に少なくとも部分的に基づく場合の実現例を含むことができる。
【0071】
本明細書に開示する任意の実現例は、他の任意の実現例または実施形態と組み合わせることができ、「ある実現例」、「いくつかの実現例」、「一実現例」などに対する言及は、必ずしも相互に排他的ではなく、実現例と関連して記載する特定の特徴、構造、または特性が、少なくとも1つの実現例または実施形態に含まれ得ることを示すものとする。かかる用語は、本明細書で使用するとき、必ずしも全てが同じ実現例を指すものではない。任意の実現例は、本明細書に開示する態様および実現例と一致する任意の手法で、他の任意の実現例と包括的または排他的に組み合わせることができる。
【0072】
図面、詳細な説明、または任意のクレームにおける技術的特徴に参照符号が付される場合、参照符号は、図面、詳細な説明、およびクレームの了解度を向上するために含まれるものである。したがって、参照符号が存在してもしなくても、任意のクレーム要素の範囲に対する限定的影響を何ら有さない。
【0073】
本明細書に記載するシステムおよび方法は、それらの特性から逸脱することなく、他の特定の形態で具体化されてもよい。「約」、「およそ」、「実質的に」、または他の程度を表す用語に対する言及は、別段の明示がない限り、所与の測定値、単位、または範囲から±10%の変動を含む。結合された要素は、直接または介在要素を用いて、互いに電気的、機械的、または物理的に結合することができる。本明細書に記載するシステムおよび方法の範囲は、したがって、上述の記載ではなく添付のクレームによって示され、クレームの等価物の意味および範囲内にある変更は包含される。
【0074】
「結合された」という用語およびその変形は、2つの部材を直接または間接的に互いに接合することを含む。かかる接合は、静的(例えば、恒久的もしくは固定)または可動(例えば、除去可能もしくは解放可能)であってもよい。かかる接合は、互いに直接結合され、または互いに対して結合された2つの部材によって、別個の介在部材および互いに結合された任意の追加の中間部材を使用して互いに結合された2つの部材によって、あるいは2つの部材の一方とともに単一の単位体として一体的に形成された介在部材を使用して互いに結合された2つの部材によって、達成されてもよい。「結合された」またはその変形が、追加の用語によって修正された場合(例えば、直接結合された)、上述の「結合された」の包括的定義は、追加の用語の平易な言葉の意味によって修正され(例えば、「直接結合された」は、任意の別個の介在部材を有さない2つの部材の接合を意味する)、それによって上述の「結合された」の包括的定義よりも狭い定義になる。かかる結合は機械的、電気的、または流体的であってもよい。
【0075】
「または」に対する言及は包括的と解釈することができるので、「または」を使用して記載されるいずれの用語も、記載される用語の単一、2つ以上、および全てのいずれかを示すことができる。「『A』および『B』のうち少なくとも1つ」は、「A」のみ、「B」のみ、ならびに「A」および「B」の両方を含むことができる。「備える」または他のオープンな用語と併せて使用されるかかる言及は、追加の項目を含むことができる。
【0076】
様々な要素のサイズ、寸法、構造、形状、および比率、パラメータの値、取付け構造、材料使用、色、向きにおける変形例など、記載される要素および行為の修正は、本明細書に開示する主題の教示および利点から実質的に逸脱することなく行うことができる。例えば、一体的に形成されるものとして示される要素は、複数の部分または要素で構築することができ、要素の位置を反転させるかまたは別の形で変動させることができ、離散的要素または位置の性質もしくは数を改変または変更することができる。他の置換、修正、変更、および省略も、本開示の範囲から逸脱することなく、開示の要素および動作の設計、動作条件、および配置に対して行うことができる。
【0077】
本明細書における要素の位置に対する言及(例えば、「上側」、「下側」、「上方」、「下方」)は単に、図面における様々な要素の向きを説明するために使用されるものである。様々な要素の向きは、他の例示的実施形態によって異なってもよく、かかる変形は本開示に包含されるものとする。
図1A
図1B
図1C
図1D
図2
図3A
図3B
図4
【国際調査報告】