(57)【特許請求の範囲】
【請求項１】
入力側の層と、前記入力側の層を用いて行列積を生成するための重みデータとを記憶するメモリと、
前記入力側の層と、前記入力側の層を用いて行列積を生成するための前記重みデータとを用いて出力側の層を生成するプロセッサとを備え、
前記重みデータは、ゼロ要素と非ゼロ要素からなる複数の列と行のうち、前記非ゼロ要素となる重みと前記非ゼロ要素となる重みの位置情報のみが前記メモリに記憶され、各行の前記非ゼロ要素の数を略同じ数とし、各列の前記非ゼロ要素の数を略同じ数とし、
ＣＮＮの畳み込みのフィルタの層を前記入力側の層とする場合に、高さ、幅及び入力チャネルを一行とし、出力チャンネルを行の数とする行列とし、前記重みデータは前記行列と乗算する前記複数の列と行のうちの前記非ゼロ要素となる重みとして前記メモリに記憶される、ニューラルネットワークを用いた推論装置。
【請求項２】
ゼロ要素と非ゼロ要素は各行でランダムに配置された前記重みデータの前記非ゼロとなる重みと前記非ゼロとなる重みの位置情報のみが前記メモリに記憶された請求項１に記載の推論装置。
【請求項３】
ゼロ要素と非ゼロ要素は各行で周期的に配置された前記重みデータの前記非ゼロとなる重みと前記非ゼロとなる重みの位置情報のみが前記メモリに記憶された請求項１に記載の推論装置。
【請求項４】
前記重みデータの前記非ゼロとなる重みの位置情報をインデックス情報として前記メモリに記憶された、請求項１乃至３のいずれかに記載の推論装置。
【請求項５】
ニューラルネットワークを用いた推論方法であって、
メモリに記憶された入力側の層と、前記入力側の層を用いて行列積を生成するための重みデータとを用いて、プロセッサによって、出力側の層を生成し、
前記重みデータは、ゼロ要素と非ゼロ要素からなる複数の列と行のうち、前記非ゼロ要素となる重みと前記非ゼロ要素となる重みの位置情報のみが前記メモリに記憶され、各行の前記非ゼロ要素の数を略同じ数とし、各列の前記非ゼロ要素の数を略同じ数とし、
ＣＮＮの畳み込みのフィルタの層を前記入力側の層とする場合に、高さ、幅及び入力チャネルを一行とし、出力チャンネルを行の数とする行列とし、前記重みデータは前記行列と乗算する前記複数の列と行のうちの前記非ゼロ要素となる重みとして前記メモリに記憶される、ニューラルネットワークを用いた推論方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ニューラルネットワークを用いた推論装置及び推論方法に関するものである。
【背景技術】
【０００２】
機械学習手法の１つとして、ニューラルネットワークは高い問題解決能力を有し、画像認識、音声認識、異常検知、将来予測などの多くの処理に用いられている。
ニューラルネットワークは、複数のノード（節点）及びノード間の結合するエッジ（枝）で構成されるグラフ構造で表すことができる。ニューラルネットワークの構造の代表的なものに、マルチレイヤーパーセプトロン（Multi-Layer Perceptron；以下、MLPと称す）や畳み込みニューラルネットワーク（Convolutional Neural Network；以下、CNNと称す）、再帰型ニューラルネットワーク（Recurrent Neural Network；以下、RNNと称す）がある。また、学習手法として、主に教師あり学習と、教師なし学習の二種類がある。【０００３】
MLPは階層型ニューラルネットワークであり、例えば４層のMLPでは、複数のノードが入力層、第１中間層、第２中間層、出力層で階層化され、同一階層に属するノード間の枝は存在せずに、隣接している層の間だけにエッジが存在する。中間層は隠れ層と呼ばれることがある。各エッジには、接続された２つのノード間の結合度合を示すパラメータが存在し、そのパラメータは、枝重みと呼ばれている。入力層以外の各層において各ノードでは、前の層（エッジで接続されている層のうち入力層側の層）のノードから出力された値それぞれに対し、接続されたエッジの重みとで積の演算を行う。各ノードに対し、このように行われた積の演算結果は接続されたエッジ数だけ存在するが、それらの総和を計算する処理が行われる。【０００４】
CNNは、畳み込みフィルタもしくはカーネルと呼ばれる層を用いた階層構造のニューラルネットワークであり、畳み込みフィルタは2次元もしくはそれ以上の次元の格子状の構造を持っており、各格子が持つパラメータと入力データとで積の演算を行い、総和を演算する。畳み込みフィルタが持つパラメータは畳み込みフィルタの重みと呼ばれている。【０００５】
MLPやCNNでは入力層から出力層まで一方向にデータが渡されるが、それとは異なり再帰構造を持った層をもつニューラルネットワークがRNNである。RNNでは入力層に系列データが順番に入力され、系列上の現在の入力値に対し、過去の値（未来の値が用いられることもある）とで演算を行う。RNNの一種として、LSTM（Long Short-Term Memory）やGRU（Gated Recurrent Unit）が知られている。再帰構造を持つ層で行われる演算には複数種類あるが、あるパラメータ値と入力値の積を行う演算、あるパラメータ値と過去の値との積を行う演算が存在し、これらの積に用いられるパラメータは重みと呼ばれる。
MLPの枝重みやCNNの畳み込みフィルタの重み、RNNの再帰構造の積に用いられる重みを、単にニューラルネットの重みと呼ぶこととする。【０００６】
教師あり学習は、複数の学習例の入力データと目標出力を与え、実際の出力と目標出力が一致するように、上記で説明したニューラルネットワークの重みの値を調整する手法である。また、教師なし学習は、目標出力を与えずに、学習例が有する本質的な特徴を抽出できるように、ニューラルネットワークの重みの値を調整する手法である。学習による重みの値の調整に成功すると、ニューラルネットワークは入力データに対して目標値等の所望の値を出力できるようになる。学習済みのニューラルネットワークが行う演算は推論と呼ばれる。【０００７】
学習したニューラルネットワークを用いて推論を行う際、ニューラルネットの重みのうち、非ゼロとなる値の数が多いほど、その演算量及びメモリ量は増加する。
例えば、４層MLPの入力層のノード数がＮ、第１中間層のノード数がＭ１、第２中間層のノード数がＭ２、出力層のノード数が１である場合には、入力層と第１中間層の間の枝数がＮ×Ｍ１、第１中間層と第２中間層の間の枝数がＭ１×Ｍ２、第２中間層と出力層の間の枝数はＭ２となる。これらの枝に付随する枝重みの数だけ積を行う必要があり、推論を行う際に少なくとも（Ｎ×Ｍ１＋Ｍ１×Ｍ２＋Ｍ２）回の積が必要となる。また、メモリ量も枝重みの数だけ必要である。ニューラルネットワークには、重みを用いた積の他に総和や活性化関数の演算もあるが、一般的に前記の積にかかわる演算量やメモリ量の方が大きくなることが多い。【０００８】
各層におけるニューラルネットの重みと入力データとの積および総和は、ベクトルや行列の積の形で表現することができる。例えば前記の４層MLPの例において、入力層の出力を要素ＮのベクトルXで表し、第１中間層のそれぞれのノードにおける積と総和の結果（積和演算結果）を要素Ｍ１のベクトルをYで表し、第１中間層のノードが入力層と接続するＮ×Ｍ１本の枝の重みをＭ１×Nの行列Wで表すと、Ｙ＝ＷＸと書ける。Wは重み行列と呼ばれる。RNNの場合も同様に、重み行列Wと入力のベクトルの積、Wと過去の値のベクトルの積で積和演算を表現することができる。また、CNNの場合には非特許文献１のようにして、畳み込みフィルタの重みを重み行列Wで表し、入力データX、積和演算結果Yを行列に変形することで、行列の積Ｙ＝ＷＸの形で積和演算を表現することができる。【０００９】
従って、ニューラルネットワークの重み行列の非ゼロ要素を削減し、ゼロ要素を増やすことができれば演算量やメモリ量を削減することができる。何故なら、各重みは前の層の出力値との積に用いられるため、重みの値がゼロであれば入力データの値に関わらず積の結果はゼロであり、積の演算を省くことが原理上可能であるからである。
特許文献１では、MLPにおいて、中間層の各ノードと入力層との間の枝のうち、活性度を用いてゼロではない枝重みが平均５０個以下となるようにして演算量やメモリ量を削減している。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特許第６０５４００５号
【発明の概要】
【発明が解決しようとする課題】
【００１１】
従来の推論装置で単純に重み行列から非ゼロ要素を削減することができたとしても、行列を格納する配列やメモリが削減する効果が得られるとは限らない。重み行列の非ゼロ要素の位置に偏りがあった場合、メモリ量削減効果を享受した推論装置が得られないという課題があった。【００１２】
本発明は上記の課題を解決するためになされたものであって、メモリ量削減効果を享受した推論装置を得ることを目的とする。
【課題を解決するための手段】
【００１３】
この発明に係る推論装置は、ニューラルネットワーク用いて、入力側の層と、入力側の層を用いて行列積を生成するための重みデータとを記憶するメモリと、入力側の層と、入力側の層を用いて行列積を生成するための重みデータとを用いて出力側の層を生成するプロセッサとを備え、重みデータは、ゼロ要素と非ゼロ要素からなる複数の列と行のうち、非ゼロとなる重みと非ゼロとなる重みの位置情報のみが前記メモリに記憶され、各行の非ゼロ要素の数を略同じ数とし、各列の非ゼロ要素の数を略同じ数とし、ＣＮＮの畳み込みのフィルタの層を入力側の層とする場合に、高さ、幅及び入力チャネルを一行とし、出力チャンネルを行の数とする行列とし、重みデータは行列と乗算する複数の列と行のうちの非ゼロ要素となる重みとして前記メモリに記憶されるものである。
【発明の効果】
【００１４】
この発明によれば、重み行列の非ゼロ要素の位置の偏りをなくし、メモリ量削減効果を享受した推論装置を得ることができる。
【図面の簡単な説明】
【００１５】
【図１】実施の形態１における推論装置のハードウエア構成図。
【図２】実施の形態１における推論装置のニューラルネットワークを示す図。
【図３】実施の形態１における学習済みの重みデータを行列とした重み行列Ｗを示した図。
【図４】実施の形態１におけるニューラルネットワークがＣＮＮだった場合における学習済みの重み行列Ｗを説明した図。
【図５】実施の形態１における入力層１００の入力から中間層１０１までの出力の処理を示すフローチャートである。
【図６】実施の形態１における重み行列Ｗとその要素が格納されるメモリの一例を示した図。
【発明を実施するための形態】
【００１６】
実施の形態１．
従来の推論装置でも、ニューラルネットワークの重みを表す重み行列の非ゼロ要素数を削減することで演算量やメモリ量を削減することができる。また、半導体集積回路によるディジタル回路で実装する場合においては回路規模を削減することができる。
しかしながら、単純に重み行列から非ゼロ要素を削減することができたとしても、また非ゼロ要素数を平均的に削減できたとしても、行列を格納する配列やメモリが削減する効果が得られるとは限らない。重み行列の非ゼロ要素の位置に偏りがあった場合、例えばある行では非ゼロ要素が１００個あり、それ以外の行で非ゼロ要素が１０個の場合、その重み行列を２次元配列で表したときには１００×行数分のメモリ領域が必要となり、十分なメモリ量削減を行うことができない場合がある。
【００１７】
また、特にディジタル回路で積と総和を実装する場合には、前の層の出力値に対して積と総和を行った後のビット幅を考慮する必要がある。積と総和のそれぞれにおいて、演算の前よりも演算結果の値の方がより多くのビット幅となるが、総和においては足し算の回数を少なくできるほど総和結果の値のビット幅が小さくできる。しかしながら、重み行列の非ゼロ要素の位置に偏りがあった場合には、あるノードの総和においては多くの足し算が必要となり、総和結果の値のビット幅が大きくなってしまい、加算器のビット幅や総和結果を格納するレジスタのビット幅が大きくなり回路規模が増大する。
ディジタル回路でニューラルネットワークを実装する場合には、一つの演算回路が複数の層やノードの演算を担当し、時分割で処理するのが一般的である。そのため、ある演算器が担当する複数のノードの中で最も足し算の回数が多いノードに対応できる必要があり、最も足し算回数の多いノードに合わせたビット幅の演算器やレジスタを実装しなければならない。重み行列の非ゼロ要素の位置に偏りがあり、あるノードでは多くの足し算を必要とする場合には、重み行列から非ゼロ要素を削減することができても、回路規模削減効果が得られない場合がある。
【００１８】
上記の場合に対して効果を有する技術的創作について以下、この発明の実施の形態にて説明する。
図１は、実施の形態１における推論装置のハードウエア構成図である。メモリ１に記憶されたデータを用いてプロセッサ２を用いてデータを処理する。メモリ１はHDDなどの記憶媒体やFLASHメモリ、通常のメモリなど様々な形態がえられるとともに、プロセッサもCPUのみならずFPGAやGPUなども考えられる。
図２は実施の形態１における推論装置のニューラルネットワークを示す図である。
図２において、複数のノードからなる入力層１００は画像やセンサーデータなどのニューラルネットへの複数の入力値として表現される層である。ニューラルネットへの入力値はプロセッサ２の処理によって中間層１０１へと出力される。
中間層１０１も一般に複数のノードから構成される。中間層１０１の各ノードは、入力層１００の複数のノードと、学習済みの重みデータ１１１の複数の重みとをベクトル表現した際の内積の値に対して、必要に応じて活性化関数などの処理が施された値となる。中間層１０１の値は、プロセッサ２によって算出されるとともに、中間層１０２へ出力される。
【００１９】
上述したことから、入力層１００の複数のノードの値をベクトルＸ、学習済みの重みデータ１１１を行列Ｗとすると、中間層１０１の各ノードの値は、行列の積であるＹ＝ＷＸとして表現することができる。（活性化関数についても行列Wの中に含めてもよい）。
図３は実施の形態１における学習済みの重みデータを行列とした重み行列Ｗを示した図である。
学習済みの重み行列Ｗは、中間層１０１のノード数分だけ行数を有し、前の層（ここでは入力層１００）のノード数分の列数からなる行列である。活性化関数はシグモイド関数やソフトマックス関数、ReLU関数などが用いられるが、本発明では活性化関数の種類を問わず実施可能である。また、総和の結果の値に施す処理として、バイアス値の加算やバッチノーマライゼーションなどの正規化処理を加えることもあるが、本発明はそれら演算や処理に関わらず実施可能である。
【００２０】
図２の中間層１０２は、中間層１０１の算出処理と同様に算出される。プロセッサ２によって、中間層１０２は、中間層１０１の出力値と学習済みの重みデータ１１２との行列積に対し、必要に応じて総和の結果の値に活性化関数などの処理を施した値が中間層１０２として算出される。中間層が以降何層存在したとしても、中間層１０１の場合と同様にこの実施の形態を構成することができる。
出力層１０３も同様に、直前の中間層の出力値と学習済みの重みデータ１１３との行列積に対し、必要に応じて総和の結果の値に活性化関数などの処理を施した値が出力層１０３としてプロセッサ２によって算出される。出力層１０３の出力がニューラルネットの出力値となる。
なお、入力層１００、中間層１０１〜１０２、出力層の各ノードの値及び、学習済みの重みデータ１１１〜１１３はメモリ１に記憶される。
【００２１】
上記は、階層型ニューラルネットワークの場合について説明した。次にＣＮＮの場合について説明する。図４は、実施の形態１におけるニューラルネットワークがＣＮＮだった場合におけるにおける学習済みの重み行列Ｗを説明した図である。
ＣＮＮの畳み込みフィルタの層は高さｈ、幅ｗ、入力チャネルｃ、出力チャネルｍ個からなるデータ構造をしており、そのＣＮＮの畳み込みフィルタの層を、行数ｍ、列数ｈ×ｗ×ｃの行列Xで表すことができる。よって、行数ｍ、列数ｈ×ｗ×ｃの行列Xで表されるＣＮＮの畳み込みフィルタの層に対する重みWを学習済の重みデータ１１１とすれば、中間層１０１は、前の層の出力（例えば入力層１００）を行列で表したＸと重み行列Ｗとの行列積としてＹ＝ＷＸと表すことができる。従って、同様に図１の中間層１０１や中間層１０２、出力層１０３は、ニューラルネットワークがＣＮＮの構造をとったとしてもこの発明を実施することができる。
ＲＮＮおよびその一種であるＬＳＴＭやＧＲＵにおいても同様に、重みと中間層の入力値の積と総和、重みと過去の入力値に基づく中間値との積と総和を各々行列の積として表すことができ、図２における中間層１０１、１０２をＲＮＮやＬＳＴＭ、ＧＲＵを構成する再帰構造をもつユニットに置き換えてもこの発明は実施することができる。
一般に、ＣＮＮは映像を認識するために用いられることが多く、ＲＮＮおよびその一種であるＬＳＴＭやＧＲＵは音声を認識することに用いられる場合が多い。
【００２２】
上記までは一般Wを用いたニューラルネットワークの構成について説明した。以下は的な重み行列、回路規模が削減されたニューラルネットワークの処理について説明する。
図５は実施の形態１における入力層１００の入力から中間層１０１までの出力の処理を示すフローチャートである。当然ながら、中間層１０１，１０２、出力層１０３にも本図の構成を適用することができる。
ステップＳ５０１において、プロセッサ２はメモリ１から入力層１００からの各ノードの値を取得するとともに、ステップＳ５０２において、プロセッサ２はメモリ１から学習済みのゼロではない非ゼロの重みデータ１１１とともに、重みデータ１１１のゼロではない非ゼロ重みの位置情報を取得する。
学習済みの重みデータは値がゼロの要素を多く含んだ学習済みの重み行列の要素のうちメモリ１には、非ゼロの値のみとその位置情報とが格納されており、重み行列Ｗの列数ｃと行数ｒを掛け合わせたｒ×ｃに比べ、メモリ上に格納されたアドレスサイズは小さい。この発明では、重み行列Ｗの各行に含まれる非ゼロの要素数が均一であるとし、アドレスサイズをｒ×ｃより小さくすることを特徴とする。
【００２３】
Ｃ言語などの多くのプログラム言語において、２次元配列で重み行列を格納するためには、各行に含まれる非ゼロ要素数のうちの最多値ｋだけ列方向へのアドレスサイズが必要であり、全ての行に対してｋ個分の重みを格納できるメモリ量を割り振らなければならない。例え非ゼロ要素数が平均的に少なく、もしくは非ゼロ要素数の総数が少ない場合においても、非ゼロ要素数が最多となる行に合わせてメモリ量を確保しなければならない。また、それを回避するためにメモリを一次元に配置する等して非ゼロ要素のみを格納する場合には、どの行にいくつの非ゼロの要素があるかを示すデータを格納するメモリが別途必要となり、この発明と比べてメモリ使用量が増大してしまう。
【００２４】
当然ながら、非ゼロ要素の総数ｎが行数ｒで割り切れない場合には端数が発生するため、その場合には各行に含まれる非ゼロの要素数はｎ／ｒに近い整数となるが、本実施の形態で構成可能であり、メモリ削減の効果を得ることが出来る。また当然ながら、演算量やメモリ量に影響しない範囲ならば、ゼロの重みを学習済みの重みデータ格納メモリ２１１に格納し、非ゼロの重みと同様に扱ってもよい。
【００２５】
図６は実施の形態１における重み行列Ｗとその要素が格納されるメモリの一例を示した図である。重み行列Ｗに含まれる非ゼロの要素数が図５の例と同じ１８０個であったとしても、各行に属する非ゼロの要素数が不均一であり、非ゼロ要素数が最多となり行でその値がｋ＞９の場合、メモリを２０×ｋ＞１８０だけ必要になってしまう。このとき、サイズが２０×２０の重み行列をメモリに格納する際、各行に属する非ゼロの要素数が均一であり９個であれば、メモリ上のアドレスサイズを２０×９にすることができる。
【００２６】
また、重み行列Ｗの各行に含まれる非ゼロの要素数を均一にするのに加え、重み行列Ｗの各列に含まれる非ゼロの要素数を均一としてもよい。仮に重み行列Ｗの各列に含まれる非ゼロの要素数が不均一であると、前の層の出力の各値によって（重みがゼロのために）演算を省かれる回数が異なるということとなる。このような場合、前の層の出力に含まれる複数の値を、値ごとに偏って扱うこととなり、極端な場合には中間層１０１での演算に使用されない値も発生する。このような場合、ニューラルネットワークの出力の画像認識率などの性能指標が劣化する恐れがある。重み行列Ｗの各列に含まれる非ゼロの要素数を均一とすれば、ニューラルネットワークの出力の画像認識率などの性能指標を高く維持することができる。
【００２７】
非ゼロ重みの位置情報は各行に対する非ゼロ要素位置を示すものであるため、非ゼロ要素数が行に対して均一でない場合には、より多くのメモリ量を必要とする。非ゼロ重みの位置情報は、各行に含まれる非ゼロ要素数を均一とすれば、メモリ量を削減する効果を得ることができる。
なお、この発明の特徴を有する有しないに関わらず、非ゼロ重みの位置情報は多くの場合に必要となる。非ゼロ重みの位置が不明であると、積演算でゼロの重みに対する積を省くことができず、演算量を削減する効果が得られないからである。非ゼロ重みの位置情報は、この発明を実施するにあたって追加で必要となる機能やメモリではなく、従来技術に比べメモリ量増大を招くものではない。
図５のステップＳ５０３において、メモリ１から得られた入力層１００の各ノードの値、学習済みの重みデータ１１１と各重みデータの非ゼロ重みの位置情報に基づいて積演算を行い、中間層１０１の各ノードの値となりうる総和を算出する。
【００２８】
積演算では、学習済みの重みデータ１１１と各重みデータと、各重みデータの非ゼロ重みの位置情報とを用いて、入力層１００の各ノードの値と重みとの積の演算を行う。
上述したように入力層１００はベクトルや行列Ｘで表すことができ、学習済みの重み行列内での重みデータの位置情報に基づいて、重みデータとの積をとる対象となるＸの要素を選択し、重みデータとの積を演算する。
中間層１０１の各ノードの値となりうる総和は、積演算で得られた積に対して全てを対象に行うわけではなく、上述の通り、行列の積ＷＸで表すことができ、Ｗの各行とＸの各列とで要素ごとに積を演算した結果の値を総和の対象とする。
【００２９】
従って、重み行列Ｗのある行に属する非ゼロの要素数がｈであった場合、総和をとる対象の値の個数はｈ個であり、ｈ−１回の加算が必要となる。ディジタル回路でｈ個の値の総和を行う場合、総和の対象となる値のビット幅がｂのとき、総和結果のビット幅はｂ＋ｌｏｇ２ｈビット（小数点以下は切り上げ）となり、このビット数だけ、総和結果を保持するレジスタや加算器のビット幅が必要となる。このビット数のレジスタやビット幅の加算器を実装しなければ桁落ちが発生し、演算ビット精度が低下するか、正しい総和を得ることができない。
重み行列の非ゼロ要素数が不均一の場合、非ゼロ要素数ｈが大きい行に対する総和で多くのビット幅が必要となり、加算器のビット数や総和結果の格納レジスタのビット数が大きくなり回路規模が増大するが、この発明のように重み行列の非ゼロ要素数が均一にすることで回路規模を削減することができる。
【００３０】
ディジタル回路でニューラルネットワークを実装する場合には、一つの演算回路が複数の層やノードの演算を担当し、時分割で処理するのが一般的である。そのため、重み行列の各行で非ゼロ要素数が不均一の場合には、ある演算器が時分割で担当する複数ノードの総和で行われる足し算の回数のうち、最も多いノードに対応したビット幅の演算器やレジスタを実装しなければならない。重み行列の各行で非ゼロ要素数を均一にすることで、回路規模削減効果を得ることができる。
【００３１】
図５のステップＳ５０４において、活性化関数の処理において、総和に対し、バイアス値の加算、活性化関数、バッチノーマライゼーションなどの正規化処理を加え、ステップＳ５０５において、中間層１０１として出力する。これらの処理の順番は様々な手法が提案されているが、どのような順番でも本実施の形態は構成できる。また、これらの処理のうち一部または全部は実施しなくてもよい。
尚、これらの処理の実施可否及び列や行当たりの非ゼロ要素数の数の決定方法は、さまざまであるが、例えば、学習による画像や音判定の正解に対する一致度を上げようとすると一般的に非ゼロ要素数は多くなるが、判定の一致度を一定程度保証するものであったり、要求される非ゼロ要素数の中で最も性能が保証されるものとする制約をかけることで非ゼロ要素数を少なくすることができ、メモリ量を削減することができる。
【００３２】
また、重み行列の各行で非ゼロ要素数が均一になるように、どのように配置するかについても様々なやり方がある。
例えば各行で非ゼロ要素数のみ制約条件として決定して位置をランダムに配置する方法もあるし、非ゼロ要素を周期的に配置する方法がある。周期的も、例えば1つおきや二つおきだけでなく、二つ連続して非ゼロ要素として周期的に配置する場合や、三つやそれ以上連続して周期的に配置する場合でもよい。
また、非ゼロ要素の位置パターンをインデックス化しておけば、非ゼロ要素の位置情報をメモリ１に記憶せずともインデックス情報のみとなるため、さらなるメモリ削減効果が期待される。
よってこれらのいくつかの候補から学習による画像や音判定の一致度が十分担保できる非ゼロ要素の位置パターンを選択することで画像や音判定の一致度を維持しつつ、メモリ削減効果も得ることができる。
【００３３】
以上のような実施の形態によれば、ニューラルネットワークの推論装置において、
入力側の層と、入力側の層を用いて行列積を生成するための重みデータとを記憶するメモリ１と、入力側の層と、入力側の層を用いて行列積を生成するための重みデータとを用いて出力側の層を生成するプロセッサ２とを備え、重みデータは、ゼロ要素と非ゼロ要素からなる複数の列と行のうち、非ゼロとなる重みと非ゼロとなる重みの位置情報のみがメモリ１に記憶し、各行の非ゼロ要素の数を略同じ数に構成したので、重み行列の学習済みの重みデータを格納するメモリのメモリ量を削減することができる。また、重み行列の非ゼロ重み要素の位置を格納するメモリのメモリ量を削減することができる。
【００３４】
さらに、ニューラルネットの中間層や出力層で行われる積の演算の後の総和において、重み行列の各行で非ゼロ要素数を均一とすることで総和の対象となる値の数を削減することができ、ディジタル回路で推論装置を実装する場合に加算器のビット幅や総和結果を保持するレジスタのビット幅の削減が可能であり、回路規模の削減効果を得ることができる。
【００３５】
用途としてはプロセッサ２やメモリ１の能力の制約が発生しやすいエッジ分野での適用が期待される。例えば、自動車における車両等の映像認識や車室内の音声認識等の用途や、ファクトリーオートメーション分野におけるロボット等のカメラを用いた位置制御や生産品の画像による異常検知、生産設備の音や映像による異常判定等への適用が期待される。
【符号の説明】
【００３６】
１：メモリ
２：プロセッサ
１００：入力層
１０１：中間層
１０２：中間層
１０３：出力層
１１１〜１１３：学習済みの重みデータ
【要約】
ニューラルネットワークの推論装置において、入力側の層と、入力側の層を用いて行列積を生成するための重みデータとを記憶するメモリ１と、入力側の層と、入力側の層を用いて行列積を生成するための重みデータとを用いて出力側の層を生成するプロセッサ２とを備え、重みデータは、ゼロ要素と非ゼロ要素からなる複数の列と行のうち、非ゼロとなる重みと非ゼロとなる重みの位置情報のみがメモリ１に記憶し、各行の非ゼロ要素の数を略同じ数に構成したので、重み行列の学習済みの重みデータを格納するメモリのメモリ量を削減することができる。また、重み行列の非ゼロ重み要素の位置を格納するメモリのメモリ量を削減することができる。【図１】
0006741159.tif 000002
【図２】
0006741159.tif 000003
【図３】
0006741159.tif 000004
【図４】
0006741159.tif 000005
【図５】
0006741159.tif 000006
【図６】
0006741159.tif 000007