(57)【要約】  本技術は、ニューラルネットワークの計算量及びパラメータ数を削減することができるようにする情報処理装置に関する。２値演算層は、ニューラルネットワークの層を構成し、層入力データのうちの２値を用いた２値演算を行い、その２値演算の結果を、層出力データとして出力する。本技術は、ニューラルネットワークに適用することができる。
2018163790.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルネットワークの層を構成し、前記層に入力される層入力データのうちの２値を用いた２値演算を行い、前記２値演算の結果を、前記層から出力される層出力データとして出力する
情報処理装置。
【請求項２】
前記層入力データに対して、前記２値演算を行う２値演算カーネルを適用することにより、前記２値演算を行う
請求項１に記載の情報処理装置。
【請求項３】
前記層入力データに対して、前記２値演算カーネルをスライドしながら適用することにより、前記２値演算を行う
請求項２に記載の情報処理装置。
【請求項４】
１のチャネルの層出力データを得る場合と、他の１のチャネルの層出力データを得る場合とで、空間方向のサイズが異なる前記２値演算カーネルを適用する
請求項２に記載の情報処理装置。
【請求項５】
上位層から逆伝播される、前記ニューラルネットワークの出力層から出力される出力データの誤差に関する誤差情報を取得し、
前記上位層からの前記誤差情報を用いて、下位層に逆伝播する誤差情報を求めて、前記下位層に逆伝播する
請求項１に記載の情報処理装置。
【請求項６】
前記２値演算は、２値の差分である
請求項１に記載の情報処理装置。
【請求項７】
前記２値演算を行う２値演算カーネルよりも空間方向のサイズが小さい畳み込みカーネルで畳み込みを行う畳み込み層の直後の上位層に配置される
請求項１に記載の情報処理装置。
【請求項８】
前記畳み込み層は、縦×横が1×1の前記畳み込みカーネルを適用する1×1の畳み込みを行い、
前記畳み込み層の出力に対して、２値の差分を求める前記２値演算を行う前記２値演算カーネルを適用する
請求項７に記載の情報処理装置。
【請求項９】
下位層の出力の絶対的な値を維持して出力する値維持層と並列に配置され、
前記値維持層の出力は、上位層への複数チャネルの層入力データのうちの、一部のチャネルの層入力データとして、前記上位層に出力され、
前記２値演算の結果を、残りのチャネルの層入力データとして、前記上位層に出力する
請求項１に記載の情報処理装置。
【請求項１０】
前記２値演算を行うハードウェアを備える
請求項１に記載の情報処理装置。
【請求項１１】
層に入力される層入力データのうちの２値を用いた２値演算を行い、前記２値演算の結果を、前記層から出力される層出力データとして出力する前記層である２値演算層を含むニューラルネットワークを生成する生成部を備える
情報処理装置。
【請求項１２】
前記生成部は、ユーザが選択する層で構成される前記ニューラルネットワークを生成する
請求項１１に記載の情報処理装置。
【請求項１３】
前記ニューラルネットワークを、グラフ構造で表示するユーザI/Fをさらに備える
請求項１１に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、情報処理装置に関し、特に、例えば、ニューラルネットワークの計算量及びパラメータ数を削減することができるようにする情報処理装置に関する。
【背景技術】
【０００２】
例えば、画像を構成する画素のうちの２画素それぞれの画素値の差分を用いて、画像に、所定の対象物が映るかどうかを検出する検出装置がある（例えば、特許文献１を参照）。【０００３】
かかる検出装置では、複数の弱識別器それぞれにおいて、画像の２画素それぞれの画素値の差分に応じて、画像に、所定の対象物が映るかどうかを表す推定値が求められる。そして、複数の弱識別器それぞれの推定値の重み付け加算が行われ、その結果得られる重み付け加算値に応じて、画像に、所定の対象物が映るかどうかが判定される。【０００４】
弱識別器、及び、重み付け加算に用いられる重みの学習は、アダブースト(AdaBoost)等のブースティングにより行われる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第4517633号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
近年、画像のクラスタリング等について、畳み込み層を有するCNN(Convolutional Neural Network)が注目されている。【０００７】
しかしながら、CNN等のNN(Neural Network)の性能を高めるためには、NNのパラメータ数が大になり、計算量も大になる。【０００８】
本技術は、このような状況に鑑みてなされたものであり、NNの計算量及びパラメータ数を削減することができるようにするものである。
【課題を解決するための手段】
【０００９】
本技術の第１の情報処理装置は、ニューラルネットワークの層を構成し、前記層に入力される層入力データのうちの２値を用いた２値演算を行い、前記２値演算の結果を、前記層から出力される層出力データとして出力する情報処理装置である。【００１０】
以上のような第１の情報処理装置においては、ニューラルネットワークの層を構成しており、前記層に入力される層入力データのうちの２値を用いた２値演算が行われ、前記２値演算の結果が、前記層から出力される層出力データとして出力される。【００１１】
本技術の第２の情報処理装置は、層に入力される層入力データのうちの２値を用いた２値演算を行い、前記２値演算の結果を、前記層から出力される層出力データとして出力する前記層である２値演算層を含むニューラルネットワークを生成する生成部を備える情報処理装置である。【００１２】
以上のような第２の情報処理装置においては、層に入力される層入力データのうちの２値を用いた２値演算を行い、前記２値演算の結果を、前記層から出力される層出力データとして出力する前記層である２値演算層を含むニューラルネットワークが生成される。【００１３】
なお、第１及び第２の情報処理装置は、コンピュータにプログラムを実行させることにより実現することができる。かかるプログラムは、伝送媒体を介して伝送することにより、又は、記録媒体に記録して、頒布することができる。
【発明の効果】
【００１４】
本技術によれば、NNの計算量及びパラメータ数を削減することができる。【００１５】
なお、ここに記載された効果は必ずしも限定されるものではなく、本開示中に記載されたいずれかの効果であってもよい。
【図面の簡単な説明】
【００１６】
【図１】本技術を適用したNN等として機能するPC(Personal Computer)のハードウェアの構成例を示すブロック図である。
【図２】PC１０により実現されるNNの第１の構成例を示すブロック図である。
【図３】畳み込み層１０４の畳み込みの処理の例を説明する図である。
【図４】m×n×c(in)＝3×3×3の畳み込みカーネルFを示す図である。
【図５】A×B(>1)の畳み込みを説明する図である。
【図６】1×1の畳み込みを説明する図である。
【図７】PC１０により実現されるNNの第２の構成例を示すブロック図である。
【図８】２値演算層１１２の２値演算の処理の例を説明する図である。
【図９】２値演算カーネルG(k)が処理対象に適用される様子を示す図である。
【図１０】２値演算層１１２の２値演算の対象とする２値を選択する選択方法の例を示す図である。
【図１１】NN１１０の畳み込み層１１１及び２値演算層１１２の順伝播時及び逆伝播時の処理の例を説明するフローチャートである。
【図１２】２値演算層について行ったシミュレーションのシミュレーション結果を示す図である。
【図１３】PC１０により実現されるNNの第３の構成例を示すブロック図である。
【図１４】値維持層１２１の２値演算の処理の例を説明する図である。
【図１５】値維持カーネルH(k)が処理対象に適用される様子を示す図である。
【図１６】本技術を適用したNNを生成するNN生成装置の構成例を示すブロック図である。
【図１７】ユーザI/F２０３の表示例を示す図である。
【図１８】生成部２０２が生成するNNの実体としてのプログラムの例を示す図である。
【発明を実施するための形態】
【００１７】
＜PCのハードウェアの構成例＞
【００１８】
図１は、本技術を適用したNN等として機能するPC(Personal Computer)のハードウェアの構成例を示すブロック図である。
【００１９】
図１において、PC１０は、スタンドアロンのコンピュータであっても良いし、サーバクライアントシステムのサーバ、又は、クライアントであっても良い。
【００２０】
PC１０は、CPU(Central Processing Unit)１２を内蔵しており、CPU１２には、バス１１を介して、入出力インタフェース２０が接続されている。
【００２１】
CPU１２は、入出力インタフェース２０を介して、ユーザ等によって、入力部１７が操作等されることにより指令が入力されると、それに従って、ROM(Read Only Memory)１３に格納されているプログラムを実行する。あるいは、CPU１２は、ハードディスク１５に格納されたプログラムを、RAM(Random Access Memory)１４にロードして実行する。
【００２２】
これにより、CPU１２は、各種の処理を行い、PC１０を所定の機能を有する装置として機能させる。そして、CPU１２は、各種の処理の処理結果を、必要に応じて、例えば、入出力インタフェース２０を介して、出力部１６から出力、あるいは、通信部１８から送信、さらには、ハードディスク１５に記録等させる。
【００２３】
なお、入力部１７は、キーボードや、マウス、マイク等で構成される。また、出力部１６は、LCD(Liquid Crystal Display)やスピーカ等で構成される。
【００２４】
また、CPU１２が実行するプログラムは、PC１０に内蔵されている記録媒体としてのハードディスク１５やROM１３に予め記録しておくことができる。
【００２５】
あるいはまた、プログラムは、リムーバブル記録媒体２１に格納（記録）しておくことができる。このようなリムーバブル記録媒体２１は、いわゆるパッケージソフトウエアとして提供することができる。ここで、リムーバブル記録媒体２１としては、例えば、フレキシブルディスク、CD-ROM(Compact Disc Read Only Memory)，MO(Magneto Optical)ディスク，DVD(Digital Versatile Disc)、磁気ディスク、半導体メモリ等がある。
【００２６】
また、プログラムは、上述したようなリムーバブル記録媒体２１からPC１０にインストールする他、通信網や放送網を介して、PC１０にダウンロードし、内蔵するハードディスク１５にインストールすることができる。すなわち、プログラムは、例えば、ダウンロードサイトから、ディジタル衛星放送用の人工衛星を介して、PC１０に無線で転送したり、LAN(Local Area Network)、インターネットといったネットワークを介して、PC１０に有線で転送することができる。
【００２７】
CPU１２は、上述したように、プログラムを実行することにより、PC１０を所定の機能を有する装置として機能させる。
【００２８】
例えば、CPU１２は、PC１０を、NN（を構成する各層）の処理や、NNの生成を行う情報処理装置として機能させる。この場合、PC１０は、NNや、NNを生成するNN生成装置として機能する。なお、NNの各層は、CPU１２やGPU等の汎用のハードウェアで構成する他、専用のハードウェアで構成することができる。この場合、NNの各層で行われる、例えば、後述する２値演算その他の演算は、層を構成する専用のハードウェアが行う。
【００２９】
ここで、以下では、説明を分かりやすくするため、PC１０により実現されるNNについて、NNに対する入力データが、１チャネル以上の２次元のデータである画像（静止画）である場合を例に説明を行う。
【００３０】
NNに対する入力データが画像である場合には、その画像から、所定の対象物を高速に検出（認識）することや、ピクセルレベルのラベリング（セマンティックセグメンテーション）等を行うことができる。
【００３１】
なお、NNに対する入力データとしては、画像等の２次元のデータの他、１次元のデータや、２次元のデータ、その他、４次元以上の次元のデータを採用することができる。
【００３２】
＜CNNの構成例＞
【００３３】
図２は、PC１０により実現されるNNの第１の構成例を示すブロック図である。
【００３４】
図２において、NN１００は、CNNであり、入力層１０１、NN１０２、隠れ層１０３、畳み込み層１０４、隠れ層１０５、NN１０６、及び、出力層１０７を有する。
【００３５】
ここで、NNは、入力層及び出力層を含む複数の層（を構成する、ニューロンに相当するユニット）が、適宜結合されて構成される。NNにおいて、ある注目する層から見て、入力層側の層を、下位層ともいい、出力層側の層を、上位層ともいう。
【００３６】
また、NNにおいて、入力層側から出力層側に向かう情報（データ）の伝播を、順伝播ともいい、出力層側から入力層側に向かう情報の伝播を、逆伝播ともいう。
【００３７】
入力層１０１には、NN１００に対する入力データとしての、例えば、R，G，Bの３チャネルの画像が供給される。入力層１０１は、NN１００に対する入力データを記憶し、上位層のNN１０２に供給する。
【００３８】
NN１０２は、NN１００のサブセットとしてのNNであり、１以上の層（図示せず）で構成される。サブセットとしてのNN１０２には、隠れ層１０３及び１０５や、畳み込み層１０４、その他、後述する層と同様の層を含めることができる。
【００３９】
NN１０２の各層（のユニット）では、例えば、その層の直前の下位層からのデータの重み付け加算値（必要に応じて、いわゆるバイアス項の加算を含む）が演算され、その重み付け加算値を引数として、例えば、正規化線形関数(Rectified Linear function)等の活性化関数が演算される。そして、各層では、活性化関数の演算結果が記憶され、直後の上位層に出力される。重み付け加算値の演算には、層どうし（のユニット間）を結合する結合重みが用いられる。
【００４０】
ここで、入力データが２次元の画像である場合、入力層１０１から出力層１０７までの間の層が出力する２次元の画像は、マップと呼ばれる。
【００４１】
隠れ層１０３は、NN１０２の最も上位層側の層からのデータとしてのマップを記憶し、畳み込み層１０４に出力する。又は、隠れ層１０３は、例えば、NN１０２の層と同様にして、NN１０２の最も上位層側の層からのデータの重み付け加算値を引数とする活性化関数の演算結果を求め、マップとして記憶し、畳み込み層１０４に出力する。
【００４２】
ここで、隠れ層１０３が記憶するマップを、特に、入力マップともいう。NNの層に入力されるデータを、層入力データということとすると、隠れ層１０３が記憶する入力マップは、畳み込み層１０３に対する層入力データである。また、NNの層から出力されるデータを、層出力データということとすると、隠れ層１０３が記憶する入力マップは、隠れ層１０３の層出力データでもある。
【００４３】
本実施の形態では、隠れ層１０３が記憶する入力マップは、例えば、縦×横が32×32（画素）で構成され、64チャネルを有することとする。以上のように、縦×横が32×32で、64チャネルの入力マップを、以下、(64,32,32)（＝（チャネル，縦，横））の入力マップともいう。
【００４４】
畳み込み層１０４は、隠れ層１０３からの(64,32,32)の入力マップに対して、畳み込みカーネルを適用し、その(64,32,32)の入力マップを対象とする畳み込みを行う。
【００４５】
畳み込みカーネルは、畳み込みを行うフィルタであり、本実施の形態では、畳み込み層１０４の畳み込みカーネルは、例えば、縦×横×チャネルが3×3×64のサイズで構成される。畳み込みカーネルの縦×横のサイズは、入力マップの縦×横のサイズ以下のサイズが採用され、畳み込みカーネルのチャネル数（チャネル方向のサイズ）は、入力マップのチャネル数と同一の値が採用される。
【００４６】
ここで、縦×横×チャネルがa×b×cのサイズの畳み込みカーネルを、a×b×cの畳み込みカーネル、又は、チャネルを無視して、a×bの畳み込みカーネルともいう。さらに、a×b×cの畳み込みカーネルを適用して行われる畳み込みを、a×b×cの畳み込み、又は、a×bの畳み込みともいう。
【００４７】
畳み込み層１０４では、(64,32,32)の入力マップに対して、3×3×64の畳み込みカーネルをスライドしながら適用することにより、入力マップの3×3の畳み込みを行う。
【００４８】
すなわち、畳み込み層１０４では、例えば、(64,32,32)の入力マップの、全チャネルの（空間的に）同一位置の画素（群）が、順次、注目画素（群）に設定され、(64,32,32)の入力マップにおいて、注目画素を基準とする所定の位置、すなわち、例えば、注目画素の位置を中心とする、縦×横×チャネルが3×3×64の直方体状の範囲（畳み込みカーネルの縦×横×チャネルと同一の（大きさの）範囲）が、畳み込みの処理対象に設定される。
【００４９】
そして、(64,32,32)の入力マップのうちの、畳み込みの処理対象内の3×3×64の各データ（画素値）と、3×3×64の畳み込みカーネルとしてのフィルタのフィルタ係数との積和演算が行われ、その積和演算の結果が、注目画素についての畳み込みの結果として求められる。
【００５０】
畳み込み層１０４では、その後、まだ注目画素に設定されていない画素を、注目画素に新たに設定して、同様の処理が繰り返され、これにより、畳み込みカーネルが、注目画素の設定に応じてスライドされながら、入力マップに適用される。
【００５１】
ここで、畳み込み層１０４での畳み込みの結果を画素値とする画像としてのマップを、畳み込みマップともいう。
【００５２】
各チャネルの入力マップの全画素が、注目画素に設定される場合、畳み込みマップの縦×横のサイズは、入力マップの縦×横のサイズと同一の32×32（画素）となる。
【００５３】
また、各チャネルの入力マップの画素が、1画素以上おきに注目画素に設定される場合、すなわち、各チャネルの入力マップにおいて、注目画素に設定されない画素が存在する場合、畳み込みマップの縦×横のサイズは、入力マップの縦×横のサイズよりも小さくなる。この場合、プーリング(pooling)を行うことができる。
【００５４】
畳み込み層１０４は、畳み込みカーネルを、畳み込み層１０４の直後の上位層である隠れ層１０５が記憶する畳み込みマップのチャネル数と同一種類の畳み込みカーネルを有する。
【００５５】
図２において、隠れ層１０５は、(128,32,32)の畳み込みマップ（縦×横が32×32で、128チャネルの畳み込みマップ）を記憶する。
【００５６】
したがって、畳み込み層１０４は、128種類の3×3×64の畳み込みカーネルを有する。
【００５７】
畳み込み層１０４は、(64,32,32)の入力マップに対して、128種類の3×3×64の畳み込みカーネルそれぞれを適用することにより、(128,32,32)の畳み込みマップを求め、畳み込み層１０４の層出力データとして出力する。
【００５８】
なお、畳み込み層１０４では、入力マップに畳み込みカーネルを適用することにより得られる畳み込み結果を引数として演算した活性化関数の演算結果を、層出力データとして出力することができる。
【００５９】
隠れ層１０５は、畳み込み層１０４からの(128,32,32)の畳み込みマップを記憶し、NN１０６に出力する。又は、隠れ層１０５は、例えば、畳み込み層１０４からの(128,32,32)の畳み込みマップを構成するデータの重み付け加算値を引数とする活性化関数の演算結果を求め、その演算結果で構成されるマップを記憶し、NN１０６に出力する。
【００６０】
NN１０６は、NN１０２と同様に、NN１００のサブセットとしてのNNであり、１以上の層で構成される。サブセットとしてのNN１０６には、NN１０２と同様に、隠れ層１０３及び１０５や、畳み込み層１０４、その他、後述する層と同様の層を含めることができる。
【００６１】
NN１０６の各層では、例えば、NN１０２と同様に、その層の直前の下位層からのデータの重み付け加算値が演算され、その重み付け加算値を引数として、活性化関数が演算される。そして、各層では、活性化関数の演算結果が記憶され、直後の上位層に出力される。
【００６２】
出力層１０７は、例えば、下位層からのデータの重み付け加算値を演算し、その重み付け加算値を引数として、活性化関数を演算する。そして、出力層１０７は、例えば、活性化関数の演算結果を、NN１００の出力データとして出力する。
【００６３】
以上の入力層１０１ないし出力層１０７の処理は、対象物の検出等を行う順伝播時の処理であるが、学習を行う逆伝播時では、入力層１０１ないし出力層１０７において、直前の下位層に逆伝播する、出力データの誤差に関する誤差情報が、直後の上位層からの誤差情報を用いて求められ、直前の下位層に逆伝播される。また、入力層１０１ないし出力層１０７では、必要に応じて、結合重みや、畳み込みカーネルのフィルタ係数が、上位層からの誤差情報を用いて更新される。
【００６４】
＜畳み込み層１０４の処理＞
【００６５】
図３は、畳み込み層１０４の畳み込みの処理の例を説明する図である。
【００６６】
ここで、NNの層に対する層入力データ及び層出力データを、それぞれ、x及びyと表す。
【００６７】
畳み込み層１０４については、層入力データ及び層出力データは、それぞれ、入力マップ及び畳み込みマップである。
【００６８】
図３において、畳み込み層１０４に対する層入力データxとしてのマップ（入力マップ）xは、(c(in),M,N)のマップ、すなわち、縦×横がM×Nの、c(in)チャネルの画像になっている。
【００６９】
ここで、(c(in),M,N)のマップxのうちの、c+1番目(c=0,1,...,c(in)-1)のチャネル#cのマップxを、x(c)と表す。
【００７０】
また、マップx(c)において、所定の位置としての、例えば、マップx(c)の左上の位置を基準（原点等）とする縦方向及び横方向の位置を、それぞれi及びjで表し、マップx(c)の位置(i,j)のデータ（画素値）を、xij(c)と表す。
【００７１】
畳み込み層１０４が出力する層出力データyとしてのマップ（畳み込みマップ）yは、(k(out),M,N)のマップ、すなわち、縦×横がM×Nの、k(out)チャネルの画像になっている。
【００７２】
ここで、(k(out),M,N)のマップyのうちの、k+1番目(k=0,1,...,k(out)-1)のチャネル#kのマップyを、y(k)と表す。
【００７３】
また、マップy(k)において、所定の位置としての、例えば、マップy(k)の左上の位置を基準とする縦方向及び横方向の位置を、それぞれi及びjで表し、マップy(k)の位置(i,j)のデータ（画素値）を、yij(k)と表す。
【００７４】
畳み込み層１０４は、縦×横×チャネルがm×n×c(in)の畳み込みカーネルFを、k(out)個だけ有する。なお、1<=m<=M、及び、1<=n<=Nである。
【００７５】
ここで、k(out)個の畳み込みカーネルFのうちの、k+1番目の畳み込みカーネルF、すなわち、チャネル#kのマップy(k)の生成に用いられる畳み込みカーネルFを、F(k)と表す。
【００７６】
畳み込みカーネルF(k)は、c(in)チャネルのマップx(0),x(1),...,x(c(in)-1)にそれぞれ適用されるc(in)チャネルの畳み込みカーネルF(k,0),F(k,1),...,F(k,c(in)-1)から構成される。
【００７７】
畳み込み層１０４では、(c(in),M,N)のマップxに対して、m×n×c(in)の畳み込みカーネルF(k)をスライドしながら適用することにより、マップxのm×nの畳み込みが行われ、その畳み込み結果としてのチャネル#kのマップy(k)が生成される。
【００７８】
マップy(k)の位置(i,j)のデータyij(k)は、m×n×c(in)の畳み込みカーネルF(k)が、例えば、マップx(c)の注目画素の位置(i,j)を中心とする縦×横×チャネル方向がm×n×c(in)の範囲に適用されたときの畳み込み結果である。
【００７９】
ここで、m×nの畳み込みカーネルF(k)、及び、そのm×nの畳み込みカーネルF(k)が適用されるマップxの空間方向（i及びjの方向）の縦×横がm×nの範囲については、所定の位置としての、例えば、そのm×nの範囲の左上の位置を基準とする縦方向及び横方向の位置を、それぞれs及びtで表す。例えば、0<=s<=m-1、及び、0<=t<=n-1である。
【００８０】
また、m×n×c(in)の畳み込みカーネルF(k)が、マップx(c)の注目画素の位置(i,j)を中心とする縦×横×チャネル方向がm×n×c(in)の範囲に適用される場合、注目画素が、マップxの左上の画素等の周辺部の画素である場合には、畳み込みカーネルF(k)が、マップxの外側にはみ出し、畳み込みカーネルF(k)を適用するマップxのデータが存在しないことが生じる。
【００８１】
そこで、畳み込みカーネルF(k)の適用にあたっては、畳み込みカーネルF(k)を適用するマップxのデータが存在しないことが生じることを防止するために、マップxの周囲に、ゼロ等の所定のデータをパディングすることができる。マップxの境界から縦方向にパディングされるデータの数をpと表すとともに、横方向にパディングされるデータの数をqと表すこととする。
【００８２】
図４は、3チャネルのマップy＝y(0),y(1),y(2)の生成に用いられるm×n×c(in)＝3×3×3の畳み込みカーネルFを示す図である。
【００８３】
畳み込みカーネルFは、y(0),y(1),y(2)の生成に用いられる畳み込みカーネルF(0),F(1),F(2)を有する。
【００８４】
畳み込みカーネルF(k)は、チャネル#0,1,2のマップx(0),x(1),x(2)に適用される畳み込みカーネルF(k,0),F(k,1),F(k,2)を有する。
【００８５】
チャネル#cのマップx(c)に適用される畳み込みカーネルF(k,c)は、m×n＝3×3の畳み込みカーネルであり、3×3のフィルタ係数で構成される。
【００８６】
ここで、畳み込みカーネルF(k,c)の位置(s,t)のフィルタ係数を、wst(k,c)と表す。
【００８７】
以上のような畳み込み層１０４において、マップxに畳み込みカーネルFを適用して、マップyを求める順伝播は、式（１）で表される。
【００８８】
【数１】
2018163790.tif 000003
・・・（１）
【００８９】
また、逆伝播は、式（２）及び式（３）で表される。
【００９０】
【数２】
2018163790.tif 000004
・・・（２）
【００９１】
【数３】
2018163790.tif 000005
・・・（３）
【００９２】
ここで、Eは、NN（ここでは、例えば、NN１００）の出力データの誤差（を表す誤差関数）を表す。
【００９３】
式（２）の∂E／∂wst(k,c)は、勾配降下法により、畳み込みカーネルF(k,c)のフィルタ係数wst(k,c)を更新するための誤差(E)の勾配であり、NN１００の学習時においては、畳み込みカーネルF(k,c)のフィルタ係数wst(k,c)が、式（２）の誤差の勾配∂E／∂wst(k,c)を用いて更新される。
【００９４】
また、式（３）の∂E／∂xij(c)は、NN１００の学習時に、畳み込み層１０４の直前の下位層に逆伝播する誤差情報である。
【００９５】
ここで、畳み込み層１０４の層出力データyij(k)は、畳み込み層１０４の直後の上位層である隠れ層１０５の層入力データxij(c)となる。
【００９６】
したがって、式（２）右辺の∂E／∂yij(k)は、誤差Eの、畳み込み層１０４の層出力データyij(k)での偏微分を表すが、隠れ層１０５で得られる∂E／∂xij(c)に等しく、隠れ層１０５から畳み込み層１０４に逆伝播されてくる誤差情報である。
【００９７】
畳み込み層１０４において、式（２）の∂E／∂wst(k,c)は、上位層である隠れ層１０５からの誤差情報∂E／∂yij(k)（隠れ層１０５で得られる∂E／∂xij(c)）を用いて求められる。
【００９８】
同様に、式（３）右辺の∂E／∂y(i+p-s)(j+q-t)(k)も、隠れ層１０５から畳み込み層１０４に逆伝播されてくる誤差情報であり、畳み込み層１０４において、式（３）の誤差情報∂E／∂xij(c)は、上位層である隠れ層１０５からの誤差情報∂E／∂y(i+p-s)(j+q-t)(k)を用いて求められる。
【００９９】
ところで、NNについては、NN１００のようなCNNのネットワーク設計が、NNの進化の観点から注目されている。
【０１００】
近年では、1×1の畳み込みや、3×3の畳み込みを行う畳み込み層を、多層に重ねたCNNが多数提案されている。例えば、ImageNetのデータセットを用いて学習を行ったCNNとして、AlexNetや、GoogleNet，VGG，ResNet等が知られている。
【０１０１】
CNNの学習では、畳み込み層については、m×n×c(in)の畳み込みカーネルF(k)、すなわち、マップxのチャネル数c(in)だけの厚みを有する畳み込みカーネルF(k)のフィルタ係数wst(k,c)が学習される。
【０１０２】
畳み込み層では、マップy(k)とマップxとの結合は、マップy(k)の1個のデータyij(k)に対して、マップxのm×n×c(in)個のデータxij(c)すべてが、畳み込みカーネルF(k)のm×n×c(in)個のフィルタ係数wst(k,c)を結合重みとして結合される、いわば高密度な（dense）結合になっている。
【０１０３】
ところで、フィルタ係数wst(k,c)が小さくなるような項を、誤差関数Eに含めて、畳み込みカーネルF(k)（のフィルタ係数wst(k,c)）の学習を行うと、マップy(k)とxとの結合が、いわば薄くなる。
【０１０４】
すなわち、畳み込みカーネルF(k)によって抽出したい情報が（ほぼ）ないデータxij(c)と、データyij(k)との結合重みとしてのフィルタ係数wst(k,c)は、ゼロに近い小さい値になり、実質的に、1個のデータyij(k)と結合するデータxij(c)は疎になる。
【０１０５】
このことは、畳み込みカーネルF(k)のm×n×c(in)個のフィルタ係数wst(k,c)が冗長性を有すること、さらには、畳み込みカーネルF(k)よりもフィルタ係数を（実際に、又は、実質的に）少なくした、いわば、畳み込みカーネルF(k)を近似する近似カーネルを用いて、畳み込みカーネルF(k)を用いる場合と同様の認識（検出）等を行うことができること、すなわち、認識等の性能を（ほぼ）維持したまま、NNの計算量及びパラメータ数としてのフィルタ係数（結合重み）の数を削減することができることを意味する。
【０１０６】
本明細書では、以上のような知見に基づき、新しい数学的な特性を有するNNの層としての２値演算層を提案する。
【０１０７】
２値演算層は、その２値演算層に入力される層入力データのうちの２値を用いた２値演算を行い、その２値演算の結果を、２値演算層から出力される層出力データとして出力する。２値演算層では、畳み込み演算と同様の処理対象をもち、学習対象のパラメータ数が少ないカーネルを利用することで正則化の効果もあり、必要以上に大きいパラメータ数を抑えることで過学習を回避し、性能向上も期待できる。
【０１０８】
なお、NNについては、新しい数学的な特性を有する層を定義し、その層を含むネットワーク構成のNNで学習を行うことによって、認識等の性能が向上する例が、多数報告されている。例えば、Google社のBatch Normalizationと呼ばれる層では、入力の平均と分散を正規化して後段（上位層）に伝播することで、深いNN（層の数が多いNN）を安定して学習させることを可能にしている。
【０１０９】
以下、２値演算層について説明する。
【０１１０】
例えば、3×3の畳み込み等の、任意のA×B(>1)の畳み込みは、２値演算層を利用して近似することができる。
【０１１１】
すなわち、A×B(>1)の畳み込みは、例えば、1×1の畳み込みと２値演算とで近似することができる。
【０１１２】
＜２値演算層を利用したA×Bの畳み込みの近似＞
【０１１３】
図５及び図６を参照して、２値演算層を利用したA×B(>1)の畳み込みの近似、すなわち、1×1の畳み込みと２値演算とによるA×B(>1)の畳み込みの近似について説明する。
【０１１４】
図５は、A×B(>1)の畳み込みを説明する図である。
【０１１５】
すなわち、図５は、A×B＝3×3の畳み込みを行う3チャネルの畳み込みカーネルF(k,0),F(k,1),F(k,2)と、その畳み込みカーネルF(k,c)が適用される3チャネルのマップx(0),x(1),x(2)との例を示している。
【０１１６】
なお、図５では、説明を簡単にするため、マップx(c)は、3×3のマップであることとする。
【０１１７】
畳み込みカーネルF(k,c)の3×3のフィルタ係数については、学習により、左上のフィルタ係数が+1になり、右下のフィルタ係数が-1になっている。また、他のフィルタ係数は、（ほぼ）ゼロになっている。
【０１１８】
例えば、斜め方向のエッジの検出が必要な畳み込みでは、以上のようなフィルタ係数を有する畳み込みカーネルF(k,c)が、学習により求められる。
【０１１９】
図５では、畳み込みカーネルF(k,c)が適用されるマップx(c)の範囲の左上のデータがA#cになっており、右下のデータがB#cになっている。
【０１２０】
図５の畳み込みカーネルF(k,c)が、図５のマップx(c)の範囲に適用され、畳み込みが行われた場合、その畳み込みの結果得られるデータyij(k)は、yij(k)＝A0+A1+A2-(B0+B1+B2)となる。
【０１２１】
図６は、1×1の畳み込みを説明する図である。
【０１２２】
すなわち、図６は、1×1の畳み込みを行う3チャネルの畳み込みカーネルF(k,0),F(k,1),F(k,2)、その畳み込みカーネルF(k,c)が適用される3チャネルのマップx(0),x(1),x(2)、及び、畳み込みカーネルF(k,c)をマップx(c)に適用して得られる畳み込み結果としてのマップy(k)の例を示している。
【０１２３】
図６において、マップx(c)は、図５の場合と同様に構成される。また、マップy(k)は、マップx(c)と同様に、3×3のマップになっている。
【０１２４】
また、1×1の畳み込みを行う畳み込みカーネルF(k,c)は、1個のフィルタ係数w00(k,c)を有する。
【０１２５】
図６の1×1の畳み込みカーネルF(k,c)が、マップx(c)の左上の画素に適用され、畳み込みが行われた場合、その畳み込みの結果得られる、マップy(k)の左上のデータy00(k)は、y00(k)＝w00(k,0)×A0+w00(k,1)×A1+w00(k,2)×A2となる。
【０１２６】
したがって、フィルタ係数w00(k,c)が1であるとすると、1×1の畳み込みカーネルF(k,c)が、マップx(c)の左上の画素に適用されることにより得られるデータ（畳み込みの結果）y00(k)は、y00(k)＝A0+A1+A2になる。
【０１２７】
同様に、1×1の畳み込みカーネルF(k,c)が、マップx(c)の右下の画素に適用されることにより得られる、マップy(k)の右下のデータy22(k)は、y22(k)＝B0+B1+B2になる。
【０１２８】
したがって、1×1の畳み込みの結果得られるマップy(k)を対象に、そのマップy(k)の左上のデータy00(k)と、右下のデータy22(k)との差分を求める２値演算y00(k)−y22(k)＝(A0+A1+A2)-(B0+B1+B2)を行うことにより、図５の3×3の畳み込みカーネルF(k,c)を適用した場合と同様のデータyij(k)＝A0+A1+A2-(B0+B1+B2)を得ることができる。
【０１２９】
以上から、A×B(>1)の畳み込みは、1×1の畳み込みと２値演算とで近似することができる。
【０１３０】
いま、説明を簡単にするため、チャネル方向を無視することとすると、A×B(>1)の畳み込みでは、A×B個のフィルタ係数を用いた積和演算が行われる。
【０１３１】
一方、1×1の畳み込みでは、1個のフィルタ係数をパラメータとして、積が演算される。また、２値の差分を求める２値演算では、+1及び-1をフィルタ係数とする積和演算、すなわち、2個のフィルタ係数を用いた積和演算が行われる。
【０１３２】
したがって、1×1の畳み込みと２値演算との組み合わせによれば、A×B(>1)の畳み込みよりも、パラメータ数としてのフィルタ係数の数、及び、計算量を削減することができる。
【０１３３】
＜２値演算層を含むNNの構成例＞
【０１３４】
図７は、PC１０により実現されるNNの第２の構成例を示すブロック図である。
【０１３５】
なお、図中、図２と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。
【０１３６】
図７において、NN１１０は、２値演算層１１２を含むNNで、入力層１０１、NN１０２、隠れ層１０３、隠れ層１０５、NN１０６、出力層１０７、畳み込み層１１１、及び、２値演算層１１２を有する。
【０１３７】
したがって、NN１１０は、入力層１０１、NN１０２、隠れ層１０３、隠れ層１０５、NN１０６、及び、出力層１０７を有する点で、図２のNN１００と共通する。
【０１３８】
但し、NN１１０は、畳み込み層１０４に代えて、畳み込み層１１１、及び、２値演算層１１２を有する点で、図２のNN１００と相違する。
【０１３９】
畳み込み層１１１、及び、２値演算層１１２では、結果として、図２の畳み込み層１０４で行われる3×3の畳み込みを近似する処理を行うことができる。
【０１４０】
畳み込み層１１１には、層入力データとして、隠れ層１０３からの(64,32,32)のマップが供給される。
【０１４１】
畳み込み層１１１は、図２の畳み込み層１０４と同様に、隠れ層１０３からの層入力データとしての(64,32,32)のマップに対して、畳み込みカーネルを適用し、その(64,32,32)のマップを対象とする畳み込みを行う。
【０１４２】
但し、図２の畳み込み層１０４は、3×3の畳み込みカーネルを用いて、3×3の畳み込みを行うが、畳み込み層１１１は、畳み込み層１０４の3×3の畳み込みカーネルよりもフィルタ係数の数が少ない、例えば、1×1の畳み込みカーネルを用いて、1×1の畳み込みを行う。
【０１４３】
すなわち、畳み込み層１１１では、層入力データとしての(64,32,32)のマップに対して、1×1×64の畳み込みカーネルをスライドしながら適用することにより、(64,32,32)のマップの1×1の畳み込みを行う。
【０１４４】
具体的には、畳み込み層１１１では、例えば、層入力データとしての(64,32,32)のマップの、全チャネルの同一位置の画素が、順次、注目画素に設定され、(64,32,32)のマップにおいて、注目画素を基準とする所定の位置、すなわち、例えば、注目画素の位置を中心とする、縦×横×チャネルが1×1×64の直方体状の範囲（畳み込みカーネルの縦×横×チャネルと同一の範囲）が、畳み込みの処理対象に設定される。
【０１４５】
そして、(64,32,32)のマップのうちの、畳み込みの処理対象内の1×1×64の各データ（画素値）と、1×1×64の畳み込みカーネルとしてのフィルタのフィルタ係数との積和演算が行われ、その積和演算の結果が、注目画素の畳み込みの結果として求められる。
【０１４６】
畳み込み層１１１では、その後、まだ注目画素に設定されていない画素を、注目画素に新たに設定して、同様の処理が繰り返され、これにより、畳み込みカーネルが、注目画素の設定に応じてスライドされながら、層入力データとしてのマップに適用される。
【０１４７】
なお、畳み込み層１１１は、1×1×64の畳み込みカーネルを、例えば、図２の畳み込み層１０４と同様に、128種類だけ有し、(64,32,32)のマップに対して、128種類の1×1×64の畳み込みカーネルそれぞれを適用することにより、(128,32,32)のマップ（畳み込みマップ）を求め、畳み込み層１０４の層出力データとして出力する。
【０１４８】
また、畳み込み層１１１では、畳み込み層１０４と同様に、畳み込みカーネルを適用することにより得られる畳み込み結果を引数として演算した活性化関数の演算結果を、層出力データとして出力することができる。
【０１４９】
２値演算層１１２は、例えば、畳み込み層１１１が出力する(128,32,32)のマップの、全チャネルの同一位置の画素を、順次、注目画素に設定し、(128,32,32)のマップにおいて、注目画素を基準とする所定の位置、すなわち、例えば、注目画素の位置を中心とする、縦×横×チャネルがA×B×Cの直方体状の範囲を、２値演算の処理対象に設定する。
【０１５０】
ここで、２値演算の処理対象としての直方体状の範囲の縦×横のサイズとしては、例えば、２値演算層１１２を利用して近似する畳み込み層１０４の畳み込みカーネルの縦×横（畳み込みの処理対象の縦×横）と同一のサイズ、すなわち、ここでは、3×3を採用することができる。
【０１５１】
２値演算の処理対象としての直方体状の範囲のチャネル方向のサイズとしては、２値演算層１１２に対する層入力データのチャネルの数、すなわち、ここでは、畳み込み層１１１が出力する(128,32,32)のマップのチャネルの数である128が採用される。
【０１５２】
したがって、注目画素に対する２値演算の処理対象は、(128,32,32)のマップの、例えば、注目画素の位置を中心とする、縦×横×チャネルが3×3×128の直方体状の範囲である。
【０１５３】
２値演算層１１２は、畳み込み層１１１からの(128,32,32)のマップ（畳み込みマップ）のうちの、注目画素に対して設定した処理対象の中の２個のデータを用いて２値演算を行い、その２値演算の結果を、層出力データとして、上位層の隠れ層１０５に出力する。
【０１５４】
ここで、２値演算層１１２での２個のデータd1及びd2を用いた２値演算としては、２個のデータd1及びd2の和、差、積、商、その他、例えば、f(d1,d2)=sin(d1)×cos(d2)等の所定の関数の演算を採用することができる。さらに、２個のデータd1及びd2を用いた２値演算としては、２個のデータd1及びd2のANDや、OR，XOR等の論理演算を採用することができる。
【０１５５】
以下では、説明を簡単にするため、２値演算層１１２での２個のデータd1及びd2を用いた２値演算としては、例えば、２個のデータd1及びd2の差分d1-d2を求める演算を採用することとする。
【０１５６】
２値演算としての２個のデータd1及びd2の差分を求める差分演算は、２値演算の処理対象と同一サイズの、縦×横×チャネルが3×3×128のカーネルであって、データd1に適用されるフィルタ係数が+1で、データd2に適用されるフィルタ係数が-1の、2個だけのフィルタ係数を有するカーネルを、２値演算の処理対象に適用して、積和演算（+1×d1＋(-1)×d2）を行う処理であると捉えることができる。
【０１５７】
ここで、２値演算層１１２が２値演算を行うのに用いるカーネル（フィルタ）を、２値演算カーネルともいう。
【０１５８】
２値演算カーネルは、以上のように、データd1に適用されるフィルタ係数が+1で、データd2に適用されるフィルタ係数が-1の、2個のフィルタ係数を有するカーネルであると捉える他、例えば、２値演算の処理対象と同一サイズの、縦×横×チャネルが3×3×128のカーネルであって、データd1及びd2に適用されるフィルタ係数がそれぞれ+1及び-1で、他のデータに適用されるフィルタ係数が0の、２値演算の処理対象と同一サイズのフィルタ係数を有するカーネルであると捉えることもできる。
【０１５９】
以上のように、２値演算を、２値演算カーネルの適用と捉える場合には、２値演算層１１２では、畳み込み層１１１からの層入力データとしての(128,32,32)のマップに対して、3×3×128の２値演算カーネルがスライドしながら適用される。
【０１６０】
すなわち、２値演算層１１２は、例えば、畳み込み層１１１が出力する(128,32,32)のマップの、全チャネルの同一位置の画素を、順次、注目画素に設定し、(128,32,32)のマップにおいて、注目画素を基準とする所定の位置、すなわち、例えば、注目画素の位置を中心とする、縦×横×チャネルが3×3×128の直方体状の範囲（２値演算カーネルの縦×横×チャネルと同一の範囲）を、２値演算の処理対象に設定する。
【０１６１】
そして、(128,32,32)のマップのうちの、２値演算の処理対象内の3×3×128の各データ（画素値）と、3×3×128の２値演算カーネルとしてのフィルタのフィルタ係数との積和演算が行われ、その積和演算の結果が、注目画素についての２値演算の結果として求められる。
【０１６２】
２値演算層１１２では、その後、まだ注目画素に設定されていない画素を、注目画素に新たに設定して、同様の処理が繰り返され、これにより、２値演算カーネルが、注目画素の設定に応じてスライドされながら、層入力データとしてのマップに適用される。
【０１６３】
なお、図７では、２値演算層１１２は、２値演算カーネルを、例えば、128種類だけ有し、畳み込み層１１１からの(128,32,32)のマップ（畳み込みマップ）に対して、128種類の２値演算カーネルそれぞれを適用することにより、(128,32,32)のマップを求め、２値演算層１１２の層出力データとして、隠れ層１０５に出力する。
【０１６４】
ここでは、２値演算の対象となるマップのチャネル数と、２値演算の結果得られるマップのチャネル数とが、同一の128チャネルとしたが、２値演算の対象となるマップのチャネル数と、２値演算の結果得られるマップのチャネル数とは、同一である必要はない。
【０１６５】
例えば、２値演算層１１２の２値演算カーネルとして、例えば、256種類の２値演算カーネルを用意することにより、２値演算層１１２において、２値演算カーネルを、畳み込み層１１１からの(128,32,32)のマップに対して適用することにより得られる２値演算結果としてのマップのチャネル数は、２値演算カーネルの種類数に等しい256チャネルになる。
【０１６６】
また、本実施の形態では、２値演算として、差分を採用することとしたが、異なる種類の２値演算カーネルでは、異なる種類の２値演算を採用することができる。
【０１６７】
また、２値演算カーネルにおいて、ある画素を注目画素として設定される処理対象と、他の画素を注目画素として設定される処理対象とでは、処理対象において、同一の位置の２値（データ）を、２値演算の対象とすることもできるし、異なる位置の２値を、２値演算の対象とすることができる。
【０１６８】
すなわち、ある画素を注目画素として設定される処理対象については、その処理対象における位置P1及びP2の２値を、２値演算の対象とし、他の画素を注目画素として設定される処理対象についても、その処理対象における位置P1及びP2の２値を、２値演算の対象とすることができる。
【０１６９】
また、ある画素を注目画素として設定される処理対象については、その処理対象における位置P1及びP2の２値を、２値演算の対象とし、他の画素を注目画素として設定される処理対象については、その処理対象における、位置P1及びP2のペアと異なるペアの位置P1'及びP2'の２値を、２値演算の対象とすることができる。
【０１７０】
この場合、スライドしながら適用される２値演算カーネルの２値演算の対象となる２値の位置が、処理対象において変化する。
【０１７１】
なお、２値演算層１１２において、２値演算の対象の各チャネルのマップ、すなわち、畳み込み層１１１からの各チャネルのマップの全画素が、注目画素に設定される場合、２値演算の結果としてのマップの縦×横のサイズは、２値演算の対象のマップの縦×横のサイズと同一の32×32（画素）となる。
【０１７２】
また、２値演算の対象の各チャネルのマップの画素が、1画素以上おきに注目画素に設定される場合、すなわち、２値演算の対象の各チャネルのマップにおいて、注目画素に設定されない画素が存在する場合、２値演算の結果としてのマップの縦×横のサイズは、２値演算の対象のマップの縦×横のサイズよりも小さくなる（プーリングが行われる）。
【０１７３】
さらに、上述の場合には、２値演算カーネル（２値演算の処理対象）の縦×横のサイズとして、２値演算層１１２を利用して近似する畳み込み層１０４（図２）の畳み込みカーネルの縦×横（畳み込みの処理対象の縦×横）と同一のサイズ、すなわち、3×3を採用することとしたが、２値演算カーネル（２値演算の処理対象）の縦×横のサイズとしては、１×１より大のサイズ、又は、畳み込み層１１１の畳み込みカーネルより大のサイズであって、２値演算の対象のマップと同一のサイズ、すなわち、32×32以下のサイズを採用することができる。
【０１７４】
なお、２値演算カーネルの縦×横のサイズとして、２値演算の対象のマップと同一のサイズ、すなわち、ここでは、32×32のサイズを採用する場合には、２値演算カーネルをスライドさせずに、２値演算の対象のマップ全体に適用することができる。この場合、１種類の２値演算カーネルを適用することにより得られるマップは、２値演算の結果得られる１つの値で構成される。
【０１７５】
以上の畳み込み層１１１及び２値演算層１１２の処理は、対象物の検出等を行う順伝播時の処理であるが、学習を行う逆伝播時では、畳み込み層１１１及び２値演算層１１２において、直前の下位層に逆伝播する、出力データの誤差に関する誤差情報が、直後の上位層からの誤差情報を用いて求められ、直前の下位層に逆伝播される。また、畳み込み層１１１では、畳み込みカーネルのフィルタ係数が、上位層（ここでは、２値演算層１１２）からの誤差情報を用いて更新される。
【０１７６】
＜２値演算層１１２の処理＞
【０１７７】
図８は、２値演算層１１２の２値演算の処理の例を説明する図である。
【０１７８】
図８において、マップxは、２値演算層１１２に対する層入力データxである。マップxは、図３の場合と同様に、(c(in),M,N)のマップ、すなわち、縦×横がM×Nの、c(in)チャネルの画像になっており、c(in)チャネルのマップx(0),x(1),...,x(c(in)-1)から構成される。
【０１７９】
また、図８において、マップyは、２値演算層１１２が出力する層出力データyである。マップyは、図３の場合と同様に、(k(out),M,N)のマップ、すなわち、縦×横がM×Nの、k(out)チャネルの画像になっており、k(out)チャネルのマップy(0),y(1),...,y(k(out)-1)から構成される。
【０１８０】
２値演算層１１２は、縦×横×チャネルがm×n×c(in)の２値演算カーネルGを、k(out)個だけ有する。ここで、1<=m<=M、及び、1<=n<=N、並びに、1<m×n<=M×Nである。
【０１８１】
２値演算層１１２は、k(out)個の２値演算カーネルGのうちの、k+1番目の２値演算カーネルG(k)を、マップxに適用し、チャネル#kのマップy(k)を求める。
【０１８２】
すなわち、２値演算層１１２は、マップxの、全チャネルの同一位置の画素を、順次、注目画素に設定し、マップxにおいて、例えば、注目画素の位置を中心とする、縦×横×チャネルがm×n×c(in)の直方体状の範囲を、２値演算の処理対象に設定する。
【０１８３】
そして、２値演算層１１２は、マップxのうちの、注目画素に対して設定した処理対象に対して、k+1番目の２値演算カーネルG(k)を適用し、処理対象の中の２個のデータ（２値）を用いた２値演算としての差分演算を行い、その２個のデータの差分を求める。
【０１８４】
２値演算カーネルG(k)を適用した処理対象が、縦方向にi番目で、横方向にj番目の処理対象である場合、２値演算カーネルG(k)を適用して求められた差分は、チャネル#kのマップy(k)の位置(i,j)のデータ（画素値）yij(k)となる。
【０１８５】
図９は、２値演算カーネルG(k)が処理対象に適用される様子を示す図である。
【０１８６】
図８で説明したように、２値演算層１１２は、縦×横×チャネルがm×n×c(in)の２値演算カーネルGを、k(out)個だけ有する。
【０１８７】
ここで、k(out)個の２値演算カーネルGを、G(0),G(1),...,G(k(out)-1)と表す。
【０１８８】
２値演算カーネルG(k)は、c(in)チャネルのマップx(0),x(1),...,x(c(in)-1)にそれぞれ適用されるc(in)チャネルの２値演算カーネルG(k,0),G(k,1),...,G(k,c(in)-1)から構成される。
【０１８９】
２値演算層１１２では、(c(in),M,N)のマップxに対して、m×n×c(in)の２値演算カーネルG(k)をスライドしながら適用することにより、マップxにおいて、２値演算カーネルG(k)が適用される、縦×横×チャネルがm×n×c(in)の処理対象の中の２値の差分演算が行われ、その差分演算により得られる２値の差分からなるチャネル#kのマップy(k)が生成される。
【０１９０】
なお、図３の場合と同様に、m×n×c(in)の２値演算カーネルG(k)、及び、その２値演算カーネルG(k)が適用されるマップxの空間方向（i及びjの方向）の縦×横がm×nの範囲については、所定の位置としての、例えば、そのm×nの範囲の左上の位置を基準とする縦方向及び横方向の位置を、それぞれs及びtで表す。
【０１９１】
また、２値演算カーネルG(k)を、マップxに適用するにあたっては、マップxにパディングを行うこととし、図３で説明したように、マップxの境界から縦方向にパディングされるデータの数をpと表すとともに、横方向にパディングされるデータの数をqと表すこととする。p=q=0とすることで、パディングは、なしにすることができる。
【０１９２】
ここで、図７で説明したように、２値演算としての２個のデータd1及びd2の差分を求める差分演算は、例えば、データd1に適用されるフィルタ係数が+1で、データd2に適用されるフィルタ係数が-1の、2個だけのフィルタ係数を有する２値演算カーネルを、２値演算の処理対象に適用して、積和演算（+1×d1＋(-1)×d2）を行う処理であると捉えることができる。
【０１９３】
いま、２値演算カーネルG(k)のフィルタ係数の+1が積算されるデータd1の、処理対象内のチャネル方向、縦、横の位置を(c,s,t)を、(c0(k),s0(k),t0(k))と表すとともに、２値演算カーネルG(k)のフィルタ係数の-1が積算されるデータd2の、処理対象内のチャネル方向、縦、横の位置を(c,s,t)を、(c1(k),s1(k),t1(k))と表すこととする。
【０１９４】
２値演算層１１２において、マップxに２値演算カーネルGを適用して、２値演算としての差分演算を行い、マップyを求める順伝播は、式（４）で表される。
【０１９５】
【数４】
2018163790.tif 000006
・・・（４）
【０１９６】
また、逆伝播は、式（５）で表される。
【０１９７】
【数５】
2018163790.tif 000007
・・・（５）
【０１９８】
式（５）の∂E／∂xij(c)は、NN１１０の学習時に、２値演算層１１２の直前の下位層、すなわち、図７では、畳み込み層１１１に逆伝播する誤差情報である。
【０１９９】
ここで、２値演算層１１２の層出力データyij(k)は、２値演算層１１２の直後の上位層である隠れ層１０５の層入力データxij(c)となる。
【０２００】
したがって、式（５）右辺の∂E／∂y(i+p-s0(k))(j+q-t0(k))(k)は、誤差Eの、２値演算層１１２の層出力データy(i+p-s0(k))(j+q-t0(k))(k)での偏微分を表すが、隠れ層１０５で得られる∂E／∂xij(c)と等価であり、隠れ層１０５から２値演算層１１２に逆伝播されてくる誤差情報である。
【０２０１】
２値演算層１１２において、式（５）の誤差情報∂E／∂xij(c)は、上位層である隠れ層１０５からの誤差情報∂E／∂xij(c)を、誤差情報∂E／∂y(i+p-s0(k))(j+q-t0(k))(k)として用いて求められる。
【０２０２】
また、式（５）において、サメーション（Σ）の範囲を規定するk0(c)は、マップxの処理対象における位置(c0(k), s0(k), t0(k))のデータxs0(k)t0(k)(c0(k))を用いて求められたマップy(k)のデータyij(k)のkの集合を表す。
【０２０３】
式（５）のサメーションは、k0(c)に属するkについてとられる。
【０２０４】
K1(c)についても、同様である。
【０２０５】
なお、NNを構成する層には、その層のユニットそれぞれが、下位層のすべてのユニットと結合している全結合層（アフィン層）や、層入力データに対して、カーネルが適用される位置によって結合重みが変化し得るLCL(Locally Connected Layer)がある。
【０２０６】
LCLは、全結合層の部分集合であり、畳み込み層は、LCLの部分集合である。また、２値演算としての差分演算を行う２値演算層１１２は、畳み込み層の部分集合であるとみなすことができる。
【０２０７】
以上のように、２値演算層１１２は、畳み込み層の部分集合であるとみなすことができる場合には、２値演算層１１２の順伝播及び逆伝播は、式（４）及び式（５）で表すことができる他、畳み込み層の順伝播及び逆伝播を表す式（１）及び式（３）で表すこともできる。
【０２０８】
すなわち、２値演算層１１２の２値演算カーネルは、図７で説明したように、２個のデータd1及びd2に適用されるフィルタ係数がそれぞれ+1及び-1で、他のデータに適用されるフィルタ係数が0の、２値演算の処理対象と同一サイズのフィルタ係数を有するカーネルであると捉えることができる。
【０２０９】
したがって、式（１）及び式（３）は、２個のデータd1及びd2に適用されるフィルタ係数wst(k,c)をそれぞれ+1及び-1とし、他のデータに適用されるフィルタ係数wst(k,c)を0とすることにより、２値演算層１１２の順伝播及び逆伝播を表す。
【０２１０】
２値演算層１１２の順伝播及び逆伝播を、式（１）及び式（３）、又は、式（４）及び式（５）のいずれで実現するかは、２値演算層１１２を実現するハードウェアやソフトウェアの仕様等により決定することができる。
【０２１１】
なお、上述したことから、２値演算層１１２は、畳み込み層の部分集合である他、LCLの部分集合でもあり、全結合層の部分集合でもある。したがって、２値演算層１１２の順伝播及び逆伝播は、畳み込み層の順伝播及び逆伝播を表す式（１）及び式（３）の他、LCLの順伝播及び逆伝播を表す式や、全結合層の順伝播及び逆伝播を表す式を用いて表すこともできる。
【０２１２】
また、式（１）ないし式（５）は、バイアス項が含まれていないが、２値演算層１１２の順伝播及び逆伝播は、バイアス項を含む式で表すことができる。
【０２１３】
図７のNN１１０では、畳み込み層１１１において、1×1の畳み込みが行われ、その畳み込みの結果得られるマップに対し、２値演算層１１２において、縦×横がm×nの２値演算カーネルが適用される。
【０２１４】
以上のような、1×1の畳み込みを行う畳み込み層１１１と、縦×横がm×nの２値演算カーネルを適用する２値演算層１１２との組み合わせによれば、1×1の畳み込みによって、畳み込み層１１１に対する層入力データのチャネルどうしの間のインタラクションが維持され、その後の２値演算によって、畳み込み層１１１に対する層入力データの空間方向（i及びjの方向）の情報が、２値の差分等の形で、上位層（図７では、隠れ層１０５）に伝達される。
【０２１５】
そして、畳み込み層１１１と２値演算層１１２との組み合わせでは、学習が行われる結合重みは、１×1の畳み込みに用いられる畳み込みカーネルFのフィルタ係数w00(k,c)だけであるが、畳み込み層１１１の層入力データと、２値演算層１１２の層出力データとの結合は、２値演算カーネルの縦×横のサイズと同様のm×nの拡がりのある畳み込みを行う畳み込み層の層入力データと層出力データとの結合を近似する構成となる。
【０２１６】
その結果、畳み込み層１１１と２値演算層１１２との組み合わせによれば、２値演算層１１２の上位層側から見て、縦×横がm×nの範囲をカバーする畳み込み、すなわち、m×nの畳み込みと同様の性能の畳み込みを、パラメータ数としての畳み込みカーネルFのフィルタ係数w00(k,c)の数、及び、計算量を1／(m×n)に削減して行うことができる。
【０２１７】
なお、畳み込み層１１１では、1×1の畳み込みの他、２値演算カーネルの空間方向のサイズ、すなわち、縦×横がm×nより小さいm'×n'の畳み込みカーネルによって、m'×n'の畳み込みを行うことができる。ここで、m'<=m、n'<=n、及び、m'×n'＜m×nである。
【０２１８】
畳み込み層１１１において、m'×n'の畳み込みが行われる場合、パラメータ数としての畳み込みカーネルFのフィルタ係数w00(k,c)の数、及び、計算量は、m×nの畳み込みの(m'×n')／(m×n)になる。
【０２１９】
また、畳み込み層１１１で行う畳み込みは、複数の層に分けて行うことができる。畳み込み層１１１で行う畳み込みを、複数の層に分けて行うことにより、畳み込みカーネルFのフィルタ係数w00(k,c)の数、及び、計算量を削減することができる。
【０２２０】
すなわち、例えば、畳み込み層１１１において、64チャネルのマップを対象として、1×1の畳み込みを行い、128チャネルのマップを生成する場合には、畳み込み層１１１の1×1の畳み込みは、例えば、64チャネルのマップを対象として、1×1の畳み込みを行い、16チャネルのマップを生成する第１の畳み込み層と、その16チャネルのマップを対象として、１×１の畳み込みを行い、128チャネルのマップを生成する第２の畳み込み層とに分けて行うことができる。
【０２２１】
畳み込み層１１１において、64チャネルのマップを対象として、1×1の畳み込みを行い、128チャネルのマップを生成する場合、畳み込みカーネルのフィルタ係数の数は、64×128になる。
【０２２２】
一方、64チャネルのマップを対象として、1×1の畳み込みを行い、16チャネルのマップを生成する第１の畳み込み層の畳み込みカーネルのフィルタ係数の数は、64×16になり、16チャネルのマップを対象として、１×１の畳み込みを行い、128チャネルのマップを生成する第２の畳み込み層の畳み込みカーネルのフィルタ係数の数は、16×128になる。
【０２２３】
したがって、畳み込み層１１１に代えて、第１及び第２の畳み込み層を採用することにより、フィルタ係数の数を、64×128から、64×16＋16×128に削減することができる。計算量についても、同様である。
【０２２４】
＜２値演算層１１２の２値演算の対象とする２値の選択方法＞
【０２２５】
図１０は、２値演算層１１２の２値演算の対象とする２値を選択する選択方法の例を示す図である。
【０２２６】
２値演算の処理対象である、マップxの、注目画素の位置を中心とする、縦×横×チャネルがm×n×c(in)の直方体状の範囲からは、２値演算の対象とする２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))（図９）を、例えば、ランダムに選択することができる。
【０２２７】
すなわち、２値演算の対象とする２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))は、ランダムプロジェクション(Random Projection)その他の任意の方法によりランダムに選択することができる。
【０２２８】
さらに、２値演算の対象とする２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するにあたっては、所定の制約を課すことができる。
【０２２９】
２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を、ランダムに選択する場合には、２値演算層１１２の層入力データとしてのマップxの中で、２値演算層１１２の層出力データとしてのマップyと結合されないチャネル#cのマップx(c)、すなわち、２値演算に用いられないマップx(c)が生じ得る。
【０２３０】
そこで、２値演算の対象とする２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するにあたっては、２値演算に用いられないマップx(c)が生じないように、２値演算層１１２において、各チャネル#cのマップx(c)を、１チャネル以上のマップy(k)と結合させる制約、すなわち、各チャネル#cのマップx(c)から、位置(c0(k),s0(k),t0(k))又は(c1(k),s1(k),t1(k))となる位置(c,s,t)が１以上選択される制約を課すことができる。
【０２３１】
なお、２値演算層１１２において、各チャネル#cのマップx(c)を、１チャネル以上のマップy(k)と結合させる制約を課すことに代えて、２値演算に用いられないマップx(c)が生じた場合には、例えば、２値演算層１１２の直前の下位層において、２値演算に用いられないマップx(c)を削除する後処理を行うことができる。
【０２３２】
図９で説明したことから、m'×n'（＜m×n）の畳み込みを行う畳み込み層１１１と、マップxの縦×横×チャネル方向がm×n×c(in)の範囲を処理対象として２値演算を行う２値演算層１１２との組み合わせでは、m×nの畳み込みを近似することができる。したがって、２値演算の処理対象の縦×横がm×nの空間方向の拡がりは、m×nの畳み込みを行う畳み込みカーネルの空間方向の拡がり、ひいては、m×nの畳み込みの対象となるマップxの空間方向の拡がりに対応する。
【０２３３】
マップxの、空間方向の広い範囲を対象として、畳み込みを行う場合には、マップxの低周波数成分を抽出することができ、マップxの、空間方向の狭い範囲を対象として、畳み込みを行う場合には、マップxの高周波数成分を抽出することができる。
【０２３４】
そこで、２値演算の対象とする２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するにあたっては、マップxから様々な周波数成分を抽出することができるように、m×n×c(in)の処理対象から、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するときの空間方向の範囲を、m×nを最大の範囲として、層出力データとしてのマップy(k)のチャネル#kによって変化させることができる。
【０２３５】
例えば、m×nが9×9である場合には、マップy(k)の1/3のチャネルについては、9×9×c(in)の処理対象の全体を対象として、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択することができる。
【０２３６】
さらに、例えば、マップy(k)の、他の1/3のチャネルについては、9×9×c(in)の処理対象のうちの、注目画素を中心とする、空間方向が5×5の狭い範囲を対象として、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択することができる。
【０２３７】
そして、例えば、マップy(k)の、残りの1/3のチャネルについては、9×9×c(in)の処理対象のうちの、注目画素を中心とする、空間方向が3×3のより狭い範囲を対象として、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択することができる。
【０２３８】
以上のように、マップxのm×n×c(in)の処理対象から、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するときの空間方向の範囲を、マップy(k)のチャネル#kによって変化させることで、マップxから様々な周波数成分を抽出することができる。
【０２３９】
なお、以上のように、マップxのm×n×c(in)の処理対象から、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するときの空間方向の範囲を、マップy(k)のチャネル#kによって変化させることは、１のチャネル#kの層出力データとしてのマップy(k)を得る場合と、他の１のチャネル#k'の層出力データとしてのマップy(k')を得る場合とで、空間方向のサイズが異なる２値演算カーネルを適用することと等価である。
【０２４０】
また、２値演算層１１２では、マップx(c)のチャネル#Cによって、空間方向のサイズが異なる２値演算カーネルG(k,c)を採用することが可能である。
【０２４１】
マップxのm×n×c(in)の処理対象から、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するにあたっては、マップxのオリエンテーションに応じて、処理対象から選択される２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))のパターンを調整することができる。
【０２４２】
例えば、人の顔が映る画像は、横方向のエッジが多く、そのような横方向のエッジに対応するオリエンテーションが頻繁に出現する。そこで、入力データとしての画像に、人の顔が映るかどうかを検出する場合には、横方向のエッジに対応するオリエンテーションに応じて、横方向のエッジに対する感度が高くなるような２値演算が行われるように、処理対象から選択される２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))のパターンを調整することができる。
【０２４３】
例えば、マップxにおいて、縦方向の位置が異なる位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の２値を用いて２値演算としての差分演算が行われる場合には、位置(c0(k),s0(k),t0(k))又は位置(c1(k),s1(k),t1(k))上に、横方向のエッジがあると、差分演算により求められる差分の大きさが大になり、横方向のエッジに対する感度が高くなる。この場合、横方向のエッジが多い人の顔が映るかどうかを検出するときの検出性能を向上させることができる。
【０２４４】
マップxのm×n×c(in)の処理対象から、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択するにあたっては、処理対象から選択される２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))のパターンが均一化するような制約、すなわち、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))のパターンとして、様々なパターンが万遍なく出現する制約を課すことができる。
【０２４５】
また、処理対象から選択される２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))のパターンについては、処理対象から選択される２値から得られる周波数成分やオリエンテーションが万遍なくばらつくような制約を課すことができる。
【０２４６】
さらに、処理対象のチャネル方向を無視して、空間方向に注目すると、例えば、処理対象の空間方向のサイズが、例えば、m×n＝9×9である場合、処理対象からの２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の選択は、処理対象の中心の、例えば、縦×横が3×3の領域よりも、処理対象の周囲の領域（処理対象の中心の3×3の領域以外の領域）から行われる頻度が高くなる。処理対象の中心の3×3の領域よりも、処理対象の周囲の領域の方が、面積が広いからである。
【０２４７】
２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))は、処理対象の中心の3×3の領域から選択された方が良い場合もあるし、処理対象の周囲の領域から選択された方が良い場合もある。
【０２４８】
そこで、処理対象からの２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の選択については、注目画素から位置(c0(k),s0(k),t0(k))までの空間方向の距離や、位置(c1(k),s1(k),t1(k))までの空間方向の距離が、万遍なくばらつくような制約を課すことができる。
【０２４９】
また、処理対象からの２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の選択については、例えば、必要に応じて、注目画素から位置(c0(k),s0(k),t0(k))までの空間方向の距離や、位置(c1(k),s1(k),t1(k))までの空間方向の距離が、近い距離（閾値以下の距離）になるような制約（バイアス）を課すことができる。
【０２５０】
さらに、処理対象からの２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の選択については、処理対象の空間方向が円形の範囲から、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))が選択される制約を課すことができる。この場合、円形フィルタ（フィルタ係数が円形の範囲に適用されるフィルタ）が行う処理に相当する処理を行うことが可能になる。
【０２５１】
なお、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の組を、ランダムに選択する場合に、あるチャネル#kの２値演算カーネルG(k)と、他のチャネル#k'の２値演算カーネルG(k')とで、同一の組が選択されることとなったときには、２値演算カーネルG(k)及びG(k')のうちの一方については、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の組を選択し直すことができる。
【０２５２】
また、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の組の選択は、ランダムに行う他、学習ベースの方法を利用して行うことができる。
【０２５３】
図１０は、学習ベースの方法を利用して行う、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の組の選択の例を示している。
【０２５４】
図１０のＡは、特許文献１に記載の、画像の２画素それぞれの画素値の差分を求める複数の弱識別器の学習結果を利用して、２値演算カーネルで２値演算を行う２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択する方法を示している。
【０２５５】
特許文献１に記載の弱識別器については、弱識別器において差分を求める２画素の位置が学習される。
【０２５６】
２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))としては、例えば、弱識別器において差分を求める２画素の被減数となる画素の位置及び減数となる画素の位置をそれぞれ採用することができる。
【０２５７】
また、２値演算層１１２を複数層設ける場合には、特許文献１に記載の弱識別器において差分を求める２画素の位置の学習を逐次的に繰り返し行い、その結果得られる弱識別器において差分を求める２画素の位置の複数の組を、複数層の２値演算層１１２それぞれについての２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))の組として採用することができる。
【０２５８】
図１０のＢは、CNNの学習結果を利用して、２値演算カーネルで２値演算を行う２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))を選択する方法を示している。
【０２５９】
図１０のＢでは、縦×横が1×1よりも大のサイズの畳み込みを行う畳み込み層を有するCNNの学習の結果得られる畳み込み層の畳み込みカーネルFのフィルタ係数に基づいて、２値演算カーネルで２値演算を行う２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))が選択されている。
【０２６０】
例えば、畳み込みカーネルFのフィルタ係数の最大値及び最小値の位置を、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))に、それぞれ選択することができる。
【０２６１】
また、例えば、畳み込みカーネルFのフィルタ係数の分布を確率分布とみなして、その確率分布において、確率が大きい順の２つの位置を、２値の位置(c0(k),s0(k),t0(k))及び(c1(k),s1(k),t1(k))に選択することができる。
【０２６２】
＜畳み込み層１１１及び２値演算層１１２の処理＞
【０２６３】
図１１は、図７のNN１１０の畳み込み層１１１及び２値演算層１１２の順伝播時及び逆伝播時の処理の例を説明するフローチャートである。
【０２６４】
順伝播では、ステップＳ１１において、畳み込み層１１１は、下位層の隠れ層１０３から、畳み込み層１１１に対する層入力データとしてのマップxを取得し、処理は、ステップＳ１２に進む。
【０２６５】
ステップＳ１２では、畳み込み層１１１は、マップxに対して、畳み込みカーネルFを適用し、1×1の畳み込みを行い、畳み込み層１１１の層出力データとしてのマップyを求め、処理は、ステップＳ１３に進む。
【０２６６】
ここで、ステップＳ１２の畳み込みの処理は、式（１）で表される。
【０２６７】
ステップＳ１３では、２値演算層１１２は、畳み込み層１１１の層出力データを、２値演算層１１２に対する層入力データとしてのマップxとして取得し、処理は、ステップＳ１４に進む。
【０２６８】
ステップＳ１４では、２値演算層１１２は、畳み込み層１１１からのマップxに、２値演算カーネルGを適用して、２値演算を行い、２値演算層１１２の層出力データとしてのマップyを求め、畳み込み層１１１及び２値演算層１１２の順伝播の処理は、終了する。
【０２６９】
ここで、ステップＳ１４の２値演算は、例えば、式（４）で表される。
【０２７０】
逆伝播では、ステップＳ２１において、２値演算層１１２は、上位層である隠れ層１０５からの誤差情報としての式（５）右辺の∂E／∂y(i+p-s0(k))(j+q-t0(k))(k)を取得し、処理は、ステップＳ２２に進む。
【０２７１】
ステップＳ２２では、２値演算層１１２は、上位層である隠れ層１０５からの誤差情報としての式（５）右辺の∂E／∂y(i+p-s0(k))(j+q-t0(k))(k)を用いて、下位層である畳み込み層１１１に逆伝播する誤差情報としての式（５）の∂E／∂xij(c)を求める。そして、２値演算層１１２は、誤差情報としての式（５）の∂E／∂xij(c)を、下位層である畳み込み層１１１に逆伝播し、処理は、ステップＳ２２からステップＳ２３に進む。
【０２７２】
ステップＳ２３では、畳み込み層１１１は、上位層である２値演算層１１２からの誤差情報としての式（５）の∂E／∂xij(c)を取得し、処理は、ステップＳ２４に進む。
【０２７３】
ステップＳ２４では、畳み込み層１１１は、２値演算層１１２からの誤差情報としての式（５）の∂E／∂xij(c)を、式（２）右辺の誤差情報∂E／∂yij(k)として用いて、式（２）の誤差の勾配∂E／∂wst(k,c)を求め、処理は、ステップＳ２５に進む。
【０２７４】
ステップＳ２５では、畳み込み層１１１は、誤差の勾配∂E／∂wst(k,c)を用いて、1×1の畳み込みを行う畳み込みカーネルF(k,c)のフィルタ係数w00(k,c)を更新し、処理は、ステップＳ２６に進む。
【０２７５】
ステップＳ２６では、畳み込み層１１１は、２値演算層１１２からの誤差情報としての式（５）の∂E／∂xij(c)を、式（３）右辺の誤差情報∂E／∂yij(k)（∂E／∂y(i+p-s)(j+q-t)(k)）として用いて、下位層である隠れ層１０３に逆伝播する誤差情報としての式（３）の∂E／∂xij(c)を求める。
【０２７６】
そして、畳み込み層１１１は、誤差情報としての式（３）の∂E／∂xij(c)を、下位層である隠れ層１０３に逆伝播し、畳み込み層１１１及び２値演算層１１２の逆伝播の処理は、終了する。
【０２７７】
なお、畳み込み層１１１や、２値演算層１１２、さらには、それらの畳み込み層１１１及び２値演算層１１２を含むNN１１０（図７）等は、ライブラリ等を含むソフトウェアの形で、又は、専用のハードウェアの形で提供することができる。
【０２７８】
また、畳み込み層１１１や２値演算層１１２は、例えば、ライブラリに含まれる関数の形で提供し、任意のプログラムにおいて、畳み込み層１１１や２値演算層１１２としての関数を呼び出すことで利用することができる。
【０２７９】
さらに、畳み込み層１１１や２値演算層１１２等での演算は、１ビットや、２ビット、その他３ビット以上の任意の精度で行うことができる。
【０２８０】
また、畳み込み層１１１や２値演算層１１２等での演算で用いる値の型としては、浮動小数点型、固定小数点型、整数型、その他の数値についての任意の型を採用することができる。
【０２８１】
＜シミュレーション結果＞
【０２８２】
図１２は、２値演算層について行ったシミュレーションのシミュレーション結果を示す図である。
【０２８３】
シミュレーションでは、２つのNNを用意し、その２つのNNの学習を、オープンな画像のデータセットを用いて行った。
【０２８４】
２つのNNのうちの一方のNNは、5×5×32（縦×横×チャネル）の畳み込みを行う畳み込み層、5×5×32の畳み込みを行う他の畳み込み層、5×5×64の畳み込みを行う畳み込み層、5×5×64の畳み込みを行う他の畳み込み層、及び、3×3×128の畳み込みを行う畳み込み層の、合計で5層の畳み込み層を有するCNNである。各畳み込み層の活性化関数としては、正規化線形関数を採用した。
【０２８５】
また、他方のNNは、一方のNNであるCNNの5層の畳み込み層のそれぞれを、1×1の畳み込みを行う畳み込み層１１１、及び、２値の差分を求める２値演算層１１２に置換したNN（以下、置換NNともいう）である。
【０２８６】
シミュレーションでは、学習後のCNN及び置換NNに対して、画像を与えて、その画像の認識を行い、誤り率を算出した。
【０２８７】
図１２は、シミュレーション結果としてのCNNの誤り率er1と、置換NNの誤り率er2とを示している。
【０２８８】
シミュレーション結果によれば、置換NNによって、誤り率が改善することが確認された。
【０２８９】
したがって、置換NNにおいて、CNNよりも少ないパラメータで、CNNの畳み込み層と同等以上のニューロン（に対応するユニット）の結合が実現されていることを推認することができる。
【０２９０】
＜２値演算層を含むNNの他の構成例＞
【０２９１】
図１３は、PC１０により実現されるNNの第３の構成例を示すブロック図である。
【０２９２】
なお、図中、図７と対応する部分については、同一の符号を付してあり、以下では、その説明は、適宜省略する。
【０２９３】
図１３において、NN１２０は、２値演算層１１２と値維持層１２１とを含むNNで、入力層１０１、NN１０２、隠れ層１０３、隠れ層１０５、NN１０６、出力層１０７、畳み込み層１１１、２値演算層１１２、及び、値維持層１２１を有する。
【０２９４】
したがって、NN１２０は、入力層１０１、NN１０２、隠れ層１０３、隠れ層１０５、NN１０６、出力層１０７、畳み込み層１１１、及び、２値演算層１１２を有する点で、図７のNN１１０と共通する。
【０２９５】
但し、NN１２０は、値維持層１２１が新たに設けられている点で、図７のNN１１０と相違する。
【０２９６】
図１３において、値維持層１２１は、畳み込み層１１１の直後の上位層として、２値演算層１１２と並列に配置されている。
【０２９７】
値維持層１２１は、直前の下位層である畳み込み層１１１が層出力データとして出力する、例えば、(128,32,32)のマップを構成するデータの一部の絶対的な値を維持して、直後の上位層である隠れ層１０５に出力する。
【０２９８】
すなわち、値維持層１２１は、例えば、畳み込み層１１１が、128種類（個）の1×1×64の畳み込みカーネルを適用して出力する(128,32,32)のマップの、全チャネルの同一位置の画素を、順次、注目画素に設定し、(128,32,32)のマップにおいて、注目画素を基準とする所定の位置、すなわち、例えば、注目画素の位置を中心とする、縦×横×チャネルがA×B×Cの直方体状の範囲を、絶対的な値を維持する値維持の処理対象に設定する。
【０２９９】
ここで、値維持の処理対象としての直方体状の範囲の縦×横のサイズとしては、例えば、２値演算層１１２の２値演算カーネルGの縦×横と同一のサイズ、すなわち、3×3を採用することができる。なお、値維持の処理対象としての直方体状の範囲の縦×横のサイズとしては、２値演算カーネルGの縦×横と異なるサイズを採用することもできる。
【０３００】
値維持の処理対象としての直方体状の範囲のチャネル方向のサイズとしては、値維持層１２１に対する層入力データのチャネルの数、すなわち、ここでは、畳み込み層１１１が出力する(128,32,32)のマップのチャネルの数である128が採用される。
【０３０１】
したがって、注目画素に対する値維持の処理対象は、(128,32,32)のマップの、例えば、注目画素の位置を中心とする、縦×横×チャネルが3×3×128の直方体状の範囲である。
【０３０２】
値維持層１２１は、畳み込み層１１１からの(128,32,32)のマップのうちの、注目画素に対して設定した処理対象の中の１個のデータを、例えば、ランダムプロジェクション等により選択し、そのデータの絶対的な値を維持して、層出力データとして、上位層の隠れ層１０５に出力する。
【０３０３】
ここで、データの絶対的な値を維持するとは、データの値をそのまま維持する場合の他、データの値に対して、固定値の減算や、加算、積算、除算等の演算を施す場合、その他、データの絶対的な値の情報が反映される演算を行う場合を含む。
【０３０４】
２値演算層１１２では、例えば、２値演算の処理対象の中の２個のデータの値の差分演算が行われるため、後段の層には、２個のデータの値の差分の情報は伝播されるが、データの絶対的な値の情報は伝播されない。
【０３０５】
これに対して、値維持層１２１では、値維持の処理対象の中の１個のデータの絶対的な値が維持されて出力されるので、データの絶対的な値の情報が、後段の層に伝播される。
【０３０６】
本件発明者が行ったシミュレーションによれば、後段の層に、２個のデータの値の差分の情報の他に、データの絶対的な値の情報が伝播されることで、NNの性能（対象物を検出する検出性能等）が向上することが確認された。
【０３０７】
値維持層１２１が、値維持の処理対象の中の１個のデータの絶対的な値を維持して出力する値維持の処理は、例えば、値維持の処理対象と同一サイズの、縦×横×チャネルが3×3×128のカーネルであって、１個のデータd1に適用されるフィルタ係数が+1の、１個だけのフィルタ係数を有するカーネルを、値維持の処理対象に適用して、積（+1×d1）をとる処理であると捉えることができる。
【０３０８】
ここで、値維持層１２１が値維持を行うのに用いるカーネル（フィルタ）を、値維持カーネルともいう。
【０３０９】
値維持カーネルは、以上のように、データd1に適用されるフィルタ係数が+1の、１個のフィルタ係数を有するカーネルであると捉える他、例えば、値維持の処理対象と同一サイズの、縦×横×チャネルが3×3×128のカーネルであって、データd1に適用されるフィルタ係数が+1で、他のデータに適用されるフィルタ係数が0の、値維持の処理対象と同一サイズのフィルタ係数を有するカーネルであると捉えることもできる。
【０３１０】
以上のように、値維持の処理を、値維持カーネルの適用と捉える場合には、値維持層１２１では、畳み込み層１１１からの層入力データとしての(128,32,32)のマップに対して、3×3×128の値維持カーネルがスライドしながら適用される。
【０３１１】
すなわち、値維持層１２１は、例えば、畳み込み層１１１が出力する(128,32,32)のマップの、全チャネルの同一位置の画素を、順次、注目画素に設定し、(128,32,32)のマップにおいて、注目画素を基準とする所定の位置、すなわち、例えば、注目画素の位置を中心とする、縦×横×チャネルが3×3×128の直方体状の範囲（値維持カーネルの縦×横×チャネルと同一の範囲）を、値維持の処理対象に設定する。
【０３１２】
そして、(128,32,32)のマップのうちの、値維持の処理対象内の3×3×128の各データ（画素値）と、3×3×128の値維持カーネルとしてのフィルタのフィルタ係数との積の演算、又は、積和演算が行われ、その積の演算、又は、積和演算の結果が、注目画素についての値維持の結果として求められる。
【０３１３】
値維持層１２１では、その後、まだ注目画素に設定されていない画素を、注目画素に新たに設定して、同様の処理が繰り返され、これにより、値維持カーネルが、注目画素の設定に応じてスライドされながら、層入力データとしてのマップに適用される。
【０３１４】
なお、図１３に示すように、２値算残層１１２と値維持増１２１とが並列に配置される場合、２値演算層１１２が有する２値演算カーネルGの数（種類数）、及び、値維持層１２１が有する値維持カーネルの数としては、その２値算カーネルGの数と、値維持カーネルの数との加算値が、直後の上位層である隠れ層１０５が層入力データとして受け付けるマップのチャネルの数に等しくなる数が採用される。
【０３１５】
例えば、隠れ層１０５が(128,32,32)のマップを層入力データとして受け付け、２値演算層１１２が有する２値演算カーネルGの数が、１以上１２８未満のL種類である場合、値維持層１２１は、128-L種類の値維持カーネルを有する。
【０３１６】
この場合、値維持層１２１の128-L種類の値維持カーネルの適用により得られる128-Lチャネルのマップは、隠れ層１０５が受け付ける(128,32,32)のマップの一部のチャネルのマップ（隠れ層１０５への層入力データ）として、隠れ層１０５に出力される。また、２値演算層１１２のL種類の２値演算カーネルGの適用により得られるLチャネルのマップは、隠れ層１０５が受け付ける(128,32,32)のマップの残りのチャネルのマップとして、隠れ層１０５に出力される。
【０３１７】
ここで、２値算残層１１２、及び、値維持層１２１は、縦×横が同一のサイズのマップを出力することができる。
【０３１８】
また、値維持カーネルにおいて、ある画素を注目画素として設定される処理対象と、他の画素を注目画素として設定される処理対象とでは、処理対象において、同一の位置の値（データ）を、値維持の対象とすることもできるし、異なる位置の値を、値維持の対象とすることができる。
【０３１９】
すなわち、ある画素を注目画素として設定される処理対象については、その処理対象における位置P1の値を、値維持の対象とし、他の画素を注目画素として設定される処理対象についても、その処理対象における位置P1の値を、値維持の対象とすることができる。
【０３２０】
また、ある画素を注目画素として設定される処理対象については、その処理対象における位置P1の値を、値維持の対象とし、他の画素を注目画素として設定される処理対象については、その処理対象における、位置P1とは異なる位置P2の値を、値維持の対象とすることができる。
【０３２１】
この場合、スライドしながら適用される値維持カーネルで値維持の対象となる値の位置が、処理対象において変化することになる。
【０３２２】
なお、２値演算層１１２では、畳み込み層１１１が出力するマップにおいて、２値演算カーネルGが適用される範囲が、２値演算の処理対象となり、値維持層１２１では、畳み込み層１１１が出力するマップにおいて、値維持カーネルが適用される範囲が、値維持の処理対象となる。
【０３２３】
上述したように、値維持の処理対象としての直方体状の範囲の縦×横のサイズとしては、２値演算層１１２の２値演算カーネルGの縦×横と同一のサイズや、異なるサイズを採用することができるが、このことは、値維持カーネルの縦×横のサイズとして、２値演算カーネルGの縦×横と同一のサイズや、異なるサイズを採用することができることを意味する。
【０３２４】
＜値維持層１２１の処理＞
【０３２５】
図１４は、値維持層１２１の値維持の処理の例を説明する図である。
【０３２６】
図１４において、マップxは、値維持層１２１に対する層入力データxである。マップxは、図８の場合と同様に、(c(in),M,N)のマップ、すなわち、縦×横がM×Nの、c(in)チャネルの画像になっており、c(in)チャネルのマップx(0),x(1),...,x(c(in)-1)から構成される。
【０３２７】
また、図１４において、マップyは、値維持層１２１が出力する層出力データyである。マップyは、図８の場合と同様に、(k(out),M,N)のマップ、すなわち、縦×横がM×Nの、k(out)チャネルの画像になっており、k(out)チャネルのマップy(0),y(1),...,y(k(out)-1)から構成される。
【０３２８】
値維持層１２１は、縦×横×チャネルがm×n×c(in)の値維持カーネルHを、k(out)個だけ有する。ここで、1<=m<=M、及び、1<=n<=N、並びに、1<m×n<=M×Nである。
【０３２９】
値維持層１２１は、k(out)個の値維持カーネルHのうちの、k+1番目の値維持カーネルH(k)を、マップxに適用し、チャネル#kのマップy(k)を求める。
【０３３０】
すなわち、値維持層１２１は、マップxの、全チャネルの同一位置の画素を、順次、注目画素に設定し、マップxにおいて、例えば、注目画素の位置を中心とする、縦×横×チャネルがm×n×c(in)の直方体状の範囲を、値維持の処理対象に設定する。
【０３３１】
そして、値維持層１２１は、マップxのうちの、注目画素に対して設定した処理対象に対して、k+1番目の値維持カーネルH(k)を適用し、処理対象の中の１個のデータの値を取得する。
【０３３２】
値維持カーネルH(k)を適用した処理対象が、縦方向にi番目で、横方向にj番目の処理対象である場合、値維持カーネルH(k)を適用して取得された値は、チャネル#kのマップy(k)の位置(i,j)のデータ（画素値）yij(k)となる。
【０３３３】
図１５は、値維持カーネルH(k)が処理対象に適用される様子を示す図である。
【０３３４】
図１４で説明したように、値維持層１２１は、縦×横×チャネルがm×n×c(in)の値維持カーネルHを、k(out)個だけ有する。
【０３３５】
ここで、k(out)個の値維持カーネルHを、H(0),H(1),...,H(k(out)-1)と表す。
【０３３６】
値維持カーネルH(k)は、c(in)チャネルのマップx(0),x(1),...,x(c(in)-1)にそれぞれ適用されるc(in)チャネルの値維持カーネルH(k,0),H(k,1),...,H(k,c(in)-1)から構成される。
【０３３７】
値維持層１２１では、(c(in),M,N)のマップxに対して、m×n×c(in)の値維持カーネルH(k)をスライドしながら適用することにより、マップxにおいて、値維持カーネルH(k)が適用される、縦×横×チャネルがm×n×c(in)の処理対象の中の１個のデータの値が取得され、その取得された値からなるチャネル#kのマップy(k)が生成される。
【０３３８】
なお、図３の場合と同様に、m×n×c(in)の値維持カーネルH(k)、及び、その値維持カーネルH(k)が適用されるマップxの空間方向（i及びjの方向）の縦×横がm×nの範囲については、所定の位置としての、例えば、そのm×nの範囲の左上の位置を基準とする縦方向及び横方向の位置を、それぞれs及びtで表す。
【０３３９】
また、値維持カーネルH(k)を、マップxに適用するにあたっては、マップxにパディングを行うこととし、図３で説明したように、マップxの境界から縦方向にパディングされるデータの数をpと表すとともに、横方向にパディングされるデータの数をqと表すこととする。p=q=0とすることで、パディングは、なしにすることができる。
【０３４０】
ここで、図１３で説明したように、値維持の処理は、例えば、１つのデータd1に適用されるフィルタ係数が+1の、１個だけのフィルタ係数を有する値維持カーネルを、値維持の処理対象に適用して、積（+1×d1）をとる処理であると捉えることができる。
【０３４１】
いま、値維持カーネルH(k)のフィルタ係数の+1が積算されるデータd1の、処理対象内のチャネル方向、縦、横の位置を(c,s,t)を、(c0(k),s0(k),t0(k))と表すこととする。
【０３４２】
値維持層１２１において、マップxに値維持カーネルHを適用して、値維持の処理を行い、マップyを求める順伝播は、式（６）で表される。
【０３４３】
【数６】
2018163790.tif 000008
・・・（６）
【０３４４】
また、逆伝播は、式（７）で表される。
【０３４５】
【数７】
2018163790.tif 000009
・・・（７）
【０３４６】
式（７）の∂E／∂xij(c)は、NN１２０の学習時に、値維持層１２１の直前の下位層、すなわち、図１３では、畳み込み層１１１に逆伝播する誤差情報である。
【０３４７】
ここで、値維持層１２１の層出力データyij(k)は、値維持層１２１の直後の上位層である隠れ層１０５の層入力データxij(c)となる。
【０３４８】
したがって、式（７）右辺の∂E／∂y(i+p-s0(k))(j+q-t0(k))(k)は、誤差Eの、値維持層１２１の層出力データy(i+p-s0(k))(j+q-t0(k))(k)での偏微分を表すが、隠れ層１０５で得られる∂E／∂xij(c)と等価であり、隠れ層１０５から値維持層１２１に逆伝播されてくる誤差情報である。
【０３４９】
値維持層１２１において、式（７）の誤差情報∂E／∂xij(c)は、上位層である隠れ層１０５からの誤差情報∂E／∂xij(c)を誤差情報∂E／∂y(i+p-s0(k))(j+q-t0(k))(k)として用いて求められる。
【０３５０】
また、式（７）において、サメーション（Σ）の範囲を規定するk0(c)は、マップxの処理対象における位置(c0(k), s0(k), t0(k))のデータxs0(k)t0(k)(c0(k))を用いて求められたマップy(k)のデータyij(k)のkの集合を表す。
【０３５１】
式（７）のサメーションは、k0(c)に属するkについてとられる。
【０３５２】
なお、値維持の処理を行う値維持層１２１は、畳み込み層の部分集合であるため、値維持層１２１の順伝播及び逆伝播は、式（６）及び式（７）で表すことができる他、畳み込み層の順伝播及び逆伝播を表す式（１）及び式（３）で表すこともできる。
【０３５３】
すなわち、値維持層１２１の値維持カーネルは、図１３で説明したように、１個のデータd1に適用されるフィルタ係数が+1で、他のデータに適用されるフィルタ係数が0の、値維持の処理対象と同一サイズのフィルタ係数を有するカーネルであると捉えることができる。
【０３５４】
したがって、式（１）及び式（３）は、１個のデータd1に適用されるフィルタ係数wst(k,c)を+1とし、他のデータに適用されるフィルタ係数wst(k,c)を0とすることにより、値維持層１２１の順伝播及び逆伝播を表す。
【０３５５】
値維持層１２１の順伝播及び逆伝播を、式（１）及び式（３）、又は、式（６）及び式（７）のいずれで実現するかは、値維持層１２１を実現するハードウェアやソフトウェアの仕様等により決定することができる。
【０３５６】
なお、値維持層１２１は、畳み込み層の部分集合である他、LCLの部分集合でもあり、全結合層の部分集合でもある。したがって、値維持層１２１の順伝播及び逆伝播は、畳み込み層の順伝播及び逆伝播を表す式（１）及び式（３）の他、LCLの順伝播及び逆伝播を表す式や、全結合層の順伝播及び逆伝播を表す式を用いて表すこともできる。
【０３５７】
また、式（６）及び式（７）は、バイアス項が含まれていないが、値維持層１２１の順伝播及び逆伝播は、バイアス項を含む式で表すことができる。
【０３５８】
図１３のNN１２０では、畳み込み層１１１において、1×1の畳み込みが行われ、その畳み込みの結果得られるマップに対し、２値演算層１１２において、縦×横がm×nの２値演算カーネルが適用されるとともに、値維持層１２１において、縦×横がm×nの値維持カーネルが適用される。
【０３５９】
以上のようなNN１２０によれば、図７のNN１１０の場合と同様に、m×nの畳み込みと同様の性能の畳み込みを、パラメータ数としての畳み込みカーネルFのフィルタ係数w00(k,c)の数、及び、計算量を1／(m×n)に削減して行うことができる。さらに、NN１２０によれば、２値演算層１１２及び値維持層１２１の後段の層に、２個のデータの値の差分の情報と、データの絶対的な値の情報とが伝播され、その結果、値維持層１２１が設けられていない場合に比較して、対象物を検出する検出性能等が向上させることができる。
【０３６０】
なお、図１３では、２値演算層１１２と値維持層１２１とを並列に設けることとしたが、その他、例えば、畳み込み層と２値演算層１１２とを並列に設けることや、畳み込み層と２値演算層１１２と値維持層１２１とを並列に設けることができる。
【０３６１】
＜NN生成装置の構成例＞
【０３６２】
図１６は、本技術を適用したNNを生成するNN生成装置の構成例を示すブロック図である。
【０３６３】
図１６のNN生成装置は、例えば、図１のPC１０がNN生成装置としてのプログラムを実行することにより、機能的に実現することができる。
【０３６４】
図１６において、NN生成装置は、ライブラリ取得部２０１、生成部２０２、及び、ユーザI/F(Interface)２０３を有する。
【０３６５】
ライブラリ取得部２０１は、例えば、インターネットその他のストレージから、NNの様々な層として機能する関数の関数ライブラリを取得する。
【０３６６】
生成部２０２は、ユーザI/F２０３の操作、すなわち、ユーザI/F２０３から供給される、ユーザの操作に対応する操作信号に応じて、ライブラリ取得部２０１が取得した関数ライブラリから、NNの層としての関数を取得し、その層から構成されるNNを生成する。
【０３６７】
ユーザI/F２０３は、タッチパネル等で構成され、生成部２０２が生成したNNを、グラフ構造で表示する。また、ユーザの操作を受け付け、対応する操作信号を、生成部２０２に供給する。
【０３６８】
以上のように構成されるNN生成装置では、生成部２０２が、ユーザI/F２０３の操作に応じ、ライブラリ取得部２０１が取得したNNの層としての関数ライブラリを用いて、例えば、２値演算層１１２等を含むNNを生成する。
【０３６９】
生成部２０２が生成したNNは、グラフ構造の形で、ユーザI/F２０３で表示される。
【０３７０】
図１７は、ユーザI/F２０３の表示例を示す図である。
【０３７１】
ユーザI/F２０３の表示領域には、例えば、層選択部２１１、及び、グラフ構造表示部２１２が表示される。
【０３７２】
層選択部２１１には、NNを構成する層として選択可能な層を表すアイコンである層アイコンが表示される。図１７では、入力層、出力層、畳み込み層、２値演算層、値維持層等の層アイコンが表示されている。
【０３７３】
グラフ構造表示部２１２には、生成部２０２が生成したNNがグラフ構造で表示される。
【０３７４】
例えば、ユーザが、層選択部２１１から、２値演算層等の所望の層の層アイコンを選択し、その層アイコンと、グラフ構造表示部２１２に既に表示されている他の層アイコンとを結合するように、ユーザI/F２０３を操作すると、生成部２０２は、ユーザが選択した層アイコンが表す層と、他の層アイコンが表す層とを結合したNNを生成し、グラフ構造表示部２１２に表示させる。
【０３７５】
その他、ユーザI/F２０３が、例えば、グラフ構造表示部２１２に表示された層アイコンの削除や移動、層アイコンどうしの結合、結合の解除等を行うように操作されると、生成部２０２は、ユーザI/F２０３の操作に応じて、層アイコンの削除や移動、層アイコンどうしの結合、結合の解除等を行った後のNNを生成し直し、グラフ構造表示部２１２に表示し直す。
【０３７６】
したがって、ユーザは、容易に、様々なネットワーク構成のNNを構成することができる。
【０３７７】
また、図１７では、層選択部２１１に、畳み込み層、２値演算層、値維持層の層アイコンが表示されるので、そのような畳み込み層や、２値演算層、値維持層を含むNN１００や、NN１１０、NN１２０のようなNNを、容易に構成することができる。
【０３７８】
生成部２０２が生成するNNの実体は、例えば、図１のPC１０が実行可能なプログラムであり、そのプログラムを、PC１０に実行させることで、PC１０を、NN１００や、NN１１０、NN１２０のようなNNとして機能させることができる。
【０３７９】
なお、ユーザI/F２０３には、層アイコンの他、活性化関数を指定するアイコンや、２値演算カーネルその他のカーネルの縦×横のサイズを指定するアイコン、２値演算の対象となる２値の位置を選択する方法を選択するアイコン、値維持の処理の対象となる値の位置を選択する方法を選択するアイコン、その他、ユーザによるNNの構成を補助するアイコン等を表示することができる。
【０３８０】
図１８は、生成部２０２が生成するNNの実体としてのプログラムの例を示す図である。
【０３８１】
図１８において、1行目のxは、入力層が出力する層出力データを表す。
【０３８２】
PF.Convolution(x, outmaps=128, kernel=(1,1))は、xを対象として畳み込みを行う畳み込み層としての関数を表す。PF.Convolution(x, outmaps=128, kernel=(1,1))において、kernel=(1,1)は、畳み込みカーネルの縦×横が1×1であることを表し、outmaps=128は、畳み込み層から出力されるマップ（層出力データ）のチャネル数が128チャネルであることを表す。
【０３８３】
図１８において、畳み込み層としてのPF.Convolution(x, outmaps=128, kernel=(1,1))で得られる128チャネルのマップは、xにセットされる。
【０３８４】
PF.PixDiff(x, outmaps=128, rp_ratio=0.1)は、xを対象として２値演算としての差分演算を行う２値演算層、及び、値維持の処理を行う値維持層としての関数を表す。PF.PixDiff(x, outmaps=128, rp_ratio=0.1)において、outmaps=128は、２値演算層及び値維持層から出力されるマップ（層出力データ）のチャネル数の合計が128チャネルであることを表し、rp_ratio=0.1は、その128チャネルの10%を、値維持層の出力とし、残りを、２値演算層の出力とすることを表す。
【０３８５】
なお、本実施の形態では、NN１１０及び１２０を、畳み込み層１１１及び２値演算層１１２の両方を含む形で構成することとしたが、NN１１０及び１２０は、畳み込み層１１１を含めずに構成することができる。すなわち、２値演算層１１２は、NNの層としては、新しい数学的な特性を有する層であり、畳み込み層１１１と組み合わせずに、単独で、NNの層として用いることができる。
【０３８６】
ここで、本明細書において、コンピュータ（PC１０）がプログラムに従って行う処理は、必ずしもフローチャートとして記載された順序に沿って時系列に行われる必要はない。すなわち、コンピュータがプログラムに従って行う処理は、並列的あるいは個別に実行される処理（例えば、並列処理あるいはオブジェクトによる処理）も含む。
【０３８７】
また、プログラムは、１のコンピュータ（プロセッサ）により処理されるものであっても良いし、複数のコンピュータによって分散処理されるものであっても良い。さらに、プログラムは、遠方のコンピュータに転送されて実行されるものであっても良い。
【０３８８】
さらに、本明細書において、システムとは、複数の構成要素（装置、モジュール（部品）等）の集合を意味し、すべての構成要素が同一筐体中にあるか否かは問わない。したがって、別個の筐体に収納され、ネットワークを介して接続されている複数の装置、及び、１つの筐体の中に複数のモジュールが収納されている１つの装置は、いずれも、システムである。
【０３８９】
なお、本技術の実施の形態は、上述した実施の形態に限定されるものではなく、本技術の要旨を逸脱しない範囲において種々の変更が可能である。
【０３９０】
例えば、本技術は、１つの機能をネットワークを介して複数の装置で分担、共同して処理するクラウドコンピューティングの構成をとることができる。
【０３９１】
また、上述のフローチャートで説明した各ステップは、１つの装置で実行する他、複数の装置で分担して実行することができる。
【０３９２】
さらに、１つのステップに複数の処理が含まれる場合には、その１つのステップに含まれる複数の処理は、１つの装置で実行する他、複数の装置で分担して実行することができる。
【０３９３】
また、本明細書に記載された効果はあくまで例示であって限定されるものではなく、他の効果があってもよい。
【０３９４】
なお、本技術は、以下のように構成することができる。
【０３９５】
＜１＞
ニューラルネットワークの層を構成し、前記層に入力される層入力データのうちの２値を用いた２値演算を行い、前記２値演算の結果を、前記層から出力される層出力データとして出力する
情報処理装置。
＜２＞
前記層入力データに対して、前記２値演算を行う２値演算カーネルを適用することにより、前記２値演算を行う
＜１＞に記載の情報処理装置。
＜３＞
前記層入力データに対して、前記２値演算カーネルをスライドしながら適用することにより、前記２値演算を行う
＜２＞に記載の情報処理装置。
＜４＞
１のチャネルの層出力データを得る場合と、他の１のチャネルの層出力データを得る場合とで、空間方向のサイズが異なる前記２値演算カーネルを適用する
＜２＞又は＜３＞に記載の情報処理装置。
＜５＞
上位層から逆伝播される、前記ニューラルネットワークの出力層から出力される出力データの誤差に関する誤差情報を取得し、
前記上位層からの前記誤差情報を用いて、下位層に逆伝播する誤差情報を求めて、前記下位層に逆伝播する
＜１＞ないし＜４＞のいずれかに記載の情報処理装置。
＜６＞
前記２値演算は、２値の差分である
＜１＞ないし＜５＞のいずれかに記載の情報処理装置。
＜７＞
前記２値演算を行う２値演算カーネルよりも空間方向のサイズが小さい畳み込みカーネルで畳み込みを行う畳み込み層の直後の上位層に配置される
＜１＞ないし＜６＞のいずれかに記載の情報処理装置。
＜８＞
前記畳み込み層は、縦×横が1×1の前記畳み込みカーネルを適用する1×1の畳み込みを行い、
前記畳み込み層の出力に対して、２値の差分を求める前記２値演算を行う前記２値演算カーネルを適用する
＜７＞に記載の情報処理装置。
＜９＞
下位層の出力の絶対的な値を維持して出力する値維持層と並列に配置され、
前記値維持層の出力は、上位層への複数チャネルの層入力データのうちの、一部のチャネルの層入力データとして、前記上位層に出力され、
前記２値演算の結果を、残りのチャネルの層入力データとして、前記上位層に出力する
＜１＞ないし＜８＞のいずれかに記載の情報処理装置。
＜１０＞
前記２値演算を行うハードウェアを備える
＜１＞ないし＜９＞のいずれかに記載の情報処理装置。
＜１１＞
層に入力される層入力データのうちの２値を用いた２値演算を行い、前記２値演算の結果を、前記層から出力される層出力データとして出力する前記層である２値演算層を含むニューラルネットワークを生成する生成部を備える
情報処理装置。
＜１２＞
前記生成部は、ユーザが選択する層で構成される前記ニューラルネットワークを生成する
＜１１＞に記載の情報処理装置。
＜１３＞
前記ニューラルネットワークを、グラフ構造で表示するユーザI/Fをさらに備える
＜１１＞又は＜１２＞に記載の情報処理装置。
【符号の説明】
【０３９６】
１０  PC，  １１  バス，  １２  CPU，  １３  ROM，  １４  RAM，  １５  ハードディスク，  １６  出力部，  １７  入力部，  １８  通信部，  １９  ドライブ，  ２０  入出力インタフェース，  ２１  リムーバブル記録媒体，  １００  NN，  １０１  入力層，  １０２  NN，  １０３  隠れ層，  １０４  畳み込み層，  １０５  隠れ層，  １０６  NN，  １０７  出力層，  １１１  畳み込み層，  １１２  ２値演算層，  １２１  値維持層，  ２０１  ライブラリ取得部，  ２０２  生成部，  ２０３  ユーザI/F，  ２１１  層選択部，  ２１２  グラフ構造表示部
【図１】
2018163790.tif 000010
【図２】
2018163790.tif 000011
【図３】
2018163790.tif 000012
【図４】
2018163790.tif 000013
【図５】
2018163790.tif 000014
【図６】
2018163790.tif 000015
【図７】
2018163790.tif 000016
【図８】
2018163790.tif 000017
【図９】
2018163790.tif 000018
【図１０】
2018163790.tif 000019
【図１１】
2018163790.tif 000020
【図１２】
2018163790.tif 000021
【図１３】
2018163790.tif 000022
【図１４】
2018163790.tif 000023
【図１５】
2018163790.tif 000024
【図１６】
2018163790.tif 000025
【図１７】
2018163790.tif 000026
【図１８】
2018163790.tif 000027
【国際調査報告】
2018163790.tif 000028
2018163790.tif 000029