(57)【要約】ニューラルネットワークシステム［図６，６００］は、入力層［図６，２０４−０］、１つ以上の隠れ層［図６，２０４−１，２０４−２］、および出力層［図６，２０４−（Ｎ−１）］を含む。入力層は、一連のバッチを含むトレーニングセット［図６，２２０］を受取るとともに、一連のバッチにそれぞれ関連付けられた出力アクティベーション［図６，２０６−０］を当該入力層の後続層［図６，２０４−１］に提供する。第１の隠れ層［図７，２０４−ｉ］は、その先行層［図７，２０４−（ｉ−１）］から、第１のバッチ［図７，バッチｂ］に関連付けられた第１の入力アクティベーション［図７，２０６−（ｉ−１）］を受取り、第１のバッチに先行する第２のバッチ［図７，バッチ（ｂ−ｄ）］に関連付けられた第１の入力勾配［図７，２０８−（ｉ＋１）］を受取り、第１の入力アクティベーションおよび第１の入力勾配に基づいて、第１のバッチ［図７，バッチｂ］に関連付けられた第１の出力アクティベーション［図７，２０６−ｉ］を当該第１の隠れ層の先行層［図７，２０４−（０＋１）］に提供する。第１のバッチおよび第２のバッチは、少なくとも２つのバッチに関連付けられた遅延係数［図７，ｄ］を有する。出力層は、その先行層から第２の入力アクティベーション［図６，２０６−（Ｎ−２）］を受取り、その先行層［図６，２０４−（Ｎ−２）］に対して、第２の入力アクティベーションおよび第１のトレーニングセットに基づいて、第１の出力勾配［図６，２０８−（Ｎ−１）］を提供する。
2020534602.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルネットワークシステムであって、
入力層を含み、前記入力層は、
一連のバッチを含む第１のトレーニングセットを受取り、
前記入力層の後続層へと、前記一連のバッチにそれぞれ関連付けられた複数の出力アクティベーションを提供するように構成され、前記ニューラルネットワークシステムはさらに、
前記入力層に後続する１つ以上の隠れ層を含み、前記１つ以上の隠れ層は第１の隠れ層を含み、前記第１の隠れ層は、
前記第１の隠れ層の先行層から、第１のバッチに関連付けられた第１の入力アクティベーションを受取り、
前記第１のバッチに先行する第２のバッチに関連付けられた第１の入力勾配を受取るように構成されており、前記第１のバッチおよび前記第２のバッチは、少なくとも２つのバッチに関連付けられた遅延係数を有し、前記第１の隠れ層はさらに、
前記第１の隠れ層の後続層へと、前記第１の入力アクティベーションおよび前記第１の入力勾配に基づいて、前記第１のバッチに関連付けられた第１の出力アクティベーションを提供するように構成され、前記ニューラルネットワークシステムはさらに、
前記１つ以上の隠れ層に後続する出力層を含み、前記出力層は、
前記出力層の先行層から、第２の入力アクティベーションを受取り、
前記出力層の前記先行層へと、前記第２の入力アクティベーションおよび前記第１のトレーニングセットに基づいて、第１の出力勾配を提供するように構成される、ニューラルネットワークシステム。
【請求項２】
前記第１の隠れ層は、
前記第１の隠れ層の前記先行層へと、前記第１の入力アクティベーションおよび前記第１の入力勾配に基づいて、前記第２のバッチに関連付けられた第２の出力勾配を提供するように構成される、請求項１に記載のニューラルネットワークシステム。
【請求項３】
前記第１の隠れ層は、
前記第２のバッチおよび前記第１の入力勾配に関連付けられた第３の入力アクティベーションに基づいて、前記第２のバッチに関連付けられた第１の重みを生成し、
前記第１の入力アクティベーション、前記第１の入力勾配および前記第１の重みに基づいて、前記第１のバッチに関連付けられた前記第１の出力アクティベーションを生成するように構成される、請求項２に記載のニューラルネットワークシステム。
【請求項４】
前記第１の隠れ層は、
前記第１の入力アクティベーション、前記第１の入力勾配および前記第１の重みに基づいて前記第２の出力勾配を生成するように構成される、請求項３に記載のニューラルネットワークシステム。
【請求項５】
前記第１の隠れ層は、
前記第１のバッチと前記第２のバッチとの間の前記遅延係数に基づいて学習率を調整し、
前記第２のバッチに関連付けられた前記第１の入力勾配に前記学習率を適用することによって、前記第２のバッチに関連付けられた前記第１の重みを生成するように構成される、請求項３に記載のニューラルネットワークシステム。
【請求項６】
前処理ユニットをさらに含み、前記前処理ユニットは、
第１のサイズを有するオリジナルのトレーニングセットを受取り、
前記オリジナルのトレーニングセットに基づいて前記第１のトレーニングセットを生成するように構成され、前記第１のトレーニングセットは、前記第１のサイズよりも大きい第２のサイズを有する、請求項１に記載のニューラルネットワークシステム。
【請求項７】
前記第１の隠れ層は合成勾配生成器に結合され、前記合成勾配生成器は、
前記第２のバッチに先行する第３のバッチに関連付けられた第２の入力勾配を用いて第１の入力勾配推定を生成し、
前記第１の入力勾配推定を前記第１の入力勾配として前記第１の隠れ層に提供するように構成される、請求項１に記載のニューラルネットワークシステム。
【請求項８】
前記合成勾配生成器は、
前記第１の隠れ層の前記後続層から第２の入力勾配を受取り、
前記第１の入力勾配推定および前記第２の入力勾配に基づいて勾配推定誤差を生成し、
機械学習アルゴリズムを用いて前記勾配推定誤差に基づいて第２の入力勾配推定を生成するように構成される、請求項７に記載のニューラルネットワークシステム。
【請求項９】
前記第１の入力アクティベーション、前記第１の出力アクティベーション、前記第２の入力アクティベーション、および第１の出力勾配はバイナリ値を含む、請求項１に記載のニューラルネットワークシステム。
【請求項１０】
前記第１の入力アクティベーション、前記第１の出力アクティベーション、前記第２の入力アクティベーション、および前記第１の出力勾配を対数ドメインにおいて量子化するように構成された対数データ表現をさらに含む、請求項１に記載のニューラルネットワークシステム。
【請求項１１】
複数のアクセラレータをさらに含み、
各々のアクセラレータは、前記入力層、前記１つ以上の隠れ層および前記出力層のうち１つの層を実現するように構成され、
各々のアクセラレータは、それぞれの層に基づいた演算キャパシティおよびメモリキャパシティを有するように構成される、請求項１に記載のニューラルネットワークシステム。
【請求項１２】
方法であって、
入力層が、一連のバッチを含む第１のトレーニングセットを受取るステップと、
前記入力層が、前記入力層の後続層へと、前記一連のバッチにそれぞれ関連付けられた複数の出力アクティベーションを提供するステップと、
第１の隠れ層が、前記第１の隠れ層の先行層から、第１のバッチに関連付けられた第１の入力アクティベーションを受取るステップと、
前記第１の隠れ層が、前記第１のバッチに先行する第２のバッチに関連付けられた第１の入力勾配を受取るステップとを含み、前記第１のバッチおよび前記第２のバッチは、少なくとも２つのバッチに関連付けられた遅延係数を有しており、前記方法はさらに、
前記第１の隠れ層が、前記第１の隠れ層の後続層へと、前記第１の入力アクティベーションおよび前記第１の入力勾配に基づいて、前記第１のバッチに関連付けられた第１の出力アクティベーションを提供するステップと、
前記第１の隠れ層に後続する出力層が、前記出力層の先行層から、第２の入力アクティベーションを受取るステップと、
前記出力層が、前記出力層の前記先行層へと、前記第２の入力アクティベーションおよび前記第１のトレーニングセットに基づいて、第１の出力勾配を提供するステップとを含む、方法。
【請求項１３】
前記第１の隠れ層が、前記先行層へと、前記第１の入力アクティベーションおよび前記第１の入力勾配に基づいて、前記第２のバッチに関連付けられた第２の出力勾配を提供するステップをさらに含む、請求項１２に記載の方法。
【請求項１４】
前記第１の隠れ層が、前記第２のバッチおよび前記第１の入力勾配に関連付けられた第３の入力アクティベーションに基づいて、前記第２のバッチに関連付けられた第１の重みを生成するステップと、
前記第１の隠れ層が、前記第１の入力アクティベーション、前記第１の入力勾配および前記第１の重みに基づいて、前記第１のバッチに関連付けられた前記第１の出力アクティベーションを生成するステップとをさらに含む、請求項１３に記載の方法。
【請求項１５】
前記第１の隠れ層が、前記第１の入力アクティベーション、前記第１の入力勾配および前記第１の重みに基づいて、前記第２の出力勾配を生成するステップと、
前記第１の隠れ層が、前記第１のバッチと前記第２のバッチとの間の前記遅延係数に基づいて、学習率を調整するとともに、前記第１の隠れ層が、前記第２のバッチに関連付けられた前記第１の入力勾配に前記学習率を適用することによって、前記第２のバッチに関連付けられた前記第１の重みを生成するステップとをさらに含む、請求項１４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
本開示の例は、概して、集積回路（integrated circuit：ＩＣ）に関し、特に、ＩＣにおけるニューラルネットワークに関する。
【背景技術】
【０００２】
背景
機械学習能力は、急速に進化している。たとえば、ニューラルネットワーク（neural network：ＮＮ）は、データセンタおよびエンベデッドアプリケーションの両方において用いられ得る。典型的には、ニューラルネットワークは、十分に大きなデータセット上でトレーニングされる必要があり、トレーニングは、汎用のグラフィックス処理ユニット（graphics processing unit：ＧＰＧＰＵ）を用いて浮動小数点演算に基づいて実行される。このようなトレーニングは、ネットワークのサイズおよびトレーニングデータセットのサイズによっては、非常に長い時間かかる可能性がある。一般に、トレーニングデータセットは入力／出力対からなる。ニューラルネットワークトレーニングの目的は、トレーニングセットの各入力を対応する出力にマッピングするモデルを作成することである。実際のユースケースでは、このモデルはまた、トレーニングセットの一部ではないデータに一般化してもよい。
【０００３】
したがって、ニューラルネットワークトレーニングを実現する改善された方法を提供することが所望され得るとともに有益であるだろう。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
本開示に従ったいくつかの実施形態においては、ニューラルネットワークシステムは、入力層と、入力層に後続する１つ以上の隠れ層と、１つ以上の隠れ層に後続する出力層とを含む。入力層は、一連のバッチを含む第１のトレーニングセットを受取り、入力層の後続層へと、一連のバッチにそれぞれ関連付けられた複数の出力アクティベーションを提供するように構成される。１つ以上の隠れ層は第１の隠れ層を含む。第１の隠れ層は、第１の隠れ層の先行層から、第１のバッチに関連付けられた第１の入力アクティベーションを受取り、第１のバッチに先行する第２のバッチに関連付けられた第１の入力勾配を受取るように構成されており、第１のバッチおよび第２のバッチは、少なくとも２つのバッチに関連付けられた遅延係数を有する。当該第１の隠れ層は、第１の隠れ層の後続層へと、第１の入力アクティベーションおよび第１の入力勾配に基づいて、第１のバッチに関連付けられた第１の出力アクティベーションを提供するように構成されている。出力層は、出力層の先行層から、第２の入力アクティベーションを受取り、出力層の先行層へと、第２の入力アクティベーションおよび第１のトレーニングセットに基づいて、第１の出力勾配を提供するように構成される。
【０００５】
いくつかの実施形態においては、第１の隠れ層は、第１の隠れ層の先行層へと、第１の入力アクティベーションおよび第１の入力勾配に基づいて、第２のバッチに関連付けられた第２の出力勾配を提供するように構成される。
【０００６】
いくつかの実施形態においては、第１の隠れ層は、第２のバッチおよび第１の入力勾配に関連付けられた第３の入力アクティベーションに基づいて、第２のバッチに関連付けられた第１の重みを生成し、第１の入力アクティベーション、第１の入力勾配および第１の重みに基づいて、第１のバッチに関連付けられた第１の出力アクティベーションを生成するように構成される。
【０００７】
いくつかの実施形態においては、第１の隠れ層は、第１の入力アクティベーション、第１の入力勾配および第１の重みに基づいて第２の出力勾配を生成するように構成される。
【０００８】
いくつかの実施形態においては、第１の隠れ層は、第１のバッチと第２のバッチとの間の遅延係数に基づいて学習率を調整し、第２のバッチに関連付けられた第１の入力勾配に学習率を適用することによって、第２のバッチに関連付けられた第１の重みを生成するように構成される。
【０００９】
いくつかの実施形態においては、ニューラルネットワークシステムは前処理ユニットを含む。前処理ユニットは、第１のサイズを有するオリジナルのトレーニングセットを受取り、オリジナルのトレーニングセットに基づいて第１のトレーニングセットを生成するように構成されている。第１のトレーニングセットは、第１のサイズよりも大きい第２のサイズを有する。
【００１０】
いくつかの実施形態においては、第１の隠れ層は、第１の隠れ層の後続層から、第１の入力勾配を受取るように構成される。
【００１１】
いくつかの実施形態においては、第１の隠れ層は合成勾配生成器に結合されている。合成勾配生成器は、第２のバッチに先行する第３のバッチに関連付けられた第２の入力勾配を用いて第１の入力勾配推定を生成し、第１の隠れ層へと、第１の入力勾配推定を第１の入力勾配として提供するように構成される。
【００１２】
いくつかの実施形態においては、合成勾配生成器は、第１の隠れ層の後続層から第２の入力勾配を受取り、第１の入力勾配推定および第２の入力勾配に基づいて勾配推定誤差を生成し、機械学習アルゴリズムを用いて勾配推定誤差に基づいて第２の入力勾配推定を生成するように構成される。
【００１３】
いくつかの実施形態においては、第１の入力アクティベーション、第１の出力アクティベーション、第２の入力アクティベーション、および第１の出力勾配は、バイナリ値を含む。
【００１４】
いくつかの実施形態においては、ニューラルネットワークシステムは対数データ表現を含む。対数データ表現は、第１の入力アクティベーション、第１の出力アクティベーション、第２の入力アクティベーション、および第１の出力勾配を対数ドメイン（log-domain）において量子化するように構成されている。
【００１５】
いくつかの実施形態においては、ニューラルネットワークシステムは、第１の集積回路（ＩＣ）および第２の集積回路（ＩＣ）を含む。第１のＩＣは、入力層、１つ以上の隠れ層および出力層を含む複数の層のうち第１の層を実現するように構成される。第１のＩＣは、第１の層の第１の演算キャパシティ要件に応じた第１の演算キャパシティを有する。第２のＩＣは、複数の層のうち第２の層を実現するように構成されている。第２のＩＣは、第２の層の第２の演算キャパシティ要件に応じた第２の演算キャパシティを有する。
【００１６】
いくつかの実施形態においては、ニューラルネットワークシステムは複数のアクセラレータを含む。各々のアクセラレータは、入力層、１つ以上の隠れ層および出力層のうちの１つの層を実現するように構成される。各々のアクセラレータは、それぞれの層に基づいて演算キャパシティおよびメモリキャパシティを有するように構成される。
【００１７】
いくつかの実施形態においては、方法は、入力層が、一連のバッチを含む第１のトレーニングセットを受取るステップと、入力層が、入力層の後続層へと、当該一連のバッチにそれぞれ関連付けられた複数の出力アクティベーションを提供するステップと、第１の隠れ層が、第１の隠れ層の先行層から、第１のバッチに関連付けられた第１の入力アクティベーションを受取るステップと、第１の隠れ層が、第１のバッチに先行する第２のバッチに関連付けられた第１の入力勾配を受取るステップとを含み、第１のバッチおよび第２のバッチは、少なくとも２つのバッチに関連付けられた遅延係数を有する。当該方法はさらに、第１の隠れ層が、第１の隠れ層の後続層へと、第１の入力アクティベーションおよび第１の入力勾配に基づいて、第１のバッチに関連付けられた第１の出力アクティベーションを提供するステップと、第１の隠れ層に後続する出力層が、出力層の先行層から、第２の入力アクティベーションを受取るステップと、出力層が、出力層の先行層へと、第２の入力アクティベーションおよび第１のトレーニングセットに基づいて、第１の出力勾配を提供するステップとを含む。
【００１８】
いくつかの実施形態においては、当該方法は、第１の隠れ層が、先行層へと、第１の入力アクティベーションおよび第１の入力勾配に基づいて、第２のバッチに関連付けられた第２の出力勾配を提供するステップを含む。
【００１９】
いくつかの実施形態においては、当該方法は、第１の隠れ層が、第２のバッチおよび第１の入力勾配に関連付けられた第３の入力アクティベーションに基づいて、第２のバッチに関連付けられた第１の重みを生成するステップと、第１の隠れ層が、第１の入力アクティベーション、第１の入力勾配および第１の重みに基づいて、第１のバッチに関連付けられた第１の出力アクティベーションを生成するステップとを含む。
【００２０】
いくつかの実施形態においては、当該方法は、第１の隠れ層が、第１の入力アクティベーション、第１の入力勾配および第１の重みに基づいて、第２の出力勾配を生成するステップを含む。
【００２１】
いくつかの実施形態においては、当該方法は、第１の隠れ層が、第１のバッチと第２のバッチとの間の遅延係数に基づいて、学習率を調整するとともに、第１の隠れ層が、第２のバッチに関連付けられた第１の入力勾配に学習率を適用することによって、第２のバッチに関連付けられた第１の重みを生成するステップを含む。
【００２２】
いくつかの実施形態においては、当該方法は、第１のサイズを有するオリジナルのトレーニングセットを受取るステップと、オリジナルのトレーニングセットに基づいて第１のトレーニングセットを生成するステップとを含む。第１のトレーニングセットは、第１のサイズよりも大きい第２のサイズを有する。
【００２３】
いくつかの実施形態においては、第１の入力勾配は、合成勾配生成器から受取った第１の入力勾配推定である。
【００２４】
他の局面および特徴が、以下の詳細な説明および添付の図面を参照することによって明らかになるだろう。
【図面の簡単な説明】
【００２５】
【図１】本開示のいくつかの実施形態に従ったＩＣについての例示的なアーキテクチャを示すブロック図である。
【図２】本開示のいくつかの実施形態に従った例示的なニューラルネットワークシステムを示すブロック図である。
【図３】本開示のいくつかの実施形態に従ったニューラルネットワークシステムの例示的な層を示すブロック図である。
【図４】本開示のいくつかの実施形態に従った順方向経路処理要素を示すブロック図である。
【図５】本開示のいくつかの実施形態に従った逆方向経路処理要素を示すブロック図である。
【図６】本開示のいくつかの実施形態に従った遅延モデル適応スキームを実現するニューラルネットワークシステムを示すブロック図である。
【図７】本開示のいくつかの実施形態に従った、図６のニューラルネットワークシステムの層を示すブロック図である。
【図８】本開示のいくつかの実施形態に従ったニューラルネットワークシステムをトレーニングするための方法を示すフロー図である。
【図９Ａ】本開示のいくつかの実施形態に従った合成勾配生成器を示すブロック図である。
【図９Ｂ】本開示のいくつかの実施形態に従った合成勾配生成器を示すブロック図である。
【図１０】本開示のいくつかの実施形態に従った、逆伝播計算を実現するバイナリ化されたニューラルネットワークシステムの一部を示すブロック図である。
【図１１】本開示のいくつかの実施形態に従った、複数の演算ユニットを用いて実現されるニューラルネットワークシステムを示すブロック図である。
【図１２】本開示のいくつかの実施形態に従った、単一の処理アレイを用いて実現されるニューラルネットワークシステムを示すブロック図である。
【図１３】本開示のいくつかの実施形態に従った、２つの処理アレイを用いて実現されるニューラルネットワークシステムを示すブロック図である。
【発明を実施するための形態】
【００２６】
詳細な説明
以下に、例示的な実施形態を示す図を参照して、さまざまな実施形態について説明する。しかしながら、請求される発明は、異なる形態で具現化されてもよく、本明細書に記載される実施形態に限定されるものとして解釈されるべきではない。全体を通じて、同様の参照番号は同様の要素を指す。したがって、同様の要素は、各図の説明に関して詳細には説明されない。また、図は、実施形態の説明を容易にするように意図されているに過ぎないことにも留意されたい。これらの図は、請求される発明の網羅的な説明として、または請求される発明の範囲に対する限定として意図されるものではない。さらに、例示される実施形態は、図示されるすべての局面または利点を有する必要はない。特定の実施形態に関連付けて説明される局面または利点は、必ずしもその実施形態に限定されるものではなく、そのように図示されていなくても、またはそのように明示的に説明されていなくても、他の任意の実施形態において実施され得る。特徴、機能および利点は、さまざまな実施形態において独立して達成されてもよく、またはさらに他の実施形態において組合わされてもよい。
【００２７】
いくつかの図に例示的に示される代表的な実施形態を説明する前に、さらなる理解のために一般的な概論を提供する。人工ニューラルネットワーク（以下、ニューラルネットワークとも称する）は、脳神経回路網の構造から着想された演算モデルである。ニューラルネットワークは、入力層、複数の隠れ層および出力層を含む。各々の層は、ニューロンとも称される１つ以上の基本的な処理要素（processing element：ＰＥ）を含み得る。これらの層およびそれらのニューロンは互いに結合されており、これを通じてニューラルネットワークは非常に複雑な演算を実行し得る。特定のニューロンのアクティベーション（たとえば、出力）は、その特定のニューロンに結合された他のニューロンの出力に重みを加え、それらの他のニューロンの出力の重み付け和を生成し、その重み付け和にアクティベーション関数（activation function、活性化関数）を適用することによって獲得され得る。いくつかの実施形態においては、逆伝播学習法を用いて、データのバッチ（たとえば、画像認識においては、複数の画像）が処理された後に各ニューロンの誤差の寄与を計算してもよい。このような誤差の寄与は、損失関数の勾配として計算されてもよい。この場合、誤差は、出力層において計算され、ネットワーク層を通じて分配し返される。次いで、勾配を用いて重みが更新され得る。
【００２８】
上述したように、ニューラルネットワークは、典型的には、十分に大きなトレーニングデータセットに対してトレーニングされる必要がある。トレーニングデータセットは、複数のサブセット（バッチ）を含み得る。典型的なトレーニングアルゴリズムはさまざまな依存性を有し得る。このような依存性は、結果としてストール（stalling、停滞、停止）をもたらして、複数のアクセラレータを用いるニューラルネットワークを実現することを困難にする可能性がある。ニューラルネットワークの順方向経路と逆方向経路との間に依存性が存在するために、いくつかの実施形態においては、各バッチごとの順方向経路は、隣接するバッチの処理間の時間差を減らすために層ごとに実行される。さらに、トレーニングは、ＧＰＧＰＵを用いた浮動小数点演算に基づいて実行されてもよい。しかしながら、このようなトレーニングは、ニューラルネットワークのサイズおよびトレーニングデータセットのサイズに応じて長時間（たとえば、数時間から数週間）かかる可能性がある。
【００２９】
さまざまな技術を用いてトレーニングアルゴリズムにおける依存性を排除してもよく、これにより、ストールを防止または低減し得るとともに、複数のアクセラレータ（たとえば、複数のＧＰＵ、複数のＦＰＧＡ、複数の特定用途向け集積回路（application-specific integrated circuit：ＡＳＩＣ）、単一のＦＰＧＡ内における複数のアクセラレータ（たとえば、シストリックアレイ））を用いて実装を可能にし得ることが発見された。たとえば、遅延モデル適応スキームを用いることで、トレーニング中の（たとえば、順方向経路によって演算される）アクティベーションと（たとえば、逆方向経路によって演算される）勾配との間の依存性を排除してもよい。このような遅延モデル適応は、ニューラルネットワークトレーニングの順方向経路および逆方向経路が並列に実現されることを可能にする。これは、各層における重み更新および勾配計算と出力アクティベーションとの間に遅延を挿入することによって達成される。これにより、各層ごとの計算を、異なるバッチの入力なしに独立して実行することが可能となる。さらなる例として、合成勾配（たとえば、機械学習アルゴリズムによって生成される勾配推定）を用いることで、ニューラルネットワークの各層に勾配をもたらして、これにより、トレーニング中における勾配に関する依存性をなくすこともできる。
【００３０】
また、浮動小数点演算に基づくニューラルネットワークにおける著しい冗長性を排除することによって、精度にほとんどまたは全く影響を及ぼすことなくトレーニング効率が改善され得ることも発見された。たとえば、（たとえば、２進数演算に基づく）精度の低いデータタイプがニューラルネットワークのトレーニングにおいて用いられてもよい。バイナリデータタイプ（たとえば、バイナリの重み、バイナリアクティベーションおよび／またはバイナリ勾配）を用いるニューラルネットワークは、バイナリ化されたニューラルネットワークと称されることもある。このようなバイナリ化されたニューラルネットワークは、フィールドプログラマブルゲートアレイ（field programmable gate array：ＦＰＧＡ）などのプログラマブルＩＣに効率的にマッピングされ得る。さらに、カスタムデータ表現（たとえば、確率量子化のあるなしに関わらず対数演算または固定点演算を用いる表現）を用いて、ニューラルネットワークのハードウェア実装を向上させてもよい。
【００３１】
上述の一般的な理解を念頭に置いて、ニューラルネットワークを実現するためのさまざまな実施形態を以下に記載する。さまざまな利点が、本開示のさまざまな適用例に存在し得る。すべての実施形態に対して必ずしも特別な利点は必要ではなく、異なる実施形態は異なる利点を提供し得る。いくつかの実施形態における利点の１つは、ニューラルネットワークの層間の依存性を排除することによって（たとえば、遅延モデル適応スキームおよび／または合成勾配を用いることによって）、複数の演算ユニット（たとえば、複数のアクセラレータ）を用いてニューラルネットワークが実現され得ることにより、ニューラルネットワークのトレーニング時間が削減され得ることである。たとえば、複数のアクセラレータは、アクセラレータ利用率を向上させ得る、対応する層のさまざまな演算およびメモリ要件に基づいて構成されてもよい。
【００３２】
いくつかの実施形態における別の利点は、ニューラルネットワークをトレーニングする際に低い精度（たとえば、バイナリ化されたニューラルネットワーク）およびカスタムデータ表現（たとえば、対数演算表現）が用いられ得ることで、トレーニング効率を向上させ得ることである。このような低い精度およびカスタムデータ表現は、ニューラルネットワークのさまざまな実現例、たとえば、単一のアクセラレータ（たとえば、単一のＧＰＵ、単一のシストリックアレイを含むＦＰＧＡ）または複数のアクセラレータ（たとえば、複数のＧＰＵ、複数のＦＰＧＡ、複数のシストリックアレイを含む単一のＦＰＧＡ）を用いる実現例において用いられてもよい。
【００３３】
いくつかの実施形態におけるさらに別の利点は、ＦＰＧＡを用いるニューラルネットワークトレーニングが用いる電力の消費が（たとえば、ＧＰＵと比べて）低くなり得ることで、オンライントレーニングが可能になり得ることである。このようなオンライントレーニングは、ＦＰＧＡのエンベデッドデバイスが、環境変化に合わせて継続的な調整を行うことを可能にするとともに、ニューラルネットワークのハードウェア実装を再合成することなく精度およびスループットのトレードオフを達成することを可能にし得る。いくつかの実施形態におけるさらに別の利点は、受け取ったトレーニングデータセットを（たとえば、変形、シェーディング、回転、スケーリングによって）人工的に増強するために（たとえば、ニューラルネットワークのハードウェアが実装されているオンチップまたはオフチップの）前処理ユニットを用いることによって、より高いトレーニング精度が達成され得ることである。
【００３４】
いくつかの実施形態におけるさらに別の利点は、ランダムな丸めおよびドロップアウトをサポートするために、ニューラルネットワークの各層内において乱数生成器が用いられ得ることである。以下において詳細に記載されるさまざまな技術を用いることによって、より効率的なニューラルネットワークトレーニングが実現され、これにより、データサイエンティストの生産性を高め、ニューラルネットワークの精度を向上させる。
【００３５】
いくつかの実施形態におけるさらに別の利点は、逆方向経路全体を演算する前に順方向経路全体の演算を完了するという要件によって課されるようなデータ依存性を排除することによって、アクセラレータアーキテクチャ（たとえば、データフロー）において活用できる、より高度な並列性が導入されることである。
【００３６】
いくつかの実施形態におけるさらに別の利点は、順方向経路における重みと、勾配を用いて計算される更新とに遅延を導入することによって、勾配の推定を用いることによりトレーニングがうまく機能し得ることである。
【００３７】
データ依存性を排除することによって、アクセラレータアーキテクチャ（たとえば、データフロー）において活用できるより高度な並列性が導入される。
【００３８】
上述の実施形態のうちの１つ以上が特定のタイプのＩＣを用いて実証されているので、このようなＩＣを以下において詳細に説明する。しかしながら、他のタイプのＩＣでも本明細書中に記載される実施形態のうちの１つ以上から利益を受け得ることが理解されるはずである。
【００３９】
プログラマブル論理デバイス（programmable logic device：ＰＬＤ）は、特定の論理関数を実行するようにプログラムすることができる周知のタイプの集積回路である。或る１タイプのＰＬＤ、すなわちフィールドプログラマブルゲートアレイ（「ＦＰＧＡ」）は、典型的には、プログラマブルタイルのアレイを含む。これらのプログラマブルタイルは、たとえば、入出力ブロック（input/output block：ＩＯＢ）、構成可能な論理ブロック（configurable logic block：ＣＬＢ）、専用ランダムアクセスメモリブロック（dedicated random access memory block：ＢＲＡＭ）、乗算器、デジタル信号処理ブロック（digital signal processing block：ＤＳＰ）、プロセッサ、クロックマネージャ、遅延ロックループ（delay lock loop：ＤＬＬ）等を含み得る。本明細書で用いられる場合、「含む（include、including）」は、限定することなく含むことを意味する。
【００４０】
各々のプログラマブルタイルは、典型的には、プログラマブル相互接続およびプログラマブル論理をともに含む。プログラマブル相互接続は、典型的には、プログラマブル相互接続ポイント（programmable interconnect point：ＰＩＰ）によって相互接続されたさまざまな長さの多数の相互接続線を含む。プログラマブル論理は、たとえば、関数生成器、レジスタ、演算論理などを含み得るプログラマブル要素を用いてユーザ設計の論理を実現する。
【００４１】
プログラマブル相互接続およびプログラマブル論理は、典型的には、プログラマブル要素がどのように構成されるかを定義する内部構成メモリセルに構成データのストリームをロードすることによってプログラムされる。構成データは、メモリから（たとえば、外部ＰＲＯＭから）読出し可能であるか、または外部デバイスによってＦＰＧＡに書込み可能である。個々のメモリセルの集合状態はＦＰＧＡの機能を決定する。
【００４２】
別のタイプのＰＬＤは、複合プログラマブル論理デバイスまたはＣＰＬＤ（complex programmable logic device）である。ＣＰＬＤは、相互接続スイッチマトリックスによって一緒に接続され、入出力（input/output：Ｉ／Ｏ）リソースに接続される２つ以上の「機能ブロック」を含む。ＣＰＬＤの各機能ブロックは、プログラマブル論理アレイ（programmable logic array：ＰＬＡ）およびプログラマブルアレイ論理（programmable array logic：ＰＡＬ）デバイスにおいて用いられるものと同様の２レベルＡＮＤ／ＯＲ構造を含む。ＣＰＬＤでは、構成データは、典型的には、不揮発性メモリにオンチップで格納される。いくつかのＣＰＬＤでは、構成データは、不揮発性メモリにオンチップで格納され、その後、初期構成（プログラミング）シーケンスの一部として揮発性メモリにダウンロードされる。
【００４３】
一般に、これらのプログラマブル論理デバイス（「ＰＬＤ」）の各々において、デバイスの機能性は、その目的のためにデバイスに提供される構成データによって制御される。構成データは、揮発性メモリ（たとえば、ＦＰＧＡおよびいくつかのＣＰＬＤにおいて一般的なスタティックメモリセル）、不揮発性メモリ（たとえば、いくつかのＣＰＬＤにおけるようなＦＬＡＳＨメモリ）、または他の任意のタイプのメモリセルに格納することができる。
【００４４】
他のＰＬＤは、デバイス上のさまざまな要素をプログラム可能に相互接続する金属層などの処理層を適用することによってプログラムされる。これらのＰＬＤは、マスクプログラマブルデバイスとして公知である。ＰＬＤはまた、たとえば、ヒューズまたはアンチヒューズ技術を用いて、他の方法で実現され得る。「ＰＬＤ」および「プログラマブル論理デバイス」といった語は、これらの例示的なデバイスだけでなく、部分的にのみプログラマブルなデバイスをも含むが、これらに限定されない。たとえば、或る１つのタイプのＰＬＤは、ハードコード化されたトランジスタ論理と、ハードコード化されたトランジスタ論理をプログラム可能に相互接続するプログラマブルスイッチファブリックとの組合わせを含む。
【００４５】
上述のように、高度なＦＰＧＡは、アレイ内にいくつかの異なるタイプのプログラマブル論理ブロックを含み得る。たとえば、図１は、例示的なＦＰＧＡアーキテクチャ１００を示す。ＦＰＧＡアーキテクチャ１００は多数の異なるプログラマブルタイルを含む。多数の異なるプログラマブルタイルは、マルチギガビットトランシーバ（multi-gigabit transceiver：ＭＧＴ）１０１、構成可能な論理ブロック（configurable logic block：ＣＬＢ）１０２、ランダムアクセスメモリブロック（random access memory block：ＢＲＡＭ）１０３、入出力ブロック（input/output block：ＩＯＢ）１０４、構成およびクロック論理（configuration and clocking logic：ＣＯＮＦＩＧ／ＣＬＯＣＫＳ）１０５、デジタル信号処理ブロック（digital signal processing block：ＤＳＰ）１０６、特定用途の入出力ブロック（specialized input/output block：Ｉ／Ｏ）１０７（たとえば、構成ポートおよびクロックポート）、ならびに、他のプログラマブル論理１０８、たとえば、デジタルクロックマネージャ、アナログデジタル変換器、システム監視論理などを含む。いくつかのＦＰＧＡはまた、専用のプロセッサブロック（processor block：ＰＲＯＣ）１１０を含む。
【００４６】
いくつかのＦＰＧＡにおいては、各々のプログラマブルタイルは、図１の上部に含まれる例によって示されるように、同じタイル内のプログラマブル論理要素の入力端子および出力端子１２０への接続部を有する少なくとも１つのプログラマブル相互接続要素（interconnect element：ＩＮＴ）１１１を含み得る。各々のプログラマブル相互接続要素１１１はまた、同じタイルまたは他のタイルにおける隣接するプログラマブル相互接続要素の相互接続セグメント１２２への接続部を含み得る。各々のプログラマブル相互接続要素１１１はまた、論理ブロック（図示せず）間の一般的なルーティングリソースの相互接続セグメント１２４への接続部を含み得る。一般的なルーティングリソースは、相互接続セグメント（たとえば、相互接続セグメント１２４）のトラックを含む論理ブロック（図示せず）と、相互接続セグメントを接続するためのスイッチブロック（図示せず）との間のルーティングチャネルを含み得る。一般的なルーティングリソースの相互接続セグメント（たとえば、相互接続セグメント１２４）は、１つ以上の論理ブロックにわたって延在し得る。一般的なルーティングリソースとともに採用されているプログラマブル相互接続要素１１１は、図示されるＦＰＧＡのためのプログラマブル相互接続構造（「プログラマブル相互接続」）を実現する。
【００４７】
一実現例においては、ＣＬＢ１０２は、ユーザ論理に加えて単一のプログラマブル相互接続要素（「ＩＮＴ」）１１１を実現するようにプログラムされ得る構成可能な論理要素（configurable logic element：ＣＬＥ）１１２を含み得る。ＢＲＡＭ１０３は、１つ以上のプログラマブル相互接続要素に加えて、ＢＲＡＭ論理要素（BRAM logic element：ＢＲＬ）１１３を含み得る。典型的には、１つのタイルに含まれる相互接続要素の数は、タイルの高さに依存する。図示した例では、ＢＲＡＭタイルは、５つのＣＬＢと同じ高さを有するが、他の数（たとえば、４つ）を用いることもできる。ＤＳＰタイル１０６は、適切な数のプログラマブル相互接続要素に加えてＤＳＰ論理要素（DSP logic element：ＤＳＰＬ）１１４を含み得る。ＩＯＢ１０４は、たとえば、プログラマブル相互接続要素１１１の１つのインスタンスに加えて、入出力論理要素（input/output logic element：ＩＯＬ）１１５の２つのインスタンスを含み得る。当業者に明らかになるように、たとえばＩ／Ｏ論理要素１１５に接続される実際のＩ／Ｏパッドは、典型的には、入出力論理要素１１５の面積に限定されない。
【００４８】
図１の例では、（たとえば、図１に示される領域１０５、１０７および１０８から形成される）ダイの中心付近の（水平に示される）領域は、構成、クロック、および他の制御論理のために用いることができる。この水平領域から延びる（垂直に示される）列１０９または他の列は、ＦＰＧＡの幅にわたってクロックおよび構成信号を分配するために用いられ得る。
【００４９】
図１に示されるアーキテクチャを利用するいくつかのＦＰＧＡは、ＦＰＧＡの大部分を構成する規則的な柱状構造を妨害する追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび／又は専用論理であり得る。たとえば、ＰＲＯＣ１１０は、ＣＬＢおよびＢＲＡＭのいくつかの列にわたって延在している。ＰＲＯＣ１１０は、単一のマイクロプロセッサからマイクロプロセッサ、メモリコントローラ、周辺機器などからなる完全なプログラマブル処理システムに及ぶさまざまな構成要素を含み得る。
【００５０】
一局面においては、ＰＲＯＣ１１０は、ＩＣのプログラマブル回路を実現するダイの一部として作製される専用回路、たとえば、ハードワイヤードプロセッサとして実現される。ＰＲＯＣ１１０は、個々のプロセッサ、たとえば、プログラムコードを実行できる単一のコアから、１つ以上のコア、モジュール、コプロセッサ、インターフェイスなどを有するプロセッサシステム全体にわたって複雑に広がるさまざまな異なるプロセッサタイプおよび／またはシステムのいずれかを表し得る。
【００５１】
別の局面においては、ＰＲＯＣ１１０は、アーキテクチャ１００から省かれており、記載される他のさまざまな種類のプログラマブルブロックのうちの１つ以上と置換えられてもよい。さらに、このようなブロックは「ソフトプロセッサ」を形成するために利用され得るが、それは、ＰＲＯＣ１１０の場合と同様に、プログラムコードを実行することができるプロセッサを形成するために、プログラマブル回路のさまざまなブロックを使用することができるからである。
【００５２】
「プログラマブル回路」という語は、ＩＣ内のプログラマブル回路要素、たとえば、本明細書中に記載されるさまざまなプログラマブルなまたは構成可能な回路ブロックまたはタイル、ならびに、ＩＣにロードされる構成データに従ってさまざまな回路ブロック、タイルおよび／または要素を選択的に結合する相互接続回路を指し得る。たとえば、図１に示されているＣＬＢ１０２およびＢＲＡＭ１０３などの、ＰＲＯＣ１１０の外部にある部分は、ＩＣのプログラマブル回路と見なすことができる。
【００５３】
いくつかの実施形態においては、プログラマブル回路の機能性および接続性は、構成データがＩＣにロードされるまで確立されない。構成データのセットを用いて、ＦＰＧＡなどのＩＣのプログラマブル回路をプログラムすることができる。構成データは、場合によっては、「構成ビットストリーム」と称される。一般に、プログラマブル回路は、初めは構成ビットストリームをＩＣにロードしていない状態であって、動作可能でも機能的でもない。構成ビットストリームは、プログラマブル回路内の特定の回路設計を実質的に実現またはインスタンス化する。回路設計は、たとえば、プログラマブル回路ブロックの機能的局面およびさまざまなプログラマブル回路ブロック間の物理的接続性を特定する。
【００５４】
いくつかの実施形態においては、「ハードワイヤード」または「ハード化された」（すなわち、プログラム可能でない）回路はＩＣの一部として製造される。プログラマブル回路とは異なり、ハードワイヤード回路または回路ブロックは、構成ビットストリームのロードを経たＩＣの製造後にも実現されない。ハードワイヤード回路は、一般に、たとえば、最初に構成ビットストリームをＩＣ、たとえばＰＲＯＣ１１０にロードしていなくても機能する専用の回路ブロックおよび相互接続を有すると考えられている。
【００５５】
場合によっては、ハードワイヤード回路は、ＩＣ内の１つ以上のメモリ要素に格納されたレジスタ設定または値に従って設定または選択することができる１つ以上の動作モードを有していてもよい。動作モードは、たとえば、ＩＣへの構成ビットストリームのロードを通じて設定することができる。この能力にもかかわらず、ハードワイヤード回路は、ＩＣの一部として製造される場合に動作可能であるとともに特定の機能を有するので、プログラマブル回路とは見なされない。
【００５６】
図１は、プログラマブル回路、たとえばプログラマブルファブリックを含むＩＣを実現するために用いることができる例示的なアーキテクチャを例示するように意図されている。たとえば、図１の上部に含まれる、或る行における論理ブロックの数、複数行の相対的な幅、複数行の数および順序、複数行に含まれる論理ブロックの種類、論理ブロックの相対的サイズ、および相互接続／論理の実装は、純粋に例示的なものである。たとえば、実際のＩＣでは、ＣＬＢにおける２つ以上の隣接する行は、典型的には、ユーザ論理の効率的な実装を容易にするために、ＣＬＢが現れるところであればどこにでも含まれているが、隣接するＣＬＢ行の数は、ＩＣの全体的なサイズに応じて変化する。さらに、図１のＦＰＧＡは、本明細書に記載される相互接続回路の例を採用できるプログラマブルＩＣの一例を示す。本明細書に記載される相互接続回路は、ＣＰＬＤなどの他のタイプのプログラマブルＩＣにおいて、または論理要素を選択的に結合するためのプログラマブル相互接続構造を有する任意のタイプのプログラマブルＩＣにおいて用いることができる。
【００５７】
なお、ニューラルネットワークを実現し得るＩＣが図１に示される例示的なＩＣに限定されるものではなく、他の構成を有するＩＣまたは他の種類のＩＣでもニューラルネットワークシステムを実現し得ることに留意されたい。
【００５８】
図２を参照すると、例示的なニューラルネットワークシステム２００が示される。ニューラルネットワークシステム２００は、前処理ユニット２０２と、層２０４−０〜層２０４−（Ｎ−１）を含むＮ個の層と、損失演算ユニット２１０とを含む。これらの層は、プログラマブル論理デバイス、ＤＳＰブロックなどを用いて実現され得る。一例では、Ｎ個の層を含むニューラルネットワークシステム２００が単一のＩＣにおいて実現され得る。別の例では、複数のＩＣを用いてニューラルネットワークシステム２００を実現してもよく、この場合、各ＩＣは、ニューラルネットワークシステム２００の１つ以上の層を実現し得る。各層は１つ以上のニューロンを含み得る。各ニューロンは、その対応する順方向経路処理要素（ＰＥ）および逆方向経路ＰＥを有する。これら経路については以下に詳細に説明する。第１の層２０４−０は、入力トレーニングセットを受取り得るとともに、入力層２０４−０と称されてもよい。入力トレーニングセットは、バッチインデックス０，１，２，３，…，Ｂ−１を有する一連のバッチを含み得る。ここで、Ｂは、入力トレーニングセットにおけるバッチの数である。インデックスｂを有するバッチは、ｂ番目のバッチと称され得る。最後の層２０４−（Ｎ−１）は、入力層２０４−０が受取った対応する入力のための出力を提供し得るとともに、出力層２０４−（Ｎ−１）と称され得る。層２０４−１〜層２０４−（Ｎ−２）は隠れ層とも称され得る。
【００５９】
いくつかの実施形態においては、前処理ユニット２０２は、入力トレーニングセット２２０を受取り、（たとえば、歪み、シェーディング、回転、スケーリング、クロッピング、および他の適用可能なプロセスを実行することによって）入力トレーニングセット２２０におけるバッチを人工的に増強し、増強されたバッチを含む前処理されたトレーニングセット２２２を生成し得る。いくつかの例においては、増強されたバッチは、対応するオリジナルのバッチのサイズよりも大きいかまたは等しいサイズを有する。このような前処理は、入力トレーニングセット２２０（たとえば、画像）のデータレートが、ニューラルネットワークシステム２００を実現するターゲットデバイスの演算能力を十分に利用することができない場合に実行され得る。入力トレーニングセット２２０のデータレートは、入力トレーニングセット２２０をキャプチャして提供するためのさまざまなプロセスによって影響を受ける可能性がある。たとえば、それは、入力トレーニングセット２２０（たとえば、画像）をキャプチャするためのソースキャプチャデバイス（たとえば、カメラ、マイクロフォン）の速度によって影響を受ける可能性がある。さらなる例として、それは、入力トレーニングセット２２０を提供するために用いられる外部メモリによってもたらされるボトルネックの影響を受ける可能性がある。前処理は、入力トレーニングセット２２０のこのようなデータレートが、ターゲットデバイスの演算能力に基づいて決定された閾値データレートより低い場合に実行されてもよい。いくつかの例では、前処理後、前処理されたトレーニングセット２２２は、入力トレーニングセット２２０よりも大きいサイズを有する。サイズが大きいこのような前処理されたトレーニングセット２２２は、トレーニングされたニューラルネットワークの品質を（たとえば、ニューラルネットワークトレーニングによって作成されるモデルの一般性を改善することによって）改善し得るとともに、ニューラルネットワークシステムを実現するターゲットデバイスの演算能力をより良く利用し得る。
【００６０】
ニューラルネットワークシステム２００は、さまざまなトレーニングアルゴリズムを実現し得る。いくつかの実施形態においては、ニューラルネットワークシステムは逆伝播アルゴリズムを用いてもよい。ニューラルネットワークがｂ番目のバッチについての重みＷ（ｂ）を有し、重みＷ（ｂ）に基づいて推定関数ｆｂ（ｘｉ）を提供するものとする。この場合、ｘｉは、推定されるべき入力（すなわち、認識されるべき画像）である。このようなニューラルネットワークの場合、逆伝播アルゴリズムは、順方向経路（順方向伝播）プロセスおよび逆方向経路（逆方向伝播）プロセスの２つのプロセスを含む。
【００６１】
いくつかの実施形態においては、順方向経路プロセスは、すべての層２０４−０〜層２０４−（Ｎ−１）についてアクティベーション２０６−０〜２０６−（Ｎ−１）を演算することを含み得る。Ｍ個のサンプルを含む前処理されたトレーニングセット２２２の場合、入力／出力対は｛ｘｉ，ｙｉ｝と表すことができ、この場合、ｉ＝０，…，Ｍ−１である。
【００６２】
【数１】
2020534602.tif 000003
【００６３】
ここで、ｆｂは、所与のｂ番目のバッチに関して計算された重みについての所与のニューラルネットワークによって記述されたモデルを指す。出力を計算するためのプロセスは、最初に、層２０４−０によってアクティベーション２０６−０を計算し、層２０４−０から次の層２０４−１にアクティベーション２０６−０を渡し、層２０４−１によってアクティベーション２０６−１を計算するなどの工程を、最後の層２０４−（Ｎ−１）がアクティベーション２０６−（Ｎ−１）を計算するまで、行なうことを含み得る。次いで、アクティベーション２０６−（Ｎ−１）が損失演算ユニット２１０に送られ得る。
【００６４】
いくつかの実施形態においては、逆方向経路プロセスは、勾配２０８−Ｎから勾配２０８−１を演算することを含み得る。図２の例では、最後の層２０４−（Ｎ−１）からアクティベーション２０６−（Ｎ−１）を受取った後、損失演算ユニット２１０は、所定の損失関数を用いて、アクティベーション２０６−（Ｎ−１）および前処理されたトレーニングセット２２２に基づいて勾配２０８−Ｎを演算し得る。一例においては、所定の損失関数は、劣微分損失関数（sub-differential loss function）、たとえば、以下のように与えられる二乗ヒンジ損失関数（squared hinge loss function）であり得る。
【００６５】
【数２】
2020534602.tif 000004
【００６６】
次いで、損失演算ユニット２１０は、勾配２０８−Ｎを最後の層２０４−（Ｎ−１）に送り得る。層２０４−ｉは、損失関数を用いて、次の層２０４−（ｉ＋１）から受取った勾配２０８−（ｉ＋１）と先行層２０４−（ｉ−１）から受取ったアクティベーション２０６−（ｉ−１）とに基づいて、その勾配２０８−ｉを計算し得る。次いで、計算された勾配２０８−ｉは、先行層２０４−（ｉ−１）に渡されてもよく、これは、２つ以上の関数の合成（composition）の導関数を演算するための式である連鎖律（チェーンルール）を繰り返し適用することによって、各重みごとの勾配を計算するために用いられてもよい。勾配のこのような演算は、すべての層２０４−（Ｎ−１）〜層２０４−０における重みの勾配が計算されるまで続けられる。
【００６７】
いくつかの実施形態においては、逆方向経路プロセス中に、重みの勾配を用いることで、勾配降下アルゴリズムを用いて重みを更新してもよい。一例では、特定の層において、重み更新プロセスが以下のように提供され得る。
【００６８】
Ｗ（ｂ＋１）＝Ｗ（ｂ）−μＧｒａｄ（ｂ）
ここで、Ｗ（ｂ）はｂ番目のバッチについての重みであり、Ｇｒａｄ（ｂ）はｂ番目のバッチについての勾配であり、μは学習率またはステップサイズと呼ばれるスケーリング係数であり、Ｗ（ｂ＋１）は（ｂ＋１）番目のバッチの重みである。
【００６９】
図３、図４および図５を参照すると、ニューラルネットワークシステム２００の例示的な層２０４−ｉが示されている。図３は、層２０４−ｉにおいて逆伝播アルゴリズムの順方向経路プロセスを実行するための順方向経路ユニット３００と、層２０４−ｉにおいて逆伝播アルゴリズムの逆方向経路プロセスを実行するための逆方向経路ユニット３０２とを含む層２０４−ｉを示す。図４は、順方向経路ユニット３００の例示的な順方向経路処理要素（ＰＥ）を示す。図５は、逆方向経路ユニット３０２の例示的な逆方向経路ＰＥを示す。
【００７０】
図３の例を参照すると、層２０４−ｉは、順方向経路ユニット３００および逆方向経路ユニット３０２を含む。順方向経路ユニット３００は、バッファ３０４およびＰ個の順方向経路処理要素（ＰＥ）３０６−０〜３０６−（Ｐ−１）を含む。この場合、Ｐは１以上の整数である。バッファ３０４は、先行層２０４−（ｉ−１）からアクティベーション２０６−（ｉ−１）を受取り、アクティベーション２０６−（ｉ−１）をＰ個の順方向経路ＰＥ３０６−０〜３０６−（Ｐ−１）に送る。順方向経路ＰＥ３０６−０〜３０６−（Ｐ−１）は、先行層２０４−（ｉ−１）からのアクティベーション２０６−（ｉ−１）に基づいてアクティベーション２０６−ｉを生成し、アクティベーション２０６−ｉを次の層２０４−（ｉ＋１）に（たとえば、バッファ３０８を介して）送るためのアクティベーション生成機能を実行し得る。いくつかの実施形態においては、各々の順方向経路ＰＥは、層２０４−ｉのニューロンに対応する。したがって、順方向経路ユニット３００における順方向経路ＰＥの数Ｐは、順方向経路プロセスにおいて並列に演算され得る層２０４−ｉのニューロンの数を制御し得る。いくつかの実施形態においては、順方向経路ＰＥ３０６−０〜３０６−（Ｐ−１）は、それぞれ対応する逆方向経路ＰＥ３１０−０〜３１０−（Ｐ−１）から重み３１８を受取り、更新された重み３１８およびアクティベーション２０６−（ｉ−１）に基づいてアクティベーション生成機能を実行してもよい。
【００７１】
図３の例では、逆方向経路ユニット３０２は、バッファ３１２と、Ｐ個の逆方向経路ＰＥ３１０−０〜３１０−（Ｐ−１）とを含む。バッファ３１２は、次の層２０４−（ｉ＋１）から勾配２０８−（ｉ＋１）を受取り、勾配２０８−（ｉ＋１）をＰ個の逆方向経路ＰＥ３１０−０〜３１０−（Ｐ−１）に送る。逆方向経路ＰＥ３１０−０〜３１０−（Ｐ−１）は、先行層２０４−（ｉ−１）からのアクティベーション２０６−（ｉ−１）および次の層２０４−（ｉ＋１）からの勾配２０８−（ｉ＋１）に基づいて勾配２０８−ｉを生成するための勾配生成機能を実行し得る。勾配２０８−ｉは、たとえばバッファ３１４を介して先行層２０４−（ｉ−１）に送られてもよい。いくつかの実施形態においては、各々の逆方向経路ＰＥは層２０４−ｉのニューロンに対応する。したがって、逆方向経路ユニット３０２における逆方向経路ＰＥの数Ｐは、逆方向経路プロセスにおいて並列に演算され得る層２０４−ｉのニューロンの数を制御し得る。いくつかの実施形態においては、逆方向経路ＰＥ３１０−０〜３１０−（Ｐ−１）は、対応する順方向経路ＰＥ３０６−０〜３０６−（Ｐ−１）からそれぞれアクティベーション入力３１６を受取り、先行層２０４−（ｉ−１）からのアクティベーション２０６−（ｉ−１）と、次の層２０４−（ｉ＋１）からの勾配２０８−（ｉ＋１）と、対応する順方向経路ＰＥからのアクティベーション入力３１６とに基づいて、勾配生成機能を実行し得る。
【００７２】
図４を参照すると、層２０４−ｉの順方向経路ユニット３００の例示的な順方向経路ＰＥ３０６−ｐが示されている。順方向経路ＰＥ３０６−ｐは、重みおよび閾値メモリ４０２と、積和演算ユニット４０４と、アクティベーションユニット４０６とを含む。重みおよび閾値メモリ４０２は、（たとえば、層２０４−ｉの逆方向経路ユニット３０２のうち対応する逆方向経路ＰＥ３１０−ｐから）更新された重み３１８を受取り、重み３１８を積和演算ユニット４０４に送り得る。積和演算ユニット４０４は、先行層２０４−（ｉ−１）からアクティベーション２０６−（ｉ−１）を受取り、重みおよび閾値メモリ４０２から重み３１８を受取り、（たとえば、ハードウェア積和演算器（multiplier-accumulator：ＭＡＣ）ユニットを用いることによって）積和演算を実行することによってアクティベーション入力３１６を生成し得る。アクティベーションユニット入力３１６は、アクティベーションユニット４０６に送られてもよく、アクティベーションユニット４０６は、アクティベーションユニット入力３１６および重み３１８に基づいてアクティベーション２０６−ｉを生成する。次いで、アクティベーション２０６−ｉは、次の層２０４−（ｉ＋１）の入力に提供され得る。いくつかの実施形態においては、アクティベーション入力３１６はまた、逆方向経路プロセスにおける勾配を演算するために、対応する逆方向経路ＰＥ３１０−ｐに送られてもよい。
【００７３】
図４の例では、積和演算ユニット４０４は、単一のドット積についてクロックサイクルごとにＳの積和を演算するようにスケーリングされ得る。図３の順方向経路ユニット３００においては、順方向経路ＰＥの数Ｐは、並列に演算されるドット積の数を制御する。結果として、単一の層２０４−ｉは、順方向経路プロセスにおいて各クロックサイクルごとにＰのニューロンのＳのシナプスを演算し得る。
【００７４】
図５を参照すると、層２０４−ｉの逆方向経路ユニット３０２の例示的な逆方向経路ＰＥ３１０−ｐが示されている。逆方向経路ＰＥ３１０−ｐは、アクティベーション逆伝播ユニット５０２を含む。アクティベーション逆伝播ユニット５０２は、（たとえば、次の層２０４−（ｉ＋１）または損失演算ユニット２１０から）勾配２０８−（ｉ＋１）と、対応する順方向経路ＰＥ３０６−ｐからアクティベーション入力３１６とを受取り、アクティベーション勾配関数に基づいて勾配５０４を生成する。積和演算ユニット５０６は、（たとえば、重みおよび閾値メモリ５１４から受取った）重み３１８および勾配５０４に基づいて勾配２０８−ｉを生成し得る。次いで、勾配２０８−ｉが先行層２０４−（ｉ−１）に提供され得る。
【００７５】
図５の例では、積和演算ユニット５０６は、単一のドット積についてクロックサイクルごとにＳの積和を演算するようにスケーリングされ得る。図３の逆方向経路ユニット３０２において、逆方向経路ＰＥの数Ｐは、並列に演算されるドット積の数を制御する。結果として、単一の層２０４−ｉは、逆方向経路プロセスにおいて各クロックサイクルごとにＰのニューロンのＳのシナプスを演算し得る。
【００７６】
図５の例では、勾配５０４はまた、最適化ユニット５０８に送られ得る。最適化ユニット５０８は、勾配５０４と（たとえば、先行層２０４−（ｉ−１）または前処理ユニット２０２からの）アクティベーション２０６−（ｉ−１）とに基づいて重みおよび閾値を更新し得るとともに、更新された重み５１０および閾値５１２を重みおよび閾値メモリ５１４に送り得る。最適化ユニット５０８は、たとえば、確率勾配降下、バッチ勾配降下、勾配降下、Ａｄａｍおよび／または他の任意の適用可能な最適化アルゴリズムを含む最適化アルゴリズムを用いてもよい。いくつかの実施形態においては、重みおよび閾値メモリ５１４は、重みおよび閾値３１８を対応する順方向経路ＰＥ３０６−ｐに送り得る。
【００７７】
いくつかの実施形態においては、ニューラルネットワーク２００のトレーニングに用いられるトレーニングアルゴリズム（たとえば、逆伝播アルゴリズム）は、さまざまな依存性を有し得る。このような依存性は、結果としてストールをもたらして、複数のアクセラレータを用いてニューラルネットワークを実現することを困難にする可能性がある。たとえば、逆伝播アルゴリズムでは、順方向経路プロセス中に、特定の層２０４−ｉは、Ｗｉ（ｂ）として示されるバッチｂについての重みが逆方向経路プロセスにおいて計算されてから、その順方向経路ユニット３００がＡｃｔｉ（ｂ）として示されるバッチｂについてのアクティベーションを演算することを必要とする可能性もある。順方向経路と逆方向経路との間のこのような依存性により、異なる層２０４−０〜２０４−（Ｎ−１）のために複数の演算ユニット（たとえばアクセラレータ）を使用することができなくなる可能性がある。たとえば、依存性があるせいで、複数の演算ユニットを用いてさまざまな層グループを実現する際に、それらの演算ユニットが、順方向経路プロセスにおける新しいアクティベーション入力または逆方向経路プロセスのための新しい勾配入力のいずれかを常に待っている可能性がある。
【００７８】
いくつかの実施形態においては、逆伝播アルゴリズムの依存性に対処するために、単一の演算ユニット（たとえば、単一のＧＰＵまたは単一のシストリックアレイ）を用いてニューラルネットワークトレーニングを実現し得る。このような実施形態においては、単一の演算ユニットは、層ごとに（たとえば、層２０４−０から層２０４−（Ｎ−１）まで）順方向経路プロセスを演算し、次いで、逆の順序で層ごとに（たとえば、層２０４−（Ｎ−１）から層２０４−０まで）逆方向経路を演算する。しかしながら、いくつかの実施形態においては、層（たとえば、畳み込みニューラルネットワーク（Convolutional Neural Network：ＣＮＮ）における層）は、著しく異なる演算およびメモリ要件を有する可能性がある。したがって、すべての層を実現するために単一のアクセラレータを用いる「フリーサイズ型（one-size-fits-all）」の解決策では、結果として、特定の層を処理する際にそのアクセラレータが十分に利用できなくなることが多くなる。
【００７９】
図６、図７、図８、図９Ａ、図９Ｂおよび図１０を参照すると、ニューラルネットワークシステム２００はさまざまな技術を用いて、逆伝播アルゴリズムにおける依存性を排除し得る。たとえば、図６は、層間の依存性を排除するために用いられ得る遅延モデル適応スキームを示す。さらなる例として、図９Ａおよび図９Ｂに示される合成勾配推定器は、勾配推定を提供し、層間の依存性を排除し、層の遅延係数を低減するために用いられ得る。いくつかの実施形態においては、層間の依存性を排除することにより、ニューラルネットワークは、異なる層を処理するために割当てられる複数の演算ユニット（たとえば、アクセラレータ）を用いて実現され得る。このような実施形態は、ニューラルネットワークのトレーニング時間を削減し得るとともに、対応する層のさまざまな演算およびメモリ要件に基づいてアクセラレータを構成することによってアクセラレータ利用率を改善し得る。
【００８０】
図６を参照すると、いくつかの実施形態においては、ニューラルネットワークシステム６００は、遅延モデル適応スキームを用いて、層間の依存性を排除し、これにより、ニューラルネットワークシステム２００を実現するための複数のアクセラレータ（たとえば、複数のＧＰＵ、複数のＦＰＧＡ、複数のシストリックアレイを含む単一のＦＰＧＡ）の効率的な使用を可能にし得る。図６のニューラルネットワークシステム６００は、以下に記載される相違点を除き、図２のニューラルネットワークシステム２００と実質的に同様である。遅延モデル適応を用いることにより、層２０４−ｉにおいて、前処理されたトレーニングセット２２２のインデックスｂ（ｂ番目のバッチとも称される）を有するバッチについての、Ａｃｔｉ（ｂ）として示されるアクティベーション出力２０６−ｉが、Ｇｒａｄｉ＋１（ｂ−ｄ）と示される、（ｂ−ｄ）番目のバッチについての勾配２０８−（ｉ＋１）を用いて演算され得る。たとえば、アクティベーション出力２０６−ｉ  Ａｃｔi（ｂ）は、（ｂ−ｄ）番目のバッチについての重みＷｉ（ｂ−ｄ）を用いることによって演算されてもよく、この場合、重みＷｉ（ｂ−ｄ）はＧｒａｄｉ＋１（ｂ−ｄ）を用いて演算されてもよく、これは、さらに、アクティベーション出力２０６−ｉ  Ａｃｔｉ（ｂ）を演算するために用いられてもよい。これにより、（たとえば、層２０４−ｉにおける順方向経路ＰＥ３０６−ｐのアクティベーションユニット４０６によって実行される）アクティベーション関数の計算と（たとえば、逆方向経路ＰＥ３１０−ｐの最適化ユニット５０８によって実行される）重み更新との間においてｄ−１の遅延期間が可能となる。
【００８１】
図６に示されるように、いくつかの実施形態においては、特定の時間ｔ０において、各層は、前処理されたトレーニングセット２２２の異なるバッチ上で機能し得る。したがって、これらの層は異なる遅延係数（待ち時間）ｄを有し得る。たとえば、時間ｔ０において、層２０４−１は、Ａｃｔ０（ｂ−１）およびＧｒａｄ２（ｂ−２Ｎ−１）を受取り、Ａｃｔ０（ｂ−１）およびＧｒａｄ２（ｂ−２Ｎ−１）に基づいてＡｃｔ１（ｂ−１）を生成するための演算を実行する。したがって、層２０４−１は２Ｎの遅延係数ｄ１を有する。さらなる例として、時間ｔ０において、層２０４−２は、Ａｃｔ１（ｂ−２）およびＧｒａｄ３（ｂ−２Ｎ）を受取り、Ａｃｔ１（ｂ−２）およびＧｒａｄ３（ｂ−２Ｎ）を用いてＡｃｔ２（ｂ−２）を生成するための演算を実行する。したがって、層２０４−２は、２Ｎ−１の遅延係数ｄ２を有する。図６の例では、層インデックスが大きくなればなるほど遅延係数が大きくなる。換言すれば、層０の付近の層は、層Ｎ−１の付近の層の遅延係数よりも大きい遅延係数を有する。
【００８２】
いくつかの実施形態においては、層２０４−０〜２０４−（Ｎ−１）の各々は、その遅延係数ｄに基づいて、その学習率μおよび／またはステップサイズを調整し得る。したがって、層２０４−０〜２０４−（Ｎ−１）は異なる学習率を有する可能性がある。一例では、層２０４−ｉは、層２０４−ｉに後続する層２０４−ｊよりも低い学習率を有し得る。この場合、層２０４−ｉの遅延係数ｄｉは、層２０４−ｊの遅延係数ｄｊよりも大きい。いくつかの実施形態においては、追加のハードウェアを用いて補正項を計算してもよく、この補正項を用いることで、遅延モデル適応を用いて学習されるパラメータの安定性を確実にし得るとともに、遅延モデル適応を包含することによってもたらされる誤差をいずれも補償し得る。
【００８３】
なお、ニューラルネットワークシステム２００および６００はともに、同じ種類の処理エンジンを利用してもよいが、上述のように、順方向経路プロセスおよび逆方向経路プロセスを実行するようこれらの処理エンジンがスケジュールされる方法が大きく異なっていることに留意されたい。
【００８４】
図７を参照すると、遅延モデル適応を実現する層２０４−ｉの一部が示されている。図７の例では、特定の時間ｔ０において、重み勾配関数ユニット７０２は、次の層２０４（ｉ＋１）から（ｂ−ｄ）番目のバッチについての勾配２０８−（ｉ＋１）Ｇｒａｄｉ＋１（ｂ−ｄ）を受取る。重み勾配関数ユニット７０２はまた、遅延ユニット７０６から、遅延したアクティベーション７０４を受ける。遅延ユニット７０４は、（たとえば、ｄ個のバッチに関連付けられた）ｄの遅延期間をｂ番目のバッチ用のアクティベーション２０６−（ｉ−１）Ａｃｔｉ−１（ｂ）に適用することによって、遅延したアクティベーション７０４を生成し得る。重み勾配関数ユニット７０２は重み７０８を出力する。重み７０８は、最適化関数７１０によって最適化される。遅延ユニット７１２によって、結果として得られる最適化された重みに追加の遅延（たとえば、１の遅延期間）を適用して、重み７１４（たとえば、図４の重み３１８）を生成し得る。重み７１４はメモリ４０２に格納され得る。
【００８５】
順方向経路３００において、重み７１４を用いて、ｂ番目のバッチについてのアクティベーション２０６−ｉ  Ａｃｔｉ（ｂ）を生成する。図７の例に示されるように、重み７１４は、ニューロン入力関数ユニット７１６（たとえば、図４の積和演算ユニット４０４）に送られ、このニューロン入力関数ユニット７１６が、重み７１４を用いてアクティベーション２０６−（ｉ−１）Ａｃｔｉ−１（ｂ）に対するニューロン入力関数を実行する。ニューロン入力関数ユニット７１６は、アクティベーションユニット入力７１８（たとえば、アクティベーションユニット入力３１６）をアクティベーションユニット７２０（たとえば、図４のアクティベーションユニット４０６）に送り得る。アクティベーションユニット７２０は、アクティベーションユニット入力７１８に基づいてｂ番目のバッチについてのアクティベーション２０６−ｉ  Ａｃｔｉ（ｂ）を生成する。次いで、アクティベーション２０６−ｉ  Ａｃｔｉ（ｂ）は、次の層２０４−（ｉ＋１）の入力に提供され得る。
【００８６】
逆方向経路３０２において、重み７１４を用いて勾配２０８−ｉ  Ｇｒａｄｉ（ｂ−ｄ）を生成する。図７の例に示されるように、重み勾配関数ユニット７０２（たとえば、図５のアクティベーション逆伝播ユニット５０２）は勾配７２２を受取る。勾配７２２および重み７１４は、ニューロン勾配関数ユニット７２４（たとえば、図５の積和演算ユニット５０６）に送られる。ニューロン勾配関数ユニット７２４は、（ｂ−ｄ）番目のバッチについての勾配２０８−ｉ  Ｇｒａｄｉ（ｂ−ｄ）を生成し、勾配Ｇｒａｄｉ（ｂ−ｄ）を前の層２０４−（ｉ−１）に送り得る。
【００８７】
図８を参照すると、逆伝播アルゴリズムを用いてニューラルネットワークをトレーニングするための遅延モデル適応を実現するための方法８００が示される。当該方法はブロック８０２で始まる。ここで、ニューラルネットワークの層２０４−ｉは、層２０４−（ｉ−１）からアクティベーションＡｃｔｉ−１（ｂ−ｄ）と、層２０４−（ｉ＋１）から勾配Ｇｒａｄｉ＋１（ｂ−ｄ）とを受取る。方法８００はブロック８０４に進み得る。ここで、Ａｃｔｉ−１（ｂ−ｄ）およびＧｒａｄｉ＋１（ｂ−ｄ）に基づいて重みＷｉ（ｂ−ｄ）が生成される。たとえば、逆方向経路ＰＥ３１０−ｐは、図７を参照して上述したように、Ｗｉ（ｂ−ｄ）を生成してもよい。次いで、方法８００はブロック８０６に進み得る。ここで、重みＷｉ（ｂ−ｄ）を用いて、層２０４−ｉにおける順方向経路においてトレーニングセットのバッチｔのためのアクティベーションを生成し得る。たとえば、重みＷｉ（ｂ−ｄ）は、層２０４−ｉの対応する順方向経路ＰＥ３０６−ｐに送られてもよい。次いで、順方向経路ＰＥ３０６−ｐは、図３および図４を参照して上述したように、重みＷｉ（ｂ−ｄ）を用いてＡｃｔｉ（ｂ）を演算し得る。このように、遅延モデル適応を用いることにより、順方向経路プロセスおよび逆方向経路プロセスについての層間の依存性が排除される。
【００８８】
図９Ａおよび図９Ｂを参照すると、さまざまな実施形態においては、合成勾配を用いて、逆伝播アルゴリズムにおける依存性を排除し得る。図９Ａの例では、層２０４−ｉの逆方向経路ＰＥ３１０−ｐのうち合成勾配を用いる部分が示されている。逆方向経路ＰＥ３１０−ｐは、合成勾配生成器９０２を含む合成勾配推定器９５０を含む。合成勾配生成器９０２は、先行層２０４−（ｉ−１）からアクティベーション２０６−（ｉ−１）を受取り、アクティベーション２０６−（ｉ−１）および勾配推定誤差９０８に基づいて勾配推定９０４を生成する。勾配推定９０４は、次いで、逆方向経路ＰＥ３１０−ｐのアクティベーション逆伝播ユニット５０２に送られ得る。重み３１８は勾配推定９０４に基づいて演算され得るとともに、アクティベーションを生成するための対応する順方向経路ＰＥ３０６−ｐに送られ得る。したがって、合成勾配を用いることにより、順方向経路プロセスおよび逆方向経路プロセスについての層間の依存性が排除される。
【００８９】
図９Ａの例では、勾配推定９０４は、勾配推定誤差生成器９０６（たとえば、減算器）に送られ得る。実際の勾配２０８−（ｉ＋１）が（たとえば、層２０４−（ｉ＋１）から）利用可能になった後、勾配推定誤差生成器９０６は、勾配推定９０４と実際の勾配２０８−（ｉ＋１）とを比較して、勾配推定誤差９０８を生成し得る。合成勾配生成器９０２は、勾配推定誤差９０８に基づいて将来の勾配推定９０４を向上させ得る。たとえば、勾配推定誤差９０８を用いることで、合成勾配生成器９０２が機械学習アルゴリズム（たとえば、ニューラルネットワーク、最小平均二乗（least mean square：ＬＭＳ））に基づいて機械学習を実行するためのトレーニング例を生成し得る。特定の例では、機械学習のために単純なＬＭＳ学習アルゴリズムを用いることにより、合成勾配生成器９０２のハードウェアコストが削減され得る。いくつかの例では、合成勾配は、次の層からの実際の勾配なしに勾配推定を提供し得る。
【００９０】
図９Ｂを参照すると、いくつかの実施形態においては、合成勾配生成器を遅延モデル適応とともに用いることで、順方向経路と逆方向経路との間の依存性を排除し得るとともに、早期に隠れ層において発生する遅延の量を低減させ得る。図９Ｂの例では、合成勾配推定器９５０は、（ｂ−ｉ＋１）番目のバッチについてのアクティベーション２０６−ｉ  Ａｃｔｉ（ｂ−ｉ＋１）を層２０４−ｉから受取り得る。合成勾配推定器９５０は、後続層２０４−（ｉ＋１）から（ｂ−ｄ２）番目のバッチについての勾配
【００９１】
【数３】
2020534602.tif 000005
【００９２】
を受取り得る。合成勾配推定器９５０は、アクティベーション２０６−ｉ  Ａｃｔｉ（ｂ−ｉ＋１）および勾配
【００９３】
【数４】
2020534602.tif 000006
【００９４】
に基づいて、（ｂ−ｄ１）番目のバッチについての勾配
【００９５】
【数５】
2020534602.tif 000007
【００９６】
を生成し得る。一例では、ｄ１はｄ２未満である。勾配
【００９７】
【数６】
2020534602.tif 000008
【００９８】
を用いることにより、
【００９９】
【数７】
2020534602.tif 000009
【０１００】
は、層２０４−（ｉ＋１）が（ｂ−ｄ１）番目のバッチの処理を完了するのを待たずに生成され得る。これにより、複数層における遅延係数を低減させ得る。
【０１０１】
図１０を参照すると、いくつかの実施形態においては、ニューラルネットワークシステム２００および６００をトレーニングするための性能は、トレーニング効率を改善するために、低い精度ネットワーク（たとえば、バイナリ化されたニューラルネットワーク）およびカスタムデータ表現（たとえば、対数データ表現）を用いることによって改善され得る。たとえば、バイナリ化されたニューラルネットワークをトレーニングする場合、順方向経路プロセス中、乗算が、排他的ＮＯＲ回路（exclusive-NOR circuit：ＸＮＯＲ）を用いて実行され得るとともに、累算が、ビットカウントを用いて実行され得る。さらなる例として、対数データ表現は、たとえば、ハードウェアにおいて加算として実現され得るトレーニングアルゴリズムにおける乗算を含めて、ハードウェア実装にさまざまな利益をもたらし得る。トレーニングアルゴリズムにおける加算／減算はテーブルルックアップを用いて実現され得る。
【０１０２】
図１０の例は、バイナリ化されたニューラルネットワークを実現する層２０４−ｉの逆方向経路ＰＥ３１０−ｐの一部である。図１０の例では、逆方向経路プロセス中、乗算は、１ｓから−１ｓの間だけ実行されてもよい。固定小数点データ型の場合、乗算は、Unity関数または要素単位ビットフリップ＋１ビット値のいずれかであり得る。対数データタイプ（たとえば、フロートデータタイプを含む）の場合、乗算は、符号ビットの単純なビットフリップとなる。さらに、出力１００８が０または１になるように、特定のアクティベーション勾配関数（たとえば、hardtanhアクティベーション関数）が用いられてもよい。ＸＮＯＲ回路１００２は、バイナリである勾配２０８−（ｉ＋１）および出力１００８を受取り得るとともに、逆方向経路ＰＥ３１０−ｐの最適化ユニット５０８に提供され得る勾配５０４を生成し得る。図１０の例では、積和演算ユニット５０６は、バイナリの重み３１８および加算器１００６によって制御されるＸＮＯＲ回路１００４を含むとともに、先行層２０４−（ｉ−１）に提供され得る勾配２０８−ｉを生成し得る。したがって、低精度のデータタイプおよび対数データ提示を用いることにより、逆方向経路ＰＥ３１０−ｐは、如何なる乗算器も用いることなく逆方向経路プロセスを実行し得る。
【０１０３】
図１１、図１２および図１３を参照すると、ニューラルネットワークシステムを大きな問題にスケーリングするために、ニューラルネットワークシステム２００および６００を実現するためのさまざまなアーキテクチャが用いられてもよい。図１１の例は、複数のプログラマブルＩＣ（たとえば、複数のＦＰＧＡ）と、それらのプログラマブルＩＣ間の通信のためのそれらのストリーミングインターフェイスとを用いるストリーミングアーキテクチャを示す。図１２の例は、単一のプログラマブルシストリックアレイを含む単一のプログラマブルＩＣ（たとえば、単一のＦＰＧＡ）を用いるアーキテクチャを示す。図１３の例は、２つのシストリックアレイを含む単一のプログラマブルＩＣ（たとえば、単一のＦＰＧＡ）を用いる。
【０１０４】
図１１を参照すると、いくつかの実施形態においては、ストリーミングアーキテクチャ１１００は、複数のＩＣ（たとえば、各々が別個のチップ上にある複数のプログラマブルＩＣ）を用いて、それらの間のストリーミングインターフェイスを用いて実現され得る。ストリーミングアーキテクチャ１１００は、Ｌ個のＩＣ（たとえば、ＦＰＧＡ、ＧＰＵ）１１０６−０〜１１０６−（Ｌ−１）を含むニューラルネットワークシステム１１０２を含む。この場合、Ｌは正の整数である。ＩＣ１１０６−ｉの各々を用いて１つ以上の層を実現し得る。図１１の例では、ＩＣ１１０６−０を用いて層２０４−０〜２０４−２を実現するとともに、ＩＣ１１０６−（Ｌ−１）を用いて層２０４−（Ｎ−３）、層２０４−（Ｎ−２）および層２０４−（Ｎ−１）を実現する。ホスト１１０４は、トレーニングセット２２０をニューラルネットワークシステム１１０２に送り得るとともに、学習された重みをニューラルネットワークシステム１１０２から受取り得る。
【０１０５】
図１２を参照すると、いくつかの実施形態においては、単一の処理アレイ１２０４およびＩＯバッファ１２０６を含む単一のＩＣ１２０２を用いてニューラルネットワークシステム２００を実現し得る。単一の処理アレイ１２０４はシストリックアレイであってもよく、シストリックアレイ１２０４と称され得る。シストリックアレイ１２０４は、ニューラルネットワークシステム２００の全結合層、畳み込み層および／またはマックスプーリング層のための順方向経路および／または逆方向経路を演算するために用いられてもよい。一例では、層２０４−０〜２０４−（Ｎ−１）は、シストリックアレイ１２０４に対して時分割多重化される。言い換えれば、シストリックアレイ１２０４は、層２０４−（Ｎ−１）を実現するまで、層２０４−０、次いで層２０４−１などを実現するように構成され得る。層２０４−ｉについてシストリックアレイ１２０４によって生成された結果は保存されて、層（たとえば、順方向経路プロセスにおける次の層２０４−（ｉ＋１）、および逆方向経路プロセスにおける先行層２０４−（ｉ−１））の次の実装に対する入力として用いられてもよい。
【０１０６】
図１３を参照すると、いくつかの実施形態においては、２つのシストリックアレイ１３０４および１３０６ならびにＩ／Ｏバッファ１３０８を含む単一のプログラマブルＩＣ１３０２が用いられる。たとえば、シストリックアレイ１３０４は、すべての層２０４−０〜２０４−（Ｎ−１）についての順方向経路プロセスを演算するために用いられてもよく、順方向経路シストリックアレイ１３０４とも称される。さらなる例として、シストリックアレイ１３０６は、すべての層２０４−（Ｎ−１）〜２０４−０についての逆方向経路プロセスを演算するために用いられてもよく、逆方向経路シストリックアレイ１３０６とも称され得る。シストリックアレイ１３０４および１３０６は、すべての層２０４−０〜２０４−（Ｎ−１）における適応遅延を最小限にするようにスケジュールされ得る。
【０１０７】
さまざまな実施形態においては、ニューラルネットワークシステム２００および６００をトレーニングするために、ユーザはニューラルネットワークについての記述を生成し得る。いくつかの例では、この記述に基づいて、カスタムハードウェアが生成され得る。いくつかの例では、所定のアーキテクチャ（たとえば、図１１、図１２および／または図１３のアーキテクチャ）に対応するアクセラレータのためのビットストリームが記述に基づいてロードされ得る。カスタムアーキテクチャを生成するかどうかの選択は、性能モデル、生成されたアーキテクチャ、ターゲットデバイス、場所および経路時間の推定、データセットサイズ、ならびに反復回数に基づいて決定され得る。いくつかの実施形態においては、場所および経路時間の推定、データセットサイズ、ならびに反復回数はオフラインで生成され得る。いくつかの実施形態においては、シストリックアレイは、すべての層における適応遅延を最小限にするようにスケジュールされ得る。
【０１０８】
なお、図２〜図１３に示されるさまざまな構成（たとえば、層の数Ｎ、クロックサイクルごとに積和演算ユニットによって演算される積和の回数Ｓ、順方向経路／逆方向経路ＰＥの数Ｐ）は、例示的なものにすぎず、添付の特許請求の範囲に具体的に記載されているものを超えて限定するように意図されたものではないことに留意されたい。他の構成が用いられ得ることが当業者に理解されるであろう。いくつかの実施形態においては、図６〜図８の遅延モデル適応スキームが、図９を参照して記載される合成勾配とともに用いられてもよい。他の実施形態においては、遅延モデル適応スキームを用いることで、合成勾配全体を置換えて、合成勾配のハードウェアコストを低減させてもよい。いくつかの実施形態においては、１つ以上の最適化技術（たとえば、低精度ネットワーク、対数データ表現、他の適用可能な最適化技術、またはそれらの組み合わせ）が図１１、図１２および図１３のアーキテクチャにおいて用いられてもよい。さらに、バイナリ値は例示的な表現として用いられているが、たとえば３進値、固定点、浮動小数点、およびｌｏｇ２表現を含むさまざまな表現が用いられてもよい。
【０１０９】
特定の実施形態を図示および記載してきたが、請求される発明を好ましい実施形態に限定するように意図されたものではないことが理解されるであろう。また、請求される発明の精神および範囲から逸脱することなく、さまざまな変更および変形がなされ得ることが当業者には明らかであるだろう。したがって、明細書および図面は、限定的な意味ではなく例示的な意味で考慮されるべきである。請求される発明は、代替例、変更例および同等例を包含するように意図されている。
【図１】
2020534602.tif 000010
【図２】
2020534602.tif 000011
【図３】
2020534602.tif 000012
【図４】
2020534602.tif 000013
【図５】
2020534602.tif 000014
【図６】
2020534602.tif 000015
【図７】
2020534602.tif 000016
【図８】
2020534602.tif 000017
【図９Ａ】
2020534602.tif 000018
【図９Ｂ】
2020534602.tif 000019
【図１０】
2020534602.tif 000020
【図１１】
2020534602.tif 000021
【図１２】
2020534602.tif 000022
【図１３】
2020534602.tif 000023
【手続補正書】
【提出日】令和2年5月14日(2020.5.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ニューラルネットワークシステムであって、
１つ以上のハードウェアプロセッサを含み、前記１つ以上のハードウェアプロセッサは、前記ニューラルネットワークシステムにニューラルネットワークモデルを実現させるための命令を実行するように構成されており、前記ニューラルネットワークモデルは、
入力層を含み、前記入力層は、
一連のバッチを含む第１のトレーニングセットを受取り、
前記入力層の後続層へと、前記一連のバッチにそれぞれ関連付けられた複数の出力アクティベーションを提供するように構成され、前記ニューラルネットワークモデルはさらに、
前記入力層に後続する第１の隠れ層および第２の隠れ層を含み、各々の隠れ層は、
前記各々の隠れ層の先行層から、第１のバッチに関連付けられた第１の入力アクティベーションを受取り、
遅延係数だけ前記第１のバッチに先行する第２のバッチに関連付けられた第１の入力勾配を受取るように構成されており、
前記遅延係数は前記第１のバッチおよび前記第２のバッチ以外の２つ以上のバッチを含み、前記各々の隠れ層はさらに、
前記各々の隠れ層の後続層へと、前記第１のバッチに関連付けられた第１の出力アクティベーションを提供するように構成されており、前記第１の出力アクティベーションは前記第１の入力アクティベーションおよび前記第１の入力勾配に基づいて決定され、
前記第１の隠れ層は、前記第２の隠れ層の第２の遅延係数とは異なる第１の遅延係数を有しており、前記ニューラルネットワークモデルはさらに、
前記第１の隠れ層および前記第２の隠れ層に後続する出力層を含み、前記出力層は、
前記出力層の先行層から、第２の入力アクティベーションを受取り、
前記出力層の前記先行層へと、前記第２の入力アクティベーションおよび前記第１のトレーニングセットに基づいて、第１の出力勾配を提供するように構成される、ニューラルネットワークシステム。
【請求項２】
前記第１の隠れ層は、
前記第１の隠れ層の前記先行層へと、前記第１の入力アクティベーションおよび前記第１の入力勾配に基づいて、前記第２のバッチに関連付けられた第２の出力勾配を提供するように構成される、請求項１に記載のニューラルネットワークシステム。
【請求項３】
前記第１の隠れ層は、
前記第２のバッチおよび前記第１の入力勾配に関連付けられた第３の入力アクティベーションに基づいて、前記第２のバッチに関連付けられた第１の重みを生成し、
前記第１の入力アクティベーション、前記第１の入力勾配および前記第１の重みに基づいて、前記第１のバッチに関連付けられた前記第１の出力アクティベーションを生成するように構成される、請求項２に記載のニューラルネットワークシステム。
【請求項４】
前記第１の隠れ層は、
前記第１の入力アクティベーション、前記第１の入力勾配および前記第１の重みに基づいて前記第２の出力勾配を生成するように構成される、請求項３に記載のニューラルネットワークシステム。
【請求項５】
前記第１の隠れ層は、
前記第１のバッチと前記第２のバッチとの間の前記遅延係数に基づいて学習率を調整し、
前記第２のバッチに関連付けられた前記第１の入力勾配に前記学習率を適用することによって、前記第２のバッチに関連付けられた前記第１の重みを生成するように構成される、請求項３に記載のニューラルネットワークシステム。
【請求項６】
前処理ユニットをさらに含み、前記前処理ユニットは、
第１のサイズを有するオリジナルのトレーニングセットを受取り、
前記オリジナルのトレーニングセットに基づいて前記第１のトレーニングセットを生成するように構成され、前記第１のトレーニングセットは、前記第１のサイズよりも大きい第２のサイズを有する、請求項１に記載のニューラルネットワークシステム。
【請求項７】
前記第１の隠れ層は合成勾配生成器に結合され、前記合成勾配生成器は、
前記第２のバッチに先行する第３のバッチに関連付けられた第２の入力勾配を用いて第１の入力勾配推定を生成し、
前記第１の入力勾配推定を前記第１の入力勾配として前記第１の隠れ層に提供するように構成される、請求項１に記載のニューラルネットワークシステム。
【請求項８】
前記合成勾配生成器は、
前記第１の隠れ層の前記後続層から第２の入力勾配を受取り、
前記第１の入力勾配推定および前記第２の入力勾配に基づいて勾配推定誤差を生成し、
機械学習アルゴリズムを用いて前記勾配推定誤差に基づいて第２の入力勾配推定を生成するように構成される、請求項７に記載のニューラルネットワークシステム。
【請求項９】
前記第１の入力アクティベーション、前記第１の出力アクティベーション、前記第２の入力アクティベーション、および第１の出力勾配はバイナリ値を含む、請求項１に記載のニューラルネットワークシステム。
【請求項１０】
前記第１の入力アクティベーション、前記第１の出力アクティベーション、前記第２の入力アクティベーション、および前記第１の出力勾配を対数ドメインにおいて量子化するように構成された対数データ表現をさらに含む、請求項１に記載のニューラルネットワークシステム。
【請求項１１】
複数のアクセラレータをさらに含み、
各々のアクセラレータは、前記入力層、前記１つ以上の隠れ層および前記出力層のうち１つの層を実現するように構成され、
各々のアクセラレータは、それぞれの層に基づいた演算キャパシティおよびメモリキャパシティを有するように構成される、請求項１に記載のニューラルネットワークシステム。
【請求項１２】
方法であって、
ニューラルネットワークの入力層が、一連のバッチを含む第１のトレーニングセットを受取るステップと、
前記入力層が、前記入力層の後続層へと、前記一連のバッチにそれぞれ関連付けられた複数の出力アクティベーションを提供するステップと、
前記ニューラルネットワークの第１の隠れ層が、前記第１の隠れ層の先行層から、第１のバッチに関連付けられた第１の入力アクティベーションを受取るステップと、
前記第１の隠れ層が、第１の遅延係数だけ前記第１のバッチに先行する第２のバッチに関連付けられた第１の入力勾配を受取るステップとを含み、前記第１の遅延係数は前記第１のバッチおよび前記第２のバッチ以外の２つ以上のバッチを含み、前記方法はさらに、
前記第１の隠れ層が、前記第１の隠れ層の後続層へと、前記第１のバッチに関連付けられた第１の出力アクティベーションを提供するステップを含み、前記第１の出力アクティベーションは前記第１の入力アクティベーションおよび前記第１の入力勾配に基づいており、前記方法はさらに、
前記第１の隠れ層に後続する出力層が、前記出力層の先行層から、第２の入力アクティベーションを受取るステップと、
前記出力層が、前記出力層の前記先行層へと、前記第２の入力アクティベーションおよび前記第１のトレーニングセットに基づいて、第１の出力勾配を提供するステップとを含む、方法。
【請求項１３】
前記第１の隠れ層が、前記先行層へと、前記第１の入力アクティベーションおよび前記第１の入力勾配に基づいて、前記第２のバッチに関連付けられた第２の出力勾配を提供するステップをさらに含む、請求項１２に記載の方法。
【請求項１４】
前記第１の隠れ層が、前記第２のバッチおよび前記第１の入力勾配に関連付けられた第３の入力アクティベーションに基づいて、前記第２のバッチに関連付けられた第１の重みを生成するステップと、
前記第１の隠れ層が、前記第１の入力アクティベーション、前記第１の入力勾配および前記第１の重みに基づいて、前記第１のバッチに関連付けられた前記第１の出力アクティベーションを生成するステップとをさらに含む、請求項１３に記載の方法。
【請求項１５】
前記第１の隠れ層が、前記第１の入力アクティベーション、前記第１の入力勾配および前記第１の重みに基づいて、前記第２の出力勾配を生成するステップと、
前記第１の隠れ層が、前記第１のバッチと前記第２のバッチとの間の前記遅延係数に基づいて、学習率を調整するとともに、前記第１の隠れ層が、前記第２のバッチに関連付けられた前記第１の入力勾配に前記学習率を適用することによって、前記第２のバッチに関連付けられた前記第１の重みを生成するステップと、
から選択される少なくとも１つの動作を実行するステップをさらに含む、請求項１４に記載の方法。
【国際調査報告】
2020534602.tif 000024
2020534602.tif 000025
2020534602.tif 000026