(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022186595
(43)【公開日】2022-12-15
(54)【発明の名称】再構成可能なサンプラを備えたベイジアン演算ユニット並びにそれを動作させる方法及び装置
(51)【国際特許分類】
G06N 3/063 20060101AFI20221208BHJP
G06N 3/04 20060101ALI20221208BHJP
【FI】
G06N3/063
G06N3/04
【審査請求】未請求
【請求項の数】25
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2022057840
(22)【出願日】2022-03-31
(31)【優先権主張番号】202141024844
(32)【優先日】2021-06-04
(33)【優先権主張国・地域又は機関】IN
(31)【優先権主張番号】17/483,382
(32)【優先日】2021-09-23
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
2.JAVASCRIPT
3.SWIFT
4.VERILOG
5.PYTHON
(71)【出願人】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(74)【代理人】
【識別番号】100112759
【弁理士】
【氏名又は名称】藤村 直樹
(72)【発明者】
【氏名】スリヴァッサ アールズ
(72)【発明者】
【氏名】インドラニル チャクラボルティー
(72)【発明者】
【氏名】ランガナス クリシュナン
(72)【発明者】
【氏名】ウダイ エー コラット
(72)【発明者】
【氏名】ムルケン ハイレセラシ
(72)【発明者】
【氏名】ジャイナヴィーン スンダラム プリヤ
(72)【発明者】
【氏名】ディーパック ダサルクント
(72)【発明者】
【氏名】ディリープ クリアン
(72)【発明者】
【氏名】タナイ カルニク
(57)【要約】 (修正有)
【課題】再構成可能なサンプラを有するベイジアン演算ユニットとそれを動作させる方法、装置を提供する方法、装置、システム及び製品を提供する。
【解決手段】ベイジアン・ニューラル・ネットワーク(BNN)及び/又はベイジアン・ディープニューラル・ネットワーク(BDNN)104は、平均値を活性化に適用することによって第1要素及び分散値を活性化の二乗に適用することによって第2要素を生成し、平均値と分散値が単一の確率分布に対応しているプロセッサ要素と、擬似乱数を生成し、擬似乱数と、第1要素と、第2要素とに基づいて、単一の確率分布に対応している出力を生成するプログラマブル・サンプリング・ユニットと、出力を記憶する出力メモリと、を含む。
【選択図】
図1
【特許請求の範囲】
【請求項1】
人工知能ベース・モデルにおいて複数のウェイトを適用するニューラル・ネットワークのノードであって、前記ノードは:
(a)平均値を活性化に適用することによって第1要素を、及び(b)分散値を前記活性化の二乗に適用することによって第2要素を生成するプロセッサ要素であって、前記平均値と前記分散値は単一の確率分布に対応している、プロセッサ要素;
擬似乱数を生成し、前記擬似乱数と、前記第1要素と、前記第2要素とに基づいて出力を生成するプログラマブル・サンプリング・ユニットであって、前記出力は前記単一の確率分布に対応している、プログラマブル・サンプリング・ユニット;及び
前記出力を記憶する出力メモリ;
を含むノード。
【請求項2】
前記プロセッサ要素は:
前記平均値を前記活性化に乗算することによって前記第1要素を生成し;及び
前記分散値を前記活性化の二乗に乗算することによって前記第2要素を生成する、請求項1に記載のノード。
【請求項3】
前記プログラマブル・サンプリング・ユニットは、前記出力を生成するために:
前記第2要素に前記擬似乱数を乗算することによって積を生成し、前記積に前記第1要素を加算する、請求項1又は2に記載のノード。
【請求項4】
前記プログラマブル・サンプリング・ユニットは:
前記擬似乱数を含む複数の擬似乱数を生成し;
複数の出力を生成し;
前記複数の出力の平均をとり;
前記平均に基づいて前記出力を生成する、請求項1-3のうちの何れか1項に記載のノード。
【請求項5】
前記プログラマブル・サンプリング・ユニットは:前記ノードを含む複数のノードに対する複数の出力を生成する、請求項1-4のうちの何れか1項に記載のノード。
【請求項6】
前記プログラマブル・サンプリング・ユニットは、前記擬似乱数を生成するために:
シフト・レジスタを使用して擬似ランダム・シーケンスを生成し;
前記擬似ランダム・シーケンスに排他的OR(XOR)演算を実行することによって、前記擬似ランダム・シーケンスを調整し;
調整された擬似ランダム・シーケンスをガウシアン擬似乱数シーケンスに変換し、前記ガウシアン擬似乱数シーケンスは前記擬似乱数を含む、請求項1-5のうちの何れか1項に記載のノード。
【請求項7】
前記出力メモリは、前記出力を、後続ノードの入力メモリに出力する、請求項1-6のうちの何れか1項に記載のノード。
【請求項8】
1つ以上のプロセッサに、少なくとも:
(a)平均値を活性化に適用することによって第1要素を、及び(b)分散値を前記活性化の二乗に適用することによって第2要素を生成するステップであって、前記平均値と前記分散値は単一の確率分布に対応している、ステップ;
擬似乱数を生成するステップ;
前記擬似乱数と、前記第1要素と、前記第2要素とに基づいて出力を生成するステップであって、前記出力は前記単一の確率分布に対応している、ステップ;及び
前記出力を記憶するステップ;
を実行させる、コンピュータ・プログラム。
【請求項9】
前記1つ以上のプロセッサに:
前記平均値を前記活性化に乗算することによって前記第1要素を生成するステップ;及び
前記分散値を前記活性化の二乗に乗算することによって前記第2要素を生成するステップ;
を実行させる請求項8に記載のコンピュータ・プログラム。
【請求項10】
前記1つ以上のプロセッサに前記出力を生成させるために:
前記第2要素に前記擬似乱数を乗算することによって積を生成し、前記積に前記第1要素を加算するステップ;
を実行させる請求項8又は9に記載のコンピュータ・プログラム。
【請求項11】
前記1つ以上のプロセッサに:
前記擬似乱数を含む複数の擬似乱数を生成するステップ;
複数の出力を生成するステップ;
前記複数の出力の平均をとるステップ;及び
前記平均に基づいて前記出力を生成するステップ;
を実行させる請求項8-10のうちの何れか1項に記載のコンピュータ・プログラム。
【請求項12】
前記1つ以上のプロセッサに、ノードを含む複数のノードに対する複数の出力を生成するステップを実行させる、請求項8-11のうちの何れか1項に記載のコンピュータ・プログラム。
【請求項13】
前記1つ以上のプロセッサに前記擬似乱数を生成させるために:
シフト・レジスタを使用して擬似ランダム・シーケンスを生成ステップ;
前記擬似ランダム・シーケンスに排他的OR(XOR)演算を実行することによって、前記擬似ランダム・シーケンスを調整するステップ;
調整された擬似ランダム・シーケンスをガウシアン擬似乱数シーケンスに変換するステップ;
を実行させ、前記ガウシアン擬似乱数シーケンスは前記擬似乱数を含む、請求項8-12のうちの何れか1項に記載のコンピュータ・プログラム。
【請求項14】
前記1つ以上のプロセッサに、前記出力を、後続ノードの入力メモリに出力するステップを実行させる、請求項8-13のうちの何れか1項に記載のコンピュータ・プログラム。
【請求項15】
人工知能ベース・モデルにおいて複数のウェイトを適用する装置であって、前記装置は:
少なくとも1つのメモリ;及び
プロセッサ回路;
を含み、前記プロセッサ回路は:
中央処理ユニット、グラフィックス処理ユニット、又はデジタル信号プロセッサのうちの少なくとも1つであって、前記中央処理ユニット、前記グラフィックス処理ユニット、又は前記デジタル信号プロセッサのうちの少なくとも1つは、前記プロセッサ回路内のデータの動きを制御する制御回路と、命令に対応する1つ以上の第1オペレーションを実行する算術論理回路と、前記1つ以上の第1オペレーション、前記命令の結果を前記装置に記憶する1つ以上のレジスタを有する、中央処理ユニット、グラフィックス処理ユニット、又はデジタル信号プロセッサのうちの少なくとも1つ;
フィールド・プログラマブル・ゲート・アレイ(FPGA)であって、前記FPGAは、論理ゲート回路と、複数の設定可能な相互接続と、ストレージ回路とを含み、前記論理ゲート回路と相互接続は、1つ以上の第2オペレーションを実行し、前記ストレージ回路は前記1つ以上の第2オペレーションの結果を記憶する、FPGA;又は
1つ以上の第3オペレーションを実行する論理ゲート回路を含む特定用途向け集積回路;
のうちの1つ以上を含み;
前記プロセッサ回路は、前記第1オペレーション、前記第2オペレーション、又は前記第3オペレーションのうちの少なくとも1つを実行して:
(a)平均値を活性化に適用することによって第1要素を、及び(b)分散値を前記活性化の二乗に適用することによって第2要素を生成するステップであって、前記平均値と前記分散値は単一の確率分布に対応している、ステップ;
擬似乱数を生成するステップ;
前記擬似乱数と、前記第1要素と、前記第2要素とに基づいて出力を生成するステップであって、前記出力は前記単一の確率分布に対応している、ステップ;及び
前記出力を記憶するステップ;
を実行する、装置。
【請求項16】
前記プロセッサ回路は:
前記平均値を前記活性化に乗算することによって前記第1要素を生成し;及び
前記分散値を前記活性化の二乗に乗算することによって前記第2要素を生成する、請求項15に記載の装置。
【請求項17】
前記プロセッサ回路は、前記出力を生成するために:
前記第2要素に前記擬似乱数を乗算することによって積を生成し、前記積に前記第1要素を加算する、請求項15又は16に記載の装置。
【請求項18】
前記プロセッサ回路は:
前記擬似乱数を含む複数の擬似乱数を生成し;
複数の出力を生成し;
前記複数の出力の平均をとり;及び
前記平均に基づいて前記出力を生成する、請求項15-17のうちの何れか1項に記載の装置。
【請求項19】
前記プロセッサ回路は、ノードを含む複数のノードに対する複数の出力を生成する、請求項15-18のうちの何れか1項に記載の装置。
【請求項20】
前記プロセッサ回路は、前記擬似乱数を生成するために:
シフト・レジスタを使用して擬似ランダム・シーケンスを生成し;
前記擬似ランダム・シーケンスに排他的OR(XOR)演算を実行することによって、前記擬似ランダム・シーケンスを調整し;
調整された擬似ランダム・シーケンスをガウシアン擬似乱数シーケンスに変換し;
前記ガウシアン擬似乱数シーケンスは前記擬似乱数を含む、請求項15-19のうちの何れか1項に記載の装置。
【請求項21】
前記プロセッサ回路は、前記出力を、後続ノードの入力メモリに出力する、請求項15-20のうちの何れか1項に記載の装置。
【請求項22】
プロセッサが命令を実行することにより、(a)平均値を活性化に適用することによって第1要素を、及び(b)分散値を前記活性化の二乗に適用することによって第2要素を生成するステップであって、前記平均値と前記分散値は単一の確率分布に対応している、ステップ;
前記プロセッサが命令を実行することにより、擬似乱数を生成するステップ;
前記プロセッサが命令を実行することにより、前記擬似乱数と、前記第1要素と、前記第2要素とに基づいて出力を生成するステップであって、前記出力は前記単一の確率分布に対応している、ステップ;及び
前記出力を記憶するステップ;
を含む方法。
【請求項23】
前記平均値を前記活性化に乗算することによって前記第1要素を生成するステップ;及び
前記分散値を前記活性化の二乗に乗算することによって前記第2要素を生成するステップ;
を更に含む請求項22に記載の方法。
【請求項24】
前記出力を生成するステップは:
前記第2要素に前記擬似乱数を乗算することによって積を生成するステップ;及び
前記積に前記第1要素を加算するステップ;
を含む、請求項22又は23に記載の方法。
【請求項25】
前記擬似乱数を含む複数の擬似乱数を生成するステップ;
複数の出力を生成するステップ;
前記複数の出力の平均をとるステップ;及び
前記平均に基づいて前記出力を生成するステップ;
を更に含む請求項22-24のうちの何れか1項に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願
[0001] 本件特許出願は2021年6月4日付で出願された印国仮特許出願第202141024844号から生じている。印国仮特許出願第202141024844号は全体的な参照により本件に援用される。印国仮特許出願第202141024844号に対する優先権が本件で主張されている。
【0002】
[0002]
本開示の分野
本開示は、一般に機械学習に関連し、より詳細には、再構成可能なサンプラを有するベイジアン演算ユニットとそれを動作させる方法及び装置に関連する。
【背景技術】
【0003】
[0003] 近年、人工知能(機械学習、ディープ・ラーニング等)の普及が進んでいる。人工知能はニューラル・ネットワークを使用して実装されてもよい。ニューラル・ネットワークは、人間の脳の神経網に触発されたコンピューティング・システムである。ニューラル・ネットワークは入力を受け取って、出力を生成することができる。ニューラル・ネットワークは、出力が所望の結果に対応するように、フィードバックに基づいて訓練されることが可能なウェイトに対応する複数のニューロンを含む。一旦ウェイトが訓練されると、ニューラル・ネットワークは、任意の入力に基づいて出力を生成するための判断を行うことができる。ニューラル・ネットワークは、人工知能及び/又は機械学習の新しい分野に使用されている。ベイジアン・ニューラル・ネットワークは、固定されたウェイトとは対照的に、変化するウェイトを生成するニューロンを含む特定のタイプのニューラル・ネットワークである。可変ウェイトは、ベイジアン・ニューラル・ネットワークの訓練を通じて決定される平均値及び分散によって定義される確率分布の範囲内に収まる。
【図面の簡単な説明】
【0004】
【
図1】[0004]
図1は例示的なベイジアン・ニューラル・ネットワークの概略図である。
【
図2A】[0005]
図2Aは
図1のベイジアン・ニューラル・ネットワークの層の実装例のブロック図である。
【
図2B】[0005]
図2Bは
図1のベイジアン・ニューラル・ネットワークの層の実装例のブロック図である。
【
図3】[0006]
図3は
図2A及び/又は
図2Bの層の例示的な処理要素のデータ処理フローの例を示す。
【
図4A】[0007]
図4Aは
図2A及び/又は
図2Bの層のプログラマブル・サンプリング・ユニットの実装例のブロック図である。
【
図4B】[0008]
図4Bは
図2A及び/又は
図2Bの層のプログラマブル・サンプリング・ユニットの実装例の回路図である。
【
図5】[0009]
図5は
図2A、
図2B、
図3、及び/又は
図4の例示的なベイジアン演算ノード及び/又はプログラマブル・サンプリング・ユニットを実現するために実行することが可能な例示的な機械読み取り可能な命令のフローチャート表現を示す。
【
図6】[0009]
図6は
図2A、
図2B、
図3、及び/又は
図4の例示的なベイジアン演算ノード及び/又はプログラマブル・サンプリング・ユニットを実現するために実行することが可能な例示的な機械読み取り可能な命令のフローチャート表現を示す。
【
図7】[0010]
図7は
図2A、
図2B、
図3、及び/又は
図4の例示的なベイジアン演算ノード及び/又はプログラマブル・サンプリング・ユニットを実現するための、
図5-6の命令を実行するように構成された例示的な処理プラットフォームのブロック図である。
【
図8】[0011]
図8は
図7のプロセッサ回路の実装例のブロック図である。
【
図9】[0012]
図9は
図7のプロセッサ回路の別の実装例のブロック図である。
【
図10】[0013]
図10はソフトウェア(例えば、
図5-6の例示的なコンピュータ読み取り可能な命令に対応するソフトウェア)を、消費者(例えば、ライセンス、販売及び/又は使用のため)、小売業者(例えば、販売、再販売、ライセンス及び/又はサブライセンスのため)、及び/又は相手先商標製品製造業者(OEM)(例えば、小売業者に配布される製品に含めるため、及び/又は、直接購入する顧客のため)などのクライアント機器に配信する例示的なソフトウェア配信プラットフォームのブロック図である。 [0014] 図面は縮尺通りではない。一般に、同一の参照番号は、図面及び付随して記載される記述を通じて、同一又は類似の部分を指するために使用される。接続の参照(例えば、取り付けられる、結合される、接続される、ジョイントされる)は、広義に解釈されるべきであり、特に断らない限り、要素の集まりの中の中間的なメンバーと、要素間の相対的な動きとを含む可能性がある。従って、接続の参照は、必ずしも2つの要素が直接的に接続され、且つ互いに固定された関係にあることを暗示してはいない。図面は、鮮明なラインや境界で層及び領域を示しているが、これらのライン及び/又は境界の一部又は全部は理想化されている可能性がある。実際には、境界及び/又はラインは観察不能であるか、一体化されているか、及び/又は不規則的である可能性がある。
【0005】
[0015] 記述語“第1”,“第2”,“第3”などは、本件において、別々に言及されてもよい複数の要素又は構成要素を識別する際に使用される。それらの使用される文脈に基づいて別段の定め又は解釈がない限り、そのような記述語は、リスト内の優先順位、物理的順序又は配列、あるいは時間的な順序という何らかの意味を帰するようには意図されておらず、開示される例を理解しやすくするために、複数の要素又は構成要素を別々に参照するためのラベルとして単に使用されているに過ぎない。幾つかの例において、記述語“第1”は、詳細な説明中の要素を参照するために使用される可能性があるが、その同じ要素が、“第2”又は“第3”のような異なる記述語を用いてクレーム中で言及される可能性がある。このような場合、かかる記述語は複数の要素又は構成要素を参照することを容易にするために単に使用されているに過ぎないことが理解されるべきである。
【発明を実施するための形態】
【0006】
[0016] ニューラル・ネットワークのような機械学習モデルは、タスク(例えば、データを分類すること)を実行するために使用される。機械学習は、グランド・トゥルース・データ(例えば、特定の分類で正確にラベル付けされたデータ)を使用して、モデルを訓練するための訓練ステージを含む可能性がある。伝統的なニューラル・ネットワークの訓練は、ニューラル・ネットワークのニューロンのウェイトを調整する。訓練された後、データは、訓練されたニューラル・ネットワークに入力され、ニューロンのウェイトは入力データに適用され、機能(例えば、データを分類すること)を実行するように入力データを処理することができる。
【0007】
[0017] 悪意の攻撃に対する敏感さ(sensitivity)及び/又はオーバーフィッティングは、従来のニューラル・ネットワークのパフォーマンス及び/又は信頼性に悪影響を及ぼす。オーバーフィッティングは、モデルが小さ過ぎる誤差を有するように訓練された場合に生じる。訓練が小さ過ぎる誤差をもたらす結果となった場合、そのモデルは、新たな状況に汎化することが困難である。悪意の攻撃は、根底にあるニューラル・ネットワーク・モデルの知識及び/又はオーバーフィッティングの組み合わせを悪用する可能性がある。悪意の攻撃に対する敏感さは、訓練されたモデルがその出力を過信している結果である。モデルが過信の状態にある場合、入力に対する小さな摂動が、出力の望ましくない及び/又は予測不可能な変化をもたらす可能性がある。上述の両者の問題は、伝統的なニューラル・ネットワークが、訓練データの有限集合に不確実性情報を含めることができないことに起因する。
【0008】
[0018] ベイジアン・ニューラル・ネットワーク(BNN)及び/又はベイジアン・ディープニューラル・ネットワーク(BDNN)は、不確実性情報を導入し、悪意の攻撃に対する敏感さ及び/又はオーバーフィッティングの問題を克服する。固定されたウェイトを使用する代わりに、BDNNは、条件付き確率分布に関連するウェイトを導入する(例えば、出力ウェイトは、平均(本件では、mu又はuとも呼ばれる)及び標準偏差及び/又は分散(一般的には、σ2と呼ばれる)によって定義される確率分布の範囲内の値である可能性がある) 。BDNNはある程度のランダム性を導入するので、BDNNは正確さを犠牲にすることなく、より小さな訓練データで訓練することができる。しかしながら、確率分布に対応するウェイトを生成するニューロンを用いる従来のBDNNは、実装するために多くの電力及び/又はハードウェアを要求する。従って、そのような従来のBDNNは、確率分布のサンプリング、及び/又は分布からサンプリングされた異なるウェイト値を有するBDNNのフォワード・パスの多重反復によって引き起こされるボトルネックに起因して遅い。例えば、従来のBDNNは、確率分布毎に単一のウェイトを生成しており、これは、複数のウェイトを生成及び/又は格納するために多くのオーバーヘッドを要求し、なぜなら、従来のシステムは、生成されたウェイト毎にシステム・メモリから平均及び分散にアクセスするからである。
【0009】
[0019] 複数のフォワード・パスに対するBDNN層における演算は、以下の式1(Equation 1)を用いて表すことができる。
[0020]
【0010】
【数1】
[0021] 式1において、Oは出力であり、Iは入力であり、Wはウェイトであり、nはフォワード・パスのインデックスであり、i及びjはフィルタにおけるウェイト要素のインデックスであり、μは平均であり、σ
2は分散である。以下の式2は、式1のリパラメトリゼーション(reparameterization)である。
[0022]
【0011】
【数2】
[0023] 式2に基づいて、本件で開示される実施例は、平均β及び分散δ
2を有する分布から、n番目のフォワード・パスのj番目の出力要素をサンプリングすることができる。この数学的な再構成により、生成されることを必要とするサンプルの数は、次元i及びjのウェイト数から、次元jの出力数まで減少する。k×k×I×Oという構成の畳み込み層の場合、ウェイトの総数はk
2IOであり、出力数はH×W×Oであり、ここで、k×kはカーネル・サイズであり、Iは入力チャネルであり、Oは出力チャネルであり、H及びWは出力画像の高さ及び幅である。全結合層の場合、ウェイトの数はI×Oであり、出力数はOである。従って、本件で開示される実施例は、式2の数学的な再構成を活用してサンプリング・オーバーヘッドを減少させる。
【0012】
[0024] 本件で開示される実施例は、上記の式2の利点を活用して、ガウシアン分布モデル及びガウシアン混合モデル(GMM)の分布モデルの両方をサポートするサンプリング・ユニットを使用して、効率的なBDNNを提供し、BDNワークロードに対する入力再利用を活用する。本件で使用される場合、ユニットは、ハードウェア(例えば、回路、プロセッサなど)、ソフトウェア、ファームウェア、及び/又はそれらの任意の組み合わせを含む可能性がある。本件で開示される実施例は、入力データを取得し、平均及び分散を適用して、平均に基づく結果(例えば、平均と入力の積)及び分散に基づく結果(例えば、分散と入力の積)を生成する。結果は、プログラマブル・サンプリング・ユニットに提供される。プログラマブル・サンプリング・ユニットは、平均ベースの結果と分散ベースの結果に基づいて、パラメータ化されたガウス分布及びGMMモデルから、複数のサンプルを出力するように構成されることが可能である。このようにして、信号確率分布及び入力データに対応する平均値及び分散値が一度アクセスされ、単一の分布に基づいて複数の異なる出力が生成されて使用されることが可能であり、それによってサンプリング・オーバーヘッドの低減を可能にする。従って、本件で開示された実施例は、より効率的な人工知能ベースのコンピュータ・ユニットをもたらし、これは、確率分布に対応するウェイトを生成して適用するためのデータ移動の量を減少させる。
【0013】
[0025] 本件で開示される実施例の演算は固有なものである可能性があり、なぜなら異なるフォワード・パスに対応する活性化(activation)は典型的には固有だからである。スループットの改善を得るために、本件で開示される実施例は、入力再利用(input reuse, IR)により計算を再利用する。従って、本件で開示される実施例は以下の式3を活用する。式3は、IRを活用するためのベイジアン演算の数学的な転用(mathematical repurposing)である。この数式は異なるフォワード・パスにわたって同じ入力を考慮している:
[0026]
【0014】
【数3】
[0027] この数学的なリパラメトリゼーションを通じて、本件で開示される実施例は、複数のフォワード・パスに対応する各々の活性化(例えば、ピクセル)について単一の出力分布パラメータを得る。この分布から、複数の出力サンプルをサンプリングすることによって、本件で開示される実施例は、より少ない演算総数でベイジアン演算を実行する。
【0015】
[0028] 一般に、機械学習(ML)/人工知能(AI)システムを実装することは、学習/訓練フェーズと推論フェーズの2フェーズを含む。学習/訓練フェーズでは、訓練アルゴリズムを使用して、例えば訓練データに基づいてパターン及び/又はアソシエーションに従って動作するようにモデルを訓練する。一般に、モデルは、入力データが出力データに変換される方法、例えばモデル内の一連のノード及び接続を通じて、入力データを出力データに変換する方法をガイドする内部パラメータを含む。更に、ハイパーパラメータは、学習がどのように実行されるかを制御するために、訓練プロセスの一部として使用されてもよい(例えば、学習率、機械学習モデルで使用される層の数など)。ハイパーパラメータは、訓練プロセスを開始する前に決定される訓練パラメータとして定義される。
【0016】
[0029] 様々な種類の訓練が、ML/AIモデルの種類及び/又は期待される出力に基づいて実行される可能性がある。本件で使用されるように、ラベリングは、機械学習モデルの期待される出力(例えば、分類、期待される出力値など)を指す。あるいは、教師なし訓練(例えば、ディープラーニング、機械学習の一部などで使用される)は、入力からパターンを推定し、(例えば、期待される(ラベル付けされた)出力の恩恵を利用せずに)ML/AIモデルのためのパラメータを選択することを含む。
【0017】
[0030] 本件で開示される実施例では、訓練は、閾値数の動作が予測されるまで実行される。本件で開示される実施例において、訓練は、ローカルに(例えば、デバイスで)又はリモートに(例えば、クラウド及び/又はサーバーで)の何れかで実行される。訓練は、学習がどのように実行されるかを制御するハイパーパラメータ(例えば、学習率、機械学習モデルで使用される層の数など)を使用して実行されてもよい。幾つかの実施例では、再訓練又は再学習(re-training)が実行されてもよい。このような再訓練は、新しいプログラムが実装されたこと又は新しいユーザーがデバイスを使用することに応答して実行されてもよい。訓練は訓練データを用いて実行される。教師あり訓練が使用される可能性がある場合、訓練データはラベル付けされている。幾つかの例では、訓練データは前処理される。
【0018】
[0031] いったん訓練が完了すると、モデルは実行可能な構造として使用するために配備され、その構造は入力を処理し、モデルで定義されたノードと接続のネットワークに基づいて出力を提供する。モデルは、ローカルにメモリに格納されるか(例えば、キャッシュされ、訓練された後にメモリに移動させられる)、又はクラウドに格納されてもよい。その後、モデルは、コンピュータ・コアによって実行されることが可能である。
【0019】
[0032] いったん訓練されると、配備されたモデルは、データを処理するために推論フェーズで動作することができる。推論フェーズでは、解析されるべきデータ(例えば、ライブ・データ(live data))がモデルに入力され、モデルは出力を作成するように動作する。この推論フェーズは、訓練から学習したことに基づいて(例えば、モデルを実行して、学習したパターン及び/又は関連付けを、ライブ・データに適用することによって)、出力を生成するためにAIが“考えている”とみなすことができる 。幾つかの例では、機械学習モデルへの入力として使用される前に、入力データは前処理を受ける。更に、幾つかの実施例において、出力データは、AIモデルによって生成された後に、出力を有用な結果(例えば、データの表示、機械によって実行される命令など)に変換するために、後処理を受けてもよい。
【0020】
[0033] 幾つかの実施例において、配備されたモデルの出力は、捕捉されてフィードバックとして提供される可能性がある。フィードバックを分析することによって、配備されたモデルの精度を決定することができる。フィードバックが、配備モデルの精度は閾値又は他の基準未満であることを示す場合、更新されたモデルの訓練が、フィードバック及び更新された訓練データセット、ハイパーパラメータなどを使用してトリガーされ、更新された配備モデルを生成することができる。
【0021】
[0034]
図1は、例示的なBDNN 104を訓練するための例示的なニューラル・ネットワーク(NN)トレーナ102の概略図である。例示的なBDNN 104は、例示的なシステム・メモリ106と、例示的なニューロン110a-f(本件では、ニューロン又は演算ノードと言及される)を含む例示的な層108a-cとを含む。
図1の図示されたニューロン110は、3つの層で6つのニューロンを含むが、任意のタイプの形態において任意数のニューロンが存在してもよい。
図1の例は、BDNN 104に関連して説明されているが、本件で開示される実施例は、ウェイトを含む任意のAIベースのシステム又はモデルで使用される可能性がある。
図1はBDNN 104を含んでいるが、本件で開示される実施例は、BNN及び/又は任意の他の確率分布に基づくAIモデルにおいて利用することができる。
【0022】
[0035]
図1の例示的なNNトレーナ102は、各ニューロン110の平均ウェイトと平均ウェイトに対する偏差量とを選択することによってBDNN 104を訓練する。初めに、BDNN 104は訓練されていない(例えば、ニューロンはまだ平均及び偏差で重み付けされていない)。BDNN 104を訓練するために、
図1の例示的なNNトレーナ102は、訓練データ(例えば、既知の分類及び/又は出力でラベル付けされた入力データ)を使用してBDNN 104を、未知分類の入力データに対して出力分類を予測できるように構築する。NNトレーナ102は、訓練データの第1セットでモデルを訓練し、訓練データの第2セットでモデルをテストすることができる。テストの結果に基づいて、モデルの精度が閾値を下回る場合、NNトレーナ102は、訓練データの追加セットを用いてモデルのパラメータをチューニングし(例えば、調整し、更に訓練し、等々)、精度が閾値を上回るまでテストを継続することができる。NNトレーナ102がBDNN 104を訓練した後、例示的なNNトレーナ102は、例示的なBDNN 104の例示的なシステム・メモリ106に、それぞれのニューロン110の対応する平均及び偏差を記憶する。例示的なNNトレーナ102は、BDNN 104と同じデバイス内に、及び/又は例示的なBDNN 104と通信する別の装置内に実装されてもよい。例えば、NNトレーナ102は、遠隔的に配置され、ウェイト・データを局所的に配備し、実装(例えば、決定分布データに対応するウェイトの生成)のために、分布データ(例えば、各ニューロン110の平均及び分散)をBDNN 104に配備することができる。
【0023】
[0036]
図1の例示的なBDNN 104は、例示的なシステム・メモリ106を含む。例示的なシステム・メモリ106は、特定のニューロン(例えば、1つ以上の演算ノード/ニューロンに対する確率分布に対応する平均及び/又は分散)に関し、例示的なNNトレーナ102の確率分布データを記憶する。例えば、システム・メモリ106の第1セクションは、第1ニューロン又は第1ニューロン層についての第1平均値及び第1分散値に専用であり、システム・メモリ106の第2セクションは、第2ニューロン又は第2ニューロン層についての第2平均値及び第2分散値に専用であり、等々である。平均値は、平均値を表すビット値として専用セクションに格納されてもよい。以下で更に説明されるように、
図2A、2B、3、及び/又は4のプログラマブル・サンプリング・ユニットは、平均ベースの結果(例えば、平均が入力データに適用される)及び分散ベースの結果(例えば、分散が入力データに適用される)に関連して使用される乱数及び/又は擬似乱数を生成して、単一の確率分布(例えば、ガウシアン分布)、又は混合確率分布(例えば、2つ以上の平均及び/又は2つ以上の分散をともなうもの)に対応する単一の混合モデル(例えば、GMM)サンプル、に対応する複数の出力(例えば、入力に基づくもの)を生成する。
【0024】
[0037]
図1の例示的なニューロン110a-fは、例示的な層108a-cで構造化されている。以下で更に説明されるように、ニューロン110a-fは、1つ以上のプログラマブル・サンプリング・ユニットを含むか又はそれと通信する演算ノードによって実装される。例示的なニューロン110a-fは、入力/活性化データを受け取り、ウェイト及び/又は分散を入力/活性化データに適用して平均ベースの結果及び分散ベースの結果を生成し、平均ベースの結果及び/又は分散ベースの結果をランダム/疑似乱数に適用して、確率分布又は混合確率分布に対応する1つ以上の出力を生成し、出力を生成する。例えば、ニューロンの確率分布が標準正規分布に従い、ニューロンの平均ウェイトが0.7であり、ニューロンの分散が0.01(例えば、標準偏差は0.1)である場合、68%の確率で、出力は、0.6ないし0.8(例えば、平均から1標準偏差だけ離れた値)の間にあるウェイトに適用された入力に対応し、95%の確率で、出力は、0.5ないし0.9(例えば、平均から2標準偏差だけ離れた値)の間にあるウェイトに適用された入力に対応する。従って、出力は、同じ平均、分散、及び入力値に対して異なる可能性があるが、出力は、その確率分布に従っている。従って、例示的なニューロン110a-fは、悪意の攻撃に対する敏感さ及びオーバーフィッティングに対処することが可能なランダム性を提供する。例示的なニューロン110c-eを含む例示的な層108bの構造は、
図2A及び2Bに関連して以下で更に説明される。
【0025】
[0038]
図2Aは例示的な層108bのブロック図を示し、これは、
図1の例示的なニューロン(タイル、演算ユニット、ノード、又はベイジアン演算ユニットと呼ばれる)110c-eを含む。しかしながら、
図2Aは、任意の例示的な層108a-c及び/又は任意のニューロン110a-fに関連して説明することが可能である。
図2Aの例は、
図1の例示的なシステム・メモリ106を含む。
図2Aの例は、更に、例示的な分配バッファ202、例示的な分配メモリ206、例示的な処理要素(PE)208、例示的な入力メモリ210、例示的な出力メモリ212、及び例示的なプログラマブル・サンプリング・ユニット(PSU) (プログラマブル・サンプリング回路とも呼ばれる)214を含む。例示的な入力メモリ210(IRAM)は入力及び/又は特徴を記憶し、分配メモリ206(BRAM)は隠れ層のウェイト(平均値及び/又は分散値)を記憶し、例示的な出力メモリ212(ORAM)は出力特徴及び/又は部分を記憶する。
図2Aの実施例は、3つの記憶要素からデータを取得し、データを3つの記憶要素に出力するために、3つのそれぞれのタイルに実装された3つの処理要素を含んでいるが、任意数の記憶要素、処理要素が存在してもよく、そのような記憶要素及び/又は処理要素は任意数のタイルに配置されてもよい
[0039]
図2の例示的な分配バッファ202は、NNトレーナ102からの訓練されたデータに基づいて、各ノード110についてシステム・メモリ106に記憶された平均及び/又は分散値を記憶する。ウェイト・バッファは、任意のタイプのメモリ又は記憶ユニットであってもよい。平均及び分散は、NNトレーナ102によって生成された確率分布に対応する。平均及び/又は分散値をシステム・メモリ106に記憶した後、例示的な分配バッファ202は、平均及び分散値を、個々の演算ユニット110c-e(例えば、タイル0-タイルM)の例示的な分配メモリ206(例えば、BRAM 0 - BRAM M)に出力する。
【0026】
[0040]
図2の例示的な分配メモリ206は、平均及び分散値を、対応する演算ノード110c-e(例えば、第1タイルの第1平均及び分散、第2タイルの第2平均及び分散など)に局所的に格納する。このようにして、対応する演算ノード110c-eの例示的なPE 208は、平均及び/又は分散値にアクセスして、入力データ及び/又は活性化データに適用することができ、これについては
図3に関連して以下で更に説明される。
図2Aの例では、分配メモリ206はランダム・アクセス・メモリ(RAM)である。しかしながら、例示的な分配メモリ206は、任意のタイプのストレージによって実装されてもよい。
【0027】
[0041]
図2Aの例示的なPE 208は、分配メモリ206に記憶された平均及び/又は分散値を、例示的な入力メモリ210に記憶された入力データ及び/又は活性化データに適用する。
図2Aの例では、入力メモリ210はランダム・アクセス・メモリ(RAM)である。しかしながら、例示的な入力メモリ210は、任意のタイプのストレージによって実装されてもよい。
図2のPE 208は、単一の確率分布に対応する平均及び/又は分散値を、対応する入力及び/又は活性化データに適用して出力データを生成する(出力データは、例えば、平均ベースのデータ(平均と入力データの積、本件ではβと言及される)及び/又は分散ベースのデータ(分散と入力データの積、本件ではδ
2と言及される)である)。例示的なPE 208は、出力データを、例示的な出力メモリ212に記憶する。PE 208の動作は、
図3に関連して以下で更に説明される
[0042]
図2の例示的な出力メモリ212は、PE 208の出力を記憶する。
図2Aの実施例では、出力メモリ212はランダム・アクセス・メモリ(RAM)である。しかしながら、例示的な出力メモリ212は、任意のタイプのストレージによって実装されてもよい。出力メモリ212内の出力データは、後続の層108c内の演算ノード、同じ層108b内の演算ノード110c-eのうちの異なるノード(例えば、異なる演算ノードにおける別のパスに対するもの)に出力されてもよいし、又は入力メモリ210に戻されてもよい(例えば、同じ演算ノードにおける別のパスに対するもの)。
【0028】
[0043]
図2の例示的なPSU 214は、例示的なORAM 212から、単一の確率分布に対応する平均ベース値及び分散ベース値を得る。例示的なPSU 214は、平均ベース値、分散ベース値、及び乱数発生器によって生成された乱数/疑似乱数、に基づいて出力を生成する。幾つかの例では、PSU 214は、平均ベース値、分散ベース値、及び複数の乱数/疑似乱数(例えば、複数のフォワード・パスに対応するもの)に基づいて、複数の出力を生成する。このような例では、PSU 214は、ノード110dに対して単一の出力値を生成するために、複数の出力値を平均化することができる。平均値及び分散値は単一の確率分布に対応するので、PSU 214は、訓練中に生成された平均及び分散に対応する確率分布に対応する出力値を出力する。各層108a-cは、同一又は異なる確率分布に対応する可能性がある。幾つかの実施例において、出力データは、混合確率分布(例えば、2つ以上のモードを有する分布)に対応する可能性がある。このような例では、システム・メモリ106は、混合確率分布についての2つ以上の平均値及び/又は分散値を含む可能性があり、PSU 214は、混合モデル確率分布に対応するGMMベースの出力を生成する。例示的なPSU 214は、平均値及び/又は分散値に基づいて確率分布に対応する出力を生成する。例えば、平均が0.7であり、分散が0.1である場合に、PSU 214は、0.7という平均と0.1という分散に基づく確率分布に対応する単一の入力に対するN個の出力(例えば、40個の出力)を生成することができる。PSU 214は、単一の確率分布に基づいて最終出力を生成するために、N個の出力を平均化してもよい。このようにして、バッチにおける異なる入力データ又は異なるフォワード処理パスは、異なる平均及び/又は分散値を使用して、更新された平均及び分散値を必要とせずに、並列に(例えば、同時に)実行されることが可能であり、それによって、更新された平均及び分散値を、システム・メモリ106からPSU 214へ送信するのに必要なリソース(例えば、処理リソース、帯域幅、クロック・サイクルなど)を削減することができる。幾つかの実施例では、複数のフォワード・パスが各フォワード・パスに対して独立に実行される。例示的なPSU 214は、
図2Bに関連して以下で更に説明される。
【0029】
[0044]
図2Bは例示的な層108bの追加的及び/又は代替的なブロック図であり、これは
図1の例示的なニューロン(タイル、演算ユニット、又はベイジアン演算ユニットと呼ばれる)110c-eを含む。
図2Bは、任意の層108a-c及び/又は任意の演算ノードa-fに関連して説明することが可能である。
図2Bの実施例は、
図2の例示的な分配メモリ206、例示的な処理要素(PE)208、例示的な入力メモリ210、例示的な出力メモリ212、及び例示的なプログラマブル・サンプリング・ユニット(PSU)214を含む。更に、
図2Bの実施例は、例示的な二乗論理回路220、例示的なマルチプレクサ(MUX)222,224,230、例示的なMUX制御回路225、例示的なRAM 226,228、例示的なガウシアン・サンプラ回路232、及び例示的な平均化回路234を含む。
図2Bの実施例は、3つの処理素子と3つのタイルを含み、3つの記憶要素からデータを取得し、データを3つの記憶要素に出力しているが、任意数の記憶要素、任意数のタイルにおける処理要素が存在してもよい。
【0030】
[0045] 上述のように、例示的なIRAM 210は、入力及び/又は活性化データを格納する。例示的なIRAM 210は、記憶した入力及び/又は活性化データを、例示的な二乗論理回路220、及び例示的なMUX 222の第1入力に出力する。例示的な二乗論理回路220は、入力データをそれ自身と乗算する数学的な二乗関数を実行する(例えば、I2を生成する)。例示的な二乗論理回路220は、二乗後の入力を、例示的なMUX 222の第2入力に出力する。
【0031】
[0046]
図2Bの例示的なMUX 222は、入力データ(I)と二乗入力データ(I
2)を受信する。更に、例示的なMUX 222は、例示的なMUX制御回路225からの選択入力を介して、制御信号を取得する。以下で更に説明されるように、例示的なMUX制御回路225は、MUX 222を制御して、ノード110dが、標準的なDNNとして(例えば、事前に設定されたウェイトを入力に適用することによって)、又はB-DNNとして(例えば、平均及び分散によって定義される確率分布に対応するウェイトを適用することによって)動作することを引き起こす。DNNとして動作する場合、例示的なMUX 222は、制御信号(例えば、論理low)をMUX 222の選択入力に出力して、MUX 222が、入力データ(I)を例示的なPE 208に出力することを引き起こす。B-DNNとして動作する場合、例示的なMUX 222は、制御信号(例えば、論理high)をMUX 222の選択入力に出力して、MUX 222が、入力データ(I)と二乗後の入力データ(I
2)を例示的なPE 208に出力することを引き起こす。MUX 222は、B-DNNモードで動作する場合に、両方の入力データを出力できるように、追加の構成要素を含んでもよい。
【0032】
[0047]
図2Bの例示的な分配メモリ206は、システム・メモリ106から(例えば、ウェイト・バッファ204を介して)平均及び分散値を得る。例示的な分配メモリ206は、例示的なRAM 226で平均を、例示的なRAM 228で分散を記憶している。RAM 228は、任意のタイプのメモリ、レジスタ、及び/又はストレージと置き換えることが可能である。このようにして、PE 208は、分配メモリ206からの平均及び分散値にアクセスして、入力データ(例えば、I及び/又はI
2)に適用し、以下で更に説明するように、平均ベースの結果(β)及び/又は分散ベースの結果(δ
2)を、例示的なの分配バッファ202に出力することができる。
【0033】
[0048]
図2Bの例示的なMUX 224は、例示的なRAMS 226,228から平均値及び分散値を受け取る。更に、例示的なMUX 224は、例示的なMUX制御回路225から、選択入力を介して制御信号を取得する。以下で更に説明されるように、例示的なMUX制御回路225は、例示的なMUX 224を制御して、ノード110dが、標準的なDNNとして(例えば、事前に設定されたウェイトを入力に適用することによって)、又はB-DNNとして(例えば、平均及び分散によって定義される確率分布に対応するウェイトを適用することによって)動作することを引き起こす。DNNとして動作する場合、例示的なMUX 224は、制御信号(例えば、論理low)をMUX 224の選択入力に出力して、MUX 224が、平均値を例示的なPE 208に出力することを引き起こす。B-DNNとして動作する場合、例示的なMUX 224は、制御信号(例えば、論理high)をMUX 224の選択入力に出力して、MUX 224が、平均値及び分散値を例示的なPE 208に出力することを引き起こす。MUX 224は、B-DNNモードで動作する場合に、両方の入力データを出力できるように、追加の構成要素を含んでもよい。
【0034】
[0049]
図2Bの例示的なPE 208は、単一の確率分布に対応する平均及び/又は分散値を、入力値及び/又は二乗後の入力値に適用し(例えば、乗算し)、出力データ(例えば、平均ベースのデータ(平均と入力データの積、本件ではβと称する)及び/又は分散ベースのデータ(分散と入力データの積、本件ではδ
2と称する))を生成する。例えば、DNNとして動作する場合、PE 208は、入力値及び平均値を取得し、それらを乗算して出力値を生成する。B-DNNとして動作する場合、PE 208は、入力値、二乗後の入力値、平均値、及び分散を取得する。例示的なPE 208は、平均に入力値を乗算することによって(μI)、平均値ベースの値(β)を生成してもよい。例示的なPE 208は、分散値に二乗後の入力値を乗算することによって(I
2σ
2)、分散ベースの値(δ
2)を生成してもよい。例示的なPE 208は、生成された値を、記憶されるように例示的なORAM 212に出力する。
【0035】
[0050]
図2Bの例示的なMUX制御回路225は、例示的なMUX222、224、230の入力を選択するために、1つ以上の制御信号を送信することによって、例示的なMUX222、224、230によって出力されるものを制御する。上述したように、例示的なMUX制御回路224は、1つ以上の制御信号を用いて、例示的なMUX222、224を制御して、ノード110cが、DNN又はB-DNNとして動作することを引き起こす。以下で更に説明されるように、例示的なMUX制御回路225は、1つ以上の制御信号を出力して、PSU 214が、複数のノード110c-eの出力を直列に生成できるようにする。
【0036】
[0051]
図2Bの例示的なMUX 230は、M個のタイルに対応する異なるノード110c-eの例示的なORAM 212からの出力を取得する。例示的なMUX制御回路225は、制御信号を例示的なMUX230の選択入力に送り、PSU 214が、一度に、単一ノードに対する確率分布に対応する出力を生成することを可能にする。このようにして、ノード110c-eは、平均ベース及び分散ベースの値を並列的に生成することができ、全てのノード110c-eは、対応する出力を生成するために単一のPSU 214を共有することができる
[0052]
図2Bの例示的なガウシアン・サンプル回路232は、平均ベース値及び分散ベース値を、例示的なORAM 212から取得する。更に、ガウシアン・サンプル回路232は、平均ベース値及び分散ベース値に適用される乱数/疑似乱数を生成し、その結果、平均及び分散によって定義される確率分布に従うウェイトに適用される入力に対応する出力を生じる。ガウシアン・サンプル回路232は、単一の確率分布に対応する複数の重み付け出力に対応する複数の乱数/疑似乱数を生成することができる。このようにして、単一の入力値を使用して複数の出力を生成することができる。幾つかの例において、ガウシアン・サンプル回路232は、混合確率分布(例えば、2つ以上の平均及び/又は2つ以上の分散を有する)に対応する1つ以上のGMMベースの出力を生成することができる。例示的なガウシアン・サンプル回路232は、
図4A及び/又は4Bに関連して以下で更に説明される。
【0037】
[0053]
図2Bの例示的な平均回路234は、例示的なガウシアン・サンプル回路232の複数の出力を平均化し(例えば、数学的な代表値又は平均値)、確率分布に対応するウェイトに適用される入力値に対応する最終的な出力値を生成する。例示的な平均回路234は、例示的なORAM 212に格納されるように、平均(例えば、最終出力)を例示的なORAM 212に出力する。例示的なORAM 212は、最終出力値を、分類に対応する値として、及び/又は1つ以上の層108a-cへ入力されるべき値として出力する。
【0038】
[0054]
図3は、後続の層に対する出力値を生成するために、例示的な入力アクティベーション(活性化)300を処理する例を示す。
図3は例示的な層の処理順序302を含む。
図3の例は、例示的な活性化300に関連して説明されるが、活性化300は、入力値(例えば、BDNN 104の最初の層)で置き換えられてもよい。
図3の例は、
図2A及び2Bの例示的なPE 208を含む
[0055] 例示的な活性化300は、
図2A及び
図2Bの例示的な入力メモリ210に記憶される。セットは、N個のフォワード・パスのサブセットに対応するp個の活性化を含み(例えば、Nは、フォワード・パスの任意の数とすることが可能であり、例えば1, 2, 3, 4等である。)、結果として、合計N個の処理済の活性化を生じる。フォワード・パスの第1サブセットはタイル0によって処理される活性化[1,p]に対応し、フォワード・パスの第2サブセットはタイル1によって処理される活性化[p+1,2p]に対応し、...フォワード・パスの第XサブセットはタイルMにおいて処理される活性化[N-p+1,N]に対応する。活性化は任意のタイプのデータに対応する可能性がある。例えば、活性化は、活性化が画像及び/又はビデオ・データに対応する場合には、ピクセル・データであってもよい。各々の活性化は、例示的な入力メモリ210に格納されるサブ・データに分割されたデータのセットに対応する。例えば、16個のPE 208に接続された16個の入力メモリ210がある場合、活性化1はI
1, I
2, I
3... I
16, に分割され、活性化2はI
1, I
2, ... I
16, に分割され、等々である。
【0039】
[0056] 第1タイル(タイルO)
図2A及び/又は2Bの例示的なPE 208は、入力メモリ210からの最初のp個の活性化[1-p](例えば、バッチにおける異なる画像又は異なるフォワード・パスに対応する)と、分配メモリ206からの第1平均値及び分散値とにアクセスする。上述したように、1つ以上の平均及び分散値は、単一の確率分布に対応する。
【0040】
[0057]
図3の例示的なPE 208は、平均及び分散値のセットを、活性化の対応するサブセットに適用する。例えば、第1演算ノードの第1PE 208(例えば、タイル0)は、平均及び分散を、最初のp個の活性化(活性化1ないし活性化p)のうちの第1データ・ポイント(I
1とI
1
2)に適用し、第2PE 208は、平均及び分散を、最初のp個の活性化(活性化1ないし活性化p)のうちの第2データ・ポイント(I
2)に適用し、...、X番目のPE 208は、平均値と分散を、最初のp個の活性化(活性化1ないし活性化p)のうちのX番目のデータポイント(I
X)に適用し、ここで、各々の活性化は、バッチにおける異なる画像又は異なるフォワード・パスに対応する。幾つかの実施例では、同時に、同じ層108bの第2演算ノード110d(例えば、タイル1)が、平均及び分散を、活性化の対応する第2サブセットに適用する。例えば、(例えば、タイル1である)第2演算ノードの
第1PE 208は、平均値及び分散値を、活性化p+1ないし2pのうちの第1データ・ポイント点(I
1)に適用し、
第2PE 208は、平均値及び分散値を、p個の活性化p+1ないし2pのうちの第2データ・ポイント(I
2)に適用する、等々である。平均値及び分散値が活性化に適用された後、出力データ(例えば、平均ベースのデータ及び分散ベースのデータ)は、例示的な出力メモリ212に格納される。PSU 214は、平均ベースのデータ及び分散ベースのデータを、出力メモリ212から取得し、ガウシアン・サンプルを使用して複数の出力を生成し、その結果を平均化して単一の出力を生成する(例示的な出力メモリ212に記憶される)。出力は、後続のレイヤに渡される(あるいは、入力メモリ210に又は以後の反復のために前のレイヤの入力メモリに戻される)。出力を出力メモリ212に記憶した後、例示的なPE 208は、同じ又は更新されたウェイトを使用して、後続の画像及び/又はフォワード・パスを処理することができる。
【0041】
[0058]
図4Aは、
図2Bの例示的なガウシアン・サンプラ回路232のブロック図である。例示的なガウシアン・サンプラ回路232は、例示的なガウシアン乱数発生器(GRNG)回路400、例示的なパラメトリゼーション回路408、例示的なGMM処理回路414、及び例示的なメモリ・インターフェース420を含む。
【0042】
[0059]
図4Aの例示的なGRNG回路400は、ランダムな数列(例えば、数の配列)を生成する。GRNG回路400は、複数の乱数を、例示的なパラメトリゼーション回路408に出力する。例示的なパラメトリゼーション回路408は、複数の乱数を、平均ベース値及び分散ベース値(例えば、メモリ・インターフェース420からのもの)に適用する。例えば、パラメトリゼーション回路408は、複数の乱数のそれぞれに、分散ベース値を乗算し、その積に、平均ベース値を加算して、複数の出力を生成することができる。幾つかの実施例では、出力は、メモリ・インターフェース420を介して例示的なORAM 212に記憶される。幾つかの実施例では、GMM処理回路414は、出力に基づいてGMM出力を生成する。GMMモードでは、PSU 200は、2つ以上の平均及び2つ以上の分散に対応する単一混合モデル確率分布に対応する複数の出力及び/又はサンプルを生成する。GMMモードの場合、出力は、マルチ・モデル分布に対応するサンプルを生成するために、例示的なGMM処理回路414に出力される。例示的なGMM処理回路414は、混合モデル確率分布(例えば、2つ以上の平均及び/又は分散値を有するガウシアン確率分布)に対応する出力及び/又はサンプルを生成する。幾つかの例において、演算ノードは、混合モデル分布に対応する出力を生成するように訓練されてもよい。例示的なガウシアン・サンプラ回路232は、
図4Bに関連して以下で更に説明される。
【0043】
[0060]
図4Bは、
図2Bの例示的なガウシアン・サンプラ回路232のブロック図である。例示的なガウシアン・サンプラ回路232は、例示的なガウシアン乱数発生器(GRNG)回路400、例示的なレジスタ402、例示的な論理ゲート404、例示的なアダマール変換回路406、例示的なパラメトリゼーション回路408、例示的な乗算アレイ410、例示的な加算アレイ412、例示的なGMM処理回路414、例示的な乗算器アレイ416、例示的な加算器ツリー&平均回路418、並びに例示的なメモリ・インターフェース420を含む。
【0044】
[0061]
図4Bの例示的なGRNG回路400は、ランダムな数列(例えば、数の配列)を生成する。幾つかの実施例では、GRNG回路400は回路である。数は任意のフォーマット(例えば、固定小数点、浮動小数点など)におけるものであってもよい。例示的なGRNG回路400は、例示的なレジスタ402を含む。例示的なGRNG回路400は、例示的なレジスタ402を含む。レジスタ402は、線型フィードバック・シフト・レジスタ、セルラー・オートマタ・シフト・レジスタ、及び/又は任意の他のタイプのシフト・レジスタであってもよい。例示的なレジスタ402は可変長であってもよく、連結されて、長い一様な擬似ランダム・シーケンスを形成してもよい。個々のユニットの長さは、長いシーケンスにわたって疑似ランダム性を保証するために、互いに素(co-prime)であってもよい。レジスタ402は、Nビット長の擬似ランダム・シーケンスを出力することができ、ここでNは2のべき乗である。レジスタ402の複数の出力は、例示的な論理ゲート404に入力される。
【0045】
[0062]
図4Bの例示的な論理ゲート404は、レジスタ402の複数の出力に基づいて、排他的OR(XOR)関数を実行する。論理ゲート404の出力(例えば、レジスタ402の複数の出力のXOR)は、例示的なアダマール変換回路406に供給されるNビット疑似ランダム・シーケンスである。アダマール変換回路406は、論理ゲート404によって出力されるNビット疑似ランダム・シーケンスを、(N+k)ビットのガウシアン疑似ランダム・シーケンス(例えば、G
1-G
N)に変換し、ここで、kはアダマール変換回路406におけるステージ数である。アダマール変換回路406の異なる数のシーケンス(G
1-G
N)出力は、ゼロ平均及び単位分散を有する。出力シーケンスは、例示的なパラメトリゼーション回路408に入力される。
【0046】
[0063] 例示的なパラメトリゼーション回路408は、単一の平均及び分散値に基づく確率分布に対応する複数のウェイトを並列に(例えば同時に)生成する。例示的なパラメトリゼーション回路408は、システム・メモリ106及び/又は分配メモリ206からメモリ・インターフェース420を介して単一の平均及び分散値を取得する。ウェイトを生成するために、パラメトリゼーション回路408は、GRNG回路400によって出力されるシーケンス中の各数字(G
1-G
N)に分散を乗算し、得られた積に平均を加算する。例えば、乗算器アレイ410は、単一の分散値(例えば、
図2Aのシステム・メモリ106からのもの、及び/又は
図2Bの分配バッファ202からのもの)に、GRNG回路400からの出力シーケンスに属する数(G
1-G
N)の各々を乗算して、N個の積のアレイを生成する。加算器アレイ412は、積のアレイに単一の平均値を加算して、N個のウェイトを生成する。N個のウェイトは、式4に基づいて以下のように表現される。
[0064]
【0047】
【数4】
[0065] 式4において、Oは出力であり、GはGRNG回路400によって出力されるシーケンスの数であり、βはORAM 212に格納された平均ベースの値(例えばμI)であり、δ
2はORAM 212(例えばI
2σ
2)に格納された分散ベースの値である。例示的なパラメトリゼーション回路208は、FP16表現フォーマット、INT8表現フォーマット、及び/又は任意の他の表現フォーマットをサポートする。何らかの表現フォーマット(例えば、FP16)に関し、浮動小数点変換回路が含まれて、例示的なパラメトリゼーション回路408に入力する前に、GRNG回路400の固定小数点出力を、浮動小数点に変換してもよい。幾つかの実施例では、アダマール変換回路406の出力は、N個のフォワード・パス及び/又はN個の活性化に適用するのに十分な総数のシーケンス内の数を含む。このように、パラメトリゼーション回路408は、N個の活性化のために複数の出力を生成することができる。従って、1つ以上のPE 208は、N個のフォワード・パス又はバッチ内のN個の画像に対応するN個の活性化を、単一の確率分布に対応するN個の出力を用いて処理することができる。パラメトリゼーション回路の出力(例えば、出力O
1-O
N)は、
図2Bの例示的な平均回路234及び/又は例示的なGMM処理回路414に出力されてもよい。
【0048】
[0066]
図2A及び/又は
図2BのPSU 200は、ガウシアン・モード又はGMMモードで動作することができる。ガウシアン・モードでは、PSU 200は、1つの平均及び1つの分散に対応する単一の確率分布に対応する複数の出力及び/又はサンプルを生成する。GMMモードでは、PSU 200は、2つ以上の平均及び2つ以上の分散に対応する単一の混合モデル確率分布に対応する複数の出力及び/又はサンプルを生成する。GMMモードの場合、出力は、マルチ・モデル分布に対応するサンプルを生成するために、例示的なGMM処理回路414に出力される。
【0049】
[0067]
図4Bの例示的なGMM処理回路414は、混合モデル確率分布(例えば、2以上の平均及び/又は分散値を有するガウシアン確率分布)に対応する出力及び/又はサンプルを生成するために使用される。幾つかの実施例において、演算ノードは、混合モデル分布に対応する出力を生成するように訓練されてもよい。このような例では、GMM処理回路414は、混合モデル分布に対応する、システム・メモリ106、分布バッファ202、及び/又はORAM 212(例えば、PE 208によって処理された後のもの)からの追加的な平均ベース値及び/又は分散ベース値にアクセスすることができる。MモードのGMM分布は、以下の式5で表される。
[0068]
【0050】
【数5】
[0069] 上記の式(2)において、β
i及びδ
i
2は、GMMにおけるi番目のガウシアン分布の平均及び分散ベースの値であり、φ
iはその分布のウェイトである。GMMは、ニューラル・ネットワークの精度を改善することを支援するために、複数の訓練された分布によって特徴付けられる。例示的なGMM処理回路414は、式5を書き換えたバージョンに対応する以下の式6に基づいてGMMを生成する。
[0070]
【0051】
【数6】
[0071] 例えば、GMM処理回路414は、例示的なパラメトリゼーション回路408の出力に、φ
1-Mの追加的な分散ベースの値を乗算する例示的な乗算器アレイ416を含む。例示的な加算器ツリー&平均回路418は、積(例えば、出力にφ
iを乗算したもの)を取得して累積し、混合モデル分布を表すサンプルを生成する。例示的な加算器ツリー&平均回路418は、GMMベースの出力を、例示的な分配バッファ202に出力する。
【0052】
[0072]
図4Bの例示的なメモリ・インターフェース420は、例示的なORAM 212からの平均ベース値及び/又は分散ベース値にアクセスする。例示的なメモリ・インターフェース420は、単一の確率分布に対応するウェイト及び/又はサンプルを生成するために、取得した及び/又はアクセスした平均値及び/又は分散値を、例示的なパラメトリゼーション回路408及び/又は例示的なGMM処理回路414に提供する。
【0053】
[0073]
図1のBDNN 104を実装する例示的な方法が
図1-4に示されているが、
図1-4に示される1つ以上の要素、プロセス、及び/又はデバイスは、他の任意の方法で組み合わされ、分割され、再配置され、省略され、除去され、及び/又は実装されてもよい。更に、例示的なシステム・メモリ106、例示的な層108a-c、例示的な演算ノード110a-c、例示的なPSU 214、例示的なウェイト・バッファ202、例示的な分配メモリ206、例示的なPE 208、例示的な入力メモリ210、例示的な出力メモリ212、例示的なGRNG回路400、例示的なレジスタ402、例示的な論理ゲート404、例示的なアダマール変換回路406、例示的なパラメトリゼーション回路408、例示的な乗算器アレイ410、例示的な加算器アレイ412、例示的なGMM処理回路414、例示的な乗算器アレイ416、加算器ツリー&平均回路418、例示的なメモリ・インターフェース420、及び/又はより一般的には、
図1-4の例示的なBDNN 104は、ハードウェア、ソフトウェア、ファームウェア、及び/又はハードウェア、ソフトウェア、及び/又はファームウェアの任意の組み合わせによって実装されてもよい。従って、例えば、例示的なシステム・メモリ106、例示的な層108a-c、例示的な演算ノード110c-e、例示的なPSU 214、例示的なウェイト・バッファ202、例示的な分配メモリ206、例示的なPE 208、例示的な入力メモリ210、例示的な出力メモリ212、例示的なGRNG回路400、例示的なレジスタ402、例示的な論理ゲート404、例示的なアダマール変換回路406、例示的なパラメトリゼーション回路408、例示的な乗算器アレイ410、例示的な加算器アレイ412、例示的なGMM処理回路414、例示的な乗算器アレイ416、例示的な加算器ツリー&平均回路418、例示的なメモリ・インターフェース420、及び/又はより一般的には、
図1-4の例示的なBDNN 104のうちの任意のものが、1つ以上のアナログ又はデジタル回路、論理回路、プログラマブル・プロセッサ、プログラマブル・コントローラ、グラフィックス処理回路(GPU)、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールド・プログラマブル論理デバイス(FPLD)によって実装されることが可能である。単にソフトウェア及び/又はファームウェアの実装をカバーする本件特許出願の何らかの装置又はシステム・クレームを読み込むと、例示的なシステム・メモリ106、例示的な層108a-c、例示的な演算ノード110c-e、例示的なPSU 214、例示的なウェイト・バッファ202、例示的な分配メモリ206、例示的なPE 208、例示的な入力メモリ210、例示的な出力メモリ212、例示的なGRNG回路400、例示的なレジスタ402、例示的な論理ゲート404、例示的なアダマール変換回路406、例示的なパラメトリゼーション回路408、例示的な乗算器アレイ410、例示的な加算器アレイ412、例示的なGMM処理回路414、例示的な乗算器アレイ416、例示的な加算器ツリー&平均回路418、例示的なメモリ・インターフェース420、及び/又はより一般的には、
図1-4の例示的なBDNN 104のうちの少なくとも1つが、メモリ、デジタル多用途ディスク(DVD)、コンパクト・ディスク(CD)、ブルー・レイ・ディスク等のような、ソフトウェア及び/又はファームウェアを含む非一時的なコンピュータ読み取り可能な記憶デバイス又は記憶ディスクを含むようにここで明確に定義される。更に、
図1-4の例示的なBDNN 104は、
図1-3に示されるものに加えて、又はその代わりに、1つ以上の要素、プロセス及び/又はデバイスを含んでもよく、及び/又は図示された要素、プロセス及びデバイスの何れか又は全てのうちの1つより多くを含んでもよい。本件で使用されるように“通信において”という語句は、その変形を含めて、1つ以上の中間的な構成要素を介した直接的な通信及び/又は間接的な通信を包含し、直接的な物理的な(例えば、配線された)通信及び/又は常時通信を必要とせず、むしろ、周期的な間隔、スケジューリングされた間隔、非周期的な間隔、及び/又は1回限りのイベントにおける選択的な通信を包含する。
【0054】
[0074]
図1-4の例示的なBDNN 104を実装するための例示的なハードウェア・ロジック、機械読み取り可能な命令、ハードウェア実装による状態マシン、及び/又はそれらの任意の組み合わせのフローチャート表現が、
図5及び/又は
図6に示されている。機械読み取り可能な命令は、
図7に関連して後述する例示的なプロセッサ・プラットフォーム600に示されるプロセッサ712のようなコンピュータ・プロセッサによる実行のための1つ以上の実行可能プログラム又は実行可能プログラムの一部であってもよい。プログラムは、CD-ROM、フロッピー・ディスク、ハード・ドライブ、DVD、ブルー・レイ・ディスク、又はプロセッサ712に関連付けられたメモリのような非一時的コンピュータ読み取り可能な記憶媒体に記憶されたソフトウェアで実現されてもよいが、プログラム全体及び/又はその一部は、代替的に、プロセッサ712以外のデバイスによって実行され、及び/又はファームウェア又は専用ハードウェアで実現することができる。更に、
図5及び/又は
図6に示すフローチャートを参照して、例示的なプログラムが説明されているが、例示的なBDNN 104を実装する多くの他の方法が代替的に使用されてもよい。例えば、ブロックの実行順序は変更されてもよく、及び/又は説明されたブロックの一部は変更され、削除され、又は組み合わせられてもよい。追加的又は代替的に、何れかの又は全てのブロックは、ソフトウェア又はファームウェアを実行することなく、対応する動作を実行するように構成された1つ以上のハードウェア回路(例えば、個別及び/又は集積アナログ及び/又はデジタル回路、FPGA、ASIC、比較器、演算増幅器(op-amp)、論理回路など)によって実装されてもよい。
【0055】
[0075] 本件で説明される機械読み取り可能な命令は、圧縮されたフォーマット、暗号化されたフォーマット、フラグメント化されたフォーマット、コンパイルされたフォーマット、実行可能なフォーマット、パッケージ化されたフォーマット等のうちの1つ以上で保存されてもよい。本件で説明されるような機械読み取り可能な命令は、機械実行可能命令を作成、製造、及び/又は生成するために使用されることが可能なデータ(例えば、命令の一部分、コード、コードの表現など)として記憶されてもよい。例えば、機械読み取り可能な命令は、フラグメント化されて、1つ以上の記憶デバイス及び/又は演算デバイス(例えば、サーバー)に記憶されてもよい。機械読み取り可能な命令は、インストール、修正、アダプテーション、更新、組み合わせ、補足、構成、復号化、圧縮解除、アンパッキング、配信、再割り当て、コンパイルなどのうちの1つ以上を、それらがコンピューティング・デバイス及び/又は他のマシンによって直接的に読み取れるように、解釈できるように、及び/又は実行できるようにするために要求すされてもよい。例えば、機械読み取り可能な命令は、個別に圧縮され、暗号化され、別々の演算デバイスに記憶される複数のパーツに記憶されてもよく、これらのパーツは、復号化され、解凍され、組み合わされると、本件で説明されているようなプログラムを実行する実行可能命令のセットを形成する。
【0056】
[0076] 別の実施例では、機械読み取り可能な命令は、それらがコンピュータによって読み込まれることが可能な状態で記憶されてもよいが、ライブラリ(例えば、ダイナミック・リンク・ライブラリ(DLL))、ソフトウェア開発キット(SDK)、アプリケーション・プログラミング・インターフェース(API)などの追加を、特定の演算デバイス又はその他のデバイスで命令を実行するために必要とする可能性がある。別の実施例では、機械読み取り可能な命令は、機械読み取り可能な命令及び/又は対応するプログラムが、全体的に又は部分的に実行されることが可能になる前に、構築されるように(例えば、設定が記憶されるように、データが入力されるように、ネットワーク・アドレスが記録されるように)要求される可能性がある。従って、開示される機械読み取り可能な命令及び/又は対応するプログラムは、そのような機械読み取り可能な命令及び/又はプログラムを包含するように意図されており、保存される場合又はその他の静止状態又は輸送中の場合の機械読み取り可能な命令及び/又はプログラムの特定のフォーマット又は状態によらない。
【0057】
[0077] 本件で説明される機械読み取り可能な命令は、過去、現在、又は将来の命令言語、スクリプト言語、プログラミング言語などの何れによっても表現することが可能である。例えば、マシン読み取り可能な命令は、C、C++、Java、C#、Perl、Python、JavaScript、HTML(Hyper Text Markup Language)、SQL(Structured Query Language)、Swiftなどの任意の言語を使用して表すことができる。
【0058】
[0078] 上述したように、
図5-6の例示的なプロセスは、ハード・ディスク・ドライブ、フラッシュ・メモリ、リード・オンリ・メモリ、コンパクト・ディスク、デジタル多用途ディスク、キャッシュ、ランダム・アクセス・メモリ、及び/又は任意の他の記憶デバイス又は記憶ディスクであって、情報が任意の持続時間にわたって(例えば、長期間にわたって、永久的に、短時間にわたって、一時的なバッファリングの間に、及び/又は情報をキャッシュする間に)記憶されるもの、のような非一時的なコンピュータ及び/又は機械読み取り可能な媒体に記憶される実行可能な命令(例えば、コンピュータ及び/又は機械読み取り可能な命令)を使用して実装されてもよい。本件で使用されるように、非一時的なコンピュータ読み取り可能な媒体という用語は、任意のタイプのコンピュータ読み取り可能な記憶デバイス及び/又は記憶ディスクを含むように、且つ伝搬する信号を排除し、伝送媒体を排除するように明確に定義される。
【0059】
[0079] “含んでいる”及び“備えている”(及びそれらの全ての形式及び時制)は本件ではオープン・エンド用語であるように使用されている。従って、クレームが何らかの形式の“含む”又は“備える”(例えば、備える、含む、備えている、含んでいる、有している等)が、プリアンブルとして又は任意の種類のクレームの記載で使用している場合、追加的な要素、用語などが、対応するクレーム又は記載の範囲外に陥ることなく、存在する可能性があることが理解されるべきである。本件で使用されるように、「少なくとも」という語句が例えばクレームのプリアンブルにおいて移行語として使用される場合、それは、 “備えている”及び“含んでいる”がオープン・エンドにされているのと同様に、オープン・エンドにされている。用語“及び/又は”が、例えばA、B、及び/又はCのような形式で使用される場合、それはA、B、Cの任意の組み合せ又はサブセットを指し、例えば、(1)A単独、(2)B単独、(3)C単独、(4)AとB、(5)AとC、(6)BとC、及び(7)AとBとCを指す。本件において構造、構成要素、アイテム、オブジェクト及び/又は事物を記載する文脈で使用される場合に、語句“A及びBのうちの少なくとも1つ”は、(1)少なくとも1つのA、(2)少なくとも1つのB、及び(3)少なくとも1つのAと少なくとも1つのB、のうちの何れかを含む実現を指すように意図されている。同様に、本件において、構造、構成要素、アイテム、オブジェクト、及び/又は事物を説明する文脈で使用される場合、語句“A又はBのうちの少なくとも1つ”は、(1)少なくとも1つのA、(2)少なくとも1つのB、及び(3)少なくとも1つのAと少なくとも1つのB、のうちの何れかを含む実現を指すように意図されている。本件において、プロセス、命令、アクション、アクティビティ及び/又はステップのパフォーマンス又は実行を説明する文脈で使用される場合、語句“A及びBのうちの少なくとも1つ”は、(1)少なくとも1つのA、(2)少なくとも1つのB、及び(3)少なくとも1つのAと少なくとも1つのB、のうちの何れかを含む実現を指すように意図されている。同様に、本件において、プロセス、命令、アクション、アクティビティ、及び/又はステップのパフォーマンス又は実行を説明する文脈で使用される場合、語句“A又はBのうちの少なくとも1つ”は、(1)少なくとも1つのA、(2)少なくとも1つのB、及び(3)少なくとも1つのAと少なくとも1つのB、のうちの何れかを含む実現を指すように意図されている。
【0060】
[0080] 本件で使用されるように、単独の参照(例えば、“ある(a)”、“或る(an)”、“第1”、“第2”など)は、複数を除外していない。用語“ある(a)”又は“或る(an)”は、本件で使用されるように、1つ以上のそのエンティティを指す。用語“ある(a)”(又は“或る(an)”)、“1つ以上”、及び“少なくとも1つ”は、本件では可換に使用されることが可能である。更に、個々に列挙されているが、複数の手段、要素、又は動作方法は、例えば、単一のユニット又はプロセッサによって実装されてもよい。更に、個々の特徴は、異なる実施例又はクレームに含まれる可能性があるが、これらは、組み合わされる可能性があり、また、異なる実施例又はクレームに含まれることは、特徴の組み合わせが実現可能及び/又は有利ではないことを意味してはいない。
【0061】
[0081]
図5は、入力及び/又は活性化に基づく単一の確率分布に対応する出力を生成するために、
図1-4の層108a-cのうちの任意の1つを実現するために実行されることが可能な例示的な機械読み取り可能な命令500のフローチャート表現である。命令500は、
図1-4の例示的な層108bに関連して説明されるが、命令500は、任意のタイプのデータ(例えば、入力データ又は活性化)を使用する、任意のタイプのニューラル・ネットワーク又はその他のAIベースのモデルにおける任意のニューロンに関連して説明されてもよい。
【0062】
[0082] ブロック502において、例示的なMUX制御回路225は、入力データが取得された(例えば、入力メモリ210に記憶された)かどうかを判断する。例示的なMUX制御回路225が、入力データは得られていないと判断した場合(ブロック502:NO)、入力データが得られるまで、制御はブロック502に戻る。例示的なMUX制御回路225が、入力データが取得されたと判断した場合(ブロック502:YES)、例示的なMUX制御回路225は、層108bがDNNとして動作すべきか、又はB-DNNとして動作すべきかを(例えば、ユーザーの好み、製造者の推奨、及び/又は他の構成要素からの指示に基づいて)判断する(ブロック504)。
【0063】
[0083] 例示的なMUX制御回路225が、層108bはDNNとして動作すべきであると判断した場合(ブロック504:DNN)、例示的なMUX制御回路225は、DNNモードで動作するようにMUX222、224を制御する(ブロック516)。例えば、MUX制御回路225は、1つ以上の制御信号をMUX222、224の選択入力に出力し、MUXが、平均値及び入力データを例示的なPE 208に出力することを引き起こす。
例示的なMUX制御回路225が、層108bはB-DNNとして動作すべきであると判断した場合(ブロック504:B-DNN)、例示的なMUX制御回路225は、B-DNNモードで動作するようにMUX222、224を制御する(ブロック506)。例えば、MUX制御回路225は、1つ以上の制御信号をMUX222、224の選択入力に出力し、MUXが、平均、分散、入力、及び二乗された入力を例示のPE 208に出力することを引き起こす。
【0064】
[0084] ブロック508において、例示的なPE 208は、平均値及び分散値を入力/活性化データに適用する。例えば、1つ以上のPE 208は、平均を入力/活性化値と乗算し、分散を入力/活性化値の二乗と乗算して、平均ベース値及び分散ベース値を生成することができる。ブロック510において、例示的な出力メモリ212は、結果(例えば、平均ベース値及び分散ベース値)を格納する。ブロック512において、例示的なMUX制御回路225は、出力値を生成する時間であるかどうかを、例示的な出力メモリ212に記憶された平均ベース値及び分散ベース値に基づいて判断する。上述したように、PSU 214が層内の全てのノードについてウェイトを計算する場合、MUX制御回路225は、PSU 214が各ノードについての全ての出力データを直列に処理するように(例えば、時点1では第1ノード、時点2では第2ノード、時点3では第3ノードに関するデータを処理するように)、MUX230を制御する。
【0065】
[0085] 例示的なMUX制御回路225が、出力値を生成する時ではないと判断した場合(ブロック512:NO)、制御は、その時になるまでブロック512に戻る。例示的なMUX制御回路225が、出力値を生成する時であると判断した場合(ブロック512:YES)、MUX制御回路225は、1つ以上の制御信号を、例示的なMUX230の選択入力に出力し、その結果、PSU 214は、ノード110cの情報に基づいて出力を生成することができ、例示的なPSUは、
図6に関連して以下で更に説明されるように、出力を生成する(ブロック514)。
【0066】
[0086] ブロック518において、例示的な入力メモリ210は、追加的な入力データが取得された (例えば、入力メモリ210に記憶された)かどうかを判断する。例示的な入力メモリ210が、入力データは取得されていないと判断した場合(ブロック502:NO)、命令は終了する。例示的な入力メモリ210が、追加的な入力データが得られたと判断した場合(ブロック502:YES)、制御はブロック504に戻る。
【0067】
[0087]
図6は、ブロック512に関連して上述したように、出力を生成するために、
図1-4の層108a-cのうちの任意の1つを実装するために実行される可能性がある例示的な機械読み取り可能な命令512のフローチャート表現である。命令512は、
図1-4の例示的な層108bに関連して説明されるが、命令512は、任意のタイプのデータ(例えば、入力データ又は活性化)を使用する、任意のタイプのニューラル・ネットワーク又はその他のAIベースのモデルにおける任意のニューロンに関連して説明されてもよい。
【0068】
[0088] ブロック602において、例示的なGRNG回路400は、乱数(又は擬似乱数)シーケンスを生成する(乱数シーケンスは、例えば、層108b全体で処理されるべき活性化の数、又は演算ノード110c-eのうちの特定の1によって処理されるべき活性化の数、に対応する複数の数G
1-G
Nを含む)。GRNG回路400は、
図4Bに関連して上述したように、複数のレジスタ402の出力のXOR演算のアダマール変換に基づいて、乱数/疑似乱数シーケンスを生成することができる。ブロック604において、例示的なパラメトリゼーション回路408は、出力メモリ212からの結果(例えば、平均ベース値及び分散ベース値)にアクセスする。
【0069】
[0089] ブロック606において、例示的な乗算器アレイ410は、(a)乱数/擬似乱数シーケンスからの乱数/擬似乱数のアレイ(例えば、G1-GN)、及び(b)結果の第1要素(例えば、分散ベースの値(例えば、δ2))に基づいて、スカラー乗算を実行することによって、複数の積(δ2G1,δ2G2,...,δ2GN)を生成する。ブロック608において、例示的な加算器アレイ412は、結果の第2要素(例えば、平均ベース値(β))を複数の積に加算することによって、単一の平均ベース値(β)及び分散ベース値(δ2)に対応する複数の出力(例えば、O1-ON)を生成する。乱数/疑似乱数シーケンスはN個の総数を含むので、加算器アレイ412は、単一の平均及び分散値に基づく確率分布に対応するN個のウェイトを生成する。
【0070】
[0090] ブロック610において、例示的なGMM処理回路414は、PSU 214がGMMモデルで動作していることを判別する(例えば、複数のモード及び分散に対応する確率分布を生成する)。例えば、システム・メモリ106は、使用される確率分布が混合モデルである旨の指示を保存し、及び/又は、使用される確率分布が混合モデル分布である場合には、複数の平均/平均ベース値及び分散/分散ベースの値を含むことができる。例示的なGMM処理回路414が混合モデル・サンプルは不要であると判断した場合(ブロック610:NO)、制御はブロック614に続く。
【0071】
[0091] 例示的なGMM処理回路414が、混合モデル・サンプルが必要とされていると判断した場合(ブロック610:YES)、例示的なGMM処理回路414は、複数の出力及び混合モデル分布データに基づいて混合モデル・ベースの出力を生成する(ブロック612)。例えば、アレイ乗算器416は、出力O
1-O
Nに値φ
i-N(例えば、例示的な出力メモリ212に記憶されている値)を乗算し、混合モデル分布に対応する積を生成する。更に、例示的な加算器ツリー&平均回路418は、1つ以上の追加的な平均/平均ベース値を、混合モデル・ベースの積に追加して、混合モデル・サンプルを生成する。ブロック614では、例示的な平均回路234は、N個の出力に基づいて数学的な代表値及び/又は平均を求めることにより、出力を平均化する。ブロック616において、例示的な出力メモリ212は、ノードの出力として平均を記憶する。616の後、制御は
図5のブロック514に戻る。
【0072】
[0092]
図7は、
図1-4の例示的なBDNN 104を実装するために
図5-6の命令を実行するように構成された例示的なプロセッサ・プラットフォーム700のブロック図である。プロセッサ・プラットフォーム700は、例えば、サーバー、パーソナル・コンピュータ、ワークステーション、自己学習マシン(例えば、ニューラル・ネットワーク)、モバイル・デバイス(例えば、携帯電話、スマートフォン、iPadTMのようなタブレット)、パーソナル・デジタル・アシスタント(PDA)、インターネット・アプライアンス、又は任意の他のタイプの演算デバイスであってもよい。
【0073】
[0093] 図示された実施例のプロセッサ・プラットフォーム700は、プロセッサ712を含む。図示の実施例のプロセッサ712は、ハードウェアである。例えば、プロセッサ712は、任意の所望のファミリー又は製造業者からの1つ以上の集積回路、論理回路、マイクロプロセッサ、GPU、DSP、又はコントローラによって実装することができる。ハードウェア・プロセッサは、半導体ベース(例えば、シリコン・ベース)のデバイスであってもよい。この実施例では、プロセッサ712は、例示的な層108a-c、例示的な演算ノード110c-e、例示的なPSU 214、例示的なPE 208、例示的な二乗回路220、例示的なMUX222、224、230、例示的なMUX制御回路225、例示的な平均回路234、例示的なGRNG回路400、例示的な論理ゲート404、例示的なアダマール変換回路406、例示的なパラメトリゼーション回路408、例示的な乗算器アレイ410、例示的な加算器アレイ412、例示的なGMM処理回路412、例示的な乗算器アレイ416、例示的な加算器ツリー&平均回路418、例示的なメモリ・インターフェース420(
図1-4)のうちの少なくとも1つを実装する。
【0074】
[0094] 図示されている実施例のプロセッサ712は、ローカル・メモリ713(例えば、キャッシュ)を含む。
図7の実施例では、ローカル・メモリ713は、
図2A、
図2B、
図3、及び/又は
図4の例示的な分配バッファ202、例示的な分配メモリ206、例示的な入力メモリ210、例示的な出力メモリ212、及び例示的なレジスタ402を実現する。図示の実施例のプロセッサ712は、バス718を介して、揮発性メモリ714及び不揮発性メモリ716を含むメイン・メモリと通信する。揮発性メモリ714は、SDRAM(Synchronous Dynamic Random Access Memory)、DRAM(Dynamic Random Access Memory)、RAMBUS(登録商標)、RDRAM(登録商標)(RAMBUS Dynamic Random Access Memory)、及び/又は他の任意のタイプのランダム・アクセス・メモリ・デバイスにより実現されてもよい。不揮発性メモリ716は、フラッシュ・メモリ及び/又は任意の他の所望のタイプのメモリ・デバイスによって実現されてもよい。メイン・メモリ714、716へのアクセスは、メモリ・コントローラによって制御される。例示的なローカル・メモリ713、例示的な揮発性メモリ714、及び/又は例示的な不揮発性メモリ716は、
図1のメモリ106を実現することができる。例示的な揮発性メモリ714、例示的な不揮発性メモリ716、及び/又は例示的な大容量ストレージ728の内の何れもが
図1-2Bの例示的なシステム・メモリ106を実現することができる。
【0075】
[0095] 図示される実施例のプロセッサ・プラットフォーム700は、インターフェース回路720も含む。インターフェース回路720は、イーサー・ネットインターフェース、ユニバーサル・シリアル・バス(USB)、ブルートゥース(登録商標)インターフェース、近距離通信(NFC)インターフェース、及び/又はPCIエクスプレス・インターフェースのような、任意のタイプのインターフェース規格によって実現されてもよい。
【0076】
[0096] 図示の実施例では、1つ以上の入力デバイス722がインターフェース回路720に接続される。入力デバイス722は、ユーザーが、データ及び/又はコマンドをプロセッサ712に入力することを可能にする。入力デバイスは、例えば、オーディオ・センサー、マイクロホン、カメラ(静止画又はビデオ)、キーボード、ボタン、マウス、タッチスクリーン、トラック・パッド、トラックボール、及び/又は音声認識システムによって実現することができる。
【0077】
[0097] また、1つ以上の出力デバイス724は、図示の実施例のインターフェース回路720に接続される。出力デバイス724は、例えば、ディスプレイ・デバイス(例えば、発光ダイオード(LED)、有機発光ダイオード(OLED)、液晶ディスプレイ(LCD)、陰極線管ディスプレイ(CRT)、インプレース・スイッチング(IPS)ディスプレイ、タッチスクリーンなど)、触覚出力デバイス、及び/又はスピーカによって実現することができる。従って、図示された実施例のインターフェース回路720は、典型的には、グラフィックス・ドライバ・カード、グラフィックス・ドライバ・チップ、及び/又はグラフィックス・ドライバ・プロセッサを含む。
【0078】
[0098] 図示された実施例のインターフェース回路720は、送信機、受信機、トランシーバ、モデム、住宅ゲートウェイ、無線アクセス・ポイント、及び/又はネットワーク・インターフェースのような通信装置を、ネットワーク726を介する外部マシン(例えば、何らかの種類の演算デバイス)とのデータ交換を促進するために含む。通信は、例えば、イーサーネット接続、デジタル加入者回線(DSL)接続、電話回線接続、同軸ケーブル・システム、衛星システム、見通し内無線システム、セルラー・システム等を介して行うことができる
[0099] 図示の実施例のプロセッサ・プラットフォーム700はまた、ソフトウェア及び/又はデータを記憶するための1つ以上の大容量記憶デバイス728を含む。そのような大容量記憶デバイス728の例は、フロッピー・ディスク・ドライブ、ハード・ドライブ・ディスク、コンパクト・ディスク・ドライブ、ブルーレイ・ディスク・ドライブ、レイド(redundant array of independent disks, (RAID))システム、及びデジタル多用途ディスク(DVD)ドライブを含む。
【0079】
[0100]
図5-6のマシン実行可能命令732は、大容量記憶デバイス728内、揮発性メモリ714内、不揮発性メモリ716内、及び/又は、CD又はDVDのようなリムーバブルな非一時的なコンピュータ読み取り可能な記憶媒体上に記憶することができる。
【0080】
[0101]
図8は、
図7のプロセッサ回路712の実装例のブロック図である。この例では、
図7のプロセッサ回路712は、マイクロプロセッサ800によって実現される。例えば、マイクロプロセッサ900は、CPU、DSP、GPU、XPUのようなマルチコア・ハードウェア回路を実装することができる。これは、任意の数の例示的なコア802(例えば、1つのコア)を含んでもよいが、この例のマイクロプロセッサ800は、N個のコアを含むマルチコア半導体デバイスである。マイクロプロセッサ800のコア802は、独立して動作してもよいし、又は協働して機械読み取り可能な命令を実行してもよい。例えば、ファームウェア・プログラム、埋め込みソフトウェア・プログラム、又はソフトウェア・プログラムに対応するマシン・コードは、コア802のうちの1つによって実行されてもよいし、或いはコア802のうちの複数のものによって、同時に又は異なる時間に実行されてもよい。幾つかの実施例において、ファームウェア・プログラム、埋め込みソフトウェア・プログラム、又はソフトウェア・プログラムに対応するマシン・コードは、複数のスレッドに分割され、2つ以上のコア802によって並列に実行される。ソフトウェア・プログラムは、
図5-6のフローチャートによって表される機械読み取り可能な命令及び/又は演算の一部又は全部に対応する可能性がある。
【0081】
[0102] コア802は、例示的なバス804によって通信することができる。幾つかの実施例において、バス804は、コア802のうちの1つに関連付けられた通信を実行するために通信バスを実現することができる。例えば、バス804は、I2C(Inter-Integrated Circuit)バス、シリアル・ペリフェラル・インターフェース(SPI)バス、PCIバス、又はPCIeバスのうちの少なくとも1つを実装することができる。追加的又は代替的に、バス804は、任意の他のタイプのコンピューティング又は電気バスを実装することができる。コア802は、例示的なインターフェース回路806によって、1つ以上の外部デバイスから、データ、命令、及び/又は信号を得ることができる。コア802は、インターフェース回路806によって、1つ以上の外部デバイスに、データ、命令、及び/又は信号を出力することができる。この実施例のコア802は、例示的なローカル・メモリ820(例えば、L1データ・キャッシュ及びL1命令キャッシュに分割される可能性があるレベル1(L1)キャッシュ)を含むが、マイクロプロセッサ800は、データ及び/又は命令に対する高速アクセスのために、コア(例えば、レベル2(L2_キャッシュ))によって共有されてもよい例示的な共有メモリ810も含む。データ及び/又は命令は、共有メモリ810への書き込み及び/又は共有メモリ810からの読み込みによって転送(例えば、共有)される可能性がある。各コア802のローカル・メモリ820と共有メモリ810は、複数のレベルのキャッシュ・メモリ及びメイン・メモリ(例えば、
図7のメイン・メモリ714、716)を含む記憶デバイスの階層の一部であってもよい。典型的には、階層の中でメモリのより高いレベルは、より低いレベルのメモリよりも、少ないアクセス時間を示し且つより小さな記憶容量を有する。キャッシュ階層の様々なレベルの変更は、キャッシュ・コヒーレンシー・ポリシーによって管理される(例えば、調整される)。
【0082】
[0103] 各コア802は、CPU、DSP、GPU等又は任意の他のタイプのハードウェア回路として言及されてもよい。各コア802は、制御ユニット回路814、算術論理(AL)回路(ALUと言及される場合もある)816、複数のレジスタ818、L1キャッシュ820、及び例示的なバス822を含む。他の構造が存在してもよい。例えば、各コア802は、ベクトル・ユニット回路、単一命令多重データ(SIMD)ユニット回路、ロード/ストア(LSU)ユニット回路、分岐/ジャンプ・ユニット回路、浮動小数点ユニット(FPU)回路などを含んでもよい。制御ユニット回路814は、対応するコア802内のデータ移動を制御(例えば、調整)するように構成された半導体ベースの回路を含む。AL回路816は、対応するコア802内のデータに対して1つ以上の数学的及び/又は論理的な演算を実行するように構成された半導体ベースの回路を含む。幾つかの実施例のAL回路816は、整数ベースの演算を実行する。他の実施例では、AL回路816は浮動小数点演算も実行する。更に他の実施例では、AL回路816は、整数ベースの演算を実行する第1AL回路と、浮動小数点動作を実行する第2AL回路とを含むことができる。幾つかの実施例では、AL回路816は、算術論理ユニット(ALU)と呼ばれることがある。レジスタ818は、対応するコア802のAL回路816によって実行される1つ以上の動作の結果のようなデータ及び/又は命令を格納する半導体ベースの構造である。例えば、レジスタ818は、ベクトル・レジスタ、SIMDレジスタ、汎用レジスタ、フラグ・レジスタ、セグメント・レジスタ、マシン固有レジスタ、命令ポインタ・レジスタ、制御レジスタ、デバッグ・レジスタ、メモリ管理レジスタ、マシン・チェック・レジスタ等を含んでもよい。レジスタ818は、
図8に示すようにバンクに配置されてもよい。代替的に、レジスタ818は、アクセス時間を短縮するために、コア802を通じて分散されることを含む、任意の他の配置、フォーマット、又は構造で組織されてもよい。バス820は、I2Cバス、SPIバス、PCIバス、又はPCIeバスのうちの少なくとも1つを実装することができる。
【0083】
[0104] 各コア802及び/又は、より一般的には、マイクロプロセッサ800は、図示及び上述したものに対して、追加的及び/又は代替的な構造を含んでもよい。例えば、1つ以上のクロック回路、1つ以上の電源、1つ以上の電力ゲート、1つ以上のキャッシュ・ホーム・エージェント(CHA)、1つ以上の収束/共通メッシュ・ストップ(CMS)、1つ以上のシフタ(例えば、バレル・シフタ)、及び/又は他の回路が存在してもよい。マイクロプロセッサ800は、1つ以上のパッケージに含まれる1つ以上の集積回路(IC)に上述の構造を実装するために相互接続された多くのトランジスタを含むように製造された半導体デバイスである。プロセッサ回路は、1つ以上のアクセラレータを含むことが可能であり、及び/又はそれらと協働することが可能である。幾つかの実施例では、アクセラレータは、汎用プロセッサによって行うことが可能なものよりも速く及び/又は効率的に特定のタスクを実行するために、論理回路によって実装される。アクセラレータの例は、上述したもののようなASIC及びFPGAを含む。GPU又は他のプログラマブル・デバイスも、アクセラレータとすることが可能である。アクセラレータは、プロセッサ回路と同じチップ・パッケージ内で、及び/又はプロセッサ回路から別個の1つ以上のパッケージ内で、プロセッサ回路に搭載されてもよい。
【0084】
[0105]
図9は、
図7のプロセッサ回路712の別の実装例のブロック図である。この実施例では、プロセッサ回路712は、FPGA回路900によって実現される。FPGA回路900は、例えば動作を実行するために使用されることが可能であり、その動作は、対応する機械読み取り可能な命令を実行する
図8の例示的なマイクロプロセッサ800によって別の方法で実行されることが可能である。しかしながら、一旦構成されると、FPGA回路900は、ハードウェアで機械読み取り可能な命令をインスタンス化し、従って、対応するソフトウェアを実行する汎用マイクロプロセッサによってそれが実行される場合よりも高速に動作を実行できることが多い。
【0085】
[0106] より具体的には、上述した
図8のマイクロプロセッサ800(これは、
図5-6のフローチャートによって表される機械読み取り可能な命令の一部又は全部を実行するようにプログラムすることができるが、その相互接続及び論理回路は一旦製造されると固定される汎用デバイスである)とは対照的に、
図9の実施例のFPGA回路900は、例えば
図5-6のフローチャートによって表される機械読み取り可能な命令の一部又は全部を例えばインスタンス化するために、製造後に異なる方法で構成及び/又は相互接続することが可能な相互接続及び論理回路を含む。特に、FPGA 900は、論理ゲート、相互接続、及びスイッチのアレイとして考えられてもよい。スイッチは、論理ゲートが相互接続によって相互接続される方法を変更するようにプログラムすることができ、(FPGA回路900が再プログラミングされない限り、かつ、再プログラミングされるまで)1つ以上の専用論理回路を効果的に形成する。構成された論理回路は、入力回路によって受信されたデータに対して異なる演算を実行するために、論理ゲートが異なる方法で協働することを可能にする。これらの演算は、
図5-6のフローチャートによって表されるソフトウェアの一部又は全部に対応してもよい。このように、FPGA回路900は、ASICに類似した専用の方法で、これらのソフトウェア命令に対応する動作を実行する専用の論理回路として、
図5-6のフローチャートの機械読み取り可能な命令の一部又は全部を効果的にインスタンス化するように構成することができる。従って、FPGA回路900は、
図5-6の機械読み取り可能な命令の一部又は全部に対応する動作を、汎用マイクロプロセッサが同じものを実行できる場合よりも高速に実行することができる。
【0086】
[0107]
図9の例では、FPGA回路900は、ヴェリログ(Verilog)のようなハードウェア記述言語(HDL)によってエンド・ユーザーによってプログラムされる(及び/又は1回以上再プログラムされる)ように構成される。
図9のFPGA回路900は、例示的な構成回路904及び/又は外部ハードウェア(例えば、外部ハードウェア回路)906に対して/そこから、データを取得及び/又は出力するための例示的な入力/出力(I/O)回路902を含む。例えば、コンフィギュレーション回路904は、FPGA回路900又はその一部を構成するために機械読み取り可能な命令を取得することができるインターフェース回路を実装することができる。このような幾つかの実施例において、コンフィギュレーション回路904は、ユーザーから、機械(例えば、命令を生成するための人工知能/機械学習(AI/ML)モデルを実装することができるハードウェア回路(例えば、プログラムされた又は専用の回路))等から、機械読み取り可能な命令を取得することができる。幾つかの実施例において、外部ハードウェア906は、
図8のマイクロプロセッサ800を実装することができる。FPGA回路900はまた、例示的な論理ゲート回路908のアレイ、複数の例示的な構成可能な相互接続910、及び例示的な記憶回路912を含む。論理ゲート回路908及び相互接続910は、
図5-6の機械読み取り可能な命令及び/又は他の所望の動作の少なくとも一部に対応し得る1つ以上の動作をインスタンス化するように構成可能である。
図9に示す論理ゲート回路908は、グループ又はブロックで製造される。各ブロックは、論理回路に構成することが可能な半導体ベースの電気構造を含む。幾つかの実施例では、電気構造は、論理回路の基本的な構成ブロックを提供する論理ゲート(例えば、Andゲート、又はOrゲート、Norゲートなど)を含む。電気的に制御可能なスイッチ(例えば、トランジスタ)は、電気構造及び/又は論理ゲートの構成が、所望の動作を行う回路を形成するができるように、論理ゲート回路908の各々の内部に存在する。論理ゲート回路908は、ルック・アップ・テーブル(LUT)、レジスタ(例えば、フリップ・フロップ又はラッチ)、マルチプレクサ等のような他の電気構造を含んでもよい。
【0087】
[0108] 図示の実施例の相互接続910は、電気的に制御可能なスイッチ(例えば、トランジスタ)を含むことが可能な導電性の経路、トレース、ビアなどであり、その状態は、所望の論理回路をプログラムするために、1つ以上の論理ゲート回路908の間の1つ以上の接続を活性化又は不活性化するプログラミング(例えば、HDL命令言語を使用するもの)によって変更することができる。
【0088】
[0109] 図示の実施例の記憶回路912は、対応する論理ゲートによって実行される1つ以上の演算の結果を記憶するように構造化される。記憶回路912は、レジスタ等によって実現することができる。図示される実施例では、記憶回路912は、アクセスを容易にし、実行速度を向上させるために論理ゲート回路908の間で分散される。
【0089】
[0110]
図9の例示的なFPGA回路900は、例示的な専用演算回路914も含む。この実施例では、専用演算回路914は、フィールドでこれらの機能をプログラムする必要性を回避するために、共通に使用される機能を実行するために呼び出されることが可能な特定用途回路916を含む。このような特定用途回路916の例は、メモリ(例えば、DRAM)コントローラ回路、PCIeコントローラ回路、クロック回路、トランシーバ回路、メモリ、及び乗算器-アキュムレータ回路を含む。他のタイプの特定用途回路が存在してもよい。幾つかの実施例では、FPGA回路900は、例示的なCPU 920及び/又は例示的なDSP 922のような例示的な汎用プログラマブル回路918を含んでもよい。他の演算を実行するようにプログラムすることができるGPU、XPU等のような他の汎用プログラマブル回路918が、追加的又は代替的に存在してもよい。
【0090】
[0111]
図8及び9は、
図7のプロセッサ回路712の2つの実施例を示すが、多くの他のアプローチが考えられる。例えば、上述のように、現在のFPGA回路は、
図9の例示的なCPU 920の1つ以上のようなオンボードCPUを含んでもよい。従って、
図7のプロセッサ回路712は、
図8の例示的なマイクロプロセッサ800と
図9の例示的なFPGA回路900とを組み合わせることによって、追加的に実装することができる。このようなハイブリッドの幾つかの実施例では、
図5-6のフローチャートによって表される機械読み取り可能な命令の第1部分は、
図8の1つ以上のコア802によって実行されてもよく、
図5-6のフローチャートによって表される機械読み取り可能な命令の第2部分は、
図9のFPGA回路900によって実行されてもよい。
【0091】
[0112] 幾つかの実施例では、
図7のプロセッサ回路712は、1つ以上のパッケージ内にあってもよい。例えば、
図8のプロセッサ回路800及び/又は
図9のFPGA回路900は、1つ以上のパッケージ内にあってもよい。幾つかの実施例において、XPUは、1つ以上のパッケージ内にあってもよい
図7のプロセッサ回路712によって実装されてもよい。例えば、XPUは、あるパッケージ内のCPU、別のパッケージ内のDSP、更に別のパッケージ内のGPU、及び更に別のパッケージ内のFPGAを含むことが可能である。
【0092】
[0113]
図7の例示的なコンピュータ読み取り可能な命令732のようなソフトウェアを第三者に配布するための例示的なソフトウェア配信プラットフォーム1005を示すブロック図が、
図10に示されている。例示的なソフトウェア配信プラットフォーム1005は、ソフトウェアを格納し、他のコンピューティング・デバイスへ送信することが可能な、任意のコンピュータ・サーバー、データ施設、クラウド・サービスなどによって実現することができる。第三者は、ソフトウェア配信プラットフォームを所有及び/又は運営するエンティティの顧客である可能性がある。例えば、ソフトウェア配信プラットフォームを所有及び/又は運営するエンティティは、
図7の例示的なコンピュータ読み取り可能な命令732のようなソフトウェアの開発者、販売者、及び/又はライセンサであってもよい。第三者は、使用及び/又は再販売及び/又は再実施許諾のためにソフトウェアを購入及び/又はライセンスする消費者、ユーザー、小売業者、OEM業者などであってもよい。図示の例では、ソフトウェア配信プラットフォーム1005は、1つ以上のサーバー及び1つ以上の記憶デバイスを含む。記憶デバイスは、上述のように、
図5及び7の例示的なコンピュータ読み取り可能な命令500、732に対応する可能性があるコンピュータ読み取り可能な命令732を記憶する。例示的なソフトウェア配信プラットフォーム1005の1つ以上のサーバーは、ネットワーク1010と通信し、これは上記の任意の1つ以上のインターネット及び/又は任意の例示的なネットワーク726に対応する可能性がある。幾つかの実施例では、1つ以上のサーバーは、商取引の一部としてソフトウェアを要求者へ送信するリクエストに応じる。ソフトウェアの配信、販売、及び/又はライセンスに対する支払いは、ソフトウェア配信プラットフォームの1つ以上のサーバーによって、及び/又は第三者支払い機関によって処理されることが可能である。サーバーは、購入者及び/又はライセンサが、コンピュータ読み取り可能な命令732を、ソフトウェア配信プラットフォーム1005からダウンロードすることを可能にする。例えば、
図7の例示的なコンピュータ読み取り可能な命令732に対応する可能性があるソフトウェアは、BDNN 104を実現するためにコンピュータ読み取り可能な命令732を実行するものである例示的なプロセッサ・プラットフォーム1000にダウンロードされてもよい。幾つかの実施例において、ソフトウェア配信プラットフォーム1005の1つ以上のサーバーは、改良、パッチ、更新などが配布されて、エンド・ユーザー・デバイスにおけるソフトウェアに適用されることを確実にするために、(例えば、
図7の例示的なコンピュータ読み取り可能な命令732のような)ソフトウェアに対する更新を定期的に提案し、送信し、及び/又は強制する。
【0093】
[0114] 再構成可能なサンプラを有するベイジアン演算ユニットとそれを動作させる方法及び装置を提供する例示的な方法、装置、システム、及び製品が本件で開示される。更なる実施例及びそれらの組み合わせは以下を含む:
実施例1は、人工知能ベース・モデルにおいて複数のウェイトを適用するニューラル・ネットワークのノードを含み、ノードは、(a)平均値を活性化に適用することによって第1要素を、及び(b)分散値を活性化の二乗に適用することによって第2要素を生成するプロセッサ要素であって、平均値と分散値は単一の確率分布に対応している、プロセッサ要素;擬似乱数を生成し、擬似乱数と、第1要素と、第2要素とに基づいて出力を生成するプログラマブル・サンプリング・ユニットであって、出力は単一の確率分布に対応している、プログラマブル・サンプリング・ユニット;及び出力を記憶する出力メモリを含む。
【0094】
[0115] 実施例2は実施例1のノードを含み、その場合において、プロセッサ要素は、平均値を活性化に乗算することによって第1要素を生成し;及び分散値を活性化の二乗に乗算することによって第2要素を生成する。
【0095】
[0116] 実施例3は実施例1のノードを含み、その場合において、プログラマブル・サンプリング・ユニットは、出力を生成するために:第2要素に擬似乱数を乗算することによって積を生成し、積に第1要素を加算する。
【0096】
[0117] 実施例4は実施例1のノードを含み、その場合において、擬似乱数を含む複数の擬似乱数を生成し;複数の出力を生成し;複数の出力の平均をとり;平均に基づいて出力を生成する。
【0097】
[0118] 実施例5は実施例1のノードを含み、その場合において、プログラマブル・サンプリング・ユニットは:ノードを含む複数のノードに対する複数の出力を生成する。
【0098】
[0119] 実施例6は実施例1のノードを含み、その場合において、プログラマブル・サンプリング・ユニットは、擬似乱数を生成するために:シフト・レジスタを使用して擬似ランダム・シーケンスを生成し;擬似ランダム・シーケンスに排他的OR(XOR)演算を実行することによって、擬似ランダム・シーケンスを調整し;調整された擬似ランダム・シーケンスをガウシアン擬似乱数シーケンスに変換し、ガウシアン擬似乱数シーケンスは擬似乱数を含む。
【0099】
[0120] 実施例7は実施例1のノードを含み、その場合において、出力メモリは、出力を、後続ノードの入力メモリに出力する。
【0100】
[0121] 実施例8は、命令を含む非一時的なコンピュータ読み取り可能な記憶媒体を含み、命令は、実行されると、1つ以上のプロセッサに、少なくとも:(a)平均値を活性化に適用することによって第1要素を、及び(b)分散値を活性化の二乗に適用することによって第2要素を生成するステップであって、平均値と分散値は単一の確率分布に対応している、ステップ;擬似乱数を生成するステップ;擬似乱数と、第1要素と、第2要素とに基づいて出力を生成するステップであって、出力は単一の確率分布に対応している、ステップ;及び出力をメモリに記憶するステップを実行させる。
【0101】
[0122] 実施例9は実施例8のコンピュータ読み取り可能な記憶媒体を含み、その場合において、命令は、1つ以上のプロセッサに:平均値を活性化に乗算することによって第1要素を生成するステップ;及び分散値を活性化の二乗に乗算することによって第2要素を生成するステップを実行させる。
【0102】
[0123] 実施例10は実施例8のコンピュータ読み取り可能な記憶媒体を含み、その場合において、命令は、1つ以上のプロセッサに出力を生成させるために:第2要素に擬似乱数を乗算することによって積を生成し、積に第1要素を加算するステップ を実行させる。
【0103】
[0124] 実施例11は実施例8のコンピュータ読み取り可能な記憶媒体を含み、その場合において、命令は、1つ以上のプロセッサに:擬似乱数を含む複数の擬似乱数を生成するステップ;複数の出力を生成するステップ;複数の出力の平均をとるステップ;及び平均に基づいて出力を生成するステップを実行させる。
【0104】
[0125] 実施例12は実施例8のコンピュータ読み取り可能な記憶媒体を含み、その場合において、命令は、1つ以上のプロセッサに、ノードを含む複数のノードに対する複数の出力を生成するステップを実行させる。
【0105】
[0126] 実施例13は実施例8のコンピュータ読み取り可能な記憶媒体を含み、その場合において、命令は、1つ以上のプロセッサに擬似乱数を生成させるために:シフト・レジスタを使用して擬似ランダム・シーケンスを生成ステップ;擬似ランダム・シーケンスに排他的OR(XOR)演算を実行することによって、擬似ランダム・シーケンスを調整するステップ;調整された擬似ランダム・シーケンスをガウシアン擬似乱数シーケンスに変換するステップ;を実行させ、ガウシアン擬似乱数シーケンスは擬似乱数を含む。
【0106】
[0127] 実施例14は実施例8のコンピュータ読み取り可能な記憶媒体を含み、その場合において、命令は、1つ以上のプロセッサに、出力を、後続ノードの入力メモリに出力するステップを実行させる。
【0107】
[0128] 実施例15は、人工知能ベース・モデルにおいて複数のウェイトを適用する装置を含み、装置は:少なくとも1つのメモリとプロセッサ回路を含み、プロセッサ回路は:
中央処理ユニット、グラフィックス処理ユニット、又はデジタル信号プロセッサのうちの少なくとも1つであって、中央処理ユニット、グラフィックス処理ユニット、又はデジタル信号プロセッサのうちの少なくとも1つは、プロセッサ回路内のデータの動きを制御する制御回路と、命令に対応する1つ以上の第1オペレーションを実行する算術論理回路と、1つ以上の第1オペレーション、命令の結果を装置に記憶する1つ以上のレジスタを有する、中央処理ユニット、グラフィックス処理ユニット、又はデジタル信号プロセッサのうちの少なくとも1つ;フィールド・プログラマブル・ゲート・アレイ(FPGA)であって、FPGAは、論理ゲート回路と、複数の設定可能な相互接続と、ストレージ回路とを含み、論理ゲート回路と相互接続は、1つ以上の第2オペレーションを実行し、ストレージ回路は1つ以上の第2オペレーションの結果を記憶する、FPGA;又は1つ以上の第3オペレーションを実行する論理ゲート回路を含む特定用途向け集積回路;のうちの1つ以上を含み;プロセッサ回路は、第1オペレーション、第2オペレーション、又は第3オペレーションのうちの少なくとも1つを実行して:(a)平均値を活性化に適用することによって第1要素を、及び(b)分散値を活性化の二乗に適用することによって第2要素を生成するステップであって、平均値と前記分散値は単一の確率分布に対応している、ステップ;擬似乱数を生成するステップ;擬似乱数と、第1要素と、第2要素とに基づいて出力を生成するステップであって、出力は単一の確率分布に対応している、ステップ;及び出力をメモリに記憶するステップを実行する。
【0108】
[0129] 実施例16は実施例15の装置を含み、その場合において、プロセッサ回路は:平均値を活性化に乗算することによって第1要素を生成し;及び分散値を活性化の二乗に乗算することによって第2要素を生成する。
【0109】
[0130] 実施例17は実施例15の装置を含み、その場合において、プロセッサ回路は、出力を生成するために:第2要素に擬似乱数を乗算することによって積を生成し、積に第1要素を加算する。
【0110】
[0131] 実施例18は実施例15の装置を含み、その場合において、プロセッサ回路は:擬似乱数を含む複数の擬似乱数を生成し;複数の出力を生成し;複数の出力の平均をとり;及び平均に基づいて出力を生成する。
【0111】
[0132] 実施例19は実施例15の装置を含み、その場合において、プロセッサ回路は、ノードを含む複数のノードに対する複数の出力を生成する。
【0112】
[0133] 実施例20は実施例15の装置を含み、その場合において、プロセッサ回路は、擬似乱数を生成するために:シフト・レジスタを使用して擬似ランダム・シーケンスを生成し;擬似ランダム・シーケンスに排他的OR(XOR)演算を実行することによって、擬似ランダム・シーケンスを調整し;調整された擬似ランダム・シーケンスをガウシアン擬似乱数シーケンスに変換し;ガウシアン擬似乱数シーケンスは擬似乱数を含む。
【0113】
[0134] 実施例21は実施例15の装置を含み、その場合において、プロセッサ回路は、出力を、後続ノードの入力メモリに出力する。
【0114】
[0135] 以上から、再構成可能なサンプラを有するベイジアン演算ユニットとその動作のための方法及び方法を提供する例示的な方法、装置及び製品が開示されていることが理解されるであろう。BDNNは、不確実性情報を導入し、悪意の攻撃に対する敏感さとオーバーフィッティングの問題を克服する。固定されたウェイトを使用する代わりに、BDNNは、条件付き確率分布に関連するウェイトを導入する(例えば、出力ウェイトは、平均及び標準偏差によって定義される確率分布における値である可能性がある)。BDNNはある程度のランダム性を導入するので、BDNNは正確さを犠牲にすることなく、より少ない訓練データで訓練することができる。しかしながら、従来のBDNNは、レイヤ内の全ての演算ノードに対して、異なる確率分布に対応する異なる平均と分散値を分布させる。従って、このような従来のBDNNは、複数の異なる確率分布に対応するウェイトを生成するために、システム・メモリから、複数の平均及び分散値にアクセスするために、多くの帯域幅を必要として時間を費やす。
【0115】
[0136] 本件で開示される実施例は、単一の確率分布(例えば、ガウス分布及び/又はGMM分布)に対応する複数のウェイトを生成する。本件で開示される実施例は、平均及び分散を、入力及び/又は活性化データに適用し、ガウシアン・サンプラを、平均ベースのデータ及び/又は分散に適用して、AIベースのモデル(例えば、ニューラル・ネットワーク、機械学習モデル、ディープ・ラーニング・モデル等)の演算ノードにおける複数の様々な活性化に適用する。このようにして、単一の分布に対応する平均及び分散値のみが、システム・メモリからアクセスされて、複数の異なる活性化に適用される。これにより、重み付けされた出力を生成するために、確率分布データにアクセスするのに必要とされる帯域幅及び時間を減らす。従って、開示された方法、装置、及び製品は、ニューラル・ネットワークの機能における1つ以上の改善に相応に関連する。
【0116】
[0137] 本件特許出願は2021年6月4日付で出願された印国仮特許出願第202141024844号による優先権を主張しており、その全体が参照により本件に援用されることに留意されたい。
【0117】
[0138] 特定の例示的な方法、装置及び製品が本件で開示されているが、本件の対象範囲はそれらに限定されない。むしろ逆に本件は、本件のクレームの範囲内に適正に該当する全ての方法、装置及び製品をカバーしている。
【0118】
[0139] 以下のクレームの範囲は、この参照により、本件の詳細な説明に組み込まれ、各クレームは本開示の個々の実施形態としてそれ自体成立する。
【外国語明細書】