(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-04-02
(54)【発明の名称】ニューラルネットワークにおけるパイプライン動作
(51)【国際特許分類】
G06F 17/10 20060101AFI20240326BHJP
【FI】
G06F17/10 A
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023563294
(86)(22)【出願日】2022-04-05
(85)【翻訳文提出日】2023-12-12
(86)【国際出願番号】 US2022023434
(87)【国際公開番号】W WO2022221092
(87)【国際公開日】2022-10-20
(32)【優先日】2021-04-15
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】523389305
【氏名又は名称】ジャイガンター・テクノロジーズ・インコーポレイテッド
(74)【代理人】
【識別番号】110001173
【氏名又は名称】弁理士法人川口國際特許事務所
(72)【発明者】
【氏名】マシューズ,マーク・アシュリー
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB26
5B056BB31
5B056BB71
5B056FF01
5B056FF02
5B056HH03
(57)【要約】
集積回路(IC)が、R×Cのソースアレイ上のM×Nの開口関数を実装する。このICは、独立の入力値の順序付けられたストリームを受け取る入力ポートと、出力ストリームを生成する出力ポートと、入力に重みを乗算し、積のストリームをIC上の経路に生成する大規模乗算器回路と、IC上の合成器のM×Nのアレイと、合成器の間の単一の専用の経路と、遅延回路と、最終化回路と、カウンタを動作させ、制御信号を生成する制御回路とを有する。合成器は、積経路から受け取られた値を組み合わせ、その結果を、さらに、初期値、または隣接する上流の合成器からの値、または遅延回路からの値に組み合わせる。最後の下流の合成器が値の完全な合成を生成すると、その値は最終化回路に渡され、この最終化回路が結果を出力ポートにポストする。
【特許請求の範囲】
【請求項1】
R×Cの目的アレイを生成するために、R×Cのソースアレイの上にM×Nの開口関数を実装する集積回路(IC)であって、
独立な入力値の順序付けられたストリームをソースアレイから受け取る入力ポートと、
出力値の順序付けられた出力ストリームを目的アレイの中に生成する出力ポートと、
入力ポートに結合された大規模乗算器回路であって、各入力値に順に開口関数によって要求されるすべての重みを並列に乗算し、IC上の並列な導電性積経路のセット上に積のストリームを生成し、各積経路が入力の重み値による単一の積に専用である、大規模乗算回路と、
IC上の合成器回路のM×Nのアレイであって、各合成器回路が(m,n)位置における開口関数のサブ関数と関連しており、専用の経路によって、サブ関数と関連する重み値から生成された積を運ぶ積経路のセットのそれぞれに結合されている、合成器回路のM×Nのアレイと、
合成器の間の単一の専用経路と、
合成器から専用の経路上の値を受け取り、後の時点において他の下流の合成器への専用の経路上に遅延した値を提供する、IC上の遅延回路と、
最終化回路と、
カウンタを動作させ、合成器と遅延回路と最終化回路とに結合される制御信号を生成する制御回路とを備え、
各ソース間隔において、合成器が、専用の接続から受け取られた値を並列な導電性経路に組み合わせ、さらに、その結果を、その合成器のための初期値、または隣接する上流の合成器からの専用の経路上の値、または遅延回路から受け取られた値に組み合わせ、その組み合わされた結果を、隣接する下流の合成器への専用の経路に結合されたレジスタ、または遅延回路、またはそれら両方にポストし、最後の下流の合成器が、入力のR×Cのアレイの特定の位置における開口関数の出力のために値の完全な合成を生成すると、その合成された値が最終化回路に渡され、最終化回路は、値を処理し、結果を、出力ストリームの1つの値として出力ポートにポストすることを特徴とする、集積回路(IC)。
【請求項2】
開口関数が畳み込みニューラルノードに対するものであり、各ソース間隔において、合成器が重みの入力との積を加算し、積のその和を、初期バイアス、または隣接する上流の合成器からの専用の経路上の値、または遅延回路から受け取られた値に加算し、その総和を出力レジスタにポストする、請求項1に記載の装置。
【請求項3】
開口関数が、M×Nの入力パッチをR×Cの入力アレイの左右のエッジと重ねる開口の位置については切り捨てられた結果を生成し、ソース入力位置がR×Cの入力アレイの最初または最後の列を表す特定のソース間隔に対しては、切り捨てられたパッチの結果が遅延され、合成器によってアクセスされ、完全な内部パッチのフローと統合される、請求項1に記載の装置。
【請求項4】
開口関数が、M×Nの入力パッチをR×Cの入力アレイの一番上のエッジと重ねるそれらの特定の位置については切り捨てられた結果を生成し、ソース入力位置がR×Cの入力アレイの最初の行を表す特定のソース間隔に対しては、切り捨てられたパッチの結果が遅延され、合成器によってアクセスされ、完全な内部パッチのフローと統合される、請求項1に記載の装置。
【請求項5】
開口関数が、M×Nの入力パッチをR×Cの入力アレイの一番下のエッジと重ねるそれらの特定の位置については切り捨てられた結果を生成し、ソース入力位置がR×Cの入力アレイの最初の行を表す特定のソース間隔に対しては、切り捨てられたパッチの結果が遅延され、完全な内部パッチのフローと統合される、請求項1に記載の装置。
【請求項6】
開口関数の特定の出力が、固定されたまたは可変のステッピングパターンで、出力ストリームから除外される、請求項1に記載の装置。
【請求項7】
R×Cのソースアレイの上にM×Nの開口関数を実装し、R×Cの目的アレイを生成する方法であって、
独立な入力値の順序付けられたストリームを、ソースアレイから集積回路(IC)の入力ポートに提供することと、
入力ポートに結合されたIC上の大規模乗算器回路によって、各入力値に順に開口関数によって要求されるすべての重み値を並列に乗算することと、
大規模乗算器によって、IC上の並列な導電性積経路のセット上に積のストリームを生成することであって、各積経路が入力の重み値による単一の積に専用である、ことと、
それぞれが開口関数のサブ関数と関連している、IC上の合成器回路のM×Nのアレイのそれぞれに、積のストリームから各合成器回路への専用の接続によって、サブ関数と関連する重み値から生成されたそれらの積を提供することと、
カウンタを実行し制御信号を生成する制御回路によって、制御信号を、合成器と複数の遅延回路と最終化回路とに提供することと、
合成器によって、各ソースサイクルで、専用の接続から積のストリームに受け取られた値を、その合成器のための初期値と、または隣接する上流の合成器への専用の経路上の値に、または複数の遅延回路のうちの1つから受け取られた値に組み合わせ、その結果を、隣接する下流の合成器への専用の経路に結合されたレジスタ、または複数の遅延回路のうちの1つにポストすることと、
最後の下流の合成器が、入力のR×Cのアレイでの特定の位置における開口関数の出力のための値の完全な組合せを生成すると、その完全な組合せを最終化回路に提供することと、
最終化回路によって完全な組合せを処理し、結果を、順序付けられた出力ストリーム内の1つの値として出力ポートにポストすることと、
すべての入力要素が受け取られ、最後の出力値が出力ストリームに生成されるまで、ICの動作を継続することと
を含む、方法。
【請求項8】
開口関数が畳み込みニューラルノードに対するものであり、各ソース間隔において、合成器が、重みの入力との積を加算し、積のその和を、初期バイアス、または隣接する上流の合成器からの専用の経路上の値、または遅延回路から受け取られた値に加算し、その総和を出力レジスタにポストする、請求項7に記載の方法。
【請求項9】
開口関数が、M×Nの入力パッチをR×Cの入力アレイの左右のエッジと重ねる開口の位置については切り捨てられた結果を生成し、ソース入力位置がR×Cの入力アレイの最初または最後の列を表す特定のソース間隔に対しては、切り捨てられたパッチの結果が遅延され、合成器によってアクセスされ、完全な内部パッチのフローと統合される、請求項7に記載の方法。
【請求項10】
開口関数が、M×Nの入力パッチをR×Cの入力アレイの一番上のエッジと重ねる特定の位置については切り捨てられた結果を生成し、ソース入力位置がR×Cの入力アレイの最初の行を表す特定のソース間隔に対しては、切り捨てられたパッチの結果が遅延され、合成器によってアクセスされ、完全な内部パッチのフローと統合される、請求項7に記載の方法。
【請求項11】
開口関数が、M×Nの入力パッチをR×Cの入力アレイの一番下のエッジと重ねるそれらの特定の位置については切り捨てられた結果を生成し、ソース入力位置がR×Cの入力アレイの最初の行を表す特定のソース間隔に対しては、切り捨てられたパッチの結果が遅延され、完全な内部パッチのフローと統合される、請求項7に記載の方法。
【請求項12】
開口関数の特定の出力が、固定されたまたは可変のステッピングパターンで、出力ストリームから除外される、請求項7に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、2020年10月15日に出願された同時係属出願第17/071,875号の一部係属出願である。親出願の全開示が、少なくとも引用により組み込まれる。
【0002】
本発明は、行列の入力および出力に関係するコンピュータ演算の技術分野に属しており、より具体的には、行列演算における大規模な乗算のために設計された回路に関する。
【背景技術】
【0003】
行列演算におけるコンピュータの利用は、当該技術で広く知られており、具体的な例は、画像処理とニューラルネットワークの開発および使用である。ニューラルネットワークは、人工知能の重要部分であり、そのようなものとして、本特許出願の出願時点において、知的財産権の開発において非常に人気のある主題である。一般論として、この種類のコンピュータ演算では、かなりの数の入力値が規則的なパターンで処理され、このパターンは、ほとんどの場合、行列である。入力値の処理は、バイアシングと、個々の入力値が乗算され得る重みを適用することとを含み得る。
【0004】
本発明者は、入来値が複数の重み値のそれぞれと乗算されるニューラルネットワーク技術における高度で計算機負荷の重い演算が、当該技術において明確な利点を提供するために、技術革新に開かれたステップであると信じている。発明者はまた、適用される数学的処理の順序を修正することで得られる利点が存在すると信じている。
【0005】
本発明者は、発明者がそのような適用で実装される数学的処理の順序および様態における一般的な変更を決定したと信じており、この変更は、そのような演算の時間および費用の極めて著しい低減を生じさせることがあり得る。
【発明の概要】
【課題を解決するための手段】
【0006】
本発明のある実施形態では、R×Cの目的アレイを生成するために、R×Cのソースアレイの上にM×Nの開口関数を実装する集積回路(IC)が提供され、このICは、独立な入力値の順序付けられたストリームをソースアレイから受け取る入力ポートと、出力値の順序付けられた出力ストリームを目的アレイの中に生成する出力ポートと、入力ポートに結合された大規模乗算器回路であって、各入力値に順に開口関数によって要求されるすべの重みを並列に乗算し、IC上の並列な導電性積経路のセット上に積のストリームを生成し、各積経路が入力の重み値による単一の積に専用である、大規模乗算器回路と、IC上の合成器回路のM×Nのアレイであって、各合成器回路が(m,n)位置における開口関数のサブ関数と関連しており、専用の経路によって、サブ関数と関連する重み値から生成された積を運ぶ積経路のセットのそれぞれに結合されている、合成器回路のM×Nのアレイと、合成器の間の単一の専用経路と、合成器から専用の経路上の値を受け取り、後の時点において他の下流の合成器への専用の経路上に遅延した値を提供する、IC上の遅延回路と、最終化回路と、カウンタを実行し、合成器と遅延回路と最終化回路とに結合される制御信号を生成する制御回路とを備えている。各ソース間隔において、合成器が、専用の接続から受け取られた値を並列な導電性経路に組み合わせ、さらに、その結果を、その合成器のための初期値、または隣接する上流の合成器からの専用の経路上の値、または遅延回路から受け取られた値に組み合わせ、その組み合わされた結果を、隣接する下流の合成器への専用の経路に結合されたレジスタ、または遅延回路、またはそれら両方にポストし、最後の下流の合成器が、入力のR×Cのアレイの特定の位置における開口関数の出力のために値の完全な合成を生成すると、その合成された値が最終化回路に渡され、最終化回路は、値を処理し、結果を、出力ストリームの1つの値として出力ポートにポストする。
【0007】
ある実施形態では、開口関数が畳み込みニューラルノードに対するものであり、各ソース間隔において、合成器が、重みの入力との積を加算し、積のその和を初期バイアス、または隣接する上流の合成器からの専用の経路上の値、または遅延回路から受け取られた値に加算し、その総和を出力レジスタにポストする。また、ある実施形態では、開口関数が、M×Nの入力パッチをR×Cの入力アレイの左右のエッジと重ねる開口の位置については切り捨てられた結果を生成し、ソース入力位置がR×Cの入力アレイの最初または最後の列を表す特定のソース間隔に対しては、切り捨てられたパッチの結果が遅延され、合成器によってアクセスされ、完全な内部パッチのフローと統合される。そして、ある実施形態では、開口関数が、M×Nの入力パッチをR×Cの入力アレイの一番上のエッジと重ねるそれらの特定の位置については切り捨てられた結果を生成し、ソース入力位置がR×Cの入力アレイの最初の行を表す特定のソース間隔に対しては、切り捨てられたパッチの結果が遅延され、合成器によってアクセスされ、完全な内部パッチのフローと統合される。
【0008】
ある実施形態では、開口関数が、M×Nの入力パッチをR×Cの入力アレイの一番下のエッジと重ねるそれらの特定の位置については切り捨てられた結果を生成し、ソース入力位置がR×Cの入力アレイの最初の行を表す特定のソース間隔に対しては、切り捨てられたパッチの結果が遅延され、完全な内部パッチのフローと統合される。そして、このICのある実施形態では、開口関数の特定の出力が、固定されたまたは可変のステッピングパターンで、出力ストリームから除外される。
【0009】
本発明の別の態様では、R×Cのソースアレイの上にM×Nの開口関数を実装し、R×Cの目的アレイを生成する方法が提供され、この方法は、独立な入力値の順序付けられたストリームを、ソースアレイから集積回路(IC)の入力ポートに提供するステップ、入力ポートに結合されたIC上の大規模乗算器回路によって、各入力値に順に開口関数によって要求されるすべての重み値を並列に乗算するステップ、大規模乗算器によって、IC上の並列な導電性積経路のセット上に積のストリームを生成するステップであって、各積経路が入力の重み値による単一の積に専用である、ステップ、それぞれが開口関数のサブ関数と関連している、IC上の合成器回路のM×Nのアレイのそれぞれに、積のストリームから各合成器回路への専用の接続によって、サブ関数と関連する重み値から生成されたそれらの積を提供するステップ、カウンタを実行し制御信号を生成する制御回路によって、制御信号を、合成器と複数の遅延回路と最終化回路とに提供するステップ、合成器によって、各ソースサイクルで、専用の接続から積のストリームに受け取られた値を、その合成器のための初期値と、または隣接する上流の合成器への専用の経路上の値に、または複数の遅延回路のうちの1つから受け取られた値にと組み合わせ、その結果を、隣接する下流の合成器への専用の経路に結合されたレジスタ、または複数の遅延回路のうちの1つにポストするステップを含む。最後の下流の合成器が入力のR×Cのアレイでの特定の位置における開口関数の出力のための値の完全な組合せを生成すると、その完全な組合せを最終化回路に提供するステップと、最終化回路によって完全な組合せを処理し、結果を、順序付けられた出力ストリーム内の1つの値として出力ポートにポストするステップと、すべての入力要素が受け取られ、最後の出力値が出力ストリームに生成されるまで、ICの動作を継続するステップとを含む。
【0010】
この方法のある実施形態では、開口関数が畳み込みニューラルノードに対するものであり、各ソース間隔において、合成器が、重みの入力との積を加算し、積のその和を、初期バイアス、または隣接する上流の合成器からの専用の経路上の値、または遅延回路から受け取られた値に加算し、その総和を出力レジスタにポストする。また、ある実施形態では、開口関数が、M×Nの入力パッチをR×Cの入力アレイの左右のエッジと重ねる開口の位置については切り捨てられた結果を生成し、ソース入力位置がR×Cの入力アレイの最初または最後の列を表す特定のソース間隔に対しては、切り捨てられたパッチの結果が遅延され、合成器によってアクセスされ、完全な内部パッチのフローと統合される。
【0011】
この方法のある実施形態では、開口関数が、M×Nの入力パッチをR×Cの入力アレイの一番上のエッジと重ねる特定の位置については切り捨てられた結果を生成し、ソース入力位置がR×Cの入力アレイの最初の行を表す特定のソース間隔に対しては、切り捨てられたパッチの結果が遅延され、合成器によってアクセスされ、完全な内部パッチのフローと統合される。ある実施形態では、開口関数が、M×Nの入力パッチをR×Cの入力アレイの一番下のエッジと重ねる特定の位置については切り捨てられた結果を生成し、ソース入力位置がR×Cの入力アレイの最初の行を表す特定のソース間隔に対しては、切り捨てられたパッチの結果が遅延され、完全な内部パッチのフローと統合される。そしてある実施形態では、開口関数の特定の出力が、固定されたまたは可変のステッピングパターンで、出力ストリームから除外される。
【図面の簡単な説明】
【0012】
【
図1】各共通ソースに適用される大規模乗算器が固定され、処理回路に直接に配線されている、実施形態の図解である。
【
図2】各共通ソースに適用される大規模乗算器が動的であり、マルチプレクサを通して処理回路にルーティングされている、実施形態の図解である。
【
図3】各大規模乗算器において設定されたビットに対応するシフトされた項が積を形成するように加算されている、単純な実施形態の図解である。
【
図4】シフトされた項の加算と相互からの減算とがより低い複雑性の等価なソリューションを形成するように混合されている、強化された実施形態の図解である。
【
図5A】ペアごとの演算のみからサブ合成を構築することによってクロック周波数を最大化する、パイプライン化された実施形態の図解である。
【
図5B】倍数が、標準的な算術演算への参照なしで、固定されたセットの場合によって直接的に形成されている、実施形態の図解である。
【
図6】4つごとの演算までからサブ合成を構築することによって回路密度を最大化する、パイプライン化された実施形態の図解である。
【
図7】入力ストリームを受け取り、入力ストリームを前処理し、結果を独特のデジタルデバイスを通して供給して出力ストリームを生成する、本発明の一実施形態における構造および接続性を図解している図である。
【
図8A】ソースチャネル積を生成する構造および接続性を図解している図である。
【
図8B】本発明の一実施形態における制御装置および関数の追加的な詳細を図解している図である。
【
図9A】本発明の一実施形態におけるパイプライン化された動作の一般的な場合の部分的図解である。
【
図9B】本発明の一実施形態におけるパイプライン化された動作の一般的な場合の別の部分的図解である。
【
図9C】本発明の一実施形態におけるパイプライン化された動作の一般的な場合の別の部分的図解である。
【
図10A】本発明の一実施形態における
図9Aおよび
図9Bの合成器905a、905b、および905cの内部構造を図解している図である。
【
図10B】本発明の一実施形態における
図9Aおよび
図9Bの合成器902a、902b、および902cの内部構造を図解している図である。
【
図10C】本発明の一実施形態における
図9Aの合成器904の内部構造を図解している図である。
【
図10D】本発明の一実施形態における
図9Aの合成器901の内部構造を図解している図である。
【
図10E】本発明の一実施形態における
図9Bおよび
図9Cの合成器903a、903b、および903cの内部構造を図解している図である。
【
図10F】本発明の一実施形態における
図9Aおよび
図9Bの合成器907a、907b、および907cの内部構造を図解している図である。
【
図10G】本発明の一実施形態における
図9Aの合成器906の内部構造を図解している図である。
【
図11】本発明の一実施形態における
図9Cの遅延段908a、908b、908c、908d、908e、および908fの内部構造および動作を説明している図である。
【
図12】本発明の一実施形態における
図9Cの遅延段909の動作を図解している図である。
【
図13】本発明の一実施形態における
図9Cの遅延段910aおよび910bの動作を図解している図である。
【
図14】
図9Cにおける最終化ステップ911の動作を図解している図である。
【
図15】5×5の畳み込みノードを実装する本発明の一実装形態においてパイプライン化された動作の特定の場合を図解している図である。
【
図16】本発明の一実施形態における4×4の開口関数のためのICの図解である。
【発明を実施するための形態】
【0013】
多様な画像およびデータアルゴリズムが、命題を証明することと結果を算出することとの両方のために、線形代数の行列という形式を広範囲に利用する。本出願では、「アルゴリズム」によって、特にコンピュータによる計算または他の問題解決のための演算において従われるべきプロセスまたは規則のセットが意味される。アルゴリズムは、本出願では、例外なくソフトウェアとして解釈されるべきではない。本出願で説明されているアルゴリズムは、典型的におよび好ましくは、ハードウェアに実装され得る。
【0014】
行列演算は、1以上の次元の直交する集まりとして定義され、一般的に、各与えられた次元のすべての反復において同じ数の要素を有するものとして考えられる。例として、M×N行列は、しばしば:
【数1】
のような値のアレイによって示される。
【0015】
概念的には、行列は任意の数の次元を有することができ、行列は、各次元に対する値を示す表のセットとして表され得る。
【0016】
M×1または1×Nという形式の行列のサブセットは、ベクトルと称されることがあり、ベクトルは、それら自体の特定の性質および演算が定義されており、2Dおよび3Dのグラフィックシミュレーションにおいて広範に用いられる。
【0017】
1×1という形式の行列の縮退サブセットは、スカラと称されることがあり、当業者にとってごくなじみのある数を構成する。
【0018】
行列の値が定数であり、行列が適合する次元であるときには、乗算などいくらかの演算が適切に定義される。3×4行列Aは、4×5行列Bと乗算されることができ、多くの場合:
A×B=C
【数2】
のように書かれ得る3×5行列Cを形成する。
【0019】
しかし、演算B×Aは適切に定義されず、その理由は、内側の次元が一致せず(5≠3)、kがBおよびAのインデックスと適合する単一の範囲を有し得ないからである。
【0020】
要素がベクトルまたは他の行列である行列は、テンソルとして知られている(そこから、TensorFlowという名称が導かれている)。テンソルのなじみのある形式としては、RGB画像があり得る。RGB画像の1つの形式は、その各ピクセルが色成分の3×1ベクトルである、RGB値の1080×1920行列としてのHDMIフレームである。ピクセルは、真のベクトルと考えられ、その理由は、赤成分の線形演算が緑または青に影響せず、その逆も真であるからである。
【0021】
HDMIフレームは、一般的には、5次元の行列とは考えられず、その理由は、画像におけるピクセルの位置の処理が色の処置と関係しないからである。関心対象ではない画像の部分を廃棄することによって画像をトリミングすることは、有効であり極めて意味があるが、色成分をトリミングするための対応する演算は存在しない。同様に、色に対しては、含んでいるアレイの要素に適用されたとしても意味がないであろう容易に理解可能な効果を伴う多くの演算が存在し得る。したがって、HDMIフレームは、明らかに2、3テンソルであって、5Dアレイではない。
【0022】
行列演算として表現され得る多くの画像処理アルゴリズムが知られている。行列演算は、反復的な演算を表現する簡明な方法であり、行列数学の規則は、特定の命題を証明する際に役立つ。
【0023】
汎用コンピュータのプロセッサにおける行列ベースのアルゴリズムの実行は、一般的に、ループ機構によって達成され、コンピュータ言語とハードウェアCPUとの両方が、そのようなループを効率的にする特徴を有し得る。しかし、行列定義の数学において、正しい結果を計算するために、特定の方法または計画によって演算が実行されることを要求する固有なものは存在しない。
【0024】
画像処理と認識との現代のハイブリッドは、畳み込みニューラルネットワーク(CNN)である。そのようなネットワークを訓練することは長年にわたり極めてチャレンジングであったが、訓練されたネットワークを実際に実行することは、比較的些末なことである。
【0025】
CNNでは、各畳み込みの出力要素は、独立なカーネルを入力テンソルに対して通過させることによって動作して、出力テンソルの各成分を生成する。典型的には、ニューラルネットワークが画像を処理するのに用いられるときには、ネットワークの第1の層が、画像のRGBピクセルの入力アレイに対して演算し、入力成分のRGBベクトルとは構造的に無関係な出力成分の任意のベクトルを含む、関係するサイズの出力アレイを生成する。出力ベクトルの成分は、一般的に、特徴または活性化として記述され、各カーネルの応答強度(認識の度合い)を表す。CNNにおける以後の層は、先行する層からの出力をそれらの入力として取り込むため、一番最初の層だけがピクセル値に作用し;残りのすべては、特徴に作用してより多くの特徴を生成する。畳み込みの各出力の特徴は、色成分が相互に別個であるのとまったく同じように、どの他の特徴とも無関係であり、別個である。
【0026】
CNN層の一般的な形式は、3×3の畳み込みである。演算においては、一定の重みの3×3カーネルが、要素ごとに、入力テンソル(すなわち、画像)の各特定の位置に適用され、すなわち、重みのそれぞれが、画像における同じ相対位置におけるピクセル成分により乗算され、積が加算されて、その位置に対する出力の単一の成分を生成する。バイアス定数(ゼロでもあり得る)は、最適な重み値に到達するようにモデルを解くことを容易にするための初期値を提供する。
【0027】
RGB画像に存在するように3つの入力成分(第1の層の場合には、色である)が存在する場合には、各成分値に適用される3×3個の重みの3つの別個のセットが存在するが、初期バイアスは1つだけ存在する。3×3×3個の重みの各畳み込みにバイアスを加算すると、ピクセルの3×3パッチの中心における位置に対応する単一の出力成分値を形成する。各出力チャネルは、次に、それ自体の27個の重み値を、与えられたパッチ(出力位置と同じ位置における、およびカーネル重みの相対位置に対応する、入力成分のサブセット)に対するすべての出力成分が計算されるまで、適用する。畳み込みが64個から256個までの間の出力成分を有することは通常であり、これらの出力成分のそれぞれは、27の重みに1つのバイアスを加えた一意的な特定のセットを有する。
【0028】
この例では、各カーネルは、その27個の重みを、3つのRGB成分の9つのピクセルの同じパッチと乗算している。64個の出力成分という比較的小さいセットの場合、個々の入力成分は、64個の任意で無関係の重みと乗算される。各パッチに対する出力成分が計算された後で、隣接するパッチが画像からロードされ、カーネルの重みのフルセットが再び適用される。このプロセスは、画像の右側のエッジに到達するまで継続し、次に、パッチは1つ下の行に降下して、左側のエッジからやり直す。
【0029】
第1の層が処理された後では、次の畳み込み層が、第1の層の出力を、第2の層への入力として処理する。よって、3×3の畳み込みは、ここでは、パッチの3×3×64個の入力成分に適用される3×3×64の重みを有する。この層が256個の出力を有する場合には、3×3×64×256=147,456回の乗算が、各出力位置のために行われなければならない。当業者であれば、これが、40個よりも多くの層を含み得るディープニューラルネットワークにおける単一の層を指していることを理解するであろう。
【0030】
パッチの各要素に適用される乗算の回数は、層におけるチャネルの数と等しい。標準的なCPUでは、これらは、必ず、あるシーケンスで行われなければならない。多くの現代のCPUは、特に、データフォーマットが小さい(すなわち、8ビットの)場合には、乗算のセットを同時に実行する能力を有する。GPUまたはTPUでは、利用可能な乗算器の個数ははるかに多いが、各乗算器は、2つの別個で無制限の因子からの積を生成するように設計されている。
【0031】
現行技術によるプロセッサでは、CPU、TPU、またはGPUは、CNNの実装例では、乗算のための因子のうちの1つが、あるパッチのための処理の間に入力チャネルに適用されるすべての重みに対して共通である、という単純な事実を利用しない。
【0032】
本出願の発明者は、すべての乗算を、単一のステップで行う大規模乗算器を提案するが、従来すべての乗算は、そうではなくてシーケンシャルに行われている。乗算のセットの重みがすべてある小さな精度(TPUに対しては、8ビットが典型的)であるときには、限定された(28=256)個数の別個の重みが存在しており、共通の入力の別個の倍数の個数も対応する個数だけ存在する(これは、任意のサイズであり得、共通の因子の精度がどのようなものであっても、8ビットの重みが適用されるときには、依然として、わずかに256個だけの可能な倍数が存在する)。この場合、同じ個数の無制限の乗算器よりもはるかに少ない要素を用いて、要求される全部の出力を一度に生成する回路を実装することには、明確な利点が存在する。
【0033】
本発明の一実施形態では、同等の大規模乗算器は、単一の入力チャネルの専用であり、常に共有されるとは限らない。よって、動作は、いくつかのクロックサイクルと複数のレジスタ段とを用いるという選択肢を有する。これにより、システムの全体的なスループットに影響することなく、動作が、非常に単純で効率的な形式を取ることが可能になる。
【0034】
単一の動的な値が多くの定数により乗算される一般的な場合には、独立な単一段の乗算器回路の同等なセットの代わりに、本発明の実施形態のような単一で多段の大規模乗算器回路を用いることの結果として、同じ計算を、実質的により高いスループット、および実質的により低い電力およびフットプリントで行うシステムが得られる。出力のセットが、用いられる実際の倍数の個数より少ない場合であっても、電力および空間に関し、依然として著しい節約が可能であり得る。
【0035】
独立の乗算器に対して、本発明の一実装形態では、独自の大規模乗算器の明確な利点を確立したのであるが、演算のシーケンスの順序を変更することで、この利点をさらに増加させることが可能である。
【0036】
ニューラルネットワーク(または、他の類似の画像処理)におけるアルゴリズムの数学には、いかなる特定の一連の演算を要求するものも存在しない。同じ演算がいかなる順序で行われた場合でも、同じ正しい計算がなされることになる。発明者は、CPU、GPU、またはTPUベースの設計上で実行するソフトウェアにとっての通常の順序は、重みに入力を乗算してそれらを直ちに加算することによって、与えられた位置に対する全部の出力チャネルを同時に生成するためのものである、と観察している。重みに入力を乗算し、それらを直ちに加算することによって、与えられた位置に対する全部の出力チャネルを同時に生成することは、入力がRAMから読み出されなければならない回数を最小化すると共に、重みが、やはりRAMから読み出されなければならない回数も制限する。それは、入力を複数回読み出すことを排除することはなく、その理由は、下段にある次の行を処理するときにそれらの入力を保持しておく場所は、RAMの他に存在しないからである。
【0037】
しかし、本発明の一実施形態において、アレイ入力のM×Nパッチに対して演算するように定義されたカーネルまたは他の開口関数の演算の順序が反転される、すなわち、有効に引っ繰り返される場合には、各入力値は、ただ一度だけ利用され、RAMのバッファは要求されない。開口関数が各行の上を通過する際に入力を冗長に読み出すことにより出力を一度に1つ生成する代わりに、この独特の演算は、最初に与えられるときにだけ、入力を一度に処理し、すべての不完全な出力についての部分和を保持するのである。部分和は、ハードウェアであるシフトレジスタまたは標準的なハードウェアである先入れ先出しレジスタ(FIFO)に保持され得るのであって、保持される値を保つために要求されるレジスタの個数は、カーネルの高さと入力行の幅とに比例する。
【0038】
開口関数を実装する関数は、一連のサブ関数に分解されることが可能であり、これらのサブ関数のそれぞれは、直前のサブ関数の結果に対して演算するため、カーネルの実装は、受け取られるデータに対してそれぞれが直ちに演算し理論的にはカーネルを適用するのと同一の一連の演算が結果として生じるように、サブ関数を経時的にシーケンシャルに合成することによって達成され得る。我々は、この再合成された関数を任意の初期化も含めて開口関数と称し、個々のステップをサブ関数と称する。本明細書で用いられる開口関数とは、入力のより大きなR×CのアレイのうちのM×Nの入力のスライドするウィンドウまたはパッチ上の複数の位置において実装される、任意のM×Nの算出を指す。開口関数は、完全なCNNカーネルの実装の場合のように、初期化および最終化演算も含み得る。CNNの場合には、初期化は、バイアス値をアキュムレータの中に予めロードし、最終化は、カーネルの生の出力を、任意の活性化関数を介して変換する。
【0039】
本発明のこの例では、各新たな入力位置の成分が与えられると、その位置における成分は、下方および右側へのパッチの第1の要素と、同時に、上方および左側へのパッチの最後の要素と、現在の位置と交差するすべての他のパッチの中間の要素とを表す。これにより、本発明の一実施形態として、常に固定された個数の進行中の要素を有し(入力のエッジの近くではいくらかの可能な例外があり得る)、入力を受け入れるのと同じ速度で出力を生成する、計算回路が開発されることが可能になる。
【0040】
ガイディングアルゴリズムが、入力アレイのエッジを超えて延長するパッチ上の開口関数の評価を要求する場合には、多くの特殊事例および課題が生じるが、それらは、克服不可能ではない。特殊事例のロジックが、重なるパッチの部分的な結果が全体的なスループットに影響することなく通常の場合と適合するように、追加され得る。
【0041】
本発明の実装形態では、この反転された形式の開口関数の演算が、ストリームとして入力を受け入れ、ストリームとして出力を生成する。入力はRAMにバッファされる必要がなく、その理由は、入力は、それぞれ、ただ一度だけ参照されるからである。出力もまたストリームに存在するため、出力が、RAMによるバッファリングなしで、以後の層によって処理されることが可能であり、これは、RAMとの間での必要な読出しおよび書込み動作が必要なそれ以外の多くのものに対して、処理スピードを実質的に増加させる本発明に帰すことができる結果である。
【0042】
本発明の一実施形態では、動作し記憶しそして次の層をシーケンシャルに処理するために結果を再び読み出す独立な乗算器の単一のセットを多くの層が共有する代わりに、どの層も完全になることを待機することなく全部の層を同時に処理して各層の出力ストリームを次の層の入力に供給する専用の大規模乗算器を用いて、パイプラインが生成され得る。
【0043】
本発明の一実施形態における完全に実装されたパイプラインは、このように、従来型の出力中心(output-centric)の順序付けプロセスよりも2桁優れたオーダで測定される有効なスループットに到達することができ、RAMに対する競合を排除する(RAMを用いることがないため)。GPUおよびTPUベースの処理の場合の主たるボトルネックを形成しているのは、RAMに対するこの競合である。
【0044】
本発明の一実施形態でのそのようなシステムのレイテンシは、最後のピクセルの入力から最後の結果の出力までの時間にまで低減される。画像の最後のピクセルは、アルゴリズムの定義によると、必ず、すべての層のための最終的な計算の全部を完了させるために要求される最後のデータでなければならないため、システムのレイテンシは、厳密に、最終的な出力を含むパイプラインにおける別個のクロック段の個数のクロック速度倍である。
【0045】
(再度用いられなければならず動的に割り当てられなければならない、独立の乗算器の限定されたセットの代わりに)各入力チャネルのために単一の専用の大規模乗算器を本発明の一実施形態におけるニューラルネットワークの全体で用いることにより、ピクセル同期式のパイプラインを構築することが可能になり、このパイプラインでは、適用される任意の数の重みを処理するために1つの大規模乗算器が必要となるだけなので、すべての乗算が並列に実行される。
【0046】
大規模乗算器の技術革新に関する本質的な特徴を、そしてまた反転の利点も説明してきたが、発明者は、以下では、特定の例を呈示する:
図1は、本発明の一実装形態を図解している図であり、この実施形態では、1つ以上のソースチャネル1からNのうちの複数のそれぞれは、101aから101dとラベル付けされており、専用の大規模乗算器102aから102dが割り当てられている。この例における各ソースチャネルは、そのチャネルの値の倍数のセットを作り出す専用の大規模乗算器回路を有しているため、ソースチャネルのフォーマットは、ハードウェアに実装されている処理アルゴリズムのために便利な任意の精度における、符号付き、符号なし、固定、または浮動小数点の間で変わり得る。大規模乗算器回路102cなど、各大規模乗算器回路の特定の出力は、ソースチャネルのいずれかまたは全部の倍数を要求する算出を行い得る1つ以上の計算ユニット103aから103dの中に直接に供給され得る。これらの計算ユニットは、同じソースチャネル上で計算される単一のアルゴリズムまたは無関係のアルゴリズムの独立の出力チャネルを実装するのに用いられ得る。計算の出力は、ハードウェアに実装された1つ以上のアルゴリズムによって要求され得る104に示されているさらなる処理のために、転送され得る。この状況は、たとえば、フィールドプログラマブルゲートアレイ(FPGA)にニューラルネットワークを実装するときに生じ、その場合被乗数として適用される重み値は変化しない。
【0047】
図2は、本発明の一実施形態を図解しており、
図1の大規模乗算器102aなど、各大規模乗算器の出力が、選択される倍数がシステムの初期化のときに選ばれるまたはシステムが動作する際に動的に選ばれるように、マルチプレクサのセット201aから201dを通して計算ユニット203a-203dの中に供給される。計算の出力は、次に、前述したように、204におけるさらなる処理のために転送され得る。この状況は、特定用途向け集積回路(ASIC)としてニューラルネットワークを実装するときに生じ、その場合、計算の構造はコミットされるが用いられる重み値は変更される必要がある。
【0048】
図3は、ある実施形態において、
図1および
図2の大規模乗算器102aの内部構造を図解している。この構造は、大規模乗算器102b、102c、および102dに共通であり得ると共に、本発明の他の実施形態における他の大規模乗算器にも共通であり得る。この構造では、Aビットであるソースチャネルの被乗数101aとBビットであるすべての可能な乗数との積303aから303fが、並列に生成され、倍数304に送達される。この例では、ソース被乗数101aのAビットが、0からB-1までのすべての要求されたシフトされた値のフルセットがA+Bビットの項302aから302dのベクトルの形式で利用可能となるように、複製され、0ビットを一番下の位置に付加することによって上にシフトされ、0ビットを一番上の位置の先頭に追加することによってパッディングされる。これらの項は、単に、回路接続をルーティングすることによって形成され得るのであって、レジスタやロジック回路は必要とされない。A+BビットのうちのB項の最大値が単一の周期で合成されることを可能にするためにクロック周期が十分である場合には、レジスタやサブ合成は、必要とされないことがあり得る。加算された項の個別の積303aから303fは、ローカルに記録されるか、または組合せロジックとしてのさらなる処理のために転送され得る。各乗数において1ビットが生じるときには常に、ソース被乗数101aの1から2
B-1倍の各積は、Bの対応する項302aから302dのいずれかまたは全部を加算することによって、形成され得る。あらゆるソースの倍数0は、全部が0ビットの定数であり、マルチプレクサを用いるときは完全性のために倍数304に含まれ得るが、それ以外には回路を要求しない。いかなる使われない積303aから303fも、それらを回路仕様から除くことによって統合ツールがそれらを削除することを可能にするか、または任意の他の方法によるかのいずれかによって、除外され得る。使われない項302aから302dもまた除外され得るが、それらはロジックを占有しないため、これは一般的に効果を生じない。このようにして、ソース被乗数101のすべての要求される倍数304は、単一段のパイプラインとして、または組合せロジックとして形成され得る。
【0049】
図4は、最適化された一実施形態を示しており、この実施形態では、項のセット401が、A+B+1ビットで形成された0からBまでを含む、すべての要求される個々の項302aから302eで構成されている。これにより、積402aから402fが、より小さな項の加算の代わりにより大きな項からの減算を含むことが可能になり、やはり最大の可能なクロック周波数を増加させる可能性がある回路の全体的なサイズを低減するのに、用いられ得る。たとえば、任意の与えられた入力aと乗数15とに対して、8a+4a+2a+1a=15aは、4つの成分を組み合わせているが、他方で、16a-1a=15aは、ただ2つを組み合わせており、一般的に、よりコンパクトで効率的であると期待される。各積402aから402fは、正しい結果を生じる、項302aから302eの加算および減算から構成され得るのであり、各特定の変形は、特定の実装技術のための最適なトレードオフに基づいて選ばれ得る。たとえば、2つのNビットの量の減算は、2つのNビットの量の加算よりも多くのロジックを要求し得るが、一般的に、3つのNビットの量の加算は、2つの減算よりも、常により多くのロジックを要求することになる。要求される倍数304の処理は、個々の積402aから402fを合成する詳細によって、変更されることはない。
【0050】
図5Aは、大規模乗算器の一実施形態を図解しているが、この実施形態では、クロック周期は、A+Bビットの値(または、減算が用いられる場合には、A+B+1)の単一の加算だけが1周期当たりで可能であるようになっている。この場合には、2つより多くの項が利用される倍数に適応するために、要求される要素を多段のパイプラインに構成することが必要である。項401は、前述のように各ソースチャネル101から形成されているが、後の参照のために、1回以上、パイプラインレジスタ501aおよび501bに保持される。加算された2つの項のペア502は、計算され記録されて、次に、必要に応じて保存503される。トリプル504は、ペア502と保持されている項501との和として形成される。項の値クオッド505は、ペア502の和として形成される。使用されない要素はすべて除外されてよく、重なりを増加させるために、加数の下降するシーケンスだけが特定され得る。これにより、たとえばa+bおよびb+aなどの冗長な和の両方は利用されず、最終回路に保持されないことが保証される。積506aから506fは、タイミングの制約を満足する記録されているサブ合成の任意のペアの任意の加算または減算演算を利用することができる。利用可能な最大の要素を首尾一貫して用いることにより、全体的なサイズを、したがって電力を低減することができるが、正しい結果を生じる演算の任意の組合せが受け入れ可能である。
【0051】
図5Aの実施形態は、B=8の場合のすべての要求される倍数を生成するのに十分である。それよりも大きな倍数のセットの場合には、示されているサブ合成が、Bの任意の値に対するすべての要求される倍数506a-506fが、先に開示され保持されていた項501bと、保持されていたペア503と、トリプル504と、クオッド505とを、単一クロックの演算によって倍数506a-506fを形成するのに十分な項のセットを形成するのに要求される他のサブ合成と共に含む、サブ合成の拡張されたセットにおける単一クロックの演算から合成されるように、さらなるパイプライン段において再び組み合わせられ得る。
【0052】
図5Bは、倍数が、標準的な算術演算を参照することなく固定されたセットの場合によって直接に形成される実施形態を図解している。要求される倍数のそれぞれに対して、出力値a*bのセットが、各ソースチャネルの値aに対して列挙される。これにより、ハードウェア回路合成ツールが、要求される倍数のフルセットを生成するために最適なロジック回路507を決定することが可能になる。任意の与えられた入力値に対する要求される出力値の仕様は、典型的には、Verilogの「case」または「casex」ステートメントにおける列挙によって、作成される。これは、出力値が記憶されていて、入力から形成されるインデクスを介してアクセスされるルックアップテーブルとはまったく別であり、その理由は、出力値のフルセットを生成するのに要求される演算の最小のサブセットを実装するのにロジックゲートが用いられ、関係するサブ表現を生成するのに用いられる冗長ロジックが組み合わせられるからである。
【0053】
方法5Aと5Bとのどちらが、空間、周波数、および電力に関して最も効率的であるかは、AおよびBの特定の値、ならびに算術演算と任意のロジックとの間でのコア効率性にも依存する。どちらの方法を用いるのかの選定は、直接的な観察、シミュレーション、または他の基準に基づき得る。
【0054】
図6は、クロック周期が、ロジックの十分なレベルによって、各単一のクロック周期の間に4つの要素の加算および/または減算の合成が可能であるような一実施形態を図解している。サブ合成のセットから選択することによって、各積605aから605fが、4つ以下の記録された要素を組み合わせることによって、生成され得る。前述のように、項はレジスタ501aおよび501bに保持されているが、602に保持されるトリプル601は項401から直接に合成され、ペアは用いられない。セプテット603とオクテット604とは、トリプル601と保持されている項501aとから形成される。
【0055】
図6の例示的な実施形態は、B=32の場合のすべての要求される倍数を生成するのに十分である。より大きな乗数の場合、示されているサブ合成は、Bの任意の値のためのすべての要求される倍数を生成するために、さらなるパイプライン段において、一度に4つが再び組み合わされる。示されている要素のサブ合成は、B=32の場合のすべての積を生成するために必要であり十分であるが、(おそらくは、Bの異なる値にわたって一貫性のために選ばれる)他のサブ合成も受け入れ可能である。
【0056】
FPGAの用途に対して一般的であるように、乗算器のセットが固定されているときには、共通の要素がマージされて、使用されない要素は除外され得るから、乗算器の大きな粗のセットでさえも効率的に実装され得る。合成ツールがこの機能を自動的に行うときには、回路の表現は、どの倍数が用いられるかを明示的に宣言することなく、すべての可能な要素を含み得る。
【0057】
A+BまたはA+B+1ビットの値に対する演算が単一のクロックサイクルで完了されることが不可能である場合、すべてのパスが同数のクロック周期を有するように、必要に応じて追加のパイプラインレジスタが挿入されれば、多段のパイプライン加算器が、任意の単一段の合成ロジックのために挿入され得る。パイプライン段の周期は、単一のエッジ間でのクロック遷移の、またはスループットの制約が許容する場合には複数サイクルのクロックのインスタンスであり得る。演算ごとの複数クロック段と複数サイクルのクロック動作の使用とのいずれも、直前で言及した課題以外には、どの実施形態に対しても構造的な変更を要求することはない。
【0058】
本発明の重要な目的は、当産業に、多様な用途において用いられ集積回路に実装される大規模乗算器を提供することである。この目的のために、発明者は、一実施形態において、集積回路に実装される大規模乗算器を提供し、この集積回路は、離散的な値のストリームを受け取るポートと、そのポートにおいて受け取られる各値に複数の重み値を同時に乗算する回路と、生成された大規模乗算器の積を提供する出力チャネルとを有する。
【0059】
あるバージョンでは、受け取られる離散的な値は、固定された幅を有する符号なしのバイナリ値であり得るし、重み値は、2またはそれより大きなビットの固定された幅を有する符号なしのバイナリであり得、各倍数は、入力のビットシフトされた複製の和として合成され得る。別のバージョンでは、シフトされた複製のセットが、回路を低減するまたはさもなければ最適化するために減算演算の使用を可能にするように増加され得る。そのセットのうちの使用されない出力は、明示的または非明示的に、除外され得る。
【0060】
ある実施形態では、出力される積のセットは、組合せロジックによって、生成され得る。別の実施形態では、出力されるセットの組は、単一段のパイプラインによって、単一または複数のクロックサイクルを用いて、生成され得る。別の実施形態では、出力される倍数のセットは、多段のパイプラインによって、1段当たり2つ以下の加数を組み合わせることによって、生成され得る。中間のサブ合成の使われない要素は、明示的または非明示的に、回路から排除され得る。
【0061】
ある実施形態では、出力される積のセットは、多段のパイプラインによって、1段当たり3つ以上の加数を組み合わせることによって生成され得るのであり、サブ合成は、それに従って調整される。中間のサブ合成の使われない要素は、明示的または非明示的に、回路から排除され得る。
【0062】
本発明の別の目的は、深層学習および人工知能の進行中の進展における、実質的に改善された畳み込みニューラルネットワークを実装するために、大規模乗算を集積回路において提供することである。発明者は、この努力において、集積回路として実装された第1の畳み込みニューラルネットワーク(CNN)ノードを提供しているが、これは、アレイの要素の第1の成分の離散的な値のストリームとして定義された、第1の入力チャネルを有する。
【0063】
この説明では、発明者は、アレイの要素という命名を、単一の成分または複数の成分を有し得る要素を意味するものとして、意図している。適切な例は画像であって、画像は要素としてピクセルを有し得、画像が単色である場合、各ピクセルは単一の要素を有し得、または、画像がRGBカラーである場合、1例において3色の値を有し得る。この例における各色値は、ピクセルである要素の成分である。
【0064】
アレイの要素の最初の成分の離散的値のストリームとして定義される第1の入力チャネルを用いた集積回路に実装されている、第1の畳み込みニューラルネットワーク(CNN)ノードに関する上述の説明を続けるが、このCNNには、受け取られた第1の成分の離散的値に複数の重み値を同時に乗算する第1の大規模乗算器回路がさらに存在する。出力チャネルは、離散的値の出力ストリームを提供する。
【0065】
CNNノードのある実施形態では、第1の出力ストリームは、第1の大規模乗算器回路の積から、いくつかの状況では積を定数と組み合わせることによって、そしていくつかの状況では活性化関数を適用することによって、形成される。
【0066】
別の実施形態では、CNNノードは、アレイの要素の第2の成分の離散的値のストリームとして定義された第2の入力チャネルと、受け取られた第2の成分の離散的値に複数の重み値を同時に乗算する第2の大規模乗算器回路とをさらに備えている。別の実施形態では、アレイの要素の第3の成分の離散的値のストリームとして定義された第3の入力チャネルと、受け取られた第3の成分の離散的値に複数の重み値を同時に乗算する第3の大規模乗算器回路とが存在し得る。
【0067】
1つ、2つ、または3つの入力成分ストリームと専用の大規模乗算器とを有するCNNノードについて説明したが、発明者は、アレイの要素の成分の離散的値のストリームとして定義された入力チャネルと、個々の入力チャネルの専用であって受け取られた成分の離散的値に複数の重み値を同時に乗算する大規模乗算器回路と、離散的値の出力ストリームを提供する出力チャネルとを備えた集積回路として実装された第1の畳み込みニューラルネットワーク(CNN)ノード、および、第1のノードの出力に少なくとも部分的に依存する入力を有する第2のCNNノードを有する畳み込みニューラルネットワーク(CNN)をさらに提供する。このCNNは、連続的なノードを有し得るのであって、深層ニューラルネットワーク(DNN)として動作し得る。第1のノードの後の連続的なノードがCNNノードであることは、要求されない。
【0068】
パイプライン化された開口関数の動作
ここで、正味の結果を生成するために入力のアレイに対して計算サブ関数のアレイを通過させるCNNまたは他の同様に選ばれた開口関数を処理する際の演算の順序について論じた、本明細書における先の説明に戻って参照するが、ストリームとして入力を受け入れ、ストリームとして出力を生成するという、本発明の一実施形態における開口関数の動作の反転された形式に関する特定の説明がここで提供される。本発明のこの実施形態では、RAMに入力がバッファされることはないし、バッファされることは必要ないのであって、その理由は、各入力は、ただ一度だけ参照されるからである。出力もまたストリームとして生成されるため、出力ストリームは、RAMによるバッファリングを伴うことなく、後の層によって処理され得る。発明者は、この技術革新が、他の処理システムにおけるRAMに対する読出しおよび書込み動作が必要なそれ以外の多くとの比較において、処理スピードを実質的に増加させると信じる。
【0069】
本発明の一実施形態において装置および方法が提供されるが、すべての入力が直ちに処理され、部分的に完了した計算が、すべての要求される入力が受け入れられ処理されるまで保持され、出力が、典型的には入力ストリームと同一のまたはそれよりも低いデータ速度を有する整合的なストリームとして生成されるように、二次元の開口関数を二次元のアレイ上を通過させる作用が、入力の入来ストリーム上に作用することによって達成される。すべての入力は、提供される速度で受け入れられ処理されるのであって、与えられた順序以外のいかなる順序も記憶されるまたはアクセスされることは要求されない。入力よりも多くの出力が生成されるように開口関数の適用が定義されている場合であっても、この回路は、システムが与えられた入力を受け取らず処理しないということが決してないように、処理クロック速度を十分な増加を伴うように選択することによって、依然として入来データのスピードで動作することができる。
【0070】
より大きな入力アレイに対してカーネルまたはより一般的な開口関数の畳み込みを実装するための従来型の方法は、要求される入力パッチを収集し、関数を入力に適用して、結果を出力するというものである。開口が入力アレイに対して通過されるとき、続く各パッチは、ちょうど処理されたものと重なり合うため、いくつかの入力が保持され再利用され得る。パッチが各新たな行に進む際にソースストレージから入力を冗長に読み出すことを回避するためには、FIFOなど、様々な機構が用いられ得るが、入力パッチが各特定のデータ入力位置と重なる各出力を順に生成するために、ソースデータは、依然として、カーネルにおける各位置に適用されることになる。
【0071】
多くの出力チャネルと計算されるべき多くの独立の開口関数とが存在する場合には、開口関数のすべてに、考慮中の入力値のパッチの積を並列に提供するために、大規模乗算器が用いられ得る。しかし、この構成と演算の順序では、ソースデータの各位置は、カーネルにおける各位置に対して積のセットを要求することになり、その理由は、重なり合う様々な出力位置にそれが組み合わされるからである。
【0072】
本発明の機構は、与えられた入力値に適用される単一の大規模乗算器を入力チャネルごとに一度だけ用いるという特別な利点のために、演算の順序を反転させる、すなわち、引っ繰り返す、ということである。後で積を計算するという形式によって後で用いるためにソース値を保持するまたは再度読み出すのではなく、本発明の一実施形態におけるプロセスは、与えられたときに各入力の全部の要求される積を計算し、現在の入力が現れる時点までにおいて完全である、開口関数の各要素に対する現在までの合計を保持する。
【0073】
シーケンシャルに適用される一連のサブ関数に数学的に分解されることが可能な任意の開口関数が、このようにして実装できる。CNNカーネルは、重み倍した入力の一連の和に過ぎず、演算の順序は左から右、上から下によって取られるソース入力の順序と適合しているため、この機構が容易に適用されることが可能である。
【0074】
本発明の一実施形態では、開口関数のサブ関数要素に対応する合成器のアレイがIC上に実装され、それぞれが、入力ストリーム上を進むにつれて、開口関数の値のその時点までの合計を保つ。アレイにおける最終の合成器は、関数の完全な値を出力し、すべての他の合成器は、関数の部分的な値を出力する。
【0075】
3×3のカーネルの適用という単純な場合、左上の合成器の出力は、現在の入力に適用されたカーネルの最初の要素と任意の初期化定数との和を反映し、真ん中の上の合成器の出力は、最初の2つのステップを反映し、右上の合成器の出力は、最初の3つのステップを反映する。右上の合成器の出力は、それが次の行によって再び用いられることができるまで遅延される必要がある。合成器の次の行は、部分的に完了した関数値を受け入れ、各新たな入力の寄与を加算して、それを前方に通過させる、というパターンを継続する。合成器の最後の行は、関数の最後のステップを完了させて、完了した値を任意のさらなる処理のために出力する。
【0076】
合成器の間での関数の部分的な値の進行は、一般的に、第1の行では左から右であり、次いで続く行でも、最終的に最後の行における最後の合成器まで左から右であることに注意すると、部分的な値のフローはストリームであると考えて、合成器とフローとを上流または下流と称することができる。
【0077】
すべての時間において、各合成器は、現在のソース入力を含めその現在のソース入力までの開口関数の部分和を維持する。各合成器は、常に、出力の異なるパッチ位置に対して、特に、開口サブ関数アレイにおける合成器の相対位置に現在の入力が現れるそのパッチの位置に対して、作用している。
【0078】
3×3のカーネルWが入力Aの関数として、
【数3】
と表される場合には、このカーネルを実装する関数は、下記のような同等のサブ関数に分解されることが可能である。
v
0(a
11)=k+a
11w
11
v
1(t,a
12)=t+a
12w
12
v
2(t,a
13)=t+a
13w
13
v
3(t,a
21)=t+a
21w
21
v
4(t,a
22)=t+a
21w
22
v
5(t,a
23)=t+a
21w
23
v
6(t,a
31)=t+a
31w
21
v
7(t,a
32)=t+a
31w
32
v
8(t,a
33)=t+a
31w
33
u=v
8(v
7(v
6(v
5(v
4(v
3(v
2(v
1(v
0(a
11),a
12),a
13),a
21),a
22),a
23),a
31),a
32),a
33)
u=(((((((((k+a
11w
11)+a
12w
12)+a
13w
13)+a
21w
21)+a
22w
22)+a
23w
23)+a
31w
31)+a
32w
32)+a
33w
33)
u=k+a
11w
11+a
12w
12+a
13w
13+a
21w
21+a
22w
22+a
23w
23+a
31w
31+a
32w
32+a
33w
33=u(A,W)
【0079】
次に、これらのサブ関数を計算するのに要求される回路は、下記の合成器の対応するアレイ
【数4】
として構成され、部分的に完了した和が、合成器の出力値
【数5】
として、維持される。
【0080】
ここで、aiは、入力ストリームからの現在値であり、ai-1からai-8までは、各場合において、aiが個々の合成器の出力に対する位置に現れる特定のパッチに対して以前に処理された入力である。各合成器は、開口関数の値を、開口アレイにおいてその合成器が対応する位置を含めてその位置まで、計算することになる。各合成器は、入力ストリームの現在値を取り込み、それを以前の値と組み合わせて、入力アレイにおける部分的に処理されたパッチに対応する異なる部分和を生成し、その場合、現在の入力値は、開口関数における各合成器の位置に対応するそのパッチの相対位置に現れる。
【0081】
このように、標準的な順序および精度で計算された開口関数の部分的な値は、完了した値が出力される準備ができるまで、経時的に、入力ストリームに維持されることになる。
【0082】
この技法は、入力アレイの内部では極めて単純明快であるものの、入力アレイのエッジと重なるパッチに適用されるときに複雑化が生じ、その理由は、すべての入力が利用可能であるとは限らないときには、開口関数が異なって定義されるからである。CNNカーネルの場合には、追加的な演算が略され、入力としてゼロを用いることと等価である。本発明は、後述されるように、そのような例外を処理している間、合成器を通る部分和の定常フローを維持することに、関心を有している。
【0083】
図7は、入力ストリームを受け取り、入力ストリームを前処理し、結果を独特なデジタルデバイスを通して与えて、出力ストリームを生成する、本発明の一実施形態における構造と接続とを図解している図である。
【0084】
入力チャネルセット701と関連する制御信号702とが共通の回路703によって用いられ、以後のサブ関数のための重みと入力チャネルセットとのあらゆる積を生成する。ソースチャネルの積は、次に、サブ関数計算回路704a、704b、および704cのバンクに分散され、これらの回路のそれぞれが、出力チャネルセット705の単一のチャネルを生成する。任意の個数の独立な出力チャネルが、共通回路703によってサポートされ得る。
【0085】
図8Aは、
図7の共通回路703における大規模乗算器801a、801b、および801cを図解している図であり、これらは、入力チャネルセット701の各チャネルを取り込み、定義されているサブ関数により要求される、倍数の粗なセットまたは完全なセットのいずれかを生成する。この図解は、RGB画像を処理する際の赤、緑、および青のピクセル値に対する場合のように、入力チャネルセットにおいて3つのチャネルを想定していることが注意されるべきである。他の実施形態では、1つ、2つ、または3つより多くのチャネルが存在することもあり得る。積802(大規模乗算器によって構築されたソース入力アレイ値の倍数)のうちの任意のものまたは全部が、以下の可能な詳細で説明される
図9A、
図9B、および
図9Cに示されている合成器に対して利用可能にされ得る。合成器は、
図8Aの大規模乗算器によって生成されるソースチャネルの積に対してサブ関数を行う本発明の独特なデバイスにおけるハードワイアード回路の例である。
【0086】
図8Bは、すべての出力チャネルのすべての合成器に通常のおよび例外的なハンドリング信号を提供する同期回路の構造を図解している図である。
【0087】
制御回路803は、すべての出力および制御カウンタを、ソース入力ストリームに同期させ、RSTまたはINITがアサートされると常に、出力および制御カウンタの初期状態への設定を実現する。
【0088】
この例のcolSrcカウンタ805は、行にわたって列ごとにアレイの内部次元を数えあげ、ソースチャネルの積の各セットが処理されると、次に進む。この例では、各行の終点で、colSrcカウンタは、最も左側の位置(0)に戻り、rowSrcカウンタ804が1だけ進む。ソースアレイストリームの終点では、rowSrcおよびcolSrcカウンタが初期状態に戻り、入力の新たなアレイを受け取るように準備される。
【0089】
この例では、colDstカウンタ807とrowDstカウンタ806とが、すべての出力チャネルに対して、これらのカウンタと類似の様態で共に作用する。colDstカウンタとrowDstカウンタとは、出力イネーブル信号(DSTEN)813によってイネーブルされ、後処理イネーブル信号(POSTEN)812がいつアサートされるかを決定する。
【0090】
この例に示されているシステムは、開口関数の単一の出力を生成するが、通常は、ソース入力ストリームの次元と適合するチャネル出力のストリームセットを生成するのに用いられることになる、ということが注意されるべきである。各独立な出力チャネルは、大規模乗算器と共通制御ロジックとを介して、計算回路の少なくともいくつかを共有することになる。
【0091】
出力イネーブル(DSTEN)信号813は、いつ最終化関数が合成器からの結果を受け入れ処理するかを制御する。最初のいくつかの行はソース入力アレイから受け入れられるが、有効な結果は、最終化関数に与えられない(
図9Cを参照)。出力イネーブル信号813(DSTEN)は、rowDstおよびcolDstカウンタが有効な結果が利用可能であると示したときか、またはその代わりに、遅延した処理が結果を切り捨てたときのいずれかで、アサートされる。POSTEN信号812は、SRCEN信号801のタイミングに一致するように、連続的または周期的に、アサートされる。これらの信号は、ソース入力ストリームアレイの最終の行を処理するときには、すべての切り捨てられた合成器の最終出力をシーケンス化するように要求される。
【数6】
からM-2までの合成器の各行は、最終的な完全な出力と同時に、最終的な切り捨てられた出力を生成するが、最終的な完全な出力は、アレイストリームフォーマットと一致させるために、保持され、すべての完全なパッチ出力の後でシーケンシャルに送られなければならない。
【0092】
この例では、POSTENおよびDSTEN信号ならびにcolDstおよびrowDstカウンタ値は、SRCEN信号ならびにcolSrcおよびrowSrcカウンタ値と独立であり、すべての遅延した結果が最終化されて出力ストリームに送られるまで、遅延した結果の処理を継続する。このシステムは、以前の出力が完了されるまで新たな入力を受け入れることができることで、このシステムは、フレームの間で一時停止することなく、ソース入力ストリームの複数のフレームを処理することが可能になる。ソースストリームデータがアレイの終点に到達しない間は、POSTENはアサートされず、最終的な結果が、合成器から取り込まれる。ソースアレイの終点に到達した直後に、POSTEN信号が、各追加的な出力に対してアサートされ、後述する
図9Cに示されているように、rowDstカウンタが出力行の全部の個数に到達するまで、切り捨てられた遅延線909、910a、および910bから最終的な結果が取り込まれるが、この時点で、rowDstおよびcolDstが、データの次のフレームのための準備として、初期の状態にリセットされる。
【0093】
最初の行の信号808(ROWFST)は、ストリームからのソースデータセットがアレイの最初の行を表すことをrowSrcカウンタが示すと、アサートされる。
【0094】
最後の行の信号809(ROWLST)は、ストリームからのソースデータセットがアレイの最後の行を表すことをrowSrcカウンタが示すと、アサートされる。
【0095】
最初の列の信号810(COLFST)は、ストリームからのソースデータセットがアレイの各行の最初の列を表すことをcolSrcカウンタが示すと、アサートされる。
【0096】
最後の列の信号811(COLLST)は、ストリームからのソースデータセットがアレイの各行の最後の列を表すことをcolSrcカウンタが示すと、アサートされる。
【0097】
図9A、
図9B、および
図9Cは、上述した独特なデバイスを、一般的な場合に図解しており、開口関数のM×Nのサブ関数要素が、エッジと重なるものを含めて、R×Cの入力のアレイの各重なるM×Nのパッチに適用されているが、これらの入力は、R×Cの出力の対応するストリームを生成するように、規則的または不規則的な時間間隔で、関連する成分のストリームとして与えられており、各出力は、開口関数の規則によって特定されるように入力パッチに適用されたM×Nの関数要素の集合的な効果である。アレイの各位置に適用される関数要素は、このデバイスでは、
図9A、
図9B、および
図9Cを合成したものに示されているように、M×Nのサブ関数のそれぞれに対するハードワイアードの合成器である。
【0098】
この回路の効果は、R×Cの入力のアレイの各位置における開口関数の再合成された値を、各パッチ上の開口関数を個々に計算するのに用いられ得るのと同じ一連の演算を用いて、計算することである。出力ストリームにおいてどの位置も望まれない場合には、完全に重なるのではなく、タイル張りのまたは間隔のあいた出力を生成するように、それらを除外するための回路が追加されることが可能である。
【0099】
ソースチャネルの積802とソース制御信号814とは、合成器901、902a、902b、902c、903a、903b、903c、904、905a、905b、905c、906、907a、907b、および907cのそれぞれにとって利用可能にされる。ソース制御信号は、また、遅延908a、908b、908c、908d、908e、および908fにも接続される。出力チャネル制御およびカウンタ815は、遅延909、910a、および910bに利用可能にされ、ならびに最終化関数911にも利用可能にされる。演算の順序が変更されない場合、そしてその場合に限り、与えられたクロック周波数にとって回路ルーティングを適切なものにするために、追加的なパイプライン段が、手動でまたは自動化されたツールによって、挿入されることがあり得る。タイミング制御およびカウンタ信号は、回路のすべての要素にとって利用可能であり、個々には示されていない。
【0100】
各合成器は、特定の入力積か、またはその代わりに、セットの中の各入力値に対して積のうちの1つを選択し回路の実行の前に事前構成されているプログラマブルなマルチプレクサかのいずれかへの専用の直接的な接続を有する。各専用の接続は、単一の入力間隔で要求される積を表わすビットを運ぶのに十分な複数の配線を備えた並列な経路である。各セットの要素に対してどの積が各合成器に送られるのかを選択する、オプションの事前構成されたマルチプレクサを用いることにより、現場での重み値のアップグレードが可能になる。重みがアップグレードされることなく、デバイスの寿命を通じて固定されたままのときには、固定された接続が用いられる。重みの選択は動作の間に変化することはないため、固定または可変という積の選択の選定が、回路の動作に影響することはない。
【0101】
各合成器は、サブ関数の重みに対応する積のセットを、入力チャネルごとに1つ、大規模乗算器から受け取り、典型的には単純にそれらをすべて一緒に加算するというサブ関数の計算を行って、全体的な開口関数の値に対するこの合成器の寄与を形成する。各合成器は、また、開口関数の左側の列に対応するものを除いて、すぐ左の合成器から、部分的に完了した結果を受け取る。各合成器は、また、開口関数の一番上の行に対応するものを除いて、上にある行の合成器から、遅延し部分的に完了した結果も受け取り得る。各合成器は、高々、左側からの1つの接続と、上からの1つの遅延した接続とを有しているが、これらの各接続は、その合成器への入力として部分的に完了した結果を表わすビットを運ぶのに十分な複数の導体を有する並列な経路である。入力アレイのエッジに対する現在の入力パッチの位置に関するサブ関数の定義により、各合成器は、3つの動作のうちの1つを行う:この合成器の部分的な結果ともし存在するならば初期値との組合せ、またはこの合成器の部分的な結果と左側の合成器からの部分的な結果との組合せ、またはこの合成器の部分的な結果と遅延した部分的な結果との組合せである。補正された結果はその結果を含むのに十分な複数ビットの出力レジスタの中に置かれ、それを、続く入力間隔において右側の合成器ならびに/または遅延および最終化回路に対してとって利用可能とする。この補正された結果は、開口関数における合成器の位置と入力ストリーム位置の状態とに応じて、部分的な結果、完全な結果、または切り捨てられた結果のいずれかであり得る。
【0102】
合成器(0,0)は、開口関数において左側または上側に合成器が存在しないという点で独特であり、したがって、受け取られた各入力セットを用いて計算を常に初期化する。
【0103】
合成器(M-1,N-1)は、生成された結果が常に最終的な結果であるという点で独特であるが、すべての他の合成器903a、903b、または903cと構造的には同一である。
【0104】
いくつかの合成器の出力は、遅延または事後処理のためにタッピングされる(tapped)が、その場合に、そのような遅延または事後処理を通る経路の幅は、この部分的な、切り捨てられた、または完了した結果を表わすビットを運ぶのに十分である。いくつかの合成器の出力は、右側の合成器によってのみ用いられる。合成器にとって内部的な計算と出力データフォーマットとは、出力の使用に応じた変更を要求することはない。
【0105】
最終化回路は、いくつかの可能なソースからの結果を取り込み、いずれかの間隔においてどれを処理すべきかを選択するために、それらを多重化する。もし存在する場合には、最終化関数を適用した後で、最終的な出力の幅が低減されることがあり、次の入力ストリーム、本発明を含むシステムの最終出力、またはさらなる処理に用いられ得る出力のいずれかであり得る本実施形態の出力ストリームを形成することになる。
【0106】
本発明の実装形態における独特なデバイスにおけるデータパスが、
図9A、
図9B、および
図9Cでは、矢印によって指示された方向と共に太線によって示され、省略記号が、その範囲における最後の列または行がその全体で反復される箇所を示している。ソースチャネルの積802からのデータパス(a)は、並列な導電性の経路のセットであり、1つの経路は、入力成分の各積に専用であって、各積は、入力成分に開口関数の複数の重み値のうちの1つを乗算した値である。5×5の開口関数が各入力成分に対して25個の重み値を有することは、明らかなはずである。R、G、およびBの色ピクセルのR×Cの入力アレイに対する開口関数という状況では、75個の重み値が存在する。したがって、ライン(a)は、この状況では、75個の並列な経路を有しており、各経路は、精度のために望まれるビット数を収容する幅の並列な導体のセットである。ライン(a)は、当該技術では、バスとは対照的に、ポイントツーポイント接続のセットと称される。
【0107】
図9A、
図9B、および
図9Cにおけるデータパス(b)は、ライン(a)の延長ではなく、ライン(a)におけるパスの特定のサブセットへの専用の接続である。ライン(b)は、
図9A、
図9B、および
図9Cにおけるどの例でもマークが付されているとは限らないが、構成回路のうちの個々の1つへの直接的な、ライン(a)からのどの接続も、専用のライン(b)である。専用とは、各合成器が、各入力成分とその合成器によって要求される重み値との積を運ぶ経路のそのサブセットに接続されている、ということである。
【0108】
図9A、
図9B、および
図9Cにおけるデータパス(c)は、各合成器における出力レジスタとその右側の次の合成器との間のポイントツーポイントパスである。これらは、本明細書の他の箇所で可能な詳細に説明されているように、典型的には部分和を運ぶ正確な幅の専用のパスである。どの経路(c)も図面でマークが付されているとは限らないが、この例では、ある合成器から別の合成器へのどの直接的な接続も、経路(c)であると想定され得る。出力経路(c)が代わりとなる回路に枝分かれする場合も存在するということに注意してほしい。
【0109】
本発明の一実施形態における別の独特のデータパスには、
図9A、
図9B、および
図9Cにおいて、(d)というマークが付されている。これらは、回路908Aから908fなどの遅延回路からの専用のデータパスであり、下の行または左側の合成器にもどるか、または直接的に他の遅延回路へのものか、のいずれかである。遅延回路は、合成器の行の右端において部分和を受け入れ、特定の数のソース間隔だけ部分和に対する通過を遅延させ、そして次にそれらの部分和を、適切な時点において他の合成器および/または他の処理に渡す、というように作られている。全体的な機能は、この明細書の他の箇所に、可能な詳細に説明されている。遅延回路の間の経路(d)は、同様に、特定のソース間隔で渡される典型的には部分和のための専用の経路である。
【0110】
ある範囲の最後の行または列が要求されないようにMまたはNのいずれかが低減される場合には、最終の要素が除外され、その範囲における最初の行または列の実装は保持される。MもしくはNの一方または両方が2に低減される縮退の場合には、最初および最後の行または列は保持され、中間の行および列が除外される。MまたはNの一方が1に低減される縮退の場合には、最初および最後の合成器の実装は組み合わされ、特別な初期化は要求されない。MとNとの両方が1である特定の例では、開口関数の反転は要求されないが、大規模乗算器の使用は、依然、明確な利点を与える。
【0111】
ソースチャネル積802は、R×Cアレイの、および何らかの事前定義されたシーケンスにおける特定の位置と関連して同時に与えられるバイナリ値の任意のセットであり得る。入力ストリームのソースチャネルは、開口関数の入力に対していかなる性質でも定義されている任意のフォーマットでの整数または分数値の任意の組合せであり得る。1つの例は、アレイサイズR×Cに一致するようにスケーリングされた1つ以上のビデオフレームおよび/もしくは任意の他のセンサ値からのピクセル値、ならびにCNN層の出力として生成された特徴成分値でもある。本発明を具現化する各ノードは主たるソース入力に加えてまたはその代わりに、他のノードからの出力を受け入れることができることは強調される。本発明の一実施形態では、第1のノードまたは複数のノードが、画像ピクセルをシステムの主たる入力として受け入れることは一般的であるが、R×Cアレイを表すストリームにフォーマット化されることが可能であれば、処理されるデータの性質に対する制約はまったく存在しない。
【0112】
本発明のある実施形態では、ソースストリーム要素セットが、行が最初の順序(row-first order)で与えられ得、続く各列は、厳格に昇順で与えられている。本発明のいくつかの実施形態では、行および列は、水平または垂直軸に対応することは必要なく、列を上方向または下方向に、そして右から左へ走査することにおいて任意であり得る。行Rおよび列Cは、ここでは、単に、ストリームフォーマットの長軸と短軸とを指す。回路は、標準的なビデオの左から右、上から下という順序以外の向きで入力ストリームを生成する入力信号のために調整する必要はない。開口サブ関数の向きは、各入力アレイ位置に対して同一の出力を生成するように一致するようにされることが可能である。
【0113】
この例では、開口関数によって要求されるソース値と重みとの積であるソース入力が、要素の各新たなセットが有効であるときを示す信号(SRCEN、
図8Bを参照のこと)によって提示される。入力は、任意の時点で一時停止および再開され得る。いくつかの例では、入力の間の最小の間隔が定義され得るのであって、回路は、サイズおよび電力を低減するまたはさもなければ利益を得るためにマルチサイクルまたはよりハイスピードのクロックを用いることができ、出力チャネルセットは、同じ最小の間隔を用いることができる。
【0114】
共通の制御および同期回路803(
図8B)が、カウンタと、R×Cアレイにおける現在の入力位置を記述する制御信号とを提供する。カウンタは、最終入力の後でも、追加の行および列のために実行を継続し得、最終化関数911(
図9C)が入力の最後の行による入力列を超えて発生された累積した出力を出力することを助ける。(
図12、
図13、および
図14ならびに以下の説明を参照のこと)制御信号は、すべての他の要素にとって利用可能であり、
図9A、
図9B、および
図9Cには、示されていない。
【0115】
合成器回路901、902a、902b、902c、903a、903b、903c、904、905a、905b、905c、906、907a、907b、および907cは、各々、M×Nの関数におけるそれらの位置に割り当てられた開口関数のその部分を計算する。全部の合成器は、同じソースチャネルセットと、制御803によって提供された行および列カウンタ状態とに対して動作する。開口関数のデータハンドリングの詳細は、追加的な図面を参照しながら、後で説明される。
【0116】
ソース入力セットが入力ストリームから受け取られると、入力ストリームにおける現在位置と重なるすべてのパッチに適用される開口関数の部分的に完了した計算が、合成器のM×Nアレイの内部で、左から右へおよび上から下へ渡される。この動作は、経時的に開口関数の完全な計算を累積し、入力アレイの各パッチ上の開口関数の正しい実装を出力して、その開口関数がアレイから直接的に入力値を読み出すことによって実装された場合にそうであるのと同一の演算の順序を通して同じ結果を生成する。ランダムなアクセスを、ストリームアクセスを伴うアレイに置き換えることは、本発明の重要な特徴であり、ランダムアクセスメモリへの冗長的なアクセスへの必要性を排除する。
【0117】
合成器の右側の列
【数7】
からN-1では、一番下の行を除いて、部分的な出力が、遅延段908a、908b、908c、908d、908e、および908fに渡され、それらの遅延段では、それらの部分的な出力が、パッチのより下側の行に対応する入力が受け取られるときに同じ論理パッチ位置のさらなる計算においてそれらが利用されることが可能であるように、必要とされる個数の入力間隔の間、ホールドされる。
【0118】
各入力行の最後の列C-1を処理するときには、列
【数8】
からN-1および行0からM-2からのすべての合成器は、また、入力アレイの最後の列を含むパッチのその行のための最後の計算も表し、それらの値は、遅延段908a、908b、908c、908d、908e、および908fに転送され、以後の入力行が受け取られるときに開口関数の計算を継続する正しい時間で、それらの値が利用可能となるように、特別の処理がシーケンスに挿入されることを要求する。
図11と関連の説明とを参照のこと。
【0119】
この例では、(M-1,N-1)位置における合成器903cは、常に、M×Nのサブ関数要素の完了した累積を生成するが、さもなければその構成903cの他の合成器からは区別不可能である。上述したように、各入力行の最後の列C-1を処理するときには、列
【数9】
からN-1および行M-1からのすべての合成器は、また開口関数要素の完了したが切り捨てられている累積を表し、出力ストリームに挿入されるための処理のために、最終化関数911に直接に送られる。
【0120】
この例では、入力の最後の行R-1を処理している間、行
【数10】
からM-1までの列N-1における合成器は、また、サブ関数要素の計算の完了したが切り捨てられた累積を表し、切り捨てられた出力遅延ライン909、910a、および910bに送られて、行M-1からの主たる出力が911において最終化されるまで保持される。
図8Bに示されているような制御信号を用いて、切り捨てられた出力の追加的なM-
【数11】
個の行が、遅延ライン909、910a、および910bから伝送され、911で最終化され、究極的には、任意の要求されるタイミング間隔で、出力ストリームシンク705に提供される。
【0121】
図15は、5×5の畳み込みノードを実装する本発明の一実施形態におけるパイプライン化された動作の特定の場合を図解している図である。
【0122】
ソースチャネル積802とソース制御信号(ここでは図示せず)とが、合成器901、902a、902b、903a、903b、904、905a、905b、906、907a、および907bのそれぞれに利用可能にされている。ソース制御信号は、また、遅延908a、908b、908c、および908dにも接続される。出力チャネル制御およびカウンタは、遅延909、910aに利用可能にされ、ならびに最終化911にも利用可能にされている。演算の順序が変更されない場合、そしてその場合に限り、与えられたクロック周波数にとって回路ルーティングを適切なものにするために、追加的なパイプライン段が、手動でまたは自動化されたツールによって、挿入されることがあり得る。タイミング制御およびカウンタ信号は、回路のすべての要素にとって利用可能であり、個々には示されていない。
【0123】
ソースチャネル積の各セットが順に与えられると、各合成器は、開口関数における位置に対応するサブ関数を計算するために、適切な積を選択する。入力アレイにおける現在の位置と交差する各5×5のパッチは、その位置の積に基づき、計算を含むように補正される。正味の効果は、パッチに対するすべての演算が完了する各時点まで、入力の単一のソースストリームが合成器の間で渡される部分計算の5×5のストリームの並列なセットに変換されるということであり、これは、通常は合成器(4,4)で生じ、入力アレイの右側または下方のエッジを処理するときには、他の合成器で時々生じる。
【0124】
入力アレイの幅だけが遅延要素のサイズに影響するということに注意してほしいが、この理由は、それぞれが、1つの列の入力と次の行での同じ列における入力とを受け取ることに対応するソース入力間隔の個数に対する部分的な結果を遅延させなければならないからである。
【0125】
図16は、本発明のICの4×4の実施形態を図解している。カーネルは1つの行もしくは列に奇数個のサブ関数をまたは偶数個のサブ関数を有し得る、ということが知られている。出力処理の追加のラインが除外されているため、
図9Cの一般的な場合に示され、そして
図15に5×5の開口関数(行および列が奇数個)という特定の場合について示されている要素910*は、まったく生じないという意味で、この偶数個のバージョンは縮退である。
【0126】
カーネルの奇数サイズは、両方の方向について中心の周囲で対称であるが、偶数サイズの場合には、中心がオフセットしている。本発明の実装形態におけるICは、偶数サイズに対しては、中心を、
【数12】
というように本来の分割よりも右側dで下方向に、置いている。本発明の代替の実施形態では、本来の分割よりも中心を上方向かつ左側に位置決めするように回路が修正されることがあり得る。
【0127】
これらのコメント以外では、
図16の特定のICの動作は、説明されている他のバージョンに対して説明されている通りである。
【0128】
図10Aは、本発明の一実施形態における
図9Aおよび
図9Bまたは
図15の合成器905a、905b、および905cの内部構造および動作を図解している図である。チャネルセットにおけるストリーム値のソース入力セット1001は、開口関数の要求に応じて、単一またはデータタイプの混合であるが、回路1004による個々の合成器の寄与を計算するのに用いられる。
【0129】
回路1005は、1004の出力を利用し、サブ関数の初期値を計算する。回路1006は、1004の出力とすぐ左の合成器によって先に計算された部分的な値1002とを利用し、サブ関数の進行中の部分的な値を計算する。回路1007は、1004の出力とすぐ上の合成器の行にある908a、908b、908c、908d、908e、および908fのうちの1つからの先に計算され遅延された部分的な値1003とを利用し、サブ関数の進行中の部分的な値を計算する。
【0130】
回路1005、1006、および1007の演算は、共有されたそれらの出力を用いて、回路1004の演算と同時に生じ得る(同じクロックサイクル)か、または同じクロックによって同期化された一連のパイプライン段によって実装され得る。
【0131】
マルチプレクサ1008は、部分的な結果のどのバリアントが合成器1009の出力としてのサブ関数の部分的な値として転送されるのかを選択する。COLFST811がアサートされていない場合には1006の出力が選択され、そうではなくてROWFST808がアサートされていない場合には1007の出力が選択され、それ以外の場合には、1005の出力が選択される。
【0132】
この条件付きの処理は、R×Cのアレイの値のセットを表しているソース入力ストリームのエッジを超えてM×Nの開口関数が延長することを可能にすることの、自然な結果である。最も左側のエッジまたは最も上方のエッジにおける単一の位置は、これらのエッジと接触するまたは重なるいくつかのパッチに対する開口関数の最初の計算可能な要素となる。よって、重なっているパッチの最初の計算可能な位置における各合成器およびどの合成器も、開口関数のベース値を用いて初期化されることが要求される。さらに、そのパッチの以後の行の最初の計算可能な位置における各合成器およびどの合成器も、直前の行からの計算された同じパッチの部分的な値の先行する値と組み合わせられなければならない。このようにして、最も上方および最も左側のエッジと重なる、接触する、およびそれらの内部にあるすべてのパッチの正しい計算が、単一の回路を用いて保証される。
【0133】
【0134】
図10Bは、本発明の一実施形態における
図9Aおよび
図9Bまたは
図15の合成器902a、902b、および902cの内部構造および動作を図解している図である。ストリーム値のソース入力セット1001は、開口関数への合成器の寄与を計算するために、回路1004によって用いられる。
【0135】
回路1005は、1004の出力を利用し、サブ関数の初期値を計算し、回路1006は、1004の出力とすぐ左の合成器によって先に計算された部分的な値1002とを利用し、サブ関数の進行中の部分的な値を計算する。
【0136】
マルチプレクサ1010は、部分的な結果のどのバリアントが合成器1009の出力としてのサブ関数の部分的な値として転送されるのかを選択する。COLFST811がアサートされていない場合には1006の出力が選択され、それ以外の場合には、1005の出力が選択される。
【0137】
図10Cは、本発明の一実施形態における
図9Aまたは
図15の合成器904の内部構造および動作を図解している図である。ストリーム値のソース入力セット1001は、個々の合成器の寄与を計算するために、回路1004によって用いられる。
【0138】
回路1005は、1004の出力を利用し、サブ関数の初期値を計算し、回路1007は、1004の出力とすぐ上の合成器の行にある908a、908b、908c、908d、908e、および908fのうちの1つからの先に計算され遅延された部分的な値1003とを利用し、サブ関数の進行中の部分的な値を計算する。
【0139】
マルチプレクサ1011は、部分的な結果のどのバリアントが合成器1009の出力としてのサブ関数の部分的な値として転送されるのかを選択する。ROWFST808がアサートされていない場合には1007の出力が選択され、それ以外の場合には、1005の出力が選択される。
【0140】
図10Dは、本発明の一実施形態における
図9Aまたは
図15の合成器901の内部構造および動作を図解している図である。ストリーム値のソース入力セット1001は、個々の合成器の寄与を計算するために、回路1004によって用いられる。
【0141】
回路1005は、1004の出力を用いてサブ関数の初期値を計算し、それが、合成器1009の出力としてのサブ関数の部分的な値として、転送される。
【0142】
セル901(
図9A、
図15)は、用いられる場合には、どの完全なまたは切り捨てられたパッチにおいても常に最初の値であり、よって、そのパッチに対する初期化値を常に生成する。
【0143】
図10Eは、本発明の一実施形態における
図9Bおよび
図9Cまたは
図15の合成器903a、903b、および903cの内部構造および動作を図解している図である。ストリーム値のソース入力セット1001は、個々の合成器の寄与を計算するために、回路1004によって用いられる。
【0144】
回路1006は、回路1004の出力と左側に隣接する合成器によって先に計算された部分的な値1002とを用いて、サブ関数の進行中の部分的な値を計算し、これは、合成器1009の出力としてのサブ関数の部分的な値として転送される。
【0145】
図10Fは、本発明の一実施形態における
図9Aおよび
図9Bまたは
図15の合成器907a、907b、および907cの内部構造および動作を図解している図である。ストリーム値のソース入力セット1001は、個々の合成器1004の寄与を計算するために用いられる。
【0146】
回路1006は、回路1004の出力と左側に隣接する合成器によって先に計算された部分的な値1002とを用いて、サブ関数の進行中の部分的な値を計算する。回路1007は、1004の出力と上方に隣接する合成器の行における908a、908b、908c、908d、908e、および908fのうちの1つからの先に計算され遅延された部分的な値1003とを用いて、サブ関数の進行中の部分的な値を計算する。
【0147】
マルチプレクサ1012は、部分的な結果のどのバリアントが合成器1009の出力としてのサブ関数の部分的な値として転送されるのかを選択する。COLFST811がアサートされていない場合には1006の出力が選択され、それ以外の場合には、1007の出力が選択される。
【0148】
図10Gは、本発明の一実施形態における
図9Aまたは
図15の合成器906の内部構造および動作を図解している図である。ストリーム値のソース入力セット1001は、個々の合成器の寄与を計算するために、回路1004によって用いられる。
【0149】
回路1007は、1004の出力とすぐ上の合成器の行における908a、908b、908c、908d、908e、および908fのうちの1つからの先に計算され遅延された部分的な値1003とを利用し、サブ関数の進行中の部分的な値を計算する。回路1007の出力は、合成器1009の出力としてのサブ関数の部分的な値として、転送される。
【0150】
図11は、内部行遅延ライン908a、908b、908c、908d、908e、および908f(
図9C)の内部構造および動作を図解している図である。遅延ラインは、次の行において用いられるために合成器の各行からの部分的に計算された結果を、保持するのに用いられる。
【0151】
COLLSTがアサートされたとき、ソース入力ストリームの現在位置は、最も右側のエッジにあり、行
【数13】
(1101)からN-2(1102)の合成器の出力は、それぞれレジスタ1104から1105によって将来の参照のために、保持される。
【0152】
ソース入力ストリームの現在位置、colSrc、が
【数14】
よりも小さい場合には、マルチプレクサ1106は、インデクス計算(N-2)-colSrcによって定義される右から左への逆の順序で、保持された値から選択し、それ以外の場合には、行mの最後の合成器(1103)から現在値を選択する。
【0153】
ソース入力ストリームの列位置が
【数15】
より小さいときは、行の最も右側の合成器は有効データを含まないことになり、これにより、これらの時間スロットは保持されたデータを挿入するために利用可能にされることに注意してほしい。
【0154】
マルチプレクサ1106によって選択された部分的な出力は、C-N位置を有する先入れ先出し(FIFO)回路1107に供給されるが、ソース入力ストリーム位置は、厳密に1つの値が挿入されるように処理され、1つの値は挿入されたのと同じ順序で取り出されるというように、この回路は設定されている。ある位置からの部分的に完了した結果は、ソース入力ストリームが次の行における同じパッチ位置に戻るまで要求されないから、これは、ある行によって計算された部分的な結果が正確に必要とされるときに次の行に与えられるというように、遅延をもたらす。
【0155】
マルチプレクサ1106によって選択された部分的な出力は、また、同じ値(1114)を、最終的な結果の遅延ライン909、910a、および910bの中に与える。
【0156】
FIFO1107から取り出された部分的な出力は、1108において、次の行における最も左側の合成器(1111)と一連の並列アクセスレジスタ1109から1110との両方にルーティングされるが、一連の並列アクセスレジスタ1109から1110は、データがこのレジスタチェーンを通過される際に、1つのソース入力ストリーム間隔だけ部分的な出力をさらに遅延させる。
【0157】
ソース入力ストリームの現在位置が最も左側のエッジにあるときには、FIFOは、1108において出力データを方向付け、遅延された結果1109から1110は、それぞれ1111、1112から1113において、次の行のセルに利用可能にされる。
【0158】
ソース入力アレイストリーム位置が右側のエッジに近いときには、マルチプレクサ1106によってFIFO1107に挿入されたソース入力アレイストリームの右側からの追加の値はパス1111を介してのみアクセスされ、一方、ソース入力アレイストリームが通常のようにパス1103から挿入されたデータにアクセスするために最も左側の位置にあるときには、追加的な並列パス1112から1113だけが用いられる、ということに注意してほしい。右側エッジの処理と左側エッジの処理との間の構造および要件に関する明らかな類似性は、ソース入力ストリームアレイの右および左のエッジとのサブ関数の重なりの対称性の自然な結果である。Nについての値が偶数であるときには、右および左のエッジをサポートするために処理される追加のセルの個数は、同じではない。
【0159】
図12は、最終的な切り捨てられた結果の遅延ライン909(
図9C)の内部構造および動作を図解している図である。
【0160】
ソース入力ストリームアレイの最後の行を処理するときには、内部の行遅延ライン908dの補助出力1201からの部分的な結果が、切り捨てられたパッチの最終行の最終結果であると考えられ、要素の個数Cがソース入力ストリームアレイの幅と等しいFIFO1202に保持される。
【0161】
切り捨てられたパッチの最終結果を記録した直後に、FIFO1202の出力は、1203を介してさらなる遅延ライン910aへ伝送されるか、またはMの値がいかなる他の遅延ラインも介入しないようなものである場合には、最終処理911へ直接に伝送される。
【0162】
図13は、最終的な切り捨てられた結果の遅延ライン910aおよび910bの内部構造および動作を図解している図である。
【0163】
ソース入力ストリームアレイの最後の行を処理するときには、内部の行遅延ライン908eから908fの補助出力からの部分的な結果1301が、切り捨てられたパッチの最終行の最終結果であると考えられ、要素の個数Cがソース入力ストリームアレイの幅と等しいFIFO1304に保持される。
【0164】
POSTENがアサートされるときには、マルチプレクサ1303は、1302からの値を取り込むことから、上の行の最終的な切り捨てられた遅延ラインからの値を取り込むことに切り換えるが、これは、すべての先行する出力結果の順序付けと適合する、行が最初の順序で最終的な切り捨てられた結果を与える、という効果を有する。
【0165】
POSTENが最初にアサートされる入力フレームのサイクルの間は、FIFO1202および1304の内容は、ソース入力ストリームアレイの最後の行と重なる切り捨てられたパッチの最終値である、ということに注意してほしい。そのサイクルの前には、FIFO1202および1304に含まれているいかなるデータも処理されないため、ソース入力ストリームアレイの最終行を処理しないという実行のいかなる抑制も、任意選択である。
【0166】
切り捨てられたパッチの最終結果を記録した直後に、FIFO1304の出力は、1305を介してさらなる遅延ラインへ伝送されるか、またはMの値がいかなる他の遅延ラインも介入しないようなものである場合には、最終処理911へ直接に伝送される。
【0167】
図14は、すべての完全なおよび切り捨てられた結果の最終処理の内部構造および動作を図解している図である。
【0168】
図11におけるように、そして同一の構成および機能を用いて、ソース入力ストリームの現在位置が最も右側のエッジにある場合には、
【数16】
(1101)からN-2(1102)までの行M-1のセルの出力は、それぞれレジスタ1104から1105によって将来の参照のために、保持される。
【0169】
ソース入力ストリームの現在位置が
【数17】
より小さい場合には、マルチプレクサ1106は、右から左への逆の順序で保持されている値から選択し、そうでない場合には、行M-1の最後の合成器(1103)から現在値を選択する。
【0170】
ソース入力ストリームアレイを処理する間に、マルチプレクサ1402は、マルチプレクサ1106によって選択された結果を、直接最終化(1403)に供給する。切り捨てられた結果の後処理フェーズの出力におけるときに、最終化(1403)の代わりに、遅延ライン1401が選択される。
【0171】
最終化回路1403は、いかなるものでもある場合には、すべての追加的な計算を行い、合成されたパッチ結果からの出力ストリーム(1404)の最終的な形式を生成する。これは、典型的には、正規化線形活性化(Rectified Linear Activation)(RELU)関数の形式を取り得、それにより、負の値はゼロに設定され、限度を超えた値は最大の受入可能な値に設定され、またはsigmoidやtanhなど、任意の他の望ましい条件付け関数という形式を取り得る。後処理関数は、単一のソース入力ストリームサイクル以内に完了することは要求されないが、ソース入力ストリームアレイの速度で各最終結果を受け入れることが要求される。
【0172】
DSTENがアサートされるときに、最終化回路1403は、目的出力ストリームの1つの値として、最終結果を与える。DSTENがアサートされていないいかなるときも、最終化回路1403によって生成されたいかなる部分的なまたは不正確な値も無視されるから、結果が用いられないときのいかなる動作抑制も任意選択である。
【0173】
ある実装形態では、目的出力ストリームアレイは、上述したものと類似の回路によって処理される。その場合には、最終的な切り捨てられた結果のタイミングがすべての先行の最終結果と同一であるのが有利である。その目的のため、FIFO1202および1304の制御は、制御回路702によって、主たる出力速度と同一の出力速度を維持するように、調整される。
【0174】
他の実装形態では、目的出力ストリームアレイは、システムの最終段であり、さらなる処理は要求されない。その場合には、最終的な切り捨てられた結果のタイミングが可能な限り迅速に完了されるのが有利である。その目的のため、FIFO1202および1304の制御は、制御回路702によって、サポートされる最大の周波数でそれらの結果を出力するように、調整される。
【0175】
上述された実装は入力要素のフルセットから単一の出力要素を生成する、ということに注意してほしい。入力セットから出力要素の大規模なセットを生成する完全なシステムでは、説明されている機構の全体が、出力チャネルによって共有され得る制御回路702を顕著な例外として、すべての出力チャネルのために一度複製されるが、その理由は、すべての個々のサブ関数のタイミングは全体の出力セットに対して同一であるからである。
【0176】
発明者は、本発明の詳細および特徴を試験し確認するために、本発明の一実施形態におけるICの作業用プロトタイプを構築し、このプロトタイプの動作は、上述した説明を確認する。また、発明者は、ソフトウェアによってサポートされるシミュレータを開発しており、このシミュレータは、本出願の出願時点まで、以上の詳細および説明を試験し確認するために、用いられてきた。
【0177】
本発明の別の態様では、医療用撮像において一般的に与えられる3次元データの入力ストリームを受け入れるためのシステムが提供され、この場合には、3次元の開口関数が、最初および最後の平面に対する内部とエッジとの両方の場合を正しく実装する対応の計算を用いて、3次元入力アレイ上を通過することを可能にするように、追加的な回路およびバッファリングが含まれている。
【0178】
本発明のさらに別の態様では、深層ニューラルネットワーク(DNN)を訓練する複雑なプロセスのために、ハードウェアによって支援されたニューラルネットワーク訓練システムが提供されるが、このシステムでは、前向き推論エンジンによる大量の努力が投入されてネットワーク全体のために重みとバイアスとを周期的に調整してモデルを所望の状態に収束させるために、訓練アルゴリズムは、単に、前向き推論から集められた統計を用いることだけが必要である。前向き推論プロセスが計算される際に入力状態を加算する適切なアキュムレータの追加により、本発明は、ハードウェアによって支援されたニューラルネットワーク訓練システムを形成する。
【0179】
本発明のさらに別の態様では、浮動小数点の精度の限界がDNNモデルの収束を妨害するという広く知られた問題(当該技術では、「勾配消失問題」として知られている)に関し、ビット幅の精度が限定されている単一の大規模乗算器が提供され、これが、任意に大きな精度の浮動小数点の積を生成するために、追加的な加算器とカスケード接続され得る。この技術革新は、前向き推論の計算のために一般的に要求されることはないが、計算された勾配が測定するにはあまりに小さくなるときに生じる問題を回避することは、DNNトレーナにおいて極めて重要である。
【0180】
図面において図解され上述された実施形態はすべて例示的であり、本発明が取り得るすべての形態の詳細を尽くすものではないということを、当業者であれば、理解するだろう。本発明の範囲内で実現され得る様々な他の形態があり得る。
【0181】
本発明は、特許請求の範囲によってのみ限定される。
【国際調査報告】