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

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

▶ マイクロソフト テクノロジー ライセンシング,エルエルシーの特許一覧

特表2024-527467ニューラルネットワークのための狭いデータフォーマットのスパース化
<>
  • 特表-ニューラルネットワークのための狭いデータフォーマットのスパース化 図1
  • 特表-ニューラルネットワークのための狭いデータフォーマットのスパース化 図2
  • 特表-ニューラルネットワークのための狭いデータフォーマットのスパース化 図3
  • 特表-ニューラルネットワークのための狭いデータフォーマットのスパース化 図4
  • 特表-ニューラルネットワークのための狭いデータフォーマットのスパース化 図5
  • 特表-ニューラルネットワークのための狭いデータフォーマットのスパース化 図6
  • 特表-ニューラルネットワークのための狭いデータフォーマットのスパース化 図7
  • 特表-ニューラルネットワークのための狭いデータフォーマットのスパース化 図8
  • 特表-ニューラルネットワークのための狭いデータフォーマットのスパース化 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-07-25
(54)【発明の名称】ニューラルネットワークのための狭いデータフォーマットのスパース化
(51)【国際特許分類】
   G06N 3/0495 20230101AFI20240718BHJP
   G06F 17/16 20060101ALI20240718BHJP
【FI】
G06N3/0495
G06F17/16 P
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023575388
(86)(22)【出願日】2022-05-12
(85)【翻訳文提出日】2023-12-06
(86)【国際出願番号】 US2022028875
(87)【国際公開番号】W WO2022265746
(87)【国際公開日】2022-12-22
(31)【優先権主張番号】17/349,848
(32)【優先日】2021-06-16
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Blu-ray
(71)【出願人】
【識別番号】314015767
【氏名又は名称】マイクロソフト テクノロジー ライセンシング,エルエルシー
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ダルビッシュ ロハニ,ビタ
(72)【発明者】
【氏名】エランゴ,ヴェンムギル
(72)【発明者】
【氏名】チュン,エリック エス.
(72)【発明者】
【氏名】バーガー,ダグラス シー.
(72)【発明者】
【氏名】ヘデス,マテウス シー.
(72)【発明者】
【氏名】シャー,ニシット
(72)【発明者】
【氏名】シャフィプール,ラソウル
(72)【発明者】
【氏名】モア,アンキット
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056AA06
5B056BB26
5B056BB35
5B056BB38
5B056BB71
5B056CC01
5B056HH03
5B056HH05
(57)【要約】
本開示の実施形態は、ニューラルネットワークのための狭いデータフォーマットをスパース化するためのシステム及び方法を含む。ニューラルネットワークにおける複数の活性化値は、多重化ユニットに提供される。複数の重み値に対してスパース化演算のセットが実行されて、複数の重み値のサブセット及び複数の重み値に関連するマスク値を生成する。複数の重み値のサブセットは、行列乗算ユニットに提供される。多重化ユニットは、マスク値に基づいて複数の活性化値のサブセットを生成し、複数の活性化値のサブセットを行列乗算ユニットに提供する。行列乗算ユニットは、複数の重み値のサブセット及び複数の活性化値のサブセットに対して行列乗算演算のセットを実行して、出力のセットを生成する。
【特許請求の範囲】
【請求項1】
装置の少なくとも1つの処理ユニットによって実行可能なプログラムを記憶している機械可読媒体であって、前記プログラムは、
ニューラルネットワークにおける第1層から受信した複数の活性化値を、前記ニューラルネットワークにおける第2層を実装するように構成された多重化ユニットに提供し、前記複数の活性化値は、第1の複数の下位ビット仮数値及び第1共有指数値を使用して表され、
前記ニューラルネットワークにおける前記第2層に含まれる複数の重み値に対して、スパース化演算のセットを実行して、前記複数の重み値のサブセットと前記複数の重み値に関連する複数のマスク値とを生成し、前記複数の重み値は、第1の複数の下位ビット仮数値及び第2共有指数値を使用して表され、
前記複数の重み値のサブセットを、前記ニューラルネットワークにおける前記第2層を実装するように構成された行列乗算ユニットに提供する、
ための命令のセットを含み、
前記多重化ユニットは、前記複数のマスク値に基づいて前記複数の活性化値のサブセットを生成し、前記複数の活性化値のサブセットを前記行列乗算ユニットに提供するように更に構成され、
前記行列乗算ユニットは、前記複数の重み値のサブセット及び前記複数の活性化値のサブセットに対して行列乗算演算のセットを実行して出力のセットを生成するように構成され、
前記複数の重み値に対してスパース化演算のセットを実行することが、前記行列乗算ユニットが前記複数の活性化値と前記複数の重み値との積を生成するために実行するサイクル数を減少させる、機械可読媒体。
【請求項2】
前記スパース化演算のセットを実行することは、
定義されたグループサイズに基づいて、前記複数の重み値を重み値のグループに分割することと、
前記重み値のグループ内の重み値の各グループについて、該重み値のグループ内の、最も高い値を有する重み値の定義された比率を決定することと、
を含み、
前記複数の重み値のサブセットは、前記重み値のグループ内の重み値の各グループについて、前記複数の重み値のサブセットに、重み値の決定された比率の重み値を含めることによって生成され、
前記複数の重み値に関連する前記複数のマスク値は、前記複数の重み値の各重み値について、
前記重み値が前記複数の重み値のサブセットに含まれる場合には、前記重み値に関連する前記複数のマスク値に前記マスク値として第1の定義された値を格納し、
前記重み値が前記複数の重み値のサブセットに含まれない場合には、前記重み値に関連する前記複数のマスク値に前記マスク値として第2の定義された値を格納する、
ことによって生成される、請求項1に記載の機械可読媒体。
【請求項3】
前記プログラムは、前記出力のセットに対してベクトル演算のセットを実行するための命令のセットを更に含む、請求項1に記載の機械可読媒体。
【請求項4】
前記プログラムは、前記ベクトル演算のセットを実行した後、前記行列乗算ユニットによって生成された前記出力のセットに対して量子化演算のセットを実行して、前記出力のセットの精度を低下させるための命令のセットを更に含む、請求項3に記載の機械可読媒体。
【請求項5】
前記プログラムは、量子化された前記出力のセットを前記ニューラルネットワークの第3層への入力として送信するための命令のセットを更に含む、請求項4に記載の機械可読媒体。
【請求項6】
前記プログラムは、前記量子化演算のセットを実行した後、量子化された前記出力のセットに対してスパース化演算のセットを実行して、量子化された前記出力のセットにスパース性を追加するための命令のセットを更に含む、請求項4に記載の機械可読媒体。
【請求項7】
前記プログラムは、前記量子化演算のセットを実行する前、前記出力のセットに対してスパース化演算のセットを実行して、前記出力のセットにスパース性を追加するための命令のセットを更に含む、請求項4に記載の機械可読媒体。
【請求項8】
前記プログラムは、前記ベクトル演算のセットを実行する前、前記行列乗算ユニットによって生成された前記出力のセットに対して量子化演算のセットを実行して、前記出力のセットの精度を低下させるための命令のセットを更に含む、請求項3に記載の機械可読媒体。
【請求項9】
前記第1の複数の下位ビット仮数値の各下位ビット仮数値は、4ビット以下を含み、第2の複数の下位ビット仮数値の各下位ビット仮数値は、4ビット以下を含む、請求項1に記載の機械可読媒体。
【請求項10】
方法であって、
ニューラルネットワークにおける第1層から受信した複数の活性化値を、前記ニューラルネットワークにおける第2層を実装するように構成された多重化ユニットに提供するステップであって、前記複数の活性化値は、第1の複数の下位ビット仮数値及び第1共有指数値を使用して表される、ステップと、
前記ニューラルネットワークにおける前記第2層に含まれる複数の重み値に対して、スパース化演算のセットを実行して、前記複数の重み値のサブセットと前記複数の重み値に関連する複数のマスク値とを生成するステップであって、前記複数の重み値は、第1の複数の下位ビット仮数値及び第2共有指数値を使用して表される、ステップと、
前記複数の重み値のサブセットを、前記ニューラルネットワークにおける前記第2層を実装するように構成された行列乗算ユニットに提供するステップと、
を含み、
前記多重化ユニットは、前記複数のマスク値に基づいて前記複数の活性化値のサブセットを生成し、前記複数の活性化値のサブセットを前記行列乗算ユニットに提供するように更に構成され、
前記行列乗算ユニットは、前記複数の重み値のサブセット及び前記複数の活性化値のサブセットに対して行列乗算演算のセットを実行して出力のセットを生成するように構成され、
前記複数の重み値に対してスパース化演算のセットを実行することが、前記行列乗算ユニットが前記複数の活性化値と前記複数の重み値との積を生成するために実行するサイクル数を減少させる、方法。
【請求項11】
前記スパース化演算のセットを実行するステップは、
定義されたグループサイズに基づいて、前記複数の重み値を重み値のグループに分割するステップと、
前記重み値のグループ内の重み値の各グループについて、該重み値のグループ内の、最も高い値を有する重み値の定義された比率を決定するステップと、
を含み、
前記複数の重み値のサブセットは、前記重み値のグループ内の重み値の各グループについて、前記複数の重み値のサブセットに、重み値の決定された比率の重み値を含めることによって生成され、
前記複数の重み値に関連する前記複数のマスク値は、前記複数の重み値の各重み値について、
前記重み値が前記複数の重み値のサブセットに含まれる場合には、前記重み値に関連する前記複数のマスク値に前記マスク値として第1の定義された値を格納し、
前記重み値が前記複数の重み値のサブセットに含まれない場合には、前記重み値に関連する前記複数のマスク値に前記マスク値として第2の定義された値を格納する、
ことによって生成される、請求項10に記載の方法。
【請求項12】
前記出力のセットに対してベクトル演算のセットを実行するステップ、を更に含む請求項10に記載の方法。
【請求項13】
前記ベクトル演算のセットを実行するステップの後、前記行列乗算ユニットによって生成された前記出力のセットに対して量子化演算のセットを実行して、前記出力のセットの精度を低下させるステップ、を更に含む請求項12に記載の方法。
【請求項14】
量子化された前記出力のセットを前記ニューラルネットワークの第3層への入力として送信するステップ、を更に含む請求項13に記載の方法。
【請求項15】
前記量子化演算のセットを実行するステップの後、量子化された前記出力のセットに対してスパース化演算のセットを実行して、量子化された前記出力のセットにスパース性を追加するステップ、を更に含む請求項13に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示はコンピューティングハードウェアに関する。より具体的には、本開示はニューラルネットワークをトレーニング及び使用するための技術に関する。
【背景技術】
【0002】
ニューラルネットワークは、様々な異なるアプリケーション(例えば、画像分類、コンピュータビジョン、自然言語処理、音声認識、書面認識等)に使用される機械学習モデルである。ニューラルネットワークは、それを通じてデータセットを実行し、ニューラルネットワークからの結果を既知の結果と比較し、その違いに基づいてネットワークを更新することによって、特定の目的のためにトレーニングされることがある。
【発明の概要】
【0003】
ディープニューラルネットワーク(Deep neural network (DNN))は、より良い精度を達成するために、過去数年間で指数関数的にサイズが大きくなっている。その高い精度にもかかわらず、DNNは通常、トレーニングと推論の両方でかなりの計算コストを必要とする。DNNに関連する計算コストを削減し及び/又はDNNのサイズを縮小したりするために、異なるタイプの技術を使用することができる。1つのタイプの技術は、スパース性技術の追加である。これらの技術は、入力データ、重み、及び/又は活性化にスパース性を導入する。
【図面の簡単な説明】
【0004】
本開示の種々の実施形態は、添付図面の図に限定されるものではなく、一例として例示される。
図1】幾つかの実施形態によるニューラルネットワークのための狭いデータフォーマットをスパース化するためのコンピューティングシステムを示す。
図2】幾つかの実施形態によるニューラルネットワークをトレーニングする例示的なトレーニング反復を示す。
図3】幾つかの実施形態による例示的なニューラルネットワーク層を示す。
図4】幾つかの実施形態による例示的な行列乗算層を示す。
図5】幾つかの実施形態による別の例示的なニューラルネットワーク層を示す。
図6】幾つかの実施形態による例示的な行列乗算層を示す。
図7】幾つかの実施形態による狭いデータフォーマットのデータをスパース化する処理を示す。
図8】幾つかの実施形態による例示的なコンピュータシステムの簡略ブロック図を示す。
図9】幾つかの実施形態によるニューラルネットワーク処理システムを示す。
【発明を実施するための形態】
【0005】
以下の説明では、例示のために、本開示の完全な理解を提供するために、多数の例及び特定の詳細が説明される。このような例及び詳細は、請求項の要素又は請求項の主題全体を不当に制限するものと解釈されてはならない。請求項の主題は、これらの例の特徴の一部又は全部を単独で又は組み合わせて含み、更に本明細書に記載された特徴及び技術の修正及び均等物を含み得ることは、異なる請求項の文言に基づいて、当業者には明らかである。
【0006】
ここでは、ニューラルネットワークのための狭いデータフォーマット(narrow data format)をスパース化する(sparsifying)技術について説明する。幾つかの実施形態では、計算システムは、ニューラルネットワークをトレーニングするとき、又は推論のためにニューラルネットワークを使用するときに、ニューラルネットワークの各層への入力をスパース化するためのツールを提供する。ニューラルネットワークを実装するために使用されるデータは、狭いデータフォーマットであってもよい。狭いデータフォーマットには、浮動小数点数の一部又はすべての部分を表すために少ないビット数(例えば仮数のために1~4ビット)を使用する浮動小数点データフォーマットが含まれてもよい。対照的に、広いデータフォーマットは、従来の浮動小数点形式(例えば、単精度浮動小数点形式(例えば、FP32又はfloat32)、倍精度浮動小数点形式(例えば、FP64又はfloat64)、半精度浮動小数点形式(例えば、FP16)など)又は4ビットより大きい仮数が使用される任意の浮動小数点データフォーマットを含むことができる。ニューラルネットワーク層への入力をスパース化するために、ツールは定義されたサイズブロックで入力値のベクトルを処理する。入力値の各ブロックについて、ツールは取り除くべき(例えば、ドロップする)値の定義された比率を決定する。残りの入力値は、ニューラルネットワーク層への入力として使用される(例えば、ニューラルネットワークをトレーニングするため、推論のためにニューラルネットワークを使用するためなど)。ツールは、ニューラルネットワークの各層への1つ以上の入力をスパース化できる。
【0007】
本願で説明した技術は、ニューラルネットワークをトレーニングして使用する従来の方法よりも多くの利点と利点を提供する。例えば、狭いデータフォーマットを使用してニューラルネットワークを実装し、次にニューラルネットワークの層への入力をスパース化すると、ニューラルネットワークの層を実装するために使用されるハードウェアの一部が演算を実行するためにかかるサイクル数が減少する。ニューラルネットワークをトレーニングして使用する従来の方法では、同じ演算を実行するためにより多くのサイクルが必要になる。
【0008】
図1は、幾つかの実施形態によるニューラルネットワークのための狭いデータフォーマットをスパース化するためのコンピューティングシステムを示す。示されるように、コンピューティングシステム100は、ニューラルネットワークマネジャ105、スパース化エンジン110、量子化器115、及び記憶装置120及び125を含む。ニューラルネットワーク定義記憶装置120は、ニューラルネットワークの定義を格納するように構成される。幾つかの実施形態では、ニューラルネットワークの定義は、ニューラルネットワーク内の層の数、各層内のノードの数、ニューラルネットワーク内の重み、ノードで使用される活性化関数、損失を計算するために使用される損失関数などを指定する。
【0009】
トレーニングデータ記憶装置125は、ニューラルネットワークをトレーニングするためのトレーニングデータセットを格納する。幾つかの実施形態では、トレーニングデータセットは、サンプルのセット(トレーニングサンプルとも呼ばれる)を含む。各サンプルは、入力のセット(入力データとも呼ばれる)と期待される出力のセット(期待される出力データとも呼ばれる)を含む。例えば、サンプルの入力のセットは、数値のセット(例えば、整数、浮動小数点数など)の行列又はベクトルにすることができる。例えば、サンプルの出力のセットは、数値のセット(例えば、整数、浮動小数点数など)の行列又はベクトルにすることができる。更に、トレーニングデータ記憶装置125は、ニューラルネットワークをトレーニングするためのトレーニングパラメータを格納してよい。トレーニングパラメータの例は、トレーニングデータセット内のサンプルの数、バッチサイズ(例えば、トレーニング反復で処理するサンプルの数)、指数ブロックサイズ(例えば、指数を共有する値の数)、スパース性ブロックサイズ(例えば、スパース化中に処理されるブロック内の値の数)、スパース性ブロック内に保持又はドロップする値の定義された比率などを含むことができる。
【0010】
幾つかの実施形態では、記憶装置120及び125は単一の物理記憶装置に実装され、一方、他の実施形態では、記憶装置120及び125は幾つかの物理記憶装置にまたがって実装されてもよい。図1は、コンピューティングシステム100の一部としての記憶装置120及び125を示しているが、当業者は、ニューラルネットワーク定義記憶装置120及び/又はトレーニングデータ記憶装置125が、幾つかの実施形態においてコンピューティングシステム100の外部にあってもよいことを理解するであろう。
【0011】
ニューラルネットワークマネジャ105、スパース化エンジン110及び量子化器115について、図2から図6に示される幾つかの例示的な動作を参照して説明する。第1例示的な動作は、ニューラルネットワークがどのようにトレーニングされるかを示す。この動作のために、ニューラルネットワークマネジャ105は、トレーニングデータセットを用いてニューラルネットワーク210をトレーニングするために、コンピューティングシステム100(又は、コンピューティングシステム100に通信可能に結合されたクライアント装置のような別の装置)から要求を受け取る。この要求に応答して、ニューラルネットワークマネジャ105は、ニューラルネットワーク定義記憶装置125にアクセスし、ニューラルネットワーク210に関連付けられたトレーニングパラメータとともに、ニューラルネットワーク210に関連付けられたニューラルネットワーク定義を読み出す。次に、ニューラルネットワークマネジャ105は、ニューラルネットワーク定義に基づいてニューラルネットワーク210を生成する。図2に示すように、ニューラルネットワーク210は、層215a~nを含む。各層215a~nは、対応する重み220のセットを含む。重みは、狭いデータフォーマットを使用して表現することができる。上述のように、狭いデータフォーマットは、浮動小数点数の一部又はすべての部分を表すために少ないビット数(例えば仮数のために1~4ビット)を使用する浮動小数点データフォーマットを含むことができる。この例では、ニューラルネットワークマネジャ105は、ランダムに生成された値(例えば、整数、浮動小数点数など)で重みの値220a~nを初期化する。
【0012】
次に、ニューラルネットワークマネジャ105は、トレーニングデータ記憶装置135にアクセスして、ニューラルネットワーク210をトレーニングするために指定されたトレーニングデータセットを読み出す。ここで、ニューラルネットワークマネジャ105は、ニューラルネットワーク210のトレーニングフェーズを開始する。ここでは、トレーニングパラメータの中で指定された、定義された回数のトレーニング反復が、ニューラルネットワーク210で実行される。図2は、幾つかの実施形態によるニューラルネットワークをトレーニングする例示的なトレーニング反復を示す。具体的には、図2は、この例示的な動作のトレーニングフェーズ中にニューラルネットワーク210上で実行されるトレーニング反復の例を示す。トレーニング反復のために、ニューラルネットワーク210は、トレーニングデータサンプル205a~mを含むサンプル200のバッチを使用してトレーニングされる。サンプル200のバッチ内のサンプル数は、ニューラルネットワーク210に関連するトレーニングパラメータで指定されたバッチサイズに基づいて決定される。サンプル200のバッチを生成するために、ニューラルネットワークマネジャ105は、トレーニングデータセットからサンプル205a~mをランダムに選択する。次に、ニューラルネットワークマネジャ105は、ニューラルネットワーク210の順方向パス(フィードフォワードパスとも呼ばれる)を介して、サンプル200のバッチの中の各サンプル205を処理する。ニューラルネットワーク210は、それを介して処理される各サンプル205の出力を生成する。
【0013】
ニューラルネットワーク210がサンプル200のバッチに対して生成する出力と、サンプル200のバッチの中のトレーニングデータサンプル205a~mの期待される出力とに基づいて、ニューラルネットワークマネジャ105は、対応する損失値230a~mを計算する。ニューラルネットワーク210は、任意の数の異なる損失関数(例えば、平均二乗誤差損失関数、平均二乗対数誤差損失関数、平均絶対誤差損失関数、交差エントロピー損失関数など)を使用して損失値230a~mを計算するように構成することができる。損失値225のバッチに基づいて、ニューラルネットワークマネジャ105は、損失値230a~mの平均を計算する。
【0014】
次に、ニューラルネットワークマネジャ105は、損失値230a~mの平均を使用して、ニューラルネットワーク210の逆方向パス中に勾配のセットを生成する。幾つかの実施形態では、ニューラルネットワークマネジャ105は、逆伝搬技術を使用して勾配のセットを生成する。次に、ニューラルネットワークマネジャ105は、勾配のセットを使用して、動作230において、ニューラルネットワーク210の重み220a~nを調整する。幾つかの実施形態において、ニューラルネットワークマネジャ105は、勾配法(例えば、勾配降下法、確率的勾配降下法等)を使用して、ニューラルネットワーク210における重み220a~nを調整する。
【0015】
図2は、トレーニングニューラルネットワーク210の反復の一例を示す。幾つかの実施形態では、ニューラルネットワークマネジャ105は、ニューラルネットワーク210に関連するトレーニングパラメータで指定される、定義された反復回数を通して、サンプル200のバッチと同じサイズのトレーニングデータセットからランダムに選択されたサンプルのバッチを使用して、ニューラルネットワーク210をトレーニングする。このトレーニングフェーズでは、ニューラルネットワークの重み220a~nが、各反復の逆方向パスで調整される。
【0016】
トレーニングフェーズの後、ニューラルネットワーク210を推論のために使用することができる。ニューラルネットワーク210が推論のために使用される場合、ニューラルネットワーク210の順方向パス部分が利用される。すなわち、ニューラルネットワークマネジャ105は、入力データをニューラルネットワーク210に提供し、各層215a~nを介して処理する。層215nによって生成される出力は、入力データに関連付けられた出力データである。出力データは、重み220a~nのセットの学習した値に基づいてニューラルネットワーク210によって生成される予測であってもよい。
【0017】
図3は、幾つかの実施形態による例示的なニューラルネットワーク層300を示す。特に、図3は、ニューラルネットワーク層300を通過する例示的なデータフローを示す。例示的なデータフローは、ニューラルネットワーク層300が属するニューラルネットワークのトレーニング中又は推論のためのニューラルネットワークの使用中に発生するフィードフォワードデータフローであってもよい。幾つかの実施形態では、ニューラルネットワーク層300は、ニューラルネットワーク210の層215a~nのいずれかを実装するために使用することができる。
【0018】
図3に示すように、ニューラルネットワーク層300は、行列乗算層305、ベクトル演算層310、及び量子化層315を含む。行列乗算層305は、2つの入力行列を受け取り、1つ以上の入力行列に対してスパース化演算を実行し、2つの入力に対して行列乗算演算のセット(例えば、内積演算のセット)を実行し、行列乗算演算のセットの結果である出力行列を生成するように構成される。幾つかの実施形態では、スパース化エンジン110は、スパース化演算を実装するために使用される。ベクトル演算層310は、入力行列を受け取り、入力行列に対してベクトル演算のセット(例えば、ソフトマックス演算、活性化演算、正規化演算など)を実行し、ベクトル演算のセットの結果である出力行列を生成する。量子化層315は、入力行列を受け取り、量子化演算のセットを実行して入力行列の値の精度を低下させ、低下した精度値を含む出力行列を生成する。幾つかの実施形態では、量子化器315は、量子化演算を実装するために使用される。
【0019】
図3に示される例示的なデータフローは、入力値320及び重み値325を受け取る行列乗算層305によって開始される。入力値320は、ニューラルネットワーク内の前の層から受け取った活性化値の行列であり得る。例えば、ニューラルネットワーク層300がニューラルネットワーク210の層215cを実装するために使用される場合、入力値320は、層215bから受け取り、それによって生成される活性化値の行列であり得る。重み値325は、ニューラルネットワーク層300に含まれる重み値の行列であり得る。ニューラルネットワーク層300がニューラルネットワーク210の層215cを実装するために使用される例を続けると、重み値325は重み値220cのセットを含む行列である。重み値325を受け取ると、行列乗算層325は、重み値325にスパース性を追加するためのスパース化演算のセットを実行する(例えば、重み値を0の値に変換する、重み値を削除する、等)。次に、行列乗算層305は、入力値320及びスパース化された重み値325に対して行列乗算演算のセットを実行し、行列乗算演算のセットの結果である出力行列を生成する。行列乗算層305は、ベクトル演算層310への入力として出力行列を提供する。
【0020】
ベクトル演算層310が行列乗算層305から出力行列を受け取ると、ベクトル演算層310は行列に対してベクトル演算のセットを実行し、ベクトル演算のセットの結果である出力行列を生成する。ベクトル演算の例には、ソフトマックス演算、活性化演算、正規化演算などが含まれる。ベクトル演算のセットが実行されると、ベクトル演算層310は量子化層315への入力として出力行列を提供する。行列を受け取ることに応答して、量子化層315は行列に対して量子化演算のセットを実行し、出力値330を生成する。量子化演算のセットは、行列内の値の精度を低下させる。出力値330は、狭いデータフォーマットを使用して表される低下した精度の値を含む行列にすることができる。量子化層315は、ニューラルネットワーク内の次の層への入力として出力値330を提供する。ニューラルネットワーク層300がニューラルネットワーク210の層215cを実装するために使用される例を続けると、量子化層315は、層215dへの入力として出力値330を提供する。
【0021】
図4は、幾つかの実施形態による例示的な行列乗算層400を示す。特に、図4は、マトリクス乗算層への2つの入力のうちの1つをスパース化し、2つの入力に対して行列乗算を実行する例を示す。幾つかの実施形態では、行列乗算層400を使用して、行列乗算層305を実装することができる。図4に示すように、行列乗算層400は、多重化ユニット410及び行列乗算ユニット415を含むハードウェアエンジン405を含む。多重化ユニット410及び行列乗算ユニット415は、各々、回路のセットによって実現できる。
【0022】
図示のように、行列乗算層400は、第1入力420及び第2入力450を受け取る。この例では、入力420は、ニューラルネットワーク層に含まれる重み値(例えば、ニューラルネットワーク層300における重み値325)の行列(図4に図示しない)からの8個の重み値のベクトルである。8個の重み値は、下位ビット仮数(例えば、1~4ビット)と共有指数422(例えば、共有される8ビット指数)を使用する狭い浮動小数点データフォーマットを使用して表される。ここで、指数を共有する値の数を表す指数ブロックサイズは8である。従って、入力420の8個の重み値はすべて1個の指数値を共有する。入力450は、前のニューラルネットワーク層から受信し、それによって生成される活性化値の行列からの8個の活性化値のベクトルである。8個の活性化値は、下位ビット仮数と共有指数452を使用する同じ狭い浮動小数点データフォーマットを使用して表される。前述のように、この例の指数ブロックサイズは8である。従って、入力450の8個の活性化値はすべて1個の指数値を共有する。
【0023】
行列乗算層400が入力420を受け取ると、スパース化エンジン110は、トレーニングパラメータで指定されたスパース性ブロックサイズに基づいて入力420をブロックにセグメント化する。この例では、スパース性ブロックサイズは4である。このように、スパース化エンジン110は、入力420をブロック425及び430にセグメント化し、各々が入力420からの4つの重み値を含む。幾つかの実施形態では、スパース性ブロックサイズは指数ブロックサイズの因数である。例えば、この例では、スパース性ブロックサイズ4は指数ブロックサイズ8の因数である(つまり、8は4で均等に割り切れる)。次に、スパース化エンジン110は、トレーニングパラメータで指定されたスパース性ブロックに保持する値の定義された比率に基づいて、各ブロック425及び430から重み値を除去する。ここで、定義された比率は50%である。この例では、スパース化エンジン110は、絶対値が最も高いブロック425内の重み値の50%を決定し、これらの重み値を含むブロック435を生成する(すなわち、スパース化エンジン110は、ブロック425から他の重み値をドロップする)。更に、スパース化エンジン110は、絶対値が最も高いブロック430内の重み値の50%を決定し、それらの重み値を含むブロック440を生成する(すなわち、スパース化エンジン110は、ブロック430から他の重み値をドロップする)。幾つかの実施形態では、絶対値を使用する代わりに、スパース化エンジン110は、値の重要性を測定するための任意の数の異なるメトリック(例えば、エントロピー、パープレキシティなど)に基づいて保持する重み値を決定することができる。
【0024】
ブロック425及び430から重み値を除去した後、スパース化エンジン110は、入力420内の各重み値のマスク値を含むビットマスク445を生成する。除去されなかった重み値(すなわち、重み値は、各々のブロックの重み値の上位50%に含まれる)について、スパース化エンジン110は、ビットマスク445内の対応する位置にマスク値として第1の定義された値(この例では1)を格納する。入力420内の除去された重み値について、スパース化エンジン110は、ビットマスク445内の対応する位置にマスク値として第2の定義された値(この例では0)を格納する。例えば、入力420内の第1重み値がブロック425内の重み値の上位50%に含まれる場合、スパース化エンジン110は、ビットマスク445の第1位置(つまり、左端の位置)に値1を格納する。入力420内の第1重み値がブロック425内の重み値の上位50%に含まれない場合、スパース化エンジン110は、ビットマスク445の第1位置に値0を格納する。スパース化エンジン110は、入力420内の各重み値に対してこの操作を実行する。行列乗算層400が実装しているニューラルネットワーク層が推論のために使用されている幾つかの実施形態では、ビットマスク445を事前に計算することができる(例えば、ニューラルネットワーク層が推論に使用される前にオフラインで計算される)。行列乗算層400が実装しているニューラルネットワーク層がトレーニングされている他の実施形態では、勾配降下法を使用してビットマスク445を学習することができる。ビットマスク445が生成されると、スパース化エンジン110は、多重化ユニット410への入力としてビットマスクを提供する。更に、スパース化エンジン110は、行列乗算ユニット415への入力としてブロック435及び440を一緒に提供する。
【0025】
行列乗算層400が入力450を受け取ると、行列乗算層400は、それを多重化ユニット410への入力として提供する。入力450及びビットマスク445の受信に応答して、多重化ユニット410は、ビットマスク445に基づいて、入力450における活性化値のサブセットを決定する。この例では、多重化ユニット410は、ビットマスク445におけるマスク値1に対応する入力450における活性化値を識別し、それらをサブセットに含めることによって、入力450のサブセットを決定する。例えば、ビットマスク445における第1、第3、第7及び第8のマスク値がマスク値1を有する場合、多重化ユニット410は、サブセットにおける入力450からの第1、第3、第7及び第8の活性化値を含む。次に、多重化ユニット410は、入力450における活性化値の決定されたサブセットを含む出力460を生成し、それを行列乗算ユニット415への入力として提供する。
【0026】
行列乗算ユニット415が、第1入力としてブロック435及び440を受け取り、第2入力として出力460を受け取ると、行列乗算ユニット415は、これら2つの入力に対して行列乗算演算のセットを実行し、出力値465を生成する。例えば、行列乗算ユニット415は、ブロック435及び440と出力460との間の内積を計算して、出力値465のスカラ出力を生成することができる。最後に、行列乗算ユニット415は、ニューラルネットワーク層(例えば、ベクトル演算層310)の次の層に出力値465を提供する。
【0027】
この例では、行列乗算ユニット415は、一実行サイクルで4要素の内積を実行するように構成される。従って、行列乗算ユニット415は、一実行サイクルでブロック435及び440(4個の値の第1入力)と出力460(4個の値の第2入力)との間の内積を実行することができる。行列乗算ユニット415が入力420と450の間の内積を実行した場合、それは2実行サイクルを要したであろう(すなわち、入力420及び450の各々における第14個の値の間の内積を計算する第1サイクルと、入力420及び450の各々における最後の4個の値の間の内積を計算する第2サイクルである)。従って、図4を参照して上述したスパース化技術を使用すると、入力420と450の間の積を決定するための実行サイクル数が50%減少する(すなわち、2倍の速度増加)。
【0028】
説明したように、図4を参照して上述した例の演算は、重み値の行列からの重み値のベクトルと活性化値の行列からの活性化値のベクトルが、行列乗算層400を介してどのように処理されるかを示している。従って、この演算は、重み値の行列の中の残りの重み値のベクトルと活性化値の行列の中の活性化値のベクトルに対して繰り返すことができる。
【0029】
図3を参照して上述したニューラルネットワーク層は、量子化演算を行う層(例えば、量子化層315)を含む。幾つかの実施形態では、ニューラルネットワーク層は、スパース化演算を行う層を含むことができる。図5は、幾つかの実施形態による別の例示的なニューラルネットワーク層500を示す。特に、図5は、スパース化演算を実行するための層を含むニューラルネットワーク層を通る例のデータフローを示す。例示的なデータフローは、ニューラルネットワーク層500が属するニューラルネットワークのトレーニング中又は推論のためのニューラルネットワークの使用中に発生するフィードフォワードデータフローであることができる。幾つかの実施形態では、ニューラルネットワーク層500は、ニューラルネットワーク210の層215a~nのいずれかを実装するために使用することができる。
【0030】
図5に示すように、ニューラルネットワーク層500は、行列乗算層505、ベクトル演算層510、及びスパース化層515を含む。行列乗算層505は、行列乗算層305によって実装でき、ベクトル演算層510は、ベクトル演算層310によって実装できる。スパース化及び量子化層515は、スパース化及び量子化層515が(例えば、スパース化エンジン110によって実施される)入力行列に対するスパース化演算のセットを実行するように構成されていることを除いて、量子化層315と同様である。幾つかの実施形態では、スパース化演算のセットが入力行列に対して実行される前に、量子化演算のセットが入力行列に対して実行される。他の実施形態では、スパース化演算のセットが入力行列に対して実行された後に、量子化演算のセットが入力行列に対して実行される。なお、幾つかの実施形態では、スパース化演算のセットと組み合わせて、量子化演算のセットを入力行列に対して実行することができる。
【0031】
図5に示される例示的なデータフローは、入力値520及び重み値525を受け取る行列乗算層505によって開始される。入力値320は、ニューラルネットワーク内の前の層から受け取った活性化値の行列であり得る。例えば、ニューラルネットワーク層500がニューラルネットワーク210の層215bを実装するために使用される場合、入力値520は、層215aから受け取り、それによって生成される活性化値の行列であり得る。重み値525は、ニューラルネットワーク層500に含まれる重み値の行列であり得る。ニューラルネットワーク層500がニューラルネットワーク210の層215bを実装するために使用される例を続けると、重み値525は重み値220bのセットを含む行列である。
【0032】
重み値525を受け取った後に、行列乗算層525は、重み値525にスパース性を追加するためのスパース化演算のセットを実行する(例えば、重み値を0の値に変換する、重み値を削除する、等)。この例では、行列乗算層505も、入力値520にスパース性を追加するためのスパース化演算のセットを実行する(例えば、重み値を0の値に変換する、重み値を削除する、等)。行列乗算層505は、スパース化された入力値520及びスパース化された重み値525に対して行列乗算演算のセットを実行し、行列乗算演算のセットの結果である出力行列を生成する。行列乗算層505は、ベクトル演算層510への入力として出力行列を提供する。
【0033】
行列乗算層505から出力行列を受け取ることに応答して、ベクトル演算層510は行列に対してベクトル演算のセットを実行し、ベクトル演算のセットの結果である出力行列を生成する。上述したように、ベクトル演算の幾つかの例は、ソフトマックス演算、活性化演算、正規化演算などを含むことができる。ベクトル演算のセットが実行された後、ベクトル演算層510はスパース化及び量子化層515への入力として出力行列を提供する。行列を受け取ると、スパース化及び量子化層515は、出力値530を生成するために、行列に対して量子化演算のセット及びスパース化演算のセットを実行する。量子化演算のセットは行列内の値の精度を低下させ、スパース化演算のセットは行列にスパース性を追加する(例えば、値を0に変換する、値を削除する、など)。出力値530は、狭いデータフォーマットを使用して表されるスパース化され精度の低下された値を含む行列にすることができる。スパース化及び量子化層515は、ニューラルネットワーク内の次の層への入力として出力値530を提供する。ニューラルネットワーク層500がニューラルネットワーク210の層215bを実装するために使用される例を続けると、スパース化及び量子化層515は、層215cへの入力として出力値530を提供する。
【0034】
図6は、幾つかの実施形態による例示的な行列乗算層600を示す。具体的に、図6は、行列乗算層への入力の各々をスパース化し、2つの入力に対して行列乗算を実行する例を示す。幾つかの実施形態では、行列乗算層600を使用して、行列乗算層505を実装することができる。図6に示すように、行列乗算層600は、ハードウェアエンジン604を含む。ハードウェアエンジン604は、マスクアライメントユニット606と、多重化ユニット608と、多重化ユニット610と、行列乗算ユニット612とを含む。マスクアライメントユニット606と、多重化ユニット608と、多重化ユニット610と、行列乗算ユニット612とは、各々、回路のセットによって実現できる。
【0035】
図6に示めすように、行列乗算層600は、第1入力615及び第2入力650を受け取る。この例では、入力615は、ニューラルネットワーク層に含まれる重み値(例えば、ニューラルネットワーク層500における重み値525)の行列(図6に図示しない)からの16個の重み値のベクトルである。16個の重み値は、下位ビット仮数(例えば、1~4ビット)と共有指数617(例えば、共有される8ビット指数)を使用する狭い浮動小数点データフォーマットを使用して表される。ここで、指数を共有する値の数を表す指数ブロックサイズは16である。従って、入力615の16個の重み値はすべて1個の指数値を共有する。入力650は、前のニューラルネットワーク層から受信し、それによって生成される活性化値の行列からの16個の活性化値のベクトルである。16個の活性化値は、下位ビット仮数と共有指数652を使用する同じ狭い浮動小数点データフォーマットを使用して表される。前述のように、この例では指数ブロックサイズは16である。従って、入力650の16個の活性化値はすべて1個の指数値を共有する。
【0036】
行列乗算層600が入力615を受け取ることに応答して、スパース化エンジン110は、トレーニングパラメータで指定されたスパース性ブロックサイズに基づいて入力615をブロックにセグメント化する。この例では、スパース性ブロックサイズは8である。従って、スパース化エンジン110は、入力615をブロック620及び625にセグメント化し、各々が入力615からの8個の重み値を含む。幾つかの実施形態では、スパース性ブロックサイズは指数ブロックサイズの因数である。例えば、この例では、スパース性ブロックサイズ8は指数ブロックサイズ16の因数である(つまり、16は8で均等に割れる)。次に、スパース化エンジン110は、トレーニングパラメータで指定されたスパース性ブロックに保持する値の定義された比率に基づいて、各ブロック620及び625から重み値を除去する。この例では、定義された比率は50%である。図6に示すように、スパース化エンジン110は、絶対値が最も高いブロック620内の重み値の50%を決定し、これらの重み値を含むブロック630を生成する(すなわち、スパース化エンジン110は、ブロック620から他の重み値をドロップする)。更に、スパース化エンジン110は、絶対値が最も高いブロック625内の重み値の50%を決定し、それらの重み値を含むブロック635を生成する(すなわち、スパース化エンジン110は、ブロック625から他の重み値をドロップする)。幾つかの実施形態では、絶対値を使用する代わりに、スパース化エンジン110は、値の重要性を測定するための任意の数の異なるメトリック(例えば、エントロピー、パープレキシティなど)に基づいて保持する重み値を決定することができる。
【0037】
スパース化エンジン110がブロック620及び625から重み値を除去し終わると、スパース化エンジン110は、入力615内の各重み値のマスク値を含むビットマスク640を生成する。除去されなかった重み値(すなわち、重み値は、各々のブロックの重み値の上位50%に含まれる)について、スパース化エンジン110は、ビットマスク640内の対応する位置にマスク値として第1の定義された値(この例では1)を格納する。入力615内の除去された重み値について、スパース化エンジン110は、ビットマスク640内の対応する位置にマスク値として第2の定義された値(この例では0)を格納する。スパース化エンジン110は、入力615内の各重み値に対してこの演算を繰り返す。行列乗算層600が実装しているニューラルネットワーク層が推論のために使用されている幾つかの実施形態では、ビットマスク640を事前に計算することができる(例えば、ニューラルネットワーク層が推論に使用される前にオフラインで計算される)。行列乗算層600が実装しているニューラルネットワーク層がトレーニングされている他の実施形態では、勾配降下法を使用してビットマスク640を学習することができる。ビットマスク640を生成した後、スパース化エンジン110は、それをマスクアライメントユニット606への入力として提供する。更に、スパース化エンジン110は、多重化ユニット608への入力としてブロック630及び635の両方を提供する。
【0038】
行列乗算層600が入力650を受け取ると、スパース化エンジン110は、本例では8であるスパース性ブロックサイズに基づいて入力650をブロックにセグメント化する。従って、スパース化エンジン110は、入力650をブロック655及び660にセグメント化し、各々が入力650からの8個の活性化値を含む。次に、スパース化エンジン110は、本例では50%である、トレーニングパラメータで指定された、スパース性ブロックに保持する値の定義された比率に基づいて、各ブロック655及び650から活性化値を除去する。従って、スパース化エンジン110は、絶対値が最も高いブロック655内の活性化値の50%を決定し、それらの活性化値を含むブロック670を生成する(すなわち、スパース化エンジン110は、ブロック655から他の活性化値をドロップする)。スパース化エンジン110はまた、絶対値が最も高いブロック660内の活性化値の50%を決定し、活性化値を含むブロック675を生成する(すなわち、スパーシエーションエンジン110は、ブロック660から他の活性化値をドロップする)。幾つかの実施形態では、絶対値を使用する代わりに、スパース化エンジン110は、値の重要性を測定するための任意の数の異なるメトリック(例えば、エントロピー、パープレキシティなど)に基づいて保持する活性化値を決定することができる。
【0039】
ブロック655及び660からの活性化値の除去を完了した後、スパース化エンジン110は、入力650内の各活性化値のマスク値を含むビットマスク665を生成する。除去されなかった活性化値(すなわち、活性化値は、各々のブロックの活性化値の上位50%に含まれる)について、スパース化エンジン110は、ビットマスク665内の対応する位置にマスク値として第1の定義された値(この例では1)を格納する。入力650内の除去された活性化値について、スパース化エンジン110は、ビットマスク665内の対応する位置にマスク値として第2の定義された値(この例では0)を格納する。スパース化エンジン110は、入力650内の各活性化値に対してこの操作を実行する。行列乗算層600が実装しているニューラルネットワーク層が推論のために使用されている幾つかの実施形態では、ビットマスク665をオンザフライで計算することができる(事前に計算され得るビットマスク640とは対照的に)。行列乗算層600が実装しているニューラルネットワーク層がトレーニングされている他の実施形態では、勾配降下法を使用してビットマスク665を学習することができる。スパース化エンジン110がビットマスク665を生成すると、スパース化エンジン110は、それをマスクアライメントユニット606への入力として提供する。更に、スパース化エンジン110は、多重化ユニット610への入力としてブロック670及び675の両方を提供する。
【0040】
ビットマスク640とビットマスク665の受信に応答して、マスクアライメントユニット606は、ビットマスク640と665の要素ごとの乗算を実行してアライメントマスクを生成する。アライメントマスクは、ビットマスク640、665内の対応する要素の各ペアの積を含む。例えば、アライメントマスク内の第1要素は、ビットマスク640内の第1要素とビットマスク665内の第1要素との間の積を格納し、アライメントマスク内の第2要素は、ビットマスク640内の第2要素とビットマスク665内の第2要素との間の積を格納し、アライメントマスク内の第3要素は、ビットマスク640内の第3要素とビットマスク665内の第3要素との間の積を格納し、以下同様である。幾つかの実施形態では、目的関数(例えば、損失関数)を利用して、トレーニング中にビットマスク640及び665における最初に定義された値の重複を最大化することができる。次に、マスクアライメントユニット606は、アライメントマスク及びビットマスク640を多重化ユニット608に送る。マスクアライメントユニット606も、アライメントマスク及びビットマスク665を多重化ユニット610に送る。
【0041】
多重化ユニット608がアライメントマスク、ビットマスク640、ブロック630及びブロック635を受け取ると、多重化ユニット608はアライメントマスク及びビットマスク640に基づいてブロック630及び635内の重み値のサブセットを決定する。ブロック630及び635のサブセットにブロック630及び635内のどの重み値を含めるかを決定するために、多重化ユニット608はビットマスク640内のマスク値を反復処理する。マスク値が1の値を格納する場合、多重化ユニット608はアライメントマスク内の同じ位置を見る。位置のマスク値も1の値を格納する場合、多重化ユニット608はサブセット内の重み値を含む。そうでなければ、多重化ユニット608は同じ方法でビットマスク640を反復し続ける。ここで、多重化ユニット608は、サブセットにおいてこの方法で識別される第14個の重み値を含む。幾つかの実施形態において、多重化ユニット608は、サブセットにおいて識別されるすべての重み値を含む。次に、多重化ユニット608は、ブロック630及び635における重み値のサブセットを含む出力645を生成し、それを行列乗算ユニット612への入力として提供する。多重化ユニット610は、同じ技術を使用して、アライメントマスク及びビットマスク665に基づいて、ブロック670及び675における活性化値のサブセットを決定する。多重化ユニット610は、ブロック670及び675における活性化値のサブセットを含む出力680を生成し、それを行列乗算ユニット612への入力として提供する。幾つかの実施形態では、多重化ユニット608及び610は各々、同じ位置にある値(例えば、重み値の各サブセットは、各々の入力の位置2、3、4、6、8、11、12及び16の値を含む)の複数のサブセット(例えば、多重化ユニット608のブロック630及び635、多重化ユニット610のブロック670及び675)が一緒に反復処理される行共有技術を採用する。このように、値のこれらの複数のサブセットを処理するために使用されるインデックスが同じであり、従って、値の各サブセットを処理するために再利用できるため、多重化のコストが削減される。
【0042】
行列乗算ユニット612は、出力645及び680を受信すると、これら2つの入力に対して行列乗算演算のセットを実行し、出力値685を生成する。例えば、行列乗算ユニット612は、ブロック出力645と出力670との間の内積を計算して、出力値685のスカラ出力を生成することができる。行列乗算ユニット612は、次にニューラルネットワーク層(例えば、ベクトル演算層510)の次の層に出力値665を提供する。
【0043】
この例では、行列乗算ユニット612は、1実行サイクルで4要素の内積を実行するように構成される。従って、行列乗算ユニット612は、1実行サイクルで出力645(4個の値のうちの第1入力)と出力680(4個の値のうちの第2入力)との間の内積を実行することができる。多重化ユニット608と多重化ユニット610が各々のサブセットの中で識別されたすべての重み値を含む幾つかの実施形態では、行列乗算ユニット612は、1実行サイクルと2実行サイクルの間で出力645(4個の値のうちの第1入力)と出力680(4個の値のうちの第2入力)の間の内積を実行することができる。ここで、行列乗算ユニット612が入力615と650の間の内積を実行した場合、それは4実行サイクルを要するだろう(すなわち、各入力615及び650における第14個の値の間の内積を計算する第1サイクル、各入力615及び650における第24個の値の間の内積を計算する第2サイクル、各入力615及び650における第34個の値の間の内積を計算する第3サイクル、及び各入力615及び650における最後の4個の値の間の内積を計算する第四のサイクル)。従って、図6を参照して上述したスパース化技術を使用すると、入力620と650の間の積を決定するための実行サイクル数が50~75%減少する(すなわち、2~4倍の速度増加)。
【0044】
図6を参照して上述した例示的な演算は、重み値の行列からの重み値のベクトルと活性化値の行列からの活性化値のベクトルが、行列乗算層600を介してどのように処理されるかを示す。従って、この演算は、重み値の行列の中の残りの重み値のベクトルと活性化値の行列の中の活性化値のベクトルに対して繰り返すことができる。
【0045】
図7は、幾つかの実施形態による狭いデータフォーマットのデータをスパース化する処理700を示す。幾つかの実施形態では、コンピューティングシステム100は処理700を実行する。処理700は、ニューラルネットワークの第1層から受け取った複数の活性化値を、ニューラルネットワークの第2層を実装するように構成された多重化ユニットに提供する(710)ことによって開始する。複数の活性化値は、第1の複数の下位ビット仮数値及び第1共有指数値を用いて表される。例として図4を参照すると、行列乗算層400が入力450を受け取ると、行列乗算層400は、それを多重化ユニット410への入力として提供する。
【0046】
次に、処理700は、720において、ニューラルネットワークの第2層に含まれる複数の重み値に対してスパース化演算のセットを実行し、複数の重み値のサブセット及び複数の重み値に関連する複数のマスク値を生成する。複数の重み値は、第1の複数の下位ビット仮数値及び第2共有指数値を用いて表される。一例として図1及び図4を参照すると、スパース化エンジン110は、入力420に対してスパース化演算のセットを実行し、ブロック435及び440ならびにビットマスク445を生成する。
【0047】
最後に、処理700は、730において、ニューラルネットワークにおいて第2層を実装するように構成された行列乗算ユニットに、複数の重み値のサブセットを提供する。多重化ユニットは、複数のマスク値に基づいて複数の活性化値のサブセットを生成し、複数の活性化値のサブセットを行列乗算ユニットに提供する。行列乗算ユニットは、複数の重み値のサブセット及び複数の活性化値のサブセットに対して行列乗算演算のセットを実行して、出力のセットを生成するよう構成される。例として図1及び4を参照すると、スパース化エンジン110は、行列乗算ユニット415への入力としてブロック435及び440を提供する。多重化ユニット410は、入力450のサブセットである出力460を生成する。行列乗算ユニット415は、出力460及びブロック435及び440に対して行列乗算演算のセットを実行し、出力値465を生成する。
【0048】
上述の技術は、ニューラルネットワークを処理するように構成された広範なコンピュータシステムに実装され得る。図8は、上述の開示に記載された技術を実装するために使用され得る例示的なコンピュータシステム800の簡略化されたブロック図を示す。図8に示されるように、コンピュータシステム800は、バスサブシステム804を介して多数の周辺装置と通信する1つ以上のプロセッサ802を含む。これらの周辺装置は、記憶サブシステム806(例えば、メモリサブシステム808とファイル記憶サブシステム810とを含む)及びネットワークインタフェースサブシステム816を含むことができる。幾つかのコンピュータシステムは、ユーザインタフェース入力装置812及び/又はユーザインタフェース出力装置814を更に含むことができる。
【0049】
バスサブシステム804は、コンピューティングシステム800種々のコンポーネント及びサブシステムが意図した通りに互いに通信できるようにするメカニズムを提供できる。バスサブシステム804は、単一のバスとして概略的に示されるが、バスサブシステムの代替の実施形態は、複数のバスを利用してよい。
【0050】
ネットワークインタフェースサブシステム816は、コンピュータシステム800と他のコンピュータシステム又はネットワークとの間でデータを通信するためのインタフェースとして機能することができる。ネットワークインタフェースサブシステム816の実施形態は、例えば、イーサネット、Wi-Fi及び/又はセルラアダプタ、モデム(電話、衛星、ケーブル、ISDNなど)、デジタル加入者線(digital subscriber line (DSL))ユニット及び/又は類似のものを含むことができる。
【0051】
記憶サブシステム806は、メモリサブシステム808及びファイル/ディスク記憶サブシステム810含む。サブシステム808及び810ならびに本明細書に記載される他のメモリは、本開示の実施形態の機能性を提供する実行可能プログラムコード及び/又はデータを記憶することができる非一時的コンピュータ可読記憶媒体の例である。
【0052】
メモリサブシステム808は、プログラム実行中に命令及びデータを記憶するための主ランダムアクセスメモリ(RAM)818及び固定命令が格納される読み出し専用メモリ(ROM)820を含む多数のメモリを含む。ファイル記憶サブシステム810は、プログラム及びデータファイルのための永続的(例えば、不揮発性)記憶を提供することができ、磁気又は固体ハードディスクドライブ、関連するリムーバブルメディア(CD-ROM、DVD、Blu-Rayなど)とともに光学ドライブ、リムーバブルフラッシュメモリベースのドライブ又はカード、及び/又は当技術分野で公知の他のタイプの記憶メディアを含むことができる。
【0053】
コンピュータシステム800は例示的であり、システム800よりも多く又は少ないコンポーネントを有する他の多くの構成が可能であることは理解されるべきである。
【0054】
図9は、幾つかの実施形態によるニューラルネットワーク処理システムを示す。様々な実施形態において、本開示によるニューラルネットワークは、1つ以上のニューラルネットワークプロセッサを含むハードウェア環境において実装され、トレーニングされ得る。ニューラルネットワークプロセッサは、例えば、様々なグラフィックスプロセシングユニット(GPU)(例えば、NVIDIA Corp(登録商標)製のニューラルネットワークを処理するためのGPU)、フィールドプログラマブルゲートアレイ(FPGA)(例えば、Xilinx(登録商標)によって生成されたニューラルネットワークを処理するためのFPGA)、又は、ニューラルネットワーク計算のために最適化されたハードウェアアーキテクチャを含む様々なアプリケーション特定集積回路(ASIC)又はニューラルネットワークプロセッサを指すことができる。この例示的な環境では、上記の図8に示されるアーキテクチャを含むことができる1つ以上のサーバ902を、通信ネットワーク901(例えば、スイッチ、ルータ等)を介して複数の制御部910(1)~910(M)に結合することができる。制御部910(1)~910(M)は、上記の図8に示されるアーキテクチャを含むこともできる。各制御部910(1)~910(M)は、例えば、プロセッサ911(1)~911(N)及び912(1)~912(N)のような、1つ以上のNNプロセッサに結合することができる。NNプロセッサ911(1)~911(N)及び912(1)~912(N)は、トレーニング又は推論のようなニューラルネットワーク処理のために最適化された機能処理ブロック及びメモリの様々な構成を含むことができる。NNプロセッサは、ニューラルネットワーク計算のために最適化される。サーバ902は、例えばNNプロセッサ911(1)~911(N)及び912(1)~912(N)によって並列にロード及び実行され得るNNモデル及びモデルへの入力データを制御部910に設定することができる。モデルは、例えば上述のようにレイヤ及び関連する重みを含むことができる。NNプロセッサは、モデルをロードし、入力を適用して出力結果を生成することができる。NNプロセッサは、例えば、本明細書に記載されるトレーニングアルゴリズムを実装することもできる。
【0055】
<更なる例示的な実施形態>
種々の実施形態では、本開示は、ニューラルネットワークのための狭いデータフォーマットをスパース化するためのシステム、方法、及び機器を含む。本明細書に記載された技術は、コンピュータシステムによって実行可能なプログラムを格納する機械可読媒体において具現化することができ、そのプログラムは、本明細書に記載された技術を実行するための命令のセットを含む。幾つかの実施形態では、システムは、処理ユニットのセットと、処理ユニットのセット内の少なくとも1つの処理ユニットによって実行されると、少なくとも1つの処理ユニットに上述の技術を実行させる命令を格納する機械可読媒体とを含む。幾つかの実施形態では、機械可読媒体は、例えば、1つ以上の制御部又は1つ以上の人工知能プロセッサに結合され得るメモリであり得る。
【0056】
以下の技術は、単独で、又は異なる組み合わせで実施され得るし、本明細書に記載される他の技術と共に更に実施され得る。
【0057】
例えば、1つの実施形態において、本開示は、装置の少なくとも1つの処理ユニットによって実行可能なプログラムを格納する機械可読媒体を含む。プログラムは、
ニューラルネットワークにおける第1層から受信した複数の活性化値を、前記ニューラルネットワークにおける第2層を実装するように構成された多重化ユニットに提供し、前記複数の活性化値は、第1の複数の下位ビット仮数値及び第1共有指数値を使用して表され、
前記ニューラルネットワークにおける前記第2層に含まれる複数の重み値に対して、スパース化演算のセットを実行して、前記複数の重み値のサブセットと前記複数の重み値に関連する複数のマスク値とを生成し、前記複数の重み値は、第1の複数の下位ビット仮数値及び第2共有指数値を使用して表され、
前記複数の重み値のサブセットを、前記ニューラルネットワークにおける前記第2層を実装するように構成された行列乗算ユニットに提供する、
ための命令のセットを含み、
前記多重化ユニットは、前記複数のマスク値に基づいて前記複数の活性化値のサブセットを生成し、前記複数の活性化値のサブセットを前記行列乗算ユニットに提供するように更に構成され、
前記行列乗算ユニットは、前記複数の重み値のサブセット及び前記複数の活性化値のサブセットに対して行列乗算演算のセットを実行して出力のセットを生成するように構成され、
前記複数の重み値に対してスパース化演算のセットを実行することが、前記行列乗算ユニットが前記複数の活性化値と前記複数の重み値との積を生成するために実行するサイクル数を減少させる。
【0058】
一実施形態では、前記スパース化のセットを実行するステップは、
定義されたグループサイズに基づいて、前記複数の重み値を重み値のグループに分割するステップと、
前記重み値のグループ内の重み値の各グループについて、該重み値のグループ内の、最も高い値を有する重み値の定義された比率を決定するステップと、
を含み、
前記複数の重み値のサブセットは、前記重み値のグループ内の重み値の各グループについて、前記複数の重み値のサブセットに、重み値の決定された比率の重み値を含めることによって生成され、
前記複数の重み値に関連する前記複数のマスク値は、前記複数の重み値の各重み値について、
前記重み値が前記複数の重み値のサブセットに含まれる場合には、前記重み値に関連する前記複数のマスク値に前記マスク値として第1の定義された値を格納し、
前記重み値が前記複数の重み値のサブセットに含まれない場合には、前記重み値に関連する前記複数のマスク値に前記マスク値として第2の定義された値を格納する、
ことによって生成される。
【0059】
一実施形態では、本開示は、前記出力のセットに対してベクトル演算のセットを実行することを更に含む。
【0060】
一実施形態では、本開示は、前記ベクトル演算のセットを実行した後、前記行列乗算ユニットによって生成された前記出力のセットに対して量子化演算のセットを実行して、前記出力のセットの精度を低下させることを更に含む。
【0061】
一実施形態では、本開示は、量子化された前記出力のセットを前記ニューラルネットワークの第3層への入力として送信することを更に含む。
【0062】
一実施形態では、本開示は、前記量子化演算のセットを実行した後、量子化された前記出力のセットに対してスパース化演算のセットを実行して、量子化された前記出力のセットにスパース性を追加することを更に含む。
【0063】
一実施形態では、本開示は、前記量子化演算のセットを実行する前に、前記出力のセットに対してスパース化演算のセットを実行して、前記出力のセットにスパース性を追加することを更に含む。
【0064】
一実施形態では、本開示は、前記ベクトル演算のセットを実行する前に、前記行列乗算ユニットによって生成された前記出力のセットに対して量子化演算のセットを実行して、前記出力のセットの精度を低下させることを更に含む。
【0065】
一実施形態では、第1の複数の下位ビット仮数値の各下位ビット仮数値は、4ビット以下を含み、前記第2の複数の下位ビット仮数値の各下位ビット仮数値は、4ビット以下を含む。
【0066】
上記の説明は、特定の実施形態の態様がどのように実施され得るかの例と共に、本開示の様々な実施形態を示した。上記の例は、唯一の実施形態とみなされるべきではなく、以下の請求項によって定義される特定の実施形態の柔軟性及び利点を説明するために提示される。上記開示及び以下の請求項に基づき、請求項によって定義される本開示の範囲から逸脱することなく、他の構成、実施形態、実施形態及び均等物を採用することができる。
図1
図2
図3
図4
図5
図6
図7
図8
図9
【国際調査報告】