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

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

▶ インテル コーポレイションの特許一覧

特表2024-544447ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法
<>
  • 特表-ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法 図1
  • 特表-ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法 図2
  • 特表-ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法 図3
  • 特表-ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法 図4
  • 特表-ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法 図5
  • 特表-ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法 図6
  • 特表-ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法 図7
  • 特表-ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法 図8
  • 特表-ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法 図9
  • 特表-ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法 図10
  • 特表-ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法 図11
  • 特表-ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法 図12
  • 特表-ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-12-03
(54)【発明の名称】ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法
(51)【国際特許分類】
   G06N 3/063 20230101AFI20241126BHJP
【FI】
G06N3/063
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023580469
(86)(22)【出願日】2022-10-14
(85)【翻訳文提出日】2023-12-27
(86)【国際出願番号】 US2022046738
(87)【国際公開番号】W WO2023096708
(87)【国際公開日】2023-06-01
(31)【優先権主張番号】17/534,976
(32)【優先日】2021-11-24
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(74)【代理人】
【識別番号】100112759
【弁理士】
【氏名又は名称】藤村 直樹
(72)【発明者】
【氏名】ラハ,アルナブ
(72)【発明者】
【氏名】モハパトラ,デバブラタ
(72)【発明者】
【氏名】マンタイクッティー,ディーパック アブラハム
(72)【発明者】
【氏名】スン,レイモンド ジ‐フン
(72)【発明者】
【氏名】ブリック,コルマック マイケル
(57)【要約】
DNNにおけるレイヤ・シーケンス内のレイヤのウェイト行列にアクセスする装置が提供される。ウェイト・ベクトルは、異なる値を有するウェイトの第1のシーケンスを含む。ビットマップはウェイト・ベクトルに基づいて生成される。ビットマップはビットマップ要素の第2のシーケンスを含む。各ビットマップ要素は、異なるウェイトに対応しており、その対応するウェイトの値に少なくとも基づいて決定される値を有する。第2のシーケンス内の各ビットマップ要素のインデックスは、第1のシーケンス内の対応するウェイトのインデックスに一致している。ビットマップ要素の値に基づいて、第2のシーケンス内のビットマップ要素を再配置することによって、新たなビットマップが生成される。ウェイト・ベクトルは新たなビットマップに基づいて再配置される。再配置されたウェイト・ベクトルはサブセットに分割され、各サブセットは、MAC動作のために異なるPEに割り当てられる。
【特許請求の範囲】
【請求項1】
ディープ・ニューラル・ネットワーク(DNN)におけるスパース性のバランスをとるための方法であって:
前記DNNにおけるレイヤ・シーケンス内のレイヤのウェイト行列の少なくとも一部分を表現するウェイト・ベクトルであって異なる値を有するウェイトの第1のシーケンスを含むウェイト・ベクトルを取得するステップ;
少なくとも前記ウェイト・ベクトルに基づいてビットマップを生成するステップであって、前記ビットマップはビットマップ要素の第2のシーケンスを含み、前記第2のシーケンス内の前記ビットマップ要素の各々は、前記第1のシーケンス内の異なるウェイトに対応し、その対応するウェイトの値に少なくとも基づいてビットマップ要素の値は決定され、前記第2のシーケンス内のビットマップ要素のインデックスは、前記第1のシーケンス内の対応するウェイトのインデックスに一致している、ステップ;
前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置することによって、前記ビットマップから新たなビットマップを生成するステップ;及び
前記新たなビットマップに基づいて、前記DNNのレイヤにおける複数の処理要素に前記ウェイト・ベクトルを割り当てるステップであって、各々の処理要素は、前記ウェイト・ベクトルの異なるサブセットを使用して積和演算を実行するように構成されている、ステップ;
を含む方法。
【請求項2】
請求項1に記載の方法において、前記レイヤは、活性化の第3のシーケンスを含む活性化ベクトルに関連付けられており、前記方法は、更に:
前記新たなビットマップに基づいて、前記第3のシーケンス内の活性化を再配置するステップ;
を含む方法。
【請求項3】
請求項1に記載の方法において、少なくとも前記ウェイト・ベクトルに基づいてビットマップを生成するステップは:
前記ウェイト・ベクトルに基づいてウェイト・ビットマップを生成するステップであって、前記ウェイト・ビットマップはウェイト・ビットマップ要素のシーケンスを含む、ステップ;
前記レイヤに関連する活性化に基づいて活性化ビットマップを生成するステップであって、前記活性化ビットマップは活性化ビットマップ要素のシーケンスを含む、ステップ;及び
前記ウェイト・ビットマップと前記活性化ビットマップに基づいて前記ビットマップを生成するステップ;
を含む、方法。
【請求項4】
請求項3に記載の方法において、前記ビットマップ内のそれぞれのビットマップ要素は、前記ウェイト・ビットマップ内の異なるウェイト・ビットマップ要素と、前記活性化ビットマップ内の異なる活性化ビットマップ要素とに対応しており、前記それぞれのビットマップ要素は、対応するウェイト・ビットマップ要素の値と対応する活性化ビットマップ要素の値との積に等しい値を有する、方法。
【請求項5】
請求項1に記載の方法において、前記DNNは前記シーケンス内の前記レイヤに先行する先行レイヤを更に含み、前記先行レイヤはウェイトの第3のシーケンスに関連付けられており、前記方法は、更に:
前記新たなビットマップに基づいて、前記第3のシーケンス内のウェイトを再配置するステップ;
を含む方法。
【請求項6】
請求項1に記載の方法において:
前記ウェイトの第1のシーケンスは、非ゼロ値ウェイトとゼロ値ウェイトとを含み;
前記非ゼロ値ウェイトに対応するビットマップ要素は、1の値を有し;
前記ゼロ値ウェイトに対応するビットマップ要素は、0の値を有する、方法。
【請求項7】
請求項6に記載の方法において、前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置するステップは:
1の値にされたビットマップ要素のインデックスと0の値にされたビットマップ要素のインデックスとを入れ替えるステップ;
を含む、方法。
【請求項8】
請求項6に記載の方法において、前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置するステップは:
1の値にされたビットマップ要素の第1数を決定するステップ;
0の値にされたビットマップ要素の第2数であって前記第1数より大きい第2数を決定するステップ;
前記第1数と前記第2数に基づいてインターバル数を決定するステップ;及び
前記新たなビットマップ内の全てのインターバル数のビットマップ要素が、1の値にされたビットマップ要素を含むように、前記第2のシーケンス内のビットマップ要素を再配置するステップ;
を含む、方法。
【請求項9】
請求項6に記載の方法において、前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置するステップは:
1の値にされたビットマップ要素の第1数を決定するステップ;
0の値にされたビットマップ要素の第2数であって前記第1数より小さい第2数を決定するステップ;
前記第1数と前記第2数に基づいてインターバル数を決定するステップ;及び
前記新たなビットマップ内の全てのインターバル数のビットマップ要素が、0の値にされたビットマップ要素を含むように、前記第2のシーケンス内のビットマップ要素を再配置するステップ;
を含む、方法。
【請求項10】
請求項1-9のうちの何れか一項に記載の方法において、前記新たなビットマップに基づいて、前記DNNのレイヤにおける複数の処理要素に前記ウェイト・ベクトルを割り当てるステップは:
前記新たなウェイト・ベクトル内の各ウェイトのインデックスが、前記新たなビットマップ内の対応するビットマップ要素のインデックスに一致するように、前記第1のシーケンス内の1つ以上のウェイトを配置し直すことによって、新たなウェイト・ベクトルを生成するステップ;
を含む、方法。
【請求項11】
ディープ・ニューラル・ネットワーク(DNN)におけるスパース性のバランスをとる動作を実行するように実行可能な命令を記憶する1つ以上の非一時的なコンピュータ読み取り可能な記憶媒体であって、前記動作は:
前記DNNにおけるレイヤ・シーケンス内のレイヤのウェイト行列の少なくとも一部分を表現するウェイト・ベクトルであって異なる値を有するウェイトの第1のシーケンスを含むウェイト・ベクトルを取得するステップ;
少なくとも前記ウェイト・ベクトルに基づいてビットマップを生成するステップであって、前記ビットマップはビットマップ要素の第2のシーケンスを含み、前記第2のシーケンス内の前記ビットマップ要素の各々は、前記第1のシーケンス内の異なるウェイトに対応し、その対応するウェイトの値に少なくとも基づいてビットマップ要素の値は決定され、前記第2のシーケンス内のビットマップ要素のインデックスは、前記第1のシーケンス内の対応するウェイトのインデックスに一致している、ステップ;
前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置することによって、前記ビットマップから新たなビットマップを生成するステップ;及び
前記新たなビットマップに基づいて、前記DNNのレイヤにおける複数の処理要素に前記ウェイト・ベクトルを割り当てるステップであって、各々の処理要素は、前記ウェイト・ベクトルの異なるサブセットを使用して積和演算を実行するように構成されている、ステップ;
を含む、記憶媒体。
【請求項12】
請求項11に記載の1つ以上の非一時的なコンピュータ読み取り可能な記憶媒体において、前記レイヤは、活性化の第3のシーケンスを含む活性化ベクトルに関連付けられており、前記動作は、更に:
前記新たなビットマップに基づいて、前記第3のシーケンス内の活性化を再配置するステップ;
を含む、記憶媒体。
【請求項13】
請求項11に記載の1つ以上の非一時的なコンピュータ読み取り可能な記憶媒体において、少なくとも前記ウェイト・ベクトルに基づいてビットマップを生成するステップは:
前記ウェイト・ベクトルに基づいてウェイト・ビットマップを生成するステップであって、前記ウェイト・ビットマップはウェイト・ビットマップ要素のシーケンスを含む、ステップ;
前記レイヤに関連する活性化に基づいて活性化ビットマップを生成するステップであって、前記活性化ビットマップは活性化ビットマップ要素のシーケンスを含む、ステップ;及び
前記ウェイト・ビットマップと前記活性化ビットマップに基づいて前記ビットマップを生成するステップ;
を含む、記憶媒体。
【請求項14】
請求項13に記載の非一時的なコンピュータ読み取り可能な記憶媒体において、前記ビットマップ内のそれぞれのビットマップ要素は、前記ウェイト・ビットマップ内の異なるウェイト・ビットマップ要素と、前記活性化ビットマップ内の異なる活性化ビットマップ要素とに対応しており、前記それぞれのビットマップ要素は、対応するウェイト・ビットマップ要素の値と対応する活性化ビットマップ要素の値との積に等しい値を有する、記憶媒体。
【請求項15】
請求項11に記載の1つ以上の非一時的なコンピュータ読み取り可能な記憶媒体において、前記DNNは前記シーケンス内の前記レイヤに先行する先行レイヤを更に含み、前記先行レイヤはウェイトの第3のシーケンスに関連付けられており、前記動作は、更に:
前記新たなビットマップに基づいて、前記第3のシーケンス内のウェイトを再配置するステップ;
を含む、記憶媒体。
【請求項16】
請求項11に記載の1つ以上の非一時的なコンピュータ読み取り可能な記憶媒体において:
前記ウェイトの第1のシーケンスは、非ゼロ値ウェイトとゼロ値ウェイトとを含み;
前記非ゼロ値ウェイトに対応するビットマップ要素は、1の値を有し;
前記ゼロ値ウェイトに対応するビットマップ要素は、0の値を有する、記憶媒体。
【請求項17】
請求項16に記載の1つ以上の非一時的なコンピュータ読み取り可能な記憶媒体において、前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置するステップは:
1の値にされたビットマップ要素のインデックスと0の値にされたビットマップ要素のインデックスとを入れ替えるステップ;
を含む、記憶媒体。
【請求項18】
請求項16に記載の1つ以上の非一時的なコンピュータ読み取り可能な記憶媒体において、前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置するステップは:
1の値にされたビットマップ要素の第1数を決定するステップ;
0の値にされたビットマップ要素の第2数であって前記第1数より大きい第2数を決定するステップ;
前記第1数と前記第2数に基づいてインターバル数を決定するステップ;及び
前記新たなビットマップ内の全てのインターバル数のビットマップ要素が、1の値を有する少なくとも1つのビットマップ要素を含むように、前記第2のシーケンス内のビットマップ要素を再配置するステップ;
を含む、記憶媒体。
【請求項19】
請求項16に記載の1つ以上の非一時的なコンピュータ読み取り可能な記憶媒体において、前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置するステップは:
1の値にされたビットマップ要素の第1数を決定するステップ;
0の値にされたビットマップ要素の第2数であって前記第1数より小さい第2数を決定するステップ;
前記第1数と前記第2数に基づいてインターバル数を決定するステップ;及び
前記新たなビットマップ内の全てのインターバル数のビットマップ要素が、0の値を有する少なくとも1つのビットマップ要素を含むように、前記第2のシーケンス内のビットマップ要素を再配置するステップ;
を含む、記憶媒体。
【請求項20】
請求項11-19のうちの何れか一項に記載の1つ以上の非一時的なコンピュータ読み取り可能な記憶媒体において、前記新たなビットマップに基づいて、前記DNNのレイヤにおける複数の処理要素に前記ウェイト・ベクトルを割り当てるステップは:
前記新たなウェイト・ベクトル内の各ウェイトのインデックスが、前記新たなビットマップ内の対応するビットマップ要素のインデックスに一致するように、前記第1のシーケンス内の1つ以上のウェイトを配置し直すことによって、新たなウェイト・ベクトルを生成するステップ;
を含む、記憶媒体。
【請求項21】
ディープ・ニューラル・ネットワーク(DNN)におけるスパース性のバランスをとるための装置であって:
コンピュータ・プログラム命令を実行するコンピュータ・プロセッサ;及び
動作を実行するために前記コンピュータ・プロセッサにより実行可能なコンピュータ・プログラム命令を記憶した非一時的なコンピュータ読み取り可能なメモリ;
を含み、前記動作は:
前記DNNにおけるレイヤ・シーケンス内のレイヤのウェイト行列の少なくとも一部分を表現するウェイト・ベクトルであって異なる値を有するウェイトの第1のシーケンスを含むウェイト・ベクトルを取得するステップ;
少なくとも前記ウェイト・ベクトルに基づいてビットマップを生成するステップであって、前記ビットマップはビットマップ要素の第2のシーケンスを含み、前記第2のシーケンス内の前記ビットマップ要素の各々は、前記第1のシーケンス内の異なるウェイトに対応し、その対応するウェイトの値に少なくとも基づいてビットマップ要素の値は決定され、前記第2のシーケンス内のビットマップ要素のインデックスは、前記第1のシーケンス内の対応するウェイトのインデックスに一致している、ステップ;
前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置することによって、前記ビットマップから新たなビットマップを生成するステップ;及び
前記新たなビットマップに基づいて、前記DNNのレイヤにおける複数の処理要素に前記ウェイト・ベクトルを割り当てるステップであって、各々の処理要素は、前記ウェイト・ベクトルの異なるサブセットを使用して積和演算を実行するように構成されている、ステップ;
を含む、装置。
【請求項22】
請求項21に記載の装置において、前記レイヤは、活性化の第3のシーケンスを含む活性化ベクトルに関連付けられており、前記動作は、更に:
前記新たなビットマップに基づいて、前記第3のシーケンス内の活性化を再配置するステップ;
を含む、装置。
【請求項23】
請求項21に記載の装置において、少なくとも前記ウェイト・ベクトルに基づいてビットマップを生成するステップは:
前記ウェイト・ベクトルに基づいてウェイト・ビットマップを生成するステップであって、前記ウェイト・ビットマップはウェイト・ビットマップ要素のシーケンスを含む、ステップ;
前記レイヤに関連する活性化に基づいて活性化ビットマップを生成するステップであって、前記活性化ビットマップは活性化ビットマップ要素のシーケンスを含む、ステップ;及び
前記ウェイト・ビットマップと前記活性化ビットマップに基づいて前記ビットマップを生成するステップ;
を含む、装置。
【請求項24】
請求項21に記載の装置において、前記DNNは前記シーケンス内の前記レイヤに先行する先行レイヤを更に含み、前記先行レイヤはウェイトの第3のシーケンスに関連付けられており、前記動作は、更に:
前記新たなビットマップに基づいて、前記第3のシーケンス内のウェイトを再配置するステップ;
を含む、装置。
【請求項25】
請求項21-24のうちの何れか一項に記載の装置において、前記新たなビットマップに基づいて、前記DNNのレイヤにおける複数の処理要素に前記ウェイト・ベクトルを割り当てるステップは:
前記新たなウェイト・ベクトル内の各ウェイトのインデックスが、前記新たなビットマップ内の対応するビットマップ要素のインデックスに一致するように、前記第1のシーケンス内の1つ以上のウェイトを配置し直すことによって、新たなウェイト・ベクトルを生成するステップ;
を含む、装置。
【発明の詳細な説明】
【技術分野】
【0001】
[0001] 関連出願の相互参照
本件出願は、2021年11月24日付けで出願された“ディープ・ニューラル・ネットワークを加速するためにウェイトにおけるスパース性のバランスをとるシステム及び方法”と題する米国非仮出願第17/534976号についての優先権を主張しており、全ての目的のためにその内容全体を参照により本件に援用している。
【0002】
[0002] 技術分野
本開示は概してニューラル・ネットワークに関連し、より詳細には、ディープ・ニューラル・ネットワーク(deep neural networks, DNN)を加速することに関連する。
【背景技術】
【0003】
[0003] ディープ・ニューラル・ネットワークは、高い精度を達成するそれらの能力に起因して、コンピュータ・ビジョンから音声認識や自然言語処理に及ぶ様々な人工知能アプリケーションのために広範囲に使用される。しかしながら、その高い精度は、かなりの演算コストを犠牲にして得られる。各々の推論は、分類又は検出のために記憶されることになる何億ものフィルタ・ウェイトだけでなく、何億ものMAC(乗算-累算)演算を必要とする可能性があるので、DNNは極めて高い演算需要を有している。従って、DNNの効率を改善するための技術が必要とされている。
【図面の簡単な説明】
【0004】
[0004] 実施形態は、添付図面に関連して以下の詳細な説明によって容易に理解されるであろう。この説明を容易にするために、同様な参照番号は同様な構造要素を示す可能性がある。実施形態は、添付図面の図において、限定ではなく例として示されている。
図1】[0005] 図1は、様々な実施形態による例示的なDNNのアーキテクチャを示す。
図2】[0006] 図2は、様々な実施形態によるDNNの層のためのハードウェア・アーキテクチャを示す。
図3】[0007] 図3は、様々な実施形態による処理要素(processing element, PE)のブロック図である。
図4】[0008] 図4は、様々な実施形態によるビットマップを生成するプロセスを示す。
図5】[0009] 図5は、様々な実施形態によるアンバランスなワークロードを有するPEを示す。
図6】[0010] 図6は、様々な実施形態によるバランスのとれたワークロードを有するPEを示す。
図7】[0011] 図7は、様々な実施形態によるウェイト・ベクトルにおけるスパース性(sparsity)のバランスをとるプロセスを示す。
図8】[0012] 図8は、様々な実施形態による再配置されたウェイト・ベクトルを有する2つの隣接するDNN層を示す。
図9】[0013] 図9は、様々な実施形態による組み合わされたスパース性バランシングのためのスパース性バランシング・システムのアーキテクチャを示す。
図10】[0014] 図10は、様々な実施形態によるディープ・ラーニング環境を示す。
図11】[0015] 図11は、様々な実施形態によるDNNシステムのブロック図である。
図12】[0016] 図12は、様々な実施形態によるウェイト・ベクトルにおけるスパース性のバランスをとる方法を示すフローチャートである。
図13】[0017] 図13は、様々な実施形態による例示的な演算デバイスのブロック図である。
【発明を実施するための形態】
【0005】
[0018] 概 要
ディープ・ラーニング(Deep learning, DL)モデルは、自律的な潜在特徴抽出を用いてデータの有効な抽象表現を生成する能力によって特徴付けられる。これを達成するために、DNNは、より従来的な機械学習技術と比較して実質的により複雑であり、何桁もの多数のパラメータが訓練されことを要求する。ハイ・エンドのグラフィック処理ユニット(Graphical Processing Units, GPU)及びASIC(application-specific integrated circuit)ベースのDNNアクセラレータは、これらのタイプのワークロードを実行するのに適しており、なぜならそれらは数千の並列MACユニットであって同時に動作し且つより短い時間で出力を生成することが可能なものから構成されているからである。しかしながら、これらのGPU及びASICベースの実行プラットフォームは、通常、非常に高い電力消費を有し、このことは、電力及び面積バジェットが厳しく制限される高エネルギー制約システムに配備することを不適切にしてしまう。
【0006】
[0019] DNNアクセラレータのパフォーマンス及びエネルギー消費を改善するための効率的な技法は、ネットワーク内に豊富に存在するスパース性の特性を活用することによるものである。スパース性とは、DNNにおけるウェイト及び活性化(activations)におけるゼロの存在をいう。DNNにおいてゼロの値にされる活性化は、活性化関数による層の処理に由来する一方、ゼロの値にされるウェイトは、通常、フィルタ・プルーニング(filter pruning)に起因するか、又はDNNにおける量子化のプロセスに起因して生じる。これらのゼロの値にされる活性化及びウェイトは、畳み込み層及び全結合層におけるMAC演算の際の結果に寄与せず、従って、演算及び記憶の両方の期間でスキップされることが可能である。この目的に向けて、機械学習アクセラレータは、活性化及びウェイトにおいて利用可能なこのスパース性を活用して、計算中に著しいスピードアップを達成することができ、これは電力の節約につながり、なぜなら同じ作業がより少ないエネルギーを用いて達成できることに加えて、効率的な圧縮方式を通じてウェイト(及び活性化)のための記憶要件を軽減する。メモリ階層を横断するデータ転送の総量を低減すること、及び、全体的な計算時間を低減することの双方が、機械学習アクセラレータにおけるエネルギー効率を改善するために重要である。
【0007】
[0020] 幾つかのDNNアクセラレータはスパース性加速によりスループットを改善するできるが、DNNアクセラレータの処理要素(processing elements, PE)内のスパース・データのランダム分布が、無視できる程度でしかない又はゼロでさえあり得る、スパース性に起因するスピードアップを招く可能性がある多くの状況が生じる可能性がある。ほとんどのスパースDNNアクセラレータは:前提とするDNNデータフロー、ドレイン・フェーズ(drain phase)(演算ユニットから上位メモリ階層への出力ポイントの抽出)中の同期バリア(synchronization barriers)、及び、複数のPEの間で作業を複数のより小さなタスクに分割することに関連するオーバーヘッド、を含む様々な要因に起因して、スパース・データに対する計算をスキップすることから得ることが可能な最大の高速化をめったに達成しない。ドレイン動作中の同期要件は、主に、最終出力ポイント(出力チャネルに対応するもの)が、次のDNN層の活性化を形成する前に、それらが記憶のために一緒に圧縮又はパッキングされることが可能であるように、同時に抽出されることを要求することから生じている。
【0008】
[0021] 本発明の実施形態は、DNNアクセラレータの効率を改善するためにウェイトにおけるスパース性のバランスをとることが可能なスパース性バランシング・システムに関連する。スパース性バランシング・システムは、ビットマップを使用して、ウェイトを再配置し、ウェイトにおけるスパース・データ(即ち、ゼロ値)の均等な(又はほぼ均等な)分布を達成し、それによって、処理するPEは、バランスのとれたワークロードを有することが可能になる。スパース性バランシング・システムはまた、ウェイトにおけるスパース性バランシングと活性化におけるスパース性バランシングの両方を含む、組み合わされたスパース性均衡化も可能である。
【0009】
[0022] 一部の実施形態では、スパース性バランシング・システムは、ウェイト・ベクトルに基づいてビットマップを生成する。ウェイト・ベクトルは、ウェイトのシーケンスを含む。ウェイト・ベクトルは、DNN層の1つ以上のフィルタから抽出される可能性がある。ウェイトは、非ゼロ値又はゼロ値を有する可能性がある。ビットマップは、ビットマップ要素のシーケンスを含み、その各々は、異なるウェイトの値に基づいて決定された値を有する。例えば、非ゼロ値のウェイトに対するビットマップ要素は1の値を有するが、ゼロ値のウェイトに対するビットマップ要素はゼロの値を有する。ビットマップ内のビットマップ要素のインデックスは、ウェイト・ベクトル内の対応するウェイトのインデックスと一致し、即ち、ビットマップ内の第1のビットマップ要素は、ウェイト・ベクトル内の第1のウェイトに対応し、ビットマップ内の第2のビットマップ要素は、ウェイト・ベクトル内の第2のウェイトに対応し、以下同様である。スパース性バランシング・システムは、ウェイトと活性化の両方に基づいてビットマップを生成する可能性がある。このようなビットマップは結合ビットマップ(combined bitmap)と言及される。スパース性バランシング・システムは、次いで、ビットマップを再配置し、新たなビットマップを生成する。
【0010】
[0023] ビットマップを再配置するプロセスにおいて、スパース性バランシング・システムは、少なくとも幾つかのビットマップ要素のインデックスを変更して、新たなビットマップにおいてゼロの値にされていない(又はゼロの値にされた)ビットマップ要素の均等な(又はほぼ均等な)分布を達成する。例えば、スパース性バランシング・システムは、非ゼロ値(又はゼロ値)ビットマップ要素及びビットマップ内のビットマップ要素の総数に対する除算演算に基づいて、(一定のインターバル数のような)インターバル数を決定する。インターバル数は整数である可能性がある。スパース性バランシング・システムは、ビットマップを再配置し、その結果、ビットマップ要素のインターバル数ごとに、非ゼロ値(又はゼロ値)ビットマップ要素が存在することになる。一部の実施形態において、スパース性バランシング・システムは、非ゼロ値ビットマップ要素の数とゼロ値ビットマップ要素の数とを比較し、より小さな数を選択して除算演算を行う。また、スパース性バランシング・システムは、非ゼロ値ビットマップ要素がゼロ値ビットマップ要素よりも少ない場合に、非ゼロ値ビットマップ要素の均等な分布を目標とし、逆もまた同様である。このようにして、再配置プロセスはより効率的になる可能性がある。非ゼロ値ビットマップ要素の均等な分布は、ゼロ値ビットマップ要素の均等な分布をもたらすことが可能である。同様に、ゼロ値ビットマップ要素の均等な分布も、非ゼロ値ビットマップ要素の均等な分布をもたらすことが可能である。
【0011】
[0024] 新しいビットマップが生成された後に、スパース性バランシング・システムは、新しいビットマップに基づいてウェイト・ベクトルを再配置することが可能である。例えば、再配置プロセス中にビットマップ要素が動かされる場合、対応するウェイトも同様に動かされる。従って、再配置されたウェイト・ベクトルは、非ゼロ値ウェイトの均等な(又はほぼ均等な)分布を有する。一部の実施形態では、例えば、ビットマップが結合ビットマップである実施形態では、活性化ベクトルが、新しいビットマップに基づいて配置されることも可能である。更に、スパース性バランシング・システムは、ウェイト・ベクトルをサブセットに分割し、各サブセットを異なるPEに割り当てる。再配置されたウェイト・ベクトル(又は再配置されたウェイト・ベクトルと再配置された活性化ベクトルの両方)は、非ゼロ値ウェイトの均等な(又はほぼ均等な)分布を有するので、PEは、同じ又は同様なワークロードを有することになる。従って、PEのMAC演算の間に、良好な同期が存在することになる。従って、本発明は、DNNアクセラレータにおける複数のPE間の同期要件から生じるスパース性ボトルネックを軽減したり、或いは排除したりさえする。
【0012】
[0025] 説明の目的で、例示的な実装の十分な理解をもたらすために、特定の数、材料、及び構成が述べられる。しかしながら、本開示はその具体的な詳細なしに実施される可能性があること、及び/又は、本開示は説明された態様のうちの一部分のみを用いて実施される可能性があることは、当業者には明らかであろう。他の例では、例示的な実装を不明瞭にしないように、周知の特徴は省略されたり又は簡略化されたりしている。
【0013】
[0026] 更に、本件の一部を形成し、実施される可能性のある実施形態が例示として示されている添付図面が参照される。本開示の範囲から逸脱することなく、他の実施形態が利用されてもよく、構造的又は論理的な変更が施されてもよい、ということが理解されるべきである。従って、以下の詳細な説明は、限定的な意味で解釈されるべきではない。
【0014】
[0027] 様々な動作は、クレームされる対象事項を理解するのに最も役立つ方法で、複数の別個の動作又は処理として順に説明されるかもしれない。しかしながら、説明の順序は、これらの動作が必然的に順序に依存することを示唆するものとして解釈されるべきではない。特に、これらの動作は、提示された順序で実行されなくてもよい。説明される動作は、説明される実施形態とは異なる順序で実行されてもよい。様々な追加の動作が実行される可能性があり、或いは、説明される動作は、追加の実施形態では省略される可能性がある。
【0015】
[0028] 本開示の目的に関し、“A及び/又はB”という言い回しは、(A),(B),又は(A及びB)を意味する。本開示の目的に関し、“A,B,及び/又はC”という言い回しは、(A),(B),(C),(A及びB),(A及びC),(B及びC),又は(A、B、及びC)を意味する。測定範囲に関して使用される場合に、用語“~の間”は、測定範囲の両端を含む。
【0016】
[0029] 説明は、“実施形態では”又は”実施形態において”という言い回しを使用しており、これらはそれぞれ、同一又は相違する実施形態のうちの1つ以上を指す可能性がある。本開示の実施形態に関して使用される“~を備える(comprising)”,“~を含む(including)”,“~を有する(having)”などの用語は、同義である。本開示は、図面の様々な特徴を説明するために、“上”,“下”,“トップ”,“ボトム”,及び“側”のような透視図に基づく説明を使用するかもしれないが、これらの用語は、単に議論を容易にするためのものであるに過ぎず、望まれる又は要求される向きを意味するものではない。添付図面は、必ずしも寸法通りに描かれてはいない。特に指定されていない限り、共通する対象を説明するために序数形容詞“第1の”,“第2の”,及び“第3の”等を使用することは、単に、同様な対象の異なるインスタンスが言及されていることを示しているに過ぎず、そのように説明される対象が、時間的に、空間的に、ランキング又はその他の何らかの方法で、所与の順序になければならないことを暗示するようには意図されていない。
【0017】
[0030] 以下の詳細な説明では、当業者が彼らの仕事内容を他の当業者に伝えるために一般に採用される用語を使用して、例示的な実装の様々な態様が説明される。
【0018】
[0031] “実質的に”,“近い”,“近似的に”,“付近”,及び“約”という用語は、一般に、本件で説明されるように又は当該技術分野で知られているように、特定の値の文脈に基づいて、目標値の+/-20%以内にあることを指す。同様に、様々な要素の向きを示す用語、例えば、“同一平面上”,“垂直”,“直交”,“平行”,又は,要素間の他の何らかの角度は、一般に、本件で説明されているように又は当該技術分野で知られているように、特定の値の文脈に基づいて、目標値の+/- 5-20%以内にあることを指す。
【0019】
[0032] なお、用語“備える”,“備えている”,“含む”,“含んでいる”,“有する”,“有している”,又はそれらの任意の他の変形は、非排他的な包含をカバーするように意図されている。例えば、要素のリストを含む方法、プロセス、デバイス、又はスパース性バランシング・システムは、必ずしもそれらの要素だけに限定されず、明示的にリスト化されていない他の要素、又はそのような方法、プロセス、デバイス、若しくはスパース性バランシング・システムに本質的である他の要素を含む可能性がある。また、“又は”という用語は、包括的な“又は”を指し、排他的な“又は”を指してはいない。
【0020】
[0033] 本開示のスパース性バランシング・システム、方法及びデバイスは、各々、幾つかの発明的態様を有し、それらのうちの単一の態様が、本件で開示される全ての望ましい属性を単独で担うとは限らない。本件明細書に記載された対象事項の1つ以上の実装の詳細は、以下の説明及び添付の図面において記載されている。
【0021】
[0034] DNNアーキテクチャ例
図1は、様々な実施形態による例示的なDNN 100のアーキテクチャを示す。例示の目的のために、図1のDNN 100は、VGG(Visual Geometry Group)ベースの畳み込みネットワーク(convolutional neural network,CNN)である。他の実施形態において、DNN 100は、他のタイプのDNNであってもよい。DNN 100は、画像を受信し、画像内の物体の分類を出力するように訓練される。図1の実施形態では、DNN 100は、オブジェクト物体115,125,及び135を含む入力画像105を受信する。DNN 100は、複数の畳み込み層110(個別に“畳み込み層110”と呼ばれる)、複数のプーリング層120(個別に“プーリング層120”と呼ばれる)、及び複数の全結合層130(個別に“全結合層130”と呼ばれる)を含む一連の層(シーケンス・レイヤ)を含む。他の実施形態では、DNN 100は、より少ない、より多い、又は異なる層を含む可能性がある。
【0022】
[0035] 畳み込み層110は、入力画像105における特徴の存在を要約する。畳み込み層110は、特徴抽出器として機能する。DNN 100の第1層は、畳み込み層110である。一例では、畳み込み層110は、ウェイト行列150を使用することによってIFM 140に対して畳み込みを実行し、畳み込みからOFM 160を生成し、OFM 160をシーケンス内の次の層に渡す。IFM 140は、複数のIFM行列を含む可能性がある。OFM 160は、複数のOFM行列を含む可能性がある。DNN 100の第1の層でもある第1の畳み込み層110に関し、IFM 140は入力画像105である。他の畳み込み層に関し、IFM 140は、別の畳み込み層110の出力、又はプーリング層120の出力である可能性がある。畳み込みは、ウェイト行列150とIFM 140との乗算を含む線型演算である。フィルタは、ウェイトの2次元アレイである可能性がある。フィルタのウェイトは、勾配降下法を使用して逆伝搬によって初期化及び更新されることが可能である。フィルタのウェイトの大きさは、IFM 140から特徴を抽出する際のウェイト行列150の重要性を示す可能性がある。フィルタは、IFM 140よりも小さなものであるとすることが可能である。
【0023】
[0036] IFM 140のフィルタ・サイズのパッチとフィルタとの間に適用される乗算は、ドット積である可能性がある。ドット積は、IFM 140のフィルタ・サイズのパッチと対応するフィルタとの間の要素毎の乗算であり、これは、次いで、合計され、常に単一の値をもたらす。単一の値をもたらすので、その演算は時折“スカラー積”と言及される。IFM 140よりも小さなフィルタを使用することは意図的なことであり、なぜなら同じフィルタ(ウェイトのセット)が、IFM 140上の異なる点でIFM 140によって複数回乗算されることを可能にするからである。具体的には、フィルタは、IFM 140の各々の重複する部分又はフィルタ・サイズのパッチに対して、左から右へ、上から下へ、組織的に適用される。フィルタにIFM 141を1回乗算した結果は、単一の値である。フィルタはIFM 140に複数回適用されるので、乗算結果は、IFM 140のフィルタリングを表現する出力値の2次元アレイである。従って、この演算からの2次元出力アレイは、“特徴マップ(feature map)”と呼ばれる。
【0024】
[0037] 一部の実施形態では、OFM 160は、活性化関数を通過させられる。活性化関数の一例は、正規化線型活性化関数(rectified linear activation function,ReLU)である。ReLUは、入力として提供された値を直接的に返すか、又は入力が0以下である場合に値0を返す計算である。畳み込み層110は、入力として幾つかの画像を受信し、それらの各々とフィルタの各々との畳み込みを計算することが可能である。このプロセスは数回繰り返すことが可能である。例えば、OFM 160は、後続の畳み込み層110(即ち、シーケンス内でOFM 160を生成した畳み込み層110に続く畳み込み層110)に渡される。後続の畳み込み層110は、新しいフィルタを用いてOFM 160に対して畳み込みを実行し、新しい特徴マップを生成する。新しい特徴マップはまた、正規化され、サイズ変更される可能性がある。新しい特徴マップは、更なる後続の畳み込み層110によって再びフィルタリングされることが可能である、等々。
【0025】
[0038] 一部の実施形態では、畳み込み層110は、4つのハイパーパラメータ:フィルタの数、サイズFフィルタ(例えば、フィルタは、F×F×D次元のピクセルである)、フィルタに対応するウィンドウが画像上でドラッグされるSステップ(例えば、1というステップは、ウィンドウを一度に1ピクセル移動させることを意味する)、及び、ゼロ・パディングP(例えば、畳み込み層110の入力画像に、P個のピクセルの太さの黒い輪郭を追加すること)を有する。畳み込み層110は、2次元畳み込み、拡張(dilated)又は膨張(atrous)畳み込み、空間分離(spatial separable)畳み込み、デプスワイズ・セパラブル(depth-wise separable)畳み込み、転置(transposed)畳み込みなどの様々なタイプの畳み込みを実行する可能性がある。DNN 100は、16個の畳み込み層110を含む。他の実施形態では、DNN 100は、異なる数の畳み込み層を含む可能性がある。
【0026】
[0039] プーリング層120は、畳み込み層によって、例えば特徴マップのパッチ内の特徴の存在を要約することによって、生成された特徴マップをダウンサンプリングする。プーリング層120は、2つの畳み込み層110:先行する畳み込み層110(層のシーケンスにおいてプーリング層120に先行する畳み込み層110)と後続畳み込み層110(層のシーケンスにおいてプーリング層120に後続する畳み込み層110)との間に配置される。一部の実施形態では、プーリング層120は、畳み込み層110の後に、例えば活性化関数(例えば、ReLU)がOFM 160に適用された後に追加される。
【0027】
[0040] プーリング層120は、先行する畳み込み層110によって生成された特徴マップを受け取り、その特徴マップにプーリング演算を適用する。プーリング演算は、特徴マップの重要な特性を維持しながら、特徴マップのサイズを縮小する。従って、プーリング演算は、DNNの効率を改善し、過学習を回避する。プーリング層120は、平均プーリング(特徴マップ上の各パッチについて平均値を計算するもの)、最大プーリング(特徴マップの各パッチについて最大値を計算するもの)、又は両者の組み合せにより、プーリング演算を実行する可能性がある。プーリング演算のサイズは、特徴マップのサイズよりも小さい。様々な実施形態では、プーリング演算は、2ピクセルのストライドで適用される2×2ピクセルであり、その結果、プーリング演算は、特徴マップのサイズを2分の1に削減し、例えば、特徴マップ中のピクセル又は値の数は、そのサイズの4分の1に削減される。一例では、6×6の特徴マップに適用されるプーリング層120は、3×3の出力のプーリングされた特徴マップをもたらす。プーリング層120の出力は、更なる特徴抽出のために、後続の畳み込み層110に入力される。一部の実施形態では、プーリング層120は、各特徴マップに対して別々に作用して、同数のプーリングされた特徴マップの新しいセットを作成する。
【0028】
[0041] 全結合層(fully connected layers)130は、DNNの最後の層である。全結合層130は、畳み込みであってもなくてもよい。全結合層130は、入力ベクトルを受け取る。入力ベクトルは、畳み込み層110及びプーリング層120の出力を定義し、シーケンス内の最後のプーリング層120によって生成された最後の特徴マップの値を含む。全結合層130は、入力ベクトルに線型結合と活性化関数を適用し、出力ベクトルを生成する。出力ベクトルは、存在するクラスと同数の要素を含む可能性があり:要素iは、画像がクラスiに属する確率を表す。従って、各々の要素は0と1との間にあり、全ての和は1に値する。これらの確率は、ロジスティック関数(バイナリ分類)又はsoftmax関数(多クラス分類)を、活性化関数として使用することで、最後の全結合層130によって計算される。
【0029】
[0042] 一部の実施形態では、全結合層130は、入力画像105を分類し、サイズNのベクトルを返し、ここで、Nは画像分類問題におけるクラスの数である。図1の実施形態では、Nは3に等しく、なぜなら入力画像内に3つのオブジェクト115,125,及び135が存在するからである。ベクトルの各要素は、入力画像105が或るクラスに属する確率を示す。確率を計算するために、全結合層130は、各入力要素にウェイトを乗算し、合計をとり、次いで、活性化関数(例えば、N=2の場合はロジスティック、N>2の場合はソフトマックス)を適用する。これは、入力ベクトルに、ウェイトを含む行列を乗算することと等価である。一例では、出力ベクトルは、3つの確率:オブジェクト115が木であることを示す第1の確率と、オブジェクト125が車であることを示す第2の確率と、オブジェクト135が人であることを示す第3の確率とを含む。入力画像105が異なるオブジェクト又は異なる数のオブジェクトを含む他の実施形態では、出力ベクトルは異なるものになる可能性がある。
【0030】
[0043] DNN層のハードウェア・アーキテクチャ例
図2は、様々な実施形態によるDNNの層のためのハードウェア・アーキテクチャ200を示す。ハードウェア・アーキテクチャ200は、複数のPE 210(個々に“PE 210”と呼ばれる)と、カラム・バッファ220(個々に“カラム・バッファ220”と呼ばれる)とを含む。他の実施形態では、ハードウェア・アーキテクチャ200は、層の入力及び出力を記憶するためのスタティック・ランダム・アクセス・メモリ(SRAM)のような他の構成要素を含む。ハードウェア・アーキテクチャ200は、SRAMに記憶されたデータを、カラム・バッファ220に分配するための分配ユニットも含む可能性がある。
【0031】
[0044] PE 210は、乗算-累算(multiply-accumulate,MAC)演算を実行する。PE 210は、DNNにおけるニューロンと言及される場合もある。PE 210は、層の入力及びフィルタを受け取り、積和演算を通じて層の出力を生成する。各PE 210は、2つの入力信号250及び260と、出力信号270とを有する。入力信号250は、例えば、層への入力(例えば、入力特徴マップ)の一部である。入力信号260は、層内のフィルタのウェイトの一部である。ウェイトは、非ゼロ値及びゼロ値を有する可能性がある。ウェイトの値は、DNNを訓練するプロセス中に決定される。ウェイトは、ビットマップに基づいて分割され且つPEに割り当てられることが可能である。ビットマップに関する更なる詳細は、図4に関連して以下で与えられる。
【0032】
[0045] 各PE 210は、入力信号250及び260に対して乗算演算を実行する。PE 210は、図2の破線矢印で示されるように、互いに接続されている。PE 210の出力信号は、PEs 210間の相互接続を介して入力信号として他の多くのPE 210に送られる(そしておそらくはそれ自体が戻り値を受ける)。PE 210の出力信号270は、PE 210の累算演算を通じて、1つ以上の他のPEs 210の出力信号を組み込む可能性がある。PE 210についての更なる詳細は、図3と併せて以下で説明される。
【0033】
[0046] 図2の実施形態では、PEs 210は、カラム205(個々に“カラム205”と呼ばれるもの)内に配置される。層の入力及びフィルタは、カラム205に基づいてPEs 210に分散されることが可能である。例えば、各々のカラム205は、層の入力チャネル及び出力チャネルに関連付けられる。各々のカラム205のPEs 210は、フィルタを使用して入力チャネルを出力チャネルに変換する。他の実施形態では、層の入力及びフィルタは、異なる方法でPEs 210に分散される可能性がある。各々のカラム205は、カラム・バッファ220を有する。カラム・バッファ220は、PEs 210に提供されたデータ及びPEs 210から受信したデータを、短時間の間記憶する。各々のカラム・バッファ220は、ロード(読み込み)230及びドレイン(排出)240に関連付けられる。PEs 210に供給されたデータは、ロード230を介してカラム・バッファ220に伝送される。PEs 210によって生成されたデータは、ドレイン240を介してカラム・バッファ220から取り出される。一部の実施形態では、カラム・バッファ220から抽出されたデータは、ドレイン動作により、上位メモリ階層、例えば、SRAMへ送信される。
【0034】
[0047] ドレイン動作は、カラム内の全てのPEs 210がそれらの積和演算を終了するまで、始まらない。しかしながら、異なるPEs 210は、フィルタ・ウェイトにおける不均衡なスパース性に起因して、それらの積和演算を終了するまでに異なる量の時間を費やす可能性がある。例えば、フィルタのウェイトのスパース性を考慮すると、PE 210は、同じカラム205内の他のPEs 210に送られるフィルタよりも低いスパース性レベルを有するフィルタを受信する可能性がある。より低いスパース性レベルは、より多くの非ゼロ値のウェイトが存在することを意味する。PE 210がより低いスパース性レベルを有するフィルタを受信する場合、PE 210の積和演算は、別のPE 210の積和演算よりも遅くなるであろう。従って、そのPE 210は、カラム205のドレイン動作のボトルネックとなる。同様に、カラム205は、他のカラムよりも遅く、層全体の排出動作のボトルネックになる可能性がある。従って、フィルタ・ウェイトにおけるスパース性バランスを改善することによって、層の効率を改善することができる。層の効率に対するスパース性バランスの影響に関する更なる詳細は、図5及び図6に関連して以下で説明される。
【0035】
[0048] 図3は、様々な実施形態によるPE 210のブロック図である。図3のPE 210は、入力レジスタ・ファイル310、ウェイト・レジスタ・ファイル320、出力レジスタ・ファイル330、及びMACユニット340を含む。他の実施形態では、PE 210は、より少ない、より多い、又は異なる構成要素を含む可能性がある。
【0036】
[0049] 入力レジスタ・ファイル310は、PE 210によって受信された入力信号を一時的に記憶する。入力特徴データは、入力特徴データと、他のPEs 210からの出力信号とを含む可能性がある。ウェイト・レジスタ・ファイル320は、PE 210が受け取ったウェイトを一時的に記憶する。出力レジスタ・ファイル310は、PE 210が生成した出力信号を一時的に記憶する。説明及び簡略化のために、図3のPE 210は、1つの入力レジスタ・ファイル310と、1つのウェイト・レジスタ・ファイル320と、1つの出力レジスタ・ファイル330とを含んでいる。他の実施形態では、PE 210は、各タイプのデータに関する複数のレジスタ・ファイルを含む可能性がある。
【0037】
[0050] MACユニット340は、入力レジスタ・ファイル310及びウェイト・レジスタ・ファイル320内のデータに対してMAC演算を実行する。MACユニット340は、乗算ユニット350と累算ユニット360とを含む。乗算ユニット350は、入力レジスタ・ファイル310内の入力特徴データとウェイト・レジスタ・ファイル330内のウェイトとに対して乗算演算を実行する。乗算ユニット350が乗算演算に必要とする時間長は、乗算演算で使用されるウェイトのスパース性レベルに依存する。ウェイトがより密である(即ち、スパース性レベルがより低い)場合、乗算ユニット350は、乗算演算を実行するためにより多くの時間を必要とする。累算ユニット360は、乗算ユニット350の出力、他のPEからの出力信号に対して累算演算を実行する。累算ユニット360の出力は、PE 210の出力信号である。
【0038】
[0051] ビットマップを生成するプロセス例
図4は、様々な実施形態によるビットマップ410を生成するプロセスを示す。ビットマップ410は、ウェイト・ベクトル420と活性化ベクトル440に基づいて生成される。説明及び簡略化のために、ウェイト・ベクトル420と活性化ベクトル440はそれぞれ8つの要素を含んでいる。他の実施形態では、ウェイト・ベクトル420又は活性化ベクトル440は、異なる数の要素を含む可能性がある。
【0039】
[0052] ウェイト・ベクトル420は、DNN層のウェイト行列中のベクトルである可能性がある。ウェイト行列は、DNN層内のフィルタの一部又は全体である可能性がある。ウェイト・ベクトル420は、8つの要素のシーケンス、即ち8つのウェイトを含む。各ウェイトは値を有する。値は、ゼロ、非ゼロ整数、又は分数である可能性がある。例えば、ベクトル内の第1のウェイトは2.1の値を有し、ベクトル内の第2のウェイトは4の値を有し、以下同様である。第4、第5、及び第7のウェイトはゼロ値を有する。ウェイト・ビットマップ430は、ウェイト・ベクトル420から生成される。一部の実施形態では、ウェイト・ビットマップ430は、ウェイト・ベクトル420内の各ウェイトを、ウェイト・ビットマップ要素に変換することによって生成される。ウェイト・ビットマップ430内のウェイト・ビットマップ要素のインデックスは、ウェイト・ベクトル420内の対応するウェイトのインデックスに一致する。ウェイト・ビットマップ要素は、ウェイトの値に基づいて決定される値を有し:非ゼロ値のウェイトに対するウェイト・ビットマップ要素は1の値を有するが、ゼロ値のウェイトに対するウェイト・ビットマップ要素は0の値を有する。例えば、第1のウェイトの値は2.1であるので、第1のウェイト・ビットマップ要素は1の値を有する。第7のウェイトの値が0であるので、第7のウェイト・ビットマップ要素は0の値を有する。
【0040】
[0053] 同様に、活性化ビットマップ450は、活性化ベクトル440に基づいて生成される。活性化ベクトル440は、DNN層における活性化に関連付けられたベクトルである。活性化ビットマップ450は、8つの活性化ビットマップ要素のシーケンスを含み、そのインデックスと値は、活性化ベクトル440の要素に基づいて決定される。
【0041】
[0054] 更に、ビットマップ410は、ウェイト・ビットマップ430と活性化ビットマップ450とを結合することによって生成される。図4では、ウェイト・ビットマップ430と活性化ビットマップ450に対して乗算演算460が実行される。乗算演算460は、ビットマップ450を出力する。乗算演算460は、ウェイト・ビットマップ430内の各ウェイト・ビットマップ要素に、活性化ビットマップ450内の対応する活性化ビットマップ要素を乗算することを含む。活性化ビットマップ450内の活性化ビットマップ要素のインデックスは、ウェイト・ビットマップ430内のウェイト・ビットマップ要素のインデックスと一致する。例えば、ウェイト・ビットマップ430内の第1のウェイト・ビットマップ要素は、活性化ビットマップ450内の第1の活性化ビットマップ要素と乗算され、ウェイト・ビットマップ430内の第2のウェイト・ビットマップ要素は、活性化ビットマップ450内の第2の活性化ビットマップ要素と乗算され、以下同様である。従って、ビットマップ410内のビットマップ要素は、対応するウェイト・ビットマップ要素及び活性化ビットマップ要素のうちの1つが0の値を有する限り、0の値を有する。
【0042】
[0055] 図4におけるビットマップ410は、ウェイト・ベクトル420と活性化ベクトル440の両方に基づいて生成される。従って、ビットマップ410は、ウェイト・ベクトル420と活性化ベクトル440の両方におけるスパース性を表す。他の実施形態では、ビットマップ410は、ウェイト・ベクトル420には基づくが、活性化ベクトル440には基づかないで生成される可能性があり、従って、ウェイト・ベクトル420におけるスパース性を表すが、活性化ベクトル440におけるスパース性を表さない可能性がある。
【0043】
[0056] アンバランスなワークロードを有するPEの例
図5は、様々な実施形態によるアンバランスなワークロードを有するPE 520A-Eを示す。図5は、5つの異なるウェイト・ベクトル(図5には示されていない)に関する5つのビットマップ510 A-E(“ビットマップ(bitmaps)510”又は“ビットマップ(bitmap)510”と総称される)を示す。ウェイト・ベクトルは、DNN層のうちの単一の又は複数のフィルタから抽出される可能性がある。ビットマップ510は、ウェイト・ベクトルに基づいて生成される。一部の実施形態では、ビットマップ510はまた、ウェイト・ベクトルと活性化ベクトルとの組み合せに基づいて生成される可能性もある。各ビットマップ510は、1及び0の値を有するビットマップ要素のシーケンスを含む。ビットマップ510において0の値を有するビットマップ要素の数は、対応するウェイト・ベクトルのスパース性レベルを示す。図5に示されるように、ビットマップ510Eは、全てのビットマップ要素が1の値を有するので、最低のスパース性レベルを有する。ビットマップ510Aは、3つの0ビットマップ要素を有し、2番目に低いスパース性レベルを有する。ビットマップ510Dは、4つの0ビットマップ要素を有し、3番目に低いスパース性レベルを有する。ビットマップ510B-Cは、ビットマップ要素のうちの6つが0の値を有し、他の何れのビットマップ510よりも多いので、最高のスパース性レベルを有する。
【0044】
[0057] 5つのウェイト・ベクトルは、MAC演算を実行するために5つのPE 520A-E(“PEs 520”又は“PE 520”と総称される)に割り当てられる。各PE 520は、異なるウェイト・ベクトルに対してMAC演算を実行する。MAC演算の時間量は、対応するウェイト・ベクトルのスパース性レベルに相関する。PEs 520が同じ演算能力を有すると仮定すると、より多くの非ゼロ値を有するウェイト・ベクトルを乗算するには、より長い時間がかかる。ウェイト・ベクトルのスパース性は釣り合っていないので(即ち、スパース性レベルは相違するので)、PEs 520のワークロードは釣り合っていない。
【0045】
[0058] 図5は、各PE 520がそのPEに割り当てられたウェイト・ベクトルに対してMAC演算を実行するのにかかる時間量を示すためにクロック530を含んでいる。PE 520Aは、そのMAC演算を実行するために5サイクルを要するのに対して、PE 520B-Cでは2サイクル、PE 520Dでは3サイクル、PE 520Eでは7サイクルを要する。他のPE 520は、それらが各自のMAC演算を終了した後であってPE 520EがそのMAC演算を終了する前の期間では、インアクティブになるであろう。全てのPE 520が各自のMAC演算を終了するまで、ドレイン動作はPE 520から出力信号を抽出することができないので、PE 520Eは、PE 520の効率におけるボトルネックとなり、PE 510のMAC演算プロセス全体を減速させてしまう。
【0046】
[0059] バランスのとれたワークロードを有するPEの例
図6は、様々な実施形態によるバランスのとれたワークロードを有するPE 620A-Eを示す。図6は、5つの異なるウェイト・ベクトル(図6には示されていない)のための5つのビットマップ610A-E(“ビットマップ(bitmaps)610”又は“ビットマップ(bitmap)610”と総称される)を示す。ウェイト・ベクトルは、DNN層のうちの単一又は複数のフィルタから抽出される可能性がある。ビットマップ610は、ウェイト・ベクトルに基づいて生成される。一部の実施形態では、ビットマップ610はまた、ウェイト・ベクトルと活性化ベクトルとの組み合せに基づいて生成される可能性もある。各ビットマップ610は、1及び0の値を有するビットマップ要素のシーケンスを含む。様々なスパース性レベルを有する図5のビットマップ510とは異なり、図6のビットマップ610は同じスパース性レベルを有する。全てのビットマップ610は3つのゼロ要素を含む。
【0047】
[0060] 5つのウェイト・ベクトルは、MAC演算を実行するために5つのPE 620A-E(“PEs 620”又は“PE 620”と総称される)に割り当てられる。各PE 620は、異なるウェイト・ベクトルに対してMAC演算を実行する。ウェイト・ベクトルは同じスパース性レベルを有するので、PEs 620はワークロードを有する。PE 620が同じ演算能力を有すると仮定すると、PEs 620は、それらのMAC演算を終了するために同じ量の時間を費やす。図6に示すように、各PE 630は、MAC演算を終了するまでに、クロック630により示される4サイクルを要する。抽出動作は、4サイクルの終わりに開始することができる。6サイクルの終わりまでドレイン動作を開始することができない図5の実施形態と比較して、図6のMAC演算より高速である。
【0048】
[0061] ビットマップ610は、ビットマップ510を再配置することによって、即ち、シーケンス中の幾つかのビットマップ要素のインデックスを変更することによって生成することが可能である。図5のウェイト・ベクトルは、再配置されたビットマップ、即ちビットマップ610に基づいて再配置され、DNN層を加速することが可能である。
【0049】
[0062] ビットマップを再配置するプロセス例
図7は、様々な実施形態に従ってウェイト・ベクトルを再配置するプロセスを示す。ウェイト・ベクトルの再配置は、ウェイト・ベクトルのビットマップ710に基づく。ビットマップ710は、ウェイト・ベクトル、又は、ウェイト・ベクトルと活性化ベクトルの組み合せから生成される可能性がある。簡明化及び説明の目的で、ビットマップ710は、シーケンスに配置された16個の要素を含んでいる。各々の要素は、シーケンス内で異なるインデックスを有する。他の実施形態において、ビットマップ710は、異なる数の要素を含む可能性がある。
【0050】
[0063] 再配置プロセスは、幾つの要素が1の値を有し、幾つの要素が0の値を有するかを決定することから開始する。図7では、ビットマップ710は、1の値を有する4つの要素と、0の値を有する他の12の要素とを含む。1の値を有する要素の数は、0の値を有する要素の数よりも少ないので、1の値を有する要素が再配置され、再配置プロセスによって必要とされるリソースを少なくする。
【0051】
[0064] 次に、除算演算が実行される。ビットマップ710の全ての要素の数、即ち16が、1の値を有する要素の数、即ち4で除算される。除算結果は、4(16/4=4)となる。除算結果は整数ではない可能性がある。一部の実施形態では、除算結果に対してフロア演算(floor operation)が実行されて、除算結果以下の最大整数を返すことが可能である。4は、インターバル数(interval number)として使用される。
【0052】
[0065] 更に、1の値を有する要素のうちの少なくとも幾つかが配置し直され、その結果、4個(即ち、インターバル数)の要素ごとに、1の値を有する要素1つが存在するようになる。図7は、1の値を有する要素を再配置するための4つのステップを示す。ステップ1は、シーケンス内の第3の要素を、値1を有する第1の要素として識別し、第3の要素をシーケンスの先頭に移動させる。シーケンスの先頭にあった要素は、シーケンスの第3のインデックスに移動させられる。換言すれば、2つの要素のインデックス/位置は入れ替えられる。
【0053】
[0066] 同様に、ステップ2は、第4の要素を、1の値を有する第2の要素として識別し、第4の要素のインデックスを第5の要素と入れ替え、その結果、1の値を有する2つの近辺の要素双方のインデックスの差は、インターバル数である4になる。ステップ3は、第7の要素を、1の値を有する第3の要素として識別し、第7の要素と第9の要素のインデックスを入れ替える。ステップ4は、第15の要素を、1の値を有する第4の要素として識別し、第15の要素と第13の要素のインデックスを入れ替える。
【0054】
[0067] 4つのステップの後、新ビットマップ720が生成されている。新ビットマップ720は、ビットマップ710内の16個の要素を全て含んでいるが、要素のインデックスは変更されている。新ビットマップ720では、4つの要素ごとに、1の値を有する要素が存在している。新ビットマップ720を使用してウェイト・ベクトルを再配置し、元のウェイト・ベクトルと同じウェイトを含むがウェイトのインデックスは相違している新ウェイト・ベクトルを生成することができる。新ウェイト・ベクトルにおけるスパース性は、釣り合っている。新ウェイト・ベクトルは、新ビットマップ720の4つのセクション725A-Dに対応する4つのセクションに分割される可能性がある。各セクションは、セクションに対してMAC演算を実行する異なるPEに送信されることが可能である。このようにして、4つのPEの全てが同じワークロードを有することになる。
【0055】
[0068] 再配置されたウェイト・ベクトルを有する例示的なDNN層
図8は、様々な実施形態による、再配置されたウェイト・ベクトルを含む2つの隣接するDNN層810及び820を示す。層810は、DNNにおいて層820に隣接して先行している。層810及び820は、DNNにおける畳み込み層であってもよい。活性化関数830は、層810と層820の間にある。一部の実施形態では、活性化機能830は、層820の一部として実装される可能性がある。
【0056】
[0069] 層810は、ロード(load)813と、PEアレイ815と、ドレイン(drain)817とを含む。ロード813は、層810の入力特徴マップとフィルタを、PEアレイ815にロードする。PEアレイ815は、MAC演算を実行する。PEアレイの実施形態は、図3のPEアレイ200である。ドレイン817は、層810の出力特徴マップであるPEアレイ815の出力を抽出する。層810の出力特徴マップは、活性化830を介して層820に伝送される。活性化関数830は、層810の出力特徴マップを取り込み、それを層820の入力特徴マップに変換する。
【0057】
[0070] 層820は、ロード823と、PEアレイ825と、ドレイン827とを含む。ロード823は、層820の入力特徴マップとフィルタを、PEアレイ825にロードする。PEアレイ825の実施形態は図2のPEアレイ200であり、これは、入力特徴マップ、フィルタ、及び活性化830に関するMAC演算を実行する。フィルタは、スパース性のバランスをとるために再配置された1つ以上のウェイト・ベクトルを含む。一部の実施形態では、フィルタ内の全てのウェイトは、スパース性のバランスをとるように並べ替えられる。各フィルタは、スパース性のバランスをとるプロセスにおけるユニットとして使用される可能性がある。例えば、フィルタのウェイト行列は、ウェイト・ベクトル、例えば、ウェイト・ベクトル710に変換される。あるいは、フィルタの一部がユニットとして使用される。
【0058】
[0071] ウェイトの順序が変更される場合、入力特徴マップ内の要素の順序も変更される必要がある可能性がある。このことの理由は、入力特徴マップとウェイトはDNN層にペアとして到来するので、ウェイトのインデックスが変更されるならば、同じ変更が、入力特徴マップ内の要素に対して行われることを必要とするからである。入力特徴マップ内の要素の順序に対する変更は、先行する層、即ち、層810によって行われることが可能であり、再配置されたウェイト・ベクトルに一致する順序で、層820の入力特徴マップを生成する。DNN層における入力特徴マップと出力特徴マップの順序付けは独立しているものとすることが可能であり、従って、入力特徴マップと出力特徴マップは異なる方法で順序付けられることが可能である。この切り離しは、層810の出力特徴マップ(即ち、層820の入力特徴マップ)の順序に対する変更が、層820内の再配置されたウェイト・ベクトルに一致することを可能にする。
【0059】
[0072] 一部の実施形態では、活性化関数830における活性化ベクトルが、再配置されたウェイト・ベクトルのビットマップに基づいて再配置され、その結果、活性化関数830によって生成された層820の入力特徴マップは、層820の再配置されたフィルタと整合したものになる。層810のフィルタ内のウェイト・ベクトルが、再配置されたウェイト・ベクトルのビットマップに基づいて再配置され、層820のウェイト・ベクトルの再配置を相殺(オフセット)してもよい。層810のウェイト・ベクトルが再配置される場合に、層810の出力特徴マップと層820の入力特徴マップは、それに応じて再配置されることになる。従って、PEアレイ815のMAC演算中に、層820の出力特徴マップに対する再配置の影響は排除され、その結果、層820の出力特徴マップは、次の層、即ち層820に続く層、におけるMAC演算と依然とし整合している。層810がDNNの最初の層である実施形態では、ウェイト及び活性化は、PEアレイ815にロードされる前に、例えばコンパイラによってオフラインで再配置されることが可能である。
【0060】
[0073] スパース性バランシング・システムの例
図9は、様々な実施形態による、結合スパース性バランシング(combined sparsity balancing)のためのスパース性バランシング・システム900のアーキテクチャを示す。結合スパース性バランシングは、ウェイトにおけるスパース性のバランスをとることと、活性化におけるスパース性のバランスをとることとを含む。スパース性バランシング・システム900は、結合ビットマップ980に基づいてウェイトと活性化の両方におけるスパース性のバランスをとる。結合ビットマップ980は、ウェイトと活性化の両方に基づいて生成される。結合されたビットマップの実施形態は、図4のビットマップ410である。スパース性バランシング・システム900は、活性化記憶部910、活性化再配置部920、活性化分配部925、ウェイト記憶部930、ウェイト再配置部940、ウェイト分配部945、及び多重化部(multiplexers, MUX)950、960、970を含む。他の実施形態では、スパース性バランシング・システム900は、より少ない、より多い、又は異なる構成要素を含む可能性がある。スパース性バランシング・システム900は、DNN層の中で、層のPEアレイの前に実装される可能性がある。
【0061】
[0074] 活性化記憶部910は、活性化関数と前の層から受信した出力特徴マップとを記憶する。活性化再配置部920は、結合ビットマップ980に基づいて活性化関数の活性化ベクトルを再配置して、活性化ベクトルのスパース性のバランスをとる。再配置された活性化ベクトルは、元の活性化ベクトルよりもバランスが良くとれたスパース性を有する。MUX 960は、活性化再配置部から再配置された活性化ベクトルを受け取り、活性化保存部から1つ以上の他の活性化ベクトルを受け取る。他の活性化ベクトルは、再配置されない。MUX 960は、制御信号の印加によって、幾つかの入力ラインのうちの1つを、単一の共通出力ラインに切り替えるように設計された組み合せ論理回路である。MUX 960は、再配置された活性化ベクトルと他の活性化ベクトルとを、例えば、結合された活性化ベクトルに結合する。結合された活性化ベクトルは、再配置された活性化ベクトルの、より良くバランスがとれたスパース性を有する。結合された活性化ベクトルは、活性化分配部925に送られる。活性化分配部925は、結合された活性化ベクトルをPEに分配する。例えば、活性化分配部925は、結合された活性化ベクトルを、複数のセクションに分割し、各セクションを異なるPEに送る。結合された活性化ベクトルは、より良くバランスがとれたスパース性を有するので、異なるPEは、より良くバランスがとれたワークロードを有し、これはディープ・ラーニング・プロセスを加速することができる。
【0062】
[0075] MUX 950は、元のウェイト・ベクトル(即ち、並べ替えられていないウェイト・ベクトル)と、並べ替えられたウェイト・ベクトル(即ち、例えば、ソフトウェアによって並べ替えられたウェイト・ベクトル)とを受け取る。再配置されたウェイト・ベクトルは、元のウェイト・ベクトルよりも良好なバランスがとれたスパース性を有する。MUX 950は、2つのウェイト・ベクトルを1つのウェイト・ベクトルに結合する。MUX 950から出力されたウェイト・ベクトルは、ウェイト記憶部930に記憶される。
【0063】
[0076] ウェイト再配置部940は、例えば、結合されたビットマップ980に基づいて、ウェイト記憶部930に記憶されたウェイト・ベクトルを再配置し、これは、ウェイト・ベクトルにおけるスパース性バランスを更に改善する。この再配置されたウェイト・ベクトルと、ウェイト保存部930に保存されているがウェイト再配置部940によって再配置されていないウェイト・ベクトルとが、MUX 970に入力される。MUX 970は、2つのウェイト・ベクトルを、結合されたウェイト・ベクトルに結合する。結合されたウェイト・ベクトルは、ウェイト分配部945に送られる。ウェイト分配部945は、結合されたウェイト・ベクトルをPEに分配する。例えば、ウェイト分配部945は、結合されたウェイト・ベクトルを複数のセクションに分割し、各セクションを異なるPEに送る。結合されたウェイト・ベクトルは改善されたスパース性バランスを有するので、異なるPEsは、より良くバランスがとれたワークロードを有することになり、これは、ディープ・ラーニング・プロセスを加速させる。
【0064】
[0077] DL環境例
図10は、様々な実施形態によるDL環境1000を示す。DL環境1000は、DLサーバー1010と、複数のクライアント・デバイス1020(個々にクライアント・デバイス1020と呼ばれる)とを含む。DLサーバー1010は、ネットワーク1040を介してクライアント・デバイス1020に接続される。他の実施形態では、DL環境1000は、より少ない、より多い、又は異なる構成要素を含む可能性がある。
【0065】
[0078] DLサーバー1010は、ニューラル・ネットワークを使用してDLモデルを訓練する。ニューラル・ネットワークは、人間の脳のように構成され、ノードとしても知られる人工ニューロンから構成される。これらのノードは:入力層、隠れ層(複数可)、出力層の3種類の層で互いに隣接して積み重ねられる。データは、各ノードに、入力の形式で情報を提供する。ノードは、入力に、ランダム・ウェイトを乗算し、それらを計算し、バイアスを加える。最後に、活性化関数としても知られる非線型関数が適用されて、どのニューロンを発火させるかを決定する。DLサーバー1010は、DNN、RNN(Recurrent Neural Network)、GAN(Generative Adversarial Network)、LSTMN(Long Short Term Memory Network)のような多様な形態のニューラル・ネットワークを利用することが可能である。DLモデルを訓練するプロセスの間に、ニューラル・ネットワークは、入力分布における未知の要素を使用して、特徴を抽出し、オブジェクトをグループ化し、有用なデータ・パターンを発見する。DLモデルは、様々な問題、例えば、予測を行うこと、画像を分類すること等の様々な問題を解くために使用されることが可能である。DLサーバー1010は、解決されることを必要とする特定のタイプの問題に特有のDLモデルを構築することが可能である。DLモデルは、入力を受信し、特定の問題に対する解を出力するように訓練される。
【0066】
[0079] 図10において、DLサーバー1010は、DNNシステム1050、データベース1060、及びディストリビュータ1070を含む。DNNシステム1050は、DNNを訓練する。DNNは、画像、例えば、自律走行車両、医療デバイス、衛星などによってキャプチャされた画像、を処理するために使用されることが可能である。実施形態において、DNNは、入力画像を受信し、入力画像内のオブジェクトの分類を出力する。DNNの一例は、図1に関連して上述したDNN 100である。DNNシステム1050はまた、訓練されたDNNを圧縮して、訓練済みのDNNのサイズを低減する。圧縮されたDNN(圧縮DNN)はより小さいサイズを有するので、圧縮DNNの適用は、非圧縮DNNと比較して、より少ない時間及び演算リソース(例えば、メモリ、プロセッサなど)を必要とするに過ぎない。圧縮DNNは、携帯電話、IOTエッジ・デバイスなどのような低メモリ・スパース性バランシング・システムにおいて使用される可能性がある。DNNシステム1050は、訓練又は圧縮されたDNN内のウェイト・ベクトル及び活性化ベクトルを再配置して、ウェイト・ベクトル及び活性化ベクトル内のスパース性のバランスをとることも可能である。DNNシステム1050に関する更なる詳細は、図11と併せて以下で説明される。
【0067】
[0080] データベース1060は、受信された、使用された、生成された、又は別の方法でDLサーバー1010に関連付けられたデータを記憶する。例えば、データベース1060は、DNNシステム1050がDNNを訓練するために使用する訓練データセットを記憶する。実施形態では、訓練データセットは、画像を分類するDNNを訓練するために使用されることが可能な画像ギャラリーである。訓練データセットは、クライアント・デバイス1020から受信したデータを含む可能性がある。別の例として、データベース1060は、DLサーバー1010によって構築されたニューラル・ネットワークのハイパーパラメータを記憶する。
【0068】
[0081] ディストリビュータ1070は、DLサーバー1010によって生成されたDLモデルを、クライアント・デバイス1020へ配信する。一部の実施形態において、ディストリビュータ1070は、ネットワーク1040を介して、クライアント・デバイス1020からDNNのリクエストを受信する。リクエストは、クライアント・デバイス1020が解決する必要がある問題の記述を含む可能性がある。リクエストはまた、クライアント・デバイスで利用可能な演算リソースを記述する情報のような、クライアント・デバイス1020の情報を含む可能性もある。クライアント・デバイス1020で利用可能な演算リソースを記述する情報は、ネットワーク帯域幅を示す情報、利用可能なメモリ・サイズを示す情報、クライアント・デバイス1020の処理能力を示す情報などである可能性がある。実施形態において、ディストリビュータは、リクエストに従ってDNNを生成するように、DNNシステム1050に命令する可能性がある。DNNシステム1050は、問題の記述に基づいてDNNを生成する可能性がある。代替的又は追加的に、DNNシステム1050は、クライアント・デバイスで利用可能な演算リソースを記述する情報に基づいてDNNを圧縮してもよい。
【0069】
[0082] 別の実施形態では、ディストリビュータ1070は、リクエストに基づいて既存のDNNのグループの中から、DNNを選択する可能性がある。ディストリビュータ1070は、DNNのサイズ及びクライアント・デバイス1030の利用可能なリソースに基づいて、特定のクライアント・デバイス1030のためのDNNを選択する可能性がある。クライアント・デバイス1030が限られたメモリ又は処理能力を有することを、ディストリビュータ1070が判定する実施形態では、ディストリビュータ1070は、より大きいサイズを有する非圧縮DNNではなく、クライアント・デバイス1030のために圧縮されたDNNを選択する可能性がある。そして、ディストリビュータ1070は、クライアント・デバイス1020用に生成又は選択されたDNNを、クライアント・デバイス1020へ伝える。
【0070】
[0083] 一部の実施形態では、ディストリビュータ1070は、クライアント・デバイス1020からフィードバックを受信する可能性がある。例えば、ディストリビュータ1070は、クライアント・デバイス1020から新しい訓練データを受信し、DNNを更に訓練するために、その新しい訓練データをDNNシステム1050へ送信する可能性がある。別の例として、フィードバックは、クライアント・デバイス1020で利用可能な演算リソースの更新を含む。ディストリビュータ1070は、更新に基づいて、異なるDNNをクライアント・デバイス1020へ送信する可能性がある。例えば、クライアント・デバイス1020の演算リソースが減少したことを示すフィードバックを受信した後に、ディストリビュータ1070は、より小さいサイズのDNNを、クライアント・デバイス1020へ送信する。
【0071】
[0084] クライアント・デバイス1020は、ディストリビュータ1070からDNNを受信し、問題を解決するために、例えば画像内のオブジェクトを分類するために、そのDNNを適用する。様々な実施形態において、クライアント・デバイス1020は、画像をDNNに入力し、様々なアプリケーション、例えば、視覚的再構成(visual reconstruction)、拡張現実、ロボット位置特定及びナビゲーション、医療診断、気象予測など、のためにDNNの出力を使用する。クライアント・デバイス1020は、ユーザー入力を受信すること、並びに、ネットワーク1040を介してデータを送信及び/又は受信することが可能な1つ以上の演算デバイスである可能性がある。一実施形態では、クライアント・デバイス1020は、デスクトップ又はラップトップ・コンピュータのような従来のコンピュータ・スパース性バランシング・システムである。あるいは、クライアント・デバイス1020は、パーソナル・デジタル・アシスタント(PDA)、携帯電話、スマートフォン、自律走行車両、又は他の適切なデバイスのような、コンピュータ機能を有するデバイスである可能性がある。クライアント・デバイス1020は、ネットワーク1040を介して通信するように構成される。一実施形態では、クライアント・デバイス1020は、クライアント・デバイス1020のユーザーが、DLサーバー1010(例えば、DLサーバー1010のディストリビュータ1070)とやり取りすることを可能にするアプリケーションを実行する。クライアント・デバイス1020は、アプリケーションを介して、DNNを要求したり、又はフィードバックをディストリビュータ1070に送信したりする可能性がある。例えば、クライアント・デバイス1020は、ネットワーク1040を介してクライアント・デバイス1020とDLサーバー1010との間のやり取りを可能にするためにブラウザ・アプリケーションを実行する。別の実施形態では、クライアント・デバイス1020は、IOS(登録商標)又はANDROID(登録商標)のような、クライアント・デバイス1020固有の動作スパース性バランシング・システム上で動作するアプリケーション・プログラミング・インターフェース(API)を介してDLサーバー1010とやり取りを行う。
【0072】
[0085] 実施形態において、クライアント・デバイス1020は、スタンドアロンのネットワーク対応デバイスとして動作する統合演算デバイスである。例えば、クライアント・デバイス1020は、ディスプレイ、スピーカ、マイクロフォン、カメラ、及び入力デバイスを含む。別の実施形態では、クライアント・デバイス1020は、テレビ又はその他の外部ディスプレイ及び/又はオーディオ出力スパース性バランシング・システムのような外部メディア・デバイスに結合する演算デバイスである。この実施形態では、クライアント・デバイス1020は、無線インターフェース又は有線インターフェース(例えば、HDMI(登録商標)ケーブル)を介して外部メディア・デバイスに結合する可能性があり、そのディスプレイ、スピーカ、マイクロフォン、カメラ、及び入力デバイスのような外部メディア・デバイスの様々な機能を利用する可能性がある。ここで、クライアント・デバイス1020は、クライアント・デバイス1020とやり取りをするための専用のソフトウェア、ファームウェア、又はハードウェアを特に有していない汎用外部メディア・デバイスと互換性があるように構成される可能性がある。
【0073】
[0086] ネットワーク1040は、DLサーバー1010とクライアント・デバイス1020との間の通信をサポートする。ネットワーク1040は、有線及び/又は無線通信スパース性バランシング・システムの両方を使用する、ローカル・エリア及び/又はワイド・エリア・ネットワークの任意の組み合わせを含む可能性がある。一実施形態では、ネットワーク1040は、標準的な通信技術及び/又はプロトコルを使用する可能性がある。例えば、ネットワーク1040は、イーサーネット、8010.11、WiMAX(worldwide interoperability for microwave access)、3G、4G、CDMA(code division multiple access)、デジタル加入者回線などのような技術を使用する通信リンクを含む可能性がある。ネットワーク1040を介して通信するために使用されるネットワーキング・プロトコルの例は、マルチプロトコル・ラベル・スイッチング(MPLS)、伝送制御プロトコル/インターネット・プロトコル(TCP/IP)、ハイパーテキスト転送プロトコル(HTTP)、シンプル・メール転送プロトコル(SMTP)、及びファイル転送プロトコル(FTP)を含む可能性がある。ネットワーク1040を介してやり取りされるデータは、ハイパーテキスト・マークアップ言語(HTML)又は拡張可能マークアップ言語(XML)のような任意の適切なフォーマットを使用して表現される可能性がある。一部の実施形態では、ネットワーク1040の通信リンクの全部又は一は、任意の適切な1つ以上の技法を使用して暗号化される可能性がある。
【0074】
[0087] DNNシステムの例
図11は、様々な実施形態によるDNNシステム1050のブロック図である。DNNシステム1050は、DNNを訓練する。DNNシステム1050は、画像分類、生体細胞(例えば、DNA、タンパク質など)の間の学習関係、デバイス(例えば、ロボット、機械など)の制御挙動などのような様々な問題を解くために使用されことが可能なDNNを訓練することが可能である。DNNシステム1050は、インターフェース・モジュール1110、訓練モジュール1120、圧縮モジュール1130、検証モジュール1140、スパース性バランシング・モジュール1150、及びアプリケーション・モジュール1160を含む。他の実施形態では、代替的な構成、相違する又は追加の構成要素がDNNシステム1050に含まれる可能性がある。更に、DNNシステム1050の構成要素に由来する機能は、DNNシステム1050に含まれる様々な構成要素又は様々なスパース性バランシング・システムによって達成される可能性がある。
【0075】
[0088] インターフェース・モジュール1110は、DNNシステム1050の他のシステムとの通信を促進する。例えば、インターフェース・モジュール1110は、DNNシステム1050と外部データベースとの間の通信を確立して、タスクを実行するためにDNNを訓練したり、或いはDNNに入力したりするために使用されることが可能なデータを受信する。別の例として、インターフェース・モジュール1110は、DNNシステム1050がDNNを他のシステム(例えば、タスクを実行するためにDNNを適用するように構成された演算デバイス)に配信することをサポートする。
【0076】
[0089] 訓練モジュール1120は、訓練データセットを用いてDNNを訓練する。訓練モジュール1120は、訓練データセットを形成する。訓練モジュール1120が画像内の物体(object)を認識するようにDNNを訓練する実施形態では、訓練データセットは、訓練画像と訓練ラベルを含む。訓練ラベルは、訓練画像内の物体のグランド・トゥルース分類を記述している。一部の実施形態では、訓練データセット内の各ラベルは、訓練画像内の物体に対応する。一部の実施形態において、訓練データセットの一部は、DNNを最初に訓練するために使用される可能性があり、残りの訓練データセットは、圧縮されたDNNをチューニングするために圧縮モジュール1130によって使用されるチューニング・サブセットとして、或いは、訓練もしくは圧縮されたDNNのパフォーマンスを検証するために検証モジュール1140によって使用される検証サブセットとして、保持されてもよい。チューニング・サブセット及び検証サブセットを含まない訓練データセットの部分は、DNNを訓練するために使用されることが可能である。
【0077】
[0090] また、訓練モジュール1120は、DNNを訓練するためのハイパーパラメータも決定する。ハイパーパラメータは、DNN訓練プロセスを指定する変数である。ハイパーパラメータは、DNN内部のパラメータ(例えば、フィルタのウェイト)とは相違する。一部の実施形態では、ハイパーパラメータは、隠れ層の数などのようなDNNのアーキテクチャを決定する変数を含む。ハイパーパラメータは、バッチ・サイズ、エポック数などのような、DNNがどのように訓練されるかを決定する変数も含む。バッチ・サイズは、DNNのパラメータを更新する前に、処理する訓練サンプルの数を決定する。バッチ・サイズは、訓練データセット内のサンプル数と同じか、又はそれよりも小さい。訓練データセットは、1つ又は複数のバッチに分割されることが可能である。エポックの数は、訓練データセット全体がネットワーク全体を通じて順方向及び逆方向に何回渡されるかを定義する。エポックの数は、ディープ・ラーニング・アルゴリズムが訓練データセット全体を通じて動作する回数を定義する。1エポックは、訓練データセット内の各訓練サンプルが、DNN内部のパラメータを更新する機会を持ったことを意味する。エポックは、1つ以上のバッチを含む可能性がある。エポックの数は、10、100、500、1000、又はそれ以上であってもよい。
【0078】
[0091] 訓練モジュール1120は、例えば、ハイパーパラメータのうちの幾つかに基づいて、DNNのアーキテクチャを定義する。DNNのアーキテクチャは、入力層、出力層、及び複数の隠れ層を含む。DNNの入力層は、入力画像の高さ、入力画像の幅、及び入力画像の深さ(例えば、入力画像内のピクセルの色を指定するビット数)のような、入力画像の属性を指定するテンソル(例えば、多次元アレイ)を含む可能性がある。出力層は、入力層内のオブジェクトのラベルを含む。隠れ層は、入力層と出力層との間の層である。隠れ層は、1つ以上の畳み込み層と、1つ以上の他のタイプの層、例えば、正規化線型ユニット(ReLU)層、プーリング層、全結合層、正規化層、ソフトマックス又はロジスティック層などを含む。DNNの畳み込み層は、入力画像を特徴マップに抽象化し、特徴マップは、特徴マップ高さ、特徴マップ幅、及び特徴マップ・チャネル(例えば、赤、緑、青の画像は3つのチャネルを含む)を指定するテンソルによって表現される。プーリング層は、畳み込み後の入力画像の空間ボリュームを低減するために使用される。これは、2つの畳み込み層の間で使用される。全結合層は、ウェイト、バイアス、及びニューロンを含む。それは、1つの層におけるニューロンを別の層のニューロンに接続する。これは、訓練によって、異なるカテゴリ間で画像を分類するために使用される。
【0079】
[0092] 訓練モジュール1120は、訓練データセットをDNNに入力し、訓練画像内のオブジェクトについての生成されたラベルと訓練ラベルとの間の誤差を最小化するように、DNN内部のパラメータを修正する。パラメータは、DNNの畳み込み層におけるフィルタのウェイトを含む。一部の実施形態では、訓練モジュール210は、誤差を最小化するためにコスト関数を使用する。訓練モジュール1120が所定の数のエポックを終了した後、訓練モジュール1120は、DNN内のパラメータを更新することを停止してもよい。更新されたパラメータを有するDNNは、訓練済み(又は学習済み)DNNと言及される。
【0080】
[0093] 圧縮モジュール1130は、モデル精度の僅かな損失を犠牲にして、訓練済みDNNの複雑性を低減するために、訓練済みDNNを圧縮する。圧縮モジュール1130は、訓練済みDNN内の畳み込みテンソルの全部又は一部を、対応する畳み込みテンソルから次元を削減した縮小テンソルに変換する。圧縮モジュール1130は、次いで、訓練済みDNNの複雑性を低減するために、縮小テンソルを訓練済みDNNに統合する。一部の実施形態では、圧縮モジュール1130は、畳み込み層におけるフィルタのサブセットをプルーニングして、スパース・テンソルを生成し、次いで、スパース・テンソルを分解して、畳み込み層の縮小テンソルを生成する。圧縮モジュール1130は、畳み込みテンソルをネットワークから除去し、縮小テンソルをネットワークに配置することによって、訓練済みDNNを圧縮する。訓練済みDNNにおける畳み込みテンソルの全部又は一部が除去され、それらの縮小テンソルが統合された後に、圧縮されたDNNが生成される。圧縮モジュール1130は、圧縮されたDNNをファイン・チューニングすることが可能である。例えば、圧縮モジュール1130は、訓練データセット、又は訓練データセットのサブセットを使用して、圧縮されたDNNを訓練する。圧縮されたDNNは事前に訓練されたDNNから変換されるので、ファイン・チューニング・プロセスは再訓練(又は再学習)プロセスである。
【0081】
[0094] 検証モジュール1140は、訓練又は圧縮されたDNNの精度を検証する。一部の実施形態では、検証モジュール1140は、検証データセット内のサンプルをDNNに入力し、DNNの出力を使用してモデル精度を決定する。一部の実施形態では、検証データセットは、訓練データセット内の全部又は一部のサンプルから形成される可能性がある。追加的又は代替的に、検証データセットは、訓練セット内のサンプル以外の追加のサンプルを含む。一部の実施形態では、検証モジュール1140は、DNNの精度(precision)、再現率(recall)、又は精度と再現率の組み合せを測定する精度スコアを決定することが可能である。検証モジュール1140は、精度スコアを決定するために以下のメトリックを使用する可能性がある:
Precision = TP / (TP + FP) 及び
Recall = TP / (TP + FN)
ここで、precisionは、予測した総数(TP+FP又は偽陽性)のうち、参照分類モデルが正しく予測した数(TP又は真陽性)がどの程度であるかを示す可能性があり、recallは、問題の特性を有するオブジェクトの総数(TP+FN又は偽陰性)のうち、参照分類モデルが正しく予測した数(TP)がどの程度であるかを示す可能性がある。Fスコア(F-score = 2*PR/(P+R))は、精度及び再現率を単一の尺度に統合したものである。
【0082】
[0095] 検証モジュール1140は、精度スコアを閾値スコアと比較することが可能である。拡張モデル(augmented model)の精度スコアが閾値スコアよりも低いこと、を検証モジュール1140が判定する例では、検証モジュール1140は、DNNを再訓練するように訓練モジュール1120又は圧縮モジュール1130に命令する。一実施形態において、訓練モジュール1120又は圧縮モジュール1130は、DNNが十分に正確である可能性があるという精度尺度指示、又は、行われる訓練ラウンド数のような、停止条件が発生するまで、DNNを反復的に再訓練する可能性がある。
【0083】
[0096] 一部の実施形態では、検証モジュール1140は、DNNを圧縮するように圧縮モジュール1130に命令する。例えば、検証モジュール1140は、圧縮されたDNNの精度スコアが閾値スコアを上回るかどうかを判定する可能性がある。圧縮DNNの精度スコアは閾値スコアを上回ると判定したことに応答して、検証モジュール1140は、例えば、DNN内の圧縮されていない畳み込み層を圧縮することによって、DNNを更に圧縮するように圧縮モジュール1130に命令する。実施形態において、検証モジュール1140は、精度スコアに基づいて圧縮率を決定する可能性があり、圧縮率に基づいてDNNを更に圧縮するように圧縮モジュール1130に命令する。圧縮率は、例えば、DNNの圧縮からの縮小サイズを示すパーセンテージである。
【0084】
[0097] スパース性バランシング・モジュール1150は、DNN層のフィルタにおけるスパース性のバランスをとる。スパース性バランシング・モジュール1150の実施形態は、図9におけるスパース性バランシング・システム900である。一部の実施形態では、スパース性バランシング・モジュール1150は、DNN内の層のシーケンスのうちの層のウェイト・ベクトルにアクセスする。ウェイト・ベクトルは、ウェイトの第1のシーケンスを含む。ウェイトは様々な値を有する。例えば、一部のウェイトは非ゼロ値を有するが、一部のウェイトはゼロ値を有する。実施形態では、ウェイト・ベクトルは、層におけるフィルタを表す。フィルタは、X行及びY列を含むウェイトの行列である可能性があり、ここで、X及びYは整数である。ウェイト・ベクトルはY個のセクションを含む可能性があり、各セクションは行列における行である。例えば、第1の行はウェイト・ベクトルにおける第1のセクションであり、第2の行はウェイト・ベクトルにおける第2のセクションであり、以下同様である。他の実施形態では、ウェイト・ベクトルは、フィルタの一部分を表現する可能性があり、或いは、層の複数のフィルタを表現する可能性がある。層はまた、活性化を含む可能性がある。活性化は、活性化のシーケンスを含む活性化ベクトルによって表現されることが可能である。
【0085】
[0098] スパース性バランシング・モジュール1150は、少なくともウェイト・ベクトルに基づいてビットマップを生成する。ビットマップは、ビットマップ要素の第2のシーケンスを含む。第2のシーケンス内のビットマップ要素の各々は、第1のシーケンス内の様々なウェイトに対応する。ビットマップ要素の値は、対応するウェイトの値に少なくとも基づいて決定される。また、第2のシーケンス内のビットマップ要素のインデックスは、第1のシーケンス内の対応するウェイトのインデックスと一致する。例えば、非ゼロ値を有する各ウェイトに関し、スパース性バランシング・モジュール1150は、1の値にされたビットマップ要素(one valued bitmap element)を生成する。ゼロ値を有する各ウェイトに対して、スパース性バランシング・モジュール1150は、ゼロ値にされたビットマップ要素(zero valued bitmap element)を生成する。
【0086】
[0099] 一部の実施形態では、スパース性バランシング・モジュール1150は、ウェイト・ベクトルと活性化ベクトルの両方を使用してビットマップを生成する。スパース性バランシング・モジュール1150は、ウェイト・ベクトルに基づいてウェイト・ビットマップを生成する。ウェイト・ビットマップは、ウェイト・ビットマップ要素のシーケンスを含む。スパース性バランシング・モジュール1150は、活性化ベクトルに基づいて活性化ビットマップを生成する。活性化ビットマップは、活性化ビットマップ要素のシーケンスを含む。ビットマップ内の各自それぞれのビットマップ要素は、ウェイト・ビットマップ内の異なるウェイト・ビットマップ要素、及び活性化ビットマップ内の異なる活性化ビットマップ要素に対応する。ビットマップ要素は、対応するウェイト・ビットマップ要素の値と対応する活性化ビットマップ要素の値との積に等しい値を有する。実施形態において、ウェイト・ビットマップ要素が1の値を有するが、活性化ビットマップ要素は0の値を有する場合に、そのビットマップ要素は0の値を有する。
【0087】
[0100] スパース性バランシング・モジュール1150は、ビットマップ要素の値に基づいて、第2のシーケンス内のビットマップ要素を再配置することによって、ビットマップから新しいビットマップを生成する。スパース性バランシング・モジュール1150は、1の値にされたビットマップ要素のインデックスと0の値にされたビットマップ要素のインデックスとを入れ替える。一部の実施形態において、スパース性バランシング・モジュール1150は、1の値のビットマップ要素の第1数を決定する。スパース性バランシング・モジュール1150はまた、ゼロ値ビットマップ要素の第2数を決定する。スパース性バランシング・モジュール1150は、2つの数の合計を決定し、2つの数のうちの小さい方の数を識別する。第1数が第2数よりも小さい例(即ち、0の値を有するビットマップ要素よりも、1の値を有するビットマップ要素が多い例)では、スパース性バランシング・モジュール1150は、合計を第1数で除算する。スパース性バランシング・モジュール1150はまた、フロア演算を実行して、除算の結果以下である最大の整数を決定する可能性がある。フロア演算によって返される整数は、インターバル数として使用される。スパース性バランシング・モジュール1150は、第2のシーケンス内のビットマップ要素を再配置し、その結果、新しいビットマップ内の全てのインターバル数毎のビットマップ要素が、1の値を有する少なくとも1つのビットマップ要素を含むようになる。第2数が第1数よりも小さい別の例では、スパース性バランシング・モジュール1150は、合計を第2数で除算し、第2のシーケンス内のビットマップ要素を再配置し、その結果、新しいビットマップ内の全てのインターバル数毎のビットマップ要素が、ゼロの値を有する少なくとも1つのビットマップ要素を含むようになる。
【0088】
[0101] スパース性バランシング・モジュール1150は、次いで、新しいビットマップに基づいて、DNNのネットワーク内の処理要素にウェイト・ベクトルを割り当てる。各々の処理要素は、ウェイト・ベクトルの異なるサブセットを使用して、積和演算を実行するように構成される。スパース性バランシング・モジュール1150は、新しいビットマップに基づいてウェイト・ベクトル内のウェイトを再配置する可能性がある。例えば、スパース性バランシング・モジュール1150は、新しいビットマップ内のウェイトに対応するビットマップ要素のインデックスに基づいて、ウェイトを移動させる。スパース性バランシング・モジュール1150は、再構成されたウェイト・ベクトルを、インターバル数に基づいてサブセットに分ける。各サブセットは、少なくとも、インターバル数のビットマップ要素を含む可能性がある。1の値を有するビットマップ要素は、非ゼロ値のウェイトを表すので、サブセット内の非ゼロ値のウェイトの数は同じであるか、又は類似している。従って、PEsのワークロードは同じか又は同様である。
【0089】
[0102] スパース性バランシング・モジュール1150はまた、新しいビットマップに基づいて活性化ベクトルを再配置することが可能であり、その結果、活性化の順序はウェイトの新しい順序と整合するようになる。一部の実施形態において、スパース性バランシング・モジュール1150はまた、先行する層、即ち、DNN内でその層に先行する異なる層、のウェイト・ベクトルを再配置して、層のウェイト・ベクトルの再配置を相殺(オフセット)する。先行層のウェイト・ベクトルが再配置されると、先行層の出力であって層への入力であるものは、変更されることになる。層への変更された入力は、層におけるウェイト・ベクトルの再配置をオフセットし、その結果、層の出力は、次の層を変更することなく、それでもDNNにおける次の層への入力として使用できるようになる。
【0090】
[0103] アプリケーション・モジュール1160は、訓練又は圧縮されたDNNを適用してタスクを実行する。例えば、アプリケーション・モジュール1160は、画像をDNNに入力する。DNNは、画像内の物体の分類を出力する。一例として、DNNは、セキュリティ・カメラによってキャプチャされた画像内にある悪意のあるオブジェクト又は危険なオブジェクトを検出するために、セキュリティ設定において準備される可能性がある。別の例として、DNNは、自律走行車のカメラによってキャプチャされた画像内の物体(例えば、道路標識、危険、人間、ペットなど)を検出するように準備される可能性がある。DNNへの入力は、訓練データセットがDNNに提供された方法を反映する所定の入力構造に従って、フォーマットされる可能性がある。DNNは、例えば、画像の分類、検出された物体のリスト、検出された物体の境界などである可能性がある出力構造を生成する可能性がある。一部の実施形態において、アプリケーション・モジュール1160は、他のスパース性バランシング・システムがタスクを実行するためにDNNを適用するように、DNNを、他のスパース性バランシング・システム、例えば、DNNシステム1050と通信する演算デバイスに分配する。

[0104] スパース性のバランスをとる方法例
図12は、様々な実施形態によるウェイト・ベクトルにおけるスパース性のバランスをとるための方法1200を示すフローチャートである。方法1200は、図11のスパース性バランシング・モジュール1150によって実行される可能性がある。方法1200は、図12に示されるフローチャートを参照して説明されるが、スパース性のバランスをとるための多数の他の方法が代替的に使用される可能性がある。例えば、図12のステップの実行順序は変更される可能性がある。別の例として、一部のステップは、変更、削除、又は組み合わせられてもよい。
【0091】
[0105] スパース性バランシング・モジュール1150は、DNNにおける層のシーケンス内の層のウェイト行列の少なくとも一部分を表すウェイト・ベクトルを取得する(1210)。一部の実施形態において、ウェイト・ベクトルは、DNN層のウェイト行列内のベクトル、又はウェイト行列内の複数のベクトルの組み合わせである。ウェイト行列は、DNN層内のフィルタの一部又は全体であってもよい。ウェイト・ベクトルは、ウェイトの第1のシーケンスを含む。ウェイトは、様々な値を有する。
【0092】
[0106] スパース性バランシング・モジュール1150は、少なくともウェイト・ベクトルに基づいてビットマップを生成する(1220)。ビットマップは、ビットマップ要素の第2のシーケンスを含む。第2のシーケンス内のビットマップ要素の各々は、第1のシーケンス内の異なるウェイトに対応する。ビットマップ要素の値は、対応するウェイトの値に少なくとも基づいて決定される。また、第2のシーケンス内のビットマップ要素のインデックスは、第1のシーケンス内の対応するウェイトのインデックスと一致する。例えば、非ゼロ値を有する各ウェイトに関し、スパース性バランシング・モジュール1150は、1の値を有するビットマップ要素を生成し、ゼロ値のウェイトに対してゼロの値を有するビットマップ要素を生成する。一部の実施形態では、スパース性バランシング・モジュール1150は、ウェイト・ベクトルと活性化ベクトルの両方を使用してビットマップを生成する。
【0093】
[0107] スパース性バランシング・モジュール1150は、ビットマップ要素の値に基づいて、第2のシーケンス内のビットマップ要素を再配置することによって、ビットマップから新しいビットマップを生成する(1230)。スパース性バランシング・モジュール1150は、ビットマップ内のビット要素を順序変更して、バランスのとれたスパース性、即ち、ビットマップ内のゼロ値ビット要素の均等な(又はほぼ均等な)分布を獲得する。スパース性バランシング・モジュール1150は、図7に示されるプロセスを使用することによって、ビットマップを再配置する可能性がある。
【0094】
[0108] スパース性バランシング・モジュール1150は、次いで、新しいビットマップに基づいて、DNNの層内の複数の処理要素に、ウェイト・ベクトルを割り当てる(1240)。各々の処理要素は、ウェイト・ベクトルの異なるサブセットを使用して、積和演算を実行するように構成される。スパース性バランシング・モジュール1150は、新しいビットマップ内のビットマップの順序に基づいて、ウェイト・ベクトルを再配置することが可能である。例えば、スパース性バランシング・モジュール1150は、新しいビットマップ内のウェイトに対応するビットマップ要素のインデックスに基づいて、ウェイトを移動させる。新しいビットマップは、バランスのとれたスパース性を有するので、再配置されたウェイト・ベクトルもまた、バランスのとれたスパース性を有するであろう。
【0095】
[0109] スパース性バランシング・モジュール1150はまた、新しいビットマップに基づいて活性化ベクトルを再配置する可能性がある。一部の実施形態において、スパース性バランシング・モジュール1150はまた、先行層、即ち、DNN内の或る層に先行する異なる層、のウェイト・ベクトルを再配置して、或る層のウェイト・ベクトルの再配置をオフセットする。先行層のウェイト・ベクトルが再配置されると、先行層の出力であって或る層への入力であるものが変化することになる。層への変更された入力は、層におけるウェイト・ベクトルの再配置をオフセットし、その結果、層の出力は、次の層を変更することなく、依然としてDNNにおける次の層に対する入力として使用されることが可能である。
【0096】
[0110] 演算デバイス例
図13は、様々な実施形態によるDNNシステム1050として使用するための例示的な演算スパース性バランシング・システムのブロック図である。図13には、演算スパース性バランシング・システム1300に含まれるものとして多数の構成要素が示されているが、これらの構成要素のうちの任意の1つ以上は、アプリケーションに応じて適宜省略されたり又は複製されたりする可能性がある。一部の実施形態において、演算スパース性バランシング・システム1300に含まれる構成要素の全部又は一部は、1つ以上のマザーボードに取り付けられる可能性がある。一部の実施形態では、これらの構成要素の全部又は一部は、単一のスパース性バランシング・システム・オン・チップ(SoC)ダイ上に製造される。更に、様々な実施形態において、演算スパース性バランシング・システム1300は、図13に示される構成要素のうちの1つ以上を含まない可能性があるが、演算スパース性バランシング・システム1300は、1つ以上の構成要素に結合するためのインターフェース回路を含む可能性がある。例えば、演算スパース性バランシング・システム1300は、ディスプレイ・デバイス1306を含まない可能性があり、ディスプレイ・デバイス1306が結合される可能性のあるディスプレイ・デバイス・インターフェース回路(例えば、コネクタ及びドライバ回路)を含む可能性がある。別の一群の例では、演算スパース性バランシング・システム1300は、オーディオ入力デバイス1318又はオーディオ出力デバイス1308を含まない可能性があるが、オーディオ入力デバイス1318又はオーディオ出力デバイス1308が結合される可能性のあるオーディオ入力又は出力デバイス・インターフェース回路(例えば、コネクタ及びサポート回路)を含む可能性がある。
【0097】
[0111] 演算スパース性バランシング・システム1300は、処理デバイス1302(例えば、1つ以上の処理デバイス)を含む可能性がある。本件で使用される場合に、“処理デバイス”又は”プロセッサ”という用語は、レジスタ及び/又はメモリからの電子データを処理して、その電子データを、レジスタ及び/又はメモリに記憶される可能性のある他の電子データに変換する任意のデバイス又はデバイスの一部を指する可能性がある。処理デバイス1302は、1つ以上のデジタル信号プロセッサ(DSP)、特定用途向けIC(ASIC)、中央処理ユニット(CPU)、グラフィックス処理ユニット(GPU)、暗号プロセッサ(ハードウェア内で暗号アルゴリズムを実行する専用プロセッサ)、サーバー・プロセッサ、又は、その他の任意の適切な処理デバイスを含む可能性がある。演算スパース性バランシング・システム1300は、メモリ1304を含む可能性があり、メモリそれ自体は、揮発性メモリ(例えば、DRAM)、不揮発性メモリ(例えば、リード・オンリー・メモリ(ROM))、フラッシュ・メモリ、ソリッド・ステート・メモリ、及び/又はハード・ドライブのような1つ以上のメモリ・デバイスを含む可能性がある。一部の実施形態では、メモリ1304は、処理デバイス1302とダイを共有するメモリを含む可能性がある。一部の実施形態では、メモリ1304は、ウェイト・ベクトルにおけるスパース性のバランスをとるための動作、例えば、図12に関連して上述された方法1200、又は図11に関連して上述されたスパース性バランシング・モジュール1150により実行される動作、を行うように実行可能な命令を記憶する1つ以上の非一時的なコンピュータ可読媒体を含む。1つ以上の非一時的コンピュータ可読媒体に記憶された命令は、処理装置1302によって実行される可能性がある。
【0098】
[0112] 一部の実施形態では、演算スパース性バランシング・システム1300は、通信チップ1312(例えば、1つ又は複数の通信チップ)を含む可能性がある。例えば、通信チップ1312は、演算スパース性バランシング・システム1300への及びそこからのデータの転送のための無線通信を管理するように構成されることが可能である。“無線(wireless)”という用語及びその派生語は、非固体媒体(nonsolid medium)を介して、変調された電磁放射の使用を使用することによりデータを通信することが可能な回路、デバイス、スパース性バランシング・システム、方法、技術、通信チャネルなどを説明するために使用される可能性がある。この用語は、関連するデバイスが如何なる配線も含まないことを意味してはいないが、一部の実施形態では含まない場合もある。
【0099】
[0113] 通信チップ1312は、Wi-Fi(IEEE 802.13ファミリー)を含む電気電子技術者協会(IEEE)規格、IEEE 802.16規格(例えば、IEEE 802.16-2005修正)、ロング・ターム・エボリューション(LTE)プロジェクトを、任意の修正、更新、及び/又は改訂(例えば、アドバンストLTEプロジェクト、ウルトラモバイル・ブロードバンド(UMB)プロジェクト(“3GPP2”とも呼ばれる)等)とともに含むが、それらに限定されない、ワイヤレス規格又はプロトコルを幾つでも実装する可能性がある。IEEE 802.16対応ブロードバンド無線アクセス(BWA)ネットワークは、一般に、WiMAXネットワークと呼ばれ、これは、“Worldwide Interoperability for Microwave Access”の略称であり、IEEE 802.16規格の準拠性及び相互運用性試験に合格した製品の認証マークである。通信チップ1312は、GSM(Global Sparsity balancing system for Mobile Communication)、GPRS(General Packet Radio Service)、UMTS(Universal Mobile Telecommunications Sparsity balancing system)、HSPA(High Speed Packet Access)又はLTEネットワークに従って動作する可能性がある。通信チップ1312は、EDGE(Enhanced Data for GSM Evolution)、UTRAN(Universal Terrestrial Radio Access Network)、E-UTRAN(Evolved UTRAN)に従って動作する可能性がある。通信チップ1312は、CDMA、TDMA(Time Division Multiple Access )、DECT(Digital Enhanced Cordless Telecommunications)、EV-DO(Evolution-Data Optimized)及びそれらの派生物、並びに、3G、4G、5G、及びそれ以降として指定される任意の他のワイヤレス・プロトコルに従って動作する可能性がある。通信チップ1312は、他の実施形態では、他の無線プロトコルに従って動作する可能性がある。演算スパース性バランシング・システム1300は、無線通信を促進するための、及び/又は他の無線通信(AM又はFM無線送信など)を受信するためのアンテナ1322を含む可能性がある。
【0100】
[0114] 一部の実施形態では、通信チップ1312は、電気、光、又はその他の任意の適切な通信プロトコル(例えば、イーサーネット)のような有線通信を管理する可能性がある。上述したように、通信チップ1312は、複数の通信チップを含む可能性がある。例えば、第1の通信チップ1312は、Wi-Fi又はBluetooth(登録商標)のような短距離ワイヤレス通信専用である可能性があり、第2の通信チップ1312は、GPS(global indexing sparsity balancing system)、EDGE、GPRS、CDMA、WiMAX、LTE、EV-DO、又はその他のような長距離ワイヤレス通信専用である可能性がある。一部の実施形態では、第1の通信チップ1312は、無線通信専用である可能性があり、第2の通信チップ1312は、有線通信専用である可能性がある。
【0101】
[0115] 演算スパース性バランシング・システム1300は、バッテリー/電力回路1314を含む可能性がある。バッテリー/電力回路1314は、1つ以上のエネルギー蓄積デバイス(例えば、バッテリー又はキャパシタ)、及び/又は、演算スパース性バランシング・システム1300の構成要素を、演算スパース性バランシング・システム1300とは別のエネルギー源(例えば、ACライン電力)に結合するための回路を含む可能性がある。
【0102】
[0116] 演算スパース性バランシング・システム1300は、ディスプレイ・デバイス1306(又は、上述したような対応するインターフェース回路)を含む可能性がある。ディスプレイ・デバイス1306は、ヘッド・アップ・ディスプレイ、コンピュータ・モニタ、プロジェクタ、タッチスクリーン・ディスプレイ、液晶ディスプレイ(LCD)、発光ダイオード・ディスプレイ、又は、フラット・パネル・ディスプレイのような任意の視覚的インジケータを含む可能性がある。
【0103】
[0117] 演算スパース性バランシング・システム1300は、オーディオ出力デバイス1308(又は、上述したような対応するインターフェース回路)を含む可能性がある。オーディオ出力デバイス1308は、例えば、スピーカ、ヘッドセット、又はイヤホンのような、可聴インジケータを生成する任意のデバイスを含む可能性がある。
【0104】
[0118] 演算スパース性バランシング・システム1300は、オーディオ入力デバイス1318(又は、上述したような対応するインターフェース回路)を含む可能性がある。オーディオ入力デバイス1318は、マイクロフォン、マイクロフォン・アレイ、又はデジタル機器(例えば、楽器デジタル・インターフェース(MIDI)出力を有する機器)のような、音を表す信号を生成する任意のデバイスを含む可能性がある。
【0105】
[0119] 演算スパース性バランシング・システム1300は、GPSデバイス1316(又は、上述したような、対応するインターフェース回路)を含む可能性がある。GPSデバイス1316は、衛星ベースのスパース性バランシング・システムと通信する可能性があり、当該技術分野において知られているように、演算スパース性バランシング・システム1300の位置を受信する可能性がある。
【0106】
[0120] 演算スパース性バランシング・システム1300は、他の出力デバイス1313(又は、上述したような対応するインターフェース回路)を含む可能性がある。他の情報の提供デバイス1313の例は、オーディオ・コーデック、ビデオ・コーデック、プリンタ、他のデバイスへ情報を提供するための有線又は無線送信機、或いは、追加の記憶デバイスを含む可能性がある。
【0107】
[0121] 演算スパース性バランシング・システム1300は、他の入力デバイス1320(又は、上述したような対応するインターフェース回路)を含む可能性がある。他の入力デバイス1320の例は、加速度計、ジャイロスコープ、コンパス、画像キャプチャ・デバイス、キーボード、マウスのようなカーソル制御デバイス、スタイラス、タッチパッド、バー・コード・リーダー、クイック・レスポンス(QR)コード・リーダー、何らかのセンサー、又は、無線周波数識別(RFID)リーダーを含む可能性がある。
【0108】
[0122] 演算スパース性バランシング・システム1300は、ハンドヘルド又はモバイル演算スパース性バランシング・システム(例えば、セルラー電話、スマートフォン、モバイル・インターネット・デバイス、音楽プレーヤ、タブレット・コンピュータ、ラップトップ・コンピュータ、ネットブック・コンピュータ、ウルトラブック・コンピュータ、PDA、ウルトラモバイル・パーソナル・コンピュータなど)、デスクトップ演算スパース性バランシング・システム、サーバー又は他のネットワーク化された演算構成要素、プリンタ、スキャナ、モニタ、セット・トップ・ボックス、エンターテインメント制御ユニット、車両制御ユニット、デジタル・カメラ、デジタル・ビデオ・レコーダ、あるいは、ウェアラブル演算スパース性バランシング・システムのような、任意の所望の形状因子を有する可能性がある。一部の実施形態では、演算スパース性バランシング・システム1300は、データを処理する任意の他の電子デバイスであってもよい。
【0109】
[0123] 選択的実施例
以下のパラグラフは、本件で開示される実施形態の様々な例を提供している。
【0110】
[0124] 例1は、ディープ・ニューラル・ネットワーク(DNN)におけるスパース性のバランスをとるための方法を提供し、方法は、
前記DNNにおけるレイヤ・シーケンス内のレイヤのウェイト行列の少なくとも一部分を表現するウェイト・ベクトルであって異なる値を有するウェイトの第1のシーケンスを含むウェイト・ベクトルを取得するステップ;
少なくとも前記ウェイト・ベクトルに基づいてビットマップを生成するステップであって、前記ビットマップはビットマップ要素の第2のシーケンスを含み、前記第2のシーケンス内の前記ビットマップ要素の各々は、前記第1のシーケンス内の異なるウェイトに対応しており、その対応するウェイトの値に少なくとも基づいてビットマップ要素の値は決定され、前記第2のシーケンス内のビットマップ要素のインデックスは、前記第1のシーケンス内の対応するウェイトのインデックスに一致している、ステップ;
前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置することによって、前記ビットマップから新たなビットマップを生成するステップ;及び
前記新たなビットマップに基づいて、前記DNNのレイヤにおける複数の処理要素に前記ウェイト・ベクトルを割り当てるステップであって、各々の処理要素は、前記ウェイト・ベクトルの異なるサブセットを使用して積和演算を実行するように構成されている、ステップ;を含む。
【0111】
[0125] 例2が提供する方法は、例1において、前記レイヤは、活性化の第3のシーケンスを含む活性化ベクトルに関連付けられており、前記方法は、更に:
前記新たなビットマップに基づいて、前記第3のシーケンス内の活性化を再配置するステップ;を含む。
【0112】
[0126] 例3が提供する方法は、例1において、少なくとも前記ウェイト・ベクトルに基づいてビットマップを生成するステップは:
前記ウェイト・ベクトルに基づいてウェイト・ビットマップを生成するステップであって、前記ウェイト・ビットマップはウェイト・ビットマップ要素のシーケンスを含む、ステップ;
前記レイヤに関連する活性化に基づいて活性化ビットマップを生成するステップであって、前記活性化ビットマップは活性化ビットマップ要素のシーケンスを含む、ステップ;及び
前記ウェイト・ビットマップと前記活性化ビットマップに基づいて前記ビットマップを生成するステップ;を含む。
【0113】
[0127] 例4が提供する方法は、例3において、前記ビットマップ内のそれぞれのビットマップ要素は、前記ウェイト・ビットマップ内の異なるウェイト・ビットマップ要素と、前記活性化ビットマップ内の異なる活性化ビットマップ要素とに対応しており、前記それぞれのビットマップ要素は、対応するウェイト・ビットマップ要素の値と対応する活性化ビットマップ要素の値との積に等しい値を有する。
【0114】
[0128] 例5が提供する方法は、例1において、前記DNNは前記シーケンス内の前記レイヤに先行する先行レイヤを更に含み、前記先行レイヤはウェイトの第3のシーケンスに関連付けられており、前記方法は、更に:
前記新たなビットマップに基づいて、前記第3のシーケンス内のウェイトを再配置するステップ;を含む。
【0115】
[0129] 例6が提供する方法は、例1において、前記ウェイトの第1のシーケンスは、ゼロ値にされていないウェイトとゼロ値にされたウェイトとを含み;
前記ゼロ値にされていないウェイトに対応するビットマップ要素は、1の値を有し;
前記ゼロ値にされたウェイトに対応するビットマップ要素は、0の値を有する。
【0116】
[0130] 例7が提供する方法は、例6において、前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置するステップは:
1の値にされたビットマップ要素のインデックスと0の値にされたビットマップ要素のインデックスとを切り替えるステップ;を含む。
【0117】
[0131] 例8が提供する方法は、例6において、前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置するステップは:
1の値にされたビットマップ要素の第1数を決定するステップ;
0の値にされたビットマップ要素の第2数であって前記第1数より大きい第2数を決定するステップ;
前記第1数と前記第2数に基づいてインターバル数を決定するステップ;及び
前記新たなビットマップ内の全てのインターバル数毎のビットマップ要素が、1の値を有する少なくとも1つのビットマップ要素を含むように、前記第2のシーケンス内のビットマップ要素を再配置するステップ;を含む。
【0118】
[0132] 例9が提供する方法は、例6において、前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置するステップは:
1の値にされたビットマップ要素の第1数を決定するステップ;
0の値にされたビットマップ要素の第2数であって前記第1数より小さい第2数を決定するステップ;
前記第1数と前記第2数に基づいてインターバル数を決定するステップ;及び
前記新たなビットマップ内の全てのインターバル数毎のビットマップ要素が、0の値を有する少なくとも1つのビットマップ要素を含むように、前記第2のシーケンス内のビットマップ要素を再配置するステップ;を含む。
【0119】
[0133] 例10が提供する方法は、例1において、前記新たなビットマップに基づいて、前記DNNのレイヤにおける複数の処理要素に前記ウェイト・ベクトルを割り当てるステップは:
前記新たなウェイト・ベクトル内の各ウェイトのインデックスが、前記新たなビットマップ内の対応するビットマップ要素のインデックスに一致するように、前記第1のシーケンス内の1つ以上のウェイトを配置し直すことによって、新たなウェイト・ベクトルを生成するステップ;を含む。
【0120】
[0134] 例11は、ディープ・ニューラル・ネットワーク(DNN)におけるスパース性のバランスをとる動作を実行するように実行可能な命令を記憶する1つ以上の非一時的なコンピュータ読み取り可能な記憶媒体を提供し、前記動作は:
前記DNNにおけるレイヤ・シーケンス内のレイヤのウェイト行列の少なくとも一部分を表現するウェイト・ベクトルであって異なる値を有するウェイトの第1のシーケンスを含むウェイト・ベクトルを取得するステップ;
少なくとも前記ウェイト・ベクトルに基づいてビットマップを生成するステップであって、前記ビットマップはビットマップ要素の第2のシーケンスを含み、前記第2のシーケンス内の前記ビットマップ要素の各々は、前記第1のシーケンス内の異なるウェイトに対応しており、その対応するウェイトの値に少なくとも基づいてビットマップ要素の値は決定され、前記第2のシーケンス内のビットマップ要素のインデックスは、前記第1のシーケンス内の対応するウェイトのインデックスに一致している、ステップ;
前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置することによって、前記ビットマップから新たなビットマップを生成するステップ;及び
前記新たなビットマップに基づいて、前記DNNのレイヤにおける複数の処理要素に前記ウェイト・ベクトルを割り当てるステップであって、各々の処理要素は、前記ウェイト・ベクトルの異なるサブセットを使用して積和演算を実行するように構成されている、ステップ;を含む。
【0121】
[0135] 例12が提供する1つ以上の非一時的なコンピュータ読み取り可能な媒体は、例11において、前記レイヤは、活性化の第3のシーケンスを含む活性化ベクトルに関連付けられており、前記動作は、更に:
前記新たなビットマップに基づいて、前記第3のシーケンス内の活性化を再配置するステップ;を含む。
【0122】
[0136] 例13が提供する1つ以上の非一時的なコンピュータ読み取り可能な媒体は、例11において、少なくとも前記ウェイト・ベクトルに基づいてビットマップを生成するステップは:
前記ウェイト・ベクトルに基づいてウェイト・ビットマップを生成するステップであって、前記ウェイト・ビットマップはウェイト・ビットマップ要素のシーケンスを含む、ステップ;
前記レイヤに関連する活性化に基づいて活性化ビットマップを生成するステップであって、前記活性化ビットマップは活性化ビットマップ要素のシーケンスを含む、ステップ;及び
前記ウェイト・ビットマップと前記活性化ビットマップに基づいて前記ビットマップを生成するステップ;を含む。
【0123】
[0137] 例14が提供する1つ以上の非一時的なコンピュータ読み取り可能な媒体は、例13において、前記ビットマップ内のそれぞれのビットマップ要素は、前記ウェイト・ビットマップ内の異なるウェイト・ビットマップ要素と、前記活性化ビットマップ内の異なる活性化ビットマップ要素とに対応しており、前記それぞれのビットマップ要素は、対応するウェイト・ビットマップ要素の値と対応する活性化ビットマップ要素の値との積に等しい値を有する。
【0124】
[0138] 例15が提供する1つ以上の非一時的なコンピュータ読み取り可能な媒体は、例11において、前記DNNは前記シーケンス内の前記レイヤに先行する先行レイヤを更に含み、前記先行レイヤはウェイトの第3のシーケンスに関連付けられており、前記動作は、更に:
前記新たなビットマップに基づいて、前記第3のシーケンス内のウェイトを再配置するステップ;を含む。
【0125】
[0139] 例16が提供する1つ以上の非一時的なコンピュータ読み取り可能な媒体は、例11において、前記ウェイトの第1のシーケンスは、ゼロ値にされていないウェイトとゼロ値にされたウェイトとを含み;
前記ゼロ値にされていないウェイトに対応するビットマップ要素は、1の値を有し;
前記ゼロ値にされたウェイトに対応するビットマップ要素は、0の値を有する。
【0126】
[0140] 例17が提供する1つ以上の非一時的なコンピュータ読み取り可能な媒体は、例16において、前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置するステップは:
1の値にされたビットマップ要素のインデックスと0の値にされたビットマップ要素のインデックスとを切り替えるステップ;を含む。
【0127】
[0141] 例18が提供する1つ以上の非一時的なコンピュータ読み取り可能な媒体は、例16において、前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置するステップは:
1の値にされたビットマップ要素の第1数を決定するステップ;
0の値にされたビットマップ要素の第2数であって前記第1数より大きい第2数を決定するステップ;
前記第1数と前記第2数に基づいてインターバル数を決定するステップ;及び
前記新たなビットマップ内の全てのインターバル数のビットマップ要素が、1の値を有する少なくとも1つのビットマップ要素を含むように、前記第2のシーケンス内のビットマップ要素を再配置するステップ;を含む。
【0128】
[0142] 例19が提供する1つ以上の非一時的なコンピュータ読み取り可能な媒体は、例16において、前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置するステップは:
1の値にされたビットマップ要素の第1数を決定するステップ;
0の値にされたビットマップ要素の第2数であって前記第1数より小さい第2数を決定するステップ;
前記第1数と前記第2数に基づいてインターバル数を決定するステップ;及び
前記新たなビットマップ内の全てのインターバル数のビットマップ要素が、0の値を有する少なくとも1つのビットマップ要素を含むように、前記第2のシーケンス内のビットマップ要素を再配置するステップ;を含む。
【0129】
[0143] 例20が提供する1つ以上の非一時的なコンピュータ読み取り可能な媒体は、例11において、前記新たなビットマップに基づいて、前記DNNのレイヤにおける複数の処理要素に前記ウェイト・ベクトルを割り当てるステップは:
前記新たなウェイト・ベクトル内の各ウェイトのインデックスが、前記新たなビットマップ内の対応するビットマップ要素のインデックスに一致するように、前記第1のシーケンス内の1つ以上のウェイトを配置し直すことによって、新たなウェイト・ベクトルを生成するステップ;を含む。
【0130】
[0144] 例21は、ディープ・ニューラル・ネットワーク(DNN)におけるスパース性のバランスをとるための装置を提供し、装置は、コンピュータ・プログラム命令を実行するコンピュータ・プロセッサ;及び 動作を実行するために前記コンピュータ・プロセッサにより実行可能なコンピュータ・プログラム命令を記憶した非一時的なコンピュータ読み取り可能なメモリ;
を含み、前記動作は:前記DNNにおけるレイヤ・シーケンス内のレイヤのウェイト行列の少なくとも一部分を表現するウェイト・ベクトルであって異なる値を有するウェイトの第1のシーケンスを含むウェイト・ベクトルを取得するステップ;
少なくとも前記ウェイト・ベクトルに基づいてビットマップを生成するステップであって、前記ビットマップはビットマップ要素の第2のシーケンスを含み、前記第2のシーケンス内の前記ビットマップ要素の各々は、前記第1のシーケンス内の異なるウェイトに対応しており、その対応するウェイトの値に少なくとも基づいてビットマップ要素の値は決定され、前記第2のシーケンス内のビットマップ要素のインデックスは、前記第1のシーケンス内の対応するウェイトのインデックスに一致している、ステップ;
前記ビットマップ要素の値に基づいて、前記第2のシーケンス内のビットマップ要素を再配置することによって、前記ビットマップから新たなビットマップを生成するステップ;及び
前記新たなビットマップに基づいて、前記DNNのレイヤにおける複数の処理要素に前記ウェイト・ベクトルを割り当てるステップであって、各々の処理要素は、前記ウェイト・ベクトルの異なるサブセットを使用して積和演算を実行するように構成されている、ステップ;を含む。
【0131】
[0145] 例22が提供する装置は、例21において、前記レイヤは、活性化の第3のシーケンスを含む活性化ベクトルに関連付けられており、前記動作は、更に:
前記新たなビットマップに基づいて、前記第3のシーケンス内の活性化を再配置するステップ;を含む。
【0132】
[0146] 例23が提供する装置は、例21において、少なくとも前記ウェイト・ベクトルに基づいてビットマップを生成するステップは:
前記ウェイト・ベクトルに基づいてウェイト・ビットマップを生成するステップであって、前記ウェイト・ビットマップはウェイト・ビットマップ要素のシーケンスを含む、ステップ;
前記レイヤに関連する活性化に基づいて活性化ビットマップを生成するステップであって、前記活性化ビットマップは活性化ビットマップ要素のシーケンスを含む、ステップ;及び
前記ウェイト・ビットマップと前記活性化ビットマップに基づいて前記ビットマップを生成するステップ;を含む。
【0133】
[0147] 例24が提供する装置は、例21において、前記DNNは前記シーケンス内の前記レイヤに先行する先行レイヤを更に含み、前記先行レイヤはウェイトの第3のシーケンスに関連付けられており、前記動作は、更に:
前記新たなビットマップに基づいて、前記第3のシーケンス内のウェイトを再配置するステップ;を含む。
【0134】
[0148] 例25が提供する装置は、例21において、前記新たなビットマップに基づいて、前記DNNのレイヤにおける複数の処理要素に前記ウェイト・ベクトルを割り当てるステップは:
前記新たなウェイト・ベクトル内の各ウェイトのインデックスが、前記新たなビットマップ内の対応するビットマップ要素のインデックスに一致するように、前記第1のシーケンス内の1つ以上のウェイトを配置し直すことによって、新たなウェイト・ベクトルを生成するステップ;を含む。
【0135】
[0149] 要約書に記載されているものを含む本開示の例示的な実装についての上記の説明は、網羅的であるように、又は本開示を開示された厳密な形態に限定するようには意図されていない。本開示の特定の実装及び本開示に関する例は、例示のために本件で説明されているが、当業者が認識するように、本開示の範囲内で様々な等価な修正が可能である。これらの修正は、上記の詳細な説明に照らして本開示に対して施される可能性がある。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
【国際調査報告】