(57)【特許請求の範囲】
【請求項１】
入力データに対してニューラルネットワークの演算を行うことで、人工知能機能を実現する演算処理部を備えた情報処理装置において、
前記演算処理部は、前記ニューラルネットワークにおけるノード間を結ぶネットワークの計算のための重み行列の行数あるいは列数を、入力データあるいは出力データによって定められる行数あるいは列数から削減した行数あるいは列数を用意し、
複数の層で演算する場合における少なくとも一部の層において、削減した行数あるいは列数の重み成分と、入力データのベクトルの一部の要素との積和を取り、組み合わせがすべて異なる方程式を構成することを特徴とする
情報処理装置。
【請求項２】
入力データに対してニューラルネットワークの演算を行うことで、人工知能機能を実現する演算処理部を備えた情報処理装置において、
前記演算処理部は、前記ニューラルネットワークにおけるノード間を結ぶネットワークの計算のための重み行列の行数あるいは列数を、入力データあるいは出力データによって定められる行数あるいは列数から削減した行数あるいは列数を用意し、
複数の層で演算する場合における少なくとも一部の層において、削減した行数あるいは列数の重み成分を、入力データのベクトルと掛け算をし、その掛け算をした結果の行列を、一定の列数毎あるいは行数毎の部分行列に分割し、分割して得られた部分行列毎に行列の和を行うことを特徴とする
情報処理装置。
【請求項３】
前記部分行列毎に任意の置換の操作を加えることを特徴とする
請求項２に記載の情報処理装置。
【請求項４】
入力データに対してニューラルネットワークの演算を行うことで、人工知能機能を実現する演算処理部を備えた情報処理装置において、
前記演算処理部は、前記ニューラルネットワークにおけるノード間を結ぶネットワークの計算のための重み行列の行数あるいは列数を、入力データあるいは出力データによって定められる行数あるいは列数から削減した行数あるいは列数を用意し、
複数の層で演算する場合における少なくとも一部の層において、削減した行数あるいは列数の重み成分と、入力データのベクトルの一部の要素との積和を取り、組み合わせがすべて異なる方程式を構成することを特徴とする
情報処理方法。
【請求項５】
入力データに対してニューラルネットワークの演算を行うことで、人工知能機能を実現する演算処理方法において、
複数の層で演算する場合における少なくとも一部の層での演算時のステップとして、
前記ニューラルネットワークにおけるノード間を結ぶネットワークの計算のための重み行列の行数あるいは列数を、入力データあるいは出力データによって定められる行数あるいは列数から削減した行数あるいは列数とする削減ステップと、
前記削減ステップで削減した行数あるいは列数の重み成分を、入力データのベクトルと掛け算をする掛け算ステップと、
前記掛け算ステップで得た結果の行列を、一定の列数毎あるいは行数毎の部分行列に分割する分割ステップと、
前記分割ステップで分割して得られた部分行列毎に行列の和を行う和演算ステップと、を含むことを特徴とする
情報処理方法。
【請求項６】
前記部分行列毎に任意の置換の操作を加えることを特徴とする
請求項５に記載の情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、人工知能に用いるニューラルネットワークの演算を行う情報処理装置及び情報処理方法に関し、特にニューラルネットワークの演算を行う際の演算量を削減する技術に関する。
【背景技術】
【０００２】
ニューラルネットワーク（以下「ＮＮ」と称する）において特に認識性能や予測性能が高い、深い層構造をもつディープニューラルネットワーク（以下「ＤＮＮ」と称する）、畳み込みニューラルネットワーク（以下「ＣＮＮ」と称する）等はインターネットサービスやクラウド経由・機器搭載等の手段によりスマートフォン、自動車機器、家電機器、工場用機器、ロボット等へのアプリケーションとして提供されている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Coates, Adam, Huval, Brody, Wang, Tao, Wu, David,  Catanzaro, Bryan, and Andrew, Ng. "Deep learning with cots hpc systems." In Proceedings of The 30th International Conference on Machine Learning, pp. 1337-1345, 2013.
【非特許文献２】R. Vershynin, On the role of sparsity in Compressed Sensing and Random Matrix Theory, CAMSAP'09 (3rd International Workshop on Computational Advances in Multi-Sensor Adaptive Processing), 2009, 189--192.
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の人工知能機能の実現として多く採用されているＤＮＮやＣＮＮ等のＮＮは、演算量が大きく、計算機資源に大規模なサーバを用意したり、グラフィックプロセッシングユニット（以下「ＧＰＵ」と称する）等の追加のユニットを搭載する必要がある。このため、知能用設備の導入や機器への実装の際に高価になったり、大量の消費電力が必要になるという問題がある。【０００５】
本発明は上記事情に鑑みて成されたものであり、ＤＮＮやＣＮＮ等のＮＮの演算量を削減することで、計算機資源を大幅に削減し、小型化や低消費電力化を可能とし、汎用機器に搭載できる人工知能の機能やサービスを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の情報処理装置は、入力データに対してニューラルネットワークの演算を行うことで、人工知能機能を実現する演算処理部を備えた情報処理装置において、
演算処理部は、ニューラルネットワークにおけるノード間を結ぶネットワークの計算のための重み行列の行数あるいは列数を、入力データあるいは出力データによって定められる行数あるいは列数から削減した行数あるいは列数を用意し、
複数の層で演算する場合における少なくとも一部の層において、削減した行数あるいは列数の重み成分を、入力データのベクトルと掛け算をし、その掛け算をした結果の行列を、一定の列数毎あるいは行数毎の部分行列に分割し、分割して得られた部分行列毎に行列の和を行うことを特徴とする。
【０００７】
また本発明の情報処理方法は、入力データに対してニューラルネットワークの演算を行うことで、人工知能機能を実現する演算処理方法において、
複数の層で演算する場合における少なくとも一部の層での演算時のステップとして、
ニューラルネットワークにおけるノード間を結ぶネットワークの計算のための重み行列の行数あるいは列数を、入力データあるいは出力データによって定められる行数あるいは列数から削減した行数あるいは列数とする削減ステップと、
削減ステップで削減した行数あるいは列数の重み成分を、入力データのベクトルと掛け算をする掛け算ステップと、
掛け算ステップで得た結果の行列を、一定の列数毎あるいは行数毎の部分行列に分割する分割ステップと、
分割ステップで分割して得られた部分行列毎に行列の和を行う和演算ステップと、を含むことを特徴とする。
【０００８】
本発明によれば、人工知能機能を実現する計算機資源を大幅に削減できるため、計算機に占有されるスペースや価格、消費電力を削減できるようになる。したがって、人工知能機能を機器に搭載する際に、低価格のＣＰＵや汎用のＦＰＧＡ(field-programable gate array)やＬＳＩを使用してニューラルネットワークの演算を行うことが可能になり、小型、低価格化、低消費電力、高速化を実現できる。
【図面の簡単な説明】
【０００９】
【図１】ＤＮＮの構造の例を示す図である。
【図２】自己符号化器におけるプレトレーニング（各層ごとに行う）の例を示す図である。
【図３】本発明による手書き数字の認識例を示す図である。
【図４】ＤＮＮの中間ノードのベクトルが得られる様子を示す図である。
【図５】本発明の第１の実施形態例による圧縮状態の概要を示す図である。
【図６】本発明の第１の実施形態例による分割状態の概要を示す図である。
【図７】本発明の第１の実施形態例によるシフトを行う計算例を示す図である。
【図８】図７の計算を行う回路構成例を示す図である。
【図９】本発明の第１の実施形態例によるランダムな置換を行う計算例を示す図である。
【図１０】図９の計算を行う回路構成例を示す図である。
【図１１】従来のＤＮＮの処理の流れ（ステップＳ１１〜Ｓ２０）と本発明の第１の実施形態例による処理の流れ（ステップＳ２１〜Ｓ３１）を比較して示すフローチャートである。
【図１２】本発明の第１の実施形態例による圧縮率による正解率の変化例を示す特性図である。
【図１３】ＣＮＮの構造の例を示す図である。
【図１４】本発明の第２の実施形態例による圧縮状態の概要を示す図である。
【図１５】本発明の第２の実施形態例による圧縮状態の具体的な例を示す図である。
【図１６】従来の処理（ａ）と本発明の第２の実施形態例による処理（ｂ）を比較して示す図である。
【図１７】従来の処理（ａ）と本発明の第２の実施形態例による処理（ｂ）を比較して示す図である。
【図１８】従来のＣＮＮの処理の流れ（ステップＳ４１〜Ｓ５１）と本発明の第２の実施形態例による処理の流れ（ステップＳ６１〜Ｓ７３）を比較して示すフローチャートである。
【図１９】本発明の実施形態例の変形例による処理を示す図である。
【図２０】本発明の実施形態例を適用するハードウェア構成の例を示すブロック図である。
【発明を実施するための形態】
【００１０】
本発明に係る第１の実施形態例について、図１〜図１２を参照して説明する。第１の実施形態例は、ＤＮＮ（ディープニューラルネットワーク）に適用した例である。
【００１１】
図１に基づきＤＮＮの構造を定義する。まず入力信号を、Ｎ次元ベクトル
0006528349.tif 000002
とする。尚、(*)Ｔは行列の転置を示している。ｌ＝１，２，３，・・・という層の索引を示すｌを用いて多層構造を表現する。また
0006528349.tif 000003
は実数を意味する。
ベクトル
0006528349.tif 000004
を
0006528349.tif 000005
として計算するｌ番目の層の重み係数の和のベクトルとする。
【００１２】
ここで
0006528349.tif 000006
は重み行列であり、
0006528349.tif 000007
はバイアスベクトルである。
【００１３】
与えられたｕｊ（ｌ）に対して活性化関数ｆが次のｌ＋１層の入力ベクトルｘｊ（ｌ＋１）をノードごとの計算ｘｊ（ｌ＋１）＝ｆ（ｕｊ（ｌ））を実行することにより生成する。
説明を簡易化するために、以降は、ｂｊ（ｌ）＝０とｆ（ｕ）＝ｕとして説明を進める。
【００１４】
一般にＤＮＮは、識別用の教師あり学習の前に、積層自己符号化器を用いて教師無し学習によるプレトレーニングを行う。図２に示す様に、この自己符号化器では、高次元の入力信号の主要な情報を獲得し低次元の特徴データに変換することを目的としている。各層では自己符号化器を使って復元したデータと入力データの相違を最小化するように学習を行う。この学習は下位層から上位層へ層ごとに勾配降下法や誤差逆伝搬法等を用いて実施される。
【００１５】
ｘ（ｌ＋１）＝Ｗ（ｌ）ｘ（ｌ）で示されるネットワーク層に対して、重み行列
0006528349.tif 000008
を使って
0006528349.tif 000009
を計算することによりｘ（ｌ＋１）から復元ベクトル
0006528349.tif 000010
を生成する。
自己符号化器の学習時には、
0006528349.tif 000011
を求める最適化問題を解くことにより、重み行列
0006528349.tif 000012
と
0006528349.tif 000013
を導出する。ここでは、ｘ（ｌ）のベクトルの長さをＪ（ｌ）とする。
【００１６】
一般にＪ（ｌ＋１）≦Ｊ（ｌ）である為、自己符号化器はデータの次元を削減することになる。
つまり次元圧縮された信号ｘ（ｌ＋１）からＷ（ｌ）を用いて元信号ｘ（ｌ）を復元する問題とみなすことができる。
逆に言うと、重み行列Ｗ（ｌ）が次元圧縮された信号ｘ（ｌ＋１）から元信号ｘ（ｌ）を復元する特性を有していればよいことになる。
例えば、非特許文献２として示す論文ではＷ（ｌ）にその成分を標準的なガウス分布からランダムに選択した行列で、圧縮次元ベクトルから元信号ベクトルを再生できることを示している。
【００１７】
ここで、図３を参照して、ＤＮＮを手書き数字の認識に適用した例について説明する。
【００１８】
例えば図３に示す様に、手書き数字の「５」をベクトルｘ（１）で表現したとして、ランダムな行列Ｗ（１）と行列の掛け算をして得た次元圧縮されたベクトルｘ（２）を得る。今ベクトルｘ（１）がどんな絵かわからない状態でもベクトルｘ（２）とランダムな行列Ｗ（１）からベクトルｘ（１）が再生でき、結果手書き数字の「５」を再生できることを示している。
【００１９】
一方、重み行列のランダム性を満たす手法は行列の成分をランダムに選択する手法以外にも考えられる。本発明ではこの点に着目した構成法を示す。
この特性を示す重み行列の構成法を以下に示す。
【００２０】
ここでは、一例として図３に示すような手書き数字の認識に用いるＤＮＮで説明する。
入力信号は手書き文字のサイズが２８×２８＝７８４画素だとすると、一層目の入力信号ｘ（１）のベクトルの長さはＮ＝７８４となる。中間層として２層目のノードｘ（２）のベクトルの長さをＭ＝５００とすると、図３に示すように５００×７８４の重み行列Ｗ（１）に入力信号ベクトルｘ（１）をかけて次元圧縮された中間ノードの信号ｘ（２）を得ることになる。
【００２１】
図４にこの際の重み行列Ｗ（１）と入力信号ベクトルｘ（１）との行列計算により、中間ノードのベクトルｘ（２）が得られる様子を示す。
【００２２】
この際、演算量が大きい掛け算の回数はＭ×Ｎ＝５００×７８４＝３９２０００回となる。
図４、図５に本実施形態例のネットワーク圧縮方法を示す。従来のＤＮＮでは各層ごとに入力ベクトル長Ｎ、出力ベクトル長Ｍに対してＭ×Ｎの成分に対する積が必要であり、この積の回数が演算量を増大させる元になっていた。
本実施形態例では、図５に示す様に元々のＭ×Ｎ＝５００×７８４の重み行列をＭ’×Ｎ＝１０×７８４まで圧縮させる方法を示す。
【００２３】
まずは従来例と比べて圧縮した重み行列を用意し、その圧縮した重み行列の下での計算方法を示す。また本発明の計算方法で精度がほとんど落ちない理由を説明し、そのハードウェア構成例とフローチャート例を示す。
この圧縮した重み行列を
0006528349.tif 000014
とする。また、圧縮率をγと表現すると、この圧縮率はγ＝Ｍ’／Ｍ＝１０／５００＝１／５０となる。
この
0006528349.tif 000015
の重み行列を使って下記の計算を行う。
【００２４】
0006528349.tif 000016
【００２５】
ここで、
0006528349.tif 000017
であり、演算子°は、
0006528349.tif 000018
でＡを行列、Ｂをベクトルしたときに、行列Ａのｉ列目の成分とベクトルＢのｉ番目の要素の積を行う演算である。
【００２６】
次に、図６に示すようにM’×N＝10×784の行列
0006528349.tif 000019
を1/γ=50列毎にM’×N’=10×50の行列
0006528349.tif 000020
に以下のように分割する。
【００２７】
0006528349.tif 000021
【００２８】
その上で
0006528349.tif 000022
に対して特定のルールで置換またはランダムに置換した行列
0006528349.tif 000023
との行列の和を下記のように実行する。ここで置換とは行列の任意の２要素の場所を互いに交換する、という操作を任意の回数行うことを意味する。
0006528349.tif 000024
この結果、図６の右端に示すようなM’×N’=10×50の行列
0006528349.tif 000025
が出力される。
【００２９】
この行列
0006528349.tif 000026
をベクトルに変換し
0006528349.tif 000027
を構成する。上記例では１０×５０の行列Ｘ（２）からベクトル長５００のｘ（2）が生成される。
【００３０】
従って５００×７８４の重み行列Ｗ（１）を使った計算と同じ７８４次元の入力信号から５００次元の中間ノードの信号を出力する演算が実行できる。特に置換した行列
0006528349.tif 000028
の組み合わせによる行列の和を使うことによりランダム行列に近い特性を実現できる。
【００３１】
結果認識性能や予測性能は、従来の方法と本発明の方法では僅かな性能差に抑えられる。
一方、本実施形態例では演算量が大きい掛け算の回数は、M′×N＝10×784＝7840回となり、従来のM×N＝500×784＝392000回に比べてγ=1/50まで下げられる効果がある。
【００３２】
例えば元々６×９の重み行列Ｗ（１）で入力信号ベクトルｘ（１）のベクトル長を９、出力ベクトルｘ（２）のベクトル長６のものを対象とする。例えば
0006528349.tif 000029
という計算を行う。一般に重みは、ｗｉ，ｊ∈［−１，１］の範囲で設定される。ここで重みの分布の分散値が大きい場合は、重みが−１や１の値をとる場合が多くなり、学習をする過程においても学習が収束しない勾配消失問題という問題も引き起こす。
【００３３】
例えば上式の１行目と２行目の重みがすべて１になってしまった場合、
0006528349.tif 000030
という形で上式の右辺を見てもわかるように同じ方程式が２個重複して存在してしまい、出力するｘ（２）の１番目の要素と２番目の要素が同じになる為、その要素が１つ減ったことと同じになり、ｘ（２）の情報そのものの欠損が生じてしまう。つまりｘ（２）の要素は本来６個であるが、１番目の要素と２番目の要素が同じになる為、要素５個分の情報に削減される。この計算を行う１つの層で情報の欠損は最終的な識別に用いる情報の欠損につながる為、識別性能を下げる要因になる。一方重みｗｉ，ｊが−１や１の値をとったとしても同じ方程式の発生を最初から回避できる方法を用いれば、ｘ（２）の要素の欠損は防ぐことができ、識別に必要な情報量も維持でき、最終的な識別の精度を下げない効果を得られる。
【００３４】
この観点から、本発明で採った手法は重み行列Ｗ（ｌ）の各行の成分とベクトルｘ（ｌ）のすべての要素の積和をとらず、一部の要素の積和をとり方程式が一致しない組み合わせのルールを作る手段をとることで同じ方程式の発生を回避した。まず、圧縮率に沿って行数を圧縮した重み行列
0006528349.tif 000031
を作り、圧縮率の逆数1/γ毎にＷ（ｌ）を分割し式(1)に示す様に
0006528349.tif 000032
を計算し、その上で
0006528349.tif 000033
に対して特定のルールで置換またはランダムに置換した行列
0006528349.tif 000034
との行列の和を式（２）に示すように実行する。これらの実装はソフトウェア上でも実装可能であるが、ＦＰＧＡ等のハードウェアでの実装も可能である。
【００３５】
具体例としてγ＝１／３の場合を示す。まず行数を６から圧縮後の行数６×γ＝２行とする。次に列数を１／γ＝３列毎に区切り、２×３の重み行列                        
0006528349.tif 000035
を構成し、ベクトル長は1/γ＝３のｘ１（１）、ｘ２（１）、ｘ３（１）を使って、
0006528349.tif 000036
と計算する。
なお、簡易化のために行列の成分およびベクトルの要素の上付き文字(1)の表現は割愛している。
【００３６】
ここで、
0006528349.tif 000037
の２行目を左側に１列巡回シフトする置換をして下記のように
0006528349.tif 000038
とする。
0006528349.tif 000039
また、
0006528349.tif 000040
の２行目を左側に２列巡回シフトする置換をして下記のように
0006528349.tif 000041
とする。
0006528349.tif 000042
結果、
0006528349.tif 000043
は以下のように計算する。
0006528349.tif 000044
なお、簡易化の為、
0006528349.tif 000045
とする。
【００３７】
この手順により、重みｗｉ，ｊが−１や１の値をとったとしても、同じ方程式の発生を最初から回避できている。例えば上記実例においてすべての重みｗｉ，ｊを１としたとしても、
0006528349.tif 000046
となり、重複する方程式は発生しない。また、一つの方程式あたりの積和の数も、式（３）、式（４）で行っていた９回の積、８回の和から、式（５）に示すように、３回の積、２回の和に削減できている。
この手法では、
0006528349.tif 000047
の２行目の成分を左側に１列巡回シフト、
0006528349.tif 000048
の２行目の成分を左側に２列巡回シフトしただけである。このようにシンプルな構造でも同じ方程式の発生は避けることができる。
【００３８】
図７及び図８に、上記計算例のまとめとその計算をハードウェア化した場合の具体的な回路を示す。図７に示す行列の１列巡回シフトと２列巡回シフトを行うハードウェア構成が、図８に示すハードウェアで実現される。
図８中、「○」に「×」を組み合わせた印は掛け算回路を示し、「○」に「＋」を組み合わせた印は加算回路を示す。図８から分かるにように、一度入力ベクトルの値ｘ（１）と重みＷ（１）をレジスタ等にセットすれば、積和が同時に実行可能である。圧縮により回路に必要な積和の回路数とメモリ数も行列の成分の圧縮率に比例して削減できる。
また、
0006528349.tif 000049
から
0006528349.tif 000050
への置換パターンを固定化することにより、図８に示すように接続パターンを固定できハードウェア化が容易になる。
【００３９】
図９及び図１０は、
0006528349.tif 000051
から
0006528349.tif 000052
への置換パターンにランダムな置換を用いる場合を示す。図９に示す行列の１行目と２行目ともにランダムに置換するハードウェア構成が、図１０に示すハードウェアで実現される。この場合にも、置換パターンを固定化することは可能であるためハードウェア化は同様に容易である。
【００４０】
図１１は、本実施形態例の演算処理を実行するフローチャートを、従来のＤＮＮと比較したものである。図１１の左側のステップＳ１１〜Ｓ１９は、従来のＤＮＮ実行時のフローチャートであり、図１１の右側のステップＳ２１〜Ｓ３１は本実施形態例のＤＮＮ実行時のフローチャートである。
【００４１】
従来のＤＮＮでは、画像データなどの入力データは一般に１画素づつのデータの組み合わせをベクトルとして扱い、入力ベクトルｘ（１）として正規化や量子化の前処理が行われる（ステップＳ１１）。その後、図４で説明したように最初の層l=１の重み行列Ｗ（１）とベクトルｘ（１）により行列の掛け算Ｗ（１）ｘ（１）を実施し（ステップＳ１２）、続いて活性化関数ｆを実行して（ステップＳ１３）、次の層ｌ＝２のノードのベクトルｘ（２）を得る。この処理を繰り返し（ステップＳ１４〜Ｓ１６）、例えばｌ＝Ｌ層まで繰り返して（ステップＳ１７〜Ｓ１８）、最終的にSoftmax等の計算を実施して、認識計算を行う（ステップＳ１９）。図１１の例ではｌ＝Ｌ層は圧縮しない行列を用いた方法を示したが、ｌ＝Ｌ層も本発明の圧縮した行列を用いた計算を行ってもよい。更には本発明方法の計算は全体の一部の層のみ適用してもよい。
【００４２】
次に、図１１の右側に示す本実施形態例のＤＮＮ実行時の処理を説明する。
まず、従来例と同様に入力信号の前処理が行われる（ステップＳ２１）。その後、行列計算として説明したように、圧縮した重み行列
0006528349.tif 000053
を用い
0006528349.tif 000054
の計算を実行し（ステップＳ２２）、さらに
0006528349.tif 000055
の計算を実行する（ステップＳ２３）。
【００４３】
その後活性化関数ｆを実行する（ステップＳ２４）。この前処理から活性化関数の実行までを、次の中間ノードに対して繰り返し（ステップＳ２５〜Ｓ２８）、例えばｌ＝Ｌ層まで繰り返して（ステップＳ２９〜Ｓ３０）、最終的にSoftmax等の計算を実施して、認識計算を行う（ステップＳ３１）。なお、図１１では、ｌ＝Ｌ層は圧縮しない行列を用いた方法を示したが、ｌ＝Ｌ層も圧縮した行列を用いた計算を行ってもよい。
【００４４】
更には本実施形態例の計算処理は、全体の一部の層のみ適用してもよい。
【００４５】
以上のように本実施形態例は、従来の行列計算部分にそのまま適用できる。
上記のように重み行列を圧縮しても特性がほとんど変わらない為、計算量が削減できる。重み行列はネットワーク構造そのものの表現でもあり、重み行列の圧縮はネットワーク圧縮とみなすことができる。
ＤＮＮをネットワーク圧縮した際の評価結果を表１および図１２に示す。入力次元は７８４で中間層は５００次元とし、最後に０〜９までの認識計算(Softmax)で出力する構造を採用している。表１および図１２の評価結果から分かるように、１／５０に演算量を削減しても正解率は僅かしか劣化しない事が確認できる。表１は、手書き数字０〜９までの認識の正解率である。
【００４６】
【表１】
0006528349.tif 000056
【００４７】
次に、本発明の第２の実施形態例を、図１３〜図１８を参照して説明する。第２の実施形態例は、ＣＮＮ（畳み込みニューラルネットワーク）に適用した例である。
図１３にＣＮＮの基本ネットワーク構成を示す。一般にＣＮＮは画像などに映っている物体の認識に使う用途などに用いられるため、以降の説明では画像での物体識別を意識した説明を行う。
【００４８】
まず、ｌ層目の入力データサイズをＭ（１）×Ｍ（１）とし、入力チャネルの総数をＣＮ（１）とする。また、ｌ層目の出力データのサイズはｌ＋１層の入力データサイズＭ（１＋１）×Ｍ（１＋１）と同じでありｌ層目の出力チャネルの総数はｌ＋１層の入力チャネルの総数ＣＮ（ｌ＋１）と同じである。また、畳み込み対象の領域をカーネルあるいはフィルタと呼ぶが、このフィルタ領域のサイズをＨ（１）×Ｈ（１）とし、ｌ層、ｌ＋１層の各チャネルＣ（ｌ），Ｃ（ｌ＋１）に対応するフィルタの行列をＦ（ｌ），Ｃ（ｌ），Ｃ（ｌ＋１）とする。各Ｃ（ｌ）に対応する入力データを
0006528349.tif 000057
入力チャネルＣ（ｌ），出力チャネルＣ（ｌ＋１）に対応するフィルタを
0006528349.tif 000058
とする。
【００４９】
図１４に一例を示す。例えばＲＧＢの画像データを想定して考えると、ＲＧＢのそれぞれに対してチャネルが必要となり、入力の第ｌ＝１層目のチャネルの総数はＣＮ（ｌ＝１）=３となる。また、Ｍ（１）＝３，Ｍ（２）＝３，ＣＮ（２）＝２、Ｈ（１）＝２とする。この場合、
0006528349.tif 000059
となる。
図１４に沿って計算すると
0006528349.tif 000060
但し、
0006528349.tif 000061
においてｉ＞Ｍ（ｌ）あるいはｊ＞Ｍ（ｌ）のときは、
0006528349.tif 000062
である。
【００５０】
上記に示すように行列のままで畳み込み計算するのは実装が複雑となるので、計算の効率化のために行列Ｘ（ｌ），Ｃ（ｌ）を長さＭ（ｌ）×Ｍ（ｌ）のベクトルに下記の様に変換したものをｘ（ｌ），C(ｌ)とする。
0006528349.tif 000063
一方、畳み込み計算の為に出力データのサイズに合わせてＸ（ｌ），Ｃ（ｌ）を長さＭ（ｌ＋１）×Ｍ（ｌ＋１）のベクトルに変換したものをｘr（ｌ），C(ｌ)とする。ここでｒはｒ回目の畳み込み計算の対象となるベクトルの意味である。例えば最初ｒ＝１回目の畳み込み計算の為に生成するベクトルｘr=1（ｌ），C(ｌ)は
0006528349.tif 000064
続いてｒ＝２回目の畳み込み計算の為に生成するベクトルｘr=2（ｌ），C(ｌ)は、
0006528349.tif 000065
【００５１】
同様の手順で畳み込み計算の計算順序に対応するように行列Ｘ（ｌ），Ｃ（ｌ）の畳み込み計算領域を順にベクトルに変換し、これを行方向に連結する形で各チャネルＣ（ｌ）毎にサイズ（Ｈ（ｌ）×Ｈ（ｌ））×（Ｍ（ｌ＋１）×Ｍ（ｌ＋１））の行列ｘｂ（ｌ），Ｃ（ｌ）を下記の様に生成する。 
0006528349.tif 000066
この行列をチャネル数ＣＮ（ｌ）個分行方向に連結させて、下記の様にｘｂ（ｌ）を生成する。
0006528349.tif 000067
但し、
0006528349.tif 000068
においてｉ＞Ｍ（ｌ）あるいはｊ＞Ｍ（ｌ）のときは、
0006528349.tif 000069
である。
【００５２】
次にｘｂ（ｌ）を用い、そのベクトルの掛け算で計算できるようにＦ（ｌ），Ｃ（ｌ），Ｃ（ｌ＋１）を長さＨ（ｌ）×Ｈ（ｌ）のベクトルｆ（ｌ），Ｃ（ｌ），Ｃ（ｌ＋１）に変換し、それをＣＮ（ｌ）個およびＣＮ（ｌ＋１）個のチャネル数に順番に対応する様にサイズＣＮ（ｌ＋１）×（Ｈ（ｌ）×Ｈ（ｌ）×ＣＮ（ｌ））のフィルタ行列ＦＢ（ｌ）を生成する。
【００５３】
0006528349.tif 000070
【００５４】
このフィルタ行列ＦＢ（ｌ）とｘ（ｌ）の積からｘｂ（ｌ＋１）を下記のように計算する。
0006528349.tif 000071
また、の各行はｘｂ（ｌ＋１）の各行は下記の様にｘ（ｌ＋１），Ｃ（ｌ＋１）と見なすことができる。                              
0006528349.tif 000072
【００５５】
一般にＣＮＮの畳み込み層では上記のように計算する。図１４の例では、
0006528349.tif 000073
ここから                              
0006528349.tif 000074
を計算する。
【００５６】
次にネットワーク圧縮に関して説明する。Ｈ（１）＝２，ＣＮ（１）＝３，ＣＮ（２）＝４を例にとり、図１５にその際のＦＢ（ｌ）を示す。
なお、図１５の行列の要素の上付きの添え字のうち、層を示す(l)は簡易化のため割愛している。
ＣＮＮに対して本実施形態例のネットワーク圧縮法を、このＦＢ（ｌ）に適用して圧縮する。この圧縮したフィルタ行列を
0006528349.tif 000075
とする。
【００５７】
例えば図１６では圧縮率γ＝１／２の例を示している。ＣＮＮの場合と同じように掛け算の回数を＝１／２まで下げることができる。従来のＣＮＮではその一部である畳み込み層に図１４のような計算を行うのに、図１７（ａ）の従来例として示すような計算が必要であった。
【００５８】
すなわち、ＣＮ（ｌ＋１）・ＣＮ（ｌ）・Ｈ（ｌ）・Ｈ（ｌ）・Ｍ（ｌ＋１）・Ｍ（ｌ＋１）回の積が必要であり、この積の回数が演算量を増大させる元になっていた。本実施の形態例では、図１６（ｂ）に示すように元々のＣＮ（ｌ＋１）×（ＣＮ（ｌ）・Ｈ（ｌ）・Ｈ（ｌ））の行列を、（ＣＮ（ｌ＋１）・γ）×（ＣＮ（ｌ）・Ｈ（ｌ）・Ｈ（ｌ））までγで示す圧縮率まで圧縮させる。
この例では説明の紙面の都合上、圧縮率はγ＝１／２を例にしているが、ＤＮＮの場合と同じように圧縮率は数十分の１等のより高い圧縮率の設定も可能である。
【００５９】
この
0006528349.tif 000076
の行列を使って下記の計算を行う。まず
0006528349.tif 000077
を以下のように定義する。                  
0006528349.tif 000078
【００６０】
また、ｘｂ（ｌ）のｉ列目の部分行列をｘｂｉ（ｌ）とし、以下の計算をｉ＝１，２，・・・、Ｍ（ｌ＋１）・Ｍ（ｌ＋１）に対して行う。                    
0006528349.tif 000079
図１７（ｂ）の例では、Ｍ（ｌ＋１）・Ｍ（ｌ＋１）＝９より９回行う。
【００６１】
次に図１７（ｂ）に示すように、（ＣＮ（ｌ＋１）・γ）×（ＣＮ（ｌ）・Ｈ（ｌ）・Ｈ（ｌ））の行列
0006528349.tif 000080
を、１／γ＝２列毎に（ＣＮ（ｌ＋１）・γ）×１／γの行列
0006528349.tif 000081
に以下のように分割する。
0006528349.tif 000082
【００６２】
その上で
0006528349.tif 000083
に対して異なるルールで成分を置換した行列
0006528349.tif 000084
との行列の和を下記のように実行する。
0006528349.tif 000085
【００６３】
この結果、図１７の最下段に示すような
0006528349.tif 000086
の行列
0006528349.tif 000087
がｉ＝１，２，・・・，Ｍ（ｌ＋１）・Ｍ（ｌ＋１）に対応するようにＭ（ｌ）・Ｍ（ｌ）＝９個出力される。この行列
0006528349.tif 000088
を下記の様に各行を列方向に連結させたベクトルに変換し転置をして、
0006528349.tif 000089
を構成する。これらを用いて、ＣＮ（ｌ＋１）×（Ｍ（ｌ＋１）・Ｍ（ｌ＋１））のｘｂ（ｌ＋１）を求める。
0006528349.tif 000090
【００６４】
上記の例では、
0006528349.tif 000091
の行列
0006528349.tif 000092
から                          
0006528349.tif 000093
の
0006528349.tif 000094
が生成される。
【００６５】
最終的には、ＣＮ（ｌ）×（Ｍ（ｌ＋１）・Ｍ（ｌ＋１））＝４×９の出力行列ｘｂ（ｌ＋１＝２）が得られ、従来と同じノード数の出力行列ｘｂ（ｌ＋１＝２）の演算が実行できる。特に置換した行列
0006528349.tif 000095
の組み合わせによる行列の和を使うことによりランダム行列に近い特性を実現できる。
結果認識性能や予測性能は、従来例と本実施形態例では僅かな性能差に抑えられる。一方、本実施形態例の場合には、演算量が大きい掛け算の回数はＤＮＮの場合と同様圧縮率γまで下げられる効果がある。これらの実装はソフトウェア上でも実装可能であるが、ＦＰＧＡ等のハードウェアでの実装も可能である。
【００６６】
次に実装例を示す。例えば元々６×９の行列ＦＢ（１）で入力信号ベクトル
0006528349.tif 000096
のベクトル長９のものを対象として圧縮する。γ＝１／４とし２×９の行列
0006528349.tif 000097
とベクトル長９の
0006528349.tif 000098
２×９の行列の
0006528349.tif 000099
を使って
0006528349.tif 000100
ただし、簡易化のために行列
0006528349.tif 000101
の成分はｗｉ，ｊ、ベクトル
0006528349.tif 000102
の要素はｘｊと表記している。
ここでは、
0006528349.tif 000103
とする。
【００６７】
ここで、
0006528349.tif 000104
の２行目を置換して、下記のように
0006528349.tif 000105
とする。
0006528349.tif 000106
また、
0006528349.tif 000107
の２行目を左側に２列シフトする置換をして、下記のように
0006528349.tif 000108
とする。
0006528349.tif 000109
【００６８】
結果
0006528349.tif 000110
は、以下のように計算する
0006528349.tif 000111
なお簡易化の為、
0006528349.tif 000112
とする。
この計算の回路は、図８に示すようにハードウェア化した場合と同様の回路になる。
0006528349.tif 000113
から
0006528349.tif 000114
への置換パターンにランダムな置換を用いる場合は、図１０と同様の回路になる。
【００６９】
なお、本実施形態例では、
0006528349.tif 000115
の計算の際に
0006528349.tif 000116
を置換しない方法を示したが、この部分を置換してもよい。
【００７０】
図１８は、本実施形態例の演算処理を実行するフローチャートを、従来のＣＮＮと比較したものである。図１８の左側のステップＳ４１〜Ｓ５１は、従来のＣＮＮ実行時のフローチャートであり、図１８の右側のステップＳ６１〜Ｓ７３は本実施形態例のＣＮＮ実行時のフローチャートである。本実施形態例の処理は、従来の行列計算部分に適用することができる。
【００７１】
なお、図１８のフローチャート中のMax Poolingは、フィルタ出力のある領域の組み合わせで最大値をとる値だけを抽出する機能である。但し、認識のための認識計算(Softmax)等の直前に用いる行列計算等の一部に従来方式を用いてもよい。
【００７２】
まず従来のＣＮＮ実行処理を説明すると、画像データなどの入力信号は一般に１画素づつの信号の組み合わせをベクトルとして扱う。
そして、入力ベクトルｘ（１）とし、畳み込みのルールに合わせた行列ｘｂ（１）に変換して、正規化や量子化の前処理が行われる（ステップＳ４１）。
【００７３】
その後、図１７（ａ）で説明したように最初の層ｌ＝１のフィルタＦＢ（１）とｘｂ（１）により行列の掛け算ＦＢ（１）とｘｂ（１）を実施し（ステップＳ４２）、その後活性化関数ｆを実行し（ステップＳ４３）、MAX pooling等の処理をして（ステップＳ４４）、次の層ｌ＝２のノードのベクトルｘ（２）を得、ｘｂ（２）を構成する。
この処理を繰り返し実行する（ステップＳ４５〜Ｓ５０）。
図１８の例では、例えばｌ＝Ｌ層まで繰り返して、最終的にSoftmax等の計算を実施して認識する（ステップＳ５１）。
【００７４】
次に、本実施形態例の処理である、ＣＮＮに適用した例（図１８の右側）を、説明する。
まず、従来例と同様に入力信号の前処理が行われる（ステップＳ６１）。
そして、行列計算の部分で既に説明したように圧縮したフィルタの行列
0006528349.tif 000117
を用いて、
0006528349.tif 000118
の計算を実施し（ステップＳ６２）、その後に、
0006528349.tif 000119
および
0006528349.tif 000120
を実行する（ステップＳ６３）。さらに、活性化関数ｆを実行する（ステップＳ６４）。
次に、MAX pooling等の処理（ステップＳ６５）が行われる。
【００７５】
そして、例えば前処理と活性化関数の実施を含めたｌ＝Ｌ−１層まで同様な計算を実行し（ステップＳ６６〜Ｓ７０）、ｌ＝Ｌ層のみ圧縮しない行列を用いて計算する（ステップＳ７１〜Ｓ７２）。
そして、Softmax等の計算を実施して認識する（ステップＳ７３）。
【００７６】
図１８の例では、ｌ＝Ｌ層は圧縮しない行列を用いた方法を示したが、ｌ＝Ｌ層も圧縮した行列を用いた計算を行ってもよい。
更には本実施形態例の計算は、全体の一部の層のみ適用してもよい。
上記のように重み行列を圧縮しても特性がほとんど変わらない為、計算量が削減できる。フィルタ行列はネットワーク構造の一部を示す表現でもあり、フィルタ行列の圧縮はネットワーク圧縮とみなすことができる。
【００７７】
以上説明した第１実施形態例および第２実施形態例では、ＤＮＮ、ＣＮＮに対するネットワークの圧縮方法を示したが、これらの実施形態例の手法に加えて更に圧縮するようにしてもよい。
【００７８】
次に、第１実施形態例および第２実施形態例の手法に加えて更に圧縮する手法を示す。ここでは第２実施形態例を元に説明する。
第２実施形態例では、ＣＮ（ｌ）・Ｈ（ｌ）・Ｈ（ｌ）＝３・２・２＝１２とし、ＣＮ（ｌ＋１）＝４とした４×１２の行列ＦＢ（ｌ）を、圧縮率γ＝１／２で、２×１２の行列
0006528349.tif 000121
に圧縮する方法を示した。
【００７９】
ここでは更に大きい行列ＦＢ（ｌ）を用いて説明する。ＣＮ（ｌ）・Ｈ（ｌ）・Ｈ（ｌ）＝６４・３・３＝５７６、ＣＮ（ｌ＋１）＝１９２とする。今、行列の圧縮率をγ＝１／１６とし、更にその圧縮した行列の中を部分行列にして、部分行列同士が一部の列、または行が重複するように構成することを特徴とする行列にする。具体的な例を図１９に示す。圧縮した１２×５７６行列
0006528349.tif 000122
の中の左上に４×（１６・１２）の部分行列、真ん中に４×（１６・１３）の部分行列、右下に４×（１６・１３）の部分行列を配置する。ここで各部分行列は重複する行は無く、重複する列は存在するものとする。
【００８０】
この例では各部分行列間には１／γ＝１６列の重複があるものとする。各部分行列の計算は式（６），（７），（８），（９），（１０）に従うものとする。この手法により演算量は更に削減され
0006528349.tif 000123
と約１／５０まで削減できる。このような構造にしても式（９）に示すような計算において重みが−１や１の値をとっても同じ方程式の発生を回避できるため、第１の実施の形態例や第２の実施の形態例と同様な効果が期待できる。この演算処理を実装する際には、各部分行列毎に図８や図１０に示すような回路構成を用いることで実現できる。
【００８１】
以上のように、ＤＮＮでもＣＮＮでも、本発明のネットワーク圧縮法により演算量を圧縮率γと部分行列化に応じて大幅に削減でき、表１に示す様に圧縮してもほぼ同等の正解率を達成することができるため、より低価格で低消費電力のＣＰＵ、汎用ＦＰＧＡ等を用いて実装できる効果がある。
また、本実施例ではｘ（ｌ＋１）を求める際重み行列Ｗ（ｌ）とベクトルｘ（ｌ）において重み行列Ｗ（ｌ）の各行の成分とベクトルｘ（ｌ）のすべての要素の積和をとらず、一部の要素の積和をとり方程式が一致しない組み合わせのルールを作る手段をとることで同じ方程式の発生を回避した。この方程式が一致しない組み合わせを生成できる計算であれば、上記方法に限らず適用可能となる。
【００８２】
ここで、本発明の各実施形態例の演算処理を実行する情報処理装置であるコンピュータ装置のハードウェア構成の一例を、図２０に示す。
図２０に示すコンピュータ装置Ｃは、バスＣ８にそれぞれ接続されたＣＰＵ（Central Processing Unit：中央処理装置）Ｃ１、ＲＯＭ（Read Only Memory）Ｃ２、及びＲＡＭ（Random Access Memory）Ｃ３を備える。さらに、コンピュータ装置Ｃは、不揮発性ストレージＣ４、ネットワークインタフェースＣ５、入力装置Ｃ６、及び表示装置Ｃ７を備える。また、必要に応じてＦＰＧＡ（field-programmable gate array）Ｃ９を備えてもよい。
【００８３】
ＣＰＵ  Ｃ１は、本例の情報処理システム装置が備える各機能を実現するソフトウェアのプログラムコードをＲＯＭ  Ｃ２から読み出して実行する。ＲＡＭ  Ｃ３には、演算処理の途中に発生した変数やパラメータ等が一時的に書き込まれる。例えば、ＣＰＵ  Ｃ１がＲＯＭ  Ｃ２に記憶されているプログラムを読み出すことで、既に説明したＤＮＮやＣＮＮの演算処理が実行される。また、ＦＰＧＡ  Ｃ９にＤＮＮやＣＮＮの一部あるいはすべてを実装して演算処理を実装することも可能である。ＦＰＧＡを用いた場合には、消費電力を削減や高速な演算が実現できる効果がある。
【００８４】
不揮発性ストレージＣ４としては、例えば、ＨＤＤ（Hard disk drive）、ＳＳＤ（Solid State Drive）等が用いられる。この不揮発性ストレージＣ４には、ＯＳ（Operating System）、各種のパラメータ、ＤＮＮ又はＣＮＮを実行するプログラムなどが記録されている。
【００８５】
ネットワークインタフェースＣ５には、端子が接続されたＬＡＮ（Local Area Network）、専用線等を介して各種のデータを入出力することが可能である。例えば、ＤＮＮ又はＣＮＮの演算を行うための入力信号をネットワークインタフェースＣ５が受信する。また、ＤＮＮ又はＣＮＮの演算結果を、ネットワークインタフェースＣ５から外部の端末装置に送信する。
入力装置Ｃ６は、キーボードなどで構成される。
表示装置Ｃ７には、演算結果などが表示される。
【００８６】
上述した実施形態例ではＤＮＮやＣＮＮの例を示したが、本発明は、一般のニューラルネットワークやリカレントニューラルネットワーク（ＲＮＮ）等その一部にネットワーク構造を持つ人工知能や機械学習または行列演算により入力データの次元圧縮や圧縮センシングを行うシステムであれば、すべてに対して適用できる。
【符号の説明】
【００８７】
Ｃ…コンピュータ装置、Ｃ１…ＣＰＵ、Ｃ２…ＲＯＭ、Ｃ３…ＲＡＭ、Ｃ４…不揮発性ストレージ、Ｃ５…ネットワークインタフェース、Ｃ６…入力装置、Ｃ７…表示装置、Ｃ８…バス、Ｃ９…ＦＰＧＡ
【要約】
ニューラルネットワークにおけるノード間を結ぶネットワークの計算に適用する。ネットワークの重み行列の行数あるいは列数を、入力データあるいは出力データによって定められる行数あるいは列数から削減した行数あるいは列数とする。そして、削減した行数あるいは列数の重み成分を、その入力データのベクトルと掛け算をし、その掛け算をした結果の行列を、一定の列数毎あるいは行数毎の部分行列に分割し、分割して得られた部分行列毎に行列の和を行う。【図１】
0006528349.tif 000124
【図２】
0006528349.tif 000125
【図３】
0006528349.tif 000126
【図４】
0006528349.tif 000127
【図５】
0006528349.tif 000128
【図６】
0006528349.tif 000129
【図７】
0006528349.tif 000130
【図８】
0006528349.tif 000131
【図９】
0006528349.tif 000132
【図１０】
0006528349.tif 000133
【図１１】
0006528349.tif 000134
【図１２】
0006528349.tif 000135
【図１３】
0006528349.tif 000136
【図１４】
0006528349.tif 000137
【図１５】
0006528349.tif 000138
【図１６】
0006528349.tif 000139
【図１７】
0006528349.tif 000140
【図１８】
0006528349.tif 000141
【図１９】
0006528349.tif 000142
【図２０】
0006528349.tif 000143