(57)【要約】【課題】画像認識精度制度を維持しつつ演算数を軽減させる演算処理装置及び演算処理装置の制御方法を提供する。【解決手段】メモリは、行列を形成する要素データを有するボトムデータ及び行列を形成する要素データから所定数の要素データを除いた配置形状を有する重みデータを記憶する。入力データ処理部１１１は、重みデータの配置形状を基にボトムデータを変換する。乗算部１１２、加算部１１３及び出力データ作成部１１４は、入力データ処理部１１１により変換されたボトムデータに対して重みデータをフィルタとして用いて畳み込み演算を行う。【選択図】図４
2018124867.tif 000002
【特許請求の範囲】
【請求項１】
行列を形成する要素データを有する第１データ及び行列を形成する要素データから所定数の要素データを除いた配置形状を有する第２データを記憶する記憶部と、
前記第２データの配置形状を基に前記第１データを変換する変換部と、
前記変換部により変換された前記第１データに対して前記第２データをフィルタとして用いて畳み込み演算を行う畳込演算部と
を備えたことを特徴とする演算処理装置。
【請求項２】
前記第２データは、縦、横及び斜め方向に関して対称な配置形状を有することを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記第１データは、行方向及び列方向に同数の要素データを有し、
前記第２データは、行方向及び列方向に同数の要素データが配置された状態から真ん中の行から１つ離れるにしたがい行の含まれる要素データを１つずつ除き、且つ、要素データを除いた行の半分の位置と要素データを除く前の行の半分の位置とが一致するように要素データが配置された配置形状を有し、
前記変換部は、前記第１データの隔行の隣り合う要素データを平均化する変換を行う
ことを特徴とする請求項１又は２に記載の演算処理装置。
【請求項４】
前記畳込演算部による演算結果に含まれる要素データの値をそのまま用いてプーリング処理を実行するプーリング処理部をさらに備えたことを特徴とする請求項１〜３のいずれか一つに記載の演算処理装置。
【請求項５】
前記畳込演算部は、前記第１データの周りを最小の数で囲むように０の値を有する要素データを付加し、０の値を有する要素データを付加した前記第１データに対して前記第２データをフィルタとして用いて畳み込み演算を行い、前記第１データと同数の要素データを有する演算結果を取得することを特徴とする請求項１〜４のいずれか一つに記載の演算処理装置。
【請求項６】
行列を形成する要素データを有する第１データ及び行列を形成する要素データから所定数の要素データを除いた配置形状を有する第２データを記憶する演算処理装置の制御方法であって、
前記第２データの配置形状を基に前記第１データを変換させ、
変換された前記第１データに対して前記第２データをフィルタとして用いて畳込演算を行わせる
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置に用いられるＧＰＵ（Graphic  Processing  Unit）は、元々は画像処理用のプロセッサであるが、多数の和積演算器を備えることにより行列計算に最適化されているため、機械学習用の処理を行うプロセッサとしても用いられることが多い。そして、深層学習（ディープラーニング）を行う処理においても、ＧＰＵが用いられることが一般的である。
【０００３】
深層学習では、ニューラルネットワークを用いて処理が行われることが多い。例えば、画像認識の深層学習の場合、与えられた画像が何か判断するフォワード処理及び判断するためのニューラルネットワークのパラメータを更新するためのバックワード処理の２つの処理を有する。深層学習を行う演算処理装置は、フォワード処理での計算結果と期待値との差分を用いてバックワード処理を行い、ニューラルネットワークのパラメータを更新する。そして、演算処理装置は、更新したパラメータを用いてフォワード処理の精度を向上させる。
【０００４】
ニューラルネットワークは複数の層で構成される場合がある。フォワード処理が行われる順伝播では、入力データに対して各層で特徴量の抽出などの演算処理が行われ出力結果となる。そして、バックワード処理が行われる逆伝播では、それぞれの層において、順伝播の結果と期待値との差分を用いて各パラメータを更新する学習が順伝播と逆方向に繰り返される。このように、ニューラルネットワークは、それぞれの層で実施される異なる演算処理が行われる多層の構造を有する。このような構造を有することから、層毎のパラメータの更新を行うために、後の層の計算結果と期待値との差分を求め、その差分を１つ前の層に、その層の差分計算の結果をさらに１つ前の層に伝搬しながら学習が行われる。ここでの説明における１つ前及び１つ先は、順伝播の方向を基準とする。
【０００５】
さらに、深層学習の中で主に画像認識で用いられる演算処理として、畳み込みニューラルネットワークという処理がある。畳み込みニューラルネットワークでは、畳み込み（convolution）と呼ばれる演算が多用される。以下では、「畳込演算」という。例えば、画像認識を行う場合、入力画像上の領域に予め決められたパラメータを各要素として有するフィルタを元画像に配置する。順伝播における入力側はボトムと呼び、出力側はトップと呼ぶ。逆伝播においても位置関係は変わらず出力側をボトムと呼び、入力側をトップと呼ぶ。元画像を含む順伝播方向のときの各層の入力データは、「ボトムデータ」と呼ぶ。深層学習の画像認識において畳込演算を行う場合、入力データは、ビットマップ形式となっており、データを順番に並べて積んでいくと見た目の画像と同じになる。また、入力データを構成する各要素データは、グレースケールの場合であれば濃淡を表し、ＲＧＢ（Read  Green  Blue）であれば３色分のデータを表す。また、フィルタは、「重みデータ」と呼ばれる。
【０００６】
そして、フィルタが配置された入力データの各要素と、フィルタの各要素とを乗算したものを合計することで、入力データにおけるフィルタが配置された領域の特徴量を算出する。この元画像へのフィルタの配置を予め決められたフィルタの移動幅を用いて入力データ全体に行い、算出した特徴量をまとめたものが、畳込演算の結果として出力される出力データとなる。このフォワード処理における畳込演算の結果である出力データは、「トップデータ」と呼ぶ。
【０００７】
バックワード処理における畳込演算には、２つの演算が存在する。１つは、フォワード処理の計算結果であるトップデータと期待値との差分と、元画像とを用いて差分パラメータを算出する演算である。フォワード処理の計算結果であるトップデータと期待値との差分は、「トップ差分データ」と呼ばれる。また、算出される差分パラメータは、「重み差分データ」とよばれる。この重み差分データは、重みデータを更新してフォワード処理における計算精度を上げるために用いられる。もう１つは、トップ差分データと重みデータとを使用して、１つ前のバックワード処理の演算用の差分を算出する演算である。１つ前のバックワード処理の演算用の差分は、「ボトム差分データ」と呼ばれる。このボトム差分データが、１つ前の層におけるトップ差分データとして用いられる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１１−１１３１６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、畳込演算の総演算数は、以下のように計算できる。例えば、ボトムデータの要素データの数がＣ’×Ｃ’であり、ボトムデータの数がＮ個あり、重みデータの要素データの数がＫ×Ｋであり、トップ差分データの要素数がＣ×Ｃであり、トップデータの数をＰの場合を考える。さらに、フォワード処理における１つの畳込演算が１つの乗算と１つの加算であるとする。この場合、フォワード処理の総演算数は、Ｐ×Ｃ×Ｃ×Ｎ×Ｋ×Ｋ×２となる。例えば、Ｃ＝１３、Ｎ＝２５６、Ｋ＝３、Ｃ＝１３及びＰ＝２５６の場合、フォワード処理における総演算数は、２５６×１３×１３×２５６×３×３×２＝１９９０３６０５１２である。ここで、重みデータのサイズが大きい場合などでは、高速フーリエ変換（ＦＦＴ：Fast  Fourier  Transform）による高速化手法が有効であるが、その条件を満たさない場合、ＦＦＴによる演算拘束かの効果を得ることは困難である。そのため、特定の条件に縛られない畳込演算において、画像認識精度制度を維持しつつ演算数を軽減させることは困難である。
【００１０】
開示の技術は、上記に鑑みてなされたものであって、画像認識精度制度を維持しつつ演算数を軽減させる演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本願の開示する演算処理装置及び演算処理装置の制御方法の一つの態様において、記憶部は、行列を形成する要素データを有する第１データ及び行列を形成する要素データから所定数の要素データを除いた配置形状を有する第２データを記憶する。変換部は、前記第２データの配置形状を基に前記第１データを変換する。畳込演算部は、前記変換部により変換された前記第１データに対して前記第２データをフィルタとして用いて畳み込み演算を行う。
【発明の効果】
【００１２】
１つの側面では、本発明は、画像認識精度制度を維持しつつ演算数を軽減させることができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、畳み込みニューラルネットにおける処理の全体的な流れを説明するための図である。
【図２】図２は、フォワード畳込演算及びバックワード畳込演算を説明するための図である。
【図３】図３は、演算処理層の詳細を表すブロック図である。
【図４】図４は、実施例１に係るフォワード畳込演算を行う畳込演算部の詳細を表すブロック図である。
【図５】図５は、フィルタ定義の一例を示す図である。
【図６】図６は、ボトムデータの変換の一例を説明するための図である。
【図７】図７は、変換後のボトムデータの見た目を表す図である。
【図８】図８は、ボトムデータの変換の一例を表す図である。
【図９】図９は、ボトムデータの変換の他の例を表す図である。
【図１０】図１０は、新フィルタ定義を用いる場合のフォワード畳込演算を説明するための図である。
【図１１】図１１は、新フィルタ定義を用いる場合のバックワード畳込ボトム差分演算を説明するための図である。
【図１２】図１２は、新フィルタ定義を用いる場合のバックワード畳込重み差分演算を説明するための図である。
【図１３】図１３は、新フィルタ定義を使用する場合の演算処理層における処理のフローチャートである。
【図１４】図１４は、実施例１に係る畳込演算部によるフォワード畳込演算のフローチャートである。
【図１５】図１５は、実施例１に係る畳込演算部によるバックワード畳込演算のフローチャートである。
【図１６】図１６は、実施例２に係るプーリング処理部によるストライド数が２の場合のプーリング処理を説明するための図である。
【図１７】図１７は、実施例２に係るプーリング処理部によるストライド数が１の場合のプーリング処理を説明するための図である。
【図１８】図１８は、実施例３に係る畳込演算部によるフォワード畳込演算を説明するための図である。
【図１９】図１９は、実施例４に係る畳込演算部による新フィルタ定義を用いたフォワード畳込演算の一例を説明するための図である。
【図２０】図２０は、実施例４に係る畳込演算部による新フィルタ定義を用いたフォワード畳込演算の他の例を説明するための図である。
【図２１】図２１は、フォワード畳込演算のプログラムの記述例を説明するための図である。
【図２２】図２２は、バックワード畳込重み差分演算のプログラムの記述例を説明するための図である。
【図２３】図２３は、バックワード畳込ボトム差分演算のプログラムの記述例を説明するための図である。
【図２４】図２４は、演算処理装置のハードウェア構成図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理装置の制御方法が限定されるものではない。
【実施例１】
【００１５】
図１は、畳み込みニューラルネット（ＣＮＮ：Convolutional  Neural  Network）における処理の全体的な流れを説明するための図である。ここで、本実施例では、画像認識のためのＣＮＮにおける処理について説明する。図１に示すように、演算処理装置１は、入力データ２の入力を受ける。演算処理装置１は、ＣＮＮにおいて複数の演算処理層１１〜１３による処理を実行する。以下では、各演算処理層１１〜１３を区別しない場合、単に「演算処理層１０」という。
【００１６】
各演算処理層１０では、矢印Ｐ１方向である伝播方向に向かって、特徴点の抽出などの演算処理を行う。以下では、演算処理装置１による矢印Ｐ１へ向かう方向の演算処理を、「フォワード演算」という場合がある。また、各演算処理層１０では、矢印Ｐ２方向である逆伝播方向に向かって、各層における特徴点の抽出の精度を上げるために、矢印Ｐ２方向である逆伝播方向に向かって２種類の演算処理を行う。以下では、演算処理装置１による矢印Ｐ２へ向かう方向の演算処理を「バックワード演算」という場合がある。
【００１７】
各演算処理層１０は、それぞれ特徴量の抽出に用いるフィルタである重みデータをメモリなどの記憶装置から取得する。さらに、第１層である演算処理層１１は、メモリなどの記憶装置から入力データ２を取得する。そして、演算処理層１１は、入力データ２をボトムデータとして、ボトムデータに対して重みデータを用いて畳込演算を実行する。次に、第２層である演算処理層１２は、演算処理層１１からの出力データをボトムデータとして、そのボトムデータ及び重みデータを用いて畳込演算を行う。演算処理装置１は、このように各演算処理層１０で演算処理を順次行い、第ｎ層である演算処理層１３での重みデータを用いた畳込演算の演算結果に対して正規化処理などを施した特徴量を表すデータを出力データ３として出力する。以下では、フォワード演算においてボトムデータと重みデータとを用いた畳込演算を、「フォワード畳込演算」という。
【００１８】
さらに、各演算処理層１０は、バックワード演算における畳込み演算の１つとして、期待値と出力データ３との差分であるトップ差分データを用いて重み差分データを求める。例えば、第ｎ層である演算処理層１３は、予め決められた期待値を有し、出力データ３と期待値とを比較する。そして、演算処理層１３は、出力データ３と期待値との差分であるトップ差分データを求め、その求めたトップ差分データを入力データとして取得する。次に、演算処理層１３は、入力データ及び第ｎ層におけるフォワード畳込演算で用いたボトムデータを用いて重みデータの重みデータの期待値との差分である重み差分データを求める。そして、演算処理層１３は、求めた重み差分データを用いて第ｎ層における重みデータを修正する。さらに、演算処理層１３は、もう１つのバックワード演算における畳込み演算として、修正した重みデータと出力データ３と期待値との差分とを用いてボトムデータとボトムデータの期待値との差分であるボトム差分データを算出する。
【００１９】
次に、第ｎ−１層の演算処理層１０は、演算処理層１３において算出されたボトム差分データに逆プーリング処理や逆正規化処理が施されたデータをトップ差分データとして取得する。次に、第ｎ−１層の演算処理層１０は、第ｎ−１層におけるフォワード畳込演算で用いたボトムデータとトップ差分データとを用いて重み差分データを算出する。そして、第ｎ−１層の演算処理層１０は、求めた重み差分データを用いて第ｎ−１層における重みデータを修正する。さらに、第ｎ−１層の演算処理層１０は、修正した重みデータとトップ差分データとを用いて第ｎ−１層におけるボトム差分データを算出する。演算処理装置１は、上述したバックワード演算における畳込演算を第１層まで繰り返す。以下では、バックワード演算における畳込演算を、「バックワード畳込演算」という。
【００２０】
すなわち、矢印Ｐ１方向を各層の並び方向として、演算処理装置１は、特定の演算処理層１０の１つ先の層の演算処理層１０において特定の演算処理層１０におけるトップ差分データを算出する。そして、演算処理装置１は、算出したトップ差分データと１つ前の演算処理層１０の出力データであるボトムデータとを用いて、特定の演算処理層１０における重み差分データを求める。そして、演算処理装置１は、求めた特定の演算処理層１０における重み差分データを用いて特定の演算処理層１０が使用する重みデータを修正する。さらに、演算処理装置１は、トップ差分データと特定の演算処理層１０におけるボトム差分データを算出する。
【００２１】
以下では、バックワード畳込演算において、トップ差分データとボトムデータとを用いて重み差分データを求める演算を、「バックワード畳込重み差分演算」という。さらに、修正された重みデータとトップ差分データとを用いてボトム差分データを算出する演算を、「バックワード畳込ボトム差分演算」という。
【００２２】
演算処理装置１は、各演算処理層１０における重みデータの修正及び１つ前の演算処理層におけるトップ差分データの算出を順次繰り返ことにより、各演算処理層１０の全ての層の重みデータを演算処理層１３の出力データ３の期待値に合わせて修正する。
【００２３】
演算処理装置１は、各層で取得した特徴量を用いて繰り返しパラメータ更新する学習することで、画像認識の精度を向上させ、精度の高い画像認識を行うことができる。また、例えば、音声認識の場合には、入力データ２は音声データとなり、テキストマイニングの場合には入力データ２は単語となる。
【００２４】
ここで、本実施例では、画像データで有るボトムデータを方形に行列として並んだ要素データを有する場合で説明する。以下では、フォワード畳込演算における重みデータの１回の移動量を「ストライド数」という場合がある。
【００２５】
ここで、図２を参照して、係るフォワード畳込演算及びバックワード演算をさらに説明する。図２は、フォワード畳込演算及びバックワード畳込演算を説明するための図である。図２は、入力データ２を用いて演算処理を始める第１層から出力データ２０６と期待値２０７からトップ差分データ２０３を生成する第ｎ層までを表す。ここでは、演算処理層１１を第１層とし、演算処理層１４を第ｎ−１層とし、演算処理層１３を第ｎ層として、第ｎ層まで各演算処理層１１〜１４における演算を例に記載した。また、図２中の円で記載した処理は演算処理を表す。演算処理Ｆ１は、フォワード畳込演算を表す。演算処理Ｆ２は、バックワード畳込重み差分演算を表す。また、演算処理Ｆ３は、バックワード畳込ボトム差分演算を表す。
【００２６】
演算処理装置１は、演算処理層１１において入力データ２及び第１層での重みデータ２０２に対して演算処理Ｆ１で表されるフォワード畳込演算を行い、トップデータ２０９を算出する。その後は、図示しないが、同様に次の第２層において、前の層において算出されたトップデータ２０９から取得したボトムデータ２０１及び第２層での重みデータ２０２に対して同様に演算処理Ｆ１で表されるフォワード畳込演算を行う。各演算処理層１０は同様のフォワード演算を繰り返す。そして、最後の第ｎ層である演算処理層１３は、同様に演算処理層１４において算出されたトップデータ２０９から取得したボトムデータ２０１及び第ｎ層での重みデータ２０２に対して演算処理Ｆ１で表されるフォワード畳込演算を行う。
【００２７】
さらに、演算処理層１３は、出力データ３と期待値２０７とを比較して、トップ差分データ２０３を算出する。ここで、入力データ２は、第２層〜第ｎ層におけるボトムデータ２０１にあたるため、以下では、第１層のボトムデータ２０１として扱う。また、第ｎ層の出力データ３は、第１層〜第ｎ−１層におけるトップデータ２０９にあたる。
【００２８】
バックワード演算の場合、演算処理層１３は、トップ差分データ２０３及びボトムデータ２０１に対して演算処理Ｆ２で表される畳み込みバックワードの重み差分演算を行い、重み差分データ２０４を算出する。さらに、演算処理層１３は、重み差分データ２０４を用いて重みデータ２０２を更新する。ここで、図２における一点鎖線の矢印が重みデータ２０２の更新の処理を表す。具体的には、演算処理装置１は、重み差分データ２０４に学習率を乗算して、新たな重みデータ２０２を算出する。さらに、演算処理層１３は、フォワード畳込演算で使用した重みデータ２０２及びトップ差分データ２０３に対して演算処理Ｆ３で表されるバックワード畳込ボトム差分演算を行い、ボトム差分データ２０５を算出する。
【００２９】
演算処理層１４は、演算処理層１３が出力したボトム差分データ２０５から取得したトップ差分データ２０３及びボトムデータ２０１に対して演算処理Ｆ２で表される畳み込みバックワードの重み差分演算を行い、重み差分データ２０４を算出する。さらに、演算処理層１４は、重み差分データ２０４を用いて重みデータ２０２を更新する。さらに、演算処理層１４は、フォワード畳込演算で使用した重みデータ２０２及びトップ差分データ２０３に対して演算処理Ｆ３で表されるバックワード畳込ボトム差分演算を行い、ボトム差分データ２０５を算出する。各演算処理層１０は同様のバックワード演算を繰り返す。そして、最後の第１層である演算処理層１１は、同様に第２層で算出されたボトム差分データ２０５から取得したトップ差分データ２０３を用いて、バックワード畳込重み差分演算及びバックワード畳込ボトム差分演算を行う。
【００３０】
図３は、演算処理層の詳細を表すブロック図である。演算処理層１０は、フォワード演算を実行する機能部として、畳込演算部１０１、活性化処理部１０２及びプーリング処理部１０３を有する。また、演算処理層１０は、バックワード演算を実行する機能部として、プーリング処理部１０４、活性化処理部１０５及び畳込演算部１０６を有する。
【００３１】
畳込演算部１０１は、前段の演算処理層１０からの出力データを用いて後述する畳込演算を行う。ここで、図４を参照して、畳込演算部１０１についてさらに詳細に説明する。図４は、実施例１に係るフォワード畳込演算を行う畳込演算部の詳細を表すブロック図である。図４に示すように、畳込演算部１０１は、入力データ処理部１１１、乗算部１１２、加算部１１３、出力データ作成部１１４及び重みデータ記憶部１１５を有する。
【００３２】
重みデータ記憶部１１５は、フォワード畳込演算に使用する複数種類のフィルタ定義に対応する重みデータ２０２を記憶する。本実施例では、重みデータ記憶部１１５は、図５に示す新フィルタ定義３０１及びフィルタ定義３０２を使用して作成された重みデータ２０２を記憶する。図５は、フィルタ定義の一例を示す図である。フィルタ定義３０２は、３×３のサイズを有する従来のフィルタ定義である。新フィルタ定義３０１は、フィルタ定義３０２に対応する新しいフィルタ定義である。
【００３３】
新フィルタ定義３０１は、軸３１１〜３１４に関して中心に対して対称性を有する。すなわち、新フィルタ定義３０１は、縦横斜めの方向に対称性を有しており、画像の縦横斜め方向に対する画像認識を精度良く行うことができる。したがって、新フィルタ定義３０１は、フィルタ定義３０２を用いた場合に比べて画像認識の精度の低下は少なく、十分に画像認識を行うことができる。
【００３４】
本実施例では、３×３の重みデータ２０２を用いたが、重みデータ記憶部１１５は、サイズの異なる重みデータ２０２を記憶してもよい。例えば、重みデータ記憶部１１５は、新フィルタ定義３０３及びフィルタ定義３０４を記憶してもよい。フィルタ定義３０４は、５×５のサイズを有する従来のフィルタ定義である。新フィルタ定義３０３は、フィルタ定義３０４に対応する新しいフィルタ定義である。新フィルタ定義３０３も、軸３３１〜３３４に関して中心に対して対称性を有する。すなわち、新フィルタ定義３０３は、フィルタ定義３０４を用いた場合に比べて画像認識の精度の低下は少なく、十分に画像認識を行うことができる。新フィルタ定義３０１や３０３は、行方向及び列方向に同数の要素データが配置された状態から真ん中の行から１つ離れるにしたがい行の含まれる要素データが１つずつのぞかれる。さらに、新フィルタ定義３０１や３０３は、要素データを除いた行の半分の位置と要素データを除く前の行の半分の位置とが一致するように行がずらされる。
【００３５】
また、本実施例では、新フィルタ定義３０１及び３０３という２種類のフィルタ定義について説明したが、フィルタ定義３０２や３０４といった従来のフィルタ定義に比べて要素データの数が少ないものであれば新フィルタ定義はこれに限らない。ただし、新フィルタ定義は、縦横斜めの方向に中心に対して対称性を有することが好ましい。以下では、新フィルタ定義３０１を使用して作成された重みデータ２０２を「重みデータ２２１」という。
【００３６】
入力データ処理部１１１は、フォワード演算における前段の演算処理層１０からボトムデータ２０１の入力を受ける。このボトムデータ２０１が、「第１データ」の一例にあたる。そして、入力データ処理部１１１は、重みデータ記憶部１１５から重みデータ２０２を取得する。次に、入力データ処理部１１１は、図示しない入力装置から入力された操作者からの指示から画像判定に新フィルタ定義３０１を用いるか否かを判定する。新フィルタ定義３０１を用いない場合、入力データ処理部１１１は、フィルタ定義３０２を使用して作成された重みデータ２０２を用いることを乗算部１１２に伝えるとともに、ボトムデータを出力する。
【００３７】
一方、新フィルタ定義３０１を用いる場合、入力データ処理部１１１は、入力されたボトムデータ２０１が新フィルタ定義３０１に対応するデータか否かを判定する。ボトムデータ２０１が新フィルタ定義３０１に対応するデータの場合、入力データ処理部１１１は、新フィルタ定義３０１を使用して作成された重みデータ２２１を用いることを乗算部１１２に伝えるとともに、ボトムデータを出力する。この重みデータ２２１が、「第２データ」の一例にあたる。
【００３８】
これに対して、ボトムデータ２０１が新フィルタ定義３０１に対応していないデータの場合、入力データ処理部１１１は、ボトムデータ２０１を新フィルタ定義３０１に合わせて変換する。図６は、ボトムデータの変換の一例を説明するための図である。
【００３９】
本実施例では、入力データ処理部１１１は、ボトムデータ２０１の隔行について、隣接する要素データとの平均を算出して、要素データの位置に格納する。例えば、図６に示す８×８の要素データｂ００〜ｂ６３を有するボトムデータ２０１の場合について説明する。入力データ処理部１１１は、１行目を飛ばして２行目を先頭に隔行を変更する行とする。
【００４０】
まず、入力データ処理部１１１は、２行目の要素データｂ０８と要素データｂ０９との平均である要素データｎｂ０８を算出し、要素データｂ０８の位置に格納する。次に、入力データ処理部１１１は、要素データｂ０９と要素データｂ１０との平均である要素データｎｂｖ０９を算出し、要素データｂ０９の位置に格納する。このように、入力データ処理部１１１は、隣合う２つの要素データの平均値を若番の要素データの位置に格納することを要素データｂ０８〜ｂ１５まで繰り返す。ただし、要素データｂ１５に関しては、右隣に次の要素データｂ１６が存在しない。そこで、要素データｂ１５の右隣りには、平均を出すための要素データとして値が０である要素データが隣に存在するものとして計算を行う。すなわち、入力データ処理部１１１は、要素データｂ１５と０の要素データとの平均である要素データｎｂ１５を算出し、要素データｂ１５の位置に格納する。このように、入力データ処理部１１１は、変換後の２行目の要素データｎｂ０８〜ｎｂ１５を算出する。
【００４１】
同様に、入力データ処理部１１１は、４，６及び８行目の要素データｎｂ２４〜ｎｂ３１，ｎｂ４０〜ｎｂ４７及びｎｂ５６〜ｎｂ６３を算出する。これにより、入力データ処理部１１１は、ボトムデータ２０１を変換したボトムデータ２１１を作成する。以下では、ボトムデータ２１１の全ての要素データを表す場合には要素データｂ００〜ｎｂ６３と表記する。
【００４２】
図７は、変換後のボトムデータの見た目を表す図である。ボトムデータ２１１の要素データｂ００〜ｎｂ６３は、各ドットに割り当てた状態で配置される。すなわち、演算処理装置１は、変換したボトムデータ２１１を用いてフォワード畳込演算を行う。ただし、画像としての実際の見た目は、変換を行った各行の要素データｎｂ０８〜ｎｂ１５，ｎｂ２４〜ｎｂ３１，ｎｂ４０〜ｎｂ４７及びｎｂ５６〜ｎｂ６３が右側にドットの半分ずつずらされたボトムデータ２１０となる。すなわち、見た目は、図７に示すように、ボトムデータ２１１の見た目はボトムデータ２１０として表すことができる。以下では、分かり易いように、変換後のボトムデータ２１１を見た目のボトムデータ２１０を用いて説明する。
【００４３】
ここで、図８及び９を参照して、さらに具体的にボトムデータ２０１の変換について説明する。図８は、ボトムデータの変換の一例を表す図である。また、図９は、ボトムデータの変換の他の例を表す図である。
【００４４】
例えば、図８のように、ボトムデータ２０１として漢数字の三が入力データ処理部１１１に入力された場合で説明する。この場合、ボトムデータ２０１の２行目に三の一番上の線が存在し、５行目に三の真ん中の線が存在し、８行目に三の一番下の線が存在する。各要素データｂ００〜ｂ６３は、濃淡情報３０で表される値を有する。ボトムデータ２０１において三を表す要素データ以外の要素データは、白色を表す０を値として有する。さらに、ボトムデータ２０１において三を表す要素データは、黒を表す値２５５を有する。
【００４５】
入力データ処理部１１１は、２行目の要素データｂ０８〜ｂ１５の隣り合うデータの平均を算出して、変換後の要素データｎｂ０８〜ｎｂ１５を算出する。この場合、要素データｎｂ０８は、値１２７を有する。また、要素データｎｂ０９〜ｎｂ１３は、値２５５を有する。また、要素データｎｂ１４は、値１２７を有する。さらに、要素データｎｂ１５は、値として０を有する。
【００４６】
また、入力データ処理部１１１は、４及び６行目の要素データｂ２４〜ｂ３１及びｂ４０〜ｂ４７の隣り合うデータの平均を算出して、変換後の要素データｎｂ２４〜ｎｂ３１及びｎｂ４０〜ｎｂ４７を算出する。この場合、４及び６行目は要素データｂ２４〜ｂ３１及びｂ４０〜ｂ４７は全て値が０であるので、変換後の要素データｎｂ２４〜ｎｂ３１及びｎｂ４０〜ｎｂ４７も全て値が０である。
【００４７】
さらに、入力データ処理部１１１は、８行目の要素データｂ５６〜ｂ６３の隣り合うデータの平均を算出して、変換後の要素データｎｂ５６〜ｎｂ６３を算出する。この場合、要素データｎｂ５６〜ｎｂ６２は、値２５５を有する。また、要素データｎｂ６４は、値１２７を有する。
【００４８】
入力データ処理部１１１は、漢数字の三を表す画像であるボトムデータ２０１を変換する。その場合、変換後のボトムデータ２１０は、図８に示すように、濃淡にわずかな違いが存在する漢数字の三を表す画像となる。
【００４９】
次に、図９のように、ボトムデータ２０１として対角線の画像が入力データ処理部１１１に入力された場合で説明する。この場合、ボトムデータ２０１の対角線に線が存在する。この場合も、各要素データｂ００〜ｂ６３は、図８における濃淡情報３０で表される値を有する。対角線を表す要素データｂ００，ｂ０９，ｂ１８，ｂ２７，ｂ３６，ｂ４５，ｂ５４及びｂ６３が、グレーを表す値を有し、他の要素データは値として０を有する。
【００５０】
そして、入力データ処理部１１１は、要素データｂ０８〜ｂ１５，ｂ２４〜ｂ３１，ｂ４０〜ｂ４７及びｂ５６〜ｂ６３の隣り合うデータの平均を算出し、要素データｎｂ０８〜ｎｂ１５，ｎｂ２４〜ｎｂ３１，ｎｂ４０〜ｎｂ４７及びｎｂ５６〜ｎｂ６３を求める。この場合、要素データｎｂ０８，ｎｂ０９，ｎｂ２６，ｎｂ２７ｎｂ４４，ｎｂ４５，ｎｂ６２及びｎｂ６３は、要素データｂ０８〜ｂ１５，ｂ２４〜ｂ３１，ｂ４０〜ｂ４７及びｂ５６〜ｂ６３の半分の値を有する。また、要素データｎｂ１０〜ｎｂ１５，ｎｂ２４〜ｎｂ２５，ｎｂ２８〜ｎｂ３１，ｎｂ４０〜ｎｂ４３，ｎｂ４６〜ｎｂ４７及びｎｂ５６〜ｎｂ６１は値として０を有する。
【００５１】
この場合、入力データ処理部１１１は、対角線を表す画像であるボトムデータ２０１を変換する。その場合、変換後のボトムデータ２１０は、図９に示すように、濃淡にわずかな違いが存在する対角線を表す画像となる。
【００５２】
このように、入力データ処理部１１１により変換されることで作成されるボトムデータ２１０は、縦横方向及び斜め方向に変換前のボトムデータ２０１と同じ画像として用いることが可能な画像となる。画像は縦線、横線及び斜め線の組み合わせでほぼ表すことが可能であるため、変換後のボトムデータ２１０は、変換前のボトムデータ２０１と同様の画像として使用可能である。
【００５３】
そして、入力データ処理部１１１は、変換後のボトムデータ２１０を乗算部１１２へ出力する。さらに、入力データ処理部１１１は、重みデータ２２１を用いることを乗算部１１２へ通知する。
【００５４】
ここで、図１における第１層の演算処理層１１においては、入力データ処理部１１１は、外部から入力された入力データ２をボトムデータ２０１として使用するため、ボトムデータ２０１が新フィルタ定義３０１に対応していない場合がある。その場合に、入力データ処理部１１１は、ボトムデータ２０１を新フィルタ定義３０１に合わせるために変換する。これに対して、図１における第２層以降の演算処理層１２〜１３では、前段の演算処理層１０から出力されるトップデータ２０９は既に新フィルタ定義３０１に対応しているので、入力データ処理部１１１は、変換を行わずにそのまま乗算部１１２へボトムデータ２０１を出力することができる。この入力データ処理部１１１が、「変換部」の一例にあたる。
【００５５】
乗算部１１２は、新フィルタ定義３０１を用いない場合、フィルタ定義３０２を使用して作成された重みデータ２０２の使用の通知を入力データ処理部１１１から受ける。さらに、乗算部１１２は、変換を行っていないボトムデータ２０１の入力を受ける。
【００５６】
乗算部１１２は、フィルタ定義３０２を使用して作成された重みデータ２０２とボトムデータ２０１と用いて通常のフォワード畳込演算における各要素データの乗算を行う。そして、乗算部１１２は、乗算結果を加算部１１３へ出力する。
【００５７】
また、新フィルタ定義３０１を用いる場合、乗算部１１２は、重みデータ２２１の使用の通知を入力データ処理部１１１から受ける。さらに、乗算部１１２は、新フィルタ定義３０１に対応したボトムデータ２０１又は新フィルタ定義３０１に対応するように変換されたボトムデータ２１０の入力を受ける。そして、乗算部１１２は、入力されたボトムデータ２０１又は２１０と重みデータ２２１とを用いてフォワード畳込演算における各要素データの乗算を行う。
【００５８】
例えば、変換後とボトムデータ２１０を用いる場合の乗算方法を、図１０を参照して説明する。図１０は、新フィルタ定義を用いる場合のフォワード畳込演算を説明するための図である。ここでは、重みデータ２２１の１回の移動量であるストライド数が１の場合で説明する。また、以下では、図１０におけるボトムデータ２１０の列が伸びる方向、すなわち縦の方向を「列方向」と言い、行が伸びる方向、すなわち横の方向を「行方向」と言う。
【００５９】
乗算部１１２は、図１０に示すボトムデータ２１０の入力を受ける。さらに、乗算部１１２は、図１０に示す重みデータ２２１を重みデータ記憶部１１５から取得する。そして、乗算部１１２は、最初にボトムデータ２１０の１列目に重みデータ２２１の一列目を一致させ、且つ、重みデータ２２１の各要素データがボトムデータ２１０のより若い番号の要素データに重なるように重みデータ２２１を配置する。例えば、図１０の場合、乗算部１１２は、要素データｗ００が要素データｂ０１に一致し、要素データｗ０２が要素データｎｂ０９に一致し、要素データｗ０５が要素データｂ１７に一致するように重みデータ２２１を配置する。そして、乗算部１１２は、ボトムデータ２１０と重みデータ２２１との重なった各要素データ同士を乗算し、各乗算結果を加算部１１３へ出力する。以下では、ボトムデータ２１０上の所定の位置に重みデータ２２１を配置し、重なった各要素データを乗算する計算を「トップデータ２０９の１つの要素データに対する乗算」という。
【００６０】
次に、乗算部１１２は、ストライド数である１つの要素データ分だけ重みデータ２２１をボトムデータ２１０上で行方向に移動する。そして、乗算部１１２は、移動した位置でトップデータ２０９の１つの要素データに対する乗算を行い、各乗算結果を加算部１１３へ出力する。このように、乗算部１１２は、計算完了後にストライド数ずつ行方向に重みデータ２２１を移動させ、トップデータ２０９の１つの要素データに対する乗算を繰返す。そして、重みデータ２２１が行方向の最後尾まで移動すると、次の計算では、乗算部１１２は、重みデータ２２１を列方向にストライド数である１つの要素データ分だけ移動させ、さらに、行方向の先頭の位置に重みデータ２２１を戻す。そして、乗算部１１２は、行方向に重みデータ２２１を移動させてトップデータ２０９の１つの要素データに対する乗算を繰返す。乗算部１１２は、重みデータ２２１の最下行がボトムデータ２１０の最下行に一致し、且つ、重みデータ２２１がボトムデータ２１０の最後尾に移動するまで、トップデータ２０９の１つの要素データに対する乗算を繰返す。
【００６１】
例えば、図１０におけるボトムデータ２１０の太線枠で囲まれた位置に重みデータ２２１を配置して計算を行う場合を説明する。ここでは、各要素データの乗算を符号のみで表す。乗算部１１２は、１つのトップデータ２０９に対する乗算として、ｗ００×ｎｂ０９，ｗ０１×ｎｂ１０，ｗ０２×ｂ１７，ｗ０３×ｂ１８，ｗ０４×ｂ１９，ｗ０５×ｎｂ２５及びｗ０６×ｎｂ２６を行う。そして、乗算部１１２は、各乗算結果を加算部１１３へ出力する。
【００６２】
加算部１１３は、乗算結果の入力を乗算部１１２から受ける。そして、加算部１１３は、１つのトップデータ２０９に対する乗算の乗算結果それぞれを加算して合計を算出する。以下では、１つのトップデータ２０９に対する乗算の乗算結果の加算を、「トップデータ２０９の１つの要素データに対する加算」という。そして、加算部１１３は、加算結果を出力データ作成部１１４へ出力する。加算部１１３は、乗算部１１２が行ったトップデータ２０９の１つの要素データに対する乗算の全てに対して、トップデータ２０９の１つの要素データに対する加算を繰り返し、加算結果を出力データ作成部１１４へ出力する。
【００６３】
例えば、図１０におけるボトムデータ２１０の太線枠で囲まれた位置に重みデータ２２１を配置された場合について説明する。加算部１１３は、ｗ００×ｎｂ０９，ｗ０１×ｎｂ１０，ｗ０２×ｎ１７，ｗ０３×ｂ１８，ｗ０４×ｂ１９，ｗ０５×ｎｂ２５及びｗ０６×ｎｂ２６の入力を乗算部１１２から受ける。そして、加算部１１３は、ｗ００×ｎｂ０９＋ｗ０１×ｎｂ１０＋ｗ０２×ｂ１７＋ｗ０３×ｂ１８＋ｗ０４×ｂ１９＋ｗ０５×ｎｂ２５＋ｗ０６×ｎｂ２６を算出する。
【００６４】
出力データ作成部１１４は、トップデータ２０９の１つの要素データに対する加算の加算結果の入力を加算部１１３から受ける。そして、出力データ作成部１１４は、トップデータ２０９の先頭から順に、取得した加算結果の割り当てを繰り返す。例えば、出力データ作成部１１４は、図１０におけるボトムデータ２１０の太線枠で囲まれた位置に重みデータ２２１を配置された場合、取得した加算結果を要素データｔ１８とする。すなわち、ｗ００×ｎｂ０９＋ｗ０１×ｎｂ１０＋ｗ０２×ｎ１７＋ｗ０３×ｎ１８＋ｗ０４×ｎ１９＋ｗ０５×ｎｂ２５＋ｗ０６×ｎｂ２６が、トップデータ２０９の要素データｔ１８にあたる。出力データ作成部１１４は、このように取得した加算結果のトップデータ２０９の各要素データへの割当を繰り返してトップデータ２０９を生成する。そして、出力データ作成部１１４は、生成したトップデータ２０９を活性化処理部１０２へ出力する。以下では、トップデータ２０９の１つの要素データに対する乗算及び加算、並びに、その加算結果のトップデータ２０９の要素データの割当をまとめて、「トップデータ２０９の１つの要素データに対する和積演算」という。乗算部１１２、加算部１１３及び出力データ作成部１１４が、「畳込演算部」の一例にあたる。
【００６５】
ここで、従来のフィルタ定義３０２を用いた場合、畳込演算部１０１は、トップデータ２０９の１つの要素データに対する和積演算において、９回の乗算と９個の乗算結果の加算を行う。これに対して、新フィルタ定義３０１を用いた場合、畳込演算部１０１は、トップデータ２０９の１つの要素データに対する和積演算において、７回の乗算と７個の乗算結果の加算を行う。したがって、乗算数及び加算する値の数共に、新フィルタ定義３０１を用いた場合の方が、従来のフィルタ定義３０２を用いた場合に比べて小さくなる。すなわち、フォワード畳込演算の場合、新フィルタ定義３０１を用いた場合の方が、従来のフィルタ定義３０２を用いた場合に比べて、使用する記憶領域を小さくすることができ、計算効率も向上させることができる。
【００６６】
図３に戻って説明を続ける。畳込演算部１０６は、活性化処理部１０５により逆正規化処理が施されたデータに対してバックワード畳込演算を行う。ここで、畳込演算部１０６によるバックワード畳込演算についてさらに詳細に説明する。まず、図１１を参照して、バックワード畳込ボトム差分演算について説明する。図１１は、新フィルタ定義を用いる場合のバックワード畳込ボトム差分演算を説明するための図である。
【００６７】
ここでは、図１０で用いた８×８のボトムデータ２０１を変換したボトムデータ２１０と重みデータ２２１とを用いてフォワード畳込演算を行った場合で説明する。この場合、畳込演算部１０６は、フォワード畳込演算により求められた図１０のトップデータ２０９の配置形状と同じ配置形状、すなわち隔行で１つ要素分ずつずれたデータの配置形状の見た目を有するトップ差分データ２０３の入力を活性化処理部１０５から受ける。ここで、トップ差分データ２０３も、トップデータ２０９の配置形状と同じ配置形状を有する。また、バックワード畳込ボトム差分演算で算出されるボトム差分データ２０５は、ボトムデータ２０１と同じ配置形状を有する。トップ差分データ２０３は、要素データｔｄ００〜ｔｄ６３を有する。また、ボトム差分データ２０５は、要素データｂｄ００〜ｎｂｄ６３を有する。
【００６８】
畳込演算部１０６は、図１１に示すトップ差分データ２０３の入力を受ける。そして、畳込演算部１０６は、最初にトップ差分データ２０３の１列目に重みデータ２２１の一列目を一致させ、且つ、重みデータ２２１の各要素データがトップ差分データ２０３のより若い番号の要素データに重なるように重みデータ２２１を配置する。例えば、図１１の場合、畳込演算部１０６は、要素データｗ００が要素データｔｄ０１に一致し、要素データｗ０２が要素データｔｄ０９に一致し、要素データｗ０５が要素データｔｄ１７に一致するように重みデータ２２１を配置する。そして、畳込演算部１０６は、トップ差分データ２０３と重みデータ２２１との重なった各要素データ同士を乗算する。さらに、畳込演算部１０６は、乗算結果のそれぞれを加算し合計を算出する。そして、畳込演算部１０６は、算出した加算結果をボトム差分データ２０５の要素データｂｄ００とする。
【００６９】
次に、畳込演算部１０６は、ストライド数である１つの要素データ分だけ重みデータ２２１をトップ差分データ２０３上で行方向に移動する。そして、畳込演算部１０６は、移動した位置で１つのボトム差分データ２０５に対する乗算を行い、乗算結果を加算して合計を算出する。このように、畳込演算部１０６は、計算完了後にストライド数ずつ行方向に重みデータ２２１を移動させ、乗算及び加算を繰返す。そして、重みデータ２２１が行方向の最後尾まで移動すると、次の計算では、畳込演算部１０６は、重みデータ２２１を列方向にストライド数である１つの要素データ分だけ移動させ、さらに、行方向の先頭の位置に重みデータ２２１を戻す。そして、畳込演算部１０６は、行方向に重みデータ２２１を移動させつつ乗算及び加算を繰返す。畳込演算部１０６は、重みデータ２２１の最下行がトップ差分データ２０３の最下行に一致し、且つ、重みデータ２２１がトップ差分データ２０３の最後尾に移動するまで、乗算及び加算を繰返す。そして、畳込演算部１０６は、乗算及び加算結果をボトム差分データ２０５の要素データｂ０１〜ｎｂ６３の番号順に割り当てていく。以下では、トップ差分データ２０３上の所定の位置に重みデータ２２１を配置した状態での、乗算及び加算、並びに、ボトム差分データ２０５の要素データｂ００〜ｎｂ６３に割り当てる演算を、まとめて「ボトム差分データ２０５の１つの要素データに対する和積演算」という。
【００７０】
例えば、図１１におけるトップ差分データ２０３の太線枠で囲まれた位置に重みデータ２２１を配置して計算を行う場合を説明する。ここでは、各要素データの乗算を符号のみで表す。畳込演算部１０６は、ボトム差分データ２０５の１つの要素データに対する和積演算として、ｗ００×ｔｄ０９＋ｗ０１×ｔｄ１０＋ｗ０２×ｔｄ１７＋ｗ０３×ｔｄ１８＋ｗ０４×ｔｄ１９＋ｗ０５×ｔｄ２５＋ｗ０６×ｔｄ２６を要素データｂｄ１８とする。
【００７１】
ここで、従来のフィルタ定義３０２を用いた場合、畳込演算部１０１は、ボトム差分データ２０５の１つの要素データに対する和積演算において、９回の乗算と９個の乗算結果の加算を行う。これに対して、新フィルタ定義３０１を用いた場合、畳込演算部１０１は、ボトム差分データ２０５の１つの要素データに対する和積演算において、７回の乗算と７個の乗算結果の加算を行う。したがって、乗算数及び加算する値の数共に、新フィルタ定義３０１を用いた場合の方が、従来のフィルタ定義３０２を用いた場合に比べて小さくなる。すなわち、バックワード畳込ボトム差分演算の場合も、新フィルタ定義３０１を用いた場合の方が、従来のフィルタ定義３０２を用いた場合に比べて、使用する記憶領域を小さくすることができ、計算効率も向上させることができる。
【００７２】
次に、図１２を参照して、バックワード畳込重み差分演算を説明する。図１２は、新フィルタ定義を用いる場合のバックワード畳込重み差分演算を説明するための図である。フォワード畳込重差分演算で算出される重み差分データ２０４は、重みデータ２２１の配置形状と同じ配置形状を有する。重み差分データ２０４は、要素データｗｄ００〜ｗｄ０７を有する。
【００７３】
畳込演算部１０６は、フォワード畳込演算で使用したボトムデータ２１０を取得する。また、畳込演算部１０６は、図１２に示すトップ差分データ２０３の入力を受ける。次に、畳込演算部１０６は、ボトムデータ２１０が重み差分データ２０４を算出するサイズを有するか否かを判定する。サイズが小さい場合、畳込演算部１０６は、ボトムデータ２１０の周りに値が０の要素データ２１２を付加する。以下では、要素データ２１２を付加したボトムデータ２１０を単にボトムデータ２１０という。
【００７４】
次に、畳込演算部１０６は、最初にボトムデータ２１０の１列目にトップ差分データ２０３の一列目を一致させ、且つ、トップ差分データ２０３の各要素データがボトムデータ２１０のより若い番号の要素データに重なるようにトップ差分データ２０３を配置する。例えば、畳込演算部１０６は、ボトムデータ２１０の太線枠に一致するようにトップ差分データ２０３を配置する。そして、畳込演算部１０６は、ボトムデータ２１０とトップ差分データ２０３との重なった各要素データ同士を乗算する。さらに、畳込演算部１０６は、乗算結果のそれぞれを加算し合計を算出する。そして、畳込演算部１０６は、算出した加算結果を重み差分データ２０４の要素データｗ００とする。
【００７５】
次に、畳込演算部１０６は、ストライド数である１つの要素データ分だけトップ差分データ２０３をボトムデータ２１０上で行方向に移動する。そして、畳込演算部１０６は、移動した位置で要素データ同士の乗算を行い、乗算結果を加算して合計を算出する。このように、畳込演算部１０６は、計算完了後にストライド数ずつ行方向にトップ差分データ２０３を移動させ、乗算及び加算を繰返す。そして、トップ差分データ２０３が行方向の最後尾まで移動すると、次の計算では、畳込演算部１０６は、トップ差分データ２０３を列方向にストライド数である１つの要素データ分だけ移動させ、さらに、行方向の先頭の位置にトップ差分データ２０３を戻す。そして、畳込演算部１０６は、行方向にトップ差分データ２０３を移動させつつ乗算及び加算を繰返す。畳込演算部１０６は、トップ差分データ２０３の最下行がボトムデータ２１０の最下行に一致し、且つ、トップ差分データ２０３がボトムデータ２１０の最後尾に移動するまで、乗算及び加算を繰返す。そして、畳込演算部１０６は、乗算及び加算結果を重み差分データ２０４の要素データｗ０１〜ｗ０７の番号順に割り当てていく。以下では、ボトムデータ２１０上の所定の位置にトップ差分データ２０３を配置した状態での、乗算及び加算、並びに、重み差分データ２０４の要素データｗ００〜ｗ０７に割り当てる演算を、まとめて「重み差分データ２０４の１つの要素データに対する和積演算」という。
【００７６】
例えば、図１２におけるボトムデータ２１０の太線枠で囲まれた位置にトップ差分データ２０３を配置して計算を行う場合を説明する。ここでは、各要素データの乗算を符号のみで表す。畳込演算部１０６は、重み差分データ２０４の１つの要素データに対する和積演算として、以下の計算を行う。畳込演算部１０６は、ｔｄ００×０＋・・・＋ｔｄ０７×０＋ｔｄ０８×ｂ００＋・・・＋ｔｄ１５×ｂ０７＋ｔｄ１６×０＋ｔｄ１７×ｎｂ０８＋・・・＋ｔｄ２３×ｎｂ１４＋・・・＋ｔｄ５６×ｂ４８＋・・・ｔｄ６３×ｂ５５を算出する。そして、畳込演算部１０６は、演算結果を要素データｗｄ００とする。
【００７７】
ここで、従来のフィルタ定義３０２を用いた場合、畳込演算部１０１は、重み差分データ２０４の１つの要素データに対する和積演算を９回行う。これに対して、新フィルタ定義３０１を用いた場合、畳込演算部１０１は、重み差分データ２０４の１つの要素データに対する和積演算は７回で済む。したがって、新フィルタ定義３０１を用いた場合の方が、従来のフィルタ定義３０２を用いた場合に比べて計算回数を減らすことができる。すなわち、バックワード畳込重み差分演算の場合も、新フィルタ定義３０１を用いた場合の方が、従来のフィルタ定義３０２を用いた場合に比べて、使用する記憶領域を小さくすることができ、計算効率も向上させることができる。
【００７８】
図３に戻って説明を続ける。活性化処理部１０２は、畳込演算部１０１から出力されたトップデータを正規化する。プーリング処理部１０３は、活性化処理部１０２により正規化されたトップデータに対して要素データの間引や統合を行うことで、微小な位置変化に対して応答を不変化する。このプーリング処理部１０３が行う処理をプーリング処理という。そして、プーリング処理部１０３は、プーリング処理を施したトップデータを次の段の演算処理層１０へ出力する。プーリング処理部１０３は、データに加えた処理を表すタグ１５１をプーリング処理部１０４へ出力する。
【００７９】
プーリング処理部１０４は、実施した応答のプーリング処理を表すタグ１５１の入力をプーリング処理部１０３から受ける。また、プーリング処理部１０４は、後段の演算処理層１０からボトム差分データの入力を受ける。そして、プーリング処理部１０４は、取得したボトム差分データにタグ１５１により特定されるプーリング処理の逆処理を施す。このプーリング処理部１０４が行う処理を逆プーリング処理という。活性化処理部１０５は、プーリング処理部１０４により逆プーリング処理が施されたデータに対して活性化処理を施す。
【００８０】
さらに、以上では、演算処理装置１の学習時の動作について説明したが、演算処理装置１は、学習により取得した重みデータ２０２を用いて入力データ２の認識を行う。そこで、各演算処理層１０における認識の処理について説明する。
【００８１】
畳込演算部１０１は、ボトムデータの入力を受ける。そして、学習で取得した重みデータを使用してフォワード畳込演算を行う。そして、活性化処理部１０２及びプーリング処理部１０３は、トップデータに対して正規化などのプーリング処理を行う。その後、プーリング処理部１０３は、処理を施したトップデータを次の演算処理層１０へ出力する。このようなフォワード畳込演算を各演算処理層１０で繰返して、演算処理装置１は、最終的に認識用の出力データ３を取得する。
【００８２】
次に、図１３を参照して、新フィルタ定義３０１を使用する場合の演算処理層における処理の流れについて説明する。図１３は、新フィルタ定義を使用する場合の演算処理層における処理のフローチャートである。
【００８３】
第１層の演算処理層１１における入力データ処理部１１１は、入力データ２に対して隔行の隣り合う要素データの平均を算出して一方の要素データとして、新フィルタ定義３０１に合うボトムデータ２１０を生成する（ステップＳ１）。そして、入力データ処理部１１１は、ボトムデータ２１０を乗算部１１２へ出力する。
【００８４】
乗算部１１２は、ボトムデータ２１０の入力を入力データ処理部１１１から受ける。そして、乗算部１１２、加算部１１３及び出力データ作成部１１４は、トップデータ２０９の１つの要素データに対する和積演算を繰返してフォワード畳込演算を行う（ステップＳ２）。そして、出力データ作成部１１４は、演算結果であるトップデータ２０９を出力する。
【００８５】
活性化処理部１０２及びプーリング処理部１０３は、出力データ作成部１１４から出力されたトップデータ２０９に対して正規化を施すプーリング処理といったフォワード他処理演算を行う（ステップＳ３）。そして、プーリング処理部１０３は、処理を施したデータを第２層の演算処理層１２へ出力する。
【００８６】
第２〜第ｎ−１層の演算処理層１０及び第ｎ層の演算処理層１３は、フォワード畳込演算及びフォワード他処理演算を含む同様の処理を実行する（ステップＳ４）。
【００８７】
次に、第ｎ層の演算処理層１３は、出力データ３と期待値２０７とを比較する（ステップＳ５）。
【００８８】
次に、第ｎ層の演算処理層１３のプーリング処理部１０４及び活性化処理部１０５は、比較結果に対して、逆プーリング処理を含むバックワード他処理演算を行う（ステップＳ６）。そして、活性化処理部１０５は、処理を施したデータをトップ差分データ２０３として畳込演算部１０６へ出力する。
【００８９】
次に、第ｎ層の演算処理層１３の畳込演算部１０６は、トップ差分データ２０３の入力を活性化処理部１０５から受ける。そして、畳込演算部１０６は、トップ差分データ２０３、重みデータ２０２及びボトムデータ２１０を用いてバックワード畳込演算を行う（ステップＳ７）。畳込演算部１０６は、重みデータ２０２を更新する。さらに、畳込演算部１０６は、求めたボトム差分データ２０５を第ｎ−１層の演算処理層１０へ出力する。
【００９０】
第ｎ−１〜３層の演算処理層１０、第２層の演算処理層１２及び第１層の演算処理層１１は、バックワード他処理演算及びバックワード畳込演算を含む同様の処理を実行する（ステップＳ８）。これにより、第ｎ−１〜３層の演算処理層１０、第２層の演算処理層１２及び第１層の演算処理層１１の重みデータ２０２が更新される。
【００９１】
次に、図１４を参照して、畳込演算部１０１によるフォワード畳込演算の流れについて説明する。図１４は、実施例１に係る畳込演算部によるフォワード畳込演算のフローチャートである。
【００９２】
入力データ処理部１１１は、新フィルタ定義３０１を使用するか否かを判定する（ステップＳ１０１）。新フィルタ定義３０１を使用しない場合（ステップＳ１０１：否定）、入力データ処理部１１１は、入力データをそのままボトムデータ２０１として乗算部１１２へ出力する。乗算部１１２、加算部１１３及び出力データ作成部１１４は、通常のフォワード畳込演算を実行し（ステップＳ１０２）、フォワード畳込演算を終了する。
【００９３】
これに対して、新フィルタ定義３０１を使用する場合（ステップＳ１０１：肯定）、入力データ処理部１１１は、新フィルタ定義３０１に対応する重みデータ２２１を重みデータ記憶部１１５から取得する（ステップＳ１０３）。
【００９４】
次に、入力データ処理部１１１は、入力データが新フィルタ定義３０１に対応するか否かを判定する（ステップＳ１０４）。入力データが新フィルタ定義３０１に対応しない場合（ステップＳ１０４：否定）、入力データ処理部１１１は、前層における処理結果の入力データを隔行で平均化したデータを演算に使用するボトムデータ２０１とする（ステップＳ１０５）。
【００９５】
入力データが新フィルタ定義３０１に対応する場合（ステップＳ１０４：肯定）、入力データ処理部１１１は、前層における処理結果の入力データをそのまま演算に使用するボトムデータ２０１とする（ステップＳ１０６）。
【００９６】
入力データ処理部１１１は、新フィルタ定義３０１に対応するボトムデータ２０１を乗算部１１２へ出力する。乗算部１１２、加算部１１３及び出力データ作成部１１４は、入力されたボトムデータ２０１と新フィルタ定義３０１に対応した重みデータ２２１とを用いてフォワード畳込演算を実行する（ステップＳ１０７）。
【００９７】
次に、図１５を参照して、畳込演算部１０６によるバックワード畳込演算の流れについて説明する。図１５は、実施例１に係る畳込演算部によるバックワード畳込演算のフローチャートである。
【００９８】
畳込演算部１０６は、新フィルタ定義３０１を使用するか否かを判定する（ステップＳ２０１）。新フィルタ定義３０１を使用しない場合（ステップＳ２０１：否定）、畳込演算部１０６は、入力データをそのままボトムデータ２０１として、通常のバックワード畳込演算を実行し（ステップＳ２０２）、フォワード畳込演算を終了する。
【００９９】
これに対して、新フィルタ定義３０１を使用する場合（ステップＳ２０１：肯定）、畳込演算部１０６は、逆伝播方向の最初の層か否かを判定する（ステップＳ２０３）。逆伝播方向の最初の層の場合（ステップＳ２０３：肯定）、畳込演算部１０６は、フォワード演算による出力データ３と期待値２０７との差分に対してバックワード他処理が施されたデータをトップ差分データ２０３として取得する（ステップＳ２０４）。
【０１００】
これに対して、逆伝播方向の最初の層以外の層の場合（ステップＳ２０３：否定）、畳込演算部１０６は、前層から出力されたボトム差分データ２０５に対してバックワード他処理が施されたデータをトップ差分データ２０３として取得する（ステップＳ２０５）。
【０１０１】
そして、畳込演算部１０６は、ボトムデータ２０１、新フィルタ定義３０１を使用した重みデータ２２１及びトップ差分データ２０３を用いてバックワード重み差分演算及びバックワードボトム差分演算を実行する（ステップＳ２０６）。
【０１０２】
以上に説明したように、本実施例に係る演算処理装置は、従来の正方形の行列のフィルタ定義よりも要素データの数が少ない新フィルタ定義を用いてフォワード畳込演算及びバックワード畳込演算を行う。次の表はフィルタサイズに応じた従来のフィルタ定義と新フィルタ定義との演算量の比を表す表である。ここで、新フィルタ定義は、中央の行から端の行に向かって１つずつ要素データを減らし、且つ、各行の半分の位置が要素データを減らす前の半分の位置に一致するようにずらすことで生成される定義である。
【０１０３】
【表１】
2018124867.tif 000003
【０１０４】
このように、本実施例に係る演算処理装置は、フォワード畳込演算及びバックワード畳込演算における演算量を削減することができる。ここで、本実施例に係る演算処理装置は、入力データを変換する演算を行うが、入力データを変換する演算数は、畳込演算において削減される演算数より少ないため、演算量を低減することができる。また、本実施例に係る演算処理装置は、データ量削減によってメモリスループットの削減にも寄与することができる。高速フーリエ変換による高速化手法を用いるための条件を満たさないフィルタを用いる場合でも、本実施例に係る演算処理装置は、フォワード畳込演算及びバックワード畳込演算における演算量を削減することができる。したがって、本実施例に係る演算処理装置は、深層学習の演算において、使用する記憶装置の容量を抑えつつ演算効率を向上させることができる。
【０１０５】
特に、３×３のサイズのフィルタは、深層学習では多用されるフィルタであり、その３×３のサイズのフィルタにおいても実施例で説明したように演算数が削減される。
【０１０６】
また、本実施例に係る演算処理装置では、重みデータを小さくすることができ、フォワード畳込演算及びバックワード畳込演算におけるデータ量を少なく抑えることができる。
【実施例２】
【０１０７】
次に、実施例２について説明する。本実施例に係る演算処理装置は、新フィルタ定義に合わせてボトムデータを変換した場合に、そのボトムデータを用いて算出されたデータをそのまま使用してプーリング処理を行う。本実例に係る演算処理装置も、図１及び２で表される。以下では、実施例１と同様の各部の機能については説明を省略する。
【０１０８】
図１６は、実施例２に係るプーリング処理部によるストライド数が２の場合のプーリング処理を説明するための図である。
【０１０９】
プーリング処理部１０３は、畳込演算部１０１が出力したトップデータ２０９に対して活性化処理部１０２により正規化されたデータの入力を受ける。ここでは、８×８のボトムデータ２０１及び新フィルタ定義３０１を用いてフォワード畳込演算が行われた場合で説明する。すなわち、プーリング処理部１０３は、図１６に示すデータ４０１の入力を受ける。ここでは、データ４０１は、要素データｉ００〜ｉ６３を有する。要素データｉ００〜ｉ６３は、それぞれトップデータ２０９の要素データｔ００〜ｔ６３に対応する。
【０１１０】
プーリング処理部１０３は、図１６のデータ４０１上に示した太線枠４１１をプーリングサイズとして記憶する。そして、プーリング処理部１０３は、最初に、太線枠４１１の上の行がデータ４０１の１行目の最も若番の要素データに一致するように配置する。そして、太線枠４１１に含まれる要素データｉ００，ｉ０１，ｉ０８及びｉ０９を取得し、取得した要素データの平均や最大値の選択などのプーリング処理を行い値を取得する。そして、プーリング処理部１０３は、取得した値を出力するデータ４０２の要素データｐ００とする。
【０１１１】
次に、プーリング処理部１０３は、太線枠４１１を要素データ２つ分だけ行方向に進めながら、プーリング処理を行い値を取得していく。そして、太線枠４１１がデータ４１０の行の最後尾に達すると、プーリング処理部１０３は、要素データ２つ分だけ列方向に太線枠４１１を移動し、且つ、行の先頭に太線枠４１１を戻す。その後、プーリング処理部１０３は、太線枠４１１を要素データ２つ分だけ行方向に進めながら、同様のプーリング処理を繰返して値を取得する処理を、太線枠４１１の下の行がデータ４０１の一番下の行の最後尾に達するまで繰返す。そして、プーリング処理部１０３は、取得した値をそれぞれ出力するデータ４０２の要素データｐ０１〜ｐ１５としていく。
【０１１２】
例えば、太線枠４１１が図１６で示すデータ４０１上の位置に配置された場合、プーリング処理部１０３は、要素データｉ１８，ｉ１９，ｉ２６及びｉ２７を取得する。そして、プーリング処理部１０３は、要素データｉ１８，ｉ１９，ｉ２６及びｉ２７を用いてプーリング処理を行い値を取得する。その後、プーリング処理部１０３は、取得した値をデータ４０２の要素データｐ０５とする。
【０１１３】
プーリング処理部１０３は、要素データｐ００〜ｐ１５を取得してデータ４０２を完成させる。その後、プーリング処理部１０３は、データ４０２を次の演算処理層１０へ出力する。
【０１１４】
図１７は、実施例２に係るプーリング処理部によるストライド数が１の場合のプーリング処理を説明するための図である。ストライド数が１の場合、プーリングの対象が１行ずつ下がるため、データ４０１のような配置形状の場合、２つの異なるプーリングサイズを用いる。
【０１１５】
プーリング処理部１０３は、図１７のデータ４０１上に示した太線枠４１２及び４１３をプーリングサイズとして記憶する。そして、プーリング処理部１０３は、データ４０２の奇数行の要素データを算出する場合、太線枠４１３のプーリングサイズを用いる。また、データ４０２の奇数行の要素データを算出する場合、太線枠４１２のプーリングサイズを用いる。
【０１１６】
具体定には、プーリング処理部１０３は、最初に、太線枠４１３の上の行がデータ４０１の１行目の最も若番の要素データに一致するように配置する。そして、太線枠４１３に含まれる要素データｉ００，ｉ０１，ｉ０８及びｉ０９を取得し、取得した要素データの平均や最大値の選択などによるプーリング処理を行い値を取得する。そして、プーリング処理部１０３は、取得した値を出力するデータ４０２の要素データｐ００とする。その後、プーリング処理部１０３は、太線枠４１３がデータ４０１の行の最後尾に達するまで、太線枠４１３を要素データ分ずつ行方向に進めながら、プーリング処理による値の取得を行う。そして、プーリング処理部１０３は、取得した値をそれぞれ出力するデータ４０２の要素データｐ０１〜ｐ０６とする。
【０１１７】
次に、プーリング処理部１０３は、太線枠４１２の上の行がデータ４０１の２行目の最も若番の要素データに一致するように配置する。そして、太線枠４１１に含まれる要素データｉ０８，ｉ０９，ｉ１６及びｉ１７を取得し、取得した要素データの平均や最大値の選択などによるプーリング処理を行い値を取得する。そして、プーリング処理部１０３は、取得した値を出力するデータ４０２の要素データｐ０７とする。その後、プーリング処理部１０３は、太線枠４１２がデータ４０１の行の最後尾に達するまで、太線枠４１２を要素データ分ずつ行方向に進めながら、プーリング処理による値の取得を行う。そして、プーリング処理部１０３は、取得した値をそれぞれ出力するデータ４０２の要素データｐ０８〜ｐ１３とする。
【０１１８】
プーリング処理部１０３は、１行ずつ対象とする行を下げつつ、プーリングサイズを交互に用いてプーリング処理による値の取得を繰返す。そして、プーリング処理部１０３は、取得した値をそれぞれ出力するデータ４０２の要素データｐ１４〜ｐ４８としていく。
【０１１９】
例えば、太線枠４１２が図１７で示すデータ４０１上の位置に配置された場合、プーリング処理部１０３は、要素データｉ０９，ｉ１０，ｉ１７及びｉ１８を取得する。そして、プーリング処理部１０３は、要素データｉ０９，ｉ１０，ｉ１７及びｉ１８を用いてプーリング処理を行い値を取得する。その後、プーリング処理部１０３は、取得した値をデータ４０２の要素データｐ０８とする。
【０１２０】
また、太線枠４１３が図１７で示すデータ４０１上の位置に配置された場合、プーリング処理部１０３は、要素データｉ３２，ｉ３３，ｉ４０及びｉ４１を取得する。そして、プーリング処理部１０３は、要素データｉ３２，ｉ３３，ｉ４０及びｉ４１を用いてプーリング処理を行い値を取得する。その後、プーリング処理部１０３は、取得した値をデータ４０２の要素データｐ２８とする。
【０１２１】
プーリング処理部１０３は、要素データｐ００〜ｐ４８を取得してデータ４０２を完成させる。その後、プーリング処理部１０３は、データ４０２を次の演算処理層１０へ出力する。
【０１２２】
以上に説明したように、本実施例に係る演算処理装置は、フォワード畳込演算の演算結果であるトップデータをそのまま用いてプーリング処理を行うことができる。したがって、新フィルタ定義に合わせてボトムデータを変換してフォワード畳込演算を行った場合でも、処理を増やさずにプーリング処理を行うことができ、ネットワーク全体として演算処理の効率を向上させることができる。
【実施例３】
【０１２３】
次に、実施例３について説明する。本実施例に係る演算処理装置は、新フィルタ定義に合わせてボトムデータを変換した場合に、入力されるデータと出力するデータとを同じ大きさにするパディングを行う。本実例に係る演算処理装置も、図１〜４で表される。以下では、実施例１と同様の各部の機能については説明を省略する。
【０１２４】
図１８は、実施例３に係る畳込演算部によるフォワード畳込演算を説明するための図である。ここでは、８×８のボトムデータ２０１及び新フィルタ定義３０１を使用した重みデータ２２１を用いてフォワード畳込演算を行う場合で説明する。
【０１２５】
入力データ処理部１１１は、ボトムデータ２０１の入力を受ける。そして、入力データ処理部１１１は、ボトムデータ２０１を新フィルタ定義２２１に合わせて変換しボトムデータ２１０とする。
【０１２６】
そして、入力データ処理部１１１は、ボトムデータ２１０の周りに図１８に示すように値が０である要素データ２１３を付加し、ボトムデータ２１４を生成する。このボトムデータ２１０の周りに値が０である要素データ２１３を付加する処理が０パディングである。これにより、入力データ処理部１１１は、トップ差分データ２０３のサイズをボトムデータ２１０のサイズと一致させる。そして、入力データ処理部１１１は、ボトムデータ２１４を乗算部１１２へ出力する。
【０１２７】
乗算部１１２は、ボトムデータ２１４の入力を入力データ処理部１１１から受ける。そして、乗算部１１２は、ボトムデータ２１４に対して、重みデータ２２１を用いてフォワード畳込演算を実行する。これにより、乗算部１１２は、ボトムデータ２１０の要素データｂ００〜ｎｂ６３と同数のトップデータ２０９の要素データｔ００〜ｔ６３を算出する。
【０１２８】
ここで、８×８の行列のボトムデータ２０１の場合、０パディングを行うには３６個の要素データ２１３を用いる。これに対して、ボトムデータ２１０の場合、０パディングを行うには３４個の要素データ２１３を用いる。すなわち、ボトムデータ２１０を用いた方が、変換前のボトムデータ２０１に比べて、０パディングに用いる要素データ２１３が少なくて済む。
【０１２９】
以上に説明したように、本実施例に係る演算処理装置は、新フィルタ定義に合わせた変換後のボトムデータに対して０パディングを行いフォワード畳込演算を行う。この場合、変換前のボトムデータに対して０パディングを行うよりも少ない数の要素データの付加で済み、データ容量を小さくできるとともに演算効率を向上させることができる。
【実施例４】
【０１３０】
次に、実施例４について説明する。本実施例に係る演算処理装置は、３次元データに対して新フィルタ定義を用いてフォワード畳込演算及びバックワード畳込演算を行う。本実例に係る演算処理装置も、図１〜４で表される。本実施例に係る各部は、同様の符号を有する実施例１の各部と同様の処理を３次元データに対して実行する機能を有する。
【０１３１】
図１９は、実施例４に係る畳込演算部による新フィルタ定義を用いたフォワード畳込演算の一例を説明するための図である。重みデータ記憶部１１５は、３次元の新フィルタ定義を使用した重みデータ２２２を記憶する。ここで、重みデータ２２２に対応する従来のフィルタ定義は、３×３×３に要素データが並んだ立方体である。重みデータ２２２は、ｘ〜ｚ方向の正面図が実施例１の新フィルタ定義３０１と同様のデータの配置形状を有する。
【０１３２】
入力データ処理部１１１は、８×８×８の立方体であるボトムデータ２０１の入力を受ける。そして、入力データ処理部１１１は、ボトムデータ２０１の図１９の座標に対応するｙ軸方向及びｚ軸方向に並ぶ隣合う要素データを平均化する。これにより、入力データ処理部１１１は、ボトムデータ２０１のｙ軸方向及びｚ軸方向に隔行ずつ要素データの半分だけずらした見た目を有するボトムデータ２１０を生成する。そして、入力データ処理部１１１は、生成したボトムデータ２１０を乗算部１１２へ出力する。
【０１３３】
乗算部１１２は、ボトムデータ２１０の入力を受ける。そして、乗算部１１２は、新フィルタ定義を使用した重みデータ２２２をボトムデータ２１０に対して用いて、フォワード畳込演算を行う。
【０１３４】
また、畳込演算部１０６は、ボトムデータ２１０と重みデータ２２２とを用いたフォワード畳込演算で算出されたトップデータ２０９の配置形状と同様の配置形状を有するトップ差分データ２０３の入力を受ける。そして、畳込演算部１０６は、ボトムデータ２１０、重みデータ２２２及び取得したトップ差分データ２０３を用いてバックワード畳込演算を実行する。
【０１３５】
次に、図２０を参照して、実施例４に係る畳込演算部１０６による新フィルタ定義を用いたフォワード畳込演算の他の例を説明する。図２０は、実施例４に係る畳込演算部による新フィルタ定義を用いたフォワード畳込演算の他の例を説明するための図である。重みデータ記憶部１１５は、３次元の新フィルタ定義を使用した重みデータ２２３を記憶する。この、重みデータ２２３も、３×３×３に要素データが並んだ立方体に対応する新フィルタ定義である。重みデータ２２３も、ｘ〜ｚ方向の正面図が実施例１の新フィルタ定義３０１と同様のデータの配置形状を有する。
【０１３６】
入力データ処理部１１１は、図１９の場合と同様にボトムデータ２１０を生成する。乗算部１１２は、新フィルタ定義を使用した重みデータ２２３をボトムデータ２１０に対して用いて、フォワード畳込演算を行う。また、畳込演算部１０６は、ボトムデータ２１０と重みデータ２２３とを用いたフォワード畳込演算で算出されたトップデータ２０９と同様のデータの配置形状を有するトップ差分データ２０３を用いてバックワード畳込演算を行う。
【０１３７】
以上に説明したように、本実施例に係る演算処理装置は、３次元データに対しても従来よりも要素データの少ない新フィルタ定義を使用してフォワード畳込演算及びバックワード畳込演算を行う。したがって、本実施例に係る演算処理装置は、３次元データを用いた深層学習の演算において、使用する記憶装置の容量を抑えつつ演算効率を向上させることができる。
【０１３８】
（プログラムの記述例）
図２１は、フォワード畳込演算のプログラムの記述例を説明するための図である。フォワード畳込演算は、図２１に示すようにボトムデータ２０１（ｂｏｔｔｏｍ＿ｙ）とトップデータ２０９（ｔｏｐ＿ｘ）とを用いた演算は掛け算と足し算で表現できる。フォワード畳込演算は、ボトムデータ２０１のデータ数Ｃｉ、トップ差分データ２０３のデータ数Ｃｏ、バッチ数ｍｂ、ストライド数Ｗ及びトップサイズを調節するためのパラメータとなるパッド数ｐａｄを指定して行なわれる。ここで、トップサイズの調整とは、トップサイズの水増しにあたる。
【０１３９】
図２２は、バックワード畳込重み差分演算のプログラムの記述例を説明するための図である。バックワード畳込重み差分演算は、図２２に示すようにボトムデータ２０１（ｂｏｔｔｏｍ＿ｙ）とトップ差分データ２０３（ｔｏｐ＿ｘ）とを用いた演算は掛け算と足し算で表現できる。この場合、重み差分データ（ｅｗ）が算出される。バックワード畳込重み差分演算は、ボトムデータ２０１のデータ数Ｃｉ、トップ差分データ２０３のデータ数Ｃｏ、バッチ数ｍｂ、ストライド数Ｗ及びトップサイズを調節するためのパラメータとなるパッド数ｐａｄを指定して行なわれる。ここで、トップサイズの調整とは、トップサイズの水増しにあたる。
【０１４０】
図２３は、バックワード畳込ボトム差分演算のプログラムの記述例を説明するための図である。バックワード畳込ボトム差分演算は、図２３に示すようにボトムデータ２０１（ｂｏｔｔｏｍ＿ｙ）とトップ差分データ２０３（ｔｏｐ＿ｘ）と用いた演算は掛け算と足し算で表現できる。この場合、ボトム差分データ２０５（ｂｏｔｔｏｍ＿ｅｙ）が算出される。バックワード畳込ボトム差分演算は、ボトムデータ２０１のデータ数Ｃｉ、トップ差分データ２０３のデータ数Ｃｏ、バッチ数ｍｂ、ストライド数Ｗ及びトップサイズを調節するためのパラメータとなるパッド数ｐａｄを指定して行なわれる。ここで、トップサイズの調整とは、トップサイズの水増しにあたる。
【０１４１】
（ハードウェア構成）
図２５は、演算処理装置のハードウェア構成図である。演算処理装置１は、ＣＰＵ（Central  Processing  Unit）９１、メモリ９２、アクセラレータ９３及びメモリ９４を有する。メモリ９２は、ＣＰＵ９１専用のメモリであり、ＣＰＵ９１に含まれてもよい。また、メモリ９４は、アクセラレータ９３のメモリであり、アクセラレータ９３に含まれてもよい。
【０１４２】
メモリ９２は、ＯＳ（Operating  System）及び各演算処理層１０で使用される学習プログラムを含む各種プログラムを記憶する。また、メモリ９２は、入力データ２及び期待値２０７を記憶する。
【０１４３】
ＣＰＵ９１は、メモリ９２に格納されたＯＳを実行する。さらに、ＣＰＵ９１は、メモリ９２が有する学習プログラムを含む各種プログラム、並びに、入力データ２、重みデータ２０２及び期待値２０７を含む各種データをアクセラレータ９３へ出力する。重みデータ２０２には、使用する新フィルタ定義に応じて重みデータ２２１などを含む。そして、ＣＰＵ９１は、深層学習の処理実行をアクセラレータ９３に指示する。その後、ＣＰＵ９１は、学習後の重みデータ２０２をアクセラレータ９３から取得し、メモリ９２に格納された重みデータ２０２を更新する。
【０１４４】
アクセラレータ９３は、例えば、ＧＰＵやＦＰＧＡ（Field  Programmable  Gate  Array）などである。アクセラレータ９３は、ＣＰＵ９１から入力された学習プログラムを含む各種プログラム、並びに、入力データ２及び期待値２０７を含む各種データをメモリ９４に格納する。そして、アクセラレータ９３は、メモリ９４に格納した学習プログラムを含む各種プログラム及び各種データを用いて深層学習の処理を実行する。これにより、アクセラレータ９３は、図２で例示した演算処理層１０の畳込演算部１０１、活性化処理部１０２、プーリング処理部１０３、プーリング処理部１０４、活性化処理部１０５及び畳込演算部１０６の各機能を実現する。アクセラレータ９３は、各演算処理層１０における学習結果である重みデータ２０２をＣＰＵ９１へ出力する。アクセラレータ９３は、全ての演算処理層１０について同様に処理を実行する。ここで、アクセラレータ９３は、各演算処理層１０の処理毎にＣＰＵ９１からデータを取得してもよいし、各演算処理層１０の処理に使用するデータをまとめて取得してもよい。
【符号の説明】
【０１４５】
１  演算処理装置
２  入力データ
３  出力データ
１０〜１４  演算処理層
１０１，１０６  畳込演算部
１０２，１０５  活性化処理部
１０３，１０４  プーリング処理部
１１１  入力データ処理部
１１２  乗算部
１１３  加算部
１１４  出力データ作成部
１１５  重みデータ記憶部
２０１，２１０，２１１  ボトムデータ
２０２，２２１，２２２，２２３  重みデータ
２０３  トップ差分データ
２０４  重み差分データ
２０５  ボトム差分データ
２０７  期待値
２０９  トップデータ
【図１】
2018124867.tif 000004
【図２】
2018124867.tif 000005
【図３】
2018124867.tif 000006
【図４】
2018124867.tif 000007
【図５】
2018124867.tif 000008
【図６】
2018124867.tif 000009
【図７】
2018124867.tif 000010
【図８】
2018124867.tif 000011
【図９】
2018124867.tif 000012
【図１０】
2018124867.tif 000013
【図１１】
2018124867.tif 000014
【図１２】
2018124867.tif 000015
【図１３】
2018124867.tif 000016
【図１４】
2018124867.tif 000017
【図１５】
2018124867.tif 000018
【図１６】
2018124867.tif 000019
【図１７】
2018124867.tif 000020
【図１８】
2018124867.tif 000021
【図１９】
2018124867.tif 000022
【図２０】
2018124867.tif 000023
【図２１】
2018124867.tif 000024
【図２２】
2018124867.tif 000025
【図２３】
2018124867.tif 000026
【図２４】
2018124867.tif 000027