(57)【要約】【課題】組み込み用のハードウェアを使用した場合であってもニューラルネットワークの処理速度の低下を抑制することができるニューラルネットワーク処理装置、およびニューラルネットワーク処理方法を提供することを目的とする。【解決手段】  ＣＮＮ処理装置１は、ＣＮＮに与えられる入力信号Ａを記憶する入力バッファ１０と、ＣＮＮの重みＵを記憶する重みバッファ１１と、入力信号Ａと重みＵとの積和演算を含むＣＮＮの畳み込み演算を行う第１処理と、第１処理で用いられるデータの少なくとも一部のビット精度を削減する量子化を行う第２処理とを行うプロセッサとを備える。【選択図】  図１
2020060967.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルネットワークに与えられる入力信号を記憶する第１メモリと、
前記ニューラルネットワークの重みを記憶する第２メモリと、
前記入力信号と前記重みとの積和演算を含む前記ニューラルネットワークの畳み込み演算を行う第１処理と、前記第１処理で用いられるデータの少なくとも一部のビット精度を削減する量子化を行う第２処理とを行うプロセッサと
を備える
ことを特徴とするニューラルネットワーク処理装置。
【請求項２】
請求項１に記載のニューラルネットワーク処理装置において、
前記第２処理は、前記入力信号、前記重み、および前記第１処理における前記積和演算の演算結果の少なくとも１つのデータのビット精度を削減する量子化を含む
ことを特徴とするニューラルネットワーク処理装置。
【請求項３】
請求項１に記載のニューラルネットワーク処理装置において、
前記第２メモリは、予め前記重みが量子化された量子化重みを記憶することを特徴とするニューラルネットワーク処理装置。
【請求項４】
請求項１から３のいずれか１項に記載のニューラルネットワーク処理装置において、
前記プロセッサは、前記重みと前記入力信号とに基づいて、前記第２処理が組み込まれた前記第１処理を行う量子化畳み込み演算部を備えることを特徴とするニューラルネットワーク処理装置。
【請求項５】
請求項１に記載のニューラルネットワーク処理装置において、
前記重みを量子化する第１関数を記憶する第３メモリと、
前記第２処理が組み込まれた前記第１処理を実現する第２関数を記憶する第４メモリと、
をさらに備え、
前記プロセッサは、前記第１関数を読み出して前記重みを量子化し、前記第２関数を読み出して前記第２処理が組み込まれた前記第１処理を行う
ことを特徴とするニューラルネットワーク処理装置。
【請求項６】
請求項１から５のいずれか１項に記載のニューラルネットワーク処理装置において、
前記ニューラルネットワークは、少なくとも１層の中間層を有する多層ニューラルネットワークであることを特徴とするニューラルネットワーク処理装置。
【請求項７】
ニューラルネットワークに与えられる入力信号を第１メモリに記憶する第１ステップと、
前記ニューラルネットワークの重みを第２メモリに記憶する第２ステップと、
プロセッサが、前記入力信号と前記重みとの積和演算を含む前記ニューラルネットワークの畳み込み演算を行う第１処理と、
前記第１処理で用いられるデータの少なくとも一部のビット精度を削減する量子化を行う第２処理と
を行う第３ステップと
を備える
ことを特徴とするニューラルネットワーク処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ニューラルネットワーク処理装置、およびニューラルネットワーク処理方法に関する。
【背景技術】
【０００２】
近年、画像を複数のカテゴリに分類するためのディープニューラルネットワークとして、畳み込みニューラルネットワーク（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ：ＣＮＮ）が注目されている。ＣＮＮは、ディープニューラルネットワークにおいて畳み込み層を有することを特徴とする。畳み込み層では、入力データに対してフィルタを適用する。より詳細には、畳み込み層では、フィルタのウィンドウを一定のストライドでスライドさせて、フィルタの要素と入力データの対応する要素とを乗算し、その和を求める積和演算を行う。
【０００３】
図１１は、一般的なＣＮＮの信号処理のフローを示す図である。ＣＮＮは、入力層、中間層、および出力層を有する（例えば、非特許文献１参照）。中間層においては、入力信号に重みをかけ合わせる畳み込み演算が行われている。図１１に示すように、中間層において、畳み込み演算の結果に対して、必要に応じてＲｅＬＵなどの活性化関数が適用され、さらに、場合によっては正規化およびプーリング処理が行われる。また、畳み込み演算を介して抽出された入力信号の特徴は、全結合層からなる分類器にかけられ、分類結果が出力層から出力される。このように、ＣＮＮなどのニューラルネットワークにおいては、積和演算が繰り返し行われていることがその特徴の１つとして挙げられる。
【０００４】
ここで、ＣＮＮに用いられる入力データの入力値や重みは、小数点を含む場合があるが、従来のＣＮＮなどのニューラルネットワークの積和演算においては、図１１の「入力信号」、「重み」、および「畳み込み演算」の各値に示すように、演算結果の桁数を確保した形での演算処理が行われている。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】麻生  英樹、他、「Ｄｅｅｐ  Ｌｅａｒｎｉｎｇ  深層学習」近代科学社、２０１５年１１月
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、従来のＣＮＮなどのニューラルネットワークをＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）やマイコンなどの組み込み用のハードウェアで実装する場合、桁数の多い積和演算による処理速度の低下が課題となっていた。
【０００７】
本発明は、上述した課題を解決するためになされたものであり、組み込み用のハードウェアを使用した場合であってもニューラルネットワークの処理速度の低下を抑制することができるニューラルネットワーク処理装置、およびニューラルネットワーク処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決するために、本発明に係るニューラルネットワーク処理装置は、ニューラルネットワークに与えられる入力信号を記憶する第１メモリと、前記ニューラルネットワークの重みを記憶する第２メモリと、前記入力信号と前記重みとの積和演算を含む前記ニューラルネットワークの畳み込み演算を行う第１処理と、前記第１処理で用いられるデータの少なくとも一部のビット精度を削減する量子化を行う第２処理とを行うプロセッサとを備えることを特徴とする。
【０００９】
また、本発明に係るニューラルネットワーク処理装置において、前記第２処理は、前記入力信号、前記重み、および前記第１処理における前記積和演算の演算結果の少なくとも１つのビット精度を削減する量子化を含んでいてもよい。
【００１０】
また、本発明に係るニューラルネットワーク処理装置において、前記第２メモリは、予め前記重みが量子化された量子化重みを記憶していてもよい。
【００１１】
また、本発明に係るニューラルネットワーク処理装置において、前記プロセッサは、前記重みと前記入力信号とに基づいて、前記第２処理が組み込まれた前記第１処理を行う量子化畳み込み演算部を備えていてもよい。
【００１２】
また、本発明に係るニューラルネットワーク処理装置において、前記重みを量子化する第１関数を記憶する第３メモリと、前記第２処理が組み込まれた前記第１処理を実現する第２関数を記憶する第４メモリと、をさらに備え、前記プロセッサは、前記第１関数を読み出して前記重みを量子化し、前記第２関数を読み出して前記第２処理が組み込まれた前記第１処理を行ってもよい。
【００１３】
また、本発明に係るニューラルネットワーク処理装置において、前記ニューラルネットワークは、少なくとも１層の中間層を有する多層ニューラルネットワークであってもよい。
【００１４】
上述した課題を解決するために、本発明に係るニューラルネットワーク処理方法は、ニューラルネットワークに与えられる入力信号を第１メモリに記憶する第１ステップと、前記ニューラルネットワークの重みを第２メモリに記憶する第２ステップと、プロセッサが、前記入力信号と前記重みとの積和演算を含む前記ニューラルネットワークの畳み込み演算を行う第１処理と、前記第１処理で用いられるデータの少なくとも一部のビット精度を削減する量子化を行う第２処理とを行う第３ステップとを備えることを特徴とする。
【発明の効果】
【００１５】
本発明によれば、ニューラルネットワークに与えられる入力信号と重みとの積和演算を含む畳み込み演算を行う第１処理で用いられるデータの少なくとも一部のビット精度を削減する量子化を行うので、組み込み用のハードウェアを使用した場合であってもニューラルネットワークの処理速度の低下を抑制することができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、本発明の第１の実施の形態に係るＣＮＮ処理装置の機能を説明するブロック図である。
【図２】図２は、第１の実施の形態に係るＣＮＮ処理装置のハードウェア構成を示すブロック図である。
【図３】図３は、第１の実施の形態に係るＣＮＮ処理方法のフローを説明するための図である。
【図４】図４は、第１の実施の形態に係るＣＮＮ処理方法を説明するための図である。
【図５】図５は、第２の実施の形態に係るＣＮＮ処理装置の機能を説明するブロック図である。
【図６】図６は、第２の実施の形態に係るＣＮＮ処理方法のフローを説明するための図である。
【図７】図７は、第２の実施の形態に係るＣＮＮ処理方法を説明するための図である。
【図８】図８は、第３の実施の形態に係るＣＮＮ処理装置の機能を説明するブロック図である。
【図９】図９は、第３の実施の形態に係るＣＮＮ処理方法のフローを説明するための図である。
【図１０】図１０は、第３の実施の形態に係るＣＮＮ処理方法を説明するための図である。
【図１１】図１１は、従来のＣＮＮの演算処理を説明するための図である。
【発明を実施するための形態】
【００１７】
以下、本発明の好適な実施の形態について、図１から図１０を参照して詳細に説明する。なお、以下においては、「ニューラルネットワーク」としてＣＮＮを用いる場合を例に挙げて説明する。
［第１の実施の形態］
まず、本発明の第１の実施の形態に係るＣＮＮ処理装置（ニューラルネットワーク処理装置）１の構成を説明する。図１は、ＣＮＮ処理装置１の機能構成を示すブロック図である。
【００１８】
本実施の形態に係るＣＮＮ処理装置１は、ＣＮＮに与えられる入力信号とＣＮＮの重みとの積和演算を行って演算結果を出力する演算処理装置である。この演算処理は、ＣＮＮの中間層を構成する畳み込み層の積和演算（以下、「畳み込み演算」ということがある。）を含む。ＣＮＮ処理装置１が畳み込み演算を行った演算結果は、ＲｅＬＵなどの活性化関数にかけられて、１層分の畳み込み層の出力が得られる。以下においては、説明の簡単のため、畳み込み層の積和演算の結果、すなわち畳み込み演算の結果が次の畳み込み層の入力信号として用いられるものとする。ＣＮＮ処理装置１は、入力信号と重みとの積和演算を繰り返し行って、予め設定されているＣＮＮモデルが有する畳み込み層の数に応じた回数の積和演算を実行する。
【００１９】
［ＣＮＮ処理装置の機能ブロック］
上述したＣＮＮ処理装置１は、入力バッファ（第１メモリ）１０、重みバッファ（第２メモリ）１１、畳み込み演算部１２、演算結果バッファ１３、量子化処理部１４、出力バッファ１５、および記憶部１６を備える。
【００２０】
入力バッファ１０は、ＣＮＮに与えられる入力信号を記憶する。より詳細には、入力バッファ１０には、例えば、外部から与えられた画像データなどの入力信号が記憶される。また、入力バッファ１０は、画像データなどの入力信号を量子化処理部１４に出力する。入力バッファ１０に供給される入力信号は、予め前処理を行った画像データであってもよい。前処理の例としては、モノクロ変換、コントラスト調整、および輝度調整などが挙げられる。また、入力信号は、ＣＮＮ処理装置１において予め設定されているＣＮＮモデルに応じて設定されたビット深度となるように縮小されていてもよい。入力バッファ１０に供給される入力信号の値としては、例えば、３２ビットや１６ビット精度の浮動小数点の配列で表現された小数点を含む値などが用いられる。
【００２１】
重みバッファ１１は、ＣＮＮの重みを記憶する。より詳細には、重みバッファ１１には、ＣＮＮ処理装置１の外部に設置されたサーバ（図示しない）や記憶部１６などに予め記憶されているＣＮＮの重みパラメータがロードされる。本実施の形態では、重みの値として、３２ビットや１６ビット精度の浮動小数点の配列で表現された小数点を含む値などが用いられる。重みバッファ１１は、バッファリングした重みを、後述の量子化処理部１４に出力する。
【００２２】
畳み込み演算部１２は、入力バッファ１０に記憶されている入力信号と、重みバッファ１１に記憶されている重みとの積和演算を含むＣＮＮの畳み込み演算を行う（第１処理）。より詳細には、畳み込み演算部１２は、ＣＮＮ処理装置１において予め設定されているＣＮＮモデルを構成する畳み込み層の積和演算を行う。本実施の形態では、畳み込み演算部１２は、後述の量子化処理部１４によって量子化された入力信号および重みの値に基づいて、畳み込み演算を行う。畳み込み演算部１２が出力する演算結果は、演算結果バッファ１３に供給される。
【００２３】
演算結果バッファ１３は、畳み込み演算部１２による畳み込み演算の結果をバッファリングし、その演算結果を量子化処理部１４に供給する。
【００２４】
量子化処理部１４は、畳み込み演算の処理（第１処理）で用いられるデータの少なくとも一部のビット精度を削減する量子化を行う（第２処理）。より詳細には、量子化処理部１４は、入力信号、重み、および畳み込み演算の演算結果の少なくとも一部のデータを量子化する。本実施の形態では、量子化処理部１４は、入力信号、重み、および畳み込み演算の演算結果の全てのデータについて量子化処理を行う。
【００２５】
具体的には、量子化処理部１４は、入力バッファ１０から読み出した入力信号の量子化、重みバッファ１１から読み出した重みの量子化、および演算結果バッファ１３から読み出した畳み込み演算の結果の量子化を行う。さらに、量子化処理部１４は、入力バッファ１０、重みバッファ１１、および演算結果バッファ１３にそれぞれ記憶されている入力信号、重み、および演算結果を、量子化された入力信号、重み、および演算結果の値に更新する。
【００２６】
量子化処理部１４が実行する量子化処理は、例えば、四捨五入、切り上げ、切り捨て、最近接丸めなどよく知られた端数処理を含み、入力信号、重み、および畳み込み演算の演算結果のそれぞれの値に対して、小数点を含む値を整数化するなどの制限をかける。量子化処理に伴う処理速度の向上と処理結果の精度とは、互いににトレードオフの関係となる。量子化処理部１４が行う各値の量子化は、例えば、８ビットや１６ビットなどＣＮＮ処理装置１が備えるプロセッサ１０２が一度に扱えるビット数に応じたビット数へ削減することによって処理速度と精度の両立を図ることができる。例えば、ＦＰＧＡであれば、各値を１ビットに削減すればよい。なお、量子化処理部１４は、ＣＮＮ処理装置１が扱うＣＮＮを構成する、多段に接続された複数の畳み込み層のうち、一部の畳み込み層のみに用いてもよい。
【００２７】
出力バッファ１５は、量子化処理部１４によって量子化された畳み込み演算の結果を一時的に記憶する。
【００２８】
記憶部１６は、出力バッファ１５に一時的に記憶されている量子化された畳み込み演算の結果を格納する。記憶部１６に記憶される畳み込み演算の結果が、本実施の形態におけるＣＮＮの畳み込み層の出力値、かつ、次の畳み込み層の入力値として記憶される。また、記憶部１６は、量子化処理部１４が入力信号、重み、および畳み込み演算の結果の値をそれぞれ量子化する際に用いる端数処理の方法を示す情報を予め記憶している。
【００２９】
［ＣＮＮ処理装置のハードウェア構成］
次に、上述した機能を有するＣＮＮ処理装置１のハードウェア構成の例について図２のブロック図を用いて説明する。
【００３０】
図２に示すように、ＣＮＮ処理装置１は、例えば、バス１０１を介して接続されるプロセッサ１０２、主記憶装置１０３、通信インターフェース１０４、補助記憶装置１０５、入出力装置１０６を備えるコンピュータと、これらのハードウェア資源を制御するプログラムによって実現することができる。
【００３１】
主記憶装置１０３には、プロセッサ１０２が各種制御や演算を行うためのプログラムが予め格納されている。プロセッサ１０２と主記憶装置１０３とによって、図１に示した畳み込み演算部１２および量子化処理部１４を含むＣＮＮ処理装置１の各機能が実現される。
【００３２】
主記憶装置１０３によって、図１で説明した入力バッファ１０、重みバッファ１１、演算結果バッファ１３、および出力バッファ１５が実現される。
【００３３】
通信インターフェース１０４は、通信ネットワークＮＷを介して各種外部電子機器との通信を行うためのインターフェース回路である。通信インターフェース１０４を介して、ＣＮＮ処理装置１が用いる画像データなどの入力信号や、重みを、外部のサーバなどから受信してもよい。
【００３４】
補助記憶装置１０５は、読み書き可能な記憶媒体と、その記憶媒体に対してプログラムやデータなどの各種情報を読み書きするための駆動装置とで構成されている。補助記憶装置１０５には、記憶媒体としてハードディスクやフラッシュメモリなどの半導体メモリを使用することができる。
【００３５】
補助記憶装置１０５は、外部から取得された入力データや重みを記憶する記憶領域や、ＣＮＮ処理装置１が畳み込み演算などのＣＮＮの演算処理を行うためのプログラムを格納するプログラム格納領域を有する。補助記憶装置１０５によって、図１で説明した記憶部１６が実現される。さらには、例えば、上述したデータやプログラムやなどをバックアップするためのバックアップ領域などを有していてもよい。
【００３６】
入出力装置１０６は、外部機器からの信号を入力したり、外部機器へ信号を出力したりするＩ／Ｏ端子により構成される。入出力装置１０６を介して、図示しない表示装置などを備えて、ＣＮＮ処理装置１によって出力される演算結果を表示してもよい。
【００３７】
ここで、補助記憶装置１０５のプログラム格納領域に格納されているプログラムは、本明細書で説明するＣＮＮ処理方法の順序に沿って時系列に処理が行われるプログラムであってもよく、並列に、あるいは呼び出しが行われたときなどの必要なタイミングで処理が行われるプログラムであってもよい。また、プログラムは、１つのコンピュータにより処理されるものでもよく、複数のコンピュータによって分散処理されるものであってもよい。
【００３８】
［ＣＮＮ処理方法］
次に、上述した構成を有するＣＮＮ処理装置１の動作について図３および図４を参照して説明する。まず、入力バッファ１０および重みバッファ１１は、ＣＮＮ処理装置１の外部に設置されたサーバなどから与えられた入力信号Ａおよび重みＵをそれぞれ一時的に記憶する（ステップＳ１、ステップＳ３）。
【００３９】
図４に示すように、入力バッファ１０には、入力信号Ａが記憶されている。入力信号Ａは、ベクトル化された入力画像データであり、縦方向と横方向の次元を持つ。入力信号Ａの値は、小数点を含む値で表現される。図４の太線で示す四角形はフィルタを表している。また、重みバッファ１１には、重みＵが記憶されている。重みＵは、行列で表されるカーネルの要素であり、ＣＮＮの学習によって調整および更新されて最終的に決定されるパラメータである。重みＵの値についても、縦方向と横方向の次元を持ち、各要素は小数点を含む値で表現される。
【００４０】
次に、量子化処理部１４は、入力バッファ１０から入力信号Ａを読み出して各要素の値を量子化する（ステップＳ２）。また、量子化処理部１４は、重みバッファ１１から重みＵを読み出して各要素の値を量子化する（ステップＳ４）。
【００４１】
より具体的には、図４に示すように、小数点を含む入力信号Ａの値は、量子化処理部１４によって、例えば、四捨五入される。量子化処理部１４は、入力バッファ１０の入力信号Ａの値を、量子化された入力信号Ａ’の値で更新する。
【００４２】
また、図４に示すように、小数点を含む重みＵの値は、量子化処理部１４によって、例えば、四捨五入される。量子化処理部１４は、重みバッファ１１の重みＵの値を、量子化された重みＵ’の値で更新する。
【００４３】
図３に戻り、畳み込み演算部１２は、入力バッファ１０および重みバッファ１１からそれぞれ量子化された入力信号Ａ’および量子化された重みＵ’を読み出して、畳み込み演算を行う（ステップＳ５）。より詳細には、畳み込み演算部１２は、量子化された入力信号Ａ’のベクトルと量子化された重みＵ’の行列を乗算する。
【００４４】
具体的には、図４に示すように、ＣＮＮのフィルタのウィンドウ（図４の例では、２×２で示す太線の四角）を所定のストライドでスライドさせる。畳み込み演算部１２は、フィルタのそれぞれの場所で、量子化された重みＵ’の要素と、量子化された入力信号Ａ’の対応する要素とを乗算し、その和を求める。
【００４５】
畳み込み演算部１２は、この積和演算による畳み込み演算の演算結果Ｂを演算結果バッファ１３の対応する場所に格納する（ステップＳ６）。具体的には、図４に示すように、演算結果バッファ１３には、小数点を含まない積和の結果「３７」が格納されている。
【００４６】
その後、量子化処理部１４は、演算結果バッファ１３からステップＳ５で得られた畳み込み演算の演算結果を読み出して、量子化処理を行う（ステップＳ７）。具体的には、図４に示すように、量子化処理部１４は、畳み込み演算の演算結果「３７」を、例えば、四捨五入して、「４０」に量子化する。量子化処理部１４は、演算結果バッファ１３のデータを、量子化した演算結果Ｂ’で更新する。
【００４７】
次に、ＣＮＮ処理装置１のプロセッサ１０２は、演算結果バッファ１３から量子化された畳み込み演算の演算結果Ｂ’を読み出し、ＲｅＬＵなどの活性化関数を適用する（ステップＳ８）。具体的には、プロセッサ１０２は、演算結果Ｂ’が負の値である場合には、ＲｅＬＵ関数を通して０を出力し、正の演算結果Ｂ’はそのままの値を出力する。
【００４８】
次に、プロセッサ１０２は、ステップＳ８で出力された値に対してよく知られたプーリング処理を行い、畳み込み演算の結果を圧縮する（ステップＳ９）。なお、ステップＳ９のプーリング処理は必要に応じて行えばよい。また、プロセッサ１０２は、ステップＳ８で得られた活性化関数（ＲｅＬＵ）の出力に対して、正規化を行ってもよい（非特許文献１参照）。
【００４９】
プーリング処理された量子化された演算結果Ｂ’は、出力バッファ１５に蓄えられて、プロセッサ１０２により読み出されて出力される（ステップＳ１０）。なお、出力された値は、ＣＮＮの特徴抽出部の出力として、後続の図示しない分類器を構成する全結合層に入力され、入力信号Ａの画像データを判別する。
【００５０】
以上説明したように、第１の実施の形態に係るＣＮＮ処理装置１によれば、ＣＮＮの入力信号、重み、および畳み込み演算の演算結果を量子化するので、組み込み用のハードウェアを使用した場合であってもＣＮＮの処理速度の低下を抑制することができる。
【００５１】
また、ＣＮＮ処理装置１によれば、特に、畳み込み演算の演算結果についても量子化するので、多数の層からなるＣＮＮ全体の計算負荷を低減することができ、信号処理の高速化が可能となる。
【００５２】
なお、説明した実施の形態では、積和演算の説明において、説明の簡単のため、バイアスの加算を省略した。しかし、入力信号のベクトルと、重み行列とを乗算し、その後加算されるバイアスの値についても同様に量子化してもよい。
【００５３】
また、説明した実施の形態では、量子化処理部１４が、入力信号、重み、および畳み込み演算の演算結果の全てのデータを量子化する場合について説明した。しかし、量子化処理部１４は、入力信号、重み、および畳み込み演算の演算結果のいずれか１つまたは２つに含まれるデータの量子化を行う構成としてもよい。
【００５４】
［第２の実施の形態］
次に、本発明の第２の実施の形態について説明する。なお、以下の説明では、上述した第１の実施の形態と同じ構成については同一の符号を付し、その説明を省略する。
【００５５】
第１の実施の形態では、量子化処理部１４がＣＮＮにおける入力信号Ａ、重みＵ、および畳み込み演算の演算結果Ｂについてそれぞれ量子化処理を行う場合について説明した。これに対し、第２の実施の形態に係るＣＮＮ処理装置１Ａでは、予め量子化された重みＵ’を用いる。また、ＣＮＮ処理装置１Ａは、量子化処理が組み込まれた畳み込み演算を行う量子化畳み込み演算部１２Ａを備える。
【００５６】
［ＣＮＮ処理装置の機能ブロック］
図５は、第２の実施の形態に係るＣＮＮ処理装置１Ａの機能構成を示すブロック図である。ＣＮＮ処理装置１Ａは、入力バッファ１０、量子化重みバッファ（第２メモリ）１１Ａ、量子化畳み込み演算部１２Ａ、演算結果バッファ１３、出力バッファ１５、および記憶部１６を備える。以下、第１の実施の形態と異なる構成を中心に説明する。
【００５７】
量子化重みバッファ１１Ａは、予め重みが量子化された重み（量子化重み）を記憶する。量子化重みバッファ１１Ａは、例えば、ＣＮＮ処理装置１Ａの外部に設置されているサーバ（図示しない）などから取得された、予め量子化された重みを一時的に記憶する。例えば、ＣＮＮ処理装置１Ａは、学習済みのＣＮＮの重みを予め外部に設置されたサーバなどから通信ネットワークＮＷを介して取得し、記憶部１６に予め格納しておいてもよい。この場合、量子化重みバッファ１１Ａは、記憶部１６から量子化された重みを読み出して一時的に蓄える。ここで、量子化された重みは、第１の実施の形態と同様に、ＣＮＮ処理装置１Ａの処理能力に応じたビット精度に削減された重みであり、例えば、小数点を含む重みが整数化されたものが含まれる。
【００５８】
量子化畳み込み演算部１２Ａは、入力信号および量子化された重みを、入力バッファ１０および量子化重みバッファ１１Ａからそれぞれ読み出し、畳み込み演算を行う。より詳には、量子化畳み込み演算部１２Ａは、畳み込み演算を行う際に、信号の量子化処理も行う。例えば、量子化畳み込み演算部１２Ａは、畳み込み演算の演算結果の桁数を予め整数に制限しておく処理や、演算結果の桁数に制限がある場合には、計算前にビットシフトを行う演算を畳み込み演算を実行する際に実施する。量子化畳み込み演算部１２Ａによる演算結果は、演算結果バッファ１３に一時的に記憶される。
【００５９】
［ＣＮＮ処理方法］
次に、上述した構成を有するＣＮＮ処理装置１Ａの動作について、図６および図７を参照して説明する。まず、外部のサーバなどで量子化された重みＵ’がＣＮＮ処理装置１において通信ネットワークＮＷを介して取得され、量子化された重みＵ’が記憶部１６に記憶されているものとする。
【００６０】
まず、入力バッファ１０は、ＣＮＮ処理装置１の外部に設置されたサーバなどから取得された入力信号Ａを一時的に記憶する（ステップＳ２０）。また、量子化重みバッファ１１Ａは、記憶部１６から予め量子化された重みＵ’を読み出して一時的に記憶する（ステップＳ２１）。
【００６１】
図７に示すように、入力バッファ１０には、入力信号Ａが記憶されている。入力信号Ａは、ベクトル化された入力画像データであり、縦方向と横方向の次元を持つ。入力信号Ａの値は、小数点を含む値で表現される。図７の太線で示す四角形はフィルタを表している。また、量子化重みバッファ１１Ａには、量子化された重みＵ’が記憶されている。重みＵは、行列で表されるカーネルの要素であり、ＣＮＮの学習によって調整および更新されて最終的に決定されるパラメータである。量子化された重みＵ’は、小数点の値を含む各要素からなる重みＵを、例えば、整数化してビット数を削減して表した重みである。量子化された重みＵ’についても、重みＵと同様に縦方向と横方向の次元を持つ。
【００６２】
次に、量子化畳み込み演算部１２Ａは、入力バッファ１０から入力信号Ａを、量子化重みバッファ１１Ａから量子化された重みＵ’を読み出して量子化処理が組み込まれた畳み込み演算を行う（ステップＳ２２）。例えば、量子化畳み込み演算部１２Ａは、畳み込み演算の演算結果の桁数を整数に制限しておく処理を行う。また、例えば、量子化畳み込み演算部１２Ａは、畳み込み演算を行う前に、入力信号Ａや量子化された重みＵ’に対して予めビットシフトを行いデータの桁数に対する処理を行う。
【００６３】
より具体的には、図７の例に示すように、量子化畳み込み演算部１２Ａは、畳み込み演算の際に、小数点以下を切り捨てる処理を行う（Ｃ＝ｆｌｏｏｒ（ｃｏｎｖ（Ａ，Ｕ’））。また、量子化畳み込み演算部１２Ａは、フィルタのそれぞれの場所で、量子化された重みＵ’の要素と、入力信号Ａの対応する要素とを乗算し、その和を求める。量子化畳み込み演算部１２Ａによる量子化された畳み込み演算の演算結果Ｃは、演算結果バッファ１３に蓄えられる（ステップＳ２３）。
【００６４】
その後、ＣＮＮ処理装置１Ａのプロセッサ１０２は、演算結果バッファ１３から量子化された畳み込み演算の演算結果Ｃを読み出し、ＲｅＬＵなどの活性化関数を適用する（ステップＳ２４）。具体的には、プロセッサ１０２は、演算結果Ｃが負の値である場合には、ＲｅＬＵ関数を通して０を出力し、正の演算結果Ｃはそのままの値を出力する。
【００６５】
次に、プロセッサ１０２は、ステップＳ２４で出力された値に対してよく知られたプーリング処理を行い、畳み込み演算の結果を圧縮する（ステップＳ２５）。なお、ステップＳ２５のプーリング処理は必要に応じて行えばよい。また、プロセッサ１０２は、ステップＳ２４で得られた活性化関数（ＲｅＬＵ）の出力に対して、正規化を行ってもよい（非特許文献１参照）。
【００６６】
プーリングされた量子化畳み込み演算の演算結果Ｃは、出力バッファ１５に蓄えられて、さらに、プロセッサ１０２により読み出されて外部に出力される（ステップＳ２６）。なお、出力された値は、ＣＮＮの特徴抽出部の出力として、後続の図示しない分類器を構成する全結合層に入力されて入力信号Ａの画像データを判別する。
【００６７】
以上説明したように、第２の実施の形態に係るＣＮＮ処理装置１Ａによれば、予め量子化された重みを用いることで、ＣＮＮの畳み込み演算における演算処理を削減することができる。また、ＣＮＮ処理装置１Ａでは、畳み込み演算を行う際に、量子化処理を組み込むので、入力信号や重みの量子化に伴う計算処理を削減することができる。
【００６８】
［第３の実施の形態］
次に、本発明の第３の実施の形態について説明する。なお、以下の説明では、上述した第１および第２の実施の形態と同じ構成については同一の符号を付し、その説明を省略する。
【００６９】
第２の実施の形態では、量子化畳み込み演算部１２Ａは、予め量子化された重みを用いて、量子化処理を組み込んだ畳み込み演算を行う場合について説明した。これに対し、第３の実施の形態では、重みの量子化、および量子化畳み込み演算を行う際に、記憶部１６Ｂに予め記憶されている関数を読み出して演算を行う。
【００７０】
［ＣＮＮ処理装置の機能ブロック］
図８は、第３の実施の形態に係るＣＮＮ処理装置１Ｂの機能構成を示すブロック図である。ＣＮＮ処理装置１Ｂは、入力バッファ１０、量子化重みバッファ１１Ａ、畳み込み演算部１２、演算結果バッファ１３、量子化処理部１４、出力バッファ１５、および記憶部（第３メモリ、第４メモリ）１６Ｂを備える。
【００７１】
記憶部１６Ｂは、予め定義された重み量子化関数（第１関数）１６０、および畳み込み演算量子化関数（第２関数）１６１を記憶している。
重み量子化関数１６０は、重みの量子化を実現する関数である。より詳細には、重み量子化関数１６０は、量子化処理部１４が、重みＵに対して予め設定された端数処理、例えば、小数点を含む重みＵの整数化などを行い、データ数を削減する量子化処理を実現する関数である。
【００７２】
畳み込み演算量子化関数１６１は、量子化処理が組み込まれた畳み込み演算を実現する関数である。より詳細には、畳み込み演算量子化関数１６１は、畳み込み演算部１２が畳み込み演算を行う際に、演算結果の桁数の制限を設けたり、予め入力信号などの値のビットシフトを行う量子化処理を畳み込み演算とともに実現する関数である。
【００７３】
量子化処理部１４は、記憶部１６Ｂから重み量子化関数１６０を呼び出して、重みＵの量子化を実行する。なお、量子化の対象となる重みＵの値は、予め記憶部１６Ｂに記憶されている。量子化処理部１４が重み量子化関数１６０を用いて量子化した重みＵ’は量子化重みバッファ１１Ａに一時的に記憶される。
【００７４】
畳み込み演算部１２は、記憶部１６Ｂに記憶されている畳み込み演算量子化関数１６１を呼び出して、量子化畳み込み演算を実行する。より詳細には、畳み込み演算部１２は、量子化重みバッファ１１Ａから量子化された重みＵ’を読み出す。また、畳み込み演算部１２は、入力バッファ１０から入力信号Ａを読み出す。そして、畳み込み演算部１２は、入力信号Ａと量子化された重みＵ’とに基づいて、呼び出した畳み込み演算量子化関数１６１を用いて量子化処理が組み込まれた畳み込み演算を行う。畳み込み演算部１２が関数を用いた演算結果は演算結果バッファ１３に格納される。
【００７５】
［ＣＮＮ処理方法］
次に上述した構成を有するＣＮＮ処理装置１Ｂの動作について図９および図１０を参照して説明する。
【００７６】
まず、量子化処理部１４は、記憶部１６Ｂに予め記憶されている重み量子化関数１６０を呼び出して、重みＵの量子化を行う（ステップＳ３０）。量子化された重みＵ’は、量子化重みバッファ１１Ａに一時的に記憶される（ステップＳ３１）。例えば、図１０に示すように、量子化された重みＵ’に対応する重み量子化関数１６０が量子化処理部１４によって記憶部１６Ｂから呼び出される。図１０の例では、重み量子化関数１６０として「重み量子化関数１」で示される関数が各要素に割り当てられている。
【００７７】
次に入力バッファ１０は、ＣＮＮ処理装置１の外部に設置されたサーバなどから取得された入力信号Ａを一時的に記憶する（ステップＳ３２）。
【００７８】
次に、畳み込み演算部１２は、記憶部１６Ｂから畳み込み演算量子化関数１６１を呼び出して量子化処理が組み込まれた畳み込み演算を行う（ステップＳ３３）。より詳細には、畳み込み演算部１２は、入力バッファ１０から入力信号Ａを、量子化重みバッファ１１Ａから量子化された重みＵ’を読み出す。畳み込み演算部１２は、入力信号Ａと量子化された重みＵ’とに基づいて、畳み込み演算量子化関数１６１を用いて量子化処理が組み込まれた畳み込み演算を行う。例えば、畳み込み演算部１２は、呼び出した関数に従って畳み込み演算の演算結果の桁数を整数に制限しておく処理を行う。また、例えば、量子化畳み込み演算部１２Ａは、畳み込み演算を行う前に、入力信号Ａや量子化された重みＵ’に対して予めビットシフトを行いデータの桁数に対する処理を行う。
【００７９】
より具体的には、図９の例に示すように、畳み込み演算部１２は、畳み込み演算量子化関数１６１の関数１に従って、畳み込み演算の際に、小数点以下を切り捨てる量子化処理を行う（ｆｌｏｏｒ（ｃｏｎｖ））。また、畳み込み演算部１２は、畳み込み演算量子化関数１６１に従って、フィルタのそれぞれの場所で、量子化された重みＵ’の要素と、入力信号Ａの対応する要素とを乗算し、その和を求める。量子化畳み込み演算部１２Ａによる量子化された畳み込み演算の演算結果Ｘは、演算結果バッファ１３に一時的に記憶される（ステップＳ３４）。
【００８０】
その後、ＣＮＮ処理装置１Ｂのプロセッサ１０２は、演算結果バッファ１３から量子化された畳み込み演算の演算結果Ｘを読み出し、ＲｅＬＵなどの活性化関数を適用する（ステップＳ３５）。具体的には、プロセッサ１０２は、演算結果Ｘが負の値である場合には、ＲｅＬＵ関数を通して０を出力し、正の演算結果Ｘはそのままの値を出力する。
【００８１】
次に、プロセッサ１０２は、ステップＳ３５で出力された値に対してよく知られたプーリング処理を行い、畳み込み演算の結果を圧縮する（ステップＳ３６）。なお、ステップＳ３５のプーリング処理は必要に応じて行えばよい。また、プロセッサ１０２は、ステップＳ３５で得られた活性化関数（ＲｅＬＵ）の出力に対して、正規化を行ってもよい（非特許文献１参照）。
【００８２】
プーリングされた量子化畳み込み演算の演算結果Ｘは、出力バッファ１５に一時的に記憶され、さらに、プロセッサ１０２により読み出されて外部に出力される（ステップＳ３７）。なお、出力された値は、ＣＮＮの特徴抽出部の出力として、後続の図示しない分類器を構成する全結合層に入力されて入力信号Ａの画像データを判別する。
【００８３】
以上説明したように、第３の実施の形態に係るＣＮＮ処理装置１Ｂによれば、予め定義された重みの量子化関数１６０および畳み込み演算の量子化関数１６１を用いて重みの量子化や、量子化畳み込み演算を行う。そのため、多段に接続される畳み込み層の演算において、関数を入れ替えることで、畳み込み演算の全てを定義することができ、プログラムの量を抑えてＣＮＮの処理速度の低下を抑制することができる。
【００８４】
なお、説明した実施の形態に係る重み量子化関数１６０および畳み込み演算量子化関数１６１は、ハードウェアに組み込みが可能なプログラムであってもよい。例えば、ＦＰＧＡのソースコードやマイコンのファームウェアなどがそれに該当し、この場合、ハードウェアＩＰなどといあった形態で別途備えることが可能となる。
【００８５】
また、ハードウェアに組み込み可能なプログラムとして構成される重み量子化関数１６０および畳み込み演算量子化関数１６１は、同一ハードウェア内のメモリにあってもよく、また、他のネットワーク設備などに格納されていてもよい。上記プログラムは、ニューラルネットワークの形態に応じて入れ替えることにより、所望の処理機能を有したニューラルネットワークを柔軟に実現するハードウェアが実現できる。
【００８６】
以上、本発明のニューラルネットワーク処理装置、およびニューラルネットワーク処理方法における実施の形態について説明したが、本発明は説明した実施の形態に限定されるものではなく、請求項に記載した発明の範囲において当業者が想定し得る各種の変形を行うことが可能である。
【００８７】
例えば、説明した実施の形態では、ニューラルネットワークの一例としてＣＮＮを挙げて説明したが、ニューラルネットワーク処理装置が採用するニューラルネットワークはＣＮＮに限らない。
【００８８】
なお、ここで開示された実施の形態に関連して記述された様々の機能ブロック、モジュール、および回路は、汎用プロセッサ、ＧＰＵ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、ＦＰＧＡあるいはその他のプログラマブル論理デバイス、ディスクリートゲートあるいはトランジスタロジック、ディスクリートハードウェア部品、または上述した機能を実現するために設計された上記いずれかの組み合わせを用いて実行されうる。
【００８９】
汎用プロセッサとしてマイクロプロセッサを用いることが可能であるが、代わりに、従来技術によるプロセッサ、コントローラ、マイクロコントローラ、あるいは状態機器を用いることも可能である。プロセッサは、例えば、ＤＳＰとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、ＤＳＰコアに接続された１つ以上のマイクロプロセッサ、またはこのような任意の構成である計算デバイスの組み合わせとして実現することも可能である。
【符号の説明】
【００９０】
１…ＣＮＮ処理装置、１０…入力バッファ、１１…重みバッファ、１２…畳み込み演算部、１３…演算結果バッファ、１４…量子化処理部、１５…出力バッファ、１６…記憶部、１０１…バス、１０２…プロセッサ、１０３…主記憶装置、１０４…通信インターフェース、１０５…補助記憶装置、１０６…入出力装置、ＮＷ…通信ネットワーク、Ｕ…重み、Ｕ’…量子化された重み、Ａ…入力信号、Ａ’…量子化された入力信号。
【図１】
2020060967.tif 000003
【図２】
2020060967.tif 000004
【図３】
2020060967.tif 000005
【図４】
2020060967.tif 000006
【図５】
2020060967.tif 000007
【図６】
2020060967.tif 000008
【図７】
2020060967.tif 000009
【図８】
2020060967.tif 000010
【図９】
2020060967.tif 000011
【図１０】
2020060967.tif 000012
【図１１】
2020060967.tif 000013