(57)【要約】【課題】畳み込み層における演算量を削減すること。【解決手段】情報処理装置１００は、Pooling層１１０ｂと、畳み込み層１１０ａとを有する。Pooling層１１０ｂは、複数の層を有する学習ネットワークの学習値算出時において、上層から複数の要素を有する誤差勾配の情報を取得する。畳み込み層１１０ａは、重み勾配に含まれる第１要素の値を算出する場合に、下層から取得した情報に含まれる複数の要素のうち、第１要素に対応する領域を特定し、特定した領域の要素を複数の部分領域に分割する。畳み込み層１１０ａは、部分領域に含まれる要素の合計値と部分領域に対応する誤差勾配の要素の値とに基づく値を部分領域毎に算出し、算出した各値を加算することで、第１要素を算出する処理を実行する。【選択図】図４
2018005420.tif 000002
【特許請求の範囲】
【請求項１】
複数の層を有する学習ネットワークの学習値算出時において、上層から複数の要素を有する誤差勾配の情報を取得するPooling層と、
下層から情報を取得した場合に、前記情報に含まれる複数の要素に対して横方向および縦方向の累積加算を実行することで前記情報を積分画像に変換し、
重み勾配に含まれる第１要素の値を算出する場合に、前記積分画像に含まれる複数の要素のうち、前記第１要素に対応する領域を特定し、特定した領域の要素を複数の部分領域に分割し、
前記積分画像の特徴を基にして、前記部分領域に含まれる要素の合計値を算出し、前記部分領域に含まれる要素の合計値と前記部分領域に対応する前記誤差勾配の要素の値とに基づく値を前記部分領域毎に算出し、算出した各値を加算することで、前記第１要素を算出する処理を実行する畳み込み層と
を有することを特徴とする情報処理装置。
【請求項２】
前記畳み込み層は、前記積分画像の特徴を基にして前記部分領域に含まれる要素の合計値を算出する場合に、前記部分領域に基づく第１要素、第２要素、第３要素、第４要素の値を抽出し、第１要素と第４要素との加算値から、第２要素の値と第３要素の値とを減算することで、前記合計値を算出することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
複数の層を有する学習ネットワークの学習値算出時において、上層から複数の要素を有する第１誤差勾配の情報を取得するPooling層と、
下層に出力するための第２誤差勾配の第１領域に含まれる各要素の値を算出する場合に、カーネルに含まれる要素の数だけ、全ての要素の値が前記カーネルの要素と同一となる行列を作成し、
前記行列の値を前記第１誤差勾配の要素の値に応じて更新し、
前記第１領域上に複数の行列をずらして配置し、前記第１領域上で同一の要素に配置された各行列の要素の値を加算することで、前記第１領域に含まれる各要素の値を算出する畳み込み層と
を有することを特徴とする情報処理装置。
【請求項４】
前記畳み込み層は、前記行列を配置した前記第１領域上において、前記行列が配置される位置に応じた第１要素、第２要素、第３要素、第４要素を特定し、前記第１要素および前記第４要素に前記行列と同じ値を設定し、前記第２要素および前記第３要素に前記行列の値にマイナス１を乗算した値を設定する処理を、行列毎に実行することで矩形差分テーブルを生成し、前記矩形差分テーブルに含まれる要素に対して横方向および縦方向の累積加算を実行することで、前記第１領域に含まれる各要素の値を算出することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
コンピュータに、
複数の層を有する学習ネットワークの学習値算出時において、上層から複数の要素を有する誤差勾配の情報を取得し、
下層から情報を取得した場合に、前記情報に含まれる複数の要素に対して横方向および縦方向の累積加算を実行することで前記情報を積分画像に変換し、
重み勾配に含まれる第１要素の値を算出する場合に、前記積分画像に含まれる複数の要素のうち、前記第１要素に対応する領域を特定し、特定した領域の要素を複数の部分領域に分割し、
前記積分画像の特徴を基にして、前記部分領域に含まれる要素の合計値を算出し、
前記部分領域に含まれる要素の合計値と前記部分領域に対応する前記誤差勾配の要素の値とに基づく値を前記部分領域毎に算出し、算出した各値を加算することで、前記第１要素を算出する処理を実行する
処理を実行させることを特徴とする学習ネットワーク学習値算出プログラム。
【請求項６】
コンピュータに、
複数の層を有する学習ネットワークの学習値算出時において、上層から複数の要素を有する第１誤差勾配の情報を取得し、
下層に出力するための第２誤差勾配の第１領域に含まれる各要素の値を算出する場合に、カーネルに含まれる要素の数だけ、全ての要素の値が前記カーネルの要素と同一となる行列を作成し、
前記行列の値を前記第１誤差勾配の要素の値に応じて更新し、
前記第１領域上に複数の行列をずらして配置し、前記第１領域上で同一の要素に配置された各行列の要素の値を加算することで、前記第１領域に含まれる各要素の値を算出する
処理を実行させることを特徴とする学習ネットワーク学習値算出プログラム。
【請求項７】
コンピュータが実行する学習ネットワーク学習値算出方法であって、
複数の層を有する学習ネットワークの学習値算出時において、上層から複数の要素を有する誤差勾配の情報を取得し、
下層から情報を取得した場合に、前記情報に含まれる複数の要素に対して横方向および縦方向の累積加算を実行することで前記情報を積分画像に変換し、
重み勾配に含まれる第１要素の値を算出する場合に、前記積分画像に含まれる複数の要素のうち、前記第１要素に対応する領域を特定し、特定した領域の要素を複数の部分領域に分割し、
前記積分画像の特徴を基にして、前記部分領域に含まれる要素の合計値を算出し、
前記部分領域に含まれる要素の合計値と前記部分領域に対応する前記誤差勾配の要素の値とに基づく値を前記部分領域毎に算出し、算出した各値を加算することで、前記第１要素を算出する処理を実行する
処理を実行することを特徴とする学習ネットワーク学習値算出方法。
【請求項８】
コンピュータが実行する学習ネットワーク学習値算出方法であって、
複数の層を有する学習ネットワークの学習値算出時において、上層から複数の要素を有する第１誤差勾配の情報を取得し、
下層に出力するための第２誤差勾配の第１領域に含まれる各要素の値を算出する場合に、カーネルに含まれる要素の数だけ、全ての要素の値が前記カーネルの要素と同一となる行列を作成し、
前記行列の値を前記第１誤差勾配の要素の値に応じて更新し、
前記第１領域上に複数の行列をずらして配置し、前記第１領域上で同一の要素に配置された各行列の要素の値を加算することで、前記第１領域に含まれる各要素の値を算出する
処理を実行することを特徴とする学習ネットワーク学習値算出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置等に関する。
【背景技術】
【０００２】
ＣＮＮ（Convolutional  Neural  Network）は、畳み込み演算を用いて画像の被写体を学習する多層のネットワークであり、処理内容が異なる層の組み合わせによってできている。図２１および図２２は、従来のＣＮＮを説明するための図である。図２１および図２２に示すように、ＣＮＮは、畳み込み層１０ａ、全結合層１０ｂ、シグモイド層１０ｃを含む。
【０００３】
ＣＮＮは、画像を入力したときのネットワークの答えと正しい答えとの差分を反映させて、汎用的に正解を導出できるようにネットワークの学習を行う。ネットワークの学習では、順伝播と、逆伝播との二つのフェイズが存在し、順伝播と逆伝播とを繰り返し実行する。
【０００４】
図２１を用いて、順伝播の処理について説明する。順伝播では、画像１ａ，２ａ，３ａ，４ａをネットワークに入力し、各画像に対する確率ベクトル１ｂ，２ｂ，３ｂ，４ｂを算出する。ネットワークの畳み込み層１０ａにて、カーネル５と畳み込み演算を実行することで、入力された画像１ａ〜４ａから特徴量を抽出する。抽出された特徴量は、全結合層１０ｂによって特徴量ベクトルに変換される。特徴量ベクトルは、シグモイド層１０ｃによって、確率ベクトル１ｂ〜４ｂに変換される。
【０００５】
図２１に示す確率ベクトル１ｂは、画像１ａが「０」である確率が１００％であることを示している。確率ベクトル２ｂは、画像２ａが「１」である確率が１００％であることを示している。確率ベクトル３ｂは、画像３ａが「３」である確率が１００％であることを示している。確率ベクトル４ｂは、画像４ａが「２」である確率が１００％であることを示している。
【０００６】
図２２を用いて、逆伝播の処理について説明する。逆伝播では、順伝播によってネットワークが出力した確率ベクトル１ｂ〜４ｂと正解との誤差勾配を計算し、誤差勾配を順伝播とは逆順にネットワークを伝播させていく。畳み込み層１０ａ、全結合層１０ｂ、シグモイド層１０ｃでは、逆向きに次の層へ送るための誤差勾配の計算と、自身の層が正しい答えを導くための正しい重みとの重み勾配を計算する。
【０００７】
続いて、ＣＮＮの中からAverage-Poolingを行うPooling層と畳み込み層が連続している部分に着目する。図２１，図２２では説明を省略したが、Pooling層は、畳み込み層１０ａと全結合層１０ｂとの間に存在する層である。図２３は、従来のPooling層と畳み込み層との処理の一例を説明するための図である。図２３において、data1は、図２１で説明した画像１ａ〜４ａに対応するデータである。誤差勾配diff1は、畳み込み層１０ａから出力される誤差勾配である。
【０００８】
重みw_data2は、畳み込み層１０ａで用いられる重みであり、カーネルに対応する。畳み込み層１０ａは、順伝播の処理において、重みw_data2を用いて畳み込み計算を行うことで、data1をdata2に変換し、Pooling層１０ｄに出力する。
【０００９】
一方、畳み込み層１０ａは、逆伝播の処理において、Pooling層１０ｄから誤差勾配diff2を取得し、誤差勾配diff2を基にして、重み勾配w_diff2を算出する。畳み込み層１０ａは、重みw_data2から重み勾配w_diff2を減算した値によって、重みw_data2を更新する。また、畳み込み層１０ａは、誤差勾配diff2と重み勾配w_diff2とを基にして、誤差勾配diff1を算出し、下層に出力する。
【００１０】
Pooling層１０ｄは、順伝播の処理において、data2に対してAverage-Poolingを行うことで、data3を生成する。誤差勾配diff3は、Pooling層１０ｄが、逆伝播の処理において、上層から取得する誤差勾配である。Pooling層１０ｄは、誤差勾配diff3を、誤差勾配diff2に変換して、畳み込み層１０ａに出力する。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２０１５−２１０６７２号公報
【特許文献２】特開２００８−３１０５２４号公報
【特許文献３】特開２０１５−５２８３２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、上述した従来技術では、畳み込み層における演算量が大きいという問題がある。
【００１３】
１つの側面では、本発明は、畳み込み層における演算量を削減することができる情報処理装置、学習ネットワーク学習値算出プログラムおよび学習ネットワーク学習値算出方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
第１の案では、情報処理装置は、Pooling層と、畳み込み層とを有する。Pooling層は、複数の層を有する学習ネットワークの学習値算出時において、上層から複数の要素を有する誤差勾配の情報を取得する。畳み込み層は、下層から情報を取得した場合に、前記情報に含まれる複数の要素に対して横方向および縦方向の累積加算を実行することで前記情報を積分画像に変換する。畳み込み層は、重み勾配に含まれる第１要素の値を算出する場合に、積分画像に含まれる複数の要素のうち、第１要素に対応する領域を特定し、特定した領域の要素を複数の部分領域に分割する。畳み込み層は、積分画像の特徴を基にして、部分領域に含まれる要素の合計値を算出する。畳み込み層は、部分領域に含まれる要素の合計値と部分領域に対応する誤差勾配の要素の値とに基づく値を部分領域毎に算出し、算出した各値を加算することで、第１要素を算出する処理を実行する。
【発明の効果】
【００１５】
畳み込み層における演算量を削減することができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、従来のＣＮＮが重み勾配w_diff2を算出する処理の一例を説明するための図（１）である。
【図２】図２は、従来のＣＮＮが重み勾配w_diff2を算出する処理の一例を説明するための図（２）である。
【図３】図３は、従来のＣＮＮが重み勾配w_diff2を算出する処理手順を示すフローチャートである。
【図４】図４は、本実施例１に係る情報処理装置の構成を示す機能ブロック図である。
【図５】図５は、本実施例１に係る畳み込み層の処理を説明するための図である。
【図６】図６は、入力データを積分画像に変換する処理の一例を説明するための図である。
【図７】図７は、積分画像を用いて矩形領域の総和を算出する処理を説明するための図である。
【図８】図８は、積分画像の特性を利用した畳み込み層の処理を説明するための図である。
【図９】図９は、本実施例１に係る情報処理装置の処理手順を示すフローチャートである。
【図１０】図１０は、重み勾配w_diff2を求める計算量を説明するための図である。
【図１１】図１１は、従来のＣＮＮが誤差勾配を算出する処理の一例を説明するための図である。
【図１２】図１２は、従来のＣＮＮが誤差勾配diff2を算出する処理手順を示すフローチャートである。
【図１３】図１３は、本実施例２に係る情報処理装置の構成を示す機能ブロック図である。
【図１４】図１４は、本実施例２に係る畳み込み層の処理を説明するための図（１）である。
【図１５】図１５は、本実施例２に係る畳み込み層の処理を説明するための図（２）である。
【図１６】図１６は、矩形差分テーブルを説明するための図である。
【図１７】図１７は、本実施例２に係る畳み込み層が生成する矩形差分テーブルの一例を示す図である。
【図１８】図１８は、本実施例２に係る情報処理装置の処理手順を示すフローチャートである。
【図１９】図１９は、誤差勾配diff1を求める計算量を説明するための図である。
【図２０】図２０は、情報処理装置のハードウェア構成の一例を示す図である。
【図２１】図２１は、従来のＣＮＮを説明するための図（１）である。
【図２２】図２２は、従来のＣＮＮを説明するための図（２）である。
【図２３】図２３は、従来のPooling層と畳み込み層との処理の一例を説明するための図である。
【発明を実施するための形態】
【００１７】
以下に、本願の開示する情報処理装置、学習ネットワーク学習値算出プログラムおよび学習ネットワーク学習値算出方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１８】
本実施例１の説明を行う前に、従来のＣＮＮが重み勾配w_diff2を算出する処理の一例について説明する。図１および図２は、従来のＣＮＮが重み勾配w_diff2を算出する処理の一例を説明するための図である。図１に示すように、Pooling層１０ｄは、上層から誤差勾配diff3を取得すると、誤差勾配diff3を平均的に拡張することで、誤差勾配diff2を生成する。
【００１９】
図１に示す例では、誤差勾配diff3（２×２）が与えられ、Pooling層１０ｄは、誤差勾配diff3を誤差勾配diff2（１０×１０）に拡張する。誤差勾配diff3の各要素をP1、P2、P3、P4とする。Pooling層１０ｄは、各要素P1、P2、P3、P4を、５×５の領域となるdiff2-1、diff2-2、diff2-3、diff2-4へと拡張する。逆伝播のAverage-Poolingでは、各要素P1、P2、P3、P4の値を２５で割った値を、領域diff2-1、diff2-2、diff2-3、diff2-4にそれぞれ格納する。
【００２０】
図２の説明に移行する。data1および誤差勾配diff2に示す各数値はインデックスである。畳み込み層１０ａは、data1をカーネルサイズ毎に切り出して、誤差勾配diff2の対応する値でスカラー倍する。図２に示す例では、カーネルサイズを３×３とする。tmp_mtは行列を示すものである。各行列tmp_mtに含まれるX[i]は、data1のインデックスiに対応する値を示す。z[i]は、data2のインデックスiに対応する値を示す。
【００２１】
例えば、畳み込み層１０ａは、重み勾配w_diff2に含まれるwd1〜wd9の値を下記のように算出する。
wd1=X[1]×z[1]+X[2]×z[2]+・・・+X[118]×z[100]
wd2=X[2]×z[1]+X[3]×z[2]+・・・+X[119]×z[100]
wd3=X[3]×z[1]+X[4]×z[2]+・・・+X[120]×z[100]
wd4=X[13]×z[1]+X[14]×z[2]+・・・+X[130]×z[100]
wd5=X[14]×z[1]+X[15]×z[2]+・・・+X[131]×z[100]
wd6=X[15]×z[1]+X[16]×z[2]+・・・+X[132]×z[100]
wd7=X[25]×z[1]+X[26]×z[2]+・・・+X[118]×z[100]
wd8=X[26]×z[1]+X[27]×z[2]+・・・+X[143]×z[100]
wd9=X[27]×z[1]+X[28]×z[2]+・・・+X[144]×z[100]
【００２２】
図２に示す例では、３×３の行列tmp_mtが１００枚作成される。従来の畳み込み層１０ａは、１００枚の行列tmp_mtをスカラー倍した後に、全て加算することで、重み勾配w_diff2を算出する。
【００２３】
続いて、従来のＣＮＮが重み勾配w_diff2を算出する処理手順の一例について説明する。図３は、従来のＣＮＮが重み勾配w_diff2を算出する処理手順を示すフローチャートである。図３に示すように、ＣＮＮのPooling層１０ｄは、誤差勾配diff3を取得する（ステップＳ１０）。Pooling層１０ｄは、誤差勾配diff3の各要素を、誤差勾配diff2の要素数比率で割る（ステップＳ１１）。Pooling層１０ｄは、誤差勾配diff2の各領域にそれぞれ要素数比率で割った値を代入する（ステップＳ１２）。
【００２４】
ＣＮＮの畳み込み層１０ａは、順伝播のdata1を取得する（ステップＳ１３）。畳み込み層１０ａは、順伝播のdata1から矩形に切り取った行列tmp_mtの各要素X[i]を誤差勾配diff2の要素倍（z[i]倍）する（ステップＳ１４）。畳み込み層１０ａは、誤差勾配diff2の要素数分の行列tmp_mtを作成したか否かを判定する（ステップＳ１５）。
【００２５】
畳み込み層１０ａは、誤差勾配diff2の要素数分の行列tmp_mtを作成していない場合には（ステップＳ１５，Ｎｏ）、ステップＳ１４に移行する。一方、畳み込み層１０ａは、誤差勾配diff2の要素数分の行列tmp_mtを作成した場合には（ステップＳ１５，Ｙｅｓ）、全ての行列tmp_mtを加算して、重み勾配w_diff2を算出する（ステップＳ１６）。畳み込み層１０ａは、重み勾配w_diff2を出力する（ステップＳ１７）。
【００２６】
従来のＣＮＮが重み勾配w_diff2を算出する処理では、例えば、図３のステップＳ１３〜Ｓ１６に示した演算量が大きくなっている。
【００２７】
次に、本実施例１に係る情報処理装置の構成について説明する。図４は、本実施例１に係る情報処理装置の構成を示す機能ブロック図である。図４に示すように、この情報処理装置１００は、入力部５０ａと、受付部５０ｂと、ＣＮＮ処理部１１０とを有する。
【００２８】
入力部５０ａは、ＣＮＮ処理部１１０に、学習対象となる画像データを入力する処理部である。また、入力部５０ａは、入力した画像データに対する確率ベクトルの正解情報を、受付部５０ｂに出力する。
【００２９】
受付部５０ｂは、ＣＮＮ処理部１１０から、入力部５０ａによって入力された画像データに対する確率ベクトルの情報を受け付ける処理部である。また、受付部５０ｂは、ＣＮＮ処理部１１０から受け付けた確率ベクトルと、正解情報との差分を算出することで、誤差勾配を求め、誤差勾配の情報を、ＣＮＮ処理部１１０に出力する。
【００３０】
ＣＮＮ処理部１１０は、画像データが入力されたときのネットワークの答えと正解情報との誤差勾配を反映させて、汎用的に正解を導出できるようにネットワークの学習を行う処理部である。ＣＮＮ処理部１１０は、畳み込み層１１０ａ、Pooling層１１０ｂ、全結合層１１０ｃ、シグモイド層１１０ｄを有する。ＣＮＮ処理部１１０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）や、ＦＰＧＡ（Field  Programmable  Gate  Array）などの集積装置に対応する。また、ＣＮＮ処理部１１０は、例えば、ＣＰＵやＭＰＵ（Micro  Processing  Unit）等の電子回路に対応する。
【００３１】
ＣＮＮ処理部１１０が実行するネットワークの学習では、順伝播と、逆伝播との二つのフェイズが存在し、順伝播と逆伝播とを繰り返し実行する。
【００３２】
ＣＮＮ処理部１１０が実行する順伝播の処理について説明する。順伝播において、ＣＮＮ処理部１１０は、画像データの入力を受け付けると、畳み込み層１１０ａにて、カーネルと畳み込み演算を実行し、入力された画像データから特徴量を抽出する。抽出された特徴量は、Pooling層１１０ｂにより、Average-Poolingが実行された後、全結合層１１０ｃに入力される。全結合層１１０ｃは、特徴量を特徴量ベクトルに変換する。特徴量ベクトルは、シグモイド層１１０ｄによって、確率ベクトルに変換される。
【００３３】
ＣＮＮ処理部１１０が実行する逆伝播の処理について説明する。ＣＮＮ処理部１１０は、確率ベクトルと正解情報との誤差勾配の情報を受付部５０ｂから取得し、誤差勾配を順伝播とは逆順にネットワークを伝播させていく。畳み込み層１１０ａ、全結合層１１０ｃ、シグモイド層１１０ｄでは、逆向きに次の層へ送るための誤差勾配の計算と、自身の層が正しい答えを導くための正しい重みとの重み勾配を計算する。
【００３４】
ここで、本実施例１に係るＣＮＮ処理部１１０は、畳み込み層１１０ａで重み勾配w_diff2を算出する手法が、従来のＣＮＮと比較して異なるので、畳み込み層１１０ａが、重み勾配w_diff2を算出する処理について説明する。
【００３５】
図５は、本実施例１に係る畳み込み層の処理を説明するための図である。図５に示すdata1、diff2の数値は、インデックスである。図５において、誤差勾配diff3は、Pooling層１１０ｂが上層から取得した誤差勾配である。また、Pooling層１１０ｂは、図１で説明したPooling層１０ｄと同様にして、誤差勾配diff3を誤差勾配diff2（１０×１０）に拡張する。例えば、Pooling層１１０ｂは、各要素P1、P2、P3、P4を、５×５の領域となるdiff2-1、diff2-2、diff2-3、diff2-4へと拡張する。逆伝播のAverage-Poolingでは、各要素P1、P2、P3、P4の値を２５で割った値を、領域diff2-1、diff2-2、diff2-3、diff2-4にそれぞれ格納する。なお、領域diff2-1、diff2-2、diff2-3、diff2-4の大きさがｎ×ｎである場合には、Pooling層１１０ｂは、各要素P1、P2、P3、P4の値をｎ×ｎで割った値を、領域diff2-1、diff2-2、diff2-3、diff2-4にそれぞれ格納する。
【００３６】
ここで、重み勾配w_diff2に含まれるwd1を算出する例について検討する。wd1は、式（１）によって算出される。
【００３７】
wd1=data1[1]*diff2[1]+data1[2]*diff2[1]+・・・+data1[117]*diff2[99]+data1[118]*diff2[100]・・・（１）
【００３８】
ここで、領域diff2-1、diff2-2、diff2-3、diff2-4に含まれる値は全て同じであることがわかっている。従って、上記の式（１）を下記の式（２）に変更することが可能である。
【００３９】
wd1=P1/25*sum(data1[1],data1[53])+P2/25*sum(data1[6],data1[58])+P3/25*sum(data1[61],data1[113])+P4/25*sum(data1[66],data1[118])・・・（２）
【００４０】
式（２）において、sum(a,b)は、a,bからなる矩形内の値の総和を意味する。例えば、sum(data1[1],data1[53])は、data1のインデックス１〜５、１３〜１７、２５〜２９、３７〜４１、４９〜５３の値を合計した値に対応する。
【００４１】
すなわち、畳み込み層１１０ａは、式（１）に示す問題を、式（２）に示すような矩形の総和を求める問題に変換する。例えば、畳み込み層１１０ａは、重み勾配w_diff2に含まれる要素wd1の値を算出する場合に、要素wd1に対応するdata1上の計算範囲Ａ１を特定する。畳み込み層１１０ａは、計算範囲Ａ１を、誤差勾配diff3の要素数に応じた矩形に分割する。畳み込み層１１０ａは、分割した矩形に含まれる値の合計値と、誤差勾配diff3の要素に対応した値とをそれぞれ乗算し、乗算した結果を合計することで、wd1の値を算出する。
【００４２】
同様に、畳み込み層１１０ａは、要素wdiの値を計算する場合には、要素wdiに対応するdata1上の計算範囲Ａiを特定する。畳み込み層１１０ａは、計算範囲Ａiを、誤差勾配diff3の要素数に応じた矩形に分割する。畳み込み層１１０ａは、分割した矩形に含まれる値の合計値と、誤差勾配diff3の要素に対応した値とをそれぞれ乗算し、乗算した結果を合計することで、要素wdiの値を算出する。
【００４３】
ところで、畳み込み層１１０ａは、data1を下層から取得した場合に、data1を積分画像に変換しておく。後述するように、積分画像を利用することで、畳み込み層１１０ａは、重み勾配w_diff2を算出する場合の処理負荷を軽減することができる。まず、データを積分画像に変換する処理の一例について説明した後、積分画像を用いて重み勾配w_diff2を算出する処理について説明する。
【００４４】
図６は、入力データを積分画像に変換する処理の一例を説明する。ここでは説明のため、変換対象とする入力データをデータ２０ａとする。後述するように、Column-wise  prefix-sum、Row-wise  prefix-sumを順に実行することで、データ２０ａに対する積分画像２０ｃが生成される。
【００４５】
畳み込み層１１０ａは、データ２０ａの列方向について、Column-wise  prefix-sumを実行する。Column-wise  prefix-sumは、着目するセルの値と、着目するセルの一つ上のセルの値を加算する処理を、２行目のセルから下方向のセルに向かって順に実行する処理である。畳み込み層１１０ａが、データ２０ａに対して、Column-wise  prefix-sumを実行することで、データ２０ｂが生成される。
【００４６】
続いて、畳み込み層１１０ａは、データ２０ｂの行方向について、Row-wise  prefix-sumを実行する。Row-wise  prefix-sumは、着目するセルの値と、着目するセルの一つ左のセルの値を加算する処理を、２行目のセルから右方向のセルに向かって順に実行する処理である。畳み込み層１１０ａが、データ２０ｂに対して、Row-wise  prefix-sumを実行することで、積分画像２０ｃが生成される。
【００４７】
積分画像を用いることで、任意の矩形領域の総和を容易に算出することが可能となる。図７は、積分画像を用いて矩形領域の総和を算出する処理を説明するための図である。例えば、データ２０ａの矩形領域２１の総和を求める場合には、下記により算出することができる。
【００４８】
矩形領域２１の総和＝セル２１ｄの値（６６）−セル２１ｃの値（１９）−セル２１ｂの値（２１）＋セル２１ａの値（４）＝３０
【００４９】
畳み込み層１１０ａは、data1を下層から取得した場合に、上記のColumn-wise  prefix-sum、Row-wise  prefix-sumを実行することで、data1の積分画像を生成する。以下の説明では、data1の積分画像をdata1(SAT)と表記する。
【００５０】
上述した積分画像の特性を利用することで、式（２）を式（３）に変換することができる。図８は、積分画像の特性を利用した畳み込み層の処理を説明するための図である。式（３）において、SAT[i]は、積分画像に変換される前のdata1において、インデックス１を矩形の左上端、インデックスｉを矩形の右下端とする矩形に含まれる値の合計値を示すものである。
【００５１】
wd1=P1/25*SAT[53]+P2/25*(SAT[58]-SAT[53])+P3/25*(SAT[113]-SAT[53])+P4/25*(SAT[118]-SAT[113]-SAT[58]+SAT[53])・・・（３）
【００５２】
ここでは、説明の便宜上、wd1を算出する場合について説明したが、wd2〜wd9についても同様に積分画像の特性を用いて算出することができる。
【００５３】
次に、本実施例１に係る情報処理装置の処理手順について説明する。図９は、本実施例１に係る情報処理装置の処理手順を示すフローチャートである。図９に示すように、情報処理装置１００の畳み込み層１１０ａは、Pooling層１１０ｂから誤差勾配diff3を取得する（ステップＳ１０１）。畳み込み層１１０ａは、順伝播のdata1（SAT）を算出する（ステップＳ１０２）。
【００５４】
畳み込み層１１０ａは、data1(SAT)から誤差勾配diff3に対応した矩形総和を取得する（ステップＳ１０３）。畳み込み層１１０ａは、誤差勾配diff3の１要素と矩形総和とを乗算する（ステップＳ１０４）。畳み込み層１１０ａは、矩形総和を要素数比率で割って加算する（ステップＳ１０５）。畳み込み層１１０ａは、誤差勾配diff3の要素数回実行したか否かを判定する（ステップＳ１０６）。畳み込み層１１０ａは、誤差勾配diff3の要素数回実行していない場合には（ステップＳ１０６，Ｎｏ）、ステップＳ１０３に移行する。
【００５５】
一方、畳み込み層１１０ａは、誤差勾配diff3の要素数回実行した場合には（ステップＳ１０６，Ｙｅｓ）、重み勾配w_diff2の要素数回実行したか否かを判定する（ステップＳ１０７）。畳み込み層１１０ａは、重み勾配w_diff2の要素数回実行してない場合には（ステップＳ１０７，Ｎｏ）、ステップＳ１０３に移行する。
【００５６】
一方、畳み込み層１１０ａは、重み勾配w_diff2の要素数回実行した場合には（ステップＳ１０７，Ｙｅｓ）、重み勾配w_diff2を出力する（ステップＳ１０８）。
【００５７】
次に、本実施例１に係る情報処理装置１００の効果について説明する。情報処理装置１００の畳み込み層１１０ａは、逆伝播の処理において、重み勾配w_diff2を算出する場合に、従来の計算問題を、data1の矩形の総和を求める計算問題に置き換えることにより、演算量を削減することができる。
【００５８】
ここで、従来の計算問題は、data1をカーネルサイズ毎に切り出し、誤差勾配diff2に対応する値でスカラー倍した後に、各行列の値を合計する計算問題である。一方、畳み込み層１１０ａは、重み勾配w_diff2の要素に対応するdata1上の計算範囲を特定し、計算範囲を、誤差勾配diff3の要素数に応じた矩形に分割する。そして、畳み込み層１１０ａは、分割した矩形に含まれる値の総和と、誤差勾配diff3の要素に対応した値とをそれぞれ乗算し、乗算した結果を合計することで、重み勾配w_diff2の各要素の値を算出する。
【００５９】
また、畳み込み層１１０ａは、分割した矩形に含まれる値の総和を算出する場合に、積分画像の特性を用いて、矩形の総和を算出するため、更に演算量を削減することができる。
【００６０】
図１０は、重み勾配w_diff2を求める計算量を説明するための図である。従来技術の計算量は、乗算部分についてはｄｋ２（Ｎ−ｋ＋１）２＋ｄｐ２となり、加算部分については、ｄｋ２（Ｎ−ｋ＋１）２となる。一方、本実施例１に係る情報処理装置１００の計算量は、乗算部分についてはｄｋ２＋ｄｐ２となり、加算部分については４ｄｋ２ｐ２＋ｄｐ２＋２Ｎ２となる。ここで、data1のサイズをＮ×Ｎ、重み勾配w_diff2のサイズをｋ×ｋ、誤差勾配diff3のサイズをｐ×ｐ、カーネル数をｄとする。各記号の大小関係は、「Ｎ＞＞ｐ，Ｎ＞＞ｋ」となる。このため、Ｎの値が計算量に与える影響が大きいため、従来技術の計算量が、情報処理装置１００の計算量よりも大きいことがわかる。
【実施例２】
【００６１】
本実施例２の説明を行う前に、従来のＣＮＮが誤差勾配diff1を算出する処理の一例を説明する。図１１は、従来のＣＮＮが誤差勾配を算出する処理の一例を説明するための図である。なお、従来のＣＮＮでは、図１で説明したように、Pooling層１０ｄが、上層から誤差勾配diff3を取得すると、誤差勾配diff3を平均的に拡張することで、誤差勾配diff2を生成する。
【００６２】
図１１において、誤差勾配diff2および重み勾配w_diff2に示す各数値はインデックスである。各行列tmp_mtに含まれるw[i]は、重み勾配w_diff2のインデックスiに対応する値を示す。diff2[i]は、誤差勾配diff2のインデックスiに対応する値を示す。
【００６３】
誤差勾配diff2には、インデックス１〜１００の要素が存在するため、畳み込み層１０ａは、重み勾配w_diff2を誤差勾配diff2の各要素でスカラー倍して、１００枚の３×３の行列tmp_mtを作成する。畳み込み層１０ａは、１００枚の３×３の行列tmp_mtを、誤差勾配diff1の対応する領域へ加算する処理を繰り返し実行する。
【００６４】
誤差勾配diff1の各インデックスの値の初期値は０となっている。畳み込み層１０ａは、重み（カーネル）w_data2の各値にdiff2[1]を乗算した値と、領域diff1-1の該当するインデックスの値とを加算した値によって、領域diff1-1の該当するインデックスの値を更新する。例えば、畳み込み層１０ａは、w[1]×diff2[1]と、diff1-1のインデックス１の値とを加算した値によって、diff1-1のインデックス１の値を更新する。畳み込み層１０ａは、w[2]×diff2[1]と、diff1-1のインデックス２の値とを加算した値によって、diff1-1のインデックス２の値を更新する。畳み込み層１０ａは、領域diff1-1の他のインデックス３，１３，１４，１５，２５，２６，２７の値についても同様に更新する。
【００６５】
畳み込み層１０ａは、重みw_data2の各値にdiff2[2]を乗算した値と、領域diff1-2の該当するインデックスの値とを加算した値によって、領域diff1-2の該当するインデックスの値を更新する。上記のように、畳み込み層１０ａは、w_data2×diff2[ｉ]を変更しつつ、誤差勾配diff1の対象となる領域を移動させながら、上記処理を繰り返し実行することで、誤差勾配diff1のインデックスの値を更新していき、最終的な誤差勾配diff1を生成する。
【００６６】
続いて、従来のＣＮＮが誤差勾配diff1を算出する処理手順の一例について説明する。図１２は、従来のＣＮＮが誤差勾配diff2を算出する処理手順を示すフローチャートである。図１２に示すように、ＣＮＮのPooling層１０ｄは、誤差勾配diff3を取得する（ステップＳ２０）。Pooling層１０ｄは、誤差勾配diff3の各要素を、誤差勾配diff2の要素数比率で割る（ステップＳ２１）。Pooling層１０ｄは、誤差勾配diff2の各領域にそれぞれ要素数比率で割った値を代入する（ステップＳ２２）。
【００６７】
ＣＮＮの畳み込み層１０ａは、重み（カーネル）w_data2を取得する（ステップＳ２３）。畳み込み層１０ａは、重みw_data2の各要素を誤差勾配diff2の各要素で乗算する（ステップＳ２４）。畳み込み層１０ａは、誤差勾配diff2の要素数分の行列tmp_mtを作成したか否かを判定する（ステップＳ２５）。畳み込み層１０ａは、誤差勾配diff2の要素数分の行列tmp_mtを作成していない場合には（ステップＳ２５，Ｎｏ）、ステップＳ２４に移行する。
【００６８】
畳み込み層１０ａは、誤差勾配diff2の要素数分の行列tmp_mtを作成した場合には（ステップＳ２５，Ｙｅｓ）、行列tmp_mtの各値を誤差勾配diff1の対応するインデックスの値に加算する（ステップＳ２６）。畳み込み層１０ａは、全ての行列tmp_mtに対して実行したか否かを判定する（ステップＳ２７）。
【００６９】
畳み込み層１０ａは、全ての行列tmp_mtに対して実行していない場合には（ステップＳ２７，Ｎｏ）、ステップＳ２６に移行する。畳み込み層１０ａは、全ての行列tmp_mtに対して実行した場合には（ステップＳ２７，Ｙｅｓ）、誤差勾配diff1を出力する（ステップＳ２８）。
【００７０】
次に、本実施例２に係る情報処理装置の構成について説明する。図１３は、本実施例２に係る情報処理装置の構成を示す機能ブロック図である。図１３に示すように、この情報処理装置２００は、入力部５０ａと、受付部５０ｂと、ＣＮＮ処理部２１０とを有する。
【００７１】
入力部５０ａ、受付部５０ｂに関する説明は、図４で説明した入力部５０ａ、受付部５０ｂに関する説明と同様であるため、ここでは説明を省略する。
【００７２】
ＣＮＮ処理部２１０は、画像データが入力されたときのネットワークの答えと正解情報との誤差勾配を反映させて、汎用的に正解を導出できるようにネットワークの学習を行う処理部である。ＣＮＮ処理部２１０は、畳み込み層２１０ａ、Pooling層１１０ｂ、全結合層１１０ｃ、シグモイド層１１０ｄを有する。ＣＮＮ処理部２１０は、例えば、ＡＳＩＣや、ＦＰＧＡなどの集積装置に対応する。また、ＣＮＮ処理部２１０は、例えば、ＣＰＵやＭＰＵ等の電子回路に対応する。
【００７３】
ＣＮＮ処理部２１０が実行するネットワークの学習では、順伝播と、逆伝播との二つのフェイズが存在し、順伝播と逆伝播とを繰り返し実行する。
【００７４】
ＣＮＮ処理部２１０が実行する順伝播の処理について説明する。順伝播において、ＣＮＮ処理部２１０は、画像データの入力を受け付けると、畳み込み層２１０ａにて、カーネルと畳み込み演算を実行し、入力された画像データから特徴量を抽出する。抽出された特徴量は、Pooling層１１０ｂにより、Average-Poolingが実行された後、全結合層１１０ｃに入力される。全結合層１１０ｃは、特徴量を特徴量ベクトルに変換する。特徴量ベクトルは、シグモイド層１１０ｄによって、確率ベクトルに変換される。
【００７５】
ＣＮＮ処理部２１０が実行する逆伝播の処理について説明する。ＣＮＮ処理部２１０は、確率ベクトルと正解情報との誤差勾配の情報を受付部５０ｂから取得し、誤差勾配を順伝播とは逆順にネットワークを伝播させていく。畳み込み層２１０ａ、全結合層１１０ｃ、シグモイド層１１０ｄでは、逆向きに次の層へ送るための誤差勾配の計算と、自身の層が正しい答えを導くための正しい重みとの重み勾配を計算する。
【００７６】
ここで、本実施例２に係るＣＮＮ処理部２１０は、畳み込み層２１０ａで誤差勾配diff1を算出する手法が、従来のＣＮＮと比較して異なるので、畳み込み層２１０ａが、誤差勾配diff1を算出する処理について説明する。
【００７７】
図１４は、本実施例２に係る畳み込み層の処理を説明するための図（１）である。図１４に示す誤差勾配diff1、diff2の数値は、インデックスである。誤差勾配diff3は、Pooling層１１０ｂが上層から取得した誤差勾配である。また、Pooling層１１０ｂは、図１で説明したPooling層１０ｄと同様にして、誤差勾配diff3を誤差勾配diff2（１０×１０）に拡張する。例えば、Pooling層１１０ｂは、各要素P1、P2、P3、P4を、５×５の領域となるdiff2-1、diff2-2、diff2-3、diff2-4へと拡張する。逆伝播のAverage-Poolingでは、各要素P1、P2、P3、P4の値を２５で割った値を、領域diff2-1、diff2-2、diff2-3、diff2-4にそれぞれ格納する。
【００７８】
このため、領域diff2-1の全てのインデックスの値は同じである。この特性により、重みw_data2の各値にdiff2[i]を乗算することで得られる行列は全て同じとなる（i=1〜5,11〜15,21〜25,31〜35,41〜45）。例えば、重みw_data2の各値をP1/25でスカラー倍した行列と同じになる。重みw_data2の各値をP1/25でスカラー倍した行列を、行列tmp_mt1と表記する。
【００７９】
領域diff2-2の全てのインデックスの値は同じである。この特性により、重みw_data2の各値にdiff2[i]を乗算することで得られる行列は全て同じとなる（i=6〜10,16〜20,26〜30,36〜40,46〜50）。例えば、重みw_data2の各値をP2/25でスカラー倍した行列と同じになる。重みw_data2の各値をP2/25でスカラー倍した行列を、行列tmp_mt2と表記する。
【００８０】
領域diff2-3の全てのインデックスの値は同じである。この特性により、重みw_data2の各値にdiff2[i]を乗算することで得られる行列は全て同じとなる（i=51〜55,61〜65,71〜75,81〜85,91〜95）。例えば、重みw_data2の各値をP3/25でスカラー倍した行列と同じになる。重みw_data2の各値をP3/25でスカラー倍した行列を、行列tmp_mt3と表記する。
【００８１】
領域diff2-4の全てのインデックスの値は同じである。この特性により、重みw_data2の各値にdiff2[i]を乗算することで得られる値は全て同じとなる（i=56〜60,66〜70,76〜80,86〜90,96〜100）。例えば、重みw_data2の各値をP4/25でスカラー倍した行列と同じになる。重みw_data2の各値をP4/25でスカラー倍した行列を、行列tmp_mt4と表記する。
【００８２】
ここで、畳み込み層２１０ａは、行列tmp_mt1の値を、重みw_data2のサイズ毎に、領域diff1-1へ加算する処理を繰り返し実行する。領域diff1-1の左上端のインデックスは「１」、右下端のインデックスは「７９」である。重みw_data2のサイズを３×３とすると、領域diff1-1のうち３×３のウィンドウ毎に、処理を行うことになる。誤差勾配diff1の各インデックスの値の初期値を０とする。
【００８３】
まず、畳み込み層２１０ａは、３×３のウィンドウを領域diff1-1の１〜３，１３〜１５，２５〜２７に設定して下記の処理を行う。畳み込み層２１０ａは、w[1]×P1/25の値と、diff1-1のインデックス１の値とを加算した値によって、diff1-1のインデックス１の値を更新する。続いて、畳み込み層２１０ａは、w[2]×P1/25の値と、diff1-1のインデックス２の値とを加算した値によって、diff1-1のインデックス２の値を更新する。畳み込み層２１０ａは、インデックス３，１３〜１５，２５〜２７についても同様にして値を更新する。
【００８４】
畳み込み層２１０ａは、３×３のウィンドウを領域diff1-1の２〜４，１４〜１６，２６〜２８に設定して下記の処理を行う。畳み込み層２１０ａは、w[1]×P1/25の値と、diff1-1のインデックス１の値とを加算した値によって、diff1-1のインデックス２の値を更新する。続いて、畳み込み層２１０ａは、w[2]×P1/25の値と、diff1-1のインデックス３の値とを加算した値によって、diff1-1のインデックス３の値を更新する。畳み込み層２１０ａは、インデックス４，１４〜１６，２６〜２８についても同様にして値を更新する。
【００８５】
畳み込み層２１０ａは、上記の手順によって、ウィンドウをずらしながら、領域diff1-1のインデックスの値を更新する。誤差勾配diff2の要素は２５個なので、畳み込み層２１０ａは、ウィンドウをずらして、インデックスを更新する処理を２５回繰り返す。
【００８６】
上述した領域diff1-1へ加算する処理と同様の処理により、畳み込み層２１０ａは、行列tmp_mt2の値を、重みw_data2のサイズ毎に、領域diff1-2へ加算する処理を繰り返し実行する。領域diff1-2の左上端のインデックスは「６」、右下端のインデックスは「８４」である。
【００８７】
上述した領域diff1-1へ加算する処理と同様の処理により、畳み込み層２１０ａは、行列tmp_mt3の値を、重みw_data2のサイズ毎に、領域diff1-3へ加算する処理を繰り返し実行する。領域diff1-3の左上端のインデックスは「６１」、右下端のインデックスは「１３９」である。
【００８８】
上述した領域diff1-1へ加算する処理と同様の処理により、畳み込み層２１０ａは、行列tmp_mt4の値を、重みw_data2のサイズ毎に、領域diff1-4へ加算する処理を繰り返し実行する。領域diff1-4の左上端のインデックスは「６６」、右下端のインデックスは「１４４」である。
【００８９】
ところで、図１４で説明した畳み込み層２１０ａの計算問題を、複数毎の同値の矩形領域を加算する計算問題に置き換えることで、演算量を削減することができる。図１５は、本実施例２に係る畳み込み層の処理を説明するための図（２）である。例えば、３×３の行列tmp_mtを加算した後のdiff1-1の各要素を考えると、diff1-1の行列は、５×５の同値の行列を、重みw_data2の要素分だけ用意し、diff1-1に加算したものと等価である。
【００９０】
すなわち、図１４で説明した処理では、領域diff1-1の各要素（インデックス）の値を算出する場合に、３×３の行列tmp_mt1を２５枚用意して加算していたが、図１５に示すように、５×５の行列を９枚用意して、加算していく処理に変換することができる。
【００９１】
５×５の行列は、行列tmp_nt1〜tmp_nt9となる。なお、図１５において、行列tmp_nt3〜tmp_nt8の図示を省略する。行列mp_nt1の各要素には、w[1]をP1/25でスカラー倍した値が設定される。行列mp_nt2の各要素には、w[2]をP1/25でスカラー倍した値が設定される。行列mp_nt3の各要素には、w[3]をP1/25でスカラー倍した値が設定される。行列mp_nt4の各要素には、w[4]をP1/25でスカラー倍した値が設定される。行列mp_nt5の各要素には、w[5]をP1/25でスカラー倍した値が設定される。行列mp_nt6の各要素には、w[6]をP1/25でスカラー倍した値が設定される。行列mp_nt7の各要素には、w[7]をP1/25でスカラー倍した値が設定される。行列mp_nt8の各要素には、w[8]をP1/25でスカラー倍した値が設定される。行列mp_nt9の各要素には、w[9]をP1/25でスカラー倍した値が設定される。
【００９２】
畳み込み層２１０ａは、５×５の行列tmp_nt1〜tmp_nt9を利用して、領域diff1-1の各要素の値を算出する場合には、矩形差分テーブルを作成し、この矩形差分テーブルを利用して、領域diff1-1の各要素の値を算出する。
【００９３】
図１６は、矩形差分テーブルを説明するための図である。例えば、ステップＳ３０に示すように、領域Ａ１に加算する行列を行列tmp1とし、行列tmp1に設定される値を全て同値の「５」とする。領域Ａ１に行列tmp1を加算することで、領域Ａ１の各要素には５が設定されることになる。この結果を、畳み込み層２１０ａは、後述する矩形差分テーブル３０を用いて算出する。
【００９４】
畳み込み層２１０ａは、この行列tmp1とこの行列tmp1を加算する領域Ａ１との関係に基づき、矩形差分テーブル３０を作成する（ステップＳ３１）。
【００９５】
例えば、畳み込み層２１０ａは、矩形差分テーブルの要素３０ａ〜３０ｄの位置を特定する。例えば、要素３０ａは、領域Ａ１の左上端の要素となる。要素３０ｂは、領域Ａ１の右上端の１つ右隣の要素となる。要素３０ｃは、領域Ａ１の左下端の１つ下の要素となる。要素３０ｄは、領域Ａ１の右下端の要素に対して対角の要素となる。畳み込み層２１０ａは、要素３０ａ，３０ｄに値「５」を設定し、要素３０ｂ，３０ｃに値「−５」を設定することで、矩形差分テーブル３０を作成する。なお、要素３０ａ〜３０ｄ以外の要素の値は「０」となる。
【００９６】
畳み込み層２１０ａは、矩形差分テーブル３０に対して、縦方向の累積加算を実行することで、テーブル３１を算出する（ステップＳ３２）。畳み込み層２１０ａは、テーブル３１に対して横方向の累積加算を実行することで、テーブル３２を算出する（ステップＳ３３）。テーブル３２の各要素の値は、領域Ａ１に行列tmp1を加算したものに対応する。
【００９７】
続いて、ステップＳ４０に示すように、領域Ａ２に加算する行列をtmp2とし、行列tmp2の全ての要素の値を５とする。領域Ａ３に加算する行列をtmp3とし、行列tmp3の全ての要素の値を４とする。領域Ａ２に行列tmp2を加算し、領域Ａ３に行列tmp3を加算することで、領域Ａ２には５が設定され、領域Ａ３には４が設定され、領域Ａ２と領域Ａ３とが重複する領域Ａ４には、９が設定される。この結果を、畳み込み層２１０ａは、後述する矩形差分テーブル４０を用いて算出する。
【００９８】
例えば、畳み込み層２１０ａは、矩形差分テーブルの要素４０ａ〜４０ｈの位置を特定する。例えば、要素４０ａは、領域Ａ２の左上端の要素となる。要素４０ｂは、領域Ａ２の右上端の１つ右隣の要素となる。要素４０ｃは、領域Ａ２の左下端の１つ下の要素となる。要素４０ｄは、領域Ａ２の右下端の要素に対して対角の要素となる。
【００９９】
要素４０ｅは、領域Ａ３の左上端の要素となる。領域４０ｆは、領域Ａ３の右上端の１つ右隣の要素となる。領域４０ｇは、領域Ａ３の左下端の１つ下の要素となる。領域４０ｈは、領域Ａ３の右下端の要素に対して対角の要素となる。
【０１００】
畳み込み層２１０ａは、要素４０ａ，４０ｄに値「５」を設定し、要素４０ｂ，４０ｃに値「−５」を設定する。畳み込み層２１０ａは、要素４０ｅ，４０ｈに値「４」を設定し、要素４０ｆ，４０ｇに値「−４」を設定する。このように、畳み込み層２１０ａが、要素４０ａ〜４０ｈに値を設定し、その他の要素の値を０に設定することで、矩形差分テーブル４０を作成する。
【０１０１】
畳み込み層２１０ａは、矩形差分テーブル４０に対して、縦方向の累積加算を実行することで、テーブル４１を算出する（ステップＳ４２）。畳み込み層２１０ａは、テーブル４１に対して横方向の累積加算を実行することで、テーブル４２を算出する（ステップＳ４３）。テーブル４２の各要素の値は、領域Ａ２に行列tmp2を加算し、かつ、領域Ａ３に行列tmp3を加算したものに対応する。
【０１０２】
畳み込み層２１０ａは、図１６で説明した矩形差分テーブル４０を用いて、領域diff1-1に各行列tmp_nt1〜tmp_nt9を加算する。畳み込み層２１０ａは、行列の値と、行列を配置する領域との関係を基にして、矩形差分テーブルrect_diffを作成する。
【０１０３】
図１７は、本実施例２に係る畳み込み層が生成する矩形差分テーブルの一例を示す図である。各行列を加算するdiff上の領域「Ｒ、Ｌ」と表現する。Ｒは、領域の左上端のインデックスを示す。Ｌは、領域の右下端のインデックスを示す。また、矩形差分テーブルrect_diff上の左上からｕ行目ｖ列目の要素を、要素「ｕ，ｖ」と表記する。
【０１０４】
行列tmp_nt1の値は、領域「１、５３」の要素に加算される。このため、畳み込み層２１０ａは、要素「１，１」、「６，６」に値w[1]を設定し、要素「１，６」、「６，１」に値-w[1]を設定する。
【０１０５】
行列tmp_nt2の値は、領域「２、５４」の要素に加算される。このため、畳み込み層２１０ａは、要素「１，２」、「６，７」に値w[2]を設定し、要素「１，７」、「６，２」に値-w[2]を設定する。
【０１０６】
行列tmp_nt3の値は、領域「３、５５」の要素に加算される。このため、畳み込み層２１０ａは、要素「１，３」、「６，８」に値w[3]を設定し、要素「１，８」、「６，３」に値-w[3]を設定する。
【０１０７】
行列tmp_nt4の値は、領域「１３、６５」の要素に加算される。このため、畳み込み層２１０ａは、要素「２，１」、「７，６」に値w[4]を設定し、要素「２，６」、「７，１」に値-w[4]を設定する。
【０１０８】
行列tmp_nt5の値は、領域「１４、６６」の要素に加算される。このため、畳み込み層２１０ａは、要素「２，２」、「７，７」に値w[5]を設定し、要素「２，７」、「７，２」に値-w[5]を設定する。
【０１０９】
行列tmp_nt6の値は、領域「１５、６７」の要素に加算される。このため、畳み込み層２１０ａは、要素「２，３」、「７，８」に値w[6]を設定し、要素「２，８」、「７，３」に値-w[6]を設定する。
【０１１０】
行列tmp_nt7の値は、領域「２５、７７」の要素に加算される。このため、畳み込み層２１０ａは、要素「３，１」、「８，６」に値w[7]を設定し、要素「３，６」、「８，１」に値-w[7]を設定する。
【０１１１】
行列tmp_nt8の値は、領域「２６、７８」の要素に加算される。このため、畳み込み層２１０ａは、要素「３，２」、「８，７」に値w[8]を設定し、要素「３，７」、「８，２」に値-w[8]を設定する。
【０１１２】
行列tmp_nt9の値は、領域「２７、７９」の要素に加算される。このため、畳み込み層２１０ａは、要素「３，３」、「８，８」に値w[9]を設定し、要素「３，８」、「８，３」に値-w[9]を設定する。
【０１１３】
畳み込み層２１０ａは、上記処理を行うことで、diff1-1を算出するための矩形差分テーブルrect_diffを作成する。ここでは説明の便宜上、diff1-1を算出するための矩形差分テーブルrect_diffを作成する場合について説明したが、diff1-2〜diff4を算出するための矩形差分テーブルもdiff1-1と同様にして作成する。畳み込み層２１０ａは、矩形差分テーブルrect_diffについて、縦方向の累積加算および横方向の累積加算を行うことで、diff1を算出することができる。矩形差分テーブルrect_diffを用いたdiff1の算出結果と、図１４で説明したdiff1の算出結果とは同様の結果が得られるが、矩形差分テーブルrect_diffを用いることで、演算量を削減することが可能となる。
【０１１４】
次に、本実施例２に係る情報処理装置の処理手順について説明する。図１８は、本実施例２に係る情報処理装置の処理手順を示すフローチャートである。図１８に示すように、情報処理装置２００のPooling層１１０ｂは、誤差勾配diff3を取得する（ステップＳ２０１）。情報処理装置２００の畳み込み層２１０ａは、重み（カーネル）w_data2を取得する（ステップＳ２０２）。
【０１１５】
畳み込み層２１０ａは、重みw_data2の１要素と、要素比率で割られた誤差勾配diff3の値とを乗算する（ステップＳ２０３）。畳み込み層２１０ａは、矩形差分テーブルrect_diffの４箇所に対して値を加算・減算する（ステップＳ２０４）。
【０１１６】
畳み込み層２１０ａは、重みw_data2の要素数分実行したか否かを判定する（ステップＳ２０５）。畳み込み層２１０ａは、重みw_data2の要素数分実行していない場合には（ステップＳ２０５，Ｎｏ）、ステップＳ２０３に移行する。一方、畳み込み層２１０ａは、重みw_data2の要素数分実行した場合には（ステップＳ２０５，Ｙｅｓ）、ステップＳ２０６に移行する。
【０１１７】
畳み込み層２１０ａは、誤差勾配diff3の要素数回実行したか否かを判定する（ステップＳ２０６）。畳み込み層２１０ａは、誤差勾配diff3の要素数回実行していない場合には（ステップＳ２０６，Ｎｏ）、ステップＳ２０３に移行する。一方、畳み込み層２１０ａは、誤差勾配diff3の要素数回実行した場合には（ステップＳ２０６，Ｙｅｓ）、ステップＳ２０７に移行する。
【０１１８】
畳み込み層２１０ａは、矩形差分テーブルrect_diffに縦と横の累積加算を実行することで、誤差勾配diff3を算出する（ステップＳ２０７）。畳み込み層２１０ａは、誤差勾配diff1を出力する（ステップＳ２０８）。
【０１１９】
次に、本実施例２に係る情報処理装置２００の効果について説明する。情報処理装置２００の畳み込み層２１０ａは、逆伝播の処理において、下層に出力する誤差勾配diff1を算出する場合に、従来の計算問題を、複数枚の同値の矩形領域を加算する計算問題に置き換えることにより、演習量を削減することができる。
【０１２０】
例えば、従来の計算問題は、図１１で説明したように、重み（カーネル）のサイズ３×３の行列tmp_mtを１００枚用意し、対象領域上に、各行列tmp_mtをずらしながら加算して行く計算問題である。一方、畳み込み層２１０ａは、重みに含まれる要素の数だけ、全ての要素の値がカーネルの要素と同一となる行列を作成し、行列の値を誤差勾配diff3の要素の値に応じて更新する。そして、畳み込み層２１０ａは、対象領域上に複数の行列をずらして配置し、対象領域で同一の要素に配置された各行列の要素の値を加算することで、対象領域に含まれる各要素の値を算出する。
【０１２１】
また、畳み込み層２１０ａは、複数の行列をずらして配置した場合に、行列の位置に応じて、矩形差分テーブルを作成する。畳み込み層２１０ａは、矩形差分テーブルの横方向および縦方向の累積加算を実行することで、対象領域の各要素の値を算出する。このため、行列をずらしながら加算していく処理と比較して、演算量を削減することができる。
【０１２２】
図１９は、誤差勾配diff1を求める計算量を説明するための図である。従来技術の計算量は、乗算部分についてはｄｋ２（Ｎ−ｋ＋１）２＋ｄｐ２となり、加算部分については、ｄｋ２（Ｎ−ｋ＋１）２となる。一方、本実施例２に係る情報処理装置２００の計算量は、乗算部分についてはｄｋ２ｐ２となり、加算部分については、４ｄｋ２ｐ２＋２Ｎ２となる。ここで、diff1のサイズをＮ×Ｎ、重みw_data2のサイズをｋ×ｋ、誤差勾配diff3のサイズをｐ×ｐ、カーネル数をｄとする。各記号の大小関係は、「Ｎ＞＞ｐ，Ｎ＞＞ｋ」となる。このため、Ｎの値が計算量に与える影響が大きいため、従来技術の計算量が、情報処理装置２００の計算量よりも大きいことがわかる。
【０１２３】
ところで、上述した実施例１に示した畳み込み層１１０ａの処理と、実施例２に示した畳み込み層２１０ａの処理とを別々に説明したがこれに限定されるものではない。例えば、畳み込み層１１０ａ，２１０ａの双方の処理を行う畳み込み層を、ＣＮＮ処理部１１０，２１０に搭載させても良い。
【０１２４】
次に、上記実施例に示した情報処理装置１００のハードウェア構成の一例について説明する。図２０は、情報処理装置のハードウェア構成の一例を示す図である。
【０１２５】
図２０に示すように、コンピュータ３００は、各種演算処理を実行するＣＰＵ３０１と、利用者からのデータの入力を受け付ける入力装置３０２と、ディスプレイ３０３とを有する。また、コンピュータ３００は、記憶媒体からプログラム等を読取る読み取り装置３０４と、ネットワークを介して他のコンピュータとの間でデータの授受を行うインタフェース装置３０５とを有する。また、コンピュータ３００は、各種情報を一時記憶するＲＡＭ３０６と、ハードディスク装置３０７とを有する。そして、各装置３０１〜３０７は、バス３０８に接続される。
【０１２６】
ハードディスク装置３０７は、ＣＮＮ処理プログラム３０７ａを有する。ＣＰＵ３０１は、ＣＮＮ処理プログラム３０７ａを読み出してＲＡＭ３０６に展開する。ＣＮＮ処理プログラム３０７ａは、ＣＮＮ処理プロセス３０６ａとして機能する。例えば、ＣＮＮ処理プロセス３０６ａの処理は、ＣＮＮ処理部１１０、２１０の処理に対応する。
【０１２７】
なお、ＣＮＮ処理プログラム３０７ａについては、必ずしも最初からハードディスク装置３０７に記憶させておかなくても良い。例えば、コンピュータ３００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ３００がこれらからＣＮＮ処理プログラム３０７ａを読み出して実行するようにしてもよい。
【０１２８】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１２９】
（付記１）複数の層を有する学習ネットワークの学習値算出時において、上層から複数の要素を有する誤差勾配の情報を取得するPooling層と、
下層から情報を取得した場合に、前記情報に含まれる複数の要素に対して横方向および縦方向の累積加算を実行することで前記情報を積分画像に変換し、
重み勾配に含まれる第１要素の値を算出する場合に、前記積分画像に含まれる複数の要素のうち、前記第１要素に対応する領域を特定し、特定した領域の要素を複数の部分領域に分割し、
前記積分画像の特徴を基にして、前記部分領域に含まれる要素の合計値を算出し、前記部分領域に含まれる要素の合計値と前記部分領域に対応する前記誤差勾配の要素の値とに基づく値を前記部分領域毎に算出し、算出した各値を加算することで、前記第１要素を算出する処理を実行する畳み込み層と
を有することを特徴とする情報処理装置。
【０１３０】
（付記２）前記畳み込み層は、前記積分画像の特徴を基にして前記部分領域に含まれる要素の合計値を算出する場合に、前記部分領域に基づく第１要素、第２要素、第３要素、第４要素の値を抽出し、第１要素と第４要素との加算値から、第２要素の値と第３要素の値とを減算することで、前記合計値を算出することを特徴とする付記１に記載の情報処理装置。
【０１３１】
（付記３）複数の層を有する学習ネットワークの学習値算出時において、上層から複数の要素を有する第１誤差勾配の情報を取得するPooling層と、
下層に出力するための第２誤差勾配の第１領域に含まれる各要素の値を算出する場合に、カーネルに含まれる要素の数だけ、全ての要素の値が前記カーネルの要素と同一となる行列を作成し、
前記行列の値を前記第１誤差勾配の要素の値に応じて更新し、
前記第１領域上に複数の行列をずらして配置し、前記第１領域上で同一の要素に配置された各行列の要素の値を加算することで、前記第１領域に含まれる各要素の値を算出する畳み込み層と
を有することを特徴とする情報処理装置。
【０１３２】
（付記４）前記畳み込み層は、前記行列を配置した前記第１領域上において、前記行列が配置される位置に応じた第１要素、第２要素、第３要素、第４要素を特定し、前記第１要素および前記第４要素に前記行列と同じ値を設定し、前記第２要素および前記第３要素に前記行列の値にマイナス１を乗算した値を設定する処理を、行列毎に実行することで矩形差分テーブルを生成し、前記矩形差分テーブルに含まれる要素に対して横方向および縦方向の累積加算を実行することで、前記第１領域に含まれる各要素の値を算出することを特徴とする付記３に記載の情報処理装置。
【０１３３】
（付記５）コンピュータに、
複数の層を有する学習ネットワークの学習値算出時において、上層から複数の要素を有する誤差勾配の情報を取得し、
下層から情報を取得した場合に、前記情報に含まれる複数の要素に対して横方向および縦方向の累積加算を実行することで前記情報を積分画像に変換し、
重み勾配に含まれる第１要素の値を算出する場合に、前記積分画像に含まれる複数の要素のうち、前記第１要素に対応する領域を特定し、特定した領域の要素を複数の部分領域に分割し、
前記積分画像の特徴を基にして、前記部分領域に含まれる要素の合計値を算出し、
前記部分領域に含まれる要素の合計値と前記部分領域に対応する前記誤差勾配の要素の値とに基づく値を前記部分領域毎に算出し、算出した各値を加算することで、前記第１要素を算出する処理を実行する
処理を実行させることを特徴とする学習ネットワーク学習値算出プログラム。
【０１３４】
（付記６）前記積分画像の特徴を基にして、前記部分領域に含まれる要素の合計値を算出する処理は、前記部分領域に基づく第１要素、第２要素、第３要素、第４要素の値を抽出し、第１要素と第４要素との加算値から、第２要素の値と第３要素の値とを減算することで、前記合計値を算出することを特徴とする付記５に記載の学習ネットワーク学習値算出プログラム。
【０１３５】
（付記７）コンピュータに、
複数の層を有する学習ネットワークの学習値算出時において、上層から複数の要素を有する第１誤差勾配の情報を取得し、
下層に出力するための第２誤差勾配の第１領域に含まれる各要素の値を算出する場合に、カーネルに含まれる要素の数だけ、全ての要素の値が前記カーネルの要素と同一となる行列を作成し、
前記行列の値を前記第１誤差勾配の要素の値に応じて更新し、
前記第１領域上に複数の行列をずらして配置し、前記第１領域上で同一の要素に配置された各行列の要素の値を加算することで、前記第１領域に含まれる各要素の値を算出する
処理を実行させることを特徴とする学習ネットワーク学習値算出プログラム。
【０１３６】
（付記８）前記行列を配置した前記第１領域上において、前記行列が配置される位置に応じた第１要素、第２要素、第３要素、第４要素を特定し、前記第１要素および前記第４要素に前記行列と同じ値を設定し、前記第２要素および前記第３要素に前記行列の値にマイナス１を乗算した値を設定する処理を、行列毎に実行することで矩形差分テーブルを生成する処理を更に実行し、前記第１領域に含まれる各要素の値を算出する処理は、前記矩形差分テーブルに含まれる要素に対して横方向および縦方向の累積加算を実行することで、前記第１領域に含まれる各要素の値を算出することを特徴とする付記７に記載の学習ネットワーク学習値算出プログラム。
【０１３７】
（付記９）コンピュータが実行する学習ネットワーク学習値算出方法であって、
複数の層を有する学習ネットワークの学習値算出時において、上層から複数の要素を有する誤差勾配の情報を取得し、
下層から情報を取得した場合に、前記情報に含まれる複数の要素に対して横方向および縦方向の累積加算を実行することで前記情報を積分画像に変換し、
重み勾配に含まれる第１要素の値を算出する場合に、前記積分画像に含まれる複数の要素のうち、前記第１要素に対応する領域を特定し、特定した領域の要素を複数の部分領域に分割し、
前記積分画像の特徴を基にして、前記部分領域に含まれる要素の合計値を算出し、
前記部分領域に含まれる要素の合計値と前記部分領域に対応する前記誤差勾配の要素の値とに基づく値を前記部分領域毎に算出し、算出した各値を加算することで、前記第１要素を算出する処理を実行する
処理を実行することを特徴とする学習ネットワーク学習値算出方法。
【０１３８】
（付記１０）前記積分画像の特徴を基にして、前記部分領域に含まれる要素の合計値を算出する処理は、前記部分領域に基づく第１要素、第２要素、第３要素、第４要素の値を抽出し、第１要素と第４要素との加算値から、第２要素の値と第３要素の値とを減算することで、前記合計値を算出することを特徴とする付記９に記載の学習ネットワーク学習値算出方法。
【０１３９】
（付記１１）コンピュータが実行する学習ネットワーク学習値算出方法であって、
複数の層を有する学習ネットワークの学習値算出時において、上層から複数の要素を有する第１誤差勾配の情報を取得し、
下層に出力するための第２誤差勾配の第１領域に含まれる各要素の値を算出する場合に、カーネルに含まれる要素の数だけ、全ての要素の値が前記カーネルの要素と同一となる行列を作成し、
前記行列の値を前記第１誤差勾配の要素の値に応じて更新し、
前記第１領域上に複数の行列をずらして配置し、前記第１領域上で同一の要素に配置された各行列の要素の値を加算することで、前記第１領域に含まれる各要素の値を算出する
処理を実行することを特徴とする学習ネットワーク学習値算出方法。
【０１４０】
（付記１２）前記行列を配置した前記第１領域上において、前記行列が配置される位置に応じた第１要素、第２要素、第３要素、第４要素を特定し、前記第１要素および前記第４要素に前記行列と同じ値を設定し、前記第２要素および前記第３要素に前記行列の値にマイナス１を乗算した値を設定する処理を、行列毎に実行することで矩形差分テーブルを生成する処理を更に実行し、前記第１領域に含まれる各要素の値を算出する処理は、前記矩形差分テーブルに含まれる要素に対して横方向および縦方向の累積加算を実行することで、前記第１領域に含まれる各要素の値を算出することを特徴とする付記１１に記載の学習ネットワーク学習値算出方法。
【符号の説明】
【０１４１】
５０ａ  入力部
５０ｂ  受付部
１００  情報処理装置
１１０，２１０  ＣＮＮ処理部
１１０ａ，２１０ａ  畳み込み層
１１０ｂ  Pooling層
１１０ｃ  全結合層
１１０ｄ  シグモイド層
【図１】
2018005420.tif 000003
【図２】
2018005420.tif 000004
【図３】
2018005420.tif 000005
【図４】
2018005420.tif 000006
【図５】
2018005420.tif 000007
【図６】
2018005420.tif 000008
【図７】
2018005420.tif 000009
【図８】
2018005420.tif 000010
【図９】
2018005420.tif 000011
【図１０】
2018005420.tif 000012
【図１１】
2018005420.tif 000013
【図１２】
2018005420.tif 000014
【図１３】
2018005420.tif 000015
【図１４】
2018005420.tif 000016
【図１５】
2018005420.tif 000017
【図１６】
2018005420.tif 000018
【図１７】
2018005420.tif 000019
【図１８】
2018005420.tif 000020
【図１９】
2018005420.tif 000021
【図２０】
2018005420.tif 000022
【図２１】
2018005420.tif 000023
【図２２】
2018005420.tif 000024
【図２３】
2018005420.tif 000025