(57)【要約】【課題】  DNNを用いて信頼性の高い情報処理を可能とするとともに、高速化および低電力化が可能な情報処理技術を提供することにある。【解決手段】  入力データと重みパラメータを用いて演算するニューラルネットワークが、演算回路と内部メモリを内蔵する演算デバイスと、外部メモリに実装される構成の演算システムにおいて、重みパラメータを、第１重みパラメータと第２重みパラメータに２分割するものであり、第１重みパラメータを演算デバイスの内部メモリに格納し、第２重みパラメータを外部メモリに格納する。【選択図】  図４
2018116469.tif 000002
【特許請求の範囲】
【請求項１】
入力データと重みパラメータを用いて演算するニューラルネットワークが、演算回路と内部メモリを内蔵する演算デバイスと、外部メモリに実装される構成において、
前記重みパラメータを、第１重みパラメータと第２重みパラメータに２分割し、
前記第１重みパラメータを前記演算デバイスの内部メモリに格納し、
前記第２重みパラメータを前記外部メモリに格納する演算システム。
【請求項２】
前記第１重みパラメータは、絶対値が所定のしきい値以下である前記重みパラメータのうち、所定の下位桁の集合であり、
前記第２重みパラメータは、前記重みパラメータのうち、前記第１重みパラメータ以外の部分の集合とする、
請求項１に記載の演算システム。
【請求項３】
前記演算回路は、FPGA(Field−Programmable Gate Array）であり、
前記内部メモリは、SRAM（Static Random Access Memory）であり、
前記外部メモリは、前記SRAMよりソフトエラー耐性に優れるメモリである、
請求項１に記載の演算システム。
【請求項４】
前記演算回路は、FPGA(Field−Programmable Gate Array）であり、
前記内部メモリは、前記演算回路の設定を行うためのコンフィグレーションデータが格納されるメモリ、および、前記演算回路で実行される演算の途中結果が格納されるメモリの少なくとも１つである、
請求項１に記載の演算システム。
【請求項５】
前記ニューラルネットワークは、積和演算を行う畳込み層および全結合層の少なくとも１つを含み、
前記重みパラメータは、前記入力データに対して前記積和演算を行うためのデータである、
請求項１に記載の演算システム。
【請求項６】
データを受け付ける入力手段と、
前記データに対して処理を行うニューラルネットワークを構成する演算回路と、
前記演算回路の設定を行うためのコンフィグレーションデータが格納される記憶領域と、
前記処理の結果を出力する出力手段と、を備え、
前記ニューラルネットワークは、内積の計算を含む処理を行う中間層を含み、
前記内積の計算のための重みパラメータの一部分を、前記記憶領域に格納する、
演算システム。
【請求項７】
前記記憶領域に格納される前記重みパラメータの一部分は、
パラメータ値の絶対値が所定のしきい値以下である前記重みパラメータのうち、所定の下位ビットの集合である、
請求項６に記載の演算システム。
【請求項８】
前記演算回路は、FPGA(Field−Programmable Gate Array）で構成され、
前記記憶領域は、SRAM（Static Random Access Memory）で構成され、
前記演算回路と前記記憶領域は１チップの半導体装置に内蔵される、
請求項６に記載の演算システム。
【請求項９】
前記１チップの半導体装置は、
前記演算回路で実行される演算の途中結果が格納される一時記憶領域を備え、
前記内積の計算のための重みパラメータの一部分を、さらに、前記一時記憶領域に格納する、
請求項８に記載の演算システム。
【請求項１０】
前記中間層は、畳込み層もしくは全結合層である、
請求項６記載の演算システム。
【請求項１１】
演算回路と内部メモリを内蔵する演算デバイス、外部メモリ、および前記演算デバイスと前記外部メモリを接続するバスで構成される演算システムに、ニューラルネットワークを実装し、
前記ニューラルネットワークによって、入力データと重みパラメータを用いて演算するニューラルネットワークの演算方法であって、
前記重みパラメータの一部である第１重みパラメータを前記内部メモリに格納し、
前記重みパラメータの一部である第２重みパラメータを前記外部メモリに格納し、
前記演算を行う場合には、前記第１重みパラメータを前記内部メモリから読み出すとともに、前記第２重みパラメータを前記外部メモリから読み出して、前記演算に必要な前記重みパラメータを前記演算デバイスに準備し、演算を行うことを特徴とする、
ニューラルネットワークの演算方法。
【請求項１２】
前記第２重みパラメータは、絶対値が所定のしきい値以下の前記重みパラメータの少なくとも一部の集合であり、
前記第１重みパラメータは、前記重みパラメータのうち、前記第２重みパラメータ以外の部分の集合である、
請求項１１記載のニューラルネットワークの演算方法。
【請求項１３】
前記第２重みパラメータは、絶対値が所定のしきい値以下の前記重みパラメータの所定の下位ビット部分の集合である、
請求項１２に記載のニューラルネットワークの演算方法。
【請求項１４】
前記外部メモリには、前記第１重みパラメータおよび前記第２重みパラメータの両方を含む重みパラメータ全体を格納し、そのうちの前記第１重みパラメータに相当する部分を、前記内部メモリに転送する、
請求項１１記載のニューラルネットワークの演算方法。
【請求項１５】
前記演算回路は、FPGA(Field−Programmable Gate Array）で構成され、
前記内部メモリは、SRAM（Static Random Access Memory）で構成され、
前記外部メモリは、前記SRAMよりソフトエラー耐性に優れる半導体メモリである、
請求項１１に記載のニューラルネットワークの演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は高信頼に情報を処理する技術、特に演算システムおよびニューラルネットワークの演算方法に関する。
【背景技術】
【０００２】
近年、画像認識にディープニューラルネットワーク（DNN）を用いることで高い認識率を達成可能であることがわかり、注目を集めている（例えば特許文献１参照）。画像認識とは、画像に映る物体の種類を分類し識別する処理である。DNNは、入力情報の特徴量抽出を行うパーセプトロンを多層に組み合わせることで、特徴量抽出を多重に行い高い認識率を達成可能な機械学習技術である。
【０００３】
DNNが機械学習アルゴリズムの中でも特に有効であることが最近になり判明した背景に、計算機の性能向上が挙げられる。DNNにおいて高い認識率を達成するためには、中間層のパーセプトロンのパラメータデータ（以下単に「パラメータ」という）を何千枚/何万枚もの画像データを用いて訓練し、最適化する必要がある。パラメータのデータ数を増やすほど、画像の詳細な分類と高い認識率を達成可能となる。したがって、多量の画像を用いて多量のパラメータを訓練するために高い計算性能が必要であり、近年のサーバにおけるマルチコア技術やGPGPU（General−purpose computing on graphics processing units）技術など計算機の発展によって、DNNによる一般画像認識が可能となった。
【０００４】
DNNの有効性が広く認知されたことでDNNの研究は爆発的に広まり、様々な応用が検討されている。一例を挙げると，自動車の自動運転技術の開発において、周囲の物体を認識するためにDNNを用いることが検討されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−６９１３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
現在のDNNアルゴリズムは、処理に必要なパラメータを格納するためのメモリ量や演算量が大きく、消費電力が大きい。この点、自動車などの組込み用途においては，サーバ環境と比較するとリソース、処理性能の制約がある。
【０００７】
そこで、発明者らは車載用途の汎用小型デバイスに実装する際に、電力当たりの演算効率の高いFPGA(Field-Programmable Gate Array）と、DRAM（Dynamic Random Access Memory）などの外部メモリの組み合わせを検討した。
【０００８】
一方、処理の高速化(並列化)および低電力化のためは、外部メモリ使用率を低減し、内部メモリを使用することが有効である。そこで、発明者らはFPGAの内部メモリであるCRAM（Configuration Random Access Memory）等を有効活用することも検討した。しかし、FPGAの論理を構成するCRAMには、ソフトエラー耐性が脆弱なメモリ、例えばSRAM（Static Random Access Memory）が用いられており、そこで発生したソフトエラーは装置自体の動作を変えてしまうため，対策が必要となる。
【０００９】
CRAMのソフトエラー対策については、メモリを巡回モニタリングし、外部メモリに格納されたコンフィギュレーションデータと比較することで、ソフトエラーを検出する方式が考えられる。しかし、エラー検出には所定の時間（例えば50ms以上)が必要であり、エラー検出と訂正が完了するまでは、誤った処理が行われる可能性がある。
【００１０】
そこで本発明の課題は、DNNを用いて信頼性の高い情報処理を可能とするとともに、高速化および低電力化が可能な情報処理技術を提供することにある。
【課題を解決するための手段】
【００１１】
本発明の一側面は、入力データと重みパラメータを用いて演算するニューラルネットワークが、演算回路と内部メモリを内蔵する演算デバイスと、外部メモリに実装される構成の演算システムにおいて、重みパラメータを、第１重みパラメータと第２重みパラメータに２分割するものであり、第１重みパラメータを演算デバイスの内部メモリに格納し、第２重みパラメータを外部メモリに格納する。
【００１２】
本発明の他の一側面は、データを受け付ける入力手段と、データに対して処理を行うニューラルネットワークを構成する演算回路と、演算回路の設定を行うためのコンフィグレーションデータが格納される記憶領域と、処理の結果を出力する出力手段と、を備える演算システムであって、ニューラルネットワークは、内積の計算を含む処理を行う中間層を含み、内積の計算のための重みパラメータの一部分を、記憶領域に格納するものである。
【００１３】
本発明の他の一側面は、演算回路と内部メモリを内蔵する演算デバイス、外部メモリ、および演算デバイスと外部メモリを接続するバスで構成される演算システムに、ニューラルネットワークを実装し、ニューラルネットワークによって、入力データと重みパラメータを用いて演算するニューラルネットワークの演算方法である。ここで、重みパラメータの一部である第１重みパラメータを内部メモリに格納し、重みパラメータの一部である第２重みパラメータを外部メモリに格納し、演算を行う場合には、第１重みパラメータを内部メモリから読み出すとともに、第２重みパラメータを外部メモリから読み出して、演算に必要な重みパラメータを演算デバイスに準備し、演算を行うことを特徴とする。
【発明の効果】
【００１４】
本発明によれば、DNNを用いて高信頼に情報を処理するとともに、高速化および低電力化が可能な情報処理技術を提供することができる。前述した以外の課題，構成及び効果は，以下の実施の形態の説明により明らかになる。
【図面の簡単な説明】
【００１５】
【図１】実施例の画像認識装置の構成例を示すブロック図。
【図２】DNNの処理の概念を示す概念図。
【図３】各層のノードの演算処理を示す模式図。
【図４】DNNの画像認識装置への実装例を、データの流れとともに示す模式図。
【図５】重みデータＷの分布の例を示すグラフ図。
【図６】０に近い重みデータＷ０のメモリへの割り当て方法の一例を概念的に示す概念図。
【図７】０から遠い重みデータＷ１のメモリへの割り当て方法の一例を概念的に示す概念図。
【図８】畳込み演算・全結合演算モジュールへの、データの読み出し構成例を示すブロック図。
【図９】畳込み演算・全結合演算モジュールへの、データの読み出し構成の他の例を示すブロック図。
【図１０】重みデータ等を各メモリに格納する手順を示すフロー図。
【図１１】重みデータの内部メモリと外部メモリへの割り当て表の例を示す表図。
【図１２】重みデータの内部メモリと外部メモリの格納アドレス表の例を示す表図。
【図１３】実施例の画像認識装置の処理を示すフロー図。
【図１４】実施例の畳込み演算の処理を示すフロー図。
【図１５】重みデータの外部メモリと内部メモリへの格納形態を示す概念図。
【図１６】演算ユニットの構成例を示すブロック図。
【図１７】演算ユニットへの重みデータの格納処理例を示すフロー図。
【発明を実施するための形態】
【００１６】
以下，実施例を図面に基づいて説明する。なお，実施例を説明する全図において，同一の機能を有する構成には同一の符号を付し，その繰り返しの説明は特に必要な場合を除き省略する。
【００１７】
以下で説明される実施例の一例を挙げるならば，入力データと重みパラメータを用いて演算するニューラルネットワークが、演算回路とメモリを内部に含むFPGA等の演算デバイスと、外部メモリに実装される構成において、重みパラメータを第１及び第２の重みパラメータに２分割し、第１重みパラメータをCRAM等の演算デバイスの内部に搭載されるメモリに格納し、第２重みパラメータをDRAMやフラッシュメモリ等の外部メモリに格納することを特徴とする。
【００１８】
すなわち、本実施例では、DNN演算に用いる重みのパラメータセットを以下のように２分割する。第１重みパラメータは、DNNの演算結果への寄与が低いパラメータである。例えば、値が０に近い重みであるとか、重みの下位の桁を表すビットである。一方、第２重みパラメータは、DNNの演算結果への寄与が高いパラメータである。これは、第１重みパラメータ以外のパラメータの少なくとも一部であると定義できる。そして、第１重みパラメータを内部メモリ（CRAM）、第２重みパラメータを外部メモリ（DRAM）に格納し、DNN演算を実行する。
【００１９】
以下で説明する実施例では、画像を処理するためのDNNについて説明するが、用途は画像認識装置に限定されるものではない。
【実施例１】
【００２０】
図１に，本実施例における画像認識装置1000の構成を示す。画像認識装置1000は、例えば自動車に搭載される装置として構成され、図示しないバッテリー等から電力を供給される。画像認識装置1000は、汎用の処理を行うCPU（Central Processing Unit）101、アクセラレータ100、データを記憶するためのメモリ102（便宜上「外部メモリ102」と呼ぶこともある）を含む。これらは外部バス115で接続され、データのやり取りが可能である。外部メモリ102は、例えば１または複数のチップで構成されるDRAMやフラッシュメモリなどの半導体メモリを用いることができる。
【００２１】
アクセラレータ100は画像データを処理するための専用の装置であり、入力データはCPU101から送られてくる画像データである。すなわち、CPU101は画像データ処理の必要が発生すると、アクセラレータ100に画像データを送り、アクセラレータ100から処理結果を受け取る。
【００２２】
アクセラレータ100は内部に演算データ記憶領域103（便宜上「内部メモリ103」と呼ぶこともある）と演算ユニット104を持つ。入力ポートと出力ポート(図示せず）と演算データ記憶領域103と演算ユニット104はバス105（便宜上「内部バス105」と呼ぶこともある）で接続されており，バス105を通じて演算データは転送される。
【００２３】
図１では、アクセラレータ100を１チップのFPGAで構成することを想定している。自動車などの組込み用途においては、アクセラレータ100はFPGAのような半導体集積回路で構成することができる。この半導体集積回路は、例えば１チップで構成され、汎用用途のCPU101と協働して、主に画像に関する処理を行う。演算データ記憶領域103は、半導体メモリであって、例えばSRAMのようなスケールが小さく高速のメモリが用いられる。なお、本実施例では画像認識処理を例に説明しているが、本実施例は他の処理に用いることも可能であり、特に用途を限定するものではない。また、外部メモリ102は、例えばDRAMやフラッシュメモリのようなメモリであり、内部メモリである演算データ記憶領域103に比較して、ソフトエラー耐性に優れるものを想定する。
【００２４】
演算データ記憶領域103は、一時記憶領域として用いられるBRAM（Block RAM）106とCRAM107を含む。BRAM106には，アクセラレータ100で実行される演算の途中結果等が格納される。CRAM107には、演算ユニット104の各モジュールを設定するためのコンフィグレーションデータが格納されている。後述するように、BRAMやCRAMにはDNNの中間層のパラメータ（重みデータ）も格納される。
【００２５】
演算ユニット104は，DNNの演算に必要なモジュールを含む。演算ユニットに含まれる各モジュールは、FPGAの機能によりプログラムが可能なものとする。ただし、一部を固定的な論理回路で構成することも可能である。
【００２６】
アクセラレータ100がFPGAで構成される場合には、演算ユニット104はプログラム可能なロジックセルで構成することができる。ルックアップテーブルの内容や、演算ユニット104の各モジュール108〜114のスイッチの設定のためのデータなど、プログラムのためのデータは、CPU101の制御により、外部メモリ102から演算データ記憶領域103のCRAM107にロードされ、各モジュール108〜114の機能を実現するようにロジックセルを設定する。
【００２７】
演算制御モジュール108は，DNNのアルゴリズムにしたがって他の演算モジュールや演算データのフローを制御するモジュールである。
【００２８】
デコード演算モジュール109は、外部メモリ102や内部メモリ103に格納されたパラメータをデコードするモジュールである。後に詳細に説明する。
【００２９】
畳込み演算・全結合演算モジュール110はDNNにおける畳込み演算もしくは全結合演算を実行するモジュールである。畳込み演算と全結合演算の内容は，ともに内積演算であるため1つのモジュールで実行可能である。また畳込み層や全結合層が複数あったとしても、1つの畳込み演算・全結合演算モジュール110で実行可能である。
【００３０】
活性化演算モジュール111は，DNNの活性化層の演算を実行するモジュールである。
【００３１】
プーリング演算モジュール112は，DNNにおけるプーリング層の演算を実行するモジュールである。
【００３２】
正規化演算モジュール113は，DNNにおける正規化層の演算を実行するモジュールである。
【００３３】
最大値演算モジュール114は，DNNにおける出力層の最大値を検出し認識結果202を得るためのモジュールである。これら演算モジュールのなかで本実施例の内容に深く関わるモジュールはデコード演算モジュール109と畳込み演算・全結合演算モジュール110であり，これら2つのモジュールについて後に詳細に説明する。また、本実施例で説明を省略する構成は、公知のFPGAやDNNの技術を踏襲してよい。
【００３４】
図２は、実施例における、DNNの処理の概念を示す図である。この例のDNNは入力層IN、第１の畳込み層CN1、第2の畳込み層CN2、出力層OUTを持つこととする。層の数は任意に変更することができる。入力層INは画像データ201をを正規化したものである。出力層OUTは第1の全結合層IP1としている。なお、通常は各畳込み層にはプーリング層や活性化層がセットになっているが、ここでは省略する。このDNNには、画像データ201が入力され、認識結果202が出力される。
【００３５】
畳込み層CN1、CN2は、入力された画像データ201から、認識するために必要な情報(特徴量)を抽出する。特徴量を抽出するために必要な畳込み処理のために、畳込み層はパラメータを使用する。プーリング層は、畳み込み層で得られた情報を要約するとともに、データが画像の場合には、位置に対する不変性を高める。
【００３６】
全結合層IP1は、抽出された特徴量を使って、その画像がどのカテゴリに属するかを判断する、つまりパターン分類を行う。
【００３７】
各層は多層パーセプトロン(multi-layer perceptron)の一つの層を構成する。概念的には、一つの層には複数のノードが一列に並んでいると考えることができる。1つのノードは、前の層の全てのノードと結合されている。結合一つ一つに対しては、パラメータとして重みデータＷ（「重みパラメータ」ともいう）が割り当てられている。後の層のノードの入力は、前の層の入力と重みデータの内積に基づくものとなる。演算には、その他バイアスのデータや閾値のデータが用いられることがある。本明細書では、これらを総称してパラメータということにする。本実施例では、ニューラルネットワークを構成するそれぞれの層のパラメータをメモリへ格納する際に、特徴的な処理を行っている。
【００３８】
図３は、図２の畳込み層CN1,CN2や全結合層IP1等の各層のノードの演算を模式的に示す図である。前の層の複数のノードからの入力Ｉ301に対して、所定の重みデータＷ302が積算される。それらの総和303に対して、所定の閾値やバイアスを与える活性化機能304を持つこともある。重みデータＷ302は入力301に対して、入力情報の強化や減退を行う。このような方法で、アルゴリズムが学習するタスクの中で、入力情報の重要性が割り当てられる。次に、複数の重みが結合した入力の総和303がノードの活性化機能304を通過する。これにより、その信号が、ネット内を進んでいくのか、そうであればどの程度進み、最終的な結果に影響するのか、などのような分類作業が行われ、次の層の１つのノードへの入力Ｏ305となる。
【００３９】
図４は、図２と図３に示したDNNを、図１に示した画像認識装置1000に実装する際の概念を、データの流れとともに示す図である。図１で概略を説明したように、アクセラレータ100は一般的なFPGAの１チップで構成することができる。FPGAの演算ユニット104は論理のプログラムが可能であり、種々の論理回路を実装することができる。
【００４０】
演算ユニット104のプログラムは、CRAM107に格納されたコンフィギュレーションデータＣにより行われる。CRAM107はSRAMで構成されるため、コンフィギュレーションデータＣは電源ＯＮ時などに、CPU101の制御により外部メモリ102等からCRAM107にロードされる。図４では、単純化するために演算ユニット104の論理として、畳込み演算・全結合演算モジュール110を模式的に示した。図４には示していないが、他の演算モジュールも同様にプログラムすることができ、演算ユニット104の一部を構成する。
【００４１】
図２および図３で説明したように、畳込み層CN1,CN2や全結合層IP1等は基本的に積和演算、すなわち乗算の結果の加算を行うものである。この演算においては、図２や図３で説明したように、重みデータＷ等のパラメータを用いる。本実施例では重みデータＷは、基本的にその全てを外部メモリ102に格納することにしている。電源ＯＮ時等、演算を行う前には、重みデータＷの少なくとも一部Ｗｍを、BRAM106あるいはCRAM107にロードする。すなわち、本実施例では、重みデータを所定のルールにより、外部メモリ102と演算データ記憶領域103に分散させる。
【００４２】
当該ルールとしては、演算結果への寄与が低い重みデータＷｍをソフトエラー耐性の低い演算データ記憶領域103のBRAM106あるいはCRAM107に格納し、演算結果への寄与が高い重みデータＷkは、ソフトエラー耐性の低い演算データ記憶領域103に格納しない。演算結果への寄与が低い重みデータＷｍを内部メモリである演算データ記憶領域103に格納し、演算に用いることにより、高速な処理と低消費電力の効果がある。また、演算結果への寄与が高い重みデータＷkは、ソフトエラー耐性の高い外部メモリ102に保持したものを演算に用いることで、ソフトエラーの演算結果に対する影響を低減することができる。
【００４３】
画像認識装置1000が画像認識を行う場合には、画像データ201を入力データＩとしてBRAM106に保持し、演算ユニット104の論理モジュールで演算を行う。畳込み演算・全結合演算モジュール110を例に取れば、外部メモリ102あるいは演算データ記憶領域103から、演算に必要なパラメータを演算ユニット104に読み出し、演算を行う。内積演算の場合には、入力側ノードＩと出力側ノードＯの積の数だけの重みデータＷが必要となる。図４では、出力Ｏ１に対する入力Ｉ１の重みデータＷ１１を示している。演算結果である出力データＯは、外部メモリ102に格納され、当該データは次の演算の入力データＩとしてBRAM106に格納される。必要な演算が全て終了すると、演算ユニット104からの最終的な出力Ｏは、認識結果202として出力される。
【００４４】
畳込み層CN1,CN2や全結合層IP1等は積和演算（内積の計算）を行うものであるため、畳込み演算・全結合演算モジュール110を最も大きな行と列に合わせてプログラムしておけば、各層の演算はパラメータを変えることで１つの畳込み演算・全結合演算モジュール110を共通に用いることができる。この場合には、コンフィグレーションデータＣのデータ量は少なくて済む。ただし、重みデータＷについては、層やノードの数の増加に伴ってデータ量が増加する。図４および以下の説明では、畳込み演算・全結合演算モジュール110を共通に用いる場合を想定したが、各層毎に畳込み演算・全結合演算モジュール110を個別に準備することも可能である。
【００４５】
図５は、重みデータＷの分布の例を示している。横軸は、重みデータＷの数値であり、縦軸は出現頻度である。この例では、０に近い重みデータＷ０の度数が大きいため、Ｗ０のデータ総量が大きい。また、０から遠い重みデータＷ１（例えば絶対値で0.005以上）の度数が小さいため、Ｗ１のデータ総量は小さい。この場合、０に近い重みデータＷ０では、積の結果が０に近くなるため、DNNの最終的な演算結果に与える影響が小さいと考えられる。すなわち、ソフトエラーにより、０に近い重みデータＷ０の値が変化しても、演算結果に与える影響が小さい。したがって、図５に示すように、０に近い重みデータＷ０をソフトエラー耐性の低い演算データ記憶領域103に記憶する重みデータＷｍとすれば、演算結果に与える影響は少ないといえる。一方、０から遠い重みデータＷ１は、演算データ記憶領域103に記憶せずに、重みデータＷkとして外部メモリ102に格納する。
【００４６】
ただし、ソフトエラーにより０に近い重みデータＷ０が、０から遠い重みデータに変化すると、演算結果に与える影響が大きくなってしまう。そこで、演算データ記憶領域103に記憶させる重みデータＷｍは、重みの下位桁をあらわすビットに限定することが望ましい。
【００４７】
図６は、０に近い重みデータＷ０のメモリへの割り当て方法を概念的に示す図である。(a)は固定小数点演算の場合を示し、(b)は不動小数点演算の場合を示す。いずれも、斜線により示す下位のビットから所定ビットを、演算データ記憶領域103に格納する重みデータＷｍとし、それ以外は外部メモリ102に格納する重みデータＷkとする。
【００４８】
図７は、０から遠い重みデータＷ１のメモリへの割り当て方法を概念的に示す図である。(a)は固定小数点演算の場合を示し、(b)は不動小数点演算の場合を示す。いずれも、全てのデータを外部メモリ102に格納する重みデータＷkとする。
【００４９】
重みデータをどのようにＷ１とＷ０に分けるか、またＷ０をどのようにＷｍとＷｋに分けるかは、デバイスのソフトエラー耐性や、演算の内容にもよるが、基本的には重みデータの大きさとビットの桁に従う。例えばプラスマイナス0.005をしきい値とし、0.005以下の値を持つパラメータはゼロに近似できるとし、０に近い重みデータＷ０として扱うことができる。そして、下位例えば３ビットを演算データ記憶領域103に格納する重みデータＷｍとし、それ以外は外部メモリ102に格納する重みデータＷkとする。
【００５０】
図８は、畳込み演算・全結合演算モジュール110への、データの読み出し構成を示すブロック図である。入力である画像データ201は演算データ記憶領域103のBRAM106に記憶する。演算途中の中間データもBRAM106に記憶する。０に近い重みデータＷ０は上位桁を外部メモリ102のDRAMに記憶したものを用いる。また、０に近い重みデータＷ０の下位桁はCRAM107に記憶したものを用いる。また、０から遠い重みデータＷ１は外部メモリ102のDRAMに記憶したものを用いる。
【００５１】
デコード演算モジュール109は、外部メモリ102と演算データ記憶領域103に格納された重みデータを、セレクタ801で選択し、フリップフロップ802でタイミングを制御して演算ユニット104に送出する。画像データ201や中間データもフリップフロップ803でタイミングを制御して演算ユニット104に送出する。
【００５２】
図８の例では、０に近い重みデータＷ０の下位桁はCRAM107に記憶したが、BRAM106のサイズや画像データ201や中間データの大きさによっては、BRAM106に記憶することもできる。
【００５３】
図９は、０に近い重みデータＷ０の上位桁を外部メモリ102のDRAMに、下位桁をBRAM106とCRAM107に記憶する例である。
【００５４】
図１０は、図４と図８の構成において、コンフィグレーションデータＣや重みデータＷを各メモリに格納する手順を示すフロー図である。この処理は、CPU101が制御して行うものとする。まず処理S1001では、FPGAの通常の処理と同様に、コンフィグレーションデータＣを外部メモリ102からCRAM107にロードし、処理S1002でCRAM107の残りの空き領域を確保する。
【００５５】
次に、処理S1003では重みデータＷの外部メモリ102と内部メモリ103への割り当て表を参照する。割り当て表は例えば外部メモリ102のDRAMに予め格納しておく。
【００５６】
図１１は、重みデータＷの外部メモリ102と内部メモリ103への割り当て表1100の例を示す表図である。ここでは、あるひとつの層（あるいはそのひとつのフィルタ）のパラメータひとつひとつについて、重みデータＷを外部メモリ102と内部メモリ103へ各何ビット割り当てるかを示している。通常DNNのパラメータは、DNNの学習によって最適化されて定められる。よって、学習済みのパラメータについて、図６と図７に示した手法により、重みデータＷを外部メモリにｎビット、内部メモリにｍビットのように割り当てを決定する。これは、手作業によってデータを作成しても良いし、単純なプログラムによって各パラメータを処理しても良い。なお、既述のように外部メモリには重みデータＷが全て格納されることにしているので、上記の外部メモリの割り当てビット数ｎとは、格納されている重みデータのうち、演算時に読み出されるビット数ということができる。
【００５７】
処理S1004では、割り当て表1100を参照し、外部メモリ102から内部メモリ103へ所定ビット数だけ重みデータＷｍをロードする。例えば、図１１の＃２のパラメータについては下位２ビットを、＃３のパラメータについては下位３ビットを内部メモリ103にロードする。＃１のパラメータは、内部メモリ103へロードするデータはない。
【００５８】
処理S1005では、外部メモリ102に格納された重みデータＷｋと内部メモリ103にロードされた重みデータＷｍの格納場所を示すアドレス表1200を作成し、CRAM107あるいはBRAM106に格納する。
【００５９】
図１２は、アドレス表1200の一例を示す。例えば、外部メモリ102と内部メモリ103のそれぞれに対して、各層（あるいはそのひとつのフィルタ）のパラメータ毎に先頭アドレスを指定する。外部メモリ102の先頭アドレスは、パラメータを予めDRAMに格納したとおりなので、内部メモリ103に格納した重みデータＷｍの先頭アドレスが追加されることになる。
【００６０】
以上で、画像認識装置1000の画像処理に先立って、演算ユニット104の演算に必要なデータの準備が完了する。
【００６１】
図１３は，本実施例における画像認識装置1000の画像処理手順を示すフローチャートである。ここでは、図２のDNNを例に、２つの畳込み演算と、１つの全結合演算を行うものを示した。
【００６２】
ステップS1301:画像認識装置1000のアクセラレータ100はCPU101から入力データである画像101を受け取り，演算データ記憶領域103内部のBRAM106に格納する。画像データは，DNNにおける入力層INに相当する。
【００６３】
ステップS1302:畳込み演算・全結合演算モジュール110を用いてパラメータによる特徴量抽出を行う。DNNにおける畳込み層CN1,CN2に相当する。詳細は後ほど図１４で説明する。
【００６４】
ステップS1303:演算データ記憶領域103内部のBRAM106に格納されている畳込み演算の結果や全結合演算の結果に対して，活性化演算モジュール111やプーリング演算モジュール112を適用する。DNNにおける活性化層やプーリング層に相当する演算を実行する。
【００６５】
ステップS1304:演算データ記憶領域103内部のBRAM106に格納されている中間層データに対して，正規化演算モジュール113を適用する。DNNにおける正規化層に相当する演算を実行する。
【００６６】
ステップS1305:畳込み演算・全結合演算モジュール110を用いてパラメータによる特徴量抽出を行う。DNNにおける全結合層IP1に相当する。詳細は後ほど説明する。
【００６７】
ステップS1306:出力層の中で最大値を持つ要素のインデックスを求め，認識結果202として出力する。
【００６８】
図１４は，本実施例における畳込み演算の処理フローS1302の詳細を示す図である。畳込み演算の処理は、重みパラメータを読み出す処理と、入力あるいは中間層のデータと重みパラメータの内積演算を行う処理を含む。
【００６９】
ステップS1401:ループ変数を i=1 と初期化する。
【００７０】
ステップS1402:畳込み層のi枚目のフィルタを選択する。ここで、後段のひとつのノードに接続される複数の入力に対する複数の重みデータＷをフィルタと称している。
【００７１】
ステップS1403:パラメータのデコードを行う。すなわち、パラメータを畳込み演算・全結合演算モジュール110の入力レジスタにロードする。詳細は後ほど説明する。
【００７２】
ステップS1404:演算データ記憶領域103内部のBRAM106に格納されている中間層のデータを、入力データとして畳込み演算・全結合演算モジュール110の入力レジスタにロードする。
【００７３】
ステップS1405:畳込み演算・全結合演算モジュール110を用いて内積演算を実行する。出力レジスタに格納されている出力データは、演算の中途結果として演算データ記憶領域103内部のBRAM106に一時記憶する。
【００７４】
ステップS1406:すべての入力データに対してフィルタを適用したならばステップS1407に進む。そうでないなら，フィルタを適用する対象の中間層データを変更し，ステップS1404に進む。
【００７５】
ステップS1407:すべてのフィルタの処理が完了したならば，畳込み演算の処理フローを終了する。その層の最終的な出力は、外部メモリ102に転送され、当該データはBRAM106に転送されて次の層の入力となる。未処理のフィルタがある場合には、ステップS1408に進む。
【００７６】
ステップS1408:ループ変数を i=i+1 と更新して次のフィルタの処理をする。
【００７７】
以上の処理により、１個の畳込み層に対する処理フローS1302が行われる。全結合層の処理フローS1305についても、若干の相違はあるものの、パラメータを変えながら内積の計算を行う点は同様であり、図１４と同様に処理することができる。
【００７８】
図１５は，本実施例におけるパラメータの記憶の例を示す図である。ここでは、図１１の畳込み層CN2のパラメータを例に説明する。畳込み層CN2の１つのパラメータは８ビットであり、外部メモリ102には８ビット全てが格納されている。また、図１０の処理S1004によって、内部メモリ103には、８ビットのうち下位２ビットが格納されている。図では単純化するため、各パラメータはすべて下位２ビットが内部メモリに格納されることにしたが、パラメータ毎に異なるビット数を内部メモリにロードすることにしてもよい。
【００７９】
外部メモリ102と内部メモリ103それぞれの記憶領域は、内部がバンク1501によって分割されアドレス1502によりアドレス番号が振られている。これらバンク1501の構成やアドレス1502の振り方はメモリの物理的構成に依存しているが、ここでは、外部メモリ102と内部メモリ103で共通しているものとし、各アドレスに１つのパラメータを格納するものとする。
【００８０】
外部メモリ102では、１つのアドレスに８ビットのデータ1503aが格納されるが、デコードされるのは斜線で示す上位６ビットである。内部メモリ103では、アドレスに２ビットのデータ1503bが格納され、斜線で示す２ビット全てがデコードされる。
【００８１】
図１６は、本実施例における演算ユニット104内部のデコード演算モジュール109と畳込み演算・全結合演算モジュール110の構成を示す図である。演算ユニット104は複数の畳込み演算・全結合演算モジュール110を含むことができる。また、各演算モジュールを相互接続するバス160が存在し、各演算モジュールが演算データを交換するために使用される。演算ユニット104内部のバスはアクセラレータ100の内部バス105と接続し、内部バス105は外部バス115と接続しており、BRAM106や外部メモリ102と演算データの交換が可能である。畳込み演算・全結合演算モジュール110は、１つのモジュールを、入力レジスタ163に格納するデータを変更してパラメータを変更することにより、異なる中間層として利用することできる。ただし、畳込み演算・全結合演算モジュール110は、複数備えていても良い。
【００８２】
デコード演算モジュール109は内部にパラメータを一時保存するためのレジスタ162と、フィルタデータのデコードを行うためのデコード処理部161を持つ。畳込み演算・全結合演算モジュール110は内積演算を実行する演算モジュールであり，入力レジスタ163と乗算器164と加算器165と出力レジスタ166を持つ。入力レジスタ163は計(2N+1)個で奇数個あり、パラメータを保持するレジスタＦと、前の層の演算結果を保持するレジスタＤを含む。入力レジスタ163は、演算ユニット104内部のバス160と接続し、バス160から入力データを受け取り保持する。これら入力レジスタ163は1個をのぞき全てが乗算器164の入力に接続し，残りの1個は加算器165の入力に接続する。乗算器164の入力に接続する2N個の入力レジスタ163は半数のN個＋1個（レジスタＦ)は中間層のパラメータを受け取って保持し，残り半数のN個（レジスタＤ）は内部メモリ103におけるBRAM106に保存された演算中間結果を受け取って保持する。
【００８３】
畳込み演算・全結合演算モジュール110はN個の乗算器と加算器を持つ。N個の乗算器はそれぞれがパラメータと演算中間結果の積を計算し出力する。N個の加算器は，N個の乗算器の結果と1個の入力レジスタの総和を計算し，その結果は出力レジスタ166に保存される。出力レジスタ166に保存された演算データは演算ユニット104内部のバス160を通じて外部メモリ102もしくは演算モジュールに転送される。
【００８４】
図１５に示した畳込み層CN2のパラメータ1503をデコードする場合を例に説明する。まず最初に、演算ユニット104内部のデコード処理部161が、図１１と図１２に示したデータに基づいて、外部メモリ102のBANK AのアドレスADDR 0に格納されている８ビットのうち、上位６ビットのパラメータをデコード演算モジュール109内部のレジスタ162に転送するよう指示を出す。
【００８５】
次に、演算ユニット104内部のデコード処理部161が、図１１と図１２に示したデータに基づいて、内部メモリ103のBANK AのアドレスADDR 0に格納されている２ビットのパラメータをデコード演算モジュール109内部のレジスタ162に転送するよう指示を出す。これにより、外部メモリ102と内部メモリ103の対応するアドレスに格納された、６ビットと２ビットのデータが、デコード演算モジュールのレジスタ162に転送される。
【００８６】
次に、演算ユニット104内部のデコード処理部161が、レジスタ162に格納されたパラメータをバス160を介して畳込み演算・全結合演算モジュールのレジスタＦに転送する。
【００８７】
図１７は，本実施例におけるパラメータのデコード処理フローS1403を示す図である。
【００８８】
ステップS1701: 該当するフィルタのパラメータ個数を参照し，k個と設定する。また，該当するパラメータが一つのアドレスに格納されている個数は１個とする。
【００８９】
ステップS1711: ループ変数jを j=1 と初期化する。
【００９０】
ステップS1712: 演算制御モジュール108は外部メモリ102のアドレスのj番目のアドレスに格納されたパラメータを、ｎビット分アクセラレータ100の内部バス105や演算ユニット104内部のバス160を通じてデコード演算モジュール109内部のレジスタ162に転送する。
【００９１】
ステップS1713: 演算制御モジュール108は内部メモリ103のアドレスのj番目のアドレスに格納されたパラメータを、ｍビット分アクセラレータ100の内部バス105や演算ユニット104内部のバス160を通じてデコード演算モジュール109内部のレジスタ162に転送する。
【００９２】
ステップS1714: 演算制御モジュール108は、レジスタ162に格納されたｎ＋ｍビットのパラメータをｊ番目のレジスタＦに転送する。
【００９３】
ステップS1715: j≦kならばステップS1706に進み，そうでないならパラメータのデコード処理フローを終了する。
【００９４】
以上で、１つの層の１つのフィルタに相当する重みパラメータのデコードが終了する。
【００９５】
以上説明した実施例によれば、FPGAの内部メモリを活用することにより、高速で低消費電力の計算が可能となり、また、計算結果の信頼性も高い。
【００９６】
本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることが可能である。また、各実施例の構成の一部について、他の実施例の構成の追加・削除・置換をすることが可能である。
【符号の説明】
【００９７】
101：ＣＰＵ、102：外部メモリ、103：演算データ記憶領域、104：演算ユニット、105：内部バス
【図１】
2018116469.tif 000003
【図２】
2018116469.tif 000004
【図３】
2018116469.tif 000005
【図４】
2018116469.tif 000006
【図５】
2018116469.tif 000007
【図６】
2018116469.tif 000008
【図７】
2018116469.tif 000009
【図８】
2018116469.tif 000010
【図９】
2018116469.tif 000011
【図１０】
2018116469.tif 000012
【図１１】
2018116469.tif 000013
【図１２】
2018116469.tif 000014
【図１３】
2018116469.tif 000015
【図１４】
2018116469.tif 000016
【図１５】
2018116469.tif 000017
【図１６】
2018116469.tif 000018
【図１７】
2018116469.tif 000019