(57)【要約】      （修正有）【課題】畳込みニューラルネットワークの畳込み演算の消費電力と演算量を削減する。【解決手段】畳込み演算のための行列データはしきい値を基準に前半部分と後半部分に２分割されており，前半部分は主要項を比較的多く含み，後半部分は主要項を比較的少なく含む。畳込み演算部は，前半部分の畳込み演算と，後半部分の畳込み演算とを２分割して実行する。前半部分の畳込み演算は，プーリング演算部の最大値サンプリング演算に用いられる第1の演算データを生成するための演算を実行する。プーリング演算部は，後半部分の畳込み演算で，行列ベクトル積の畳込み演算を適用すべきベクトルデータを選択する。後半部分の畳込み演算は，選択されたベクトルデータに対して，畳込み演算を実行して第２の演算データを生成する。最大値サンプリング演算の結果と，第２の演算データを，加算することで，畳込みニューラルネットワークの中間層データを得る。【選択図】図４
2018160086.tif 000002
【特許請求の範囲】
【請求項１】
畳込みニューラルネットワークによる処理方法であって，
前記ニューラルネットワークは，行列ベクトル積による畳込み演算を行う畳込み演算部と，最大値サンプリング演算を行うプーリング演算部を具備し，
前記畳込み演算部で行われる畳込み演算のための行列データはしきい値が設定され，
前記行列データは前記しきい値を基準に前半部分と後半部分に２分割されており，
前記行列データの前半部分は前記行列データの主要項を比較的多く含み，また，前記行列データの後半部分は前記行列データの主要項を比較的少なく含み，
前記畳込み演算部は，前記前半部分の行列データによる前半部分の畳込み演算と，前記後半部分の行列データによる後半部分の畳込み演算とを２分割して実行し，
前記前半部分の畳込み演算は，前記プーリング演算部の前記最大値サンプリング演算に用いられる第１の演算データを生成するための演算を実行し，
前記プーリング演算部は，前記最大値サンプリング演算に伴って，前記後半部分の畳込み演算で，前記行列ベクトル積の畳込み演算を適用すべきベクトルデータを選択し，
前記後半部分の畳込み演算は，前記プーリング演算部で選択された前記ベクトルデータに対して，畳込み演算を実行して第２の演算データを生成し，
前記プーリング演算部の前記最大値サンプリング演算の結果と，前記第２の演算データを，全部または部分的に加算することで，畳込みニューラルネットワークの中間層データを得ることを特徴とする，
畳込みニューラルネットワークによる処理方法。
【請求項２】
前記行列データは特異値分解されていることを特徴とし，
前記しきい値は前記行列データの特異値分解によって得られた特異値によって特徴付けられ，
前記行列データの前半部分と後半部分を前記しきい値を基準として，比較的大きい特異値データに対応する部分行列と，比較的小さい特異値データに対応する部分行列に分割することを特徴とする
請求項１の畳込みニューラルネットワークによる処理方法。
【請求項３】
前記行列データは固有値分解されていることを特徴とし，
前記しきい値は前記行列データの固有値分解によって得られた固有値によって特徴付けられ，
前記行列データの前半部分と後半部分を前記しきい値を基準として，比較的大きい固有値データに対応する部分行列と，比較的小さい固有値データに対応する部分行列に分割することを特徴とする
請求項１の畳込みニューラルネットワークによる処理方法。
【請求項４】
画像認識を行うことを特徴とする，
請求項１の畳込みニューラルネットワークによる処理方法。
【請求項５】
音声認識を行うことを特徴とする，
請求項１の畳込みニューラルネットワークによる処理方法。
【請求項６】
自然言語処理を行うことを特徴とする，
請求項１の畳込みニューラルネットワークによる処理方法。
【請求項７】
温度や湿度や流体の流量を認識することで周辺環境の認識を行うことを特徴とする，
請求項１の畳込みニューラルネットワークによる処理方法。
【請求項８】
畳込みニューラルネットワークの畳込み演算の行列データの演算パラメータを決定するための，畳込みニューラルネットワーク学習方法であって，
前記畳込みニューラルネットワークは，
行列ベクトル積による畳込み演算を行う畳込み演算部と，最大値サンプリング演算を行うプーリング演算部を具備し，
前記畳込み演算に用いる行列データを格納する行列保存領域を具備し，
前記行列保存領域に格納される前記行列データは，しきい値に基づいて前半部分と後半部分に２分割されており，
前記畳込み演算部は前記前半部分の行列データによる第１の畳込み演算と，前記後半部分の行列データによる第２の畳込み演算とを個別に実行し，
前記第１の畳込み演算は，前記プーリング演算部の最大値サンプリング演算に用いられる第１の演算データを生成し，
前記プーリング演算部は，前記第１の演算データを用いた前記最大値サンプリング演算に伴って，前記第２の畳込み演算を行うべきベクトルデータを選択し，
前記第２の畳込み演算は，前記プーリング演算部で選択された前記ベクトルデータに対して，前記後半部分の行列データによる畳込み演算を実行して第２の演算データを得，
前記プーリング演算部の最大値サンプリングの演算結果と，前記第２の演算データを，全部または部分的に加算することで，畳込みニューラルネットワークの中間層データを得るものであって，
前記２分割された行列データを準備するために，
認識精度の目標値を設定可能とし，
前記しきい値を変更しながら当該しきい値に応じて分割された前記行列データを用いて前記畳込みニューラルネットワークを構成し，テストデータを用いて認識精度を取得し，
前記認識精度の目標値を満足する，前記しきい値を決定する，
畳込みニューラルネットワークの学習方法。
【請求項９】
前記行列データを特異値分解し，前記しきい値と比較して大きい特異値データに対応する部分行列を前半部分とし，前記しきい値と比較して小さい特異値データに対応する部分行列を後半部分とすることを特徴とする
請求項８の畳込みニューラルネットワークの学習方法。
【請求項１０】
前記行列データを固有値分解し，前記しきい値と比較して大きい固有値データに対応する部分行列を前半部分とし，前記しきい値と比較して小さい固有値データに対応する部分行列を後半部分とすることを特徴とする
請求項８の畳込みニューラルネットワークの学習方法。
【請求項１１】
畳込みニューラルネットワークを備える処理装置であって，
前記ニューラルネットワークは，行列ベクトル積による畳込み演算を行う畳込み演算部と，最大値サンプリング演算を行うプーリング演算部を具備し，
前記畳込み演算に用いる行列データを格納する行列保存領域を具備し，
前記行列保存領域に格納される前記行列データは，前半部分と後半部分に２分割されており，
前記畳込み演算部は前記前半部分の行列データによる第１の畳込み演算と，前記後半部分の行列データによる第２の畳込み演算とを個別に実行し，
前記第１の畳込み演算は，前記プーリング演算部の最大値サンプリング演算に用いられる第１の演算データを生成し，
前記プーリング演算部は，前記第１の演算データを用いた前記最大値サンプリング演算に伴って，前記第２の畳込み演算を行うべきベクトルデータを選択し，
前記第２の畳込み演算は，前記プーリング演算部で選択された前記ベクトルデータに対して，前記後半部分の行列データによる畳込み演算を実行して第２の演算データを得，
前記プーリング演算部の最大値サンプリングの演算結果と，前記第２の演算データを全部または部分的に加算することで，畳込みニューラルネットワークの中間層データを得ることを特徴とする，
畳込みニューラルネットワークを備える処理装置。
【請求項１２】
前記畳込み演算部で行われる畳込み演算の行列データはしきい値が設定され，
前記行列データは前記しきい値を基準に前半部分と後半部分に２分割されており，
前記行列データの前半部分は前記行列データの主要項を比較的多く含み，また，前記行列データの後半部分は前記行列データの主要項を比較的少なく含む，
請求項１１記載の畳込みニューラルネットワークを備える処理装置。
【請求項１３】
前記プーリング演算部は，複数設けられたバッファから，複数のベクトルデータからなる前記第１の演算データを受信し，
前記プーリング演算部は，前記最大値サンプリングにより，前記複数のベクトルデータから最大値ベクトルを生成し，
前記プーリング演算部は，前記最大値ベクトルを生成するための値を，前記複数のベクトルデータのいずれから採用したかを最大点ベクトルとして記憶し，
最も採用が多かったベクトルデータを，前記第２の畳込み演算を行うべきベクトルデータとして選択する，
請求項１１記載の畳込みニューラルネットワークを備える処理装置。
【請求項１４】
前記プーリング演算部の最大値サンプリングの演算結果と，前記第２の演算データを全部または部分的に加算するベクトル和演算ユニットを備え，
前記ベクトル和演算ユニットは，前記最大値サンプリングの演算結果と，前記第２の演算データを全部または部分的に加算する際に，前記最大値ベクトルを生成するための値を，前記第２の畳込み演算を行うべきベクトルデータとして選択したベクトルデータから採用している場合に，当該値に関する前記第２の演算データを加算する，
請求項１３記載の畳込みニューラルネットワークを備える処理装置。
【請求項１５】
前記畳込み演算に用いる行列データを格納する行列保存領域は，前記行列データの，前半部分と後半部分のそれぞれのために，前半保存領域と後半保存領域を備え，
前記畳込み演算部は，前記前半部分の行列データによる第１の畳込み演算を行う第１の演算部と，前記後半部分の行列データによる第２の畳込み演算とを行う第２の演算部を備え，
前記第１の演算部は，前記複数のベクトルデータの全てを入力とするとともに，前記前半保存領域から前記前半部分の行列データを入力とし、
前記第２の演算部は，前記複数のベクトルデータの一つを入力とするとともに，前記後半保存領域から前記後半部分の行列データを入力とする、
請求項１３記載の畳込みニューラルネットワークを備える処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、特に畳込みニューラルネットワークに係る技術に関する。
【背景技術】
【０００２】
近年，一般画像認識といった難易度の高い機械学習のタスクに，畳込みニューラルネットワークを用いることで，高い認識率を達成可能であることがわかった。一般画像認識とは，例えば，一枚の画像に写った物体の種類を識別するタスクである。畳込みニューラルネットワークとは，パーセプトロンを多層に組合せて特徴量抽出を複数回にわたって実行し，入力の認識を行う技術である。
【０００３】
畳込みニューラルネットワークの技術が発展した背景には，計算機の性能向上が挙げられる。畳込みニューラルネットワークは認識時に多量の行列演算を実行する必要があり，それら行列パラメータの訓練には近年のマルチコア技術やGPGPU（General-purpose computing on graphics processing units）技術が必要不可欠である。したがって畳込みニューラルネットワークを用いて一般画像認識や音声認識などの機械学習のタスクを高速に実行するには，多量の計算資源を必要とする。
【０００４】
このため畳込みニューラルネットワークを組込み機器などで実行するために，畳込みニューラルネットワークの演算時間や消費電力を削減するための技術開発が盛んに行われている。畳込みニューラルネットワークの消費電力を削減するための技術には，たとえば一例を挙げるならば，非特許文献１で開示されている技術がある。非特許文献１で開示されている技術では，畳込みニューラルネットワークの畳込み層における行列ベクトル積を，符号のみの演算に近似することで消費電力を低減する。
【０００５】
しかしながら，非特許文献１の技術では，近似演算の結果を受けて，絞り込んだ領域において通常の畳込み演算をやり直していた。したがって，畳込み演算の近似に用いた演算結果は，再利用されない。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Ujiie, Takayuki, Masayuki Hiromoto, and Takashi Sato. "Approximated Prediction Strategy for Reducing Power Consumption of Convolutional Neural Network Processor." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition Workshops. 2016.
【発明の概要】
【発明が解決しようとする課題】
【０００７】
非特許文献１で開示されている技術では，総合的に見れば演算量を低減することができるが，畳込み演算の近似に用いた演算結果を再利用できず，消費電力の低減効果に限界があった。そこで本発明の目的は，畳込み演算の近似に用いた演算データを再利用することで演算量と消費電力を低減することが可能な技術を提供することである。
【課題を解決するための手段】
【０００８】
本発明の一側面は，畳込みニューラルネットワークによる処理方法であって，ニューラルネットワークは，行列ベクトル積による畳込み演算を行う畳込み演算部と，最大値サンプリング演算を行うプーリング演算部を具備する。畳込み演算部で行われる畳込み演算のための行列データはしきい値が設定され，行列データはしきい値を基準に前半部分と後半部分に２分割されており，行列データの前半部分は行列データの主要項を比較的多く含み，また，行列データの後半部分は行列データの主要項を比較的少なく含む。畳込み演算部は，前半部分の行列データによる前半部分の畳込み演算と，後半部分の行列データによる後半部分の畳込み演算とを２分割して実行する。前半部分の畳込み演算は，プーリング演算部の最大値サンプリング演算に用いられる第１の演算データを生成するための演算を実行する。プーリング演算部は，最大値サンプリング演算に伴って，後半部分の畳込み演算で，行列ベクトル積の畳込み演算を適用すべきベクトルデータを選択する。後半部分の畳込み演算は，プーリング演算部で選択されたベクトルデータに対して，畳込み演算を実行して第２の演算データを生成する。プーリング演算部の最大値サンプリング演算の結果と，第２の演算データを，全部または部分的に加算することで，畳込みニューラルネットワークの中間層データを得る。
【０００９】
本発明の他の一側面は、畳込みニューラルネットワークの畳込み演算の行列データの演算パラメータを決定するための，畳込みニューラルネットワーク学習方法である。畳込みニューラルネットワークは，行列ベクトル積による畳込み演算を行う畳込み演算部と，最大値サンプリング演算を行うプーリング演算部を具備するものである。また，畳込み演算に用いる行列データを格納する行列保存領域を具備するものである。行列保存領域に格納される行列データは，しきい値に基づいて前半部分と後半部分に２分割されている。畳込み演算部は前半部分の行列データによる第１の畳込み演算と，後半部分の行列データによる第２の畳込み演算とを個別に実行する。第１の畳込み演算は，プーリング演算部の最大値サンプリング演算に用いられる第１の演算データを生成する。プーリング演算部は，第１の演算データを用いた最大値サンプリング演算に伴って，第２の畳込み演算を行うべきベクトルデータを選択する。第２の畳込み演算は，プーリング演算部で選択されたベクトルデータに対して，後半部分の行列データによる畳込み演算を実行して第２の演算データを得る。プーリング演算部の最大値サンプリングの演算結果と，第２の演算データを，全部または部分的に加算することで，畳込みニューラルネットワークの中間層データを得るものである。このような畳込みニューラルネットワークの学習において，２分割された行列データを準備するために，認識精度の目標値を設定可能とし，しきい値を変更しながら当該しきい値に応じて分割された行列データを用いて畳込みニューラルネットワークを構成し，テストデータを用いて認識精度を取得し，認識精度の目標値を満足する，しきい値を決定する。
【００１０】
本発明の他の一側面は、畳込みニューラルネットワークを備える処理装置である。ニューラルネットワークは，行列ベクトル積による畳込み演算を行う畳込み演算部と，最大値サンプリング演算を行うプーリング演算部を具備し，畳込み演算に用いる行列データを格納する行列保存領域を具備する。行列保存領域に格納される行列データは，前半部分と後半部分に２分割されており，畳込み演算部は前半部分の行列データによる第１の畳込み演算と，後半部分の行列データによる第２の畳込み演算とを個別に実行する。第１の畳込み演算は，プーリング演算部の最大値サンプリング演算に用いられる第１の演算データを生成する。プーリング演算部は，第１の演算データを用いた最大値サンプリング演算に伴って，第２の畳込み演算を行うべきベクトルデータを選択する。第２の畳込み演算は，プーリング演算部で選択されたベクトルデータに対して，後半部分の行列データによる畳込み演算を実行して第２の演算データを得，プーリング演算部の最大値サンプリングの演算結果と，第２の演算データを全部または部分的に加算することで，畳込みニューラルネットワークの中間層データを得る。
【発明の効果】
【００１１】
本発明によれば，畳込みニューラルネットワークの畳込み演算の演算量と消費電力が，効率的に低減可能となる。前述した以外の課題，構成及び効果は，以下の実施の形態により明らかになる。
【図面の簡単な説明】
【００１２】
【図１】実施例における畳込みニューラルネットワークの構成の全体像を示す概念図。
【図２】実施例における畳込み演算とプーリング演算の組合せの詳細を説明する概念図。
【図３】実施例の畳込み演算の行列ベクトル積で用いられる行列データの概念図。
【図４】実施例の畳込み演算とプーリング演算を演算する装置の装置構成を示すブロック図。
【図５】実施例の演算ユニット部分の詳細を示したブロック図。
【図６】実施例における画像認識の処理フローを示す流れ図。
【図７】実施例における畳込み演算とプーリング演算の組合せの処理を示すフロー図。
【図８】実施例における畳込み演算とプーリング演算の組合せの下位の処理を示すフロー図。
【図９】実施例における各バッファにデータを保存する処理を示すフロー図。
【図１０】実施例におけるベクトルF をバッファF 164に保存する処理を示すフロー図。
【図１１】実施例における，畳込み演算とプーリング演算のタイミングを示すチャート図。
【図１２】他の実施例における畳込みニューラルネットワークの構成の全体像を示す概念図。
【図１３】実施例の画像認識処理装置を構成するまでの処理を示すフロー図。
【図１４】図１３の処理の一部を詳細に説明する画像認識装置開発の処理を示すフロー図。
【図１５】畳込みニューラルネットワークのネットワークパラメータを得るための処理を示すフロー図。
【発明を実施するための形態】
【００１３】
以下，実施例を図面に基づいて説明する。なお，実施例を説明する全図において，同一の機能を有する部材には同一の符号を付し，その繰り返しの説明は特に必要な場合を除き省略する。
【００１４】
同一あるいは同様な機能を有する要素が複数ある場合には，同一の符号に異なる添字を付して説明する場合がある。ただし、複数の要素を区別する必要がない場合には，添字を省略して説明する場合がある。
【００１５】
本明細書等における「第１」、「第２」、「第３」などの表記は，構成要素を識別するために付するものであり，必ずしも，数，順序，もしくはその内容を限定するものではない。また，構成要素の識別のための番号は文脈毎に用いられ，一つの文脈で用いた番号が，他の文脈で必ずしも同一の構成を示すとは限らない。また、ある番号で識別された構成要素が，他の番号で識別された構成要素の機能を兼ねることを妨げるものではない。
【００１６】
図面等において示す各構成の位置，大きさ，形状，範囲などは，発明の理解を容易にするため，実際の位置，大きさ、形状、範囲などを表していない場合がある。このため，本発明は，必ずしも，図面等に開示された位置，大きさ，形状，範囲などに限定されない。
【００１７】
以下の実施例の概要の一例を挙げるならば，畳込み層のあとにプーリング層を持つ畳込みニューラルネットワークであり，畳込み層の行列を前半部分と後半部分に分割して保持してある。行列の前半部分は行列の主要項を多く含むようにし，行列の後半部分は行列の誤差項を多く含むようにする。このために行列を特異値分解し，しきい値となる特異値より大きい（あるいは以上の）特異値に対応する行列成分を前半部分に割り当て，しきい値より小さい（あるいは以下の）特異値に対応する行列成分を後半部分に割り当てる。この畳込みニューラルネットワークの畳込み演算は，行列前半部分に対応する畳込み演算と行列後半部分に対応する畳込み演算の2つに分割される。行列前半部分の畳込み演算は，プーリング演算でどのデータをサンプリングするかの予測に用いられる。予測されたデータ領域のみに大して後半部分の畳込み演算を実行し，前半部分の畳込み演算結果に加算することで演算精度を確保する。
【実施例１】
【００１８】
図１に，本実施例における畳込みニューラルネットワークの構成の全体像を示す。入力データである画像データ（入力層）100に対して第１の畳込み演算conv1 200を適用することで中間層101を得る。中間層101にプーリング演算pool1 201を適用することで中間層102を得る。中間層102に畳込み演算conv2 202を適用することで中間層103を得る。中間層103にプーリング演算pool2 203を適用することで中間層104を得る。
【００１９】
中間層104に全結合演算ip1 204を適用することで中間層105を得る。中間層105に活性化演算relu1 205を適用することで中間層106を得る。中間層106に全結合演算ip2 202を適用することで中間層107を得る。中間層107の出力に基づいて，例えば画像の認識結果Ｍを得ることができる。
【００２０】
本実施例では，画像データ（入力層）100に畳込み演算conv1 200とプーリング演算pool1 201を適用し中間層102を適用する部分108を，従来と一部変更する。わかりやすさのために，従来の一般的構成及び本実施例の畳込みニューラルネットワークのconv1とpool1の組合せ108を対比して説明する。本実施例で行う演算は，従来の演算の近似演算であるため，従来と同等の演算結果を出力することを目標として構成される。
【００２１】
まずは従来の畳込みニューラルネットワークにおけるconv1とpool1の組合せ108aについて説明する。従来の畳込みニューラルネットワークでは，まず畳込み演算conv1 200aの演算を行い，つぎにプーリング演算pool1 201aを行う。従来の畳込み演算conv1 200aでは，画像データ（入力層）100の一部のベクトルデータ110に行列ベクトル積を適用することで，中間層101aの一部のベクトルデータ111aを生成する。従来のプーリング演算201aでは，中間層101aの一部のベクトルデータ112aからそれぞれ最大値をサンプリングし，次の中間層102のベクトルデータ113とする。
【００２２】
図２は、図１の畳込みニューラルネットワークのうち，畳込み演算conv1とプーリング演算pool1の組合せ108bの詳細を説明する概念図である。図１と図２の双方に本実施例の畳込みニューラルネットワークのconv1とpool1の組合せ108bを示している。
【００２３】
図１と図２を参照して，本実施例の畳込み演算conv1とプーリング演算pool1の組合せ108bについて説明する。本実施例では，畳込み演算conv1は，前半部分200b-1と後半部分200b-2の2つに分割される。まず前半部分の畳込み演算conv1 200b-1を行い，つぎにプーリング演算pool1 201bを行い，最後に後半部分の畳込み演算conv1 200b-2を行う。
【００２４】
本実施例の前半部分の畳込み演算conv1 200b-1では，画像データ100の一部のベクトルデータ110に前半の行列ベクトル積を適用することで，中間層101bの一部のベクトルデータ111bを生成する。前半部分の畳込み演算conv1 200b-1は，いわば行列の主要項のみを演算しており，このあとに続く本実施例のプーリング演算pool1 201bで最大値を正しく検出できる程度の精度を確保できればよい。
【００２５】
図２の符号を参照して説明すると，本実施例のプーリング演算pool1 201bでは，中間層101bの一部のベクトルデータ112bからそれぞれ最大値をサンプリングし，次の中間層102b-1のベクトルデータ113b-1とする。このとき，本実施例のプーリング演算pool1 201bでは，ベクトルデータ112b内部の複数（例えば４つ）のベクトルデータ111bのなかでどのベクトルデータ111bの値が最もサンプリングされたかを集計し，そのサンプリングされた数が最も多いベクトルデータ111bに対応する画像データ（入力層）100のベクトルデータ110を検出する。
【００２６】
本実施例のプーリング演算pool1 201bで検出された入力層100のベクトルデータ110に対して本実施例の後半部分の畳込み演算conv1 200b-2を適用し，演算の結果得られたベクトルデータ113b-2を中間層102b-1のベクトルデータ113b-1に加算する。この後半部分の畳込み演算conv1 200b-1は，前半部分の畳込み演算conv1 200b-1で不足していた演算精度を補うことを目的としている。
【００２７】
図３は，本実施例の画像認識装置の畳込み演算conv1 108bの行列ベクトル積で用いられる行列データを概念的に示す図である。まず，従来の畳込み演算conv1 108aの行列ベクトル積で用いられる行列データA 131を，n行m列の短形行列であるとする。本実施例では畳込み演算conv1 200bを２分割するため，行列データも２分割する。その基準となるのが，行列データA 131の特異値である。
【００２８】
本実施例では，この行列データA 131を特異値分解により数学的に等価な３つの行列の積に分解する。特異値分解自体は，数学的に知られた手法である。３つの行列とはすなわち，n行n列の左直交行列U 132と，n行n列の対角行列S 133と，n行m列の右直交行列VT 134である。対角行列行列S 133の対角成分には，行列A 131の特異値が降順に並ぶ。そこで，特異値の大きさに基準値を設け，基準値を基準に行列を分割する。たとえば，その基準値よりも大きい特異値に対応した行列を前半部分とし，その基準値以下の特異値に対応した行列が後半部分とする。
【００２９】
本実施例では基準値をk番目の特異値skとする。したがって大きい順にk個の特異値を並べた特異値行列をk行k列の前半部分の対角行列Sk 137とし，残りの特異値を並べた特異値行列を(n-k)行(n-k)列の後半部分の対角行列S(n-k)138とする。左直交行列U 132および右直交行列VT 134も，特異値を基準に前後半に分割する。
【００３０】
前半部分の対角行列Sk 137に対応した前半k列のn行k列の部分行列Uk 135を左直交行列U 132の前半部分とし，それ以外の後半(n-k)列のn行(n-k)列の部分行列U(n-k)136を左直交行列U 132の後半部分とする。同様に，前半部分の対角行列Sk 137に対応した前半k行のk行m列の部分行列VkT 139を右直交行列VT 134の前半部分とし，それ以外の後半(n-k)行の(n-k)行m列の部分行列V(n-k)T140を右直交行列VT 134の後半部分とする。左直交行列の前半部分Uk 135と対角行列の前半部分Sk 137と右直交行列の前半部分VkT 139の積である(UkSkVkT) 141を前半部分の畳込み演算conv1 200b-1で用いる行列データとし，左直交行列の後半部分U(n-k) 136と対角行列の後半部分S(n-k) 138と右直交行列の後半部分V(n-k)T 140の積である(U(n-k)S(n-k)V(n-k)T) 142を後半部分の畳込み演算conv1 200b-2で用いる行列データとする。当然ながら，行列の前半部分(UkSkVkT) 141と(U(n-k)S(n-k)V(n-k)T) 142の和は，行列A 131に等しい。
【００３１】
本実施例では，まず前半部分の行列に対して畳込み演算を行い，最大値を求める。次に，後半部分の行列のうち，最大値を出力する限定された領域に対して，畳込み演算を行う。そして，前半部分の演算結果に，後半部分の演算結果を加算する。数理的には，前半部分の大きな特異値に対応する部分が，その行列の主要項であり，後半部分の小さい特異値に対応する部分が，その行列の誤差項となる。このため，最大値の判定には主要項だけを用いて演算結果を用いている。
【００３２】
前半部分と後半部分をどこで切り分けるかは，用途や要求精度によって決めればよいが，基本的には，精度と処理負荷（装置規模、消費電力、計算時間等）のトレードオフになる。すなわち，前半部分の割合を大きくすれば，精度が向上するが，処理負荷も増大する。前半部分の割合を小さくすれば，精度が低下するが，処理負荷も低下する。後の実施例6は，前半部分と後半部分の切断点の決定手法について説明するものである。
【００３３】
図４は，本実施例の畳込み演算conv1とプーリング演算pool1を演算する装置の装置構成を示すブロック図である。このような装置構成は，例えばプロセッサとメモリと入力装置と出力装置を備える，通常のコンピュータ（例えばサーバ）によって実現することができる。サーバで構成する場合には，各演算ユニット155,157,163等はメモリに格納されたソフトウエアをプロセッサが実行することにより構成される。また，データを格納する各バッファ154，156等は、メモリを利用して記憶される。画像データ等の処理対象となるデータは，入力装置から入力され，結果は出力装置により例えば画像出力装置にて表示される。以上の構成は，単体のコンピュータで構成してもよいし，あるいは，入力装置，出力装置，プロセッサ，メモリの任意の部分が，ネットワークで接続された他のコンピュータで構成されてもよい。
【００３４】
また，他の構成例としては，ソフトウエアで構成した機能と同等の機能は、FPGA（Field Programmable Gate Array）、ASIC（Application Specific Integrated Circuit）などのハードウエアでも実現できる。例えば，図４と等価な構成は，FPGAの論理ブロックをプログラムすることによって実現することができる。このようなFPGAは，畳込みニューラルネットワークの演算を行う専用の１チップのデバイスとして構成することもできる。この場合，FPGAは例えば上位コントローラである汎用のプロセッサに全体を制御され，処理すべきデータは必要に応じて上位コントローラから提供し，結果を上位コントローラに返すように構成することができる。あるいは、自分を制御するための簡単なコントローラを，自デバイス内に備えても良い。
【００３５】
図５は，図４の装置のうち演算ユニット部分の詳細を示したブロック図である。
【００３６】
まず図４について説明する。メモリロードユニット153は，畳込みニューラルネットワークの入力層100のデータを保存しているメモリ（図示せず）から，その一部のベクトルデータ110をロードしバッファA 154に保存するユニットである。
【００３７】
バッファA 154は４本の記憶領域を持ち，4種類のベクトルデータ110を保持する。これは本実施例のプーリング演算pool1 201aが４つのデータから１つの最大値を検出することに対応している。なお，この例では構成を簡単に説明するため，４つのバッファを用いているが、その数は任意であり，特に4個に限定するものではない。
【００３８】
メモリロードユニット153の処理が完了すると，つぎに行列前半部分の行列ベクトル積演算ユニット155が行列ベクトル積の演算を実行する。行列ベクトル積演算ユニット155は，行列保存領域150の中の前半部分の畳込み演算conv1のための行列保存領域151に保存されている前半部分の行列データ(UkSkVkT) 141と，バッファA 154に保存されているうち1本のベクトルデータ110を用いて行列ベクトル積を実行し，バッファB 156に演算結果を保存する。
【００３９】
ここでバッファB 156に保存された演算結果は中間層101bの一部のベクトルデータ111bである。行列ベクトル積演算ユニット155は，４つのベクトルデータ110に対して行列ベクトル積を演算し，４つのベクトルデータ111bを出力する。
【００４０】
プーリング演算実行ユニット157は，プーリング演算の最大値検出を実行するユニットである。詳細は次の図５で説明する。プーリング演算実行ユニット157は，セレクト信号線158を通じてセレクト信号を出力するほか，バッファC 160，バッファD 161と接続し演算結果を出力し保存する。
【００４１】
プーリング演算実行ユニット157の演算が終了すると，行列後半部分の行列ベクトル積演算ユニット159が行列ベクトル積の演算を実行する。後半部分の行列ベクトル積演算ユニット159は，行列保存領域150の中の後半部分の畳込み演算conv1のための行列保存領域152に保存されている後半部分の行列データ(U(n-k)S(n-k)V(n-k)T) 142と，バッファA 154に保存されている４本のベクトルデータ110の中からセレクト信号線158によって選択される1本のベクトルデータ110との行列ベクトル積を実行し，その演算結果をバッファE 162に保存する。
【００４２】
ベクトル和演算ユニット163はベクトルの和を演算するユニットである。詳細は次の図５で説明する。ベクトル和演算ユニット163の演算結果はバッファF 164に保存される。バッファF 164に保存された演算結果は中間層102の一部のベクトルデータ113であり，メモリストアユニット165によって畳込みニューラルネットワークの中間層102のデータを保持するメモリ（図示せず）にストアされる。
【００４３】
図５を用いてプーリング演算実行ユニット157とベクトル和演算ユニット163について説明する。プーリング演算実行ユニット157は最大値検出・最大点検出ユニット170とバッファG 171と最大点計数ユニット172と比較ユニット173によって構成される。
【００４４】
最大値検出・最大点検出ユニット170は，バッファB 156に保存されている４本のベクトルデータ111bの各要素を比較し，最大値からなる最大値ベクトルDをバッファD 161に保存する最大値サンプリングを行う。また最大値検出・最大点検出ユニット170は同時に，最大値となったベクトルデータがバッファB1〜B4のうち，それぞれどの番号のバッファから選択されたかを検出し，最大点ベクトルGとしてバッファG 171に保存する。
【００４５】
最大点計数ユニット172は最大点を最も多く出力したベクトルデータの番号を検出し，セレクト信号としてセレクト信号線158により出力する。セレクト信号線158は，行列ベクトル積演算ユニット（後半部分）159に入力されるベクトルデータを，バッファA1〜A4から選択する。最大点計数ユニット172の演算が終了すると，比較ユニット173が演算を開始する。
【００４６】
比較ユニット173はバッファGに保存されている最大点ベクトルGのデータとセレクト信号線158から出力される最大点データを比較し，一致する要素は「1」とし一致しない要素は「0」として，比較結果ベクトルCを生成しバッファC 160に保存する。この「0」「1」のデータは，バッファDに格納された最大値ベクトルDの各要素が，セレクト信号線158でバッファA1〜A4から選択されるバッファのベクトルデータに基づくものか，そうでないかを識別する。
【００４７】
比較ユニット173がバッファG 171に保存されている最大点ベクトルGのすべての要素に対して比較演算を終了し，比較結果ベクトルCとしてバッファC 160に演算結果を保存すると，プーリング演算実行ユニット157の演算は終了しベクトル和演算ユニット163の演算が開始する。
【００４８】
ベクトル和演算ユニットはバッファC 160，バッファD 161，そしてバッファE 162に保存されているベクトルデータを参照し要素ごとに演算を行い，演算結果をバッファF 164に保存する。もしバッファC 160に保存されたデータが「1」ならばバッファD 161とバッファE 162の和を演算しその結果をバッファF 164に保存する。もしバッファC 160に保存されたデータが「0」ならばバッファD 161のデータをバッファF 164に保存する。
【００４９】
図６は，図１に示した本実施例における画像認識の処理フローを示す図である。処理108bの演算は，図４および図５に示した構成により実行する。他の各演算は，従来と同様の処理で良く，それぞれ専用の演算ユニットで実行することができる。なお、畳込み演算やプール演算は，基本的に同様の行列演算なので，同じ演算ユニットを異なる層の演算で共通に使用することもできる。
【００５０】
ステップ300: 画像認識の処理フローを開始する。
【００５１】
ステップ301: 画像を畳込みニューラルネットワークの入力層100に入力する。
【００５２】
ステップ108b: 本実施例の畳込み演算conv1とプーリング演算pool1の組合せ108bにより，入力層100から中間層データ102を出力する。詳細は図７と図８で説明する。
【００５３】
ステップ202: 畳込み演算conv2により，中間層データ102から中間層データ103を出力する。
【００５４】
ステップ203: プーリング演算pool2により，中間層データ103から中間層データ104を出力する。
【００５５】
ステップ204: 全結合演算ip1により，中間層データ104から中間層データ105を出力する。
【００５６】
ステップ205: 活性化演算relu1により，中間層データ105から中間層データ106を出力する。
【００５７】
ステップ206: 全結合演算ip2により，中間層データ106から中間層データ107を出力する。
【００５８】
ステップ302: 中間層データ107の最大値を検出することで，画像の認識結果を出力する。
【００５９】
ステップ303: 画像認識の処理フローを終了する。
【００６０】
図７は本実施例における畳込み演算conv1とプーリング演算pool1の組合せ108bの処理フローを示す図である。
【００６１】
ステップ304: 畳込み演算conv1とプーリング演算pool1の組合せ108bの処理フローを開始する。
【００６２】
ステップ305: メモリロードユニット153が，この処理フローの下位の処理フローで用いられる次の４本の部分的なベクトルデータ110を入力層100から抜粋し用意する。
【００６３】
ステップ306: 畳込み演算conv1とプーリング演算pool1の組合せ108bの下位の処理フローである。詳細は図８で説明する。
【００６４】
ステップ307: 入力層100の全ての部分のベクトルデータ110を処理完了したならばステップ308に進み，そうでないならばステップ305に進む。
【００６５】
ステップ308: 畳込み演算conv1とプーリング演算pool1の組合せ108bの処理フローを終了する。
【００６６】
図８は本実施例における畳込み演算conv1とプーリング演算pool1の組合せ108bの下位の処理フロー306を示す図である。図２乃至図５を参照しつつ処理を説明する。
【００６７】
ステップ180: 畳込み演算conv1とプーリング演算pool1の組合せ108bの下位の処理フローを開始する。
【００６８】
ステップ181: iを1で初期化する。
【００６９】
ステップ182: メモリロードユニット153が，i本目のベクトルAi 110を，i本目のバッファAi 154にロードする。図４の例ではバッファAは4列あるため，処理182から185は4回繰り返し行われることになる。もっとも，先に述べたようにこの数は任意である。
【００７０】
ステップ183: 行列前半部分の行列ベクトル積演算ユニット155が，行列前半部分(UkSkVkT) 141とi本目のバッファAi 154に保存されているi本目のベクトルAi 110との行列ベクトル積の演算を実行し，演算結果としてベクトルBi 111bを得る。ベクトルBi 111bはi本目のバッファBi 156に保存される。
【００７１】
ステップ184: iを(i+1)で更新する。
【００７２】
ステップ185: iが4より大きければステップ186に進み，そうでなければステップ182に進む。以上の処理で，行列前半部分(UkSkVkT) 141を用いた演算結果が，バッファBi 156に格納される。
【００７３】
ステップ186: プーリング演算実行ユニット157が{1,2,3,4}の中から最大点を選びjとして保存する。同時に，比較結果ベクトルCをバッファC 160に保存し，最大値ベクトルDをバッファD 161に保存する。詳細は図９で説明する。
【００７４】
ステップ187: 行列後半部分の行列ベクトル積演算ユニット159が，行列後半部分(U(n-k)S(n-k)V(n-k)T) 142とバッファAj 154に保存されているj本目のベクトルAj 110との行列ベクトル積の演算を実行し，演算結果としてベクトルEを得る。ベクトルEはバッファE 162に保存される。本実施例では，行列後半部分を用いた演算は，バッファA 154に格納される４つのベクトルのうち，一つに対してだけ行えば良いので，演算量を低減することができる。
【００７５】
ステップ188: ベクトル和演算ユニット163が，バッファD 161の最大値ベクトルDとバッファE 162のベクトルEを部分的に加算し，演算結果としてベクトルFを得る。ベクトルF 113はバッファF 164に保存する。詳細は,図１０で説明する。
【００７６】
ステップ189: メモリストアユニット165が，バッファF 164に保存されたベクトルF 113をメモリ（図示せず）にストアする。
【００７７】
ステップ190: 畳込み演算conv1とプーリング演算pool1の組合せ108bの下位の処理フローを終了する。
【００７８】
図９は本実施例におけるプーリング演算実行ユニット157が，{1,2,3,4}の中から最大点を選びjとして保存すると同時に，比較結果ベクトルCをバッファC 160に保存し最大値ベクトルDをバッファD 161に保存する処理フローを示す図である。
【００７９】
ステップ210: プーリング演算実行ユニット157が，{1,2,3,4}の中から最大点を選びjとして保存すると同時に，比較結果ベクトルCをバッファC 160に保存し最大値ベクトルDをバッファD 161に保存する処理フローを開始する。
【００８０】
ステップ211: スカラー値iを0で初期化し，ベクトル値countを{0,0,0,0}で初期化する。
【００８１】
ステップ212: 最大値検出・最大点検出ユニット170は，ベクトルB1[i]，ベクトルB2[i]，ベクトルB3[i]，ベクトルB4[i]の最大点を検出する処理を実行し，その結果を最大点ベクトルG[i]とする。すなわち，最大点ベクトルG[i] ← maxarg(ベクトルB1[i],ベクトルB2[i],ベクトルB3[i],ベクトルB4[i])とする。
【００８２】
ステップ213: 最大点計数ユニット172は，選択された最大点をカウントする。すなわち，count[最大点ベクトルG[i]-1]←count[最大点ベクトルG[i]-1]とする。その後，最大点ベクトルG[i]をバッファG 171に保存する。
【００８３】
ステップ214: 最大値検出・最大点検出ユニット170は，ベクトルB1[i]，ベクトルB2[i]，ベクトルB3[i]，ベクトルB4[i]の最大値を検出する処理を実行し，その結果を最大値ベクトルD[i]とする。すなわち，最大値ベクトルD[i] ← max(ベクトルB1[i],ベクトルB2[i],ベクトルB3[i],ベクトルB4[i])とする。その後，最大値ベクトルD[i]をバッファD 161に保存する。
【００８４】
ステップ215: iを(i+1)で更新する。
【００８５】
ステップ216: iがベクトルBの要素数より少なければステップ212へと進み，そうでないならステップ217へと進む。
【００８６】
ステップ217: 最大点計数ユニット172 は，(カウントされた最大点)+1をjとする。すなわち，j ←1+max(count[0], count[1], count[2], count[3])とする。
【００８７】
ステップ218: kを0で初期化する。
【００８８】
ステップ219: 比較ユニット173は，ベクトルF[k]と最大点jを比較する。等しければステップ220へと進み，等しくなければステップ221へと進む。
【００８９】
ステップ220: 比較結果ベクトルC[k]を「1」とし，バッファC 160に保存する。
【００９０】
ステップ221: 比較結果ベクトルC[k]を「0」とし，バッファC 160に保存する。
【００９１】
ステップ222: kを(k+1)で更新する。
【００９２】
ステップ223: kが比較結果ベクトルCの要素数より少なければステップ219へと進み，そうでないならステップ224へと進む。
【００９３】
ステップ224: プーリング演算実行ユニット157{1,2,3,4}の中から最大点を選びjとして保存すると同時に，比較結果ベクトルCをバッファC 160に保存し最大値ベクトルDをバッファD 161に保存する処理フローを終了する。
【００９４】
図１０は，ベクトル和演算ユニット163が，バッファD 161の最大値ベクトルDとバッファE 162のベクトルEを部分的に加算し，演算結果としてベクトルFを得，またベクトルF 113はバッファF 164に保存する処理フローを示す図である。
【００９５】
ステップ230: ベクトル和演算ユニット163が，バッファD 161の最大値ベクトルDとバッファE 162のベクトルEを部分的に加算し，演算結果としてベクトルFを得，またベクトルF 113はバッファF 164に保存する処理フローを開始する。
【００９６】
ステップ231: iを0で初期化する。
【００９７】
ステップ232: 比較結果ベクトルC[i]が1と等しいか比較する。等しいならステップ233に進み，等しくないならステップ234に進む。
【００９８】
ステップ233: 最大値ベクトルD[i]とベクトルE[i]の和を取り，その演算結果をベクトルF[i]とする。
【００９９】
ステップ234: 最大値ベクトルD[i]をベクトルF[i]とする。
【０１００】
ステップ235: iを(i+1)で更新する。
【０１０１】
ステップ236: iが最大値ベクトルDの要素数より少なければステップ232へと進み，そうでないならステップ237へと進む。
【０１０２】
ステップ237: ベクトルF 113をバッファF 164に保存する。
【０１０３】
ステップ238: ベクトル和演算ユニット163が，バッファD 161の最大値ベクトルDとバッファE 162のベクトルEを部分的に加算し，演算結果としてベクトルFを得，またベクトルF 113はバッファF 164に保存する処理フローを終了する。
【０１０４】
図１１は，本実施例における，本実施例の畳込み演算conv1とプーリング演算pool1を演算する装置のタイミングチャートを示す図である。本実施例の演算装置の各ユニットはそれぞれ独立しているため，それぞれの演算装置で必要とするデータが全て揃った段階で演算を開始することができる。本タイミングチャートでは，各ユニットの演算実行タイミングを示す。まずメモリロードユニット153は，４本のベクトルデータ110をバッファA 154にロードする。
【０１０５】
演算240: メモリロードユニット153は，１本目のベクトルデータA-1 110をバッファA-1 154にロードする。
【０１０６】
演算241: メモリロードユニット153は，２本目のベクトルデータA-2 110をバッファA-2 154にロードする。
【０１０７】
演算242: メモリロードユニット153は，２本目のベクトルデータA-3 110をバッファA-3 154にロードする。
【０１０８】
演算243: メモリロードユニット153は，２本目のベクトルデータA-4 110をバッファA-4 154にロードする。
【０１０９】
演算244: 演算240が完了した段階で開始可能となる。前半部分の行列ベクトル積演算ユニット155が，１本目のベクトルデータA-1 110を用いて前半部分の行列ベクトル積を演算し，１つ目の演算結果であるベクトルデータB-1 111bをバッファB-1 156に保存する。
【０１１０】
演算245: 演算241が完了した段階で開始可能となる。前半部分の行列ベクトル積演算ユニット155が，１本目のベクトルデータA-2 110を用いて行列ベクトル積を演算し，２つ目の演算結果であるベクトルデータB-2 111bをバッファB-2 156に保存する。
【０１１１】
演算246: 演算242が完了した段階で開始可能となる。前半部分の行列ベクトル積演算ユニット155が，１本目のベクトルデータA-3 110を用いて行列ベクトル積を演算し，３つ目の演算結果であるベクトルデータB-3 111bをバッファB-3 156に保存する。
【０１１２】
演算247: 演算243が完了した段階で開始可能となる。前半部分の行列ベクトル積演算ユニット155が，１本目のベクトルデータA-4 110を用いて行列ベクトル積を演算し，４つ目の演算結果であるベクトルデータB-4 111bをバッファB-4 156に保存する。
【０１１３】
演算248: 演算244, 演算245，演算246，演算247が完了した段階で開始可能となる。プーリング演算実行ユニット157がバッファB 156に保存されているベクトルデータB 111bを用いて，セレクト信号線158，バッファC 160，およびバッファ161に演算結果を出力する。
【０１１４】
演算249: 演算248が完了した時点で開始可能となる。後半部分の行列ベクトル積演算ユニット159が，選択されたベクトルデータA-j 110を用いて後半部分の行列ベクトル積を演算し，ベクトルデータをバッファE 162に保存する。後半部分の行列ベクトル積演算ユニットが実行すべき演算249が１回で済むことが演算量と消費電力の低減につながり，本実施例の効果となる。
【０１１５】
演算250: 演算248と演算249が完了した時点で開始可能となる。ベクトル和演算ユニット163がバッファC 160，バッファD 161，バッファE 162に保存されているベクトルデータを用いて演算を実行し，得られたベクトルデータF 113をバッファF 164に保存する。
【０１１６】
演算251: 演算250が完了した時点で開始可能となる。メモリストアユニット165がベクトルデータF 113をバッファF 164からメモリにストアする。
【実施例２】
【０１１７】
本実施例では，実施例1とは畳込みニューラルネットワークの層構成に若干の変更がある例について説明する。
【０１１８】
図１２に本実施例の畳込みニューラルネットワークの層構成を示す。入力データである画像データ400に対して第１の畳込み演算conv1 500を適用することで中間層401を得る。中間層401に活性化演算relu1 501を適用することで，中間層402を得る。中間層402にプーリング演算pool1 502を適用することで中間層403を得る。中間層403に畳込み演算conv2 503を適用することで中間層404を得る。中間層404にプーリング演算pool2 504を適用することで中間層405を得る。中間層405に全結合演算ip1 505を適用することで中間層406を得る。中間層406に活性化演算relu1 506を適用することで中間層407を得る。中間層407に全結合演算ip2 507を適用することで中間層408を得る。実施例1では畳込み演算conv1とプーリング演算pool1の組合せ108に対して変更を施したが，本実施例では畳込み演算conv1 500と活性化演算 501とプーリング演算 502の組合せ409に対して変更を施す。
【０１１９】
従来の畳込み演算conv1と活性化演算relu1とプーリング演算pool1の組合せ409aでは，まず畳込み演算conv1 500aにおいて入力される画像データ400の一部のベクトルデータ410に対して行列ベクトル積を適用し，中間層401aの一部のベクトルデータ411を得る。つぎに活性化演算relu1 501aにおいて中間層401aの一部のベクトルデータ412の負の要素を全て0にすることで中間層402aの一部のベクトルデータ413を得る。さいごにプーリング演算pool1 502aにおいて中間層402aの一部のベクトルデータ414から最大値をサンプリングし，中間層403aの一部のベクトルデータ415を得る。
【０１２０】
本実施例の畳込み演算conv1と活性化演算relu1とプーリング演算pool1の組合せ409bでは，従来の畳込み演算conv1と活性化演算relu1とプーリング演算pool1の組合せ409aと等価な演算を保持しつつも順番を入れ替えることで演算量を低減する。まず前半部分の畳込み演算conv1 500b-1を演算したのちにプーリング演算502bを演算し，さらにそのあと後半部分の畳込み演算conv1 500b-2を演算し，最後に活性化演算relu1 501bを演算する。活性化演算relu 501bを最後にしたとしても従来と同じ内容の演算を実現でき，さらにこのことで畳込み演算conv1とプーリング演算pool1を連接させ畳込み演算conv1を前後半に２分割することで実施例1と同様に畳込み演算conv1とプーリング演算pool1の組合せによる演算量と消費電力の低減が可能となる。
【０１２１】
本実施例での畳込み演算conv1と活性化演算relu1とプーリング演算pool1の組合せでは，まず前半部分の畳込み演算conv1 500b-1において入力される画像データ400の一部のベクトルデータ420に前半部分の行列ベクトル積を適用することで中間層401bの一部のベクトルデータ421を得る。
【０１２２】
前半部分の畳込み演算conv1 500b-1の行列ベクトル積はいわば主要項のみを演算しており，つぎのプーリング演算502bにおいて最大値を正しく検出できればよい。次にプーリング演算 502bにおいて中間層401bの一部のベクトルデータ422から最大値をサンプリングすることで中間層402bの一部のベクトルデータ423を得る。このとき最大値を最も出力したベクトルデータ421を検出し，そのベクトルデータ421に対応する画像データ400のベクトルデータ420を選択する。
【０１２３】
後半部分の畳込み演算conv1 500b-2はこのベクトルデータ420に行列ベクトル積の演算を適用し，中間層402bの一部のベクトルデータに加算することで演算精度を回復する。活性化演算relu1 501bは中間層402bの一部のベクトルデータ423の負の要素を検出し0とすることで中間層402bの一部のベクトルデータ424を得る。本実施例では活性化演算relu1 501bの適用するベクトルデータの量が減ったことで，畳込み演算conv1 500の演算量と消費電力の低減に加えて活性化演算relu1 501bの演算量と消費電力も低減している。
【実施例３】
【０１２４】
実施例１、実施例２の変形例について説明する。本発明の実施例では畳込み演算とプーリング演算を組合せることで，畳込み演算の行列ベクトル積を２分割可能であれば適用できる。したがって，実施例1、実施例2に対する変化例として，図１の畳込み演算conv2 202とプーリング演算pool2 203の組合せに対してさらに適用し，畳込み演算conv2の行列ベクトル積を２分割してもよい。こうすることで，実施例1よりも更に演算量と消費電力の低減効果を期待できる。あるいは，図１の畳込み演算conv2 202とプーリング演算pool2 203の組合せだけについて，行列ベクトル積を２分割してもよい。
【実施例４】
【０１２５】
畳込み演算の行列A 131が正方行列である場合，すなわちn=mである場合は，特異値分解でなく固有値分解してもよい。この場合は固有値の大きさを基準として行列を前半部分と後半部分に分割する。固有値分解が正方行列に対してのみ適用できるのに対し、同様の行列分解の手法である特異値分解は，任意の矩形行列に対して適用が可能である。
【実施例５】
【０１２６】
実施例１、実施例２では，画像認識処理を適用対象の例として説明した。ただし，適用対象となるデータは，画像データに限られるものではない。例えば，畳込みニューラルネットワークが認識する対象として，画像ではなく音声としてもよい。あるいは，畳込みニューラルネットワークが認識する対象として，画像ではなく自然言語としてもよい。あるいは，畳込みニューラルネットワークが認識する対象として，画像ではなくセンサデータから得られる気温や湿度や流体の流量などの環境データとしてもよい。
【実施例６】
【０１２７】
本実施例は，上記の実施例で説明した畳込みニューラルネットワークにおいて、行列の前半部分と後半部分の切断点の決定手法および，それを応用した画像認識処理装置の学習方法について説明する。
【０１２８】
図１３は，本実施例における，畳込みニューラルネットワークを用いた画像認識処理装置を構成するまでの処理を示す図である。図中実線は処理の流れを、点線はデータの流れを示す。画像認識処理装置の具体的な例としては，図４で説明した構成をとるものとする。
【０１２９】
従来行われているように，画像認識などのための畳込みニューラルネットワークでは，行列演算のために用いる行列データを，目的に合わせて最適化する学習処理が行われる。そのため，まず訓練データ用の画像データセット600を用いて，畳込みニューラルネットワークの学習装置にて畳込みニューラルネットワークの学習アルゴリズムを稼働させる。これにより，畳込みニューラルネットワークの学習処理602を実行し，畳込みニューラルネットワークのネットワークパラメータ603を得る。
【０１３０】
学習装置は，通常のサーバで良く，訓練データ用画像データセット600を画像認識処理装置で処理させて結果を得，所望の結果が得られるように行列データ603を調整する。そのため，メモリに格納されたプログラムをプロセッサが実行することで各種の処理を行う。また，各種データ600、601、603、605も，サーバの記憶装置に格納しておくことにする。処理の際には，サーバと画像認識処理装置を接続して，必要なデータを画像認識処理装置に提供して処理させる。
【０１３１】
畳込みニューラルネットワークのネットワークパラメータ603を得たことで従来の画像認識装置は構成可能となるが，本実施例ではこの畳込みニューラルネットワークのネットワークパラメータ603に行列データの分割処理604による加工を行うことで，更に演算量と消費電力の低い画像認識装置を提供可能となる。即ち，行列データ603を準備した後，準備された行列を分割する。この処理604も，処理602と同じサーバで実行して良い。
【０１３２】
行列データの分割処理604の処理内容については，図１４と図１５で説明する。畳込み行列データの分割処理604はテストデータ用の画像データセット601と畳込みニューラルネットワークのネットワークパラメータ603を用いて処理を行い，行列データが分解された畳込みニューラルネットワークのネットワークパラメータ605を得る。
【０１３３】
得られたネットワークパラメータ605を画像認識装置に搭載する。具体的には，図４の行列保存領域150に，行列データの前半部分と後半部分に分けて格納する。画像認識装置がFPGAで構成されている場合には，論理回路をプログラムする。これにより，従来と比べて演算量と消費電力の低い画像認識装置を提供することが可能となる。
【０１３４】
図１４は，図１３の処理の一部を詳細に説明する画像認識装置開発の処理フローを示す図である。
【０１３５】
ステップ430: 画像認識装置開発（あるいは製造）の処理フローを開始する。
【０１３６】
ステップ431: 畳込みニューラルネットワークの学習装置が，訓練データ用の画像データセット600を用いて畳込みニューラルネットワークのネットワークパラメータ603を得る。
【０１３７】
ステップ432: 畳込みニューラルネットワークの後処理装置（ステップ431の学習装置と同じ装置でよい）が，畳込み演算conv1 200の行列データA 131を前半部分141と後半部分142に分割し，行列データが分解された畳込みニューラルネットワークのネットワークパラメータ605を得る。この処理内容については，図１５で詳細に説明する。
【０１３８】
ステップ433: 行列データが分解された畳込みニューラルネットワークのネットワークパラメータ605を搭載可能な，畳込み演算conv1とプーリング演算pool1の組合せを処理可能な演算装置を構成する。具体的には，画像認識装置に前半部分141と後半部分142に分割したデータを送信し，図４の行列保存領域150に，行列データの前半部分と後半部分に分けて格納する。画像認識装置がFPGAで構成されている場合には，論理回路をプログラムする。
【０１３９】
ステップ434: ステップ433で構成した部分以外で画像認識装置に必要な部品を開発あるいは実装する。これは従来の画像認識装置と同様に実行する。
【０１４０】
ステップ435: 画像認識装置開発の処理フローを終了する。
【０１４１】
図１５は，畳込みニューラルネットワークの後処理装置が，畳込み演算conv1の行列データAを前半部分と後半部分に分割し，行列データが分解された畳込みニューラルネットワークのネットワークパラメータを得るための処理フローを示す図である。
【０１４２】
ステップ440: 畳込みニューラルネットワークの後処理装置が，畳込み演算conv1の行列データAを前半部分と後半部分に分割し，行列データが分解された畳込みニューラルネットワークのネットワークパラメータを得るための処理フローを開始する。
【０１４３】
ステップ441: 畳込み演算conv1 200の行列ベクトル積で用いる行列データA 131を特異値分解することで，左直交行列U 132と対角行列S 133と右直交行列VT 134の組を得る。
【０１４４】
ステップ442: 行列データの特異値の数をnとする。特異値の数は対角行列Sの非零対角要素の数である。
【０１４５】
ステップ443: iを(n-1)で初期化する。
【０１４６】
ステップ444: i番目までの特異値までに対応する部分行列(UiSiViT)を行列データの前半部分とし，それ以降の特異値に対応する部分行列(U(n-i)S(n-i)V(n-i)T)を行列データの後半部分とする。
【０１４７】
ステップ445: ステップ444で得られた行列データの前半部分と後半部分を用いて本実施例の画像認識装置を試作し，テストデータ用の画像データセット601を用いて認識精度を取得する。
【０１４８】
ステップ446: ステップ445で得られた認識精度が目標認識精度を満足できればステップ447に進み，満足できなければステップ448に進む。
【０１４９】
ステップ447: iを(i-1)で更新する。
【０１５０】
ステップ448: kを(i+1)とする。
【０１５１】
ステップ449: k番目までの特異値までに対応する部分行列(UkSkVkT)を行列データの前半部分141とし，それ以降の特異値に対応する部分行列(U(n-k)S(n-k)V(n-k)T)を行列データの後半部分142とする。
【０１５２】
ステップ450: (UkSkVkT)を前半部分の畳込み演算conv1 200b-1の行列データとし， (U(n-k)S(n-k)V(n-k)T)を後半部分の畳込み演算conv1 200b-2の行列データとする。
【０１５３】
ステップ451: 畳込みニューラルネットワークの後処理装置が，畳込み演算conv1の行列データAを前半部分と後半部分に分割し，行列データが分解された畳込みニューラルネットワークのネットワークパラメータを得るための処理フローを開始する。
【０１５４】
なお，実施例６では，従来どおりに行列データを学習してから前半と後半に分割する例を示したが，前半と後半に分割してから学習をおこなってもよい。あるいは，実施例６同様に，行列データを学習してから前半と後半に分割し，さらに再学習をおこなってもよい。
【０１５５】
以上説明したように本実施例では，畳込みニューラルネットワークの畳込み演算に用いられる行列ベクトル積を前半部分と後半部分に分割する。前半部分はプーリング層のサンプリングの予測に用い，後半部分は予測結果の演算精度の回復に用いる。前半部分は行列の主要項を多く含むようにし，後半部分は行列の誤差項を多く含むようにする。このために，行列を特異値分解し，ある特異値をしきい値とし，しきい値より大きい特異値に対応する行列成分を前半部分に割り当て，しきい値より小さい特異値に対応する行列を後半部分に割り当てる。これにより，畳込みニューラルネットワークの畳込み演算の消費電力と演算量を削減する。
【０１５６】
本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることが可能である。また、各実施例の構成の一部について、他の実施例の構成の追加・削除・置換をすることが可能である。
【図１】
2018160086.tif 000003
【図２】
2018160086.tif 000004
【図３】
2018160086.tif 000005
【図４】
2018160086.tif 000006
【図５】
2018160086.tif 000007
【図６】
2018160086.tif 000008
【図７】
2018160086.tif 000009
【図８】
2018160086.tif 000010
【図９】
2018160086.tif 000011
【図１０】
2018160086.tif 000012
【図１１】
2018160086.tif 000013
【図１２】
2018160086.tif 000014
【図１３】
2018160086.tif 000015
【図１４】
2018160086.tif 000016
【図１５】
2018160086.tif 000017