(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-21
(45)【発行日】2022-11-30
(54)【発明の名称】深層学習処理装置、方法、デバイス及び記憶媒体
(51)【国際特許分類】
G06N 3/04 20060101AFI20221122BHJP
G06F 15/80 20060101ALI20221122BHJP
G06F 17/10 20060101ALI20221122BHJP
G06F 17/16 20060101ALI20221122BHJP
【FI】
G06N3/04
G06F15/80
G06F17/10 A
G06F17/16 C
【外国語出願】
(21)【出願番号】P 2020159513
(22)【出願日】2020-09-24
【審査請求日】2021-06-04
(31)【優先権主張番号】202010080940.1
(32)【優先日】2020-02-05
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】514322098
【氏名又は名称】ベイジン バイドゥ ネットコム サイエンス テクノロジー カンパニー リミテッド
【氏名又は名称原語表記】Beijing Baidu Netcom Science Technology Co., Ltd.
【住所又は居所原語表記】2/F Baidu Campus, No.10, Shangdi 10th Street, Haidian District, Beijing 100085, China
(74)【代理人】
【識別番号】110000914
【氏名又は名称】弁理士法人WisePlus
(73)【特許権者】
【識別番号】521457387
【氏名又は名称】クンルンシン テクノロジー (ベイジン) カンパニー リミテッド
【氏名又は名称原語表記】Kunlunxin Technology (Beijing) Company Limited
【住所又は居所原語表記】CW Section, F/4, Building 1, No.10, Shangdi 10th Street, Haidian District, 100101, Beijing, China
(72)【発明者】
【氏名】ゴン, シャオヂャン
(72)【発明者】
【氏名】オウヤン, ジェン
(72)【発明者】
【氏名】ワン, ジン
(72)【発明者】
【氏名】チー, ウェイ
【審査官】山本 俊介
(56)【参考文献】
【文献】特開2018-005420(JP,A)
【文献】特開2018-005369(JP,A)
【文献】国際公開第2018/131409(WO,A1)
【文献】欧州特許出願公開第03451241(EP,A1)
【文献】特開2020-013412(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
G06F 15/80
G06F 17/10
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
深層学習処理装置であって、
畳込みニューラルネットワーク(CNN)における畳込み層の畳込みカーネルパラメータ値行列と第1の誤差勾配値行列との行列積和演算を実行して、複数の中間行列を得るように構成される、少なくとも一つの行列積和演算モジュールと、
前記複数の中間行列の要素を再整形することなく、前記複数の中間行列を記憶するように構成される、記憶モジュールと、
前記記憶モジュールから前記複数の中間行列を読み出し、前記畳込み層の畳込みスキームに従って並行して前記複数の中間行列に基づく行列累加演算を実行して、前記畳込み層に関する第2の誤差勾配値行列を得るように構成される、複数の行列累加演算モジュールと、を備え
、
前記複数の行列累加演算モジュールのうちの少なくとも一つは、
累加される行列における第1の要素と第2の要素とを入力として、前記第1の要素と前記第2の要素とを累加して累加要素を得るように構成される、累加部と、
前記累加要素を前記記憶モジュールに書き込むように構成される、データ書込部と、
前記累加要素をキャッシュするように構成される第1のキャッシュ領域であって、前記記憶モジュールによりも書き込み速度が速くなり、前記累加要素は、前記第1のキャッシュ領域において複数のクロックサイクルキャッシュされる、第1のキャッシュ領域と、
前記累加部による第3の要素と前記累加要素との累加の実行時、前記記憶モジュールから前記累加要素を読み出すことができないと決定したことに応じて、前記第1のキャッシュ領域にキャッシュされた前記累加要素を前記累加部に供給するバイパスモジュールと、
を備える、深層学習処理装置。
【請求項2】
前記複数の中間行列は、前記畳込み層の入力の複数のチャネルに関連付けられており、前記第2の誤差勾配値行列は、前記複数のチャネルに対応する複数のチャネル行列を有し、
前記複数の行列累加演算モジュールのそれぞれは、
前記複数のチャネルに対応する複数の並行経路のうちの1つにおいて、前記複数の中間行列のうちの、前記複数のチャネルのうちの1つのチャネルに関連する中間行列を累加して、該チャネルに対応する前記チャネル行列を得る、或いは、
毎回の累加時、前記複数の中間行列のうちの1つの中間行列を、前記複数のチャネル行列のうちの1つのチャネル行列についての中間結果に累加する、ように構成される、
請求項1に記載の深層学習処理装置。
【請求項3】
前記記憶モジュールは、前記第2の誤差勾配値行列を目標記憶位置に記憶するように配置され、前記第2の誤差勾配値行列は、前記行列累加演算の実行前にすべてゼロの初期値を持ち、
前記複数の行列累加演算モジュールは、並行して、前記複数の中間行列と前記目標記憶位置に記憶された前記初期値を持つ前記第2の誤差勾配値行列とを累加するように構成されている、
請求項1に記載の深層学習処理装置。
【請求項4】
前記記憶モジュールは、オンチップのランダムアクセスメモリを備える、
請求項1記載の深層学習処理装置。
【請求項5】
前記少なくとも一つの行列積和演算モジュールによる前記行列積和演算において生成された第1の中間演算結果をキャッシュするとともに、前記複数の行列累加演算モジュールによる前記行列累加演算において生成された第2の中間演算結果をキャッシュするように構成される、第2のキャッシュ領域を更に備える、請求項1に記載の深層学習処理装置。
【請求項6】
ベクトル演算モジュールをさらに備え、
前記ベクトル演算モジュールは、
ベクトルレベルの上で、前記第2のキャッシュ領域における前記第1の中間演算結果及び前記第2の中間演算結果を記憶するための記憶領域をゼロ化する処理と、
ベクトルレベルの上で、前記第2の誤差勾配値行列の少なくとも一部として、前記行列累加演算による最終演算結果を、選択的に記憶モジュールに書き込む処理と、
の少なくとも一つの処理を実行するように構成される、
請求項
5に記載の深層学習処理装置。
【請求項7】
汎用処理装置から、前記CNNの前記畳込み層による畳込み
逆演算に利用される指令セットを取得し、前記指令セットを解析するように構成される指令処理モジュールと、
解析された前記指令セットに基づいて、前記少なくとも1つの行列積和演算モジュール及び前記行列累加演算モジュールに対する制御信号を生成するように構成される制御信号生成モジュールと、
をさらに備える、請求項1乃至
6のいずれか1項に記載の深層学習処理装置。
【請求項8】
前記少なくとも1つの行列積和演算モジュールは、前記行列積和演算を並行して実行する複数の行列積和演算モジュールである、
請求項1乃至
6のいずれか1項に記載の深層学習処理装置。
【請求項9】
深層学習用処理を実行する方法であって、
深層学習用処理装置の少なくとも1つの行列積和演算モジュールが、畳込みニューラルネットワーク(CNN)における畳込み層の畳込みカーネルパラメータ値行列と第1の誤差勾配値行列との行列積和演算を実行して、複数の中間行列を得るステップと、
前記複数の中間行列の要素を再整形することなく、前記複数の中間行列を記憶するステップと、
記憶モジュールから前記複数の中間行列を読み出すステップと、
深層学習用処理装置の複数の行列累加演算モジュールが、前記畳込み層の畳込みスキームに従って並行して前記複数の中間行列に基づく行列累加演算を実行して、前記畳込み層に関する第2の誤差勾配値行列を得るステップと、を含
み、
深層学習用処理装置の複数の行列累加演算モジュールが、前記畳込み層の畳込みスキームに従って並行して前記複数の中間行列に基づく行列累加演算を実行して、前記畳込み層に関する第2の誤差勾配値行列を得るステップは、
深層学習用処理装置の複数の行列累加演算モジュールが、
累加される行列における第1の要素と第2の要素とを累加して累加要素を得ることと、
前記累加要素を前記記憶モジュールに書き込むことと、
前記累加要素を第1のキャッシュ領域にキャッシュすることであって、前記第1のキャッシュ領域は、前記記憶モジュールによりも書き込み速度が速くなり、前記累加要素は、前記第1のキャッシュ領域において複数のクロックサイクルキャッシュされる、ことと、
第3の要素と前記累加要素との累加の実行時、前記記憶モジュールから前記累加要素を読み出すことができないと決定したことに応じて、前記第1のキャッシュ領域にキャッシュされた前記累加要素を前記第3の要素の累加のために供給することと、
を実行することを含む、方法。
【請求項10】
前記複数の中間行列は、前記畳込み層の入力の複数のチャネルに関連付けられており、前記第2の誤差勾配値行列は、前記複数のチャネルに対応する複数のチャネル行列を有し、
深層学習用処理装置の複数の行列累加演算モジュールが、前記畳込み層の畳込みスキームに従って並行して前記複数の中間行列に基づく行列累加演算を実行して、前記畳込み層に関する第2の誤差勾配値行列を得るステップは、
前記複数の行列累加演算モジュールのそれぞれは、前記複数のチャネルに対応する複数の並行経路のうちの1つにおいて、前記複数の中間行列のうちの、前記複数のチャネルのうちの1つのチャネルに関連する中間行列を累加して、該チャネルに対応する前記チャネル行列を得ること、または、
前記複数の行列累加演算モジュールのそれぞれは、毎回の累加時、前記複数の中間行列のうちの1つの中間行列を、前記複数のチャネル行列のうちの1つのチャネル行列についての中間結果に累加すること、
のうちの少なくとも1つを含む、
請求項
9に記載の方法。
【請求項11】
前記少なくとも一つの行列積和演算モジュールによる前記行列積和演算において生成された第1の中間演算結果をキャッシュするとともに、前記複数の行列累加演算モジュールによる前記行列累加演算において生成された第2の中間演算結果を
第2のキャッシュ領域にキャッシュするステップを更に含む、請求項
9に記載の方法。
【請求項12】
前記深層学習用処理装置が、
ベクトルレベルの上で、前記第2のキャッシュ領域における前記第1の中間演算結果及び前記第2の中間演算結果を記憶するための記憶領域をゼロ化する処理と、
ベクトルレベルの上で、前記第2の誤差勾配値行列の少なくとも一部として、前記行列累加演算による最終演算結果を、選択的に記憶モジュールに書き込む処理と、の少なくとも一つの処理を実行する、ことを含む、請求項
11に記載の方法。
【請求項13】
汎用処理装置から、前記CNNの前記畳込み層による畳込み
逆演算に利用される指令セットを取得し、前記指令セットを解析するステップと、
解析された前記指令セットに基づいて、前記少なくとも1つの行列積和演算モジュール及び前記行列累加演算モジュールに対する制御信号を生成するステップと、
をさらに含む、請求項
9乃至
12のいずれか一項に記載の方法。
【請求項14】
前記少なくとも1つの行列積和演算モジュールは、複数の行列積和演算モジュールである、
前記少なくとも1つの行列積和演算モジュールが、前記行列積和演算を実行させるステップは、
前記複数の行列積和演算モジュールが、前記行列積和演算を並行して実行することを含む、
請求項
9乃至
12のいずれか一項に記載の方法。
【請求項15】
電子デバイスであって、
少なくとも1つの請求項1乃至
8のいずれか1項に記載の深層学習処理装置と、
少なくとも1つの前記深層学習処理装置とカップリングされ、前記畳込みニューラルネットワークCNNのトレーニングを実行するための指令を前記深層学習処理装置に提供する汎用処理装置と、
を備える、電子デバイス。
【請求項16】
コンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記コンピュータプログラムがプロセッサにより実行されると、請求項
9~
14のいずれか1項に記載の方法を実現させるコンピュータ読み取り可能な記録媒体。
【請求項17】
プロセッサにより実行されると、請求項
9~
14のいずれか1項に記載の方法を実現させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の実施例は、概にデータ処理分野に関し、特に人工知能分野に関する。
【背景技術】
【0002】
深層学習は、人工ニューラルネットワークの研究方向の一つである。近年の人工知能分野のハードウェア及びソフトウェアがますます進歩するに伴い、深層学習技術は、飛躍的に発展している。深層学習技術は、例えば、コンピュータ視覚、自然言語処理、音声分析などの様々な分野に活用することができる。畳込みニューラルネットワーク(CNN)は、深層学習技術において影響力のあるネットワークモデルであり、特に画像及びテキストデータに関するアプリケーションに適する。畳込みニューラルネットワークに関する演算は、主に、畳込み(Convolution)演算、全結合(FC)演算、プーリング(Pooling)演算、ベクトル演算、アクティベーション演算等を含み、そのうち最も主要なのは、畳込み演算である。CNNのトレーニングにおいて、モデル最適化のために、トレーニングデータを利用して、順伝播(Forward Propagation)演算に加え、逆伝播(Backward Propagation)も実行することにより、モデルのパラメータ最適化を実現する。
【0003】
CNNのトレーニングにおいて、畳込み層における大量の畳込み演算と畳込み逆演算とが実行される。いくつかのCNNアーキテクチャでは、畳込み演算と畳込み逆演算は、アーキテクチャ演算全体の大部の計算リソースと時間を占める可能性がある。深層学習処理部は、深層学習演算の実行、又は、深層学習用ネットワークのトレーニングに利用される。深層学習処理部は、畳込み演算および/または畳込み逆演算をより高速でかつ効率的に処理することが期待される。これは、深層学習ネットワーク全体、特にCNNのトレーニングの高速化に寄与する。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本開示の実施例によれば、深層学習処理を実行するための方案が提供される。
【課題を解決するための手段】
【0005】
本開示の第1の態様によれば、深層学習処理装置であって、畳込みニューラルネットワーク(CNN)における畳込み層の畳込みカーネルパラメータ値行列と第1の誤差勾配値行列との行列積和演算を実行して、複数の中間行列を得るように構成される、少なくとも一つの行列積和演算モジュールと、前記複数の中間行列の要素を再整形することなく、前記複数の中間行列を記憶するように構成される、記憶モジュールと、前記記憶モジュールから前記複数の中間行列を読み出し、前記畳込み層の畳込みスキームに従って並行して前記複数の中間行列に基づく行列累加演算を実行して、前記畳込み層に関する第2の誤差勾配値行列を得るように構成される、複数の行列累加演算モジュールと、を備える、深層学習処理装置を提供する。
【0006】
本開示の第2の態様によれば、深層学習用処理を実行する方法であって、深層学習用処理装置の少なくとも1つの行列積和演算モジュールが、畳込みニューラルネットワーク(CNN)における畳込み層の畳込みカーネルパラメータ値行列と第1の誤差勾配値行列との行列積和演算を実行して、複数の中間行列を得るステップと、前記複数の中間行列の要素を再整形することなく、前記複数の中間行列を記憶するステップと、前記記憶モジュールから前記複数の中間行列を読み出すステップと、深層学習用処理装置の複数の行列累加演算モジュールが、前記畳込み層の畳込みスキームに従って並行して前記複数の中間行列に基づく行列累加演算を実行して、前記畳込み層に関する第2の誤差勾配値行列を得るステップと、を含む方法を提供する。
【0007】
本開示の第3の態様によれば、電子デバイスであって、第1の態様に記載の少なくとも1つの深層学習処理装置と、少なくとも1つの前記深層学習処理装置とカップリングされ、前記畳込みニューラルネットワークCNNのトレーニングを実行するための指令を前記深層学習処理装置に提供する汎用処理装置と、を備える、電子デバイスを提供する。
【0008】
本開示の第4態様によれば、コンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体であって、前記コンピュータプログラムがプロセッサにより実行されると、第2の態様に記載の方法を実現させるコンピュータ読み取り可能な記録媒体を提供する。
【0009】
本開示の第5態様によれば、プロセッサにより実行されると、第2態様に記載の方法を実現させるコンピュータプログラムを提供する。
【0010】
なお、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。本発明のさらに他の目的は、後述することより容易に理解されることになる。
【0011】
以下、本発明の実施の形態について図面を参照して詳細に説明するが、本開示の実施形態の上記および他の特徴、利点、および態様がより明らかになるであろう。なお、図中、同一または類似の符号は同一または類似の要素を示している。
【図面の簡単な説明】
【0012】
【
図1】畳込みニューラルネットワーク(CNN)の構成を模式的に示すブロック図である。
【
図2】幾つかの実施例による処理構成を模式的に示すブロック図である。
【
図3A】本開示の幾つかの実施例による深層学習処理装置の構成例を模式的に示すブロック図である。
【
図3B】本開示の他の幾つかの実施例による深層学習処理装置の構成例を模式的に示すブロック図である。
【
図3C】本開示の幾つかの実施例による深層学習処理装置の構成例を模式的に示すブロック図である。
【
図4A】CNNの畳込み層の畳込み演算を示す模式図である。
【
図4B】CNNの畳込み層の畳込み逆演算を示す模式図である。
【
図5】本開示の幾つかの実施例による行列累加演算処理を説明するための図である。
【
図6】本開示の他の幾つかの実施例による行列計算モジュールの構成例を示すブロック図である。
【
図7】本開示の他の幾つかの実施例による行列累加演算モジュールの構成例を示すブロック図である。
【
図8】本開示の例示的な実施例による処理タスクの実行方法を示すフローチャートである。
【
図9】本開示の様々な実施例を実施可能なコンピューティングデバイスのブロック図である。
【発明を実施するための形態】
【0013】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。本開示のいくつかの実施形態を図面に示したが、本開示は、様々な形態で実施されることが可能であり、また、本明細書に示した実施形態に限定して解釈されるべきではない。逆に、これらの実施形態は、本開示をより完全に理解するためのものである。なお、本開示の図面及び実施例は例示的な作用に用いられ、本開示の保護範囲を限定するものではない。
【0014】
本開示の実施例の説明において、用語「含まれる」及びその類似の用語は、開放的な意味、すなわち、「含まれるが限定されない」として解釈すべきである。また、用語「基づき」は、「少なくとも一部に基づき」と解釈されるべきである。また、「一実施例」または「当該実施例」という用語は、「少なくとも1つの実施例」として解釈されるべきものである。なお、「第1」、「第2」等の用語は、異なるオブジェクトであるか、又は同一のオブジェクトであるかを示すために用いられる。また、以下に示すような明確的、又は暗黙的な定義を有する場合もある。
【0015】
上述したように、畳込みニューラルネットワーク(CNN)のトレーニングや推理の時、非常に複雑な動作、特に、畳込み層の畳込み演算や畳込み逆演算などを処理する必要がある。汎用的なプロセッサを用いてCNNのトレーニングや推理を行うなら、非常に処理効率が低い。従来のいくつかの解決手段として、グラフィック処理ユニット(GPU)によって、CNNの処理、特にCNNのトレーニングを実現する。GPUは、計算速度を向上させるために、シングル指令マルチスレッド(SIMT)技術を利用し、多数のスレッドで、スケジューリング及び演算を行うようにする。しかし、GPUは、多くのレジスタスタック、複雑なスレッドスケジューリングメカニズム及び高速なキャッシュ管理を必要とし、消費電力が高くなり、演算の性能が悪い。当該問題点に鑑み、深層学習処理、特にCNNに関する処理を実行するためのより効率的な深層学習処理装置を提供することが希望される。
【0016】
CNNに関する処理を実行する処理装置について説明する前、先にCNNについて簡単に説明する。CNNは、深層学習モデルの1つである。深層学習モデルにおいて、処理に用いられるパラメータセットの値は、トレーニングにより決定される。機械学習モデルは、トレーニングしたパラメータセットを用いて、受信された入力を対応する出力にマッピングする。したがって、機械学習モデルのトレーニング過程は、トレーニングデータから、入力から出力までのマッピングまたは関連関係を学習することと考えられる。
【0017】
CNNは、一般的には入力層、畳込み層、プーリング層、活性化層、全結合層及び出力層を含むことができる。CNNにおける畳込み層、プーリング層、活性化層及び全結合層の数や、接続関係等は、具体的な処理タスクの要求及び設定に応じて変更可能である。
図1は、CNN100の構造の一例を示す図であり、入力層110、畳込み層120、活性化層130、プーリング層140、……、全結合層150及び出力層160を含む。モデルによる処理対象となる入力を、入力層110としてCNN100に供給して、処理する。順方向101の処理では、入力されたデータは、途中の複数の層による処理を経て、最終的に出力層160の出力結果が得られる。
【0018】
CNN100のトレーニングにおいて、トレーニングデータは、順方向101の処理に加え、逆方向102の処理を実行される。逆方向102の処理では、通常、CNN100のパラメータセットの現在値の下で、入力されたトレーニングデータを処理して得られた出力と理想的な出力との誤差を算出し、その誤差を逆方向(すなわち、出力層160から入力層110に向かう方向)に伝播させる。逆伝播において、勾配降下法により、CNN100における各層のパラメータの現在値を調整することができる。複数回のトレーニングを経ると、CNN100の出力と理想的な出力との間の誤差はますます小さくなり、モデルが収束することになるまで、トレーニング処理が完了する。
【0019】
なお、
図1のCNNの構成はただの一例である。実際の適用場面において、必要に応じて、CNNが他のネットワーク構成とされてもよく、より多くのネットワーク層、他の種類のネットワーク層、及び様々な種類のネットワーク層の異なる接続関係を有してもよい。本開示の実施形態は、この点に限定されるものではない。
【0020】
いくつかの実施例において、専用の深層学習プロセッサを用いてCNNのトレーニング関連動作を処理することができる。
図2は、いくつかの実施形態に係る処理用アーキテクチャ200の一例を示す模式図である。一例として、処理用アーキテクチャ200は、汎用処理装置210と、それとカップリングされる深層学習処理装置220とを備える異種アーキテクチャとされる。
【0021】
汎用処理装置210は、例えば、1又は複数の汎用プロセッサ(CPU)コア、1又は複数のデジタルシグナルプロセッサ(DSP)コア等を含むことができる。汎用処理装置210は、例えば、汎用のスカラー処理装置であってもよい。汎用処理装置210は、例えば、Reduced Instruction Set Computer(RISC)タイプの指令などのような一般的なコンピュータ指令を実行することができるとともに、デプス学習処理に関するカスタマイズされた指令の解釈及び実行を行うことができる。汎用処理装置210は、深層学習処理装置220に、深層学習モデルの関連処理を実現するための、深層学習処理に関する指令を提供することができる。
【0022】
深層学習処理装置220(深層学習処理装置、深層学習処理デバイスとも呼ばれる)は、例えば、深層学習演算を実現するためのソフトウェアコンポーネントとハードウェア回路とを含む専用の深層学習コプロセッサであってもよい。深層学習処理装置220は、例えば、フィールドプログラマブルゲートアレイ(FPGA)、専用集積回路(ASIC)等により実現することができる。深層学習処理装置220は、複数のモジュールを有し、深層学習用に定義された関連指令により、複数のモジュールの動作をスケジューリングし、複数のモジュール間でデータのやり取りを行うことができる。深層学習処理装置220におけるモジュールは、実現しようとする深層学習処理タスクに応じて構成してもよい。また、いくつかの実施例において、深層学習処理装置220は、CNNのトレーニングタスクを実行するように構成されていてもよい。これにより、汎用処理装置210は、深層学習処理装置220に対して、CNNのトレーニングを実行するための指令を供給する。
【0023】
上述したように、CNNのトレーニングでは、畳込み層による大量の畳込み演算及び畳込み逆演算が行われるため、かなり計算リソースと時間がかかる。それ故、畳込み演算および畳込み逆演算の面で改善することにより、CNNのトレーニングを大幅に高速化することができる。
【0024】
本開示の実施例によれば、深層学習処理装置が提案される。この深層学習処理装置は、畳込み層による畳込み方向演算を実行することができる。この深層学習処理装置は、畳込みニューラルネットワーク(CNN)における畳込み層の畳込みカーネルパラメータ値行列と第1の誤差勾配値行列との行列積和演算を実行して、複数の中間行列を得るように構成される、一つ又は複数の行列積和演算モジュールを備える。複数の中間行列は、要素の再整形がされず、記憶装置に記憶される。深層学習処理装置は、記憶モジュールから複数の中間行列を読み出し、畳込み層の畳込みスキームに従って並行して複数の中間行列に基づく行列累加演算を実行して、畳込み層に関する第2の誤差勾配値行列を得るように構成される、複数の行列累加演算モジュールをさらに備える。該解決手段によれば、CNNのトレーニングにおいて、行列積和演算及び行列累加演算は特定のモジュールによって実現され、複数の行列累加演算モジュールは、並行して演算を実行することができ、これにより、畳込み逆演算の計算効率を大幅に向上させることができ、計算速度及び消費電力を改善することができる。
【0025】
図3Aは、本開示のいくつかの実施例に係る深層学習処理装置の構成例を示している。この深層学習処理装置は、CNNの畳込み層における行列関連計算を実現する行列計算モジュール301を含む深層学習処理装置220であってもよい。行列計算モジュール301は、1つ又は複数の行列積和演算モジュール310-1、310-N…を含む(ただし、Nは1以上の整数であってもよい)。説明の便宜上、行列積和演算モジュール310-1、…310-Nを、行列積和演算モジュール310と総称する場合もあるし、個別に行列積和演算モジュール310と呼ぶ場合もある。1または複数の行列積和演算モジュール310は、CNNの畳込み層における畳込みカーネルパラメータ値行列と第1の誤差勾配値行列との行列積和演算を実現するように構成される。畳込み層の行列積和演算により、複数の中間行列が得られる。
【0026】
行列計算モジュール301は、複数の行列累加演算モジュール320-1、……320-Mをさらに備える(ただし、Mは2以上の整数であってもよい)。説明の便宜上、行列累加演算モジュール320-1、…320-Mを行列累加演算モジュール320と総称する場合もあるし、個別に行列累加演算モジュール320と呼ぶ場合もある。これらの行列累加演算モジュール320は、畳込み層の畳込みスキームに従って並行して複数の中間行列に基づく行列累加演算を実行して、畳込み層に関する誤差勾配値行列を(「第2の誤差勾配値行列」ともいう)を得るように構成されている。
【0027】
演算動作において、行列積和演算により生成された複数の中間行列は、深層学習処理装置210の記憶モジュール330に記憶される。記憶モジュール330は、例えば、SRAM(Static Random Access Memory)などのオンチップのRAM(Random Access Memory)などのオンチップ記憶装置であってもよい。複数の中間行列が同時に生成されることはないため、行列積和演算モジュール310が対応する中間行列を生成するたびに、該中間行列は記憶モジュール330の対応する記憶位置に記憶される。いくつかの実施例において、行列積和演算モジュール310が複数存在する場合、複数の行列積和演算モジュール310は、並行的に畳込みカーネルパラメータ値行列と第1の誤差勾配値行列との行列積和演算を実行することができる。
【0028】
いくつかの実施例において、行列計算モジュール301は、さらに行列計算モジュール301における各モジュールからの演算指令を受信するように構成される指令解析モジュール340を備えてもよい。このような指令セットは、例えば、CNNの畳込み層の畳込み方向演算動作に用いられる指令セットを含む、カスタマイズされた深層学習指令セットであってもよい。指令解析モジュール340は、例えば、深層学習処理装置220にカップリングされた汎用処理装置210から指令セットを取得することができる。指令解析モジュール340は、指令セットを深層学習処理装置220が実行可能な指令に解析することができる。
【0029】
いくつかの実施例において、行列計算モジュール301は、さらに指令解析及び制御信号生成に関連するモジュールであってもよい。
図3Bに示すように、行列計算モジュール301は、さらに制御信号生成モジュール350を備えてもよい。制御信号生成モジュール350は、解析された指令セットに基づいて少なくとも一つの行列積和演算モジュール310及び複数の行列累加演算モジュール320に対する制御信号を生成し、それにより少なくとも一つの行列積和演算モジュール310及び複数の行列累加演算モジュール320の対応する演算動作を制御する。
図3Bの例では、制御信号生成モジュール350は、解析された指令セットに応じて、少なくとも1つの行列積和演算モジュール310及び複数の行列累加演算モジュール320に対する記憶モジュール330へのデータの読み書きを制御するための制御信号を読み書きするように構成される読み書き制御モジュール352を備える。制御信号生成モジュール350は、さらに、ループ制御モジュール354を備えてもよい。行列積和演算モジュール310により行列積和演算及び/又は行列累加演算モジュール320が行列積算を複数回繰り返す場合、ループ制御モジュール354は、解析された指令セットに基づいて、各行列積和演算モジュール310の行列積和演算及び/又は行列累加演算モジュール320の行列積算を制御するためのループ制御信号を生成する。
【0030】
以上、
図3A~3Bを参照して、深層学習処理装置220における行列計算モジュール301のいくつかの実施例をまとめて説明した。いくつかの実施例において、深層学習処理装置220は、さらに、行列計算モジュール301と共にCNNのトレーニングタスクを実現するために用いられる他のモジュールを備えてもよい。
図3Cは、本開示のいくつかの実施形態に係る深層学習処理装置220の構成例を示している。
図3Cに示すように、深層学習処理装置220は、行列計算モジュール301に加えて、さらに、データ読み書きモジュール302、データ変換モジュール303、ベクトル演算モジュール304、利用可能なプーリングモジュール305及び転置モジュール306を備える。行列計算モジュール301の他に、ベクトル演算モジュール304、利用可能なプーリングモジュール305、及び転置モジュール306は、何れも、記憶モジュール330にアクセスして処理対象のデータを読み出し、処理したデータを記憶モジュール330に書き込むことができる。したがって、記憶モジュール330は、共有記憶モジュール330と呼ばれる場合がある。
【0031】
データ読み書きモジュール302は、深層学習処理装置220の外部の記憶装置/デバイス(オフチップ記憶装置/デバイスともいう)からCNNのトレーニング処理に必要なデータを読み出し、記憶モジュール330に記憶するように構成される。データ変換モジュール303は、変換対象のデータを記憶モジュール330から読み出し、データ内の各要素の再整形(例えば、3次元以上の次元の行列から2次元の行列への変換、ベクトルへの変換)等のフォーマット変換を行う。変換したデータは、記憶モジュール330に再記憶される。
【0032】
行列計算モジュール301は、CNNのトレーニングに係る行列計算を実行するように構成される。ベクトル演算モジュール304は、CNNのトレーニングに係るベクトル演算を実行するように構成されている。プーリングモジュール305は、CNNのプーリング層の関連動作を実行するように構成される。転置モジュール306は、CNNのトレーニングにおけるマトリクス転置動作を実行するように構成されている。いくつかの実施例において、プーリング層の関連動作及び転置動作は、対応する行列計算動作及びベクトル演算動作に変換することができ、それにより、行列計算モジュール301及びベクトル演算モジュール304により実行される。記憶モジュール330は、例えば、SRAM(Static Random Access Memory)等のオンチップのRAM(Random Access Memory)であってもよいし、その他のメモリであってもよい。行列計算モジュール301、ベクトル演算モジュール304、利用可能なプーリングモジュール305及び転置モジュール306は、何れも、記憶モジュール330にアクセスして処理対象のデータを読み出し、処理したデータを記憶モジュール330に書き込むことができる。したがって、記憶モジュール330は、共有記憶モジュール330と呼ばれる場合がある。
【0033】
以下では、CNNの畳込み層による畳込み逆演算における行列計算モジュール301の行列積和演算モジュール310及び行列累加演算モジュール320による具体的な演算を分かり易くするために、
図4を参照しながら、畳込み層の畳込み演算動作及び畳込み逆演算動作について簡単に説明する。
【0034】
図4Aは、畳込み層による畳込み演算動作を示している。畳込み演算は、CNNの順方向演算において行われる。CNNの1つの畳込み層について、前の層からの出力や、CNNの入力層からの出力を当該畳込み層の入力として処理する。畳込み層の入力は、通常、1つまたは複数の特徴マップ410を含み、各特徴マップを2次元マトリクスとして表すことができる。入力特徴マップ410の数は、入力チャネルの数(c個のチャネルと想定する)である。
【0035】
畳込み層は、畳込み操作を実現するために用いられる1つ又は複数の畳込みカーネル420を含む。畳込みカーネル420の数は、CNN内で任意に設定することができる(畳込みカーネルの数を「k」とすると想定する)。畳込みカーネル420のサイズは、c*f
h*f
wとし、ただし、cは、チャネル数を表し、f
h*f
wは、畳込みカーネルの高さと幅を表す。即ち、それぞれの畳込みカーネル420は、c*f
h*f
wの畳込みカーネルパラメータ値行列として表すことができる。トレーニングの順方向処理において、畳込みカーネルパラメータ値行列は、トレーニングの現在段階で決定された値である。畳込み演算動作を実行する際に、各畳込みカーネル420は、畳込み層の入力特徴マップ410において、畳込み演算のスキームに従って移動し、例えば、特徴マップにおいて一定のペースで左から右へ、上から下へ移動することで、得られた要素に対して畳込み演算を実行し、最終的に畳込み層の出力特徴マップを得る。畳込み演算動作は、以下の式(1)により、表される。
【数1】
ただし、O
hは、畳込み層の出力の高さを示し、O
Wは、畳込み層の出力の幅を示し、kは、畳込みカーネルの数を示す。式(1)によると、畳込み層の出力特徴マップのサイズは、k*O
h*O
Wであり、k個の二次元行列O
h*O
Wとして表すことができる。
【0036】
畳込み演算は、毎回、入力特徴マップ410からc*fh*fwの入力サブ行列(入力ウィンドウともいう)が抽出され、入力サブ行列には、k個の畳込みカーネルの各畳込みカーネル420の畳込みカーネルパラメータ値行列(サイズはc*fh*fwとなる)に乗算するための、k個のc*fh*fwの入力要素が含まれる。c*fh*fw個の入力サブ行列とc*fh*fwの畳込みカーネルパラメータ値行列との乗算は、入力要素のうちのc個のfh*fwの2次元行列と畳込みカーネルパラメータ値行列のうちのc個のfh*fwの2次元行列との行列乗算(もちろん、これら2つの3次元のサブ行列を他のサイズの2次元行列に変換してから行列乗算を実行するようにしてもよい)と表すことができる。
【0037】
畳込み演算のスキームとして、畳込みカーネルが入力特徴マップ410においてO
h*O
W個のウィンドウを抽出して畳込み演算を行うことが想定される。
図4Aには、c個の入力特徴マップ410のうちの1つの特徴マップから抽出されたc*f
h*f
wサイズの入力ウィンドウ412と、1つの畳込みカーネル420のc*f
h*f
wサイズの畳込みカーネルパラメータ値行列とに対し、畳込み演算430を実行して、畳込み層の出力特徴マップのうちの1つの出力要素440を求めることが示されている。畳込みカーネル420が複数存在する場合、各畳込みカーネルは、同様の処理を行う。畳込み演算430は、行列積和演算であり、行列要素の乗算、累加に分解することができる。行列計算モジュール301は、行列積和演算モジュール310により畳込み演算を行うことができる。いくつかの実施例において、順方向畳込みにおいて、式(1)に示された畳込み層の畳込み演算を、対応する行列積和演算に分割し、行列積和演算モジュール310により実行するようにしてもよい。例えば、入力特徴マップ410におけるO
h*O
W個の入力サブ行列と畳込みカーネルの畳込みカーネルパラメータ値行列との行列積和演算をO
h次の計算に分解し、一回の計算により、畳込み層の出力特徴マップにおける1*O
W個の出力要素を得ることができる。
【0038】
以上、積層膜の順方向畳込み演算について説明した。畳込み層による畳込み逆演算は、上述した畳込み演算の逆演算である。
図4Bは、畳込み層による畳込み逆演算を示している。逆方向処理では、CNN内の特定の畳込み層について、当該畳込み層の後段(CNNの順方向から見た後段、例え
図1では、畳込み層220の後段が活性化層130である)の誤差勾配値行列(ここでは「第1の誤差勾配値行列」と呼ぶ)を算出する。第1の誤差勾配値行列のサイズは、畳込み層の出力特徴マップのサイズ、即ちk*O
h*O
Wと同じである。畳込み逆演算は、第1の誤差勾配値行列と畳込み層の畳込みカーネルパラメータ値行列とに対し、畳込み逆演算(それは行列要素の乗算、累加に分解されてもよい)を実行して、複数の中間行列を得て、続いて複数の中間行列を、順に、畳込み層の入力特徴マップと対応する位置に重ねることで、現在の畳込み層に対する誤差勾配値行列(ここでは「第2の誤差勾配値行列」と呼ぶ)を得る。畳込み層の畳込みリバース動作は、以下の式(2)で表される。
【数2】
ただし、O
hは、後段の層の第1の誤差勾配値行列の高さを表し、O
Wは、は、誤差勾配値行列の幅を表し、kは、誤差勾配値行列のチャネル数(すなわち、二次元行列O
h*O
Wの数)を表す。式(2)によれば、各畳込みカーネルc*f
h*f
wは、第1の誤差勾配値行列の中の対応する要素と乗算した後、k個のチャネルの誤差勾配値の積を累加する必要がある。
【0039】
畳込み逆演算では、1つの畳込みカーネル420に対して、毎回、第1の誤差勾配値行列から、c*fh*fwの畳込みカーネルパラメータ値行列と畳込み逆演算460を行うための1つの誤差勾配値450を抽出する。k個の畳込みカーネル420について、畳込み逆演算460において、第1の誤差勾配値行列におけるk個のチャネルの誤差勾配と畳込みカーネルパラメータ値行列の積を累加して、中間行列462を得る。畳込み逆演算460は、行列積和演算モジュール310によって実現されてもよい。畳込み逆演算460は、行列積和演算の一種であると考えることもでき、行列要素の乗算、累加に分解することができる。
【0040】
いくつかの実施例において、行列計算モジュール301は、複数の行列積和演算モジュール310を備える場合、畳込みカーネルパラメータ値行列と第1の誤差勾配値行列との行列積和演算を実行する際に、複数の行列積和演算モジュール310は、並行して行列積和演算を実行することができる。[Oh*OW,k]*[k,c*fh*fw]の行列積和演算は、任意のサイズの2次元行列の行列積和演算に分解することができる。
【0041】
行列積和演算を行った後、Oh*OW個のc*fh*fwサイズの中間行列を含む複数の中間行列462を得ることを想定する。これらの中間行列は、畳込み逆演算の最終結果ではなく、畳込み層の畳込みスキームで累加を実行する必要がある。本発明の実施形態では、複数の中間行列の行列累加演算を複数の行列累加演算モジュール320が並行して実行する。具体的には、畳込み層の畳込みスキームは、畳込み層の入力特徴マップにおいて畳込みカーネルが入力ウィンドウを抽出する手法に依存するものであり、畳込みカーネルの移動方式(例えば、左から右、上から下)や、移動ペース(例えば、ウィンドウが1要素ずつ移動するか、または、一回に他の所定数の要素で移動するか)を含む。
【0042】
図5は、複数の中間行列に対する累加演算の様子を示している。
図5の例では、図示の便宜上、チャネル数c=1とする。
図5は、複数の中間行列(f
h*f
wサイズ)を第2の誤差勾配値行列に重ねることを示している。チャネル数が1よりも大きい場合には、チャネル毎に、O
h*O
W個の2次元行列f
h*f
wを重ねてチャネル行列を得ることができる。最後に得られたc個のチャネル行列を第2の誤差勾配値行列とする。
【0043】
図5に示すように、行列積和演算モジュール310により第1の中間行列510が算出されると、第1の中間行列510が初期値を持つ第2の誤差勾配値行列502の一番目の位置(左上の角の位置)に累加される。中間行列510は、3×3個の要素からなる行列であるとすると、初期2次元行列502の左上の3×3個の要素のサブ行列に累加される。行列累加演算モジュール320による行列累加演算処理では、第2の誤差勾配値行列は、初期的には、すべてゼロの値をとり、記憶モジュール330の目標記憶位置に記憶される。行列累加演算モジュール320は、記憶モジュール330の目標記憶位置から第2の誤差勾配値行列502に累加される初期値を読み出し、中間行列510における各要素と第2の誤差勾配値行列502の初期値とを累加する。累加の結果は、記憶モジュール330の目標記憶位置に書き戻される。第2の誤差勾配値行列502の各要素は、記憶モジュール330での記憶位置は不変とされる。
【0044】
第2の中間行列520は行列積和演算モジュール310により算出された場合、それは、行列累加演算モジュール320により第2の誤差勾配値行列の第2の位置に累加される。当該第2の位置は、第1の位置から、右一つの要素(畳込みカーネル420の歩幅を一つの要素と想定する)だけ右にシフトする位置である。中間行列520の一部の要素は、さらに、第2の誤差勾配値行列502において中間行列510に累加された一部の要素の要素と累加される一方、一部の要素は、第2の誤差勾配値行列の初期値(すなわち、ゼロ)と累加される。行列累加演算モジュール320は、記憶モジュール330から、第2の中間行列520に累加される要素を読み出すことができる。
【0045】
第3の中間行列530は行列積和演算モジュール310により算出された場合、同様に、第2の誤差勾配値行列502の対応するサブ行列に累加される。中間行列530の各要素は、対応する位置の累加値または初期値に累加される。Oh*OW個のfh*fwサイズの中間行列を重ね合わせると、その重ね合わせた結果が最終的な第2の誤差勾配値行列となる。
【0046】
本発明の実施例において、上記のように、行列積和演算モジュール310は中間行列を算出した後、中間行列における要素を再整形することなく、中間行列を記憶モジュール330に記憶することができ、即ち、中間行列は、行列積和演算モジュール310により生成された要素配列方式のまま記憶することができ、再整形又は他の表現方式に分割する必要はない。
【0047】
幾つかの実施例において、行列累加演算モジュール320は、一回の行列累加に、1つの中間行列の累加を実行してもよく、複数の行列累加演算モジュール320は、並行して累加を実行してもよい。第2の誤差勾配値行列は、記憶モジュール330の特定の記憶位置に記憶されており、且つ、行列積和演算モジュール310により算出された中間行列は、記憶時に再整形する必要がないことで、行列累加演算モジュール320は、それぞれの中間行列が確定された時に、該中間行列と記憶モジュール330に記憶された第2の誤差勾配値行列の対応する行列要素の現在値を直接累加することができ、各中間行列を順次直列に累加する必要はない(ここでの順序は、畳込みカーネルの畳込みスキーム、即ち、畳込みカーネルの入力特徴マップにおける移動方式及びペースである)。例えば、
図5の例では、第2の中間行列520が先に算出された場合、第1の中間行列510が累加されていなくても、第2の誤差勾配値行列502の対応する位置の初期値の要素に中間行列520が直接重なるようにする。
【0048】
いくつかの実施例において、ループ制御モジュール354は、行列累加演算モジュール320の行列累加演算を制御するように構成され、これにより、複数の行列累加演算モジュール320が第2の誤差勾配値行列における同じ要素位置を同時に累加することを回避することができる。このように並行して行列累加を行うことにより、畳込み逆演算の演算速度をさらに向上させることができ、特に、行列積和演算モジュール310が複数存在し、これらの行列積和演算モジュール310が並行して行列積和演算を行う場合には、一部の行列積和演算モジュール310が中間行列をより高速に出力することが可能となる。
【0049】
いくつかの実施例において、並行した行列累加において、畳込み層の入力が複数のチャネルを有する場合は、第2の誤差勾配値行列が、複数のチャネルに対する複数のチャネル行列(各チャネル行列は、一つの二次元行列であり、例えば、
図5の一つの二次元行列502である)を含むことを意味し、複数の行列累加演算モジュール320は、複数のチャネルで並行して行列累加を実行するように構成されてもよい。複数の行列累加演算モジュール320は、複数のチャネルに対応する複数の並行経路を実現することができ、各並行経路に、行列累加演算を実行する行列累加演算モジュール320が1つ又は複数存在することができる。各並行経路上の行列累加演算モジュール320は、複数の中間行列のうち、複数のチャネルのうちの1つのチャネルに対応付けられた中間行列を累加することにより、当該チャネルのチャネル行列を得るように構成されている。
【0050】
いくつかの実施例において、並行行列累加演算は、中間行列で実現でき、チャネルに分割することはしない。行列累加演算モジュール320は、毎回の累加時、複数のチャネル行列のうちの1つのチャネル行列の中間結果に、複数の中間行列のうちの1つの中間行列を累加するように構成されている。
【0051】
いくつかの実施例において、行列計算モジュール301は、さらにキャッシュ領域(ここでは「第2のキャッシュ領域」と呼ぶこともある)を含むことができる。二つの行列の行列積和演算及び行列累加演算において、多くの中間演算結果が生成され、これらの中間演算結果は、後の演算において再び呼び出される。そのため、モジュール内のキャッシュ領域を設置することで、行列計算モジュール301と記憶モジュール330との間のデータ伝搬を効果的に低減させ、さらに、行列積和演算の演算速度を向上させ、消費電力を低減させる。
図6は、このような実施例を示している。
図6に示すように、行列計算モジュール301は、さらにキャッシュ領域610を含み、キャッシュ領域610は、少なくとも一つの行列積和演算モジュール310による行列積和演算において生成された中間演算結果(「第1の中間演算結果」と称する場合がある)、及び/又は複数の行列累加演算モジュール320による行列積算演算過程において生成された中間演算結果(「第2の中間演算結果」と称する場合がある)をキャッシュする。
【0052】
行列積和演算モジュール310及び行列累加演算モジュール320による行列計算には、さらに、深層学習処理装置220のベクトル演算モジュール304のベクトル演算機能を利用するようにしてもよい。これにより、行列計算モジュール310において、係る機能に起因する複雑度の増加を回避することができる。また、ベクトル演算モジュール304は、
図6に示すように、ベクトルレベルで行列計算モジュール310を補助して、キャッシュ領域610に対するゼロ化、データの読み書きをするように構成されていてもよい。
【0053】
ある実施形態において、ベクトル演算モジュール304は、ベクトルレベルでキャッシュ領域610における行列積和演算モジュール310の中間演算結果及び/又は行列累加演算モジュール320の中間演算結果を記憶するために用いられる記憶領域をゼロにするように構成されてもよい。すなわち、ベクトル演算モジュール304は、中間演算結果に対応する記憶領域を行単位で0にしてもよいし、列単位で0にしてもよい。また、ベクトル演算モジュール304は、各行列累加演算モジュール320による行列累加演算の最終演算結果を、第2の誤差勾配値行列の少なくとも一部としてベクトルレベルで記憶モジュール304に選択的に書き込むように構成されていてもよい。これは、畳込み演算において、充填要素が増加する可能性がある問題を解決するためである。畳込み逆演算では、順方向に追加された充填要素を最終的な誤差勾配値行列の要素としないように削除する必要がある。ベクトル演算モジュール304は、よりよく、行列を行単位または列単位で、ベクトルレベルでフィルタリングすることができる。
【0054】
ベクトル演算モジュール304の処理は、制御信号によって制御することができ、このような制御信号は、カスタマイズされた深層学習に関連する指令セットを解析することによって決定することができる。なお、他の実施例において、ベクトル演算モジュール304の機能によらず、行列計算モジュール301に対応する機能を配置して、キャッシュ領域のゼロ化とデータの選択的な書き込みを実現することができる。
【0055】
いくつかの実施例において、行列累加演算モジュール320は、行列累加演算の実行時に記憶モジュール330を読み書きする必要があり、行列累加演算とデータ読み書きに一定の遅延があるため、「データハザード」の状況が発生する可能性がある。行列累加演算モジュール320は、データの累加を行う際に、複数の要素を順次累加し、累加の結果を記憶モジュール330の同一の記憶位置に記憶する必要がある場合がある。例えば、最終的に得られた第2の誤差勾配値行列の1つの要素は、2以上の中間行列の要素を累加した結果となる可能性がある。「データハザード」の場合とは、現在の2つの要素の累加を行うには、必ず、前の2つの要素の累加が完了するのを待たなければならないため、データ累加パイプラインが停止してしまう場合である。
【0056】
いくつかの実施例において、行列累加演算モジュール320においてバイパスメカニズムを利用して「データハザード」問題を解決することが提案される。
図7は、本開示の幾つかの実施例における行列累加演算モジュール320の構成例を示す図である。
図7に示すように、行列累加演算モジュール320は、重ねられる行列の2つの要素の累加を行い、累加要素を得るように構成される累加部710を備える。累加部710は、例えば、浮動小数点数の累加部であってもよいし、その他の形式の累加部であってもよい。行列累加演算モジュール320は、さらに、累加部710により算出された累加要素を記憶モジュール330の対応する記憶位置に書き込むデータ書込部720を備える。また、行列累加演算モジュール320は、記憶モジュール330の各記憶位置から、次の要素との累加を継続するための累加要素を読み出すデータ読み出し部740を有する。
【0057】
行列累加演算において、累加部710は、2つ以上の要素の累加を実行する必要があり、毎回の2つの要素の累加結果は、引き続き次の要素と累加し、全ての要素の累加が完了まで繰り返すようにする。累加される行列は、中間行列、又は、中間行列の中の第2の誤差勾配値行列に累加されるサブ行列である可能性があり、その行列要素が一般的に事前に計算されていた。しかし、データ書込部720から記憶モジュール330へのデータの読み書き、及び、累加部710の演算には、ある程度遅延があり、データ書込部720が、累加部710で算出された第1要素と第2要素とを累加した累加要素を記憶モジュール330に書き込んでいるところ、次に累加する第3要素が用意された場合がある。従来の解決手段では、データ書込部による累加要素の書込の完了を待つ必要があり、累加要素の書込の完了した後、データ読み出し部を活性化して、対応する記憶位置から該累加要素を読み出し、累加を実行する累加部に提供する。これは、「データハザード」という問題を引き起こし、大きな遅延を導入してしまう。
【0058】
図7の例では、行列累加演算モジュール320は、累加部710で算出された累加要素を1つのキャッシュ領域732(「第1のキャッシュ領域」と称する場合がある)にキャッシュするバイパスモジュール730を備える。キャッシュ領域732の書き込み速度は、通常、記憶モジュール330の書き込み速度よりも大きい。「データハザード」が発生した場合、すなわち、累加部が第3の要素と前回の累加要素との累加を行う際に、記憶モジュール330の対応する記憶位置からまだ累加要素を読み出すことができないと判定された場合、バイパスモジュール730は、キャッシュ領域732にキャッシュされている累加要素を累加部710に供給するように構成されている。このように、累加部710は、第3の要素が使用可能な場合に、第3の要素と累加要素との更なる累加を迅速に行うことができる。また、「データハザード」が発生していないと判定された場合、すなわち、データ読み出し部740が記憶モジュール330から累加要素を即時に読み出すことができる場合には、バイパスモジュール730は、記憶モジュール330から読み出した累加要素を累加部710に供給して累加させてもよい。
【0059】
キャッシュ領域732における累加要素のキャッシュされる時間は、深層学習処理装置220の複数のクロックサイクルであってもよい。キャッシュされる具体的な時間は、キャッシュ領域732のサイズ及び/又は「データハザード」を引き起こす可能性のある遅延長(すなわちキャッシュ時間は遅延長より大きくなる)に依存してもよい。この期間は、一般に、累加部710の演算レイテンシ、データ書込部720のデータ書込レイテンシ、データ読み出し部740のデータ読出時間に依存する。ある実施形態では、累加部710が第3の要素と累加要素との累加を行う際に記憶モジュール330から累加要素を読み出すことができないと判断することができるので、キャッシュ領域732内の累加要素を累加部710に入力してもよい。
【0060】
以下、
図8を参照して、本開示の実施形態のより詳細な説明を行う。
図8は、本発明の実施形態に係る深層学習処理を実行する方法800のフローチャートを模式的に示す図である。方法800は、少なくとも一部が深層学習処理装置220により実現される。
【0061】
810において、深層学習処理装置220は、少なくとも1つの行列積和演算モジュールにより、畳込みニューラルネットワーク(CNN)における畳込み層の畳込みカーネルパラメータ値行列と第1の誤差勾配値行列との行列積和演算を実行して、複数の中間行列を得る。820において、深層学習処理装置220は、複数の中間行列の要素を再整形することなく、複数の中間行列を記憶する。830では、深層学習処理装置220は、記憶モジュールから複数の中間行列を読み出す。840では、深層学習処理装置220は、行列累加演算モジュールにより、前記畳込み層の畳込みスキームに従って並行して複数の中間行列に基づく行列累加演算を実行して、畳込み層に関する第2の誤差勾配値行列を得る。
【0062】
幾つかの実施例において、複数の中間行列は、前記畳込み層の入力の複数のチャネルに関連付けられており、前記第2の誤差勾配値行列は、前記複数のチャネルに対応する複数のチャネル行列を有する。幾つかの実施例において、複数の行列累加演算モジュールが、畳込み層の畳込みスキームに従って並行して前記複数の中間行列に基づく行列累加演算を実行して、畳込み層に関する第2の誤差勾配値行列を得るステップは、複数の行列累加演算モジュールのそれぞれは、前記複数のチャネルに対応する複数の並行経路のうちの1つにおいて、複数の中間行列のうちの、複数のチャネルのうちの1つのチャネルに関連する中間行列を累加して、該チャネルに対応するチャネル行列を得ること、または、複数の行列累加演算モジュールのそれぞれは、毎回の累加時、複数の中間行列のうちの1つの中間行列を、前記複数のチャネル行列のうちの1つのチャネル行列についての中間結果に累加すること、のうちの少なくとも1つを含む。
【0063】
幾つかの実施例において、複数の行列累加演算モジュールが、前記畳込み層の畳込みスキームに従って並行して前記複数の中間行列に基づく行列累加演算を実行して、前記畳込み層に関する第2の誤差勾配値行列を得るステップは、深層学習用処理装置の複数の行列累加演算モジュールが、第1の要素と前記第2の要素とを累加して累加要素を得ることと、累加要素を前記記憶モジュールに書き込むことと、累加要素を第1のキャッシュ領域にキャッシュすることであって、第1のキャッシュ領域は、前記記憶モジュールによりも書き込み速度が速くなり、前記累加要素は、前記第1のキャッシュ領域において複数のクロックサイクルキャッシュされる、ことと、累加部による前記第3の要素と前記累加要素との累加の実行時、前記記憶モジュールから前記累加要素を読み出すことができないと決定したことに応じて、第1のキャッシュ領域にキャッシュされた累加要素を第3の要素の累加のために供給することと、を実行することを含む。
【0064】
いくつかの実施例において、深層学習処理装置220は、さらに少なくとも一つの行列積和演算モジュールによる行列積和演算において生成された第1の中間演算結果をキャッシュするとともに、複数の行列累加演算モジュールによる行列累加演算において生成された第2の中間演算結果をキャッシュする。
【0065】
また、いくつかの実施形態では、深層学習処理装置220は、ベクトルレベルの上で、第2のキャッシュ領域における前記第1の中間演算結果及び前記第2の中間演算結果を記憶するための記憶領域をゼロ化する処理と、ベクトルレベルの上で、第2の誤差勾配値行列の少なくとも一部として、行列累加演算による最終演算結果を、選択的に記憶モジュールに書き込む処理と、の少なくとも一つの処理を実行する。
【0066】
また、いくつかの実施形態では、深層学習処理装置220は、汎用処理装置から、CNNの前記畳込み層による畳込み方向操作に利用される指令セットを取得し、指令セットを解析し、解析された指令セットに基づいて、少なくとも1つの行列積和演算モジュール及び行列累加演算モジュールに対する制御信号を生成する。
【0067】
いくつかの実施例において、少なくとも1つの行列積和演算モジュールは、複数の行列積和演算モジュールである、少なくとも1つの行列積和演算モジュールが、行列積和演算を実行させるステップは、複数の行列積和演算モジュールが、行列積和演算を並行して実行することを含む。
【0068】
図9は、本開示の一実施形態に係るコンピューティングデバイス900の概略構成を示すブロック図である。同図に示すように、デバイス900は、ROM(Read Only Memory)902に記憶されているコンピュータプログラムの指示、または記憶部908からRAM (Random Access Memory)903にロードされたコンピュータプログラムの指示に従って、各種の動作および処理を実行する処理装置901を備える。処理装置901は、本発明に記載の1または複数の深層学習処理装置220を備えることができる。また、処理装置901は、1または複数の汎用処理装置210をさらに備えていてもよい。
【0069】
また、RAM903には、コンピューティングデバイス900の動作に必要な各種プログラムやデータが記憶されている。処理装置901、ROM902、およびRAM903は、バス904を介して相互に接続されている。バス904には、さらに、入出力インタフェース905が接続されている。
【0070】
入出力インタフェース905には、キーボード、マウスなどよりなる入力部906、各種のディスプレイ、スピーカなどよりなる出力部907、磁気ディスク、光ディスクなどよりなる記憶部908、ネットワークカード、モデム、無線通信送受信機などよりなる通信部909が接続されている。通信部909は、インターネット等のコンピュータネットワークや各種の電気通信網を介して他の装置との間で情報やデータのやり取りを行う。
【0071】
処理装置901は、処理や演算機能を有する汎用的及び/又は専用の様々な処理コンポーネントであってよい。処理装置901の例としては、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、各種専用のAI(Asymmetric Intellite)演算チップ、各種動作機械学習モデルアルゴリズムの演算ユニット、DSP(Digital Signal Processor)、および、プロセッサ、コントローラ、マイクロコントローラなどが挙げられるが、上記に限定されるものではない。処理装置901は、上述した各方法、処理、例えば、方法800を実行する。例えば、実施の形態において、方法800は、記憶部908等の機械可読媒体に格納されたコンピュータソフトウェアとして実現されてもよい。また、コンピュータプログラムの一部または全部を、ROM902や通信部909を介して、装置900にロードしたり、装置900にインストールしたりすることも可能である。なお、上述した方法800の各ステップは、コンピュータプログラムがRAM903にロードされて処理装置901により実行されることにより、1または複数実行されるようにしてもよい。また、他の実施の形態において、処理装置901は、ファームウェアを利用するなど、任意の適切な形態で実行方法800として構成することができる。
【0072】
なお、上述した各機能の少なくとも一部は、1または複数のハードウェアロジックによって実現されてもよい。例えば、限定的ではなく、使用可能な例示的なハードウェアロジック部品は以下を含む。フィールドプログラマブルゲートアレイ(FPGA)、専用集積回路(ASIC)、専用標準製品(ASSP)、オンチップシステムのシステム(SOC)、負荷プログラマブルロジックデバイス(CPLD)など。
【0073】
本発明の方法を実施するためのプログラムコードは、1または複数のプログラミング言語の組み合わせで記述されていてもよい。これらのプログラムコードを汎用コンピュータや専用コンピュータ等のプログラマブルデータ処理装置のプロセッサやコントローラに供給し、プロセッサやコントローラで実行することにより、フローチャート及び/又はブロック図で規定された機能・動作を実現することができる。また、プログラムコードは、機械上で完全に実行されるものであってもよいし、機械上で部分的に実行されるものであってもよいし、リモートマシン上で部分的に実行されるものであってもよいし、リモートマシンまたはサーバ上で完全に実行されるものであってもよい。
【0074】
本発明において、機械可読媒体は、指令実行システム、装置又は装置が使用する、又は指令実行システム、装置又は装置と組み合わせて使用するプログラムを含む、又は記憶した有形の媒体であってもよい。機械可読媒体は、機械可読信号媒体であってもよいし、機械可読記憶媒体であってもよい。機械可読媒体としては、電子的、磁気的、光学的、電磁的、赤外線的、半導体システム、装置、装置、またはこれらの任意の適切な組み合わせが挙げられるが、これらに限定されるものではない。機械的に読み取り可能な記憶媒体のより具体的な例としては、1又は複数のラインに基づく電気的接続、可搬型コンピュータディスク、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、消去及び書換可能なリードオンリメモリ(EPROM又はフラッシュメモリ)、光ファイバ、携帯可能なCD-ROM、光記憶装置、磁気記憶装置、又はこれらの任意の適切な組み合わせが挙げられる。
【0075】
また、各動作は、ある順序で描画されているが、図示した順序、順序で実行されてもよいし、所望の結果が得られるように、全ての動作が実行されてもよい。ある環境において、マルチタスク及び並行処理が有利であると考えられる。同様に、上記においていくつかの具体的な実現詳細が含まれるが、これらは本開示の範囲を限定するものと解釈されるべきではない。また、各実施の形態の中で説明されている特徴のうち、一部の特徴を組み合わせて1つの実施の形態としてもよい。逆に、1つの実装形態で記述された様々な特徴は、単独でもよいし、任意の適切なサブコンビネーションで複数の実装形態で実装されてもよい。
【0076】
以上、本発明の実施の形態について説明したが、本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。逆に、上述した特定の特徴や作用は、あくまでも特許請求の範囲を実現するための例示的なものに過ぎない。