(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】
(54)【発明の名称】プログラム可能な閾値を用いたニューラルネットワークの活性化及び重みのプルーニング
(51)【国際特許分類】
【FI】
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】
(86)(22)【出願日】
(85)【翻訳文提出日】
(86)【国際出願番号】
(87)【国際公開番号】
(87)【国際公開日】
(32)【優先日】
(33)【優先権主張国・地域又は機関】
(32)【優先日】
(33)【優先権主張国・地域又は機関】
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
【氏名又は名称原語表記】Intel Corporation
【住所又は居所原語表記】2200 Mission College Boulevard Santa Clara, California 95054 (US)
(74)【代理人】
【識別番号】110004381
【氏名又は名称】弁理士法人ITOH
(72)【発明者】
【氏名】ゴーシュ,ソウメンドゥ クマール
(72)【発明者】
【氏名】クンドゥ,シャミック
(72)【発明者】
【氏名】ラハ,アルナブ
(72)【発明者】
【氏名】マタイクッティ,ディーパック アブラハム
(57)【要約】
ディープニューラルネットワーク(DNN)の中間層の活性化(例えば、出力活性化)又は重みは、スパース性を増加させ、層又は後続の層において計算を実行するために必要な計算量を低減するためにプルーニングできる。プルーニング閾値は、例えば、反復プロセスを通じて決定されてもよく、プルーニング閾値よりも低い絶対値を有する活性化又は重みは、ゼロに変更されてもよい。第1のプルーニング閾値は、層の出力テンソル又はカーネルをプルーニングするために使用されてもよい。プルーニングによるDNNの精度の損失が決定されてもよい。第2のプルーニング閾値は、第1のプルーニング閾値及び精度損失に基づいて決定されてもよい。DNNは、層にプルーニング動作を追加することによって修正されてもよい。プルーニング動作は、第2のプルーニング閾値に基づいて、層の出力テンソル又はカーネルをプルーニングできる。
【特許請求の範囲】
【請求項】
ニューラルネットワークを修正するための方法であって、
データセットを前記ニューラルネットワークに入力するステップであり、前記ニューラルネットワークは複数の層を含む、ステップと、
前記ニューラルネットワークにおける前記複数の層から層を選択するステップであり、前記ニューラルネットワークにおける前記選択された層は前記データセットに基づいてテンソルを生成する、ステップと、
第1の活性化閾値に基づいて、前記テンソルにおける活性化の絶対値をゼロに修正することによって前記テンソルをプルーニングするステップであり、前記活性化の前記絶対値は、前記第1の活性化閾値よりも低い、ステップと、
前記ニューラルネットワークの出力に基づいて、前記ニューラルネットワークの精度を決定するステップであり、前記ニューラルネットワークは、前記プルーニングされたテンソルに基づいて前記出力を生成する、ステップと、
前記第1の活性化閾値及び前記ニューラルネットワークの前記精度に基づいて第2の活性化閾値を決定するステップであり、前記第2の活性化閾値は、前記第1の活性化閾値とは異なる値を有する、ステップと、
前記層に活性化プルーニング動作を追加することによって前記ニューラルネットワークを修正するステップであり、前記活性化プルーニング動作は、前記第2の活性化閾値に基づいて前記層によって生成されるべき1つ以上のテンソルをプルーニングする、ステップと
を含む方法。
【請求項】
前記第2の活性化閾値を決定するステップは、
前記ニューラルネットワークの前記精度に基づいて前記テンソルをプルーニングすることによって引き起こされる精度損失を決定するステップと、
前記精度損失が閾値を超えるか否かを決定するステップと、
前記精度損失が前記閾値よりも低いと決定したことに応じて、前記第1の活性化閾値を増加させることによって前記第2の活性化閾値を決定するステップと
を含む、請求項1に記載の方法。
【請求項】
前記第2の活性化閾値を決定するステップは、
前記精度損失が前記閾値を超えると決定したことに応じて、前記第1の活性化閾値を減少させることによって前記第2の活性化閾値を決定するステップを更に含む、請求項2に記載の方法。
【請求項】
第3の活性化閾値に基づいて前記第1の活性化閾値を決定するステップであり、前記第3の活性化閾値は、前記第1の活性化閾値及び前記第2の活性化閾値とは異なる、ステップを更に含む、請求項1乃至3のうちいずれか1項に記載の方法。
【請求項】
前記第1の活性化閾値を決定するステップは、
更なるデータセットを前記ニューラルネットワークに入力するステップであり、前記ニューラルネットワークにおける前記選択された層は、前記更なるデータセットに基づいて更なるテンソルを生成する、ステップと、
前記第3の活性化閾値に基づいて前記更なるテンソルをプルーニングするステップと、
前記プルーニングされた更なるテンソルに基づいて前記ニューラルネットワークによって生成された更なる出力に基づいて、前記ニューラルネットワークの更なる精度を決定するステップと、
前記第3の活性化閾値及び前記ニューラルネットワークの前記更なる精度に基づいて、前記第1の活性化閾値を決定するステップと
を含む、請求項4に記載の方法。
【請求項】
前記ニューラルネットワークにおける別の層を選択するステップと、
前記別の層に別の活性化プルーニング動作を追加することによって前記ニューラルネットワークを修正するステップであり、前記別の活性化プルーニング動作は、別の活性化閾値に基づいて前記別の層によって生成されるべき1つ以上のテンソルをプルーニングする、ステップと
を更に含む、請求項1に記載の方法。
【請求項】
前記層を選択するステップは、
前記層の内部パラメータの量、前記層における計算の量、前記層のタイプ又はこれらの何らかの組み合わせに基づいて層を選択するステップを含む、請求項1に記載の方法。
【請求項】
前記選択された層に重みプルーニング動作を追加することによって前記ニューラルネットワークを更に修正するステップであり、前記活性化プルーニング動作は、重み閾値に基づいて、カーネルにおける重みの絶対値をゼロに修正することによって、前記選択された層の前記カーネルをプルーニングし、前記重みの前記絶対値は、前記重み閾値よりも低い、ステップを更に含む、請求項1に記載の方法。
【請求項】
前記ニューラルネットワークは、前記重みの前記絶対値を決定するように訓練されている、請求項8に記載の方法。
【請求項】
前記第2の活性化閾値を決定するステップは、
前記層に前記重みプルーニング動作を追加した後に前記第2の活性化閾値を決定するステップを含む、請求項8又は9に記載の方法。
【請求項】
ニューラルネットワークを修正するための動作をコンピュータに実行させるコンピュータプログラムであって、
前記動作は、
データセットを前記ニューラルネットワークに入力することであり、前記ニューラルネットワークは複数の層を含むことと、
前記ニューラルネットワークにおける前記複数の層から層を選択することであり、前記ニューラルネットワークにおける前記選択された層は前記データセットに基づいてテンソルを生成することと、
第1の活性化閾値に基づいて、前記テンソルにおける活性化の絶対値をゼロに修正することによって前記テンソルをプルーニングすることであり、前記活性化の前記絶対値は、前記第1の活性化閾値よりも低いことと、
前記ニューラルネットワークの出力に基づいて、前記ニューラルネットワークの精度を決定することであり、前記ニューラルネットワークは、前記プルーニングされたテンソルに基づいて前記出力を生成することと、
前記第1の活性化閾値及び前記ニューラルネットワークの前記精度に基づいて第2の活性化閾値を決定することであり、前記第2の活性化閾値は、前記第1の活性化閾値とは異なる値を有することと、
前記層に活性化プルーニング動作を追加することによって前記ニューラルネットワークを修正することであり、前記活性化プルーニング動作は、前記第2の活性化閾値に基づいて前記層によって生成されるべき1つ以上のテンソルをプルーニングすることと
を含む、コンピュータプログラム。
【請求項】
前記第2の活性化閾値を決定することは、
前記ニューラルネットワークの前記精度に基づいて前記テンソルをプルーニングすることによって引き起こされる精度損失を決定することと、
前記精度損失が閾値を超えるか否かを決定することと、
前記精度損失が前記閾値よりも低いと決定したことに応じて、前記第1の活性化閾値を増加させることによって前記第2の活性化閾値を決定することと
を含む、請求項11に記載のコンピュータプログラム。
【請求項】
前記第2の活性化閾値を決定することは、
前記精度損失が前記閾値を超えると決定したことに応じて、前記第1の活性化閾値を減少させることによって前記第2の活性化閾値を決定することを更に含む、請求項12に記載の1つ以上のコンピュータプログラム。
【請求項】
前記動作は、
第3の活性化閾値に基づいて前記第1の活性化閾値を決定することであり、前記第3の活性化閾値は、前記第1の活性化閾値及び前記第2の活性化閾値とは異なることを更に含む、請求項11に記載のコンピュータプログラム。
【請求項】
前記第1の活性化閾値を決定することは、
更なるデータセットを前記ニューラルネットワークに入力することであり、前記ニューラルネットワークにおける前記選択された層は、前記更なるデータセットに基づいて更なるテンソルを生成することと、
前記第3の活性化閾値に基づいて前記更なるテンソルをプルーニングすることと、
前記プルーニングされた更なるテンソルに基づいて前記ニューラルネットワークによって生成された更なる出力に基づいて、前記ニューラルネットワークの更なる精度を決定することと、
前記第3の活性化閾値及び前記ニューラルネットワークの前記更なる精度に基づいて、前記第1の活性化閾値を決定することと
を含む、請求項14に記載のコンピュータプログラム。
【請求項】
前記動作は、
前記ニューラルネットワークにおける別の層を選択することと、
前記別の層に別の活性化プルーニング動作を追加することによって前記ニューラルネットワークを修正することであり、前記別の活性化プルーニング動作は、別の活性化閾値に基づいて前記別の層によって生成されるべき1つ以上のテンソルをプルーニングすることと
を更に含む、請求項11に記載のコンピュータプログラム。
【請求項】
前記層を選択することは、
前記層の内部パラメータの量、前記層における計算の量、前記層のタイプ又はこれらの何らかの組み合わせに基づいて前記層を選択することを含む、請求項11に記載のコンピュータプログラム。
【請求項】
前記動作は、
前記選択された層に重みプルーニング動作を追加することによって前記ニューラルネットワークを更に修正することであり、前記活性化プルーニング動作は、重み閾値に基づいて、カーネルにおける重みの絶対値をゼロに修正することによって、前記選択された層の前記カーネルをプルーニングし、前記重みの絶対値は、前記重み閾値よりも低いことを更に含む、請求項11に記載のコンピュータプログラム。
【請求項】
前記ニューラルネットワークは、前記重みの前記絶対値を決定するように訓練されている、請求項18に記載のコンピュータプログラム。
【請求項】
前記第2の活性化閾値を決定することは、
前記層に前記重みプルーニング動作を追加した後に前記第2の活性化閾値を決定することを含む、請求項18に記載のコンピュータプログラム。
【請求項】
コンピュータプログラム命令を実行するためのコンピュータプロセッサと、
ニューラルネットワークを修正するための動作を実行するように前記コンピュータプロセッサによって実行可能なコンピュータプログラム命令を記憶する非一時的なコンピュータ可読メモリと
を含む装置であって、
前記動作は、
データセットを前記ニューラルネットワークに入力することであり、前記ニューラルネットワークは複数の層を含むことと、
前記ニューラルネットワークにおける前記複数の層から層を選択することであり、前記ニューラルネットワークにおける前記選択された層は前記データセットに基づいてテンソルを生成することと、
第1の活性化閾値に基づいて、前記テンソルにおける活性化の絶対値をゼロに修正することによって前記テンソルをプルーニングすることであり、前記活性化の前記絶対値は、前記第1の活性化閾値よりも低いことと、
前記ニューラルネットワークの出力に基づいて、前記ニューラルネットワークの精度を決定することであり、前記ニューラルネットワークは、前記プルーニングされたテンソルに基づいて前記出力を生成することと、
前記第1の活性化閾値及び前記ニューラルネットワークの前記精度に基づいて第2の活性化閾値を決定することであり、前記第2の活性化閾値は、前記第1の活性化閾値とは異なる値を有することと、
前記層に活性化プルーニング動作を追加することによって前記ニューラルネットワークを修正することであり、前記活性化プルーニング動作は、前記第2の活性化閾値に基づいて前記層によって生成されるべき1つ以上のテンソルをプルーニングすることと
を含む、装置。
【請求項】
前記第2の活性化閾値を決定することは、
前記ニューラルネットワークの前記精度に基づいて前記テンソルをプルーニングすることによって引き起こされる精度損失を決定することと、
前記精度損失が閾値を超えるか否かを決定することと、
前記精度損失が前記閾値よりも低いと決定したことに応じて、前記第1の活性化閾値を増加させることによって前記第2の活性化閾値を決定することと、
前記精度損失が前記閾値を超えると決定したことに応じて、前記第1の活性化閾値を減少させることによって前記第2の活性化閾値を決定することと
を含む、請求項21に記載の装置。
【請求項】
前記動作は、
更なるデータセットを前記ニューラルネットワークに入力することであり、前記ニューラルネットワークにおける前記層は、前記更なるデータセットに基づいて更なるテンソルを生成することと、
第3の活性化閾値に基づいて前記更なるテンソルをプルーニングすることであり、前記第3の活性化閾値は、前記第1の活性化閾値及び前記第2の活性化閾値とは異なることと、
前記プルーニングされた更なるテンソルに基づいて前記ニューラルネットワークによって生成された更なる出力に基づいて、前記ニューラルネットワークの更なる精度を決定することと、
前記第3の活性化閾値及び前記ニューラルネットワークの前記更なる精度に基づいて、前記第1の活性化閾値を決定することと
によって、第3の活性化閾値に基づいて前記第1の活性化閾値を決定することを更に含む、請求項21又は22に記載の装置。
【請求項】
前記動作は、
前記層に重みプルーニング動作を追加することによって前記ニューラルネットワークを更に修正することであり、前記活性化プルーニング動作は、重み閾値に基づいて、カーネルにおける重みの絶対値をゼロに修正することによって、前記層の前記カーネルをプルーニングし、前記重みの前記絶対値は、前記重み閾値よりも低いことを更に含む、請求項21に記載の装置。
【請求項】
前記動作は、
前記ニューラルネットワークにおける別の層を選択することと、
前記別の層に別の活性化プルーニング動作を追加することによって前記ニューラルネットワークを修正することであり、前記別の活性化プルーニング動作は、別の活性化閾値に基づいて前記別の層によって生成されるべき1つ以上のテンソルをプルーニングすることと
を更に含む、請求項21に記載の装置。
【請求項】
請求項11乃至20のうちいずれか1項に記載のコンピュータプログラムを記憶した1つ以上の非一時的なコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【】
[関連出願の相互参照]
本出願は、2023年7月27日に出願された「PRUNING ACTIVATIONS AND WEIGHTS OF NEURAL NETWORKS WITH PROGRAMMABLE THRESHOLDS」という名称の米国仮特許出願第63/515,903号の優先権を主張する、2023年8月22日に出願された米国特許出願第18/453,715号の優先権を主張し、その全体が参照によって本明細書に組み込まれる。
【】
[技術分野]
概して、ディープニューラルネットワーク(deep neural network, DNN)に関し、より具体的には、プログラム可能な閾値を用いたDNNの活性化及び重みのプルーニング
【背景技術】
【】
DNNは、高い精度を達成する能力に起因して、コンピュータビジョンから音声認識及び自然言語処理に及ぶ様々な人工知能アプリケーションに広く使用されている。しかし、高い精度は、かなりの演算コストを犠牲にして得られる。DNNは、各推論が何億ものMAC(積和)演算並びに大量のデータの読み書きを要求する可能性があるので、極めて高い演算要件を有している。DNNはまた、活性化関数の計算を必要としている。したがって、DNNの効率を改善するための技術が必要とされている。
【図面の簡単な説明】
【】
添付の図面と共に以下の詳細な説明によって容易に理解される。この説明を促すために、同様な参照符号は同様な構造要素を示している。添付の図面の図において、限定としてではなく例示として示されている。
【図】様々な実施形態による例示的なDNNを示す。
【図】様々な実施形態による例示的な畳み込みを示す。
【図】様々な実施形態によるDNNシステムのブロック図である。
【図】様々な実施形態による、スパース性エンコーダによるプルーニング動作を示す。
【図】様々な実施形態による、処理要素(PE)によるMAC演算におけるスパース性アクセラレーションを示す。
【図】様々な実施形態によるDNNモジュールのブロック図である。
【図】様々な実施形態による圧縮モジュールのブロック図である。
【図】様々な実施形態による、活性化をプルーニングするための最適な閾値の選択を示す。
【図】様々な実施形態による、重みをプルーニングするための最適な閾値の選択を示す。
【図】様々な実施形態による、活性化及び重みをプルーニングするための最適な閾値の選択を示す。
【図】様々な実施形態による例示的なPEアレイを示す。
【図】様々な実施形態によるPEのブロック図である。
【図】様々な実施形態による、DNNを修正する方法を示すフローチャートである。
【図】様々な実施形態による、DNNを修正する別の方法を示すフローチャートである。
【図】様々な実施形態による例示的な計算デバイスのブロック図である。
【発明を実施するための形態】
【】
[概要]
この10年間で、人工知能(artificial intelligence, AI)ベースのデータ処理、特にDNNに基づくものの急速な増加が見られている。DNNは、主に人間のレベルを超える精度を達成する能力に起因して、コンピュータビジョン、音声認識、画像及びビデオ処理の領域で広く使用されている。実行プラットフォームの計算能力の急速な増加と結合してDNNモデルサイズ及び精度のかなりの改善は、限られたエネルギー可用性を有するリソース制約のあるモバイルデバイス及びエッジデバイス内でさえもDNNアプリケーションの採用をもたらしている。
【】
DNN層は、畳み込み、プーリング、要素毎の演算、線型演算、非線型演算等のような1つ以上のディープラーニング演算(「ニューラルネットワーク演算」とも呼ばれる)を含んでもよい。DNNにおけるディープラーニング演算は、訓練段階中に決定されるDNNの1つ以上の内部パラメータ(例えば、重み)、及び1つ以上の活性化に対して実行されてもよい。活性化は、データポイント(「データ要素」又は「要素」とも呼ばれる)でもよい。DNN層の活性化又は重みは、DNN層のテンソルの要素でもよい。テンソルは、1つ以上の次元にわたって複数の要素を有するデータ構造である。例示的なテンソルは、1次元テンソルであるベクトルと、2次元テンソルである行列とを含む。3次元テンソル及び更に高次元のテンソルさえも存在することができる。DNN層は、1つ以上の入力活性化(「入力要素」とも呼ばれる)を含む入力テンソル(「入力特徴マップ(input feature map, IFM)」とも呼ばれる)と、1つ以上の重みを含む重みテンソルとを有してもよい。重みは、重みテンソルにおける要素である。畳み込みの重みテンソルは、カーネル、フィルタ又はフィルタのグループでもよい。DNN層の出力データは、1つ以上の出力活性化(「出力要素」とも呼ばれる)を含む出力テンソル(「出力特徴マップ(output feature map, OFM)」とも呼ばれる)でもよい。
【】
DNNは、活性化及び重みのデータ要素の多くがゼロの値を有する可能性があるので、活性化及び重みの形式でスパース性を示す。これらのゼロは、MAC演算中の部分和の累算に寄与しない。これらは、正規化線形活性化関数(linear activation function, ReLU)のような非線形活性化関数を通過した後の後続の層の活性化においてスパース性をもたらす可能性がある。DNNアクセラレータにおけるスパース性を活用することは、効率的でスケーラブルなAIシステムを達成するために重要になる可能性がある。スパース性を利用することによって、DNNアクセラレータは、所与のタスクに必要な計算及びメモリアクセスの量を低減でき、より高速でよりエネルギー効率の高い推論をもたらす。スパース性はまた、より高価なハードウェアを必要とすることなく、より高い精度を有するより大きいモデルの展開を可能にできる。
【】
プルーニング(pruning)は、DNNにスパース性を導入するための現在利用可能な技術の1つである。正則化技術は、重みをプルーニングするために使用される。例えば、L1正則化(ラッソ正則化としても知られる)は、重みの絶対値の和にペナルティを課し、これは、これらのうちいくつかがゼロになることを促し、スパースモデルを生じる。別の重みプルーニング手法は、ネットワークの性能にとってあまり重要でない接続又はニューロンのいくつかを除去することによって、DNNのサイズを低減する。一例は、小さい絶対値を有する接続が除去される大きさベースのプルーニング(magnitude-based pruning)である。また、確率的活性化プルーニング、非線形次元削減を介して有限体ベクトルに変換すること、活性化スパース性をブーストするためにL1正則化及びHoyer正則化を組み込むことを含む、活性化をプルーニングするための様々な手法が探索されている。また、スパース性を更に増幅するために、閾値化技術が導入されている。
【】
しかし、現在利用可能なスパース性注入技術は、欠点を抱えている。例えば、これらの技術は、特に、元の訓練データセットを使用してハイパーパラメータの最適な設定で適切に再訓練されない場合、精度の低下を引き起こす可能性がある。これは、ネットワークにおけるニューロンの間の接続が除去され、その結果、情報の喪失及び性能の低下を生じる可能性があるためである。スパース性注入はまた、どの接続を除去し、どの接続を保持するかを識別するために更なる計算が必要とされるので、ネットワークの複雑さを増加させる可能性がある。これは、より長い訓練時間及びより複雑なコードを生じる可能性がある。さらに、これらのスパース性注入技術は、実装するのが困難になる可能性がある。トランスフォーマのような新生のニューラルネットワークは、これらの固有のネットワークアーキテクチャと、ガウス誤差線形ユニット(Gaussian Error Linear Unit, GELU)、SoftMax、Swish、Sigmoidのような非ReLUベースの活性化との理由で、これらの手法に制約を課す可能性がある。
【】
本開示のプログラム可能な閾値に基づいて活性化及び重みをプルーニングするための方法及びシステムを提供する。例示的なDNNは、例えば、DNNが訓練された後に、DNNにおける1つ以上の層にプルーニング動作を追加することによって、修正されてもよい。層は中間層でもよい。層は、層における内部パラメータ(例えば、重み)の数、層における演算(例えば、MAC演算)の数、層のタイプ等のように、層の計算上の複雑さに関係する1つ以上の属性に基づいて選択されてもよい。プルーニング動作は、層が既に有するいずれかのスパース性の上に、スパース性を層に導入できる。追加のスパース性は、これらの層の計算上の複雑さを低減できる。
【】
本開示の様々な実施形態では、プルーニング動作は、活性化プルーニング動作又は重みプルーニング動作でもよい。活性化プルーニング動作は、層によって生成された活性化のような活性化をプルーニングしてもよい。重みプルーニング動作は、層の重みをプルーニングしてもよい。プルーニング動作では、閾値よりも低い絶対値を有する1つ以上の活性化又は重みは、ゼロに修正されてもよい一方で、閾値以上の絶対値を有する活性化又は重みは、変更されなくてもよい。閾値はプログラム可能でもよい。閾値は、推論実行時の前に、例えば、コンパイル段階で決定されてもよい。プログラム可能な閾値は、特定の層又は特定のタイプの層に固有のものとすることができる。
【】
いくつかの実施形態では、層は、1つよりも多くの活性化閾値又は1つよりも多くの重み閾値を有してもよい。例えば、層は、正の値を有するプルーニング活性化のための活性化閾値と、負の値を有するプルーニング活性化のための異なる活性化閾値とを有してもよい。負の活性化のための活性化閾値は、正の値又は負の値を有してもよい。活性化プルーニング動作は、活性化閾値の絶対値を、活性化閾値が適用可能である活性化の絶対値と比較してもよい。同様に、層は、正の値を有する重みをプルーニングするための重み閾値と、負の値を有する重みをプルーニングするための異なる重み閾値とを有してもよい。重みプルーニング動作は、重み閾値の絶対値を、重み閾値が適用可能である重みの絶対値と比較してもよい。
【】
プルーニング動作のための最適な閾値は、複数の探索ラウンドを含む反復プロセスを通して探索されてもよい。各ラウンドにおいて、データセットがDNNに入力されてもよく、DNNの1つ以上の層に追加されるプルーニング動作に異なる閾値が使用されてもよい。プルーニング動作によって引き起こされるDNNの精度の損失が測定され、精度損失制約と比較されてもよい。精度損失が精度損失制約よりも低いとき、探索が継続してもよく、次のラウンドにおいてより高い閾値が使用されてもよい。精度損失が精度損失制約よりも低くないとき、前のラウンドにおいて使用された閾値が最適な閾値として選択されてもよい。DNNは、最適な閾値を使用したプルーニング動作で修正されてもよい。修正されたDNNは、AIタスクを実行するために展開されてもよい。
【】
プルーニング動作は、コンパイル段階で実行されてもよく、或いは、面積及び電力の観点で限られたオーバーヘッドを有するか或いは更なるオーバーヘッドを有さないDNNアクセラレータ内の既存のスパース性ハードウェアを使用して実行されてもよい。プルーニング動作は、これらのデータがDNNアクセラレータのメモリに記憶される前に、スパース性を入力される活性化又は重みに導入でき、したがって、メモリ使用量及び計算量を低減し、DNNアクセラレータの効率を改善できる。
【】
高コストの再訓練プロセスなしに、様々なネットワーク層におけるスパース性を強化できる手法を提供する。これは、ReLUを含む非線形活性化と、畳み込みニューラルネットワーク及びトランスフォーマにおけるSigmoid、GELU及びSoftMaxを含む広く使用されている活性化関数とを対象にすることができる。この手法は、トランスフォーマにおける正規化層(例えば、LayerNorm)の後のスパース性を最適化でき、多層パーセプトロン(multilayer perceptron, MLP)及びマルチヘッドアテンション層(multi-headed attention layer)における効率を改善する。プログラム可能な閾値は精度損失制約に基づいて決定されるので、DNN精度に対する影響が最小化できる一方で、エネルギー節約が最大化される。
【】
説明の目的で、例示的な実装形式の完全な理解を提供するために、具体的な数、材料及び構成が記載されている。しかし、本開示が具体的な詳細なしに実施されてもよいこと、又は/及び本開示が記載の態様のうちいくつかのみを用いて実施されてもよいことは、当業者にとって明らかである。他の例では、例示的な実施態様を不明瞭にしないために、周知の特徴は省略又は簡略化される。
【】
さらに、本件の一部を形成する添付の図面に参照が行われ、図面には、実施され得る実施形態が例示として示されている。本開示の範囲から逸脱することなく、他の実施形態が利用されてもよく、構造的又は論理的な変更が行われてもよいことが理解されるべきである。したがって、以下の詳細な説明は、限定的な意味で解釈されるべきではない。
【】
様々な動作は、特許請求される対象物を理解する際に最も役立つ方式で、複数の個別の動作又は演算として順番に記載されることがある。しかし、記載の順序は、これらの動作が必ずしも順序に依存することを意味しているものとして解釈されるべきではない。特に、これらの動作は、提示の順序で実行されなくてもよい。記載の動作は、記載の実施形態とは異なる順序で実行されてもよい。更なる実施形態では、様々な更なる動作が実行されてもよく、或いは、記載の動作が省略されてもよい。
【】
本開示の目的で、「A又はB」という語句又は「A及び/又はB」という語句は、(A)、(B)、又は(A及びB)を意味する。本開示の目的で、「A、B又はC」という語句又は「A、B及び/又はC」という語句は、(A)、(B)、(C)、(A及びB)、(A及びC)、(B及びC)又は(A、B、及びC)を意味する。「の間」は、尺度の範囲に関して使用されるとき、その尺度の範囲の両端を含む。
【】
本説明は、「実施形態では」又は「実施形態において」という語句を使用しており、これらはそれぞれ、同じ実施形態又は異なる実施形態のうちの1つ以上を示してもよい。本開示の実施形態に関して使用される「備える」、「含む」、「有する」等の用語は同義語である。図面の様々な特徴を説明するために、「上」、「下」、「上部」、「底部」及び「側部」のような斜視図に基づく説明を使用することがあるが、これらの用語は、単に説明を容易にするためのものであり、所望の向き又は必要な向きを示唆するものではない。添付の図面は、必ずしも縮尺通りに描かれてはいない。別段の指定がない限り、共通のオブジェクトを記述するための「第1」、「第2」及び「第3」等の序数形容詞の使用は、同様のオブジェクトの異なるインスタンスが参照されていることを単に示しており、このように記載されるオブジェクトが、時間的に、空間的に、ランク付けで、或いは、いずれかの他の方式で、所与の順序でなければならないことを示唆することを意図するものではない。
【】
以下の詳細な説明において、例示的な実装形式の様々な態様は、当業者が他の当業者に自身の研究の内容を伝えるために一般的に使用される用語を使用して記載される。
【】
「実質的に」、「近い(close)」、「およそ」、「近い(near)」及び「約」という用語は、一般的に、本明細書に記載されるか或いは当該技術分野において知られるような目標値の+/-20%内にあることを示す。同様に、様々な要素の向きを示す用語、例えば、「同一平面」、「垂直」、「直交」、「平行」又は要素の間のいずれかの他の角度は、一般的に、本明細書に記載されるか或いは当該技術分野において知られるような目標値の+/-5~20%内にあることを示す。
【】
さらに、「備える」、「備えている」、「含む」、「含んでいる」、「有する」、「有している」という用語、又はこれらのいずれかの他の変形は、非排他的な包含をカバーすることを意図するものである。例えば、要素のリストを含む方法、プロセス、デバイス又はDNNアクセラレータは、必ずしもこれらの要素のみに限定されず、明示的に列挙されていないか或いはこのような方法、プロセス、デバイス又はDNNアクセラレータに固有の他の要素を含んでもよい。また、「又は」という用語は、包含的な「又は」を示し、排他的な「又は」を示さない。
【】
本開示のシステム、方法及びデバイスはそれぞれ、いくつかの新規な態様を有し、これらのうちの単一の態様が本明細書に開示される全ての所望の属性を単独で担っているとは限らない。本明細書に記載される対象物の1つ以上の実装形式の詳細は、以下の説明及び添付の図面に記載されている。
【】
[例示的なDNN]
図1は、様々な実施形態による例示的なDNN100を示す。例示の目的で、図1におけるDNN100はCNNである。他の実施形態では、DNN100は他のタイプのDNNでもよい。DNN100は、画像を受信し、画像内のオブジェクトの分類を出力するように訓練される。図1の実施形態では、DNN100は、オブジェクト115、125及び135を含む入力画像105を受信する。DNN100は、複数の畳み込み層110(個々に「畳み込み層110」と呼ばれる)、複数のプーリング層120(個々に「プーリング層120」と呼ばれる)及び複数の全結合層130(個々に「全結合層130」と呼ばれる)を含む一連の層を含む。他の実施形態では、DNN100は、より少ない層、より多い層又は異なる層を含んでもよい。DNN100の推論において、DNN100の層は、多数のテンソル演算、例えば、畳み込み(例えば、積和(MAC)演算等)、プーリング演算、要素毎の演算(例えば、要素毎の加算、要素毎の乗算等)、他のタイプのテンソル演算又はこれらの何らかの組み合わせを含むテンソル演算を実行する。
【】
畳み込み層110は、入力画像105内の特徴の存在を要約する。畳み込み層110は、特徴抽出器として機能する。DNN100の第1の層は畳み込み層110である。一例では、畳み込み層110は、入力テンソル140(IFM140とも呼ばれる)及びフィルタ150に対して畳み込みを実行する。図1に示すように、IFM140は、7×7×3の3次元(3D)行列によって表される。IFM140は、3つの入力チャネルを含み、入力チャネルのそれぞれは、7×7の2次元(2D)行列によって表される。7×7の2D行列は、各行に7つの入力要素(入力ポイントとも呼ばれる)を含み、各列に7つの入力要素を含む。フィルタ150は、3×3×3の3D行列によって表される。フィルタ150は、3つのカーネルを含み、カーネルのそれぞれは、IFM140の異なる入力チャネルに対応してもよい。カーネルは、重みの2D行列であり、重みは列及び行に配置される。カーネルは、IFMよりも小さくすることができる。図1の実施形態では、各カーネルは、3×3の2D行列によって表される。3×3のカーネルは、各行に3つの重みを含み、各列に3つの重みを含む。重みは、勾配降下法を使用する逆伝播によって初期化及び更新できる。重みの大きさは、IFM140から特徴を抽出する際のフィルタ150の重要度を示すことができる。
【】
畳み込みは、IFM140内の入力要素とフィルタ150内の重みとを用いたMAC演算を含む。畳み込みは、標準畳み込み163又は深さ方向(depthwise)畳み込み183でもよい。標準畳み込み163では、全体のフィルタ150がIFM140にわたってスライドする。全ての入力チャネルは、出力テンソル160(出力特徴マップ(output feature map, OFM)160とも呼ばれる)を生成するために結合される。OFM160は、5×5の2D行列によって表される。5×5の2D行列は、各行に5つの出力要素(出力ポイントとも呼ばれる)を含み、各列に5つの出力要素を含む。例示の目的で、標準畳み込みは、図1の実施形態では1つのフィルタを含む。複数のフィルタが存在する実施形態では、標準畳み込みは、OFM160において複数の出力チャネルを生成してもよい。
【】
IFM140のカーネルサイズのパッチとカーネルとの間で適用される乗算は、ドット積でもよい。ドット積は、IFM140のカーネルサイズのパッチと対応するカーネルとの間の要素毎の乗算であり、これは、次いで合計され、常に単一の値を生じる。これは単一の値を生じるので、その演算はしばしば「スカラー積」と呼ばれる。同じカーネル(重みのセット)が、IFM140上の異なるポイントで複数回IFM140によって乗算されることを可能にするので、IFM140よりも小さいカーネルを使用するのは意図的なことである。具体的には、カーネルは、IFM140のそれぞれの重なる部分又はカーネルサイズのパッチに、左から右へ、上から下に系統的に適用される。カーネルにIFM141を1回乗算することによる結果は、単一の値となる。カーネルがIFM140に複数回適用されると、乗算結果は、出力要素の2D行列となる。したがって、標準畳み込み163からの2D出力行列(すなわち、OFM160)は、OFMと呼ばれる。
【】
深さ方向畳み込み183では、入力チャネルは結合されない。むしろ、MAC演算は、個々の入力チャネル及び個々のカーネルに対して実行され、出力チャネルを生成する。図1に示すように、深さ方向畳み込み183は、深さ方向出力テンソル180を生成する。深さ方向出力テンソル180は、5×5×3の3D行列によって表される。深さ方向出力テンソル180は、3つの出力チャネルを含み、出力チャネルのそれぞれは、5×5の2D行列によって表される。5×5の2D行列は、各行に5つの出力要素を含み、各列に5つの出力要素を含む。各出力チャネルは、IFM140の入力チャネルとフィルタ150のカーネルとのMAC演算の結果である。例えば、第1の出力チャネル(ドットでパターン化される)は、第1の入力チャネル(ドットでパターン化される)と第1のカーネル(ドットでパターン化される)とのMAC演算の結果であり、第2の出力チャネル(水平ストライプでパターン化される)は、第2の入力チャネル(水平ストライプでパターン化される)と第2のカーネル(水平ストライプでパターン化される)とのMAC演算の結果であり、第3の出力チャネル(斜めストライプでパターン化される)は、第3の入力チャネル(斜めストライプでパターン化される)と第3のカーネル(斜めストライプでパターン化される)とのMAC演算の結果である。このような深さ方向畳み込みでは、入力チャネルの数は出力チャネルの数に等しく、各出力チャネルは異なる入力チャネルに対応する。入力チャネル及び出力チャネルは、深さ方向チャネルと総称される。深さ方向畳み込みの後に、ポイントワイズ(pointwise)畳み込み193が、深さ方向出力テンソル180及び1×1×3のテンソル190に対して実行され、OFM160を生成する。
【】
次いで、OFM160は、シーケンスにおける次の層に渡される。いくつかの実施形態では、OFM160は、活性化関数を通じて渡される。例示的な活性化関数はReLUである。ReLUは、入力として提供された値を直接的に返すか、或いは、入力がゼロ以下である場合にはゼロの値を返す計算である。畳み込み層110は、いくつかの画像を入力として受け取り、これらのそれぞれのカーネルのそれぞれとの畳み込みを計算してもよい。このプロセスは、複数回繰り返されることができ。例えば、OFM160は、後続の畳み込み層110(すなわち、シーケンスにおいてOFM160を生成する畳み込み層110に続く畳み込み層110)に渡される。後続の畳み込み層110は、新たなカーネルを用いてOFM160に対して畳み込みを実行し、新たな特徴マップを生成する。新たな特徴マップはまた、正規化され、サイズ変更されてもよい。新たな特徴マップは、更なる後続の畳み込み層110によって再びカーネル化でき、以下同様である。
【】
いくつかの実施形態では、畳み込み層110は、4つのハイパーパラメータ、すなわち、カーネルの数、サイズFのカーネル(例えば、カーネルは、F×F×D個のピクセルの次元である)、カーネルに対応するウィンドウが画像上でドラッグされるSステップ(例えば、1というステップは、ウィンドウを一度に1ピクセルだけ移動させることを意味する)及びゼロパディングP(例えば、畳み込み層110の入力画像にPピクセルの厚さの黒輪郭を追加すること)を有する。畳み込み層110は、2次元畳み込み、膨張(dilated又はatrous)畳み込み、空間分離可能畳み込み、深さ方向分離可能畳み込み、転置畳み込み等のような様々なタイプの畳み込みを実行してもよい。DNN100は、16個の畳み込み層110を含む。他の実施形態では、DNN100は、異なる数の畳み込み層を含んでもよい。
【】
プーリング層120は、畳み込み層によって生成された特徴マップを、例えば、特徴マップのパッチにおける特徴の存在を要約することによって、ダウンサンプリングする。プーリング層120は、2つの畳み込み層110、すなわち、先行する畳み込み層110(層のシーケンスにおいてプーリング層120に先行する畳み込み層110)と後続の畳み込み層110(層のシーケンスにおいてプーリング層120に後続する畳み込み層110)との間に配置される。いくつかの実施形態では、プーリング層120は、畳み込み層110の後に、例えば、活性化関数(例えば、ReLU等)がOFM160に適用された後に追加される。
【】
プーリング層120は、先行する畳み込み層110によって生成された特徴マップを受け取り、特徴マップにプーリング演算を適用する。プーリング演算は、特徴マップのサイズを低減する一方で、これらの重要な特性を保存する。したがって、プーリング演算は、DNNの効率を改善し、過学習を回避する。プーリング層120は、平均プーリング(特徴マップ上の各パッチの平均値を計算するもの)、最大プーリング(特徴マップの各パッチの最大値を計算するもの)又は双方の組み合わせを通じて、プーリング演算を実行してもよい。プーリング演算のサイズは、特徴マップのサイズよりも小さい。様々な実施形態において、プーリング演算は、2ピクセルのストライドで適用される2×2ピクセルであり、その結果、プーリング演算は、特徴マップのサイズを2分の1だけ低減し、例えば、特徴マップ内のピクセル又は値の数は、4分の1のサイズに低減される。一例では、6×6の特徴マップに適用されるプーリング層120は、3×3の出力のプーリングされた特徴マップを生じる。プーリング層120の出力は、更なる特徴抽出のために後続の畳み込み層110に入力される。いくつかの実施形態では、プーリング層120は、各特徴マップに対して別々に動作して、同じ数のプーリングされた特徴マップの新たなセットを作成する。
【】
全結合層130は、DNNの最後層である。全結合層130は、畳み込みでもよく或いはそうでなくてもよい。全結合層130は、入力オペランドを受け取る。入力オペランドは、畳み込み層110及びプーリング層120の出力を定義し、シーケンスにおける最後のプーリング層120によって生成された最後の特徴マップの値を含む。全結合層130は、入力オペランドに線型結合及び活性化関数を適用し、ベクトルを生成する。ベクトルは、存在するクラスと同数の要素を含んでもよく、要素iは、画像がクラスiに属する確率を表す。したがって、各要素は0と1の間にあり、全ての和は1に値する。これらの確率は、活性化関数としてロジスティック関数(二値分類)又はSoftMax関数(多クラス分類)を使用することによって、最後の全結合層130で算出される。
【】
いくつかの実施形態では、全結合層130は、入力画像105を分類し、サイズNのオペランドを返し、Nは、画像分類問題におけるクラスの数である。図1の実施形態では、入力画像内に3つのオブジェクト115、125及び135が存在するので、Nは3に等しい。オペランドの各要素は、入力画像105が或るクラスに属する確率を示す。確率を計算するために、全結合層130は、各入力要素を重みで乗算し、和をとり、次いで、活性化関数(例えば、N=2の場合はロジスティック、N>2の場合はSoftMax)を適用する。これは、入力オペランドを、重みを含む行列で乗算することと等価である。一例では、ベクトルは、3つの確率、すなわち、オブジェクト115が木であることを示す第1の確率、オブジェクト125が自動車であることを示す第2の確率、及びオブジェクト135が人であることを示す第3の確率を含む。入力画像105が異なるオブジェクト又は異なる数のオブジェクトを含む他の実施形態では、個々の値は異なるものとすることができる。
【】
[例示的な畳み込み]
図2は、様々な実施形態による例示的な畳み込みを示す。畳み込みは、DNNの畳み込み層、例えば、図1における畳み込み層110におけるディープラーニング演算でもよい。畳み込みは、入力テンソル210及びフィルタ220(個々に「フィルタ220」と呼ばれる)に対して実行できる。畳み込みの結果は、出力テンソル230である。いくつかの実施形態では、畳み込みは、DNNアクセラレータによって実行される。DNNアクセラレータの例は、図3のDNNアクセラレータ300でもよい。DNNアクセラレータの例は、図3におけるDNNアクセラレータ302でもよい。
【】
図2の実施形態では、入力テンソル210は、3D行列に配置された活性化(「入力活性化」、「要素」又は「入力要素」とも呼ばれる)を含む。入力要素は、入力テンソル210におけるデータポイントである。入力テンソル210は、空間サイズHin×Win×Cinを有し、Hinは、3D行列の高さ(すなわち、Y軸に沿った長さであり、これは各入力チャネルの3D行列の列における活性化の数を示す)であり、Winは、3D行列の幅(すなわち、X軸に沿った長さであり、これは各入力チャネルの3D行列の行における活性化の数を示す)であり、Cinは、3D行列の深さ(すなわち、Z軸に沿った長さであり、これは入力チャネルの数を示す)である。簡略化及び例示の目的で、入力テンソル210は、7×7×3の空間サイズを有し、すなわち、入力テンソル210は、3つの入力チャネルを含み、各入力チャネルが7×7の2D行列を有する。入力テンソル210の各入力要素は、(X,Y,Z)座標によって表されてもよい。他の実施形態では、入力テンソル210の高さ、幅、又は深さは異なってもよい。
【】
各フィルタ220は、3D行列に配置された重みを含む。重みの値は、DNNを訓練することを通じて決定されてもよい。フィルタ220は、空間サイズHf×Wf×Cfを有し、Hfは、フィルタの高さ(すなわち、Y軸に沿った長さであり、これは各カーネルの列における重みの数を示す)であり、Wfは、フィルタの幅(すなわち、X軸に沿った長さであり、これは各カーネルの行における重みの数を示す)であり、Cfは、フィルタの深さ(すなわち、Z軸に沿った長さであり、これはチャネルの数を示す)である。いくつかの実施形態では、CfはCinに等しい。簡略化及び例示の目的で、図2における各フィルタ220は、2×3×3の空間サイズを有し、すなわち、フィルタ220は、2×3の空間サイズを有する2つの畳み込みカーネルを含む。他の実施形態では、フィルタ220の高さ、幅又は深さは、異なってもよい。畳み込みカーネルの空間サイズは、入力テンソル210における各入力チャネルの2D行列の空間サイズよりも小さい。
【】
活性化又は重みは、メモリ内で1つ以上のバイトをとり得る。活性化又は重みのためのバイト数は、データフォーマットに依存してもよい。例えば、活性化又は重みがINT8フォーマットを有するとき、活性化は1バイトをとる。活性化又は重みがFP16フォーマットを有するとき、活性化又は重みは2バイトをとる。他のデータフォーマットが、活性化又は重みのために使用されてもよい。
【】
畳み込みにおいて、各フィルタ220は、入力テンソル210にわたってスライドし、出力テンソル230における出力チャネルのための2D行列を生成する。図2の実施形態では、2D行列は、5×5の空間サイズを有する。出力テンソル230は、3D行列に配置された活性化(「出力活性化」、「要素」又は「出力要素」とも呼ばれる)を含む。出力活性化は、出力テンソル230におけるデータポイントである。出力テンソル230は、空間サイズHout×Wout×Coutであり、Houtは、3D行列の高さ(すなわち、Y軸に沿った長さであり、これは各出力チャネルの2D行列の列における出力活性化の数を示す)であり、Woutは、3D行列の幅(すなわち、X軸に沿った長さであり、これは各出力チャネルの2D行列の行における出力活性化の数を示す)であり、Coutは、3D行列の深さ(すなわち、Z軸に沿った長さであり、これは出力チャネルの数を示す)である。Coutは畳み込みにおけるフィルタ220の数に等しくてもよい。Hout及びWoutは、入力テンソル210と各フィルタ220の高さ及び重みに依存してもよい。
【】
畳み込みの一部として、入力テンソル210及び各フィルタ220における2×3×3のサブテンソル215(図2においてドットパターンで強調される)に対して、MAC演算が実行できる。サブテンソル215及び1つのフィルタ220に対するMAC演算の結果は、出力活性化である。いくつかの実施形態(例えば、畳み込みがインテグラル畳み込みである実施形態)では、出力活性化は、8ビット、例えば、1バイトを含んでもよい。他の実施形態(例えば、畳み込みが浮動小数点畳み込みである実施形態)では、出力活性化は、1よりも多くのバイトを含んでもよい。例えば、出力要素は2バイトを含んでもよい。
【】
サブテンソル215及び全てのフィルタ220に対するMAC演算が終了した後に、ベクトル235が生成される。ベクトル235は、図2において斜線で強調されている。ベクトル235は、Z軸に沿って配列される出力活性化のシーケンスを含む。ベクトル235における出力活性化は、同じ(X,Y)座標を有するが、出力活性化は、異なる出力チャネルに対応し、異なるZ座標を有する。Z軸に沿ったベクトル235の次元は、出力テンソル230における出力チャネルの総数に等しくてもよい。ベクトル235が生成された後に、出力テンソル230が生成されるまで更なるベクトルを生成するために、更なるMAC演算が実行される。
【】
いくつかの実施形態では、2×3×3のサブテンソル(例えば、サブテンソル215)及びフィルタ220に対するMAC演算は、複数のPEによって実行されてもよい。1つ以上のPEは、入力オペランド(例えば、図2に示す入力オペランド217)及び重みオペランド(例えば、図2に示す重みオペランド227)を受け取ってもよい。入力オペランド217は、同じ(x,y)座標を有するが異なるz座標を有する活性化のシーケンスを含む。入力オペランド217は、入力テンソル210における入力チャネルのそれぞれからの活性化を含む。重みオペランド227は、同じ(x,y)座標を有するが異なるz座標を有する重みのシーケンスを含む。重みオペランド227は、フィルタ220におけるチャネルのそれぞれからの重みを含む。入力オペランド217内の活性化及び重みオペランド227内の重みは、PEに順次供給されてもよい。PEは、活性化及び重み(「活性化・重みペア」)を一度に受け取り、活性化及び重みを乗算してもよい。入力オペランド217における活性化の位置は、重みオペランド227における重みの位置に一致してもよい。活性化及び重みは同じチャネルに対応してもよい。
【】
活性化又は重みは、浮動小数点数でもよい。浮動小数点数は、FP32、FP16、BF16等のような様々なデータフォーマットを有してもよい。浮動小数点数は、小数点を有する正又は負の数でもよい。浮動小数点数は、浮動小数点数の符号(例えば、正又は負)を表す1つ以上のビット、浮動小数点数の指数を表すビット、及び浮動小数点数の仮数を表すビットを含むビットのシーケンスによって表されてもよい。仮数は、浮動小数点数の有効数字を表す浮動小数点数の一部である。仮数は、指数に対して累乗された基数によって乗算されて、浮動小数点数の実際の値を与える。
【】
いくつかの実施形態では、出力テンソル230における出力活性化は、DNNの次の層に記憶又は入力される前に、1つ以上の活性化関数に基づいて更に処理されてもよい。1つ以上の活性化関数に基づく処理は、畳み込みの後処理の少なくとも一部でもよい。いくつかの実施形態では、後処理は、オフセット計算、バイアス計算等のような1つ以上の他の計算を含んでもよい。後処理の結果は、計算ブロックのローカルメモリに記憶され、次のDNN層への入力として使用されてもよい。いくつかの実施形態では、入力テンソル210における入力活性化は、前のDNN層の後処理の結果でもよい。
【】
[例示的なDNNシステム]
図3は、様々な実施形態による、DNNシステム300のブロック図である。全体のDNNシステム300又はDNNシステム300の一部は、図15における計算デバイス1500のような1つ以上の計算デバイスにおいて実装されてもよい。DNNシステム300は、図1におけるDNN100のようなDNNを生成し、実行できる。図3に示すように、DNNシステム300は、DNNモジュール301及びDNNアクセラレータ302を含む。他の実施形態では、代替構成、異なる構成要素又は更なる構成要素がDNNシステム300に含まれてもよい。例えば、DNNシステム300は、複数のDNNモジュール又は複数のDNNアクセラレータを含んでもよい。さらに、DNNシステム300の構成要素に起因する機能は、DNNシステム300に含まれる異なる構成要素又は異なるシステムによって達成されてもよい。いくつかの実施形態では、DNNモジュール301及びDNNアクセラレータ302は、異なるタイプの処理ユニットを含んでもよい。DNNモジュール301及びDNNアクセラレータ302は、同じチップ又は別個のチップに実装されてもよい。
【】
DNNモジュール301は、DNNの生成及び展開を容易にする。いくつかの実施形態では、DNNモジュール301は、DNNを生成及び訓練してもよい。例えば、DNNモジュール301は、DNNの階層化アーキテクチャを定義できる。DNNモジュール301はまた、DNN訓練プロセスを通じてDNNの内部パラメータを決定できる。DNNモジュール301はまた、DNNがどのように訓練されるかを定義する1つ以上のハイパーパラメータを決定してもよい。例示的なハイパーパラメータは、DNNの1つ以上のディープラーニングテンソルのスパース性レベルを定義するスパース性比である。
【】
DNNモジュール301はまた、例えば、DNNが訓練された後に、DNNを圧縮してもよい。DNNモジュール301は、DNNの1つ以上の層にプルーニング動作を追加することによって、DNNのサイズを低減してもよい。DNNモジュール301は、層の計算上の複雑さに基づいて1つ以上の層を選択してもよい。プルーニング動作は、例えば、非ゼロ値の活性化又は重みをゼロに修正することによって、層によって生成された活性化をプルーニングしてもよく、或いは、層における重みをプルーニングしてもよい。ゼロは、DNN推論がより少ないメモリ使用量、電力及び時間を消費するように、メモリ記憶及び計算からスキップされてもよい。いくつかの実施形態では、DNNモジュール301は、プルーニング動作のための閾値を決定してもよい。プルーニング動作中に、データ要素(例えば、活性化又は重み)の絶対値は、閾値と比較されてもよく、閾値よりも低い絶対値を有するデータ要素は、ゼロに変更されてもよい一方で、閾値以上の絶対値をもつデータ要素は、同じままでもよい。プルーニング動作は、推論実行時中に、例えば、DNNアクセラレータ302によって実行されてもよい。代替として、プルーニング動作(例えば、重みプルーニング動作)は、推論実行時の前に実行されてもよい。例えば、重みプルーニング動作は、DNNが訓練された後のコンパイル段階中に実行されてもよい。
【】
DNNモジュール301は、ディープラーニングアプリケーションにおいて使用するために、訓練、圧縮又は検証されたDNNを展開してもよい。いくつかの実施形態では、DNNモジュール301は、訓練、圧縮又は検証されたDNNを、DNNが訓練されたタスク(例えば、画像分類、動き計画等)を実行するためにDNNを使用し得るデバイス又はシステムに分配してもよい。他の実施形態では、DNNモジュール301は、DNNアクセラレータ302を使用してDNNの展開を容易にしてもよい。例えば、DNNモジュール301は、DNNシステム300と結合されたデバイス又はシステムからデータを受信し、受信したデータ(又は、例えば、受信したデータに基づいて、DNNモジュール301によって生成されたデータ)をDNNに入力してもよい。DNNモジュール301は、DNN推論中にDNNアクセラレータ302の動作を制御する命令(例えば、構成ファイル)を生成してもよい。DNNモジュール301は、DNNアクセラレータ302からDNNの出力を受信してもよい。DNNモジュール301は、DNNの出力(又はDNNモジュール301によるDNNの出力の処理の結果)をデバイス又はシステムに伝送してもよい。DNNモジュール301の特定の態様は、図6に関連して以下に提供される。
【】
DNNアクセラレータ302は、DNNモジュール301によって提供されたDNNを実行する。例えば、DNNアクセラレータ302は、例えば、DNNを訓練するために或いは訓練/圧縮/検証されたDNNを使用してタスクを実行するために、DNNにおいてディープラーニング演算を実行することによって、DNN推論を実行できる。図3に示すように、DNNアクセラレータ302は、メモリ310、DMA(ダイレクトメモリアクセス)エンジン320及び計算ブロック330(個々に「計算ブロック330」と呼ばれる)を含む。他の実施形態では、代替構成、異なる構成要素又は更なる構成要素がDNNアクセラレータ302に含まれてもよい。例えば、DNNアクセラレータ302は、1つよりも多くのメモリ310又はDMAエンジン320を含んでもよい。別の例として、DNNアクセラレータ302は、単一の計算ブロック330を含んでもよい。さらに、DNNアクセラレータ302の構成要素に起因する機能は、DNNアクセラレータ302に含まれる異なる構成要素によって或いは異なるシステムによって達成されてもよい。DNNアクセラレータ302の構成要素は、ハードウェア、ソフトウェア、ファームウェア又はこれらの何らかの組み合わせで実装されてもよい。
【】
メモリ310は、DNNアクセラレータによって実行されるディープラーニング演算に関連するデータを記憶する。いくつかの実施形態では、メモリ310は、DNN推論のために計算ブロック330によって使用されるべきデータを記憶してもよい。例えば、メモリ310は、DNNを訓練することによって決定された畳み込み層の重みのような重みを記憶してもよい。メモリ310はまた、プルーニング重みのための重み閾値を記憶してもよい。別の例として、メモリ310は、DNNの中間層によって生成された活性化をプルーニングするための活性化閾値のような活性化閾値を記憶してもよい。メモリ310はまた、DNNにおいてディープラーニング演算を実行することから計算ブロック330によって生成されたデータを記憶してもよい。例示的なディープラーニング演算は、畳み込み(「畳み込み演算」とも呼ばれる)、プーリング演算、要素毎の演算、活性化関数、他のタイプのディープラーニング演算又はこれらの何らかの組み合わせを含む。メモリ310は、DNNアクセラレータ302のメインメモリでもよい。いくつかの実施形態では、メモリ310は、1つ以上のDRAM(ダイナミックランダムアクセスメモリ)を含む。
【】
DMAエンジン320は、メモリ310と計算ブロック330のローカルメモリとの間のデータ転送を容易にする。例えば、DMAエンジン320は、メモリ310からデータを読み取り、計算ブロック330のローカルメモリにデータを書き込むことができる。別の例として、DMAエンジン320は、計算ブロック330のローカルメモリからデータを読み取り、メモリ310にデータを書き込むことができる。DMAエンジン320は、計算ブロック330がメモリ310と計算ブロック330のローカルメモリとの間のデータ転送を開始し、データ転送が行われている間に他の動作を実行することを可能にするDMA機能を提供する。いくつかの実施形態では、DMAエンジン320は、メモリ310からテンソルを読み取り、計算ブロック330のローカルメモリにテンソルを書き込む前に、計算ブロック330にとって最適化された方法でテンソルを修正してもよい。
【】
計算ブロック330は、DNNにおいてディープラーニング演算を実行できる。例えば、計算ブロック330は、一度に、DNN層におけるディープラーニング演算又はディープラーニング演算の一部を実行してもよい。計算ブロック330は、畳み込み、プーリング、要素毎の演算、線形演算、非線形演算等のような様々なタイプのディープラーニング演算を実行することが可能でもよい。一例では、計算ブロック330は、畳み込み、例えば、標準畳み込み又は深さ方向畳み込みを実行してもよい。いくつかの実施形態では、計算ブロック330は、入力テンソル及び1つ以上の畳み込みカーネルを受信し、入力テンソル及び畳み込みカーネルを用いて畳み込みを実行する。畳み込みの結果は、出力テンソルでもよく、これは、例えば、計算ブロック330又は別の計算ブロック330によって更に計算できる。いくつかの実施形態では、DNN層の演算は、複数の計算ブロック330によって並列に実行されてもよい。例えば、複数の計算ブロック330は、畳み込みのためのワークロードの一部をそれぞれ実行してもよい。データは、計算ブロック330の間で共有されてもよい。計算ブロック330はまた、計算タイルと呼ばれてもよい。いくつかの実施形態では、各計算ブロック330は処理ユニットでもよい。
【】
図3の実施形態では、各計算ブロック330は、ローカルメモリ340、PEアレイ350、スパース性アクセラレータ360、後処理ユニット370及びスパース性エンコーダ380を含む。計算ブロック330の一部又は全部の構成要素は、同じチップ上に実装できる。他の実施形態では、代替構成、異なる構成要素又は更なる構成要素が計算ブロック330に含まれてもよい。さらに、計算ブロック330の構成要素に起因する機能は、計算ブロック330に含まれる異なる構成要素、異なる計算ブロック330、DNNアクセラレータ302の別の構成要素又は異なるシステムによって達成されてもよい。計算ブロック330の構成要素は、ハードウェア、ソフトウェア、ファームウェア又はこれらの何らかの組み合わせで実装されてもよい。
【】
ローカルメモリ340は、対応する計算ブロック330に対してローカルである。図3の実施形態では、ローカルメモリ340は、計算ブロック330の内部にある。他の実施形態では、ローカルメモリ340は、計算ブロック330の外部にあってもよい。ローカルメモリ340は、PEアレイ350及び後処理ユニット370によって受信、使用又は生成されるデータを記憶してもよい。データの例は、入力活性化、重み、出力活性化、スパース性ビットマップ等を含んでもよい。ローカルメモリ340はまた、活性化又は重みをプルーニングするための活性化閾値又は重み閾値を含んでもよい。ローカルメモリ340内のデータは、例えば、DMAエンジン320を通じて、メモリ310に且つメモリ210から転送されてもよい。いくつかの実施形態では、ローカルメモリ340内のデータは、別の計算ブロック330のローカルメモリに或いはローカルメモリから転送されてもよい。
【】
いくつかの実施形態では、ローカルメモリ340は、1つ以上のスタティックランダムアクセスメモリ(SRAM)を含む。ローカルメモリ340はバイトアドレス指定可能でもよく、各メモリアドレスは、ストレージの単一のバイト(8ビット)を識別する。いくつかの実施形態では、ローカルメモリ340はメモリバンクを含んでもよい。ローカルメモリ340内のデータバンクの数は、16、64、128、356、512、1024、3048又は他の数でもよい。メモリバンクは、複数の記憶ユニットを含んでもよい。一例では、データバンクは、8、16、64又は異なる数の記憶ユニットを含んでもよい。メモリバンク又はメモリバンク内の記憶ユニットは、メモリアドレスを有してもよい。一例では、記憶ユニットは、単一のバイトを記憶してもよく、単一のバイトよりも大きいデータは、連続するメモリアドレスを有する記憶ユニット、すなわち、隣接する記憶ユニットに記憶されてもよい。例えば、1つの記憶ユニットは、INT8フォーマットで整数を記憶できるのに対して、16ビットを有するFP16又はBF16フォーマットの数を記憶するためには、2つの記憶ユニットが必要とされてもよい。いくつかの実施形態では、16ビットが、単一の読み取りサイクルでローカルメモリ340から転送できる。他の実施形態では、16ビットは、2サイクルのような複数の読み取りサイクルでローカルメモリ340から転送できる。
【】
PEアレイ350は、列、又は列及び行に配置されたPEを含んでもよい。各PEは、MAC演算を実行できる。いくつかの実施形態では、PEは、乗算を実行するための1つ以上の乗算器を含む。PEはまた、累算を実行するための1つ以上の累算器(「加算器」)を含んでもよい。PEの列は、PE列と呼ばれる。PE列は、1つ以上のMACレーンに関連付けられてもよい。MACレーンは、データをMAC列にロードするための経路である。MACレーンはまた、データ伝送レーン又はデータローディングレーンと呼ばれてもよい。PE列は、複数のMACレーンを有してもよい。MAC列のローディング帯域幅は、MAC列に関連付けられた全てのMACレーンのローディング帯域幅の集約である。特定の数のMACレーンを用いて、データは、同じ数の独立したPEに同時に供給できる。MAC列が、活性化又は重みをMAC列に供給するための4つのMACレーンを有し、各MACレーンが16バイトの帯域幅を有し得るいくつかの実施形態では、4つのMACレーンは、64バイトの総ローディング帯域幅を有することができる。
【】
いくつかの実施形態では、PEアレイ350は、深さ方向畳み込み、標準畳み込み又はこれらの双方が可能でもよい。深さ方向畳み込みでは、PEは、入力オペランド及び重みオペランドのための乗算のシーケンスを含むMAC演算を実行してもよい。シーケンス(サイクルとも呼ばれる)における各乗算は、入力オペランド内の異なる活性化と重みオペランド内の異なる重みとの乗算である。同じサイクルにおける活性化及び重みは、同じチャネルに対応してもよい。乗算のシーケンスは、積のシーケンスを含む積オペランドを生成する。MAC演算はまた、複数の積オペランドが累算されてPEの出力オペランドを生成する累算を含んでもよい。PEアレイ350は、一度に複数の出力オペランドを出力してもよく、出力オペランドのそれぞれは、異なるPEによって生成される。標準畳み込みでは、MAC演算は、チャネルにわたる累算を含んでもよい。例えば、出力オペランドを生成するのとは対照的に、PEは、異なるチャネルにわたって積を累算して、単一の出力ポイントを生成してもよい。
【】
いくつかの実施形態では、PEアレイ350は、量子化畳み込みにおけるMAC演算のような、量子化推論におけるMAC演算を実行してもよい。いくつかの実施形態では、PEアレイ350内のPEは、量子化された活性化及び量子化された重みを受信し、量子化されたMAC結果を計算してもよい。量子化されたMAC結果は、整数フォーマットの量子化された値でもよく、PEの出力でもよい。いくつかの実施形態では、PEはまた、量子化スケールを量子化されたMAC結果で乗算できる量子化乗算器を含んでもよく、PEの出力は、浮動小数点フォーマットの実数値でもよい。PEは、量子化推論におけるMAC演算にゼロ点オフセットが必要とされないので、量子化減算器を含まなくてもよい。
【】
スパース性アクセラレータ360は、活性化又は重みにおけるスパース性に基づいて、PEアレイ350における計算を加速させる。いくつかの実施形態(例えば、計算ブロック330が畳み込み層を実行する実施形態)では、PEにおける計算は、入力オペランド及び重みオペランドに対するMAC演算でもよい。入力オペランドは、畳み込みの入力テンソルにおける1つ以上の活性化を含んでもよい。異なる活性化は、異なる入力チャネルにあってもよい。重みオペランドは、畳み込みのフィルタにおける1つ以上の重みを含んでもよい。重みの値は、DNNを訓練することを通じて決定される。重みオペランド内の重みは、異なる入力チャネル内にあってもよい。
【】
いくつかの実施形態では、入力オペランドは、ローカルメモリ340に記憶され得る活性化ビットマップに関連付けられる。活性化ビットマップは、スパース性エンコーダ380によって生成されてもよい。活性化ビットマップは、入力オペランド内の非ゼロ値の活性化の位置を示すことができる。活性化ビットマップは、複数のビットを含んでもよく、ビットのそれぞれは、入力オペランド内のそれぞれの活性化に対応する。活性化ビットマップ内のビットの位置は、入力オペランド内の対応する活性化の位置と一致してもよい。活性化ビットマップ内のビットは、0又は1でもよい。0値のビットは、対応する活性化の値がゼロであることを示し、1値のビットは、対応する活性化の値が非ゼロであることを示す。いくつかの実施形態では、活性化ビットマップは、別のDNN層、例えば、DNNにおける畳み込み層の前に配置された層の実行中に生成されてもよい。
【】
いくつかの実施形態では、重みオペランドは、ローカルメモリ340に記憶され得る重みビットマップに関連付けられる。重みビットマップは、スパース性エンコーダ380によって生成されてもよい。重みビットマップは、重みオペランド内の非ゼロ値の重みの位置を示すことができる。重みビットマップは、複数のビットを含んでもよく、ビットのそれぞれは、重みオペランド内のそれぞれの重みに対応する。重みビットマップ内のビットの位置は、重みオペランド内の対応する重みの位置と一致してもよい。重みビットマップ内のビットは、0又は1でもよい。0値のビットは、対応する重みの値がゼロであることを示し、1値のビットは、対応する重みの値が非ゼロであることを示す。
【】
いくつかの実施形態では、スパース性アクセラレータ360は、活性化ビットマップ及び重みビットマップを受信し、PEによって実行されるべきMAC演算のための結合スパース性ビットマップを生成してもよい。いくつかの実施形態では、スパース性アクセラレータ360は、活性化ビットマップ及び重みビットマップに対して1つ以上のAND演算を実行することによって、結合スパース性ビットマップ735を生成する。結合スパース性ビットマップ内の各ビットは、活性化ビットマップ内のビット及び重みビットマップ内のビットに対するAND演算の結果、すなわち、活性化ビットマップ内のビットと重みビットマップ内のビットとの積である。結合スパース性ビットマップ内のビットの位置は、活性化ビットマップ内のビットの位置及び重みビットマップ内のビットの位置と一致する。結合ビットマップ内のビットは、活性化及び重みのペア(活性化・重みペア)に対応する。結合スパース性ビットマップ内のゼロビットは、ペアにおける活性化及び重みのうちの少なくとも1つがゼロであることを示す。結合スパース性ビットマップ内の1ビットは、ペアにおける活性化及び重みの双方が非ゼロであることを示す。結合スパース性ビットマップは、ローカルメモリ340に記憶されてもよい。
【】
スパース性アクセラレータ360は、結合スパース性ビットマップに基づいて、活性化及び重みをPEに提供してもよい。例えば、スパース性アクセラレータ360は、結合スパース性ビットマップに基づいて、ローカルメモリ340から1つ以上の非ゼロ値の活性化・重みペアを識別してもよい。ローカルメモリ340は、非ゼロ値の活性化及び非ゼロ値の重みが記憶されるが、ゼロ値の活性化及びゼロ値の重みが記憶されないように、入力オペランド及び重みオペランドを圧縮フォーマットで記憶してもよい。入力オペランドの非ゼロ値の活性化は、圧縮された入力オペランドを構成してもよい。重みオペランドの非ゼロ値の重みは、圧縮された重みオペランドを構成してもよい。非ゼロ値の活性化・重みペアについて、スパース性アクセラレータ360は、活性化ビットマップ、重みビットマップ及び結合ビットマップに基づいて、圧縮された入力オペランド内の活性化の位置を決定し、圧縮された重みオペランド内の重みの位置を決定してもよい。活性化及び重みは、スパース性アクセラレータ360によって決定された位置に基づいて、ローカルメモリ340から読み取られることができる。
【】
いくつかの実施形態では、スパース性アクセラレータ360は、活性化ビットマップ及び重みビットマップに基づいて位置ビットマップを計算できるスパース性アクセラレーションロジックを含む。スパース性アクセラレータ360は、位置ビットマップに基づいて、活性化及び重みの位置インデックスを決定してもよい。一例では、圧縮された入力オペランド内の活性化の位置インデックスは、スパース性アクセラレータ360によって生成された活性化位置ビットマップ内の1の数に等しくてもよく、圧縮された重みオペランド内の重みの位置インデックスは、スパース性アクセラレータ360によって生成された重み位置ビットマップ内の1の数に等しくてもよい。活性化又は重みの位置インデックスは、圧縮された入力オペランド又は圧縮された重みオペランド内の活性化又は重みの位置を示す。スパース性アクセラレータ360は、これらの位置インデックスに基づいて、1つ以上のメモリから活性化及び重みを読み取ってもよい。
【】
スパース性アクセラレータ360は、識別された非ゼロ値の活性化・重みペアをPEに転送できる。スパース性アクセラレータ360は、他の活性化及び他の重みをスキップしてもよく、この理由は、これらがMAC演算の結果に寄与しないためである。いくつかの実施形態では、ローカルメモリ340は、非ゼロ値の活性化及び重みを記憶し、ゼロ値の活性化又は重みを記憶しなくてもよい。非ゼロ値の活性化及び重みは、PEの1つ以上のレジスタファイルにロードされてもよく、そこから、スパース性アクセラレータ360は、結合スパース性ビットマップ内のものに対応する活性化及び重みを取り出してもよい。いくつかの実施形態では、結合スパース性ビットマップ内の1の総数は、PEによって計算される活性化・重みペアの総数に等しく、一方で、PEは、他の活性化・重みペアを計算しない。結合スパース性ビットマップ内のゼロビットに対応する活性化・重みペアをスキップすることによって、PEの計算は、PEが入力オペランド及び重みオペランド内の全ての活性化・重みペアを計算することと比較して、より高速になる。
【】
スパース性アクセラレータ360は、ハードウェア、ソフトウェア、ファームウェア又はこれらの何らかの組み合わせで実装されてもよい。いくつかの実施形態では、スパース性アクセラレータ360の少なくとも一部は、PEの内部にあってもよい。図3は単一のスパース性アクセラレータ360を示しているが、計算ブロック330は、複数のスパース性アクセラレータ360を含んでもよい。いくつかの実施形態では、PEアレイ350内の各PEは、計算を加速させ、個々のPEにおける電力消費を低減するためのスパース性アクセラレータ360を用いて実装される。他の実施形態では、PEアレイ350のサブセット(例えば、PEアレイ350内の1つのPE列又は複数のPE列)は、PEのサブセットにおける計算を加速させるためにスパース性アクセラレータ360を用いて実装されてもよい。スパース性アクセラレーションに関する更なる詳細は、図5に関連して以下に提供される。
【】
後処理ユニット370は、PEアレイ350の出力を処理する。いくつかの実施形態では、後処理ユニット370は、活性化関数を計算する。後処理ユニット370は、PEアレイ350の出力を活性化関数への入力として受信してもよい。後処理ユニット370は、活性化関数の出力をローカルメモリ340に伝送してもよい。活性化関数の出力は、更なる計算のために、ローカルメモリ340からPEアレイ350によって後で取り出されてもよい。例えば、後処理ユニット370は、PEアレイ350からDNN層の出力テンソルを受信し、出力テンソルに対する1つ以上の活性化関数を計算してもよい。後処理ユニット370による計算の結果は、ローカルメモリ340に記憶され、後に次のDNN層の入力テンソルとして使用されてもよい。活性化関数に加えて或いはその代わりに、後処理ユニット370は、PEアレイ350の出力に対して他のタイプの後処理を実行してもよい。例えば、後処理ユニット370は、PEアレイ350の出力にバイアスを適用してもよい。
【】
スパース性エンコーダ380は、密データにおけるスパース性に基づいて、密データを圧縮データに変換する。スパース性エンコーダ380は、活性化プルーニング動作又は重みプルーニング動作のようなプルーニング動作を実行してもよい。スパース性エンコーダ380はまた、プルーニング動作に基づいて、活性化ビットマップ及び重みビットマップを含むスパース性ビットマップを生成してもよい。
【】
いくつかの実施形態では、スパース性エンコーダ380は、層の出力テンソル(例えば、図2における出力テンソル230)を受信してもよい。スパース性エンコーダ380は、出力テンソルの圧縮バージョンを生成してもよい。いくつかの実施形態では、スパース性エンコーダ380は、活性化閾値に基づいて出力テンソルを圧縮してもよい。スパース性エンコーダ380は、各活性化を活性化閾値と比較してもよい。スパース性エンコーダ380は、活性化の絶対値が活性化閾値よりも低いときにはゼロを出力してもよいが、活性化の絶対値が活性化閾値以上であるときには活性化の値を出力してもよい。スパース性エンコーダ380の非ゼロ値の出力(すなわち、活性化閾値以上の絶対値を有する活性化)は、メモリ、例えば、ローカルメモリ340に記憶され、次の層における演算において使用されてもよい。他の活性化は記憶されなくてもよい。スパース性エンコーダ380はまた、出力テンソルの1つ以上のスパース性ビットマップを生成してもよい。スパース性ビットマップは、出力テンソルにおけるベクトル(例えば、図2におけるベクトル235)に対応してもよい。スパース性マップは、ビットを含んでもよく、ビットのそれぞれは、ベクトル内の異なる活性化に対応し、対応する活性化がゼロにされているか否かを示す。
【】
いくつかの実施形態では、スパース性エンコーダ380は、重みテンソルを圧縮してもよい。例えば、スパース性エンコーダ380は、重み閾値に基づいて層のカーネルをプルーニングしてもよい。スパース性エンコーダ380は、各重みを重み閾値と比較してもよい。スパース性エンコーダ380は、重みの絶対値が重み閾値よりも低いときにはゼロを出力するが、重みの絶対値が重み閾値以上であるときには重みの値を出力してもよい。スパース性エンコーダ380の非ゼロ値の出力(すなわち、重み閾値以上の絶対値を有する重み)は、メモリ、例えば、ローカルメモリ340に記憶され、次の層における演算において使用されてもよい。他の重みは記憶されなくてもよい。スパース性エンコーダ380はまた、重みテンソルの1つ以上のスパース性ビットマップを生成してもよい。スパース性ビットマップは、重みテンソルにおける重みオペランド(例えば、図2における重みオペランド227)に対応してもよい。スパース性マップは、ビットを含んでもよく、ビットのそれぞれは、ベクトル内の異なる重みに対応し、対応する重みがゼロにされているか否かを示す。
【】
いくつかの実施形態では、ローカルメモリ340は、ロードパスに関連付けられ、ドレインパスは、計算ブロック330内のデータ転送に使用されてもよい。例えば、データは、ロードパスを通じてローカルメモリ340からPEアレイ350に転送されてもよい。データは、ドレインパスを通じてPEアレイ350からローカルメモリ340に転送されてもよい。スパース性エンコーダ380は、データがローカルメモリ340に書き込まれる前にデータを圧縮するために、ドレインパス上に配置されてもよい。
【】
図4は、様々な実施形態による、スパース性エンコーダ400によるプルーニング動作を示す。スパース性エンコーダ400は、図3におけるスパース性エンコーダ380の実施形態でもよい。図4に示すように、スパース性エンコーダ400は、比較器410(個々に「比較器410」と呼ばれる)、閾値レジスタ420及び圧縮パック器430を含む。他の実施形態では、スパース性エンコーダ400は、異なる構成要素、より少ない構成要素又はより多い構成要素を含んでもよい。さらに、スパース性エンコーダ400の構成要素に起因する機能は、スパース性エンコーダ400の異なる構成要素によって達成されてもよい。
【】
例示の目的で、図4に示すプルーニング動作は、16個のデータ要素P0~P15を含むベクトルに対するものである。ベクトルの例は、DNNの層において計算されてもよく、層におけるディープラーニング演算の結果でもよい。ベクトルの別の例は、DNN層の重みテンソルの一部でもよい。各比較器410は、データ要素を受信し、データ要素の絶対値を閾値レジスタ420に記憶された閾値と比較する。閾値は、DNNモジュール301によって予め決定されてもよい。いくつかの実施形態では、閾値はゼロでもよい。他の実施形態では、閾値は、正の数でもよい。比較器410は、16個のデータ要素O0~O15と16個のビットB0~B14とを出力する。比較器410によって受信されたデータ要素の絶対値が閾値よりも低いとき、比較器410は、ゼロの0値のデータ要素及び0値のビットを出力してもよい。比較器410によって受信されたデータ要素の絶対値が閾値よりも低くないとき、比較器410は、受信したデータ要素を出力し、1値のビットを出力してもよい。
【】
圧縮パック器430は、比較器410からデータ要素O0~O15及びビットB0~B14を受信する。圧縮パック器430は、比較器410の非ゼロ値の出力を含む新たなベクトルを生成する。新たなベクトルは、スパース性エンコーダ400によって受信されたベクトルの圧縮バージョンである。例示の目的で、図4における新たなベクトルは、5つのデータ要素、すなわち、P1、P5、P8、P12及びP14を含む。16個のデータ要素の全てを記憶及び計算する代わりに、新たなベクトル内の5つのデータ要素が記憶及び計算され、したがって、メモリ使用量及び電力使用量が低減できる。
【】
圧縮パック器430はまた、16ビットB0~B14を含むスパース性ビットマップを生成する。スパース性ビットマップ内の各ビットは、16個のデータ要素P0~P15のうちの異なる1つに対応する。例えば、B0はP0に対応し、B1はP1に対応し、B2はP2に対応し、以下同様である。各ビットは、対応するデータ要素が計算のためにPEに提供されるべきか、計算からスキップされるべきかを示してもよい。図4の実施形態では、0値のビットは、対応するデータ要素が計算のためにどのPEにも提供されないことを示し、1値のビットは、対応するデータ要素が計算のために1つ以上のPEに提供されることを示す。例えば、ビットB0は、データ要素P0が計算からスキップされることを示し、それに対して、ビットB1は、データ要素P1が計算のために1つ以上のPEに提供されることを示す。新たなベクトル及びスパース性ビットマップは、メモリ、例えば、ローカルメモリ340に記憶されてもよい。
【】
図5は、様々な実施形態による、PE500によるMAC演算におけるスパース性アクセラレーションを示す。PE500は、PEアレイ440内のPEでもよい。図5の実施形態では、PE500は、入力レジスタファイル510、重みレジスタファイル520、乗算器530、累算器540及び出力レジスタファイル550を含む。他の実施形態では、PE500は、より少ない構成要素、より多い構成要素又は異なる構成要素を含んでもよい。PE500は、スパース性アクセラレータ560に関連付けられる。スパース性アクセラレータ560は、図3におけるスパース性アクセラレータ360の実施形態でもよい。
【】
入力レジスタファイル510は、活性化オペランドの少なくとも一部を記憶する。活性化オペランドは、活性化としても知られる入力要素のシーケンスを含む。活性化オペランドは、入力テンソル、例えば、畳み込み層の入力テンソルの一部でもよい。活性化オペランドは、活性化ビットマップ515に関連付けられる。活性化ビットマップ515は、入力レジスタファイル510、PE500を含む計算ブロックのローカルメモリ、又はこれらの双方に記憶されてもよい。活性化ビットマップ515は、活性化オペランド内の非ゼロ値の活性化の位置を示すことができる。活性化ビットマップ515は、ビットのシーケンスを含み、ビットのそれぞれは、活性化オペランド内のそれぞれの活性化に対応する。いくつかの実施形態では、活性化ビットマップ515内のビットの位置は、活性化オペランド内の対応する活性化の位置と一致する。例示の目的で、活性化ビットマップ515は8ビットを含み、活性化オペランドは8つの活性化を含む。他の実施形態では、活性化ビットマップ515は、より少ないビット又はより多いビットを含んでもよい。図5に示すように、活性化ビットマップ515内の8ビットのうちの4ビットは0値であり、他の4ビットは1値である。0値のビットは、対応する活性化の値がゼロであることを示し、1値のビットは、対応する活性化の値が非ゼロであることを示す。したがって、活性化オペランドは、4つのゼロ値の活性化と4つの非ゼロ値の活性化とを含む。
【】
重みレジスタファイル520は、重みオペランドの少なくとも一部を記憶する。重みオペランドは、重みのシーケンスを含む。重みオペランドは、フィルタ、例えば、畳み込み層のフィルタの一部でもよい。重みオペランドは、重みビットマップ525に関連付けられる。重みビットマップ525は、重みレジスタファイル520、PE500を含む計算ブロックのローカルメモリ、又はこれらの双方に記憶されてもよい。重みビットマップ525は、重みオペランド内の非ゼロ値の重みの位置を示すことができる。重みビットマップ525は、ビットのシーケンスを含み、ビットのそれぞれは、重みオペランド内のそれぞれの重みに対応する。いくつかの実施形態では、重みビットマップ525内のビットの位置は、重みオペランド内の対応する重みの位置と一致する。例示の目的で、重みビットマップ525は8ビットを含み、重みオペランドは8つの重みを含む。他の実施形態では、重みビットマップ525は、より少ないビット又はより多いビットを含んでもよい。図5に示すように、重みビットマップ525内の8ビットのうちの4ビットは0値であり、他の4ビットは1値である。0値のビットは、対応する重みの値がゼロであることを示し、1値のビットは、対応する重みの値が非ゼロであることを示す。したがって、重みオペランドは、4つのゼロ値の重みと4つの非ゼロ値の重みとを含む。重みビットマップ525は、重みオペランド内の非ゼロ値の重みの位置を示すことができる。
【】
スパース性アクセラレータ560は、活性化ビットマップ515及び重みビットマップ525に基づいて、結合スパース性ビットマップ535を生成する。スパース性アクセラレータ560は、入力レジスタファイル510又はPE500を含む計算ブロックのローカルメモリから活性化ビットマップ515を受信してもよい。スパース性アクセラレータ560は、重みレジスタファイル520又は計算ブロックのローカルメモリから重みビットマップ525を受信してもよい。いくつかの実施形態では、スパース性アクセラレータ560はAND演算子である。スパース性アクセラレータ560は、活性化ビットマップ515及び重みビットマップ525に対して1つ以上のAND演算を実行することによって、結合スパース性ビットマップ535を生成してもよい。結合スパース性ビットマップ535内の各ビットは、活性化ビットマップ515内のビット及び重みビットマップ525内のビットに対するAND演算の結果である。結合スパース性ビットマップ535内のビットの位置は、活性化ビットマップ515内のビットの位置及び重みビットマップ525内のビットの位置と一致する。例えば、結合スパース性ビットマップ535内の第1のビットは、活性化ビットマップ515内の第1のビット及び重みビットマップ525内の第1のビットに対するAND演算の結果であり、結合スパース性ビットマップ535内の第2のビットは、活性化ビットマップ515内の第2のビット及び重みビットマップ525内の第2のビットに対するAND演算の結果であり、結合スパース性ビットマップ535内の第3のビットは、活性化ビットマップ515内の第3のビット及び重みビットマップ525内の第3のビットに対するAND演算の結果であり、以下同様である。
【】
結合スパース性ビットマップ535内のビットは、活性化ビットマップ515内の対応するビット及び重みビットマップ525内の対応するビットが双方とも1の値を有するときに、1の値を有する。活性化ビットマップ515内の対応するビット及び重みビットマップ525内の対応するビットのうちの少なくとも1つが0の値を有するとき、結合スパース性ビットマップ535内のビットは0の値を有する。図5に示すように、結合スパース性ビットマップ535は、6つの0と2つの1とを含む。
【】
結合スパース性ビットマップ535内の1の総数は、非ゼロ値の部分和を計算するためにPE500によって計算される非ゼロ値の活性化・重みペアの総数に等しい。他の活性化・重みペアは、ゼロ値の活性化・重みペアであり、これらのペアはゼロ値の部分和を生じるので、出力精度に影響を与えることなく計算のためにスキップできる。したがって、この計算ラウンドにおけるPE500の作業負荷は、結合スパース性ビットマップ535内の1の総数に基づいて決定できる。計算のための時間量はまた、結合スパース性ビットマップ535内の1の総数に基づいて推定できる。結合スパース性ビットマップ535内の1が多いほど、PE500の作業負荷は高くなり、PE500の計算は長くなる。
【】
いくつかの実施形態では、入力レジスタファイル510又は重みレジスタファイル520は、密データポイント、例えば、非ゼロ値の活性化又は非ゼロ値の重みを記憶する。疎データポイント、例えば、ゼロ値の活性化又はゼロ値の重みは、入力レジスタファイル510又は重みレジスタファイル520に記憶されない。密データポイントは、入力レジスタファイル510又は重みレジスタファイル520において圧縮され、互いに隣接して保持されてもよい。活性化オペランドの密データポイントは、圧縮された活性化オペランドである。重みオペランドの密データポイントは、圧縮された重みオペランドを構成する。結合スパース性ビットマップ535内の1の位置は、圧縮された活性化オペランド内の活性化の位置又は圧縮された重みオペランド内の重みの位置を示すことができない。スパース性アクセラレータ560は、スパース性計算を実行して、圧縮された活性化オペランド内の活性化の位置と、圧縮された重みオペランド内の重みの位置とを決定してもよい。スパース性アクセラレータ560は、2つの非ゼロ値の活性化・重みペアのそれぞれに対してスパース性計算のラウンドを実行してもよい。スパース性計算の各ラウンドにおいて、スパース性アクセラレータ560は、活性化ビットマップ515、重みビットマップ525及び結合スパース性ビットマップ535に基づいて、活性化位置ビットマップ及び重み位置ビットマップを計算してもよい。圧縮された活性化オペランドにおける活性化の位置は、活性化位置ビットマップ内の1の数によって示されてもよく、圧縮された重みオペランドにおける重みの位置は、重み位置ビットマップ内の1の数によって示されてもよい。スパース性計算の第1のラウンドでは、中間ビットマップが決定されてもよく、次の非ゼロ値の活性化・重みペアを識別するために第2のラウンドにおいて使用できる。
【】
スパース性アクセラレータ560は、入力レジスタファイル510及び重みレジスタファイル520から、スパース性計算を通じて決定された位置に基づいて、非ゼロ値の活性化・重みペアの活性化及び重みを読み取ることができ、活性化及び重みを乗算器530に提供する。乗算器530は、活性化及び重みに対して乗算演算を実行する。例えば、乗算器530は、各非ゼロ値の活性化・重みの個別ペアにおける活性化及び重みに対して乗算演算を実行し、部分和、すなわち、活性化と重みとの積を出力する。2つの活性化・重みペアが存在するので、乗算器530は、例えば、結合スパース性ビットマップ535内の1の位置に基づいて、2つの乗算演算を順次実行してもよい。スパース性アクセラレーションがない場合、乗算器530は、8つの乗算演算を実行する必要がある。乗算演算の数を8から2に低減することによって、PE500におけるMAC演算が加速される。DNNアクセラレータは、通常では、DNNの実行において多数のMAC演算を実行するので、スパース性アクセラレーションは、DNNアクセラレータの効率及び性能をかなり改善できる。
【】
累算器540は、乗算器530から2つの部分和を受信し、2つの部分和を累算する。累算の結果は、PEレベルの内部部分和である。PEレベルの内部部分和は、出力レジスタファイル550に記憶されてもよい。いくつかの実施形態では、累算器540は、1つ以上の他のPEから1つ以上のPEレベルの内部部分和を受信する。累算器540は、1つ以上のPEレベルの内部部分和をPE500のPEレベルの内部部分和と累算し、累算の結果(すなわち、マルチPE内部部分和)を出力レジスタファイル550に記憶できる。1つ以上の他のPEは、PEアレイ内のPE500と同じ列内にあってもよい。マルチPE内部部分和は、列レベルの内部部分和でもよい。いくつかの実施形態では、PE500のPEレベルの内部部分和又はマルチPE内部部分和は、更なる累算のために1つ以上の他のPEに送信されてもよい。
【】
図5は単一の乗算器530を示しているが、PE500は、複数の乗算演算を同時に実行できる複数の乗算器を含んでもよい。これらの乗算器は、内部加算器アセンブリ、例えば、図12における内部加算器アセンブリ1240に結合できる。
【】
図6は、様々な実施形態によるDNNモジュール600のブロック図である。DNNモジュール600は、図3におけるDNNモジュール301の実施形態でもよい。図6に示すように、DNNモジュール600は、インタフェースモジュール610、訓練モジュール620、圧縮モジュール630、検証モジュール640及びデータストア650を含む。他の実施形態では、代替構成、異なる構成要素又は更なる構成要素がDNNモジュール600に含まれてもよい。さらに、DNNモジュール600の構成要素に起因する機能は、DNNモジュール600に含まれる異なる構成要素又は異なるモジュール若しくはシステムによって達成されてもよい。
【】
インタフェースモジュール610は、DNNモジュール600と他のモジュール又はシステムとの通信を容易にする。例えば、インタフェースモジュール610は、DNNモジュール600と外部データベースとの間の通信を確立して、DNNを訓練するために使用できるデータ又はタスクを実行するためにDNNに入力できるデータを受信する。別の例として、インタフェースモジュール610は、DNNモジュール600が、他のシステム、例えば、タスクを実行するためにDNNを適用するように構成された計算デバイスにDNNを分配することをサポートする。
【】
訓練モジュール620は、訓練データセットを使用することによってDNNを訓練する。訓練モジュール620は、訓練データセットを形成する。訓練モジュール620が画像内のオブジェクトを認識するようにDNNを訓練する実施形態では、訓練データセットは、訓練画像及び訓練ラベルを含む。訓練ラベルは、訓練画像内のオブジェクトのグラウンドトゥルース分類を記述する。いくつかの実施形態では、訓練データセット内の各ラベルは、訓練画像内のオブジェクトに対応する。いくつかの実施形態では、訓練データセットの一部は、DNNを最初に訓練するために使用されてもよく、訓練データセットの残りは、訓練されたDNNの性能を検証するために検証モジュール640によって使用される検証サブセットとして引き止められてもよい。調整サブセット及び検証サブセットを含まない訓練データセットの部分は、DNNを訓練するために使用されてもよい。
【】
訓練モジュール620はまた、DNNを訓練するためのハイパーパラメータを決定する。ハイパーパラメータは、DNN訓練プロセスを指定する変数である。ハイパーパラメータは、DNNの内部のパラメータ(例えば、フィルタの重み)とは異なる。いくつかの実施形態では、ハイパーパラメータは、隠れ層の数のようなDNNのアーキテクチャを決定する変数を含む。ハイパーパラメータはまた、バッチサイズ、エポック数等のようにDNNがどのように訓練されるかを決定する変数を含む。バッチサイズは、DNNのパラメータを更新する前に処理する訓練サンプル数を定義する。バッチサイズは、訓練データセット内のサンプル数以下である。訓練データセットは、1つ以上のバッチに分割できる。エポック数は、全体の訓練データセットが全体のネットワークを何回順方向及び逆方向に通過するかを定義する。エポック数は、ディープラーニングアルゴリズムが全体の訓練データセットを処理する回数を定義する。1つのエポックは、訓練データセット内の各訓練サンプルがDNNの内部のパラメータを更新する機会を有していることを意味する。エポックは、1つ以上のバッチを含んでもよい。エポック数は、1、5、10、50、100、500、1000又は更に大きくてもよい。
【】
訓練モジュール620は、例えば、ハイパーパラメータのうちのいくつかに基づいて、DNNのアーキテクチャを定義する。DNNのアーキテクチャは、入力層、出力層及び複数の隠れ層を含む。DNNの入力層は、入力画像の高さ、入力画像の幅及び入力画像の深さ(例えば、入力画像内のピクセルの色を指定するビット数)のような入力画像の属性を指定するテンソル(例えば、多次元配列)を含んでもよい。出力層は、入力層におけるオブジェクトのラベルを含む。隠れ層は、入力層と出力層との間の層である。隠れ層は、1つ以上の畳み込み層と、プーリング層、全結合層、正規化層、SoftMax又はロジスティック層等のような1つ以上の他のタイプの層とを含む。DNNの畳み込み層は、入力画像を、特徴マップ高さ、特徴マップ幅及び特徴マップチャネル(例えば、赤、緑、青の画像は3つのチャネルを含む)を指定するテンソルによって表される特徴マップに抽象化する。プーリング層は、畳み込み後の入力画像の空間体積を低減するために使用される。これは、2つの畳み込み層の間で使用される。全結合層は、重み、バイアス及びニューロンを含む。これは、1つの層におけるニューロンを別の層におけるニューロンに接続する。これは、訓練によって異なるカテゴリの間で画像を分類するために使用される。
【】
DNNのアーキテクチャを定義するプロセスにおいて、訓練モジュール620はまた、隠れ層又は出力層に活性化関数を追加する。層の活性化関数は、層の入力の加重和を層の出力に変換する。活性化関数は、例えば、正規化線形ユニット活性化関数、正接活性化関数又は他のタイプの活性化関数でもよい。
【】
訓練モジュール620がDNNのアーキテクチャを定義した後に、訓練モジュール620は、訓練データセットをDNNに入力する。訓練データセットは、複数の訓練サンプルを含む。訓練サンプルの例は、画像内のオブジェクトと、オブジェクトのグラウンドトゥルースラベルとを含む。訓練モジュール620は、DNNによって生成される訓練オブジェクトのラベルとオブジェクトのグラウンドトゥルースラベルとの間の誤差を最小化するように、DNNの内部のパラメータ(「DNNの内部パラメータ」)を修正する。内部パラメータは、DNNの畳み込み層におけるフィルタの重みを含む。いくつかの実施形態では、訓練モジュール620は、コスト関数を使用して誤差を最小化する。
【】
訓練モジュール620は、所定の数のエポックにわたってDNNを訓練してもよい。エポック数は、ディープラーニングアルゴリズムが全体の訓練データセットを処理する回数を定義するハイパーパラメータである。1つのエポックは、訓練データセット内の各サンプルがDNNの内部パラメータを更新する機会を有していることを意味する。訓練モジュール620が所定の数のエポックを終了した後に、訓練モジュール620は、DNNにおけるパラメータを更新することを停止してもよい。更新されたパラメータを有するDNNは、訓練されたDNNと呼ばれる。
【】
圧縮モジュール630は、DNNを圧縮する。例えば、圧縮モジュール630は、計算上の複雑さ又はメモリ使用量を低減するために、DNN層にプルーニング動作を追加してもよい。プルーニング動作は、活性化プルーニング動作又は重みプルーニング動作でもよい。活性化プルーニング動作は、DNN層の出力テンソルをプルーニングしてもよい。重みプルーニング動作は、DNN層の重みテンソルをプルーニングしてもよい。いくつかの実施形態では、圧縮モジュール630は、DNNにおける1つ以上の計算上で複雑な層を選択し、活性化プルーニング動作又は重みプルーニング動作を用いてそれぞれの選択された層を修正してもよい。
【】
層又は層のタイプのプルーニング動作について、圧縮モジュール630は、DNNの精度の損失が精度損失制約を超えないようにする活性化閾値又は重み閾値を決定してもよい。活性化プルーニング動作は、活性化閾値を下回る絶対値を有する出力活性化をゼロに修正し、層の他の出力活性化を変更されないままにしてもよい。出力データを低減することは、ゼロ値の活性化がメモリ記憶からスキップされ得るので、メモリトラフィックを低減できる。ゼロ値の活性化も計算からスキップされ得るので、次の層における演算の数も低減できる。
【】
重みプルーニング動作は、重み閾値を上回る絶対値を有する重みをゼロに修正し、他の重みを変更されないままにしてもよい。重みプルーニングは、ゼロ値の重みが記憶されなくてもよいので、メモリ記憶を低減できる。また、層の出力に影響を与えることなく、ゼロ値の重みに対する計算がスキップできるので、層における演算の数が低減できる。いくつかの実施形態では、圧縮モジュール700はまた、プルーニング動作によって引き起こされるエネルギー節約、最終的なDNN精度又は層毎のスパース性を測定してもよい。圧縮モジュール630の特定の態様は、図7に関連して以下に提供される。
【】
DNNを圧縮した後に、圧縮モジュール630は、例えば、再訓練プロセスを通じて、DNNを微調整してもよい。圧縮モジュール630は、重みがプルーニングされた後にDNNを微調整してもよい。いくつかの実施形態では、微調整プロセスは、再訓練又は更なる訓練プロセスである。例えば、DNNにおける重みがプルーニングされた後に、圧縮モジュール630は、訓練データセットをDNNに入力することによってDNNを更に訓練してもよい。DNNにおけるプルーニングされていない重みの値は、DNNの出力と、訓練データセット内の訓練サンプルのグラウンドトゥルースラベルとに基づいて修正されてもよい。いくつかの実施形態では、プルーニングされた重みの値(すなわち、ゼロ)は、微調整プロセス中に変更されない。例えば、圧縮モジュール630は、プルーニングされた重みブロックに対してマスクを配置してもよく、マスクは、プルーニングされた重みブロック内の値が微調整プロセス中に変更されるのを防止できる。他の実施形態では、プルーニングされた重みを含む全ての重みの値は、微調整プロセス中に変更されてもよい。圧縮モジュール630による再訓練及び重み変更の1つ以上のサイクルの後に、圧縮モジュール630は、例えば、重みブロックを選択し、選択された重みブロックをプルーニングすることによって、新たなプルーニングプロセスを実行してもよい。いくつかの実施形態では、重みプルーニングプロセスは、微調整プロセスが行われる前に複数回繰り返されてもよい。
【】
いくつかの実施形態では、微調整プロセスにおけるエポック数は、重みの事前プルーニング値が決定される訓練プロセスにおけるエポック数とは異なってもよい。例えば、微調整プロセスは、訓練プロセスよりも少ないエポックを有してもよい。一例では、微調整プロセスにおけるエポック数は、2、3、4、5等のように、比較的小さくてもよい。
【】
検証モジュール640は、訓練又は圧縮されたDNNの精度を検証する。いくつかの実施形態では、検証モジュール640は、検証データセット内のサンプルを訓練されたDNNに入力し、DNNの出力を使用してモデル精度を決定する。いくつかの実施形態では、検証データセットは、訓練データセット内の一部又は全部のサンプルから形成されてもよい。さらに或いは代替として、検証データセットは、訓練セット内のもの以外の更なるサンプルを含む。いくつかの実施形態では、検証モジュール640は、DNNの適合率、再現率、又は適合率と再現率との組み合わせを測定する精度スコアを決定してもよい。検証モジュール640は、以下のメトリック、すなわち、Precision=TP/(TP+FP)及びRecall=TP/(TP+FN)を使用して、精度スコアを決定してもよく、Precisionは、参照分類モデルが予測した総数(TP+FP又は偽陽性)のうち、参照分類モデルがどれだけ多く正しく予測したか(TP又は真陽性)でもよく、Recallは、問題の特性を有したオブジェクトの総数(TP+FN又は偽陰性)のうち、参照分類モデルがどれだけ多く正しく予測したか(TP)でもよい。Fスコア(F-score=2*PR/(P+R))は、適合率及び再現率を単一の尺度に統合する。
【】
検証モジュール640は、精度スコアを閾値スコアと比較してもよい。検証モジュール640が、拡張モデルの精度スコアが閾値スコア未満であると決定する例では、検証モジュール640は、訓練モジュール620に対してDNNを再訓練するように命令する。一実施形態では、訓練モジュール620は、DNNが十分に正確になり得るという精度測定指示、又は複数の訓練ラウンドが行われたことのような停止条件の発生まで、DNNを反復的に再訓練してもよい。
【】
データストア650は、DNNモジュール600と関連付け、受信、生成、使用又は他の方法で関連付けされたデータを記憶する。例えば、データストア650は、訓練モジュール620及び検証モジュール640によって使用されるデータセットを記憶する。データストア650はまた、DNNを訓練するためのハイパーパラメータ、訓練されたDNNの内部パラメータ(例えば、重み等)、スパース性アクセラレーションのためのデータ(例えば、スパース性ビットマップ等)等のような、訓練モジュール620及び検証モジュール640によって生成されたデータを記憶してもよい。図6の実施形態では、データストア650は、DNNモジュール600の構成要素である。他の実施形態では、データストア650は、DNNモジュール600の外部にあり、ネットワークを通じてDNNモジュール600と通信してもよい。
【】
図7は、様々な実施形態による圧縮モジュール700のブロック図である。圧縮モジュール700は、図6の圧縮モジュール630の実施形態でもよい。図7に示すように、圧縮モジュール700は、層選択モジュール710、グラフ生成モジュール720、修正モジュール730、活性化閾値モジュール740及び重み閾値モジュール750を含む。他の実施形態では、代替構成、異なる構成要素又は更なる構成要素が、圧縮モジュール700に含まれてもよい。さらに、圧縮モジュール700の構成要素に起因する機能は、圧縮モジュール700に含まれる異なる構成要素、DNNモジュール600、又は異なるモジュール若しくはシステムによって達成されてもよい。
【】
層選択モジュール710は、DNNを分析し、プルーニング動作で修正されるための層をDNNから選択する。いくつかの実施形態では、層選択モジュール710は、DNNから1つ以上の計算上で複雑な層を選択してもよい。計算上で複雑な層は、計算集約的又はメモリ集約的でもよい。層の活性化又は重みをプルーニングすることは、層を実行するために必要とされる計算又はメモリリソースを低減してもよい。
【】
いくつかの実施形態では、層選択モジュール710は、活性化プルーニング動作が追加されるべき層を選択し、重みプルーニング動作が追加されるべき異なる層を選択してもよい。層選択モジュール710はまた、活性化プルーニング動作及び重みプルーニング動作の双方が追加されるべき層を選択してもよい。いくつかの実施形態では、層選択モジュール710は、DNNの最後の層、例えば、SoftMax演算後に最終的なクラス確率を出力してもよく且つ計算負荷が高くない最後の層を、修正のために選択されることから除外してもよい。
【】
いくつかの実施形態では、層選択モジュール710は、DNNにおける計算上で複雑な層を識別し、これらの層を修正されるべき層として選択してもよい。層選択モジュール710は、層のサイズ、層における演算(例えば、MAC演算)の数、層のタイプ、層の前に存在する特別な演算又は層の他の属性のような層の1つ以上の属性に基づいて、層が計算上で複雑であると決定してもよい。
【】
層選択モジュール710は、層の内部パラメータ(例えば、重み)の数に基づいて層のサイズを決定してもよい。層選択モジュール710は、層のテンソル(例えば、入力テンソル、重みテンソル、出力テンソル等)のサイズ、パディングサイズ、ストライドサイズ等のような層のハイパーパラメータに基づいて、層における演算の数を決定してもよい。層選択モジュール710は、特定のタイプの層が計算上で複雑であると決定してもよい。このような層の例は、畳み込み層、非線形アテンション層(例えば、ReLU、GELU等)、活性化層、正規化層、要素毎の演算層(加算、減算、乗算、除算等)及びフィードフォワード層を含んでもよい。層選択モジュール710は、層の前に1つ以上の演算を有する層を選択してもよい。このような特別な演算の例は、転置、再形成、連結等を含んでもよい。
【】
グラフ生成モジュール720は、DNNを表すグラフを生成する。グラフは、ノードの集合と1つ以上のエッジとを含むデータ構造でもよい。ノードはグラフ内のエンティティであり、エッジは2つのノードの接続である。グラフは、1つ以上の埋め込みに関連付けられてもよい。例えば、グラフは、グラフの1つ以上の特性を符号化するグラフ埋め込みを有してもよく、グラフ内のノードは、ノードの1つ以上の特性を符号化するノード埋め込みを有してもよく、或いは、グラフ内のエッジは、エッジの1つ以上の特性を符号化するエッジ埋め込みを有してもよい。埋め込みは、埋め込みベクトルとも呼ばれるベクトルでもよい。
【】
DNNを表すグラフ内のノードは、ディープラーニング演算又はDNNの層を表してもよい。ノードは、別のディープラーニング演算を表す別のノード又はDNNにおける別の層に接続されてもよい。2つのノードの間のエッジは、2つの層の間のデータフローを符号化してもよい。いくつかの実施形態では、エッジは、第1の層の出力テンソル又は第2の層の入力テンソルのようなテンソルを符号化してもよい。ノード又はエッジはまた、転置、再形成、連結等のような、対応する層の前又は後の特別な演算を符号化してもよい。いくつかの実施形態では、グラフ内のノードは、DNNの順方向実行パスに基づいて配置されてもよい。例えば、ノードは、DNNにおけるノードによって表される層の順序に一致する順序で配置されてもよい。グラフは、モデル操作を容易にすることができ、中間活性化の統計の分析は、モデルのソースコードにアクセスすることなくより容易になる。
【】
いくつかの実施形態では、グラフ生成モジュール720はまた、推論のためにグラフを最適化してもよい。例えば、複数の層(例えば、畳み込み層)が一緒に融合されてもよい。別の例として、正規化層はバッチ化されてもよい。最適化は、DNNアクセラレータ、例えば、DNNアクセラレータ302における推論実行を模倣するために行われてもよい。グラフ生成モジュール720はまた、ドロップアウト層を、これらの層が推論中に無効になり得るので、除去してもよい。グラフ生成モジュール720は、他のタイプの最適化を実行してもよい。最適化は、レイテンシを低減でき、DNNアクセラレータの性能を改善でき、或いは、メモリ使用量を低減できる。
【】
修正モジュール730は、層選択モジュール710によって選択された層をプルーニング動作で修正する。いくつかの実施形態では、層修正は、DNNを表すためにグラフ生成モジュール720によって生成されたグラフを通じて行われてもよい。修正モジュール730は、DNNを表すグラフに基づいて、DNNにおける選択された層の位置を識別してもよい。選択された層の位置が識別された後に、修正モジュール730は、識別された位置に或いは識別された位置の前又は後の位置に、プルーニング動作を追加してもよい。
【】
修正モジュール730は、それぞれの選択された層に少なくとも1つのプルーニング動作を追加してもよい。例えば、修正モジュール730は、活性化プルーニング動作が層の出力活性化をプルーニングできるように、選択された層に活性化プルーニング動作を追加してもよい。修正モジュール730は、選択された層の後に活性化プルーニング動作を配置してもよい。別の例として、修正モジュール730は、重みプルーニング動作が層の重みをプルーニングできるように、選択された層に重みプルーニング動作を追加してもよい。更に別の例として、修正モジュール730は、選択された層に活性化プルーニング動作及び重みプルーニング動作の双方を追加してもよい。
【】
活性化プルーニング動作は、以下のように示されてもよい。
【数】
ここで、lは活性化プルーニング動作が配置される層を示し、act
lは層の出力活性化を示し、act
l'は活性化プルーニング動作によって決定されたプルーニングされた出力活性化を示し、λ
lは活性化をプルーニングするために活性化プルーニング動作によって使用される活性化閾値を示す。活性化プルーニング動作は、活性化閾値を上回る絶対値を有する活性化の値を変更しないが、活性化閾値を下回る絶対値を有する活性化の値をゼロに変更する。
【】
重みプルーニング動作は、以下のように示されてもよい。
【数】
ここで、lは活性化プルーニング動作が配置される層を示し、w
lは層の重みを示し、w
l'は活性化プルーニング動作から出力されたプルーニングされた重みを示し、λ
lは重みをプルーニングするために重みプルーニング動作によって使用される重み閾値を示す。重みプルーニング動作は、重み閾値を上回る絶対値を有する重みの値を変更しないが、重み閾値を下回る絶対値を有する重みの値をゼロに変更する。プルーニング動作(活性化プルーニング動作又は重みプルーニング動作のいずれか)は、図3におけるスパース性エンコーダ380のような1つ以上のスパース性エンコーダを使用して実行されてもよい。重みプルーニング動作は、いくつかの実施形態では、重みの値がDNNを訓練することを通じて予め決定されるので、コンパイル段階で実行されてもよい。重みは、重みがDNNアクセラレータにロードされる前に重み閾値を使用してプルーニングされてもよく、これは、重みプルーニング動作によって引き起こされるDNNアクセラレータへの面積及び電力オーバーヘッドを排除できる。
【】
活性化閾値モジュール740は、活性化プルーニング動作のための活性化閾値を決定する。いくつかの実施形態では、活性化閾値モジュール740は、精度損失制約に基づいて反復プロセスを通じて活性化プルーニング動作のための最適な活性化閾値を(例えば、複数の候補活性化閾値から)選択してもよい。最適な活性化閾値は、DNNの精度の損失が精度損失制約を超えないようにする最も高い候補活性化閾値でもよい。精度損失制約は、精度損失のための最大閾値でもよい。精度損失は、活性化プルーニング動作を用いたDNNの精度とDNNのベースライン精度との間の差でもよい。DNNのベースライン精度は、活性化プルーニング動作のないDNNの精度でもよい。
【】
いくつかの実施形態では、精度損失は、以下のように示されてもよい。
ΔA=(Accbaseline-Accthreshold)<Ab
ここで、AccbaselineはDNNのベースライン精度を示し、Top1Accthresholdは活性化をプルーニングするために活性化閾値を使用する活性化プルーニング動作を用いたDNNの精度を示し、Abは精度損失制約を示す。ベースライン精度及び精度損失制約は、予め決定されてもよい。いくつかの実施形態では、Top1精度が使用される。Top1精度は、DNNによって生成されたラベルが入力のグラウンドトゥルースラベルと一致する入力の割合(例えば、パーセンテージ)を示してもよい。Abは、0.5%、1%、1.5%、2%、2.5%等でもよい。
【】
異なる層は、プルーニングに対して異なる耐性を有してもよく、その結果、層の活性化が同じ活性化閾値でプルーニングされたとしても、精度損失は異なってもよい。活性化閾値モジュール740は、層固有の活性化閾値を決定してもよい。一例では、活性化閾値モジュール740は、特定のタイプの層に固有の活性化閾値を決定してもよい。異なるタイプの層は、異なる活性化閾値を有してもよい。
【】
いくつかの実施形態では、反復プロセスは、複数のラウンドを含んでもよい。各ラウンドにおいて、活性化プルーニング動作は、異なる候補閾値を使用して行われてもよい。第1のラウンドにおいて使用される閾値は、最小の閾値、例えば、ゼロでもよい。後続の各ラウンドの閾値は、前のラウンドの閾値をインクリメントすることによって決定されてもよい。インクリメントは、いくつかの実施形態では固定されてもよい。
【】
各ラウンドにおいて、活性化閾値モジュール740は、活性化プルーニング動作を用いてDNNの精度を決定してもよい(或いは決定するように検証モジュール640に命令してもよい)。DNNの精度を決定するために、データセットがDNNに入力されてもよい。データセットは、訓練データセット、検証データセット又は異なるデータセットでもよい。DNNの推論が実行される。DNNの出力は、DNNのグラウンドトゥルース出力と比較されて、DNNの精度を決定してもよい。精度損失が決定され、精度損失制約と比較される。精度損失が精度損失制約よりも低い実施形態では、次のラウンドは、より高い活性化閾値で実行される。精度損失が精度損失制約以上である実施形態では、反復プロセスは停止し、前のラウンドにおいて使用された閾値が、層の最適な活性化閾値として選択される。最適な活性化閾値は、例えば、推論実行時中に、1つ以上のスパース性エンコーダ(例えば、スパース性エンコーダ380)と統合された内部レジスタに記憶されてもよい。スパース性エンコーダは、最適な活性化閾値を使用して、層によって生成された活性化をプルーニングし、プルーニングされた活性化を次の層に提供できる。
【】
重み閾値モジュール750は、重みプルーニング動作のための重み閾値を決定する。いくつかの実施形態では、重み閾値モジュール750は、精度損失制約、最小制約及び最大制約に基づいて、重みプルーニング動作のための最適な重み閾値を(例えば、複数の候補重み閾値から)決定してもよい。精度損失制約は、の精度損失制約でもよい。最小制約及び最大制約は、最適な重み閾値の制約を構成してもよく、例えば、最適な重み閾値は、最小制約よりも大きく、最大制約よりも小さくてもよい。
【】
いくつかの実施形態では、重み閾値モジュール750は、絶対重みの最小値を決定する。絶対重みは、層のカーネルにおける重みの絶対値でもよい。最小値は、重みの最小絶対値でもよい。最小値が最小制約よりも高い実施形態では、重み閾値モジュール750は、層にスパース性を導入することを回避するために、層のための最適な重み閾値としてゼロを設定する。
【】
最小値が最小制約以下である実施形態では、重み閾値モジュール750は、例えば、最大制約が後続のラウンド毎にインクリメントされ得る反復プロセスを通じて、非ゼロ値の最適な重み閾値を決定してもよい。最大制約のインクリメントは、予め決定された固定値でもよい。重み閾値モジュール750は、絶対重みの分布から1つ以上の分位数を計算してもよい。分位数は、特定の限界を上回るか或いは下回る分布における値の数を決定してもよい。一例では、重み閾値モジュール750は、0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8及び0.9の分位数を計算してもよく、これらは、10、20、30、40、50、60、70、80及び90パーセンタイルに相当してもよい。反復プロセスの各ラウンドにおいて、重み閾値モジュール750は、最大制約よりも低い最高の分位数を識別してもよい。
【】
重み閾値モジュール750は、識別された分位数を最小制約と更に比較してもよい。重み閾値モジュール750は、識別された分位数と最小制約とのうちの高い方を、ラウンドのための重み閾値として選択してもよい。重み閾値モジュール750は、重みをプルーニングするための重み閾値を使用する重みプルーニング動作を用いてDNNの精度を更に決定してもよい(或いは決定するように検証モジュール640に命令してもよい)。DNNの精度を決定するために、データセットがDNNに入力されてもよい。データセットは、訓練データセット、検証データセット又は異なるデータセットでもよい。DNNの推論が実行される。DNNの出力は、DNNのグラウンドトゥルース出力と比較されて、DNNの精度を決定してもよい。精度損失が決定され、精度損失制約と比較される。精度損失が精度損失制約以上である実施形態では、反復プロセスは停止し、前のラウンドにおいて使用された閾値が選択され、層のための最適な活性化閾値として記憶される。
【】
精度損失が精度損失制約よりも低い実施形態では、次のラウンドは、より高い最大制約で実行される。より高い最大制約を用いて、重み閾値モジュール750は、より高い最大制約よりも低い絶対重みの新たな最高の分位数を識別してもよい。重み閾値モジュール750は、最高の分位数を最小制約と比較して、ラウンドの重み閾値としてどれを使用するかを選択するステップと、精度損失を検査して、反復プロセスを停止するか、次のラウンドを実行するかを決定するステップとを繰り返してもよい。
【】
いくつかの実施形態(例えば、層が活性化プルーニング動作及び重みプルーニング動作の双方で修正される実施形態)では、活性化閾値モジュール740及び重み閾値モジュール750は、シーケンスで動作してもよい。実施形態では、重み閾値モジュール750は、活性化閾値モジュール740が最適な活性化閾値を決定する前に、層のための最適な重み閾値を決定してもよい。活性化閾値モジュール740によって使用されるベースラインDNN精度は、重み閾値モジュール750によって見つけられた最適な重み閾値を使用する重みプルーニング動作を用いたDNNの精度でもよい。別の実施形態では、重み閾値モジュール750が層のための最適な重み閾値を決定し得る前に、活性化閾値モジュール740が最適な活性化閾値を決定する。重み閾値モジュール750によって使用されるベースラインDNN精度は、活性化閾値モジュール740によって見つけられた最適な活性化閾値を使用する活性化プルーニング動作を用いたDNNの精度でもよい。
【】
[最適な閾値を選択する例示的なプロセス]
図8は、様々な実施形態による、活性化をプルーニングするための最適な閾値の選択を示す。最適な閾値の選択は、図7における活性化閾値モジュール740によって実行されてもよい。図8に示すステップ810において、閾値λは、第1のラウンド、すなわち、ラウンドインデックスi=0を有するラウンドで初期化される。閾値λはゼロ又は正の数でもよい。
【】
ステップ820において、データセットを使用してモデル精度が測定される。データセットは、訓練モジュール620又は検証モジュール640によって生成されてもよい。データセットは、DNNへの1つ以上の入力を含んでもよく、各入力は、1つ以上のグラウンドトゥルースラベルに関連付けられてもよい。モデル精度は、DNNによって生成された入力のラベルを入力のグラウンドトゥルースラベルと比較することによって決定されてもよい。いくつかの実施形態では、モデル精度は、DNNによって生成されたラベルが対応するグラウンドトゥルースラベルと何個一致するかを示すパーセンテージでもよい。モデル精度は、Top1精度でもよい。
【】
ステップ830において、精度損失ΔA(i)は、精度損失制約Abと比較される。精度損失ΔA(i)は、DNNのベースラインモデル精度からステップ820において測定されたモデル精度を引いたものに等しくてもよい。精度損失制約Abは予め決定され、メモリに記憶されてもよい。
【】
精度損失ΔA(i)が精度損失制約Abよりも低くないとき、ステップ840が実行される。ステップ840において、最適な閾値が前のラウンドi-1において使用された閾値に設定される。最適な閾値は、ローカルメモリ340、閾値レジスタ420等のようなメモリに記憶されてもよい。最適な閾値は、層によって生成された活性化をプルーニングするために、層における活性化プルーニング動作において使用されてもよい。いくつかの実施形態では、最適な閾値は、複数の層における活性化プルーニング動作において使用されてもよい。これらの層は、同じタイプでもよい。
【】
精度損失ΔA(i)が精度損失制約Abよりも低いとき、ステップ850が実行される。ステップ850において、閾値λは、所定の値Δλだけインクリメントされる。インクリメントされた閾値λは、次のラウンドi+1において使用される。次のラウンドでは、ステップ820及び830が再び実行される。また、ステップ840又は850が実行されてもよい。これは、最適な閾値が見つかるまで継続してもよい。
【】
図9は、様々な実施形態による、重みをプルーニングするための最適な閾値の選択を示す。最適な閾値の選択は、図7における重み閾値モジュール750によって実行されてもよい。図9に示すステップ910において、最小絶対重みwminは、DNN層の重みwの絶対値を探索することによって見つけられる。重みwの値は、DNNを訓練することによって決定されてもよい。
【】
ステップ920において、最小絶対重み|w|minが最小制約θlowと比較される。最小絶対重み|w|minが最小制約θlowよりも低くないとき、ステップ923が実行され、最適な閾値がゼロに設定され、これは、更なるスパース性が層の重みwに導入されることを意味する。
【】
最小絶対重み|w|minが最小制約θlowよりも低いとき、ステップ925が実行される。ステップ925において、絶対重み|w|の分位数qk(|w|)が見つけられる。図9の実施形態では、9つの分位数が見つけられる。分位数は十分位数でもよい。
【】
ステップ930において、最大分位数qmax(|w|)が見つけられる。最大分位数qmax(|w|)は、最大制約θhighよりも低い最大値を有する分位数であり、これは予め決定され、メモリに記憶されてもよい。
【】
ステップ940において、最大分位数qmax(|w|)が最小制約θlowと比較される。最大分位数qmax(|w|)が最小制約θlowよりも低いとき、ステップ943が実行され、現在のラウンドの重み閾値λ(i)は、最大分位数qmax(|w|)に設定される。最大分位数qmax(|w|)が最小制約θlowよりも低くないとき、ステップ945が実行され、現在のラウンドの重み閾値λ(i)は、最小制約θlowに設定される。
【】
ステップ950において、重みプルーニング演算子は、現在の重み閾値λ(i)、すなわち、ステップ943又は945において設定された重み閾値で適用される。λ(i)よりも低い絶対値を有する重みはゼロに変更され、λ(i)以上の絶対値を有する重みは変更されない。
【】
ステップ960において、データセットを使用してモデル精度が測定される。データセットは、訓練モジュール620又は検証モジュール640によって生成されてもよい。データセットは、DNNへの1つ以上の入力を含んでもよく、各入力は、1つ以上のグラウンドトゥルースラベルに関連付けられてもよい。モデル精度は、プルーニングされた重みを使用してDNNによって生成された入力のラベルを、入力のグラウンドトゥルースラベルと比較することによって決定されてもよい。いくつかの実施形態では、モデル精度は、DNNによって生成されたラベルが対応するグラウンドトゥルースラベルと何個一致するかを示すパーセンテージでもよい。モデル精度は、Top1精度でもよい。
【】
ステップ970において、精度損失Δ(i)は、精度損失制約Abと比較される。精度損失ΔA(i)は、DNNのベースラインモデル精度からステップ960において測定されたモデル精度を引いたものに等しくてもよい。精度損失制約Abは予め決定され、メモリに記憶されてもよい。
【】
精度損失ΔA(i)が精度損失制約Abよりも低くないとき、ステップ980が実行される。ステップ980において、最適な閾値が前のラウンドi-1において使用された閾値に設定される。最適な閾値は、ローカルメモリ340、閾値レジスタ420等のようなメモリに記憶されてもよい。最適な閾値は、層の重みをプルーニングするために、層における重みプルーニング動作において使用されてもよい。いくつかの実施形態では、最適な閾値は、複数の層における重みプルーニング動作において使用されてもよい。これらの層は、同じタイプでもよい。
【】
精度損失ΔA(i)が精度損失制約Abよりも低いとき、ステップ990が実行される。ステップ850において、最大制約θhighは、所定の値Δθhighだけインクリメントされる。インクリメントされた閾値θhighは、次のラウンドi+1において使用される。次のラウンドでは、ステップ930、940、943又は945、950、960及び970が再び実行される。また、ステップ980又は990が実行されてもよい。これは、最適な閾値が見つかるまで継続してもよい。
【】
図10は、様々な実施形態による、活性化及び重みをプルーニングするための最適な閾値の選択を示す。最適な閾値の選択は、図7における圧縮モジュール700によって実行されてもよい。図10に示すステップ1010において、重みプルーニング演算子が適用される。重みプルーニング演算子は、プログラム可能な重み閾値を使用する重みプルーニング動作のためのものでもよい。
【】
ステップ1020では、データセットを使用してモデル精度が測定される。データセットは、訓練モジュール620又は検証モジュール640によって生成されてもよい。データセットは、DNNへの1つ以上の入力を含んでもよく、各入力は、1つ以上のグラウンドトゥルースラベルに関連付けられてもよい。モデル精度は、プルーニングされた重みを使用してDNNによって生成された入力のラベルを、入力のグラウンドトゥルースラベルと比較することによって決定されてもよい。いくつかの実施形態では、モデル精度は、DNNによって生成されたラベルが対応するグラウンドトゥルースラベルと何個一致するかを示すパーセンテージでもよい。モデル精度は、Top1精度でもよい。
【】
ステップ1030において、精度損失ΔA(i)は、精度損失制約Abと比較される。精度損失ΔA(i)は、DNNのベースラインモデル精度からステップ1020において測定されたモデル精度を引いたものに等しくてもよい。精度損失制約Abは予め決定され、メモリに記憶されてもよい。
【】
精度損失ΔA(i)が精度損失制約Abよりも低いとき、ステップ1035が実行され、重み閾値が増加する。ステップ1010は、増加した重み閾値を用いて再び実行される。
【】
精度損失ΔA(i)が精度損失制約Abよりも低くないとき、最適な重み閾値が決定でき、例えば、最適な重み閾値は、前のラウンドにおいて決定された重み閾値でもよい。
【】
次いで、ステップ1040が実行される。ステップ1040において、プログラム可能な活性化閾値を用いて活性化プルーニング動作を実行するために、活性化プルーニング演算子が適用される。
【】
ステップ1020において、データセットを使用してモデル精度が測定される。ステップ1050において、精度損失ΔA(i)は、精度損失制約Abと比較される。精度損失ΔA(i)は、DNNのベースラインモデル精度からステップ1030において測定されたモデル精度を引いたものに等しくてもよい。DNNのベースラインモデル精度は、最適な重み閾値を使用する重みプルーニング動作を用いたDNNの精度でもよい。
【】
精度損失ΔA(i)が精度損失制約Abよりも低いとき、ステップ1055が実行され、活性化閾値が増加する。ステップ1040は、増加した活性化閾値を用いて再び実行される。精度損失ΔA(i)が精度損失制約Abよりも低くないとき、最適な活性化閾値が決定でき、例えば、最適な活性化閾値は、前のラウンドにおいて決定された重み閾値でもよい。
【】
ステップ1070において、最適な重み閾値及び最適な活性化閾値が設定される。最適な重み閾値及び最適な活性化閾値は、メモリ、例えば、ローカルメモリ340、閾値レジスタ420等に記憶されてもよい。最適な重み閾値及び最適な活性化閾値は、1つ以上の層の重み及び活性化をプルーニングするために使用されてもよい。図10の実施形態では、最適な重み閾値は、最適な活性化閾値が決定される前に決定される。他の実施形態では、最適な重み閾値は、最適な活性化閾値が決定された後に決定されてもよい。
【】
[例示的なPEアレイ]
図11は、様々な実施形態による例示的なPEアレイを示す。PEアレイ1100は、図3におけるPEアレイ350の実施形態でもよい。PEアレイ1100は、複数のPE1110(個々に「PE1110」と呼ばれる)を含む。PE1110は、量子化推論におけるMAC演算を含むMAC演算を実行できる。PE1110はまた、DNNにおけるニューロンとも呼ばれてもよい。各PE1110は、2つの入力信号1150及び1160と、出力信号1170とを有する。入力信号1150は、層へのIFMの少なくとも一部である。入力信号1160は、層のフィルタの少なくとも一部である。いくつかの実施形態では、PE1110の入力信号1150は、1つ以上の入力オペランドを含み、入力信号1160は、1つ以上の重みオペランドを含む。
【】
各PE1110は、入力信号1150及び1160に対してMAC演算を実行し、MAC演算の結果である出力信号1170を出力する。入力信号1150及び1160並びに出力信号1170の一部又は全部は、INT8のような整数フォーマット、又はFP16若しくはBF16のような浮動小数点フォーマットでもよい。簡略化及び例示の目的で、全てのPE1110の入力信号及び出力信号は同じ参照符号を有するが、PE1110は、互いに異なる入力信号を受信し、互いに異なる出力信号を出力してもよい。また、PE1110は、別のPE1110とは異なってもよく、例えば、より多くの構成要素、より少ない構成要素又は異なる構成要素を含んでもよい。
【】
図11に示すように、PE1110は、図11における破線矢印で示すように互いに接続される。PE1110の出力信号1170は、PE1110の間の相互接続を介して入力信号として多くの他のPE1110に送信されてもよい(場合によってはそれ自体に戻されてもよい)。いくつかの実施形態では、PE1110の出力信号1170は、PE1110の累算演算を通じて1つ以上の他のPE1110の出力信号を組み込んでもよく、PEアレイの内部部分和を生成する。
【】
図11の実施形態では、PE1110は、列1105(個々に「列1105」と呼ばれる)に配置される。層の入力及び重みは、列1105に基づいてPE1110に分配されてもよい。各列1105は列バッファ1120を有する。列バッファ1120は、列1105におけるPE1110に提供されるデータを短時間記憶する。列バッファ1120はまた、列1105における最後のPE1110によって出力されたデータを記憶してもよい。最後のPE1110の出力は、列1105における全てのPE1110のMAC演算の和でもよく、これは、PEアレイ1100の列レベルの内部部分和である。他の実施形態では、入力及び重みは、PEアレイ1100内の行に基づいてPE1110に分配されてもよい。PEアレイ1100は、列バッファ1120の代わりに行バッファを含んでもよい。行バッファは、対応する行のPEの入力信号を記憶してもよく、また、PEアレイ1100の行レベルの内部部分和を記憶してもよい。
【】
いくつかの実施形態では、列バッファ1120は、図3におけるローカルメモリ340の一部でもよい。列バッファ1120は、上位メモリ階層、例えば、図3におけるメモリ310に関連付けられてもよい。列バッファ1120内のデータは、上位メモリ階層に送信されてもよい。列バッファ1120は、上位メモリ階層からデータを受信してもよい。
【】
図12は、様々な実施形態によるPE1200のブロック図である。PE1200は、図11にけるPE1110の実施形態又は図3におけるPEアレイ350内のPEの実施形態でもよい。PE1200は、MAC演算、例えば、整数フォーマットのデータを使用するMAC演算を実行してもよい。図12に示すように、PE1200は、入力レジスタファイル1210(個々に「入力レジスタファイル1210」と呼ばれる)、重みレジスタファイル1220(個々に「重みレジスタファイル1220」と呼ばれる)、乗算器1230(個々に「乗算器1230」と呼ばれる)、内部加算器アセンブリ1240及び出力レジスタファイル1250を含む。他の実施形態では、PE1200は、より少ない構成要素、より多い構成要素又は異なる構成要素を含んでもよい。例えば、PE1200は、複数の出力レジスタファイル1250を含んでもよい。別の例として、PE1200は、単一の入力レジスタファイル1210、重みレジスタファイル1220又は乗算器1230を含んでもよい。更に別の例として、PE1200は、内部加算器アセンブリ1240の代わりに加算器を含んでもよい。
【】
入力レジスタファイル1210は、PE1200によるMAC演算のための入力オペランドを一時的に記憶する。いくつかの実施形態では、入力レジスタファイル1210は、一度に単一の入力オペランドを記憶してもよい。他の実施形態では、入力レジスタファイル1210は、一度に複数の入力オペランド又は入力オペランドの一部を記憶してもよい。入力オペランドは、入力テンソル内の複数の入力要素(すなわち、入力要素)を含む。入力オペランドの入力要素は、入力レジスタファイル1210に順次記憶されてもよいため、入力要素は順次処理できる。いくつかの実施形態では、入力オペランド内の各入力要素は、入力テンソルの異なる入力チャネルからのものでもよい。入力オペランドは、入力テンソルの入力チャネルのそれぞれからの入力要素を含んでもよく、入力オペランド内の入力要素の数は、入力チャネルの数に等しくてもよい。入力オペランド内の入力要素は、同じ(X,Y)座標を有してもよく、これは、入力オペランドの(X,Y)座標として使用されてもよい。例えば、入力オペランドの全ての入力要素は、X0Y0、X0Y1、X1Y1等でもよい。
【】
重みレジスタファイル1220は、PE1200によるMAC演算のための重みオペランドを一時的に記憶する。重みオペランドは、DNN層のフィルタにおける重みを含む。いくつかの実施形態では、重みレジスタファイル1220は、一度に単一の重みオペランドを記憶してもよい。他の実施形態では、入力レジスタファイル1210は、一度に複数の重みオペランド又は重みオペランドの一部を記憶してもよい。重みオペランドは、複数の重みを含んでもよい。重みオペランドの重みは、重みレジスタファイル1220に順次記憶されてもよいため、重みは順次処理できる。いくつかの実施形態では、重みオペランド及び入力オペランドを伴う乗算演算について、重みオペランド内の各重みは、入力オペランドの入力要素に対応してもよい。重みオペランド内の重みの数は、入力オペランド内の入力要素の数に等しくてもよい。
【】
いくつかの実施形態では、重みレジスタファイル1220は、入力レジスタファイル1210と同じ又は同様でもよく、例えば、同じサイズ等を有してもよい。PE1200は、複数のレジスタファイルを含んでもよく、レジスタファイルのうちいくつかは、入力オペランドを記憶するための入力レジスタファイル1210として指定され、レジスタファイルのうちいくつかは、重みオペランドを記憶するための重みレジスタファイル1220として指定され、レジスタファイルのうちいくつかは、出力オペランドを記憶するための出力レジスタファイル1250として指定される。他の実施形態では、PE1200内のレジスタファイルは、他の目的のために、例えば、要素毎の加算演算で使用されるスケールオペランドを記憶するため等に指定されてもよい。
【】
乗算器1230は、入力オペランド及び重みオペランドに対して乗算演算を実行する。乗算器1230は、単一の入力オペランド及び単一の重みオペランドに対して乗算演算のシーケンスを実行し、積のシーケンスを含む積オペランドを生成してもよい。シーケンス内の各乗算演算は、入力オペランド内の入力要素と重みオペランド内の重みとを乗算することを含む。いくつかの実施形態では、入力オペランド内の入力要素の位置(又はインデックス)は、重みオペランド内の重みの位置(又はインデックス)と一致する。例えば、第1の乗算演算は、入力オペランド内の第1の入力要素と重みオペランド内の第1の重みとの乗算であり、第2の乗算演算は、入力オペランド内の第2の入力要素と重みオペランド内の第2の重みとの乗算であり、第3の乗算演算は、入力オペランド内の第3の入力要素と重みオペランド内の第3の重みとの乗算であり、以下同様である。同じ乗算演算における入力要素及び重みは、同じ深さ方向チャネルに対応してもよく、これらの積も同じ深さ方向チャネルに対応してもよい。
【】
複数の乗算器1230は、乗算演算を同時に実行してもよい。これらの乗算演算は、乗算演算のラウンドと呼ばれてもよい。乗算器1230による乗算演算のラウンドにおいて、乗算器1230のそれぞれは、異なる入力オペランド及び異なる重みオペランドを使用してもよい。異なる入力オペランド又は重みオペランドは、PE1200の異なるレジスタファイルに記憶されてもよい。例えば、第1の乗算器1230は、第1の入力オペランド(例えば、第1の入力レジスタファイル1210に記憶される)及び第1の重みオペランド(例えば、第1の重みレジスタファイル1220に記憶される)を使用し、これに対して、第2の乗算器1230は、第2の入力オペランド(例えば、第2の入力レジスタファイル1210に記憶される)及び第2の重みオペランド(例えば、第2の重みレジスタファイル1220に記憶される)を使用し、第3の乗算器1230は、第3の入力オペランド(例えば、第3の入力レジスタファイル1210に記憶される)及び第3の重みオペランド(例えば、第3の重みレジスタファイル1220に記憶される)を使用し、以下同様である。個々の乗算器1230について、乗算演算のラウンドは、複数のサイクルを含んでもよい。サイクルは、入力要素及び重みに対する乗算演算を含む。
【】
乗算器1230は、複数ラウンドの乗算演算を実行してもよい。乗算器1230は、異なるラウンドにおいて、同じ重みオペランドであるが異なる入力オペランドを使用してもよい。例えば、乗算器1230は、第1のラウンドにおいて第1の入力レジスタファイルに記憶された第1の入力オペランドに対して、第2のラウンドにおいて第2の入力レジスタファイルに記憶された第2の入力オペランドに対して、乗算演算のシーケンスを実行する。第2のラウンドにおいて、異なる乗算器1230は、第1の入力オペランド及び異なる重みオペランドを使用して、乗算演算の別のシーケンスを実行してもよい。このように、第1の入力オペランドは、第2のラウンドにおいて再利用される。第1の入力オペランドは、例えば、更なる乗算器1230によって、更なるラウンドにおいて更に再利用されてもよい。
【】
内部加算器アセンブリ1240は、PE1200の内部に1つ以上の加算器、すなわち、内部加算器を含む。内部加算器アセンブリ1240は、乗算器1230からの2つ以上の積オペランドに対して累算演算を実行し、PE1200の出力オペランドを生成してもよい。いくつかの実施形態では、内部加算器は、一連の階層に配置される。階層は、1つ以上の内部加算器を含む。内部加算器アセンブリ1240の第1の階層について、内部加算器は、2つ以上の乗算器1230から積オペランドを受信し、累算演算のシーケンスを通じて和オペランドを生成してもよい。各累算演算は、2つ以上の積の和を生成し、積のそれぞれは、異なる乗算器1230からのものである。和オペランドは、和のシーケンスを含み、和のそれぞれは、累算演算の結果であり、深さ方向チャネルに対応する。内部加算器アセンブリ1240の他の階層については、或る階層における内部加算器が、シーケンスにおいて先行する階層から和オペランドを受信する。これらの数のそれぞれは、先行する階層における異なる内部加算器によって生成されてもよい。或る階層における内部加算器の数と後続の階層における内部加算器の数との比は、2:1でもよい。いくつかの実施形態では、内部加算器アセンブリ1240の最後の階層は、PE1200の出力オペランドを生成する単一の内部加算器を含んでもよい。
【】
出力レジスタファイル1250は、PE1200の出力オペランドを記憶する。いくつかの実施形態では、出力レジスタファイル1250は、一度に出力オペランドを記憶してもよい。他の実施形態では、出力レジスタファイル1250は、一度に複数の出力オペランド又は出力オペランドの一部を記憶してもよい。出力オペランドは、IFM内の複数の出力要素を含む。出力オペランドの出力要素は、出力レジスタファイル1250に順次記憶されてもよいため、出力要素は順次処理できる。いくつかの実施形態では、出力オペランド内の各出力要素は、異なる深さ方向チャネルに対応し、深さ方向畳み込みの出力チャネルの異なる出力チャネルの要素である。出力オペランド内の出力要素の数は、深さ方向畳み込みの深さ方向チャネルの数に等しくてもよい。
【】
[DNNを修正する例示的な方法]
図13は、様々な実施形態による、DNNを修正する方法1300を示すフローチャートである。方法1300は、図7における圧縮モジュール700によって実行されてもよい。方法1300は、図13に示すフローチャートを参照して記載されるが、DNNを変更するための多くの他の方法が代替として使用されてもよい。例えば、図13のステップの実行順序は変更されてもよい。別の例として、ステップの一部は、変更、削除又は結合されてもよい。
【】
圧縮モジュール700は、データセットをニューラルネットワークに入力する1310。ニューラルネットワークは複数の層を含む。圧縮モジュール700は、複数の層から層を選択する1320。ニューラルネットワークにおける選択された層は、データセットに基づいてテンソルを生成する。いくつかの実施形態では、圧縮モジュール700は、層の内部パラメータの量(例えば、重みの数等)、層における計算の量(例えば、MAC演算の数等)、層のタイプ又はこれらの何らかの組み合わせに基づいて、層を選択する。
【】
圧縮モジュール700は、第1の活性化閾値に基づいて、テンソルにおける活性化の絶対値をゼロに修正することによってテンソルをプルーニングする1330。活性化の絶対値は、第1の活性化閾値よりも低い。
【】
圧縮モジュール700は、ニューラルネットワークの出力に基づいてニューラルネットワークの精度を決定する1340。ニューラルネットワークは、プルーニングされたテンソルに基づいて出力を生成する。
【】
圧縮モジュール700は、第1の活性化閾値及びニューラルネットワークの精度に基づいて、第2の活性化閾値を決定する1350。第2の活性化閾値は、第1の活性化閾値とは異なる値を有する。いくつかの実施形態では、圧縮モジュール700は、ニューラルネットワークの精度に基づいてテンソルをプルーニングすることによって引き起こされる精度損失を決定する。圧縮モジュール700は、精度損失が閾値を超えるか否かを決定する。精度損失が閾値よりも低いと決定したことに応じて、圧縮モジュール700は、第1の活性化閾値を増加させることによって第2の活性化閾値を決定する。精度損失が閾値を超えると決定したことに応じて、圧縮モジュール700は、第1の活性化閾値を減少させることによって第2の活性化閾値を決定する。
【】
いくつかの実施形態では、圧縮モジュール700は、第3の活性化閾値に基づいて第1の活性化閾値を決定する。第3の活性化閾値は、第1の活性化閾値及び第2の活性化閾値とは異なる。第3の活性化閾値は、第1の活性化閾値よりも低くてもよい。いくつかの実施形態では、圧縮モジュール700は、更なるデータセットをニューラルネットワークに入力する。ニューラルネットワークにおける層は、更なるデータセットに基づいて更なるテンソルを生成する。圧縮モジュール700は、第3の活性化閾値に基づいて更なるテンソルをプルーニングする。圧縮モジュール700は、プルーニングされた更なるテンソルに基づいてニューラルネットワークによって生成された更なる出力に基づいて、ニューラルネットワークの更なる精度を決定する。圧縮モジュール700は、第3の活性化閾値及びニューラルネットワークの更なる精度に基づいて第1の活性化閾値を決定する。
【】
圧縮モジュール700は、層に活性化プルーニング動作を追加することによってニューラルネットワークを修正する1360。活性化プルーニング動作は、第2の活性化閾値に基づいて、層によって生成されるべき1つ以上のテンソルをプルーニングすることである。いくつかの実施形態では、圧縮モジュール700は、層に重みプルーニング動作を追加することによって、ニューラルネットワークを更に修正する。活性化プルーニング動作は、重み閾値に基づいて、カーネル内の重みの値をゼロに修正することによって、層のカーネルをプルーニングすることである。重みの値は、重み閾値よりも低い。いくつかの実施形態では、ニューラルネットワークは、重みの値を決定するように訓練されている。いくつかの実施形態では、圧縮モジュール700は、層に重みプルーニング動作を追加した後に第2の活性化閾値を決定する。
【】
図14は、様々な実施形態による、DNNを修正する別の方法1400を示すフローチャートである。方法1400は、図7における圧縮モジュール700によって実行されてもよい。方法1400は、図14に示すフローチャートを参照して記載されるが、DNNを変更するための多くの他の方法が代替として使用されてもよい。例えば、図14のステップの実行順序は変更されてもよい。別の例として、ステップの一部は、変更、削除又は結合されてもよい。
【】
圧縮モジュール700は、データセットをニューラルネットワークに入力する1410。ニューラルネットワークは層を含む。層は重みテンソルを有する。重みテンソルは、フィルタ、カーネル、フィルタ内のベクトル等でもよい。いくつかの実施形態では、圧縮モジュール700は、層の内部パラメータの数、層における演算の数、層のタイプ又はこれらの何らかの組み合わせに基づいて、ニューラルネットワークにおける複数の層から層を選択する。
【】
圧縮モジュール700は、第1の重み閾値に基づいて、重みテンソル内の重みの絶対値をゼロに修正することによって、重みテンソルをプルーニングする1420。重みの絶対値は、第1の重み閾値よりも低い。いくつかの実施形態では、圧縮モジュール700は、重みテンソル内の複数の重みの絶対値、第1の閾値(例えば、最大制約)及び第2の閾値(例えば、最小制約)に基づいて、第1の重み閾値を決定する。第1の重み閾値は、第1の閾値よりも低く、第2の閾値よりも大きい。いくつかの実施形態では、圧縮モジュール700は、重みテンソル内の複数の重みの最小絶対値が第2の閾値よりも低いと決定する。
【】
いくつかの実施形態では、圧縮モジュール700は、複数の重みの絶対値に基づいて1つ以上の分位数を決定する。圧縮モジュール700は、第1の閾値に基づいて1つ以上の分位数から分位数を選択する。圧縮モジュール700は、選択された分位数と第2の閾値とのうちの大きい方を第1の重み閾値として選択する。いくつかの実施形態では、選択された分位数は、1つ以上の分位数のうちの別の分位数の値よりも大きく、第1の閾値よりも低い値を有する。
【】
いくつかの実施形態では、圧縮モジュール700は、第1の重み閾値を決定する。圧縮モジュール700は、更なるデータセットをニューラルネットワークに入力する。圧縮モジュール700は、第1の重み閾値よりも低い第3の重み閾値に基づいて重みテンソルをプルーニングする。圧縮モジュール700は、第3の重み閾値に基づいてプルーニングされた重みテンソルを使用してニューラルネットワークによって生成された更なる出力に基づいて、ニューラルネットワークの更なる精度を決定する。圧縮モジュール700は、ニューラルネットワークの更なる精度に基づいて第1の重み閾値を決定する。
【】
圧縮モジュール700は、ニューラルネットワークの出力に基づいてニューラルネットワークの精度を決定する1430。出力は、プルーニングされた重みテンソルに基づいてニューラルネットワークによって生成される。
【】
圧縮モジュール700は、第1の重み閾値及びニューラルネットワークの精度に基づいて、第2の重み閾値を決定する1440。第2の重み閾値は、第1の重み閾値とは異なる値を有する。いくつかの実施形態では、圧縮モジュール700は、ニューラルネットワークの精度に基づいて、重みテンソルをプルーニングすることによって引き起こされる精度損失を決定する。圧縮モジュール700は、精度損失が閾値未満であるか否かを決定する。精度損失が閾値未満であると決定したことに応じて、圧縮モジュール700は、第2の閾値を増加させることによって第2の重み閾値を決定する。精度損失が閾値以上であると決定したことに応じて、圧縮モジュール700は、所定の重み閾値に基づいて第2の重み閾値を決定する。所定の重量閾値は、第1の重量閾値よりも低い。
【】
圧縮モジュール700は、層に重みプルーニング動作を追加することによってニューラルネットワークを修正する1450。重みプルーニング動作は、第2の重み閾値に基づいて重みテンソルをプルーニングすることである。いくつかの実施形態では、圧縮モジュール700は、層に活性化プルーニング動作を追加することによってニューラルネットワークを更に修正し、活性化プルーニング動作は、重みテンソルが重みプルーニング動作によってプルーニングされた後に、重みテンソルを使用して層によって生成されたテンソルをプルーニングする。
【】
[例示的な計算デバイス]
図15は、様々な実施形態による例示的な計算デバイス1500のブロック図である。いくつかの実施形態では、計算デバイス1500は、DNNシステム300の少なくとも一部として使用できる。図15では、計算デバイス1500に含まれるものとして多数の構成要素が示されているが、これらの構成要素のうちいずれか1つ以上は、用途に応じて省略又は複製されてもよい。いくつかの実施形態では、計算デバイス1500に含まれる構成要素の一部又は全部は、1つ以上のマザーボードに取り付けられてもよい。いくつかの実施形態では、これらの構成要素の一部又は全部は、単一のシステムオンチップ(SoC)ダイ上に製造される。さらに、様々な実施形態では、計算デバイス1500は、図15に示す構成要素のうち1つ以上を含まなくてもよいが、計算デバイス1500は、1つ以上の構成要素に結合するためのインタフェース回路を含んでもよい。例えば、計算デバイス1500は、ディスプレイデバイス1506を含まなくてもよいが、ディスプレイデバイス1506が結合され得るディスプレイデバイスインタフェース回路(例えば、コネクタ及びドライバ回路)を含んでもよい。別のセットの例では、計算デバイス1500は、音声入力デバイス1518又は音声出力デバイス1508を含まなくてもよいが、音声入力デバイス1518又は音声出力デバイス1508が結合され得る音声入力又は出力デバイスインタフェース回路(例えば、コネクタ及びサポート回路)を含んでもよい。
【】
計算デバイス1500は、処理デバイス1502(例えば、1つ以上の処理デバイス)を含んでもよい。処理デバイス1502は、レジスタ及び/又はメモリからの電子データを処理して、その電子データを、レジスタ及び/又はメモリに記憶され得る他の電子データに変換する。計算デバイス1500は、メモリ1504を含んでもよく、それ自体が、揮発性メモリ(例えば、DRAM)、不揮発性メモリ(例えば、読み取り専用メモリ(ROM))、高帯域幅メモリ(HBM)、フラッシュメモリ、ソリッドステートメモリ及び/又はハードドライブのような1つ以上のメモリデバイスを含んでもよい。いくつかの実施形態では、メモリ1504は、処理デバイス1502とダイを共有するメモリを含んでもよい。いくつかの実施形態では、メモリ1504は、DNNにおける重みをプルーニングするための演算、例えば、図13に関連してに説明した方法1300、又は図6に関連してに説明したDNNモジュール600(例えば、圧縮モジュール630等)によって実行されるいくつかの演算を実行するための実行可能命令を記憶する1つ以上の非一時的なコンピュータ可読媒体を含む。1つ以上の非一時的なコンピュータ可読媒体に記憶される命令は、処理デバイス1502によって実行されてもよい。
【】
いくつかの実施形態では、計算デバイス1500は、通信チップ1512(例えば、1つ以上の通信チップ)を含んでもよい。例えば、通信チップ1512は、計算デバイス1500に且つ計算デバイス1500から、データを転送するためのワイヤレス通信を管理するように構成されてもよい。「ワイヤレス」という用語及びその派生語は、非固体媒体を通じた変調済みの電磁放射の使用を通じてデータを通信し得る回路、デバイス、システム、方法、技術、通信チャネル等を記述するために使用されてもよい。この用語は、関連するデバイスが如何なるワイヤも含まないことを意味するものではないが、いくつかの実施形態ではワイヤを含まなくてもよい。
【】
通信チップ1512は、多数のワイヤレス標準又はプロトコルのうちいずれかを実装してもよく、ワイヤレス標準又はプロトコルは、Wi-Fi(IEEE802.10ファミリー)、IEEE802.16標準(例えば、IEEE802.16-2005改訂版)を含む電気電子技術者協会(IEEE)標準、いずれかの修正、更新及び/又は改訂を伴うロングタームエボリューション(LTE)プロジェクト(例えば、アドバンストLTEプロジェクト、ウルトラモバイルブロードバンド(UMB)プロジェクト(「3GPP2」とも呼ばれる)等)を含むが、これらに限定されない。IEEE802.16対応のブロードバンドワイヤレスアクセス(BWA)ネットワークは、一般的に、ワールドワイド・インターオペラビリティ・フォー・マイクロウェーブ・アクセスを表す頭字語であるWiMAXネットワークと呼ばれ、これは、IEEE802.16標準のための適合性及び相互運用性テストに合格する製品のための証明マークである。通信チップ1512は、グローバル・システム・フォー・モバイル・コミュニケーション(GSM)、汎用パケット無線サービス(GPRS)、ユニバーサル・モバイル・テレコミュニケーションズ・システム(UMTS)、高速パケットアクセス(HSPA)、進化型HSPA(E-HSPA)又はLTEネットワークに従って動作してもよい。通信チップ1512は、エンハンスト・データ・フォー・GSMエボリューション(EDGE)、GSM EDGE無線アクセスネットワーク(GERAN)、ユニバーサル地上無線アクセスネットワーク(UTRAN)又は進化型UTRAN(E-UTRAN)に従って動作してもよい。通信チップ1512は、符号分割多元接続(CDMA)、時分割多元接続(TDMA)、デジタル拡張コードレス電気通信(DECT)、エボリューションデータ最適化(EV-DO)及びこれらの派生物、並びに3G、4G、5G及びそれ以降として指定されるいずれかの他のワイヤレスプロトコルに従って動作してもよい。通信チップ1512は、他の実施形態では、他のワイヤレスプロトコルに従って動作してもよい。計算デバイス1500は、ワイヤレス通信を促進するため、及び/又は他のワイヤレス通信(AM又はFM無線伝送等)を受信するためのアンテナ1522を含んでもよい。
【】
いくつかの実施形態では、通信チップ1512は、電気的、光学的又はいずれかの他の適切な通信プロトコル(例えば、イーサーネット)のような有線通信を管理してもよい。のように、通信チップ1512は、複数の通信チップを含んでもよい。例えば、第1の通信チップ1512は、Wi-Fi又はBluetoothのような短距離ワイヤレス通信に専用でもよく、第2の通信チップ1512は、グローバルポジショニングシステム(GPS)、EDGE、GPRS、CDMA、WiMAX、LTE、EV-DO又はその他のもののような長距離ワイヤレス通信に専用でもよい。いくつかの実施形態では、第1の通信チップ1512は、ワイヤレス通信に専用でもよく、第2の通信チップ1512は、有線通信に専用でもよい。
【】
計算デバイス1500は、バッテリ/電源回路1514を含んでもよい。バッテリ/電源回路1514は、1つ以上のエネルギー貯蔵デバイス(例えば、バッテリ又はキャパシタ)、及び/又は計算デバイス1500の構成要素を計算デバイス1500とは別個のエネルギー源(例えば、ACライン電力)に結合するための回路を含んでもよい。
【】
計算デバイス1500は、ディスプレイデバイス1506(又はのような対応するインタフェース回路)を含んでもよい。ディスプレイデバイス1506は、例えば、ヘッドアップディスプレイ、コンピュータモニタ、プロジェクタ、タッチスクリーン・ディスプレイ、液晶ディスプレイ(LCD)、発光ダイオードディスプレイ又はフラットパネルディスプレイのようないずれかの視覚的インジケータを含んでもよい。
【】
計算デバイス1500は、オーディオ出力デバイス1508(又はのような対応するインタフェース回路)を含んでもよい。音声出力デバイス1508は、例えば、スピーカ、ヘッドセット又はイヤホンのような可聴インジケータを生成するいずれかのデバイスを含んでもよい。
【】
計算デバイス1500は、オーディオ入力デバイス1518(又はのような対応するインタフェース回路)を含んでもよい。オーディオ入力デバイス1518は、マイクロフォン、マイクロフォンアレイ又はデジタル楽器(例えば、MIDI(musical instrument digital interface)出力を有する楽器)のような、音を表す信号を生成するいずれかのデバイスを含んでもよい。
【】
計算デバイス1500は、GPSデバイス1516(又はのような対応するインタフェース回路)を含んでもよい。GPSデバイス1516は、衛星ベースのシステムと通信し、当該技術分野で知られているように、計算デバイス1500の位置を受信してもよい。
【】
計算デバイス1500は、別の出力デバイス1510(又はのような対応するインタフェース回路)を含んでもよい。他の出力デバイス1510の例は、オーディオコーデック、ビデオコーデック、プリンタ、他のデバイスに情報を提供するための有線若しくはワイヤレス送信機、又は更なる記憶デバイスを含んでもよい。
【】
計算デバイス1500は、別の入力デバイス1520(又はのような対応するインタフェース回路)を含んでもよい。他の入力デバイス1520の例は、加速度計、ジャイロスコープ、コンパス、画像キャプチャデバイス、キーボード、マウスのようなカーソル制御デバイス、スタイラス、タッチパッド、バーコードリーダー、クイックレスポンス(QR)コードリーダー、いずれかのセンサー、又は無線周波数識別(RFID)リーダーを含んでもよい。
【】
計算デバイス1500は、ハンドヘルド又はモバイルコンピュータシステム(例えば、携帯電話、スマートフォン、モバイルインターネットデバイス、音楽プレーヤ、タブレットコンピュータ、ラップトップコンピュータ、ネットブックコンピュータ、ウルトラブックコンピュータ、パーソナルデジタルアシスタント(PDA)、ウルトラモバイルパーソナルコンピュータ等)、デスクトップコンピュータシステム、サーバ又は他のネットワーク接続された計算構成要素、プリンタ、スキャナ、モニタ、セットトップボックス、エンターテインメント制御ユニット、車両制御ユニット、デジタルカメラ、デジタルビデオレコーダ、又はウェアラブルコンピュータシステムのような、いずれかの所望の形状因子を有してもよい。いくつかの実施形態では、計算デバイス1500は、データを処理するいずれかの他の電子デバイスでもよい。
【】
[選択例]
以下の段落は、本明細書に開示される実施形態の様々な例を提供する。
【】
例1は、ニューラルネットワークを修正するための方法を提供し、データセットをニューラルネットワークに入力するステップであり、ニューラルネットワークは複数の層を含む、ステップと、ニューラルネットワークにおける複数の層から層を選択するステップであり、ニューラルネットワークにおける選択された層はデータセットに基づいてテンソルを生成する、ステップと、第1の活性化閾値に基づいて、テンソルにおける活性化の絶対値をゼロに修正することによってテンソルをプルーニングするステップであり、活性化の絶対値は、第1の活性化閾値よりも低い、ステップと、ニューラルネットワークの出力に基づいて、ニューラルネットワークの精度を決定するステップであり、ニューラルネットワークは、プルーニングされたテンソルに基づいて出力を生成する、ステップと、第1の活性化閾値及びニューラルネットワークの精度に基づいて第2の活性化閾値を決定するステップであり、第2の活性化閾値は、第1の活性化閾値とは異なる値を有する、ステップと、層に活性化プルーニング動作を追加することによってニューラルネットワークを修正するステップであり、活性化プルーニング動作は、第2の活性化閾値に基づいて層によって生成されるべき1つ以上のテンソルをプルーニングする、ステップとを含む。
【】
例2は、例1の方法を提供し、第2の活性化閾値を決定するステップは、ニューラルネットワークの精度に基づいてテンソルをプルーニングすることによって引き起こされる精度損失を決定するステップと、精度損失が閾値を超えるか否かを決定するステップと、精度損失が閾値よりも低いと決定したことに応じて、第1の活性化閾値を増加させることによって第2の活性化閾値を決定するステップとを含む。
【】
例3は、例2の方法を提供し、第2の活性化閾値を決定するステップは、精度損失が閾値を超えると決定したことに応じて、第1の活性化閾値を減少させることによって第2の活性化閾値を決定するステップを更に含む。
【】
例4は、例1~3のいずれか1つの方法を提供し、第3の活性化閾値に基づいて第1の活性化閾値を決定するステップであり、第3の活性化閾値は、第1の活性化閾値及び第2の活性化閾値とは異なる、ステップを更に含む。
【】
例5は、例4の方法を提供し、第1の活性化閾値を決定するステップは、更なるデータセットをニューラルネットワークに入力するステップであり、ニューラルネットワークにおける選択された層は、更なるデータセットに基づいて更なるテンソルを生成する、ステップと、第3の活性化閾値に基づいて更なるテンソルをプルーニングするステップと、プルーニングされた更なるテンソルに基づいてニューラルネットワークによって生成された更なる出力に基づいて、ニューラルネットワークの更なる精度を決定するステップと、第3の活性化閾値及びニューラルネットワークの更なる精度に基づいて、第1の活性化閾値を決定するステップとを含む。
【】
例6は、例1~5のいずれか1つの方法を提供し、ニューラルネットワークにおける別の層を選択するステップと、別の層に別の活性化プルーニング動作を追加することによってニューラルネットワークを修正するステップであり、別の活性化プルーニング動作は、別の活性化閾値に基づいて別の層によって生成されるべき1つ以上のテンソルをプルーニングする、ステップとを更に含む。
【】
例7は、例1~6のいずれか1つの方法を提供し、層を選択するステップは、層の内部パラメータの量、層における計算の量、層のタイプ又はこれらの何らかの組み合わせに基づいて層を選択するステップを含む。
【】
例8は、例1~7のいずれか1つの方法を提供し、選択された層に重みプルーニング動作を追加することによってニューラルネットワークを更に修正するステップであり、活性化プルーニング動作は、重み閾値に基づいて、カーネルにおける重みの絶対値をゼロに修正することによって、選択された層のカーネルをプルーニングし、重みの絶対値は、重み閾値よりも低い、ステップを更に含む。
【】
例9は、例8の方法を提供し、ニューラルネットワークは、重みの絶対値を決定するように訓練されている。
【】
例10は、例8又は9の方法を提供し、第2の活性化閾値を決定するステップは、層に重みプルーニング動作を追加した後に第2の活性化閾値を決定するステップを含む。
【】
例11は、ニューラルネットワークを修正するための動作を実行するように実行可能な命令を記憶する1つ以上の非一時的なコンピュータ可読媒体を提供し、動作は、データセットをニューラルネットワークに入力することであり、ニューラルネットワークは複数の層を含むことと、ニューラルネットワークにおける複数の層から層を選択することであり、ニューラルネットワークにおける選択された層はデータセットに基づいてテンソルを生成することと、第1の活性化閾値に基づいて、テンソルにおける活性化の絶対値をゼロに修正することによってテンソルをプルーニングすることであり、活性化の絶対値は、第1の活性化閾値よりも低いことと、ニューラルネットワークの出力に基づいて、ニューラルネットワークの精度を決定することであり、ニューラルネットワークは、プルーニングされたテンソルに基づいて出力を生成することと、第1の活性化閾値及びニューラルネットワークの精度に基づいて第2の活性化閾値を決定することであり、第2の活性化閾値は、第1の活性化閾値とは異なる値を有することと、層に活性化プルーニング動作を追加することによってニューラルネットワークを修正することであり、活性化プルーニング動作は、第2の活性化閾値に基づいて層によって生成されるべき1つ以上のテンソルをプルーニングすることとを含む。
【】
例12は、例11の1つ以上の非一時的なコンピュータ可読媒体を提供し、第2の活性化閾値を決定することは、ニューラルネットワークの精度に基づいてテンソルをプルーニングすることによって引き起こされる精度損失を決定することと、精度損失が閾値を超えるか否かを決定することと、精度損失が閾値よりも低いと決定したことに応じて、第1の活性化閾値を増加させることによって第2の活性化閾値を決定することとを含む。
【】
例13は、例12の1つ以上の非一時的なコンピュータ可読媒体を提供し、第2の活性化閾値を決定することは、精度損失が閾値を超えると決定したことに応じて、第1の活性化閾値を減少させることによって第2の活性化閾値を決定することを更に含む。
【】
例14は、例11~13のいずれか1つの非一時的なコンピュータ可読媒体を提供し、動作は、第3の活性化閾値に基づいて第1の活性化閾値を決定することであり、第3の活性化閾値は、第1の活性化閾値及び第2の活性化閾値とは異なることを更に含む。
【】
例15は、例14の非一時的なコンピュータ可読媒体を提供し、第1の活性化閾値を決定することは、更なるデータセットをニューラルネットワークに入力することであり、ニューラルネットワークにおける選択された層は、更なるデータセットに基づいて更なるテンソルを生成することと、第3の活性化閾値に基づいて更なるテンソルをプルーニングすることと、プルーニングされた更なるテンソルに基づいてニューラルネットワークによって生成された更なる出力に基づいて、ニューラルネットワークの更なる精度を決定することと、第3の活性化閾値及びニューラルネットワークの更なる精度に基づいて、第1の活性化閾値を決定することとを含む。
【】
例16は、例11~15のいずれか1つの非一時的なコンピュータ可読媒体を提供し、動作は、ニューラルネットワークにおける別の層を選択することと、別の層に別の活性化プルーニング動作を追加することによってニューラルネットワークを修正することであり、別の活性化プルーニング動作は、別の活性化閾値に基づいて別の層によって生成されるべき1つ以上のテンソルをプルーニングすることとを更に含む。
【】
例17は、例11~16のいずれか1つの非一時的なコンピュータ可読媒体を提供し、層を選択することは、層の内部パラメータの量、層における計算の量、層のタイプ又はこれらの何らかの組み合わせに基づいて層を選択することを含む。
【】
例18は、例11~17のいずれか1つの非一時的なコンピュータ可読媒体を提供し、動作は、選択された層に重みプルーニング動作を追加することによってニューラルネットワークを更に修正することであり、活性化プルーニング動作は、重み閾値に基づいて、カーネルにおける重みの絶対値をゼロに修正することによって、選択された層のカーネルをプルーニングし、重みの絶対値は、重み閾値よりも低いことを更に含む。
【】
例19は、例18の非一時的なコンピュータ可読媒体を提供し、ニューラルネットワークは、重みの絶対値を決定するように訓練されている。
【】
例20は、例18又は19の非一時的なコンピュータ可読媒体を提供し、第2の活性化閾値を決定することは、層に重みプルーニング動作を追加した後に第2の活性化閾値を決定することを含む。
【】
例21は、コンピュータプログラム命令を実行するためのコンピュータプロセッサと、ニューラルネットワークを修正するための動作を実行するようにコンピュータプロセッサによって実行可能なコンピュータプログラム命令を記憶する非一時的なコンピュータ可読メモリとを含む装置を提供し、動作は、データセットをニューラルネットワークに入力することであり、ニューラルネットワークは複数の層を含むことと、ニューラルネットワークにおける複数の層から層を選択することであり、ニューラルネットワークにおける選択された層はデータセットに基づいてテンソルを生成することと、第1の活性化閾値に基づいて、テンソルにおける活性化の絶対値をゼロに修正することによってテンソルをプルーニングすることであり、活性化の絶対値は、第1の活性化閾値よりも低いことと、ニューラルネットワークの出力に基づいて、ニューラルネットワークの精度を決定することであり、ニューラルネットワークは、プルーニングされたテンソルに基づいて出力を生成することと、第1の活性化閾値及びニューラルネットワークの精度に基づいて第2の活性化閾値を決定することであり、第2の活性化閾値は、第1の活性化閾値とは異なる値を有することと、層に活性化プルーニング動作を追加することによってニューラルネットワークを修正することであり、活性化プルーニング動作は、第2の活性化閾値に基づいて層によって生成されるべき1つ以上のテンソルをプルーニングすることとを含む。
【】
例22は、例21の装置を提供し、第2の活性化閾値を決定することは、ニューラルネットワークの精度に基づいてテンソルをプルーニングすることによって引き起こされる精度損失を決定することと、精度損失が閾値を超えるか否かを決定することと、精度損失が閾値よりも低いと決定したことに応じて、第1の活性化閾値を増加させることによって第2の活性化閾値を決定することと、精度損失が閾値を超えると決定したことに応じて、第1の活性化閾値を減少させることによって第2の活性化閾値を決定することとを含む。
【】
例23は、例21又は22の装置を提供し、動作は、更なるデータセットをニューラルネットワークに入力することであり、ニューラルネットワークにおける層は、更なるデータセットに基づいて更なるテンソルを生成することと、第3の活性化閾値に基づいて更なるテンソルをプルーニングすることであり、第3の活性化閾値は、第1の活性化閾値及び第2の活性化閾値とは異なることと、プルーニングされた更なるテンソルに基づいてニューラルネットワークによって生成された更なる出力に基づいて、ニューラルネットワークの更なる精度を決定することと、第3の活性化閾値及びニューラルネットワークの更なる精度に基づいて、第1の活性化閾値を決定することとによって、第3の活性化閾値に基づいて第1の活性化閾値を決定することを更に含む。
【】
例24は、例21~23のいずれか1つの装置を提供し、動作は、層に重みプルーニング動作を追加することによってニューラルネットワークを更に修正することであり、活性化プルーニング動作は、重み閾値に基づいて、カーネルにおける重みの絶対値をゼロに修正することによって、層のカーネルをプルーニングし、重みの絶対値は、重み閾値よりも低いことを更に含む。
【】
例25は、例21~24のいずれか1つの装置を提供し、動作は、ニューラルネットワークにおける別の層を選択することと、別の層に別の活性化プルーニング動作を追加することによってニューラルネットワークを修正することであり、別の活性化プルーニング動作は、別の活性化閾値に基づいて別の層によって生成されるべき1つ以上のテンソルをプルーニングすることとを更に含む。
【】
[更なる選択例]
以下の段落は、本明細書に開示される実施形態の様々な例を提供する。
【】
例1は、ニューラルネットワークを修正する方法を提供し、データセットをニューラルネットワークに入力するステップであり、ニューラルネットワークは層を含み、層は重みテンソルを有する、ステップと、第1の重み閾値に基づいて、重みテンソルにおける重みの絶対値をゼロに修正することによって重みテンソルをプルーニングするステップであり、重みの絶対値は、第1の重み閾値よりも低い、ステップと、ニューラルネットワークの出力に基づいてニューラルネットワークの精度を決定するステップであり、出力は、プルーニングされた重みテンソルに基づいてニューラルネットワークによって生成される、ステップと、第1の重み閾値及びニューラルネットワークの精度に基づいて第2の重み閾値を決定するステップであり、第2の重み閾値は、第1の重み閾値とは異なる値を有する、ステップと、層に重みプルーニング動作を追加することによってニューラルネットワークを修正するステップであり、重みプルーニング動作は、第2の重み閾値に基づいて1つ以上の重みテンソルをプルーニングする、ステップとを含む。
【】
例2は、例1の方法を提供し、重みテンソルにおける複数の重みの絶対値、第1の閾値及び第2の閾値に基づいて、第1の重み閾値を決定するステップであり、第1の重み閾値は、第1の閾値よりも低く、第2の閾値よりも大きい、ステップを更に含む。
【】
例3は、例2の方法を提供し、第1の重み閾値を決定するステップは、複数の重みの絶対値に基づいて1つ以上の分位数を決定するステップと、第1の閾値に基づいて1つ以上の分位数から分位数を選択するステップと、選択された分位数及び第2の閾値のうちの大きい方を第1の重み閾値として選択するステップとを含む。
【】
例4は、例3の方法を提供し、選択された分位数が、1つ以上の分位数のうちの別の分位点の値よりも大きく、第1の閾値よりも低い値を有する。
【】
例5は、例2~4のいずれか1つの方法を提供し、第2の重み閾値を決定するステップは、ニューラルネットワークの精度に基づいて重みテンソルをプルーニングすることによって引き起こされる精度損失を決定するステップと、精度損失が閾値よりも小さいか否かを決定するステップと、精度損失が閾値よりも小さいと決定したことに応じて、第2の閾値を増加させることによって第2の重み閾値を決定するステップとを含む。
【】
例6は、例5の方法を提供し、第2の重み閾値を決定するステップは、精度損失が閾値以上であると決定したことに応じて、所定の重み閾値に基づいて第2の重み閾値を決定するステップであり、所定の重み閾値は、第1の重み閾値よりも低い、ステップを更に含む。
【】
例7は、例2~6のいずれか1つの方法を提供し、重みテンソルにおける複数の重みの最小絶対値が第2の閾値よりも低いと決定するステップを更に含む。
【】
例8は、例1~7のいずれか1つの方法を提供し、更なるデータセットをニューラルネットワークに入力するステップと、第1の重み閾値よりも低い第3の重み閾値に基づいて重みテンソルをプルーニングするステップと、第3の重み閾値に基づいてプルーニングされた重みテンソルを使用してニューラルネットワークによって生成された更なる出力に基づいてニューラルネットワークの更なる精度を決定するステップと、ニューラルネットワークの更なる精度に基づいて第1の活性化閾値を決定するステップとによって、第1の重み閾値を決定するステップを更に含む。
【】
例9は、例1~8のいずれか1つの方法を提供し、層の内部パラメータの数、層における演算の数、層のタイプ又はこれらの何らかの組み合わせに基づいて、ニューラルネットワークにおける複数の層から層を選択するステップを更に含む。
【】
例10は、例1~9のいずれか1つの方法を提供し、層に活性化プルーニング動作を追加することによってニューラルネットワークを更に修正するステップであり、活性化プルーニング動作は、重みテンソルが重みプルーニング動作によってプルーニングされた後に、重みテンソルを使用して層によって生成されたテンソルをプルーニングする、ステップを更に含む。
【】
例11は、ニューラルネットワークを修正するための動作を実行するように実行可能な命令を記憶する1つ以上の非一時的なコンピュータ可読媒体を提供し、動作は、データセットをニューラルネットワークに入力することであり、ニューラルネットワークは層を含み、層は重みテンソルを有することと、第1の重み閾値に基づいて、重みテンソルにおける重みの絶対値をゼロに修正することによって重みテンソルをプルーニングすることであり、重みの絶対値は、第1の重み閾値よりも低いことと、ニューラルネットワークの出力に基づいてニューラルネットワークの精度を決定することであり、出力は、プルーニングされた重みテンソルに基づいてニューラルネットワークによって生成されることと、第1の重み閾値及びニューラルネットワークの精度に基づいて第2の重み閾値を決定することであり、第2の重み閾値は、第1の重み閾値とは異なる値を有することと、層に重みプルーニング動作を追加することによってニューラルネットワークを修正することであり、重みプルーニング動作は、第2の重み閾値に基づいて1つ以上の重みテンソルをプルーニングすることとを含む。
【】
例12は、例11の非一時的なコンピュータ可読媒体を提供し、動作は、重みテンソルにおける複数の重みの絶対値、第1の閾値及び第2の閾値に基づいて、第1の重み閾値を決定することであり、第1の重み閾値は、第1の閾値よりも低く、第2の閾値よりも大きいことを更に含む。
【】
例13は、例12の非一時的なコンピュータ可読媒体を提供し、第1の重み閾値を決定することは、複数の重みの絶対値に基づいて1つ以上の分位数を決定するステップと、第1の閾値に基づいて1つ以上の分位数から分位数を選択することと、選択された分位数及び第2の閾値のうちの大きい方を第1の重み閾値として選択することとを含む。
【】
例14は、例12又は13の非一時的なコンピュータ可読媒体を提供し、第2の重み閾値を決定することは、ニューラルネットワークの精度に基づいて重みテンソルをプルーニングすることによって引き起こされる精度損失を決定することと、精度損失が閾値よりも小さいか否かを決定することと、精度損失が閾値よりも小さいと決定したことに応じて、第2の閾値を増加させることによって第2の重み閾値を決定することと、精度損失が閾値以上であると決定したことに応じて、所定の重み閾値に基づいて第2の重み閾値を決定することであり、所定の重み閾値は、第1の重み閾値よりも低いことを含む。
【】
例15は、例11~14のいずれか1つの非一時的なコンピュータ可読媒体を提供し、動作は、更なるデータセットをニューラルネットワークに入力することと、第1の重み閾値よりも低い第3の重み閾値に基づいて重みテンソルをプルーニングすることと、第3の重み閾値に基づいてプルーニングされた重みテンソルを使用してニューラルネットワークによって生成された更なる出力に基づいてニューラルネットワークの更なる精度を決定することと、ニューラルネットワークの更なる精度に基づいて第1の活性化閾値を決定することとによって、第1の重み閾値を決定することを更に含む。
【】
例16は、例11~15のいずれか1つの非一時的なコンピュータ可読媒体を提供し、動作は、層に活性化プルーニング動作を追加することによってニューラルネットワークを更に修正することであり、活性化プルーニング動作は、重みテンソルが重みプルーニング動作によってプルーニングされた後に、重みテンソルを使用して層によって生成されたテンソルをプルーニングすることを更に含む。
【】
例17は、コンピュータプログラム命令を実行するためのコンピュータプロセッサと、ニューラルネットワークを修正するための動作を実行するようにコンピュータプロセッサによって実行可能なコンピュータプログラム命令を記憶する非一時的なコンピュータ可読メモリとを含む装置を提供し、動作は、データセットをニューラルネットワークに入力することであり、ニューラルネットワークは層を含み、層は重みテンソルを有することと、第1の重み閾値に基づいて、重みテンソルにおける重みの絶対値をゼロに修正することによって重みテンソルをプルーニングすることであり、重みの絶対値は、第1の重み閾値よりも低いことと、ニューラルネットワークの出力に基づいてニューラルネットワークの精度を決定することであり、出力は、プルーニングされた重みテンソルに基づいてニューラルネットワークによって生成されることと、第1の重み閾値及びニューラルネットワークの精度に基づいて第2の重み閾値を決定することであり、第2の重み閾値は、第1の重み閾値とは異なる値を有することと、層に重みプルーニング動作を追加することによってニューラルネットワークを修正することであり、重みプルーニング動作は、第2の重み閾値に基づいて1つ以上の重みテンソルをプルーニングすることとを含む。
【】
例18は、例17の装置を提供し、動作は、重みテンソルにおける複数の重みの絶対値、第1の閾値及び第2の閾値に基づいて、第1の重み閾値を決定することであり、第1の重み閾値は、第1の閾値よりも低く、第2の閾値よりも大きいことを更に含む。
【】
例19は、例18の装置を提供し、第1の重み閾値を決定することは、複数の重みの絶対値に基づいて1つ以上の分位数を決定するステップと、第1の閾値に基づいて1つ以上の分位数から分位数を選択することと、選択された分位数及び第2の閾値のうちの大きい方を第1の重み閾値として選択することとを含む。
【】
例20は、例18又は19の装置を提供し、第2の重み閾値を決定することは、ニューラルネットワークの精度に基づいて重みテンソルをプルーニングすることによって引き起こされる精度損失を決定することと、精度損失が閾値よりも小さいか否かを決定することと、精度損失が閾値よりも小さいと決定したことに応じて、第2の閾値を増加させることによって第2の重み閾値を決定することと、精度損失が閾値以上であると決定したことに応じて、所定の重み閾値に基づいて第2の重み閾値を決定することであり、所定の重み閾値は、第1の重み閾値よりも低いことを含む。
【】
要約書に記載されているものを含む本開示の例示の実装形式のの説明は、網羅的であることを意図するものではなく、或いは本開示を開示された厳密な形式に限定することを意図するものではない。本開示の特定の実装形式及び例は、例示の目的で本明細書に記載されているが、当業者が認識するように、本開示の範囲内で様々な等価な修正が可能である。これらの修正は、の詳細な説明に照らして本開示に対して行われてもよい。
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【国際調査報告】