(57)【要約】【課題】順方向処理および逆方向処理を実行する。【解決手段】実施形態に係るニューラルネットワーク装置は、制御部と、行列演算部とを備える。制御部は、順方向処理において、それぞれが演算を実行する複数の層に対して複数の信号値を順方向に伝播させ、逆方向処理において、複数の層に対して複数の誤差値を逆方向に伝播させる。行列演算部は、複数の層における少なくとも一部の層間を伝播する複数の値に対して演算を実行する。複数の層は、第１層と、第１層に対して順方向に隣接する第２層とを含む。行列演算部は、（ｍ×ｎ）個の乗算器と、加算回路と、を有する。（ｍ×ｎ）個の乗算器は、ｍ行およびｎ列（ｍおよびｎは１以上の整数であり、一方が１の場合には他方は２以上）の係数行列に含まれる（ｍ×ｎ）個の係数に一対一に対応して設けられる。加算回路は、順方向処理と逆方向処理とで値を加算するパターンを切り換える。【選択図】図１０
2019095860.tif 000002
【特許請求の範囲】
【請求項１】
それぞれが予め定められた演算および処理を実行する複数の層に対して複数の信号値を順方向に伝播させる順方向処理、および、前記複数の層に対して複数の誤差値を逆方向に伝播させる逆方向処理を実行させる制御部と、
前記複数の層における少なくとも一部の層間を伝播する複数の値に対して演算を実行する行列演算部と、
を備え、
前記複数の層は、第１層と、前記第１層に対して順方向に隣接する第２層とを含み、
前記行列演算部は、
ｍ行およびｎ列（ｍおよびｎは１以上の整数であり、一方が１の場合には他方は２以上）の係数行列に含まれる（ｍ×ｎ）個の係数に一対一に対応して設けられた（ｍ×ｎ）個の乗算器と、
前記順方向処理と前記逆方向処理とで、前記（ｍ×ｎ）個の乗算器のそれぞれから出力された値を加算するパターンを切り換える加算回路と、
を有する
ニューラルネットワーク装置。
【請求項２】
前記順方向処理において、
前記第１層は、前記係数行列におけるｍ個の行に一対一に対応付けられたｍ個の第１信号値を出力し、
前記（ｍ×ｎ）個の乗算器のそれぞれは、前記ｍ個の第１信号値のうちの当該乗算器が対応付けられた行に対応する第１信号値と、前記（ｍ×ｎ）個の係数のうちの当該乗算器が対応付けられた係数とを乗算し、
前記加算回路は、前記（ｍ×ｎ）個の乗算器から出力された（ｍ×ｎ）個の乗算値を列毎に加算することにより、ｎ個の順方向乗累算値を算出し、
前記逆方向処理において、
前記第２層は、前記係数行列におけるｎ個の列に一対一に対応付けられたｎ個の第１誤差値を出力し、
前記（ｍ×ｎ）個の乗算器のそれぞれは、前記ｎ個の第１誤差値のうちの当該乗算器が対応付けられた列に対応する第１誤差値と、前記（ｍ×ｎ）個の係数のうちの当該乗算器が対応付けられた係数とを乗算し、
前記加算回路は、前記（ｍ×ｎ）個の乗算器から出力された（ｍ×ｎ）個の乗算値を行毎に加算することにより、ｍ個の逆方向乗累算値を算出する
請求項１に記載のニューラルネットワーク装置。
【請求項３】
前記（ｍ×ｎ）個の乗算器のそれぞれは、ハードウェアにより実現される
請求項２に記載のニューラルネットワーク装置。
【請求項４】
第ｉ行（ｉは１以上ｍ以下の任意整数）および第ｊ列（ｊは１以上ｎ以下の任意整数）の係数に対応付けられた乗算器は、
前記順方向処理において、前記係数行列における第ｉ行に対応付けられた第１信号値と、前記係数行列に含まれる第ｉ行および第ｉ列の係数とを乗算し、
前記逆方向処理において、前記係数行列に含まれる第ｉ行および第ｉ列の係数と、前記係数行列における第ｊ列に対応付けられた第１誤差値とを乗算する
請求項２または３に記載のニューラルネットワーク装置。
【請求項５】
前記加算回路は、
前記順方向処理において、前記係数行列における第ｊ列に対応付けられたｍ個の乗算器から出力されたｍ個の乗算値を加算することにより、第ｉ行の順方向乗累算値を算出し、
前記逆方向処理において、前記係数行列における第ｉ列に対応付けられたｎ個の乗算器から出力されたｎ個の乗算値を加算することにより、第ｊ列の逆方向乗累算値を算出する
請求項４に記載のニューラルネットワーク装置。
【請求項６】
前記順方向処理において、前記第２層は、前記行列演算部により算出された前記ｎ個の順方向乗累算値のそれぞれを活性化関数に与えて、ｎ個の第２信号値を算出する
請求項２から５の何れか１項に記載のニューラルネットワーク装置。
【請求項７】
前記第１層は、ｍ個の前段乗累算値のそれぞれを誤差関数に与えて、前記係数行列におけるｍ個の行に一対一に対応付けられたｍ個の逆変換値を算出し、
前記逆方向処理において、前記第１層は、前記ｍ個の逆方向乗累算値と前記ｍ個の逆変換値とを行毎に乗算して、ｍ個の第２誤差値を算出し、
前記ｍ個の前段乗累算値は、前記順方向処理において、前記第１層が前記ｍ個の第１信号値を算出するために活性化関数に与えたｍ個の値である
請求項２から６の何れか１項に記載のニューラルネットワーク装置。
【請求項８】
第ｉ行に対応付けられた逆変換値を算出するための誤差関数は、第ｉ行に対応付けられた第１信号値を算出するための活性化関数の導関数である
請求項７に記載のニューラルネットワーク装置。
【請求項９】
前記係数行列に含まれる前記（ｍ×ｎ）個の係数を記憶する係数記憶部をさらに備える
請求項２から８の何れか１項に記載のニューラルネットワーク装置。
【請求項１０】
前記（ｍ×ｎ）個の乗算器のそれぞれは、当該乗算器が対応付けられた係数に応じたコンダクタンスに設定された抵抗変化メモリを含む
請求項２から９の何れか１項に記載のニューラルネットワーク装置。
【請求項１１】
前記順方向処理において、
前記（ｍ×ｎ）個の乗算器のそれぞれは、当該乗算器が対応付けられた行に対応する第１信号値に応じた電圧が含んでいる抵抗変化メモリに印加され、
前記加算回路は、前記（ｍ×ｎ）個の乗算器に含まれる（ｍ×ｎ）個の抵抗変化メモリに流れる電流を列毎に加算することにより、前記ｎ個の順方向乗累算値を算出し、
前記逆方向処理において、
前記（ｍ×ｎ）個の乗算器のそれぞれは、当該乗算器が対応付けられた列に対応する第１誤差値に応じた電圧が含んでいる抵抗変化メモリに印加され、
前記加算回路は、前記（ｍ×ｎ）個の乗算器に含まれる前記（ｍ×ｎ）個の抵抗変化メモリに流れる電流を行毎に加算することにより、前記ｍ個の逆方向乗累算値を算出する
請求項１０に記載のニューラルネットワーク装置。
【請求項１２】
前記（ｍ×ｎ）個の乗算器に含まれる前記（ｍ×ｎ）個の抵抗変化メモリのそれぞれは、第１端に第１信号値または第１誤差値に応じた電圧が印加され、第２端が共通信号線を介して所定電位に接続され、
前記加算回路は、前記共通信号線に流れる電流値を出力する
請求項１１に記載のニューラルネットワーク装置。
【請求項１３】
前記順方向処理または前記逆方向処理の指定、および、前記ｎ個の順方向乗累算値のうちの何れを出力するか、または、前記ｍ個の逆方向乗累算値のうちの何れを出力するかの指定を受け付けるデコーダをさらに備え、
前記デコーダは、
前記順方向処理において、第ｊ列の順方向乗累算値を出力する場合、
第ｊ列に対応付けられたｍ個の乗算器に含まれるｍ個の抵抗変化メモリに、第１信号値に応じた電圧を印加して電流を流させ、第ｊ列以外の列に対応付けられた複数の乗算器に含まれる複数の抵抗変化メモリに流れる電流を０とし、
前記逆方向処理において、第ｉ行の逆方向乗累算値を出力する場合、
第ｉ行に対応付けられたｎ個の乗算器に含まれるｎ個の抵抗変化メモリに、第１誤差値に応じた電圧を印加して電流を流させ、第ｉ行以外の行に対応する複数の乗算器に含まれる複数の抵抗変化メモリに流れる電流を０とする
請求項１２に記載のニューラルネットワーク装置。
【請求項１４】
前記ｍ個の第１信号値および前記ｎ個の第１誤差値のそれぞれは、２値であり、
第１信号値または第１誤差値に応じた電圧を印加する場合において、前記（ｍ×ｎ）個の乗算器のそれぞれは、与えられた第１信号値または与えられた第１誤差値が第１値の場合に含まれている抵抗変化メモリに所定の電圧を印加し、与えられた第１信号値または与えられた第１誤差値が第２値の場合に含まれている抵抗変化メモリに流れる電流を０とする
請求項１３に記載のニューラルネットワーク装置。
【請求項１５】
前記（ｍ×ｎ）個の乗算器のそれぞれは、それぞれに異なる荷重が割り当てられたＬ個（Ｌは２以上の整数）の抵抗変化メモリを含み、
前記Ｌ個の抵抗変化メモリは、割り当てられた荷重とコンダクタンスとを乗算した値の合計が、当該乗算器に対応付けられた係数となるように、それぞれのコンダクタンスが設定され、
前記順方向処理において、
前記（ｍ×ｎ）個の乗算器のそれぞれは、当該乗算器が対応付けられた行に対応する第１信号値に応じた電圧が、前記Ｌ個の抵抗変化メモリのそれぞれに印加され、
前記加算回路は、前記Ｌ個の抵抗変化メモリのそれぞれに流れる電流と割り当てられた荷重とを乗算した値の合計を、前記係数行列における列毎に加算することにより、前記ｎ個の順方向乗累算値を算出し、
前記逆方向処理において、
前記（ｍ×ｎ）個の乗算器のそれぞれは、当該乗算器が対応付けられた列に対応する第１誤差値に応じた電圧が、前記Ｌ個の抵抗変化メモリのそれぞれに印加され、
前記加算回路は、前記Ｌ個の抵抗変化メモリのそれぞれに流れる電流と割り当てられた荷重とを乗算した値の合計を、前記係数行列における行毎に加算することにより、前記ｍ個の逆方向乗累算値を算出する
請求項１０から１４の何れか１項に記載のニューラルネットワーク装置。
【請求項１６】
前記（ｍ×ｎ）個の乗算器のそれぞれは、ポジ側抵抗変化メモリと、ネガ側抵抗変化メモリとを含み、
前記ポジ側抵抗変化メモリおよび前記ネガ側抵抗変化メモリは、コンダクタンスの差分値が、当該乗算器に対応付けられた係数となるように、それぞれのコンダクタンスが設定され、
前記順方向処理において、
前記（ｍ×ｎ）個の乗算器のそれぞれは、当該乗算器が対応付けられた列に対応する第１信号値に応じた差動電圧が、前記ポジ側抵抗変化メモリおよび前記ネガ側抵抗変化メモリに印加され、
前記加算回路は、前記ポジ側抵抗変化メモリに流れる電流と前記ネガ側抵抗変化メモリとに流れる電流との差分値を、前記係数行列における列毎に加算することにより、前記ｎ個の順方向乗累算値を算出し、
前記逆方向処理において、
前記（ｍ×ｎ）個の乗算器のそれぞれは、当該乗算器が対応付けられた行に対応する第１誤差値に応じた差動電圧が、前記ポジ側抵抗変化メモリおよび前記ネガ側抵抗変化メモリに印加され、
前記加算回路は、前記ポジ側抵抗変化メモリに流れる電流と前記ネガ側抵抗変化メモリとに流れる電流との差分値を、前記係数行列における行毎に加算することにより、前記ｍ個の逆方向乗累算値を算出する
請求項１０から１４の何れか１項に記載のニューラルネットワーク装置。
【請求項１７】
１行およびｍ列の順方向第１行列と、ｍ行およびｎ列（ｍおよびｎは１以上の整数であり、一方が１の場合には他方は２以上）の係数行列とを行列演算して１行およびｎ列の順方向第２行列を出力する順方向処理、並びに、前記係数行列とｎ行および１列の逆方向第１行列とを行列演算してｍ行および１列の逆方向第２行列を出力する逆方向処理を実行する演算装置であって、
前記係数行列に含まれる（ｍ×ｎ）個の係数に一対一に対応して設けられた（ｍ×ｎ）個の乗算器と、
前記順方向処理と前記逆方向処理とで、前記（ｍ×ｎ）個の乗算器のそれぞれから出力された値を加算するパターンを切り換える加算回路と、
を有する
演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ニューラルネットワーク装置および演算装置に関する。
【背景技術】
【０００２】
ニューラルネットワークは、通常の演算時において、複数の層に対して、信号値を入力層から出力層に向かう方向（順方向）に伝播させる。また、ニューラルネットワークは、学習時において、複数の層に対して、誤差値を出力層から入力層へ向かう方向（逆方向）に伝播させる。
【０００３】
また、ニューラルネットワークは、隣接する２つの層の間で複数の信号値（または複数の誤差値）を伝播させる場合に、前段の層から出力された複数の信号値のそれぞれに対して係数（重み）を乗じ、係数が乗じられた複数の信号値を加算する。すなわち、ニューラルネットワークは、２つの層の間で複数の信号値（または複数の誤差値）を伝播させる場合、乗累算（積和演算）を実行する。
【０００４】
近年、ニューラルネットワークをハードウェアで実現した装置が提案されている。この装置は、通常の演算時の処理（順方向処理）を専用のハードウェアで実行する。しかし、この装置は、学習時における処理（逆方向処理）を、専用のハードウェアとは別個のプロセッサにより実行する。
【０００５】
ニューラルネットワークは、通常の演算時と学習時とで、同一の係数を用いて２つの層間の乗累算を実行する。しかし、通常の演算時と学習時とで別個のプロセッサ等により乗累算を実行した場合、通常の演算時に用いる係数と、学習時に用いる係数と間に誤差が生じ、学習精度が悪くなる可能性があった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許出願公開第２０１６／０３３６０６４号明細書
【特許文献２】米国特許出願公開第２０１６／０２８４４００号明細書
【特許文献３】米国特許出願公開第２０１５／００８８７９７号明細書
【非特許文献】
【０００７】
【非特許文献１】Geoffrey  W.  Burr,  “Analog  resistive  neuromorphic  hardware”,  IBM  Research  -  Almaden.,  BioComp  Summer  School,  ２０１７年６月３０日
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明が解決しようとする課題は、順方向処理および逆方向処理を実行するニューラルネットワーク装置および演算装置を提供することにある。
【課題を解決するための手段】
【０００９】
実施形態に係るニューラルネットワーク装置は、制御部と、行列演算部とを備える。前記制御部は、順方向処理において、それぞれが演算を実行する複数の層に対して複数の信号値を順方向に伝播させ、逆方向処理において、前記複数の層に対して複数の誤差値を逆方向に伝播させる。前記行列演算部は、前記複数の層における少なくとも一部の層間を伝播する複数の値に対して演算を実行する。前記複数の層は、第１層と、前記第１層に対して順方向に隣接する第２層とを含む。前記行列演算部は、（ｍ×ｎ）個の乗算器と、加算回路と、を有する。前記（ｍ×ｎ）個の乗算器は、ｍ行およびｎ列（ｍおよびｎは１以上の整数であり、一方が１の場合には他方は２以上）の係数行列に含まれる（ｍ×ｎ）個の係数に一対一に対応して設けられる。前記加算回路は、前記順方向処理と前記逆方向処理とで、前記（ｍ×ｎ）個の乗算器のそれぞれから出力された値を加算するパターンを切り換える。
【図面の簡単な説明】
【００１０】
【図１】実施形態に係るニューラルネットワーク装置の構成を示す図。
【図２】順方向処理の内容を示す図。
【図３】逆方向処理の内容を示す図。
【図４】複数の層に含まれる第１層および第２層を示す図。
【図５】第１層と第２層との間のリンクを示す図。
【図６】順方向処理において、行列演算部に入出力される値を示す図。
【図７】逆方向処理において、行列演算部に入出力される値を示す図。
【図８】順方向処理において、行列演算部および層演算部での演算内容を示す図。
【図９】逆方向処理において、行列演算部および層演算部での演算内容を示す図。
【図１０】実施形態に係る行列演算部の構成を示す図。
【図１１】順方向処理における行列演算部内の接続を示す図。
【図１２】逆方向処理における行列演算部内の接続を示す図。
【図１３】実施形態に係るニューラルネットワーク装置の処理の流れを示す図。
【図１４】行列演算部の第１回路例であって、順方向処理での接続を示す図。
【図１５】行列演算部の第１回路例であって、逆方向処理での接続を示す図。
【図１６】行列演算部の第２回路例を示す図。
【図１７】行列演算部の第３回路例を示す図。
【図１８】行列演算部の第４回路例を示す図。
【発明を実施するための形態】
【００１１】
以下、図面を参照しながら実施形態に係るニューラルネットワーク装置１０について説明する。実施形態に係るニューラルネットワーク装置１０は、通常の演算時におけるデータ伝播処理（順方向処理）と学習時におけるデータ伝播処理（逆方向処理）とを共通のハードウェアを用いて実行する。
【００１２】
図１は、実施形態に係るニューラルネットワーク装置１０の構成を示す図である。ニューラルネットワーク装置１０は、プロセッサ１２と、メモリ部１４と、通信部１６と、行列演算部２０とを備える。プロセッサ１２、メモリ部１４、通信部１６および行列演算部２０は、例えばバスを介して接続される。プロセッサ１２、メモリ部１４、通信部１６および行列演算部２０は、１つの半導体装置内に実装されてもよいし、１つの基板上に設けられた複数の半導体装置に実装されていてもよいし、複数の基板に設けられた複数の半導体装置に実装されていてもよい。
【００１３】
ニューラルネットワーク装置１０は、外部装置から１または複数の入力値を受信する。ニューラルネットワーク装置１０は、取得した１または複数の入力値に対してニューラルネットワークを用いた演算処理を実行する。そして、ニューラルネットワーク装置１０は、ニューラルネットワークを用いた演算処理の結果である１または複数の出力値を外部装置に送信する。
【００１４】
外部装置は、ニューラルネットワーク装置１０と同一の半導体装置に実装された機能ブロックであってもよいし、同一の基板に設けられた他の半導体装置であってもよいし、異なる基板に設けられた半導体装置であってもよい。また、外部装置は、ニューラルネットワーク装置１０とネットワークケーブルまたは無線伝送路等を介して接続された別個の装置であってもよい。
【００１５】
ニューラルネットワーク装置１０は、通常の演算処理を実行する。ニューラルネットワーク装置１０は、例えば、通常の演算処理として、パターン認識処理、データ解析処理および制御処理等の様々な情報処理を実行する。
【００１６】
さらに、ニューラルネットワーク装置１０は、通常の演算処理と並行して、学習処理を実行する。ニューラルネットワーク装置１０は、学習処理により、通常の演算処理をより適切に行うように、ニューラルネットワークに含まれる複数の係数（重み）を変更する。なお、ニューラルネットワーク装置１０は、学習処理をした結果を外部装置へ送信してもしなくてもよい。
【００１７】
プロセッサ１２は、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）またはＧＰＵ（Ｇｒａｐｈｉｃｓ    Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等であって、プログラムを実行して所定の演算機能および制御機能等を実現する。プロセッサ１２が実行するプログラムは、記憶媒体等に格納され、プロセッサ１２が記録媒体から読み出して実行する。また、プロセッサ１２が実行するプログラムは、ニューラルネットワーク装置１０に組み込まれたＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）等に格納されていてもよい。また、プロセッサ１２は、ニューラルネットワークを用いた演算処理のために特化した専用のハードウェアであってもよい。
【００１８】
プロセッサ１２は、層演算部２２、制御部２４および学習部２６の機能を実現する。層演算部２２は、ニューラルネットワークに含まれる複数の層に対応する処理を実行する。
【００１９】
複数の層のそれぞれは、入力された１または複数の値に対して所定の演算および処理をする。そして、複数の層のそれぞれは、演算および処理の結果として、１または複数の値を出力する。具体的には、通常の演算時において、複数の層のそれぞれは、入力された１または複数の値（複数の信号値）に対して、活性化関数の演算等を実行する。学習時において、複数の層のそれぞれは、誤差関数（活性化関数の導関数）の演算等を実行する。
【００２０】
制御部２４は、ニューラルネットワークに含まれる複数の層に対して、１または複数の値を伝播させる制御を行う。具体的には、通常の演算時において、制御部２４は、複数の層のうちの入力層に、外部装置から受信した１または複数の入力値を与える。続いて、通常の演算時において、制御部２４は、それぞれの層から出力された複数の信号値を、直後の層へと順方向に伝播させる順方向処理を実行する。そして、通常の演算時において、制御部２４は、複数の層のうちの出力層から出力された１または複数の出力値を取得して、外部装置へと送信する。
【００２１】
また、学習時において、制御部２４は、学習部２６により生成された１または複数の誤差値を、複数の層のうちの出力層に与える。そして、学習時において、制御部２４は、それぞれの層から出力された複数の誤差値を、直前の層へと逆方向に伝播させる逆方向処理を実行する。
【００２２】
学習部２６は、通常の演算時において、出力層から出力された１または複数の出力値を取得する。そして、学習部２６は、１または複数の出力値の誤差を表す１または複数の誤差値を算出する。
【００２３】
さらに、学習部２６は、逆方向処理を実行した結果得られた値を層演算部２２から取得し、逆方向処理においてそれぞれの層に伝播される１または複数の誤差値が小さくなるように、ニューラルネットワークに含まれる複数の係数（重み）を変更する。例えば、学習部２６は、ニューラルネットワークに含まれる複数の係数のそれぞれについて、誤差値の勾配を算出する。そして、学習部２６は、誤差値の勾配を例えば０とする方向に、複数の係数を変更する。
【００２４】
メモリ部１４は、例えば、半導体記憶装置である。メモリ部１４は、ネットワーク構成記憶部２８、係数記憶部３０、信号値記憶部３２、乗累算値記憶部３４および誤差値記憶部３６として機能する。
【００２５】
ネットワーク構成記憶部２８は、ニューラルネットワーク装置１０により実現するニューラルネットワークの構成を表す情報を記憶する。例えば、ネットワーク構成記憶部２８は、複数の層におけるそれぞれの層間（隣接する２つの層の間）のリンク関係を記憶する。また、ネットワーク構成記憶部２８は、順方向処理において複数の層のそれぞれにおいて実行される活性化関数の種類、および、逆方向処理において複数の層のそれぞれにおいて実行される誤差関数の種類等を記憶する。制御部２４は、ネットワーク構成記憶部２８に記憶された情報を参照して、順方向処理および逆方向処理を実行する。また、層演算部２２は、ネットワーク構成記憶部２８に記憶された情報を参照して、各層に対応する演算および処理を実行する。
【００２６】
係数記憶部３０は、ニューラルネットワークに含まれる複数の係数を記憶する。行列演算部２０は、係数記憶部３０から複数の値を取得する。なお、行列演算部２０も、複数の係数を記憶してもよい。この場合、メモリ部１４は、係数記憶部３０として機能しなくてもよい。
【００２７】
信号値記憶部３２は、順方向処理において複数の層のそれぞれから出力された複数の信号値を記憶する。乗累算値記憶部３４は、順方向処理において複数の層のそれぞれに与えた複数の乗累算値を記憶する。誤差値記憶部３６は、逆方向処理において複数の層のそれぞれから出力された複数の誤差値を記憶する。
【００２８】
通信部１６は、外部装置と情報の送受信をする。具体的には、通信部１６は、外部装置から、演算対象となる１または複数の入力値を受信する。また、通信部１６は、外部装置へ、演算結果である１または複数の出力値を送信する。
【００２９】
行列演算部２０は、係数行列を用いた行列乗算を実行する。本実施形態において、行列演算部２０は、プロセッサ１２とは異なるハードウェア回路である。
【００３０】
ニューラルネットワークは、複数の層におけるそれぞれの層間毎に、係数行列が設定されている。係数行列は、学習時において、適宜変更される。行列演算部２０は、順方向処理および逆方向処理を実行する場合、それぞれの層間において、前段の層から出力された複数の値（複数の信号値または複数の誤差値）と、当該層間に対応して設定された係数行列とを行列乗算する。
【００３１】
また、行列演算部２０は、同じ層間に対して、順方向処理と逆方向処理とで、共通の係数行列を用いて行列乗算を実行する。
【００３２】
なお、行列演算部２０は、複数の層間の全てについて行列乗算を実行してもよいし、複数の層間のうちの一部の層間について行列乗算を実行してもよい。行列演算部２０が複数の層間のうちの一部の層間について行列乗算を実行する場合、他の装置（例えば、プロセッサ１２）が、他の層間について行列乗算を実行する。
【００３３】
また、行列演算部２０は、複数のハードウェアに分割されていてもよい。例えば、行列演算部２０は、層間毎に異なるハードウェアで実現されていてもよい。また、行列演算部２０は、係数行列と複数の信号値（または複数の誤差値）との行列乗算に加えて、バイアス行列を加算する行列加算を実行してもよい。
【００３４】
図２は、順方向処理の内容を示す図である。ニューラルネットワークに含まれる複数の層のそれぞれは、複数のノードを含む。１つの層に含まれるノードの数は、層毎に異なってもよい。また、それぞれのノードには、活性化関数が設定されている。活性化関数は、層毎に異なってもよい。また、同一の層において、ノード毎に活性化関数が異なってもよい。
【００３５】
順方向処理において、制御部２４は、入力層に１または複数の入力値を与える。続いて、順方向処理において、制御部２４は、それぞれの層から出力された複数の信号値を、直後の層へと順方向に伝播させる。そして、順方向処理において、制御部２４は、出力層から出力された１または複数の信号を、１または複数の出力値として外部装置へと送信する。
【００３６】
図３は、逆方向処理の内容を示す図である。それぞれのノードには、誤差関数が設定されている。誤差関数は、そのノードに設定されている活性化関数の導関数である。すなわち、誤差関数は、そのノードに設定されている活性化関数の微分である。なお、誤差関数は、活性化関数の導関数を近似した関数であってもよい。
【００３７】
学習部２６は、順方向処理が終了した場合、順方向処理で出力された１または複数の出力値のそれぞれに対する誤差を表す１または複数の誤差値を算出する。続いて、逆方向処理において、制御部２４は、学習部２６により生成された１または複数の誤差値を出力層に与える。そして、逆方向処理において、制御部２４は、それぞれの層から出力された複数の誤差値を、直前の層へと逆方向に伝播させる。
【００３８】
図４は、複数の層に含まれる第１層４２および第２層４４を示す図である。本実施形態において、ニューラルネットワークにおける複数の層のうち任意の層を第１層４２とする。また、複数の層のうち、第１層４２に対して順方向に隣接する層を第２層４４とする。本実施形態において、複数の層は、このような第１層４２と、第２層４４とを含む。
【００３９】
図５は、第１層４２と第２層４４との間のリンクを示す図である。第１層４２は、ｍ個のノードを有する。また、第２層４４は、ｎ個のノードを有する。なお、ｍおよびｎは１以上の整数である。ただし、ｍおよびｎのうちの一方が１の場合、他方は２以上である。
【００４０】
第１層４２と第２層４４との間には、第１層４２に含まれるｍ個のノードの全てと、第２層４４に含まれるｎ個のノードの全てとの間を接続する（ｍ×ｎ）本のリンクが存在する。（ｍ×ｎ）本のリンクのそれぞれには、係数（重み）が設定されている。
【００４１】
本実施形態では、第１層４２のｉ番目のノードと第２層４４のｊ番目のノードとの間のリンクの係数を、Ｗｉｊと表す。ｉは、１以上ｍ以下の任意整数を表す。ｊは、１以上ｎ以下の任意整数を表す。
【００４２】
第１層４２と第２層４４との間の（ｍ×ｎ）本のリンクに設定された（ｍ×ｎ）個の係数は、ｍ行およびｎ列の係数行列として表される。係数行列は、下記の式（１）のように表される。
【数１】
2019095860.tif 000003
【００４３】
図６は、順方向処理において、行列演算部２０に入出力される値を示す図である。順方向処理において、第１層４２は、係数行列におけるｍ個の行に一対一に対応付けられたｍ個の第１信号値を出力する。順方向処理において、制御部２４は、第１層４２から出力されたｍ個の第１信号値を行列演算部２０に与える。
【００４４】
順方向処理において、行列演算部２０は、第１層４２から出力されたｍ個の第１信号値を取得する。順方向処理において、行列演算部２０は、取得したｍ個の第１信号値と対象行列とを行列乗算して、係数行列におけるｎ個の列に一対一に対応付けられたｎ個の順方向乗累算値を出力する。順方向処理において、制御部２４は、行列演算部２０から出力されたｎ個の順方向乗累算値を第２層４４に与える。そして、順方向処理において、第２層４４は、行列演算部２０から出力されたｎ個の順方向乗累算値を取得する。
【００４５】
本実施形態において、ｍ個の第１信号値をｙ１，…，ｙｉ，…，ｙｍと表す。ｎ個の順方向乗累算値をｖ１，…，ｖｊ，…，ｖｎと表す。この場合、順方向処理において、行列演算部２０が実行する行列乗算は、下記の式（２）のように表すことができる。
【数２】
2019095860.tif 000004
【００４６】
ｍ個の第１信号値は、１行およびｍ列の行列（順方向第１行列）に相当する。また、ｎ個の順方向乗累算値は、１行およびｎ列の行列（順方向第２行列）に相当する。
【００４７】
図７は、逆方向処理において、行列演算部２０に入出力される値を示す図である。逆方向処理において、第２層４４は、係数行列におけるｎ個の列に一対一に対応付けられたｎ個の第１誤差値を出力する。逆方向処理において、制御部２４は、第２層４４から出力されたｎ個の第１誤差値を行列演算部２０に与える。
【００４８】
逆方向処理において、行列演算部２０は、第２層４４から出力されたｎ個の第１誤差値を取得する。逆方向処理において、行列演算部２０は、対象行列と取得したｎ個の第１誤差値とを行列乗算して、係数行列におけるｍ個の行に一対一に対応付けられたｍ個の逆方向乗累算値を出力する。逆方向処理において、制御部２４は、行列演算部２０から出力されたｍ個の逆方向乗累算値を第１層４２に与える。そして、逆方向処理において、第１層４２は、行列演算部２０から出力されたｍ個の逆方向乗累算値を取得する。
【００４９】
本実施形態において、ｎ個の第１誤差値をｅ１，…，ｅｊ，…，ｅｎと表す。ｍ個の逆方向乗累算値をｕ１，…，ｕｊ，…，ｕｍと表す。この場合、逆方向処理において、行列演算部２０が実行する行列乗算は、下記の式（３）のように表すことができる。
【数３】
2019095860.tif 000005
【００５０】
ｎ個の第１誤差値は、ｎ行および１列の行列（逆方向第１行列）に相当する。また、ｍ個の逆方向乗累算値は、ｍ行および１列の行列（逆方向第２行列）に相当する。
【００５１】
図８は、順方向処理において、行列演算部２０および層演算部２２で実行される演算内容を示す図である。
【００５２】
順方向処理において、行列演算部２０は、下記の式（４）に示す演算を実行して、第ｊ列に対応する順方向乗累算値（ｖｊ）を算出する。
【数４】
2019095860.tif 000006
【００５３】
すなわち、行列演算部２０は、係数行列の第ｊ列について、行毎に、係数と第１信号値とを乗算して、ｍ個の乗算値（Ｗ１ｊ・ｙ１，…，Ｗｉｊ・ｙｉ，…，Ｗｍｊ・ｙｍ）を算出する。そして、行列演算部２０は、係数行列の第ｊ列について、算出したｍ個の乗算値を加算する。これにより、行列演算部２０は、第ｊ行に対応する順方向乗累算値（ｖｊ）を算出することができる。
【００５４】
行列演算部２０は、このような乗累算（積和演算）を、係数行列に含まれるｎ個の列のそれぞれについて実行する。これにより、行列演算部２０は、ｎ個の順方向乗累算値を算出することができる。
【００５５】
続いて、順方向処理において、第２層４４は、下記の式（５）に示す演算を実行して、第ｊ列に対応する第２信号値（ｙ２ｊ）を算出する。なお、第２層４４における第ｊ列に対応する活性化関数を、φｊ（）と表す。
【数５】
2019095860.tif 000007
【００５６】
すなわち、第２層４４は、第ｊ列に対応した順方向乗累算値（ｖｊ）を、第ｊ列に対応する活性化関数に与えて、第ｊ列に対応する第２信号値（ｙ２ｊ）を算出する。
【００５７】
第２層４４は、このような活性化関数の演算を、ｎ個の列のそれぞれについて実行する。これにより、第２層４４は、ｎ個の第２信号値（ｙ２１，…，ｙ２ｊ，…，ｙ２ｎ）を算出することができる。
【００５８】
図９は、逆方向処理において、行列演算部２０および層演算部２２で実行される演算内容を示す図である。
【００５９】
逆方向処理において、行列演算部２０は、下記の式（６）に示す演算を実行して、第ｉ行に対応する逆方向乗累算値（ｕｉ）を算出する。
【数６】
2019095860.tif 000008
【００６０】
すなわち、行列演算部２０は、係数行列の第ｉ行について、列毎に、係数と第１誤差値とを乗算して、ｎ個の乗算値（ｅ１・Ｗｉ１，…，ｅｊ・Ｗｉｊ，…，ｅｎ・Ｗｉｎ）を算出する。そして、行列演算部２０は、係数行列の第ｉ行について、算出したｎ個の乗算値を加算する。これにより、行列演算部２０は、第ｉ行に対応する逆方向乗累算値（ｕｉ）を算出することができる。
【００６１】
行列演算部２０は、このような乗累算（積和演算）を、係数行列に含まれるｍ個の行のそれぞれについて実行する。これにより、行列演算部２０は、ｍ個の逆方向乗累算値を算出することができる。
【００６２】
また、第１層４２は、当該逆方向処理に対応する順方向処理において、行列演算部２０からｍ個の前段乗累算値を受け取っている。ｍ個の前段乗累算値は、順方向処理において、第１層４２の前段の層から、第１層４２へと複数の信号値を伝播する際に、行列演算部２０により算出された値である。すなわち、ｍ個の前段乗累算値は、順方向処理において、第１層４２がｍ個の第１信号値（ｙ１，…，ｙｉ，…，ｙｍ）を算出するために活性化関数に与えたｍ個の値である。本実施形態において、ｍ個の前段乗累算値を、ｖ１１，…，ｖ１ｉ，…，ｖ１ｍと表す。
【００６３】
続いて、逆方向処理において、第１層４２は、下記の式（７）に示す演算を実行して、第ｉ行に対応する第２誤差値（ｅ２ｉ）を算出する。なお、第１層４２における第ｉ行に対応する誤差関数を、φ´ｉ（）と表す。
【数７】
2019095860.tif 000009
【００６４】
すなわち、第１層４２は、第ｉ行に対応した前段乗累算値（ｖ１ｉ）を、第ｉ行に対応する誤差関数に与えて、第ｉ行に対応する逆変換値（φ´ｉ（ｖ１ｉ））を算出する。さらに、第２層４４は、第ｉ行に対応する逆変換値（φ´ｉ（ｖ１ｉ））と、第ｉ行に対応する逆方向乗累算値（ｕｉ）とを乗算して、第ｉ行に対応する第２誤差値（ｅ２ｉ）を算出する。
【００６５】
第１層４２は、このような誤差関数の演算を、ｍ個の行のそれぞれについて実行する。これにより、第１層４２は、ｍ個の第２誤差値（ｅ２１，…，ｅ２ｉ，…，ｅ２ｍ）を算出することができる。
【００６６】
図１０は、実施形態に係る行列演算部２０の構成を示す図である。行列演算部２０は、ニューラルネットワークに含まれる複数の層のうち、第１層４２および第２層４４の層間における行列乗算を実行するための回路構成として、図１０に示すような回路を含む。行列演算部２０は、第１層４２と第２層４４との層間以外の１以上の層間のそれぞれについても、図１０と同等の回路を含む。
【００６７】
行列演算部２０は、取得回路５２と、（ｍ×ｎ）個の乗算器５４と、（ｍ×ｎ）個の係数メモリ５６と、加算回路５８と、デコーダ６０とを有する。
【００６８】
順方向処理において、取得回路５２は、層演算部２２から、ｍ個の第１信号値（ｙ１〜ｙｍ）を取得する。ｍ個の第１信号値（ｙ１〜ｙｍ）は、係数行列におけるｍ個の行に一対一に対応付けられている。また、逆方向処理において、取得回路５２は、層演算部２２から、ｎ個の第１誤差値（ｅ１〜ｅｎ）を取得する。ｎ個の第１誤差値（ｅ１〜ｅｎ）は、係数行列におけるｎ個の列に一対一に対応付けられている。
【００６９】
（ｍ×ｎ）個の乗算器５４は、係数行列に含まれる（ｍ×ｎ）個の係数に一対一に対応して設けられる。例えば、乗算器５４−ｉｊは、第ｉ行および第ｊ列の係数（Ｗｉｊ）に対応付けられている。
【００７０】
順方向処理において、（ｍ×ｎ）個の乗算器５４のそれぞれは、ｍ個の第１信号値のうちの当該乗算器５４が対応付けられた行に対応する第１信号値と、係数行列に含まれる（ｍ×ｎ）個の係数のうちの当該乗算器５４が対応付けられた係数とを乗算する。例えば、順方向処理において、第ｉ行および第ｊ列の係数（Ｗｉｊ）に対応付けられた乗算器５４−ｉｊは、係数行列における第ｉ行に対応付けられた第１信号値（ｙｉ）と、係数行列に含まれる第ｉ行および第ｉ列の係数（Ｗｉｊ）とを乗算する。
【００７１】
逆方向処理において、（ｍ×ｎ）個の乗算器５４のそれぞれは、ｎ個の第１誤差値のうちの当該乗算器５４が対応付けられた列に対応する第１誤差値と、係数行列に含まれる（ｍ×ｎ）個の係数のうちの当該乗算器５４が対応付けられた係数とを乗算する。例えば、逆方向処理において、第ｉ行および第ｊ列の係数（Ｗｉｊ）に対応付けられた乗算器５４−ｉｊは、係数行列における第ｊ列に対応付けられた第１誤差値（ｅｊ）と、係数行列に含まれる第ｉ行および第ｉ列の係数（Ｗｉｊ）とを乗算する。
【００７２】
（ｍ×ｎ）個の乗算器５４のそれぞれは、ハードウェアにより実現される。乗算器５４は、例えば、アナログ信号を乗算するアナログ乗算回路であってもよいし、デジタル信号を乗算するデジタル乗算回路であってもよい。
【００７３】
（ｍ×ｎ）個の係数メモリ５６は、ｍ行およびｎ列の係数行列に含まれる（ｍ×ｎ）個の係数に一対一に対応して設けられる。例えば、係数メモリ５６−ｉｊは、第ｉ行および第ｊ列の係数（Ｗｉｊ）に対応付けられている。
【００７４】
（ｍ×ｎ）個の係数メモリ５６のそれぞれは、対応付けられている係数を記憶し、記憶している係数を対応する乗算器５４に与える。例えば、係数メモリ５６−ｉｊは、第ｉ行および第ｊ列の係数（Ｗｉｊ）を記憶して、乗算器５４−ｉｊに与える。
【００７５】
（ｍ×ｎ）個の係数メモリ５６のそれぞれは、学習部２６により係数が書き込まれる。初期動作時（例えば工場出荷時等）には、（ｍ×ｎ）個の係数メモリ５６のそれぞれは、予め定められた値の係数を記憶していてもよい。
【００７６】
なお、（ｍ×ｎ）個の乗算器５４のそれぞれが係数を記憶する記憶機能を有してもよい。この場合、行列演算部２０は、（ｍ×ｎ）個の係数メモリ５６を有さない構成であってもよい。
【００７７】
例えば、乗算器５４は、コンダクタンスが変更できる抵抗器であってもよい。この場合、乗算器５４は、コンダクタンスが係数に設定され、係数を記憶することができる。このような乗算器５４は、第１信号値（または第１誤差値）に応じた電圧が印加される。そして、このような乗算器５４は、電流値を、第１誤差値（または第１誤差値）と係数とを乗算した乗算値として出力する。
【００７８】
また、乗算器５４は、キャパシタンスが変更できる容量器であってもよい。この場合、乗算器５４は、キャパシタンスが係数に設定され、係数を記憶することができる。このような乗算器５４は、第１信号値（または第１誤差値）に応じた電圧が印加される。そして、このような乗算器５４は、蓄積した電荷量を、第１信号値（または第１誤差値）と係数とを乗算した乗算値として出力する。
【００７９】
順方向処理において、加算回路５８は、（ｍ×ｎ）個の乗算器５４から出力された（ｍ×ｎ）個の乗算値を列毎に加算することにより、ｎ個の順方向乗累算値（ｖ１〜ｖｎ）を算出する。そして、順方向処理において、加算回路５８は、算出したｎ個の順方向乗累算値（ｖ１〜ｖｎ）を層演算部２２に出力する。
【００８０】
逆方向処理において、加算回路５８は、（ｍ×ｎ）個の乗算器５４から出力された（ｍ×ｎ）個の乗算値を行毎に加算することにより、ｍ個の逆方向乗累算値（ｕ１〜ｕｍ）を算出する。そして、逆方向処理において、加算回路５８は、算出したｍ個の逆方向乗累算値（ｕ１〜ｕｍ）を層演算部２２に出力する。
【００８１】
デコーダ６０は、制御部２４から、順方向処理および逆方向処理のうち何れの処理を実行するかの指示を受け付ける。デコーダ６０は、順方向処理が指定された場合には、さらに、制御部２４から、何れの列に対応する順方向乗累算値を出力するのかの指定を受け付けてもよい。また、デコーダ６０は、逆方向処理が指定された場合には、さらに、制御部２４から、何れの列に対応する逆方向乗累算値を出力するのかの指定を受け付けてもよい。
【００８２】
デコーダ６０は、受け付けた指示に応じて取得回路５２を制御して、（ｍ×ｎ）個の乗算器５４のそれぞれに対して、何れの値を与えるかを切り換える。また、デコーダ６０は、受け付けた指示に応じて加算回路５８を制御して、（ｍ×ｎ）個の乗算器５４から出力された（ｍ×ｎ）個の値を加算するパターンを切り換える。
【００８３】
図１１は、順方向処理における行列演算部２０内の接続を示す図である。順方向処理において、取得回路５２は、ｍ個の第１信号値（ｙ１〜ｙｍ）のうち、第ｉ行に対応する第１信号値（ｙｉ）を、係数行列の第ｉ行に含まれるｎ個の係数に対応付けられたｎ個の乗算器５４−ｉ１〜５４−ｉｎに与える。
【００８４】
順方向処理において、加算回路５８は、係数行列における第ｊ列に含まれるｍ個の係数に対応付けられたｍ個の乗算器５４−１ｊ〜５４−ｍｊから出力されたｍ個の乗算値を加算して、第ｊ列に対応する順方向乗累算値（ｖｊ）を算出する。以上のような処理を実行することにより、順方向処理において、加算回路５８は、（ｍ×ｎ）個の乗算器５４から出力された（ｍ×ｎ）個の乗算値を列毎に加算して、ｎ個の順方向乗累算値（ｖ１〜ｖｎ）を算出することができる。
【００８５】
図１２は、逆方向処理における行列演算部２０内の接続を示す図である。逆方向処理において、取得回路５２は、ｎ個の第１誤差値（ｅ１〜ｅｎ）のうち、第ｊ列に対応する第１誤差値（ｅｊ）を、係数行列の第ｊ列に含まれるｍ個の係数に対応付けられたｍ個の乗算器５４−１ｊ〜５４−ｍｊに与える。
【００８６】
逆方向処理において、加算回路５８は、係数行列における第ｉ行に含まれるｎ個の係数に対応付けられたｎ個の乗算器５４−ｉ１〜５４−ｉｎから出力されたｎ個の乗算値を加算して、第ｉ列に対応する逆方向乗累算値（ｕｉ）を算出する。以上のような処理を実行することにより、逆方向処理において、加算回路５８は、（ｍ×ｎ）個の乗算器５４から出力された（ｍ×ｎ）個の乗算値を行毎に加算して、ｍ個の逆方向乗累算値（ｕ１〜ｕｍ）を算出することができる。
【００８７】
図１３は、実施形態に係るニューラルネットワーク装置１０の処理の流れを示すフローチャートである。ニューラルネットワーク装置１０は、図１３に示すような流れで処理を実行する。
【００８８】
まず、Ｓ１１において、通信部１６は、外部装置から、１または複数の入力値を受信する。制御部２４は、受信した１または複数の入力値をニューラルネットワークに含まれる複数の層における先頭の層に与える。なお、ここでは、ニューラルネットワークにおける先頭の層は、信号を取得するのみで演算処理をしないものとする。
【００８９】
続いて、Ｓ１２において、制御部２４は、層間を指定する変数ｘに１を代入する。そして、制御部２４は、指定された層間における前段の層を第１層４２とし、後段の層を第２層４４として、続くＳ１３〜Ｓ１６の順方向処理を実行する。
【００９０】
Ｓ１３において、制御部２４は、第１層４２から出力されたｍ個の第１信号値を行列演算部２０に与える。行列演算部２０は、与えられたｍ個の第１信号値と、指定された層間に対して設定されている係数行列とを行列乗算して、ｎ個の順方向乗累算値を算出する。続いて、Ｓ１４において、制御部２４は、算出されたｎ個の順方向乗累算値を、層間を指定する番号（変数ｘ）に対応させて、乗累算値記憶部３４に記憶させる。
【００９１】
続いて、Ｓ１５において、制御部２４は、算出されたｎ個の順方向乗累算値を層演算部２２に与える。層演算部２２は、与えられたｎ個の順方向乗累算値のそれぞれを、第２層４４に対して設定されている活性化関数に与えて、ｎ個の第２信号値を算出する。続いて、Ｓ１６において、制御部２４は、算出されたｎ個の第２信号値を、層間を指定する番号（変数ｘ）に対応させて、信号値記憶部３２に記憶させる。
【００９２】
続いて、Ｓ１７において、制御部２４は、複数の層における末尾の層間まで処理が完了したか否かを判断する。
【００９３】
末尾の層間まで処理を完了していない場合（Ｓ１７のＮｏ）、制御部２４は、処理をＳ１８に進める。Ｓ１８において、制御部２４は、層間を指定する番号（変数ｘ）に１を加算して、処理対象となる層間を順方向に１つ移動させる。そして、制御部２４は、処理をＳ１３に戻す。この場合において、制御部２４は、順方向に移動させた後の層間における前段の層を第１層４２とし、後段の層を第２層４４とする。さらに、制御部２４は、Ｓ１５で算出したｎ個の第２信号値を、ｍ個の第１信号値に置き換えて、続くＳ１３〜Ｓ１６の順方向処理を実行する。
【００９４】
末尾の層間まで処理を完了した場合（Ｓ１７のＹｅｓ）、制御部２４は、処理をＳ１９に進める。Ｓ１９において、通信部１６は、直前の層間の処理で算出したｍ個の第２信号値を１または複数の出力値として、外部装置に送信する。なお、ここでは、ニューラルネットワークにおける末尾の層は、信号を出力するのみで演算処理をしないものとする。
【００９５】
続いて、Ｓ２０において、制御部２４は、外部装置に送信した１または複数の出力値の誤差を表す１または複数の誤差値を取得する。制御部２４は、学習部２６に１または複数の誤差値を算出させてもよいし、ニューラルネットワーク装置１０の外に設けられた情報処理装置から１または複数の誤差値を受信してもよい。
【００９６】
続いて、Ｓ２１において、制御部２４は、複数の層における、層間を指定する変数ｘに、ニューラルネットワークの層間の数を示すｍａｘを代入する。そして、制御部２４は、指定した層間における前段の層を第１層４２とし、後段の層を第２層４４として、続くＳ２２〜Ｓ２５の逆方向処理を実行する。
【００９７】
Ｓ２２において、制御部２４は、第２層４４から出力されたｎ個の第１誤差値を行列演算部２０に与える。行列演算部２０は、与えられたｎ個の第１誤差値と、指定された層間に対して設定されている係数行列とを行列乗算して、ｍ個の逆方向乗累算値を算出する。そして、制御部２４は、行列演算部２０により算出されたｍ個の逆方向乗累算値を層演算部２２に与える。
【００９８】
続いて、Ｓ２３において、制御部２４は、（ｘ−１）により指定される層間（第１層４２と、第１層４２に対して順方向の前段の層との間）に対応付けて記憶されているｍ個の順方向乗累算値を、乗累算値記憶部３４から読み出す。そして、制御部２４は、読み出したｍ個の順方向乗累算値を層演算部２２に与える。さらに、層演算部２２は、与えられたｍ個の順方向乗累算値のそれぞれを、第１層４２に対して設定されている誤差関数に与えて、ｍ個の逆変換値を算出する。
【００９９】
続いて、Ｓ２４において、層演算部２２は、与えられたｍ個の逆方向乗累算値のそれぞれと、算出したｍ個の逆変換値のうち対応する行の逆変換値とを乗算する。これにより、層演算部２２は、ｍ個の第２誤差値を算出することができる。
【０１００】
続いて、Ｓ２５において、制御部２４は、算出されたｍ個の第２誤差値を、層間を指定する番号（変数ｘ）に対応させて、誤差値記憶部３６に記憶させる。
【０１０１】
続いて、Ｓ２６において、制御部２４は、複数の層における先頭の層間まで処理が完了したか否かを判断する。
【０１０２】
先頭の層間まで処理を完了していない場合（Ｓ２６のＮｏ）、制御部２４は、処理をＳ２７に進める。Ｓ２７において、制御部２４は、層間を指定する番号（変数ｘ）から１を減算して、処理対象となる層間を逆方向に１つ移動させる。そして、制御部２４は、処理をＳ２２に戻す。この場合において、制御部２４は、逆方向に移動させた後の層間における前段の層を第１層４２とし、後段の層を第２層４４とする。さらに、制御部２４は、Ｓ２５で算出したｍ個の第２誤差値を、ｎ個の第１誤差値と置き換えて、続くＳ２２〜Ｓ２５の逆方向処理を実行する。
【０１０３】
先頭の層間まで処理を完了した場合（Ｓ２６のＹｅｓ）、制御部２４は、処理をＳ２８に進める。Ｓ２８において、学習部２６は、係数行列に含まれる（ｍ×ｎ）個の係数のそれぞれについて、勾配を算出する。例えば、学習部２６は、信号値記憶部３２に記憶された層間毎の複数の信号値および誤差値記憶部３６に記憶された層間毎の複数の誤差値に基づき、複数の係数のそれぞれに対する勾配を算出する。
【０１０４】
続いて、Ｓ２９において、学習部２６は、算出した勾配に基づき、複数の係数を変更する。例えば、学習部２６は、勾配が小さくなるように、複数の係数のそれぞれを変更する。例えば、学習部２６は、係数記憶部３０に記憶されている複数の係数を書き換える。また、学習部２６は、係数記憶部３０に変更後の複数の係数を記憶させる。
【０１０５】
そして、制御部２４は、学習部２６がＳ２９の処理を完了した後、本フローを終了する。
【０１０６】
図１４は、行列演算部２０の第１回路例であって、順方向処理をする場合の接続を示す図である。図１５は、行列演算部２０の第１回路例であって、逆方向処理をする場合の接続を示す図である。行列演算部２０は、例えば、図１４および図１５に示すような、第１回路例に示す構成であってもよい。
【０１０７】
第１回路例に係る（ｍ×ｎ）個の乗算器５４のそれぞれは、電圧発生部６２と、抵抗変化メモリ６４とを含む。第１回路例に係る加算回路５８は、共通信号線６６と、（ｍ×ｎ）個のスイッチ６８と、電流検出部７０とを含む。
【０１０８】
電圧発生部６２は、取得回路５２から与えられた値に応じた電圧を発生する。抵抗変化メモリ６４は、第１端が電圧発生部６２の出力端に接続される。抵抗変化メモリ６４は、第１端とは異なる第２端が、当該抵抗変化メモリ６４を含む乗算器５４に対応して設けられたスイッチ６８を介して、共通信号線６６に接続される。
【０１０９】
共通信号線６６は、所定電位（例えば、グランド電位またはコモン電位等）に接続されている。（ｍ×ｎ）個のスイッチ６８は、（ｍ×ｎ）個の乗算器５４に一対一で対応して設けられる。（ｍ×ｎ）個のスイッチ６８のそれぞれは、対応する乗算器５４に含まれる抵抗変化メモリ６４と共通信号線６６との間を、デコーダ６０の制御に応じてオン（接続）またはオフ（切断）する。電流検出部７０は、共通信号線６６に流れる電流を検出する。
【０１１０】
（ｍ×ｎ）個の乗算器５４のそれぞれに含まれる抵抗変化メモリ６４は、コンダクタンスが、対象行列における、当該乗算器５４が対応付けられている係数に設定されている。例えば、乗算器５４−ｉｊに含まれる抵抗変化メモリ６４は、コンダクタンスが第ｉ行および第ｊ列の係数（Ｗｉｊ）に設定されている。
【０１１１】
図１４に示すように、順方向処理において、第ｉ行の乗算器５４−ｉ１，…，５４−ｉｊ，…，５４−ｉｎに含まれるｎ個の電圧発生部６２には、第ｉ行の第１信号値（ｙｉ）が与えられる。順方向処理において、デコーダ６０は、列毎に順方向乗累算値を出力させるように、（ｍ×ｎ）個のスイッチ６８を切り換え制御する。例えば、第ｊ列の順方向乗累算値を出力する場合、デコーダ６０は、第ｊ列の乗算器５４−１ｊ，５４−２ｊ，…，５４−ｉｊ，…，５４−ｍｊに対応付けられたｍ個のスイッチ６８をオンとし、それ以外の複数のスイッチ６８をオフとする。
【０１１２】
これにより、順方向処理において、第ｊ列の順方向乗累算値を出力する場合、デコーダ６０は、第ｊ列に対応付けられたｍ個の乗算器５４に含まれるｍ個の抵抗変化メモリ６４に、第１信号値に応じた電圧を印加して電流を流させる。そして、デコーダ６０は、第ｊ列以外の列に対応付けられた複数の乗算器５４に含まれる複数の抵抗変化メモリ６４に流れる電流を０とする。
【０１１３】
この結果、共通信号線６６には、第ｊ列に対応付けられたｍ個の乗算器５４に含まれるｍ個の抵抗変化メモリ６４に流れる電流の合計が流れる。従って、電流検出部７０は、第ｊ列に対応付けられたｍ個の乗算器５４に含まれるｍ個の抵抗変化メモリ６４に流れる電流の合計値を、第ｊ列の順方向乗累算値（ｖｊ）として出力することができる。
【０１１４】
図１５に示すように、逆方向処理において、第ｊ列の乗算器５４−１ｊ，５４−２ｊ，…，５４−ｉｊ，…，５４−ｍｊに含まれるｍ個の電圧発生部６２には、第ｊ列の第１誤差値（ｅｊ）が与えられる。逆方向処理において、デコーダ６０は、行毎に、逆方向乗累算値を出力させるように、（ｍ×ｎ）個のスイッチ６８を切り換え制御する。例えば、第ｉ行の逆方向乗累算値を出力する場合、デコーダ６０は、第ｉ行の乗算器５４−ｉ１，５４−ｉ２，…，５４−ｉｊ，…，５４−ｉｎに対応付けられたｎ個のスイッチ６８をオンとし、それ以外の複数のスイッチ６８をオフとする。
【０１１５】
これにより、逆方向処理において、第ｉ行の逆方向乗累算値を出力する場合、デコーダ６０は、第ｉ行に対応付けられたｎ個の乗算器５４に含まれるｎ個の抵抗変化メモリ６４に、第１誤差値に応じた電圧を印加して電流を流させる。さらに、デコーダ６０は、第ｉ行以外の行に対応付けられた複数の乗算器５４に含まれる複数の抵抗変化メモリ６４に流れる電流を０とする。
【０１１６】
この結果、共通信号線６６には、第ｉ行に対応付けられたｎ個の乗算器５４に含まれるｎ個の抵抗変化メモリ６４に流れる電流の合計が流れる。従って、電流検出部７０は、第ｉ行に対応付けられたｎ個の乗算器５４に含まれるｎ個の抵抗変化メモリ６４に流れる電流の合計値を、第ｉ行の逆方向乗累算値（ｕｉ）として出力することができる。
【０１１７】
図１６は、行列演算部２０の第２回路例を示す図である。第２回路例に係る行列演算部２０は、第１回路例に係る行列演算部２０と略同一の機能を有する部材を含む。略同一の機能を有する部材については、同一の符号（または同一符号とサブ符号との組から構成された符号）を付けて相違点を除き詳細な説明を省略する。
【０１１８】
２値で表される信号値、２値で表される誤差値および２値で表される係数を用いるニューラルネットワークが知られている。このようなニューラルネットワークの演算をする場合、行列演算部２０は、図１６のような、第２回路例に示す構成であってよい。なお、本実施形態では、２値で表される信号として、Ｈ論理またはＬ論理を切り換える信号を用いた例を示す。しかし、２値で表される信号は、０または１を切り換える信号、−１または＋１を切り換える信号、または、任意の第１値または任意の第２値を切り換える信号等であってもよい。
【０１１９】
第２回路例に係る（ｍ×ｎ）個の乗算器５４のそれぞれは、ＡＮＤ回路７２と、抵抗変化メモリ６４と、電圧スイッチ７４とを含む。また、第２回路例に係る加算回路５８は、共通信号線６６と、電流検出部７０とを含む。
【０１２０】
ＡＮＤ回路７２は、取得回路５２から出力された信号値または誤差値と、デコーダ６０から与えられたセレクト信号とをＡＮＤ演算する。すなわち、ＡＮＤ回路７２は、デコーダ６０から与えられたセレクト信号がＨ論理の場合、取得回路５２から出力された信号値または誤差値を出力し、セレクト信号がＬ論理の場合、信号値または誤差値に関わらず、常時、Ｌ論理を出力する。
【０１２１】
電圧スイッチ７４は、ＡＮＤ回路７２の出力値がＨ論理の場合にオン（接続）、ＡＮＤ回路７２の出力値がＬ論理の場合にオフする。電圧スイッチ７４は、オンの場合に、第１電位（例えば、グランド電位またはコモン電位等）と、抵抗変化メモリ６４の第１端との間を接続する。電圧スイッチ７４は、オフの場合に、第１電位と、抵抗変化メモリ６４の第１端との間を切断（オープン）する。
【０１２２】
抵抗変化メモリ６４は、第２端が共通信号線６６に接続される。共通信号線６６は、第１電位とは異なる第２電位（例えば、電源電位等）に接続されている。電流検出部７０は、共通信号線６６に流れる電流を検出する。
【０１２３】
従って、抵抗変化メモリ６４は、セレクト信号がＨ論理の場合、取得回路５２から出力された信号値または誤差値に応じた電圧が印加されて、電流が流れる。また抵抗変化メモリ６４は、セレクト信号がＬ論理の場合、取得回路５２から出力された信号値または誤差値に関わらず、電圧が印加されず（すなわち、０の電圧が印加され）、電流が流れない。
【０１２４】
（ｍ×ｎ）個の乗算器５４のそれぞれに含まれる抵抗変化メモリ６４は、コンダクタンスが、対象行列における、当該乗算器５４が対応付けられている係数に応じた値に設定されている。
【０１２５】
本回路例においては、係数は、２値で表される。例えば、係数がＨ論理の場合、抵抗変化メモリ６４は、コンダクタンスが第１の値に設定される。また、係数がＬ論理の場合、抵抗変化メモリ６４は、コンダクタンスが第１の値とは異なる第２の値に設定される。第２の値は、例えば、第１の値よりも小さい、例えば、０に非常に近い値である。
【０１２６】
順方向処理において、第ｉ行の乗算器５４−ｉ１，５４−ｉ２，…，５４−ｉｊ，…，５４−ｉｎに含まれるｎ個のＡＮＤ回路７２には、第ｉ行の第１信号値（ｙｉ）が与えられる。また、順方向処理において、デコーダ６０は、列毎に順次に順方向乗累算値を出力させるように、（ｍ×ｎ）個のＡＮＤ回路７２のそれぞれにセレクト信号を与える。例えば、第ｊ列の順方向乗累算値を出力させる場合には、デコーダ６０は、第ｊ列の乗算器５４−１ｊ，５４−２ｊ，…，５４−ｉｊ，…，５４−ｍｊに含まれるｍ個のＡＮＤ回路７２にＨ論理を与え、それ以外のＡＮＤ回路７２にＬ論理を与える。
【０１２７】
これにより、順方向処理において、第ｊ列の順方向乗累算値を出力する場合、デコーダ６０は、第ｊ列に対応付けられたｍ個の乗算器５４に含まれるｍ個の抵抗変化メモリ６４に、第１信号値に応じた電圧を印加して電流を流させる。そして、デコーダ６０は、第ｊ列以外の列に対応付けられた複数の乗算器５４に含まれる複数の抵抗変化メモリ６４に流れる電流を０とする。
【０１２８】
この結果、共通信号線６６には、第ｊ列に対応付けられたｍ個の乗算器５４に含まれるｍ個の抵抗変化メモリ６４に流れる電流の合計が流れる。従って、電流検出部７０は、第ｊ列に対応付けられたｍ個の乗算器５４に含まれるｍ個の抵抗変化メモリ６４に流れる電流の合計値を、第ｊ列の順方向乗累算値（ｖｊ）として出力することができる。
【０１２９】
逆方向処理において、第ｊ列の乗算器５４−１ｊ，５４−２ｊ，…，５４−ｉｊ，…，５４−ｍｊに含まれるｍ個のＡＮＤ回路７２には、第ｊ列の第１誤差値（ｅｊ）が与えられる。逆方向処理において、デコーダ６０は、行毎に順次に逆方向乗累算値を出力させるように、（ｍ×ｎ）個のＡＮＤ回路７２のそれぞれにセレクト信号を与える。例えば、第ｉ行の逆方向乗累算値を出力させる場合には、デコーダ６０は、第ｉ行の乗算器５４−ｉ１，５４−ｉ２，…，５４−ｉｊ，…，５４−ｉｎに含まれるｎ個のＡＮＤ回路７２にＨ論理を与え、それ以外の複数のＡＮＤ回路７２にＬ論理を与える。
【０１３０】
これにより、逆方向処理において、第ｉ行の逆方向乗累算値を出力する場合、デコーダ６０は、第ｉ行に対応付けられたｎ個の乗算器５４に含まれるｎ個の抵抗変化メモリ６４に、第１誤差値に応じた電圧を印加して電流を流させる。さらに、デコーダ６０は、第ｉ行以外の行に対応付けられた複数の乗算器５４に含まれる複数の抵抗変化メモリ６４に流れる電流を０とする。
【０１３１】
この結果、共通信号線６６には、第ｉ行に対応付けられたｎ個の乗算器５４に含まれるｎ個の抵抗変化メモリ６４に流れる電流の合計が流れる。従って、電流検出部７０は、第ｉ行に対応付けられたｎ個の乗算器５４に含まれるｎ個の抵抗変化メモリ６４に流れる電流の合計値を、第ｉ行の逆方向乗累算値（ｕｉ）として出力することができる。
【０１３２】
図１７は、行列演算部２０の第３回路例を示す図である。第３回路例に係る行列演算部２０は、第２回路例に係る行列演算部２０と略同一の機能を有する部材を含む。略同一の機能を有する部材については、同一の符号（または同一符号とサブ符号との組から構成された符号）を付けて相違点を除き詳細な説明を省略する。
【０１３３】
例えば、２値で表される信号値および２値で表される誤差値を用い、多値（例えば、４ビット、８ビット、１６ビット等）で表される係数を用いるニューラルネットワークが知られている。ニューラルネットワーク装置１０が、このようなニューラルネットワークの演算をする場合、行列演算部２０は、図１７のような、第３回路例に示す構成であってよい。
【０１３４】
第３回路例に係る（ｍ×ｎ）個の乗算器５４のそれぞれは、ＡＮＤ回路７２と、Ｌ個の抵抗変化メモリ６４（Ｌは、２以上の整数）と、Ｌ個の電圧スイッチ７４とを含む。また、第３回路例に係る加算回路５８は、Ｌ本の共通信号線６６と、Ｌ個の電流検出部７０と、Ｌ個の荷重乗算部８２と、加算部８４とを含む。
【０１３５】
Ｌ個の抵抗変化メモリ６４は、それぞれに異なる荷重が割り当てられる。本回路例においては、乗算器５４は、２２乗（＝４）の荷重が割り当てられた第１の抵抗変化メモリ６４−１と、２１乗（＝２）の荷重が割り当てられた第２の抵抗変化メモリ６４−２と、２０乗（＝１）の荷重が割り当てられた第３の抵抗変化メモリ６４−３とを含む。
【０１３６】
Ｌ個の電圧スイッチ７４は、Ｌ個の抵抗変化メモリ６４に一対一で対応付けられている。例えば、第１の電圧スイッチ７４−１は、第１の抵抗変化メモリ６４−１に対応付けられている。第２の電圧スイッチ７４−２は、第２の抵抗変化メモリ６４−２に対応付けられている。第３の電圧スイッチ７４−３は、第３の抵抗変化メモリ６４−３に対応付けられている。
【０１３７】
Ｌ個の電圧スイッチ７４のそれぞれは、ＡＮＤ回路７２の出力値がＨ論理の場合にオン（接続）、ＡＮＤ回路７２の出力値がＬ論理の場合にオフ（オープン）する。Ｌ個の電圧スイッチ７４のそれぞれは、オンの場合に、第１電位（例えば、グランド電位またはコモン電位等）と、対応付けられた抵抗変化メモリ６４の第１端との間を接続する。また、Ｌ個の電圧スイッチ７４のそれぞれは、オフの場合に、第１電位と、対応付けられた抵抗変化メモリ６４の第１端との間を切断する。
【０１３８】
従って、Ｌ個の抵抗変化メモリ６４のそれぞれは、デコーダ６０から与えられたセレクト信号がＨ論理の場合、取得回路５２から出力された信号値または誤差値に応じた電圧が印加されて、電流が流れる。また、Ｌ個の抵抗変化メモリ６４のそれぞれは、デコーダ６０から与えられたセレクト信号がＬ論理の場合、取得回路５２から出力された信号値または誤差値に関わらず、電圧が印加されず（０の電圧が印加され）、電流が流れない。
【０１３９】
Ｌ個の抵抗変化メモリ６４は、それぞれに割り当てられた荷重とコンダクタンスとを乗算した値の合計が、当該乗算器５４に対応付けられた係数となるように、それぞれのコンダクタンスが設定されている。すなわち、Ｌ個の抵抗変化メモリ６４のそれぞれについて割り当てられた荷重とコンダクタンスとの乗算値を算出し、算出したＬ個の乗算値を加算した値が、対象行列に含まれる当該乗算器５４に対応する係数となる。
【０１４０】
例えば、係数が３ビットの２進数で表される場合、第１の抵抗変化メモリ６４−１のコンダクタンスは、係数の３ビット目の値に設定される。また、第２の抵抗変化メモリ６４−２のコンダクタンスは、係数の２ビット目の値に設定される。また、第３の抵抗変化メモリ６４−３のコンダクタンスは、係数の３ビット目の値に設定される。
【０１４１】
Ｌ本の共通信号線６６は、Ｌ個の抵抗変化メモリ６４に一対一で対応付けられている。例えば、第１の共通信号線６６−１は、第１の抵抗変化メモリ６４−１に対応付けられている。第２の共通信号線６６−２は、第２の抵抗変化メモリ６４−２に対応付けられている。第３の共通信号線６６−３は、第３の抵抗変化メモリ６４−３に対応付けられている。
【０１４２】
Ｌ個の抵抗変化メモリ６４のそれぞれは、第２端が、対応する共通信号線６６に接続される。Ｌ本の共通信号線６６のそれぞれは、第１電位とは異なる第２電位（例えば、電源電位等）に接続されている。
【０１４３】
Ｌ個の電流検出部７０は、Ｌ本の共通信号線６６に一対一で対応付けられている。Ｌ個の電流検出部７０のそれぞれは、対応付けられている共通信号線６６に流れる電流を検出する。例えば、第１の電流検出部７０−１は、第１の共通信号線６６−１に流れる電流を検出する。第２の電流検出部７０−２は、第２の共通信号線６６−２に流れる電流を検出する。第３の電流検出部７０−３は、第３の共通信号線６６−３に流れる電流を検出する。
【０１４４】
Ｌ個の荷重乗算部８２は、Ｌ個の電流検出部７０に一対一で対応付けられている。Ｌ個の荷重乗算部８２のそれぞれは、対応付けられている電流検出部７０により検出された電流値に、対応する抵抗変化メモリ６４に割り当てられた荷重を乗算する。例えば、第１の荷重乗算部８２−１は、第１の抵抗変化メモリ６４−１に割り当てられた２２乗（＝４）の荷重を、第１の電流検出部７０−１により検出された電流値に乗算する。第２の荷重乗算部８２−２は、第２の抵抗変化メモリ６４−２に割り当てられた２１乗（＝２）の荷重を、第２の電流検出部７０−２により検出された電流値に乗算する。第３の荷重乗算部８２−３は、第３の抵抗変化メモリ６４−３に割り当てられた２０乗（＝１）の荷重を、第３の電流検出部７０−３により検出された電流値に乗算する。
【０１４５】
加算部８４は、Ｌ個の荷重乗算部８２から出力された値を加算して、順方向乗累算値または逆方向乗累算値として出力する。
【０１４６】
このような第３回路例では、順方向処理において、（ｍ×ｎ）個の乗算器５４のそれぞれは、当該乗算器５４が対応付けられた行に対応する第１信号値に応じた電圧が、Ｌ個の抵抗変化メモリ６４のそれぞれに印加される。また、加算回路５８は、Ｌ個の抵抗変化メモリ６４のそれぞれに流れる電流と割り当てられた荷重とを乗算した値の合計を、係数行列における列毎に加算することにより、ｎ個の順方向乗累算値を算出する。
【０１４７】
また、このような第３回路例では、逆方向処理において、（ｍ×ｎ）個の乗算器５４のそれぞれは、当該乗算器５４が対応付けられた列に対応する第１誤差値に応じた電圧が、Ｌ個の抵抗変化メモリ６４のそれぞれに印加される。また、加算回路５８は、Ｌ個の抵抗変化メモリ６４のそれぞれに流れる電流と割り当てられた荷重とを乗算した値の合計を、係数行列における行毎に加算することにより、ｍ個の逆方向乗累算値を算出する。
【０１４８】
これにより、このような構成の行列演算部２０は、順方向処理において、２値で表されるｍ個の第１信号値と、多値で表される（ｍ×ｎ）個の係数を含む係数行列とを行列乗算して、多値で表されるｎ個の順方向乗累算値を出力することができる。また、このような構成の行列演算部２０は、逆方向処理において、多値で表される（ｍ×ｎ）個の係数を含む係数行列と２値で表されるｎ個の第１誤差値とを行列乗算して、多値で表されるｍ個の逆方向乗累算値を出力することができる。
【０１４９】
図１８は、行列演算部２０の第４回路例を示す図である。第４回路例に係る行列演算部２０は、第１回路例に係る行列演算部２０と略同一の機能を有する部材を含む。略同一の機能を有する部材については、同一の符号（または同一符号とサブ符号との組から構成された符号）を付けて相違点を除き詳細な説明を省略する。
【０１５０】
第４回路例に係る（ｍ×ｎ）個の乗算器５４のそれぞれは、差動電圧発生部８６と、ポジ側抵抗変化メモリ６４−ｐと、ネガ側抵抗変化メモリ６４−ｎとを含む。また、第４回路例に係る加算回路５８は、ポジ側共通信号線６６−ｐと、ネガ側共通信号線６６−ｎと、（ｍ×ｎ）個のポジ側スイッチ６８−ｐと、（ｍ×ｎ）個のネガ側スイッチ６８−ｎと、ポジ側電流検出部７０−ｐと、ネガ側電流検出部７０−ｎと、減算部８８とを含む。
【０１５１】
差動電圧発生部８６は、取得回路５２から与えられた値に応じた差動電圧を発生する。
【０１５２】
ポジ側抵抗変化メモリ６４−ｐは、第１端が差動電圧発生部８６のポジ側出力端に接続される。ポジ側抵抗変化メモリ６４−ｐは、第２端が、当該ポジ側抵抗変化メモリ６４−ｐを含む乗算器５４に対応して設けられたポジ側スイッチ６８−ｐを介して、ポジ側共通信号線６６−ｐに接続される。
【０１５３】
ネガ側抵抗変化メモリ６４−ｎは、第１端が差動電圧発生部８６のネガ側出力端に接続される。ネガ側抵抗変化メモリ６４−ｎは、第２端が、当該ネガ側抵抗変化メモリ６４−ｎを含む乗算器５４に対応して設けられたネガ側スイッチ６８−ｎを介して、ネガ側共通信号線６６−ｎに接続される。
【０１５４】
ポジ側共通信号線６６−ｐは、所定電位に接続されている。（ｍ×ｎ）個のポジ側スイッチ６８−ｐは、（ｍ×ｎ）個の乗算器５４に一対一で対応して設けられる。（ｍ×ｎ）個のポジ側スイッチ６８−ｐのそれぞれは、対応する乗算器５４に含まれるポジ側抵抗変化メモリ６４−ｐとポジ側共通信号線６６−ｐとの間を、デコーダ６０の制御に応じてオン（接続）またはオフ（切断）する。ポジ側電流検出部７０−ｐは、ポジ側共通信号線６６−ｐに流れる電流を検出する。
【０１５５】
ネガ側共通信号線６６−ｎは、所定電位に接続されている。（ｍ×ｎ）個のネガ側スイッチ６８−ｎは、（ｍ×ｎ）個の乗算器５４に一対一で対応して設けられる。（ｍ×ｎ）個のネガ側スイッチ６８−ｎのそれぞれは、対応する乗算器５４に含まれるネガ側抵抗変化メモリ６４−ｎとネガ側共通信号線６６−ｎとの間を、デコーダ６０の制御に応じてオン（接続）またはオフ（切断）する。ネガ側電流検出部７０−ｎは、ネガ側共通信号線６６−ｎに流れる電流を検出する。
【０１５６】
減算部８８は、ポジ側電流検出部７０−ｐから出力された値と、ネガ側電流検出部７０−ｎから出力された値とを減算して、順方向乗累算値または逆方向乗累算値として出力する。
【０１５７】
（ｍ×ｎ）個の乗算器５４のそれぞれに含まれるポジ側抵抗変化メモリ６４−ｐおよびネガ側抵抗変化メモリ６４−ｎは、コンダクタンスの差分値が、当該乗算器５４に対応付けられた係数となるように、それぞれのコンダクタンスが設定されている。
【０１５８】
このような第４回路例では、順方向処理において、（ｍ×ｎ）個の乗算器５４のそれぞれは、当該乗算器５４が対応付けられた列に対応する第１信号値に応じた差動電圧が、ポジ側抵抗変化メモリ６４−ｐおよびネガ側抵抗変化メモリ６４−ｎに印加される。そして、加算回路５８は、ポジ側抵抗変化メモリ６４−ｐに流れる電流とネガ側抵抗変化メモリ６４−ｎとに流れる電流との差分値を、係数行列における列毎に加算することにより、ｎ個の順方向乗累算値を算出する。
【０１５９】
また、このような第４回路例では、逆方向処理において、（ｍ×ｎ）個の乗算器５４のそれぞれは、当該乗算器５４が対応付けられた行に対応する第１誤差値に応じた差動電圧が、ポジ側抵抗変化メモリ６４−ｐおよびネガ側抵抗変化メモリ６４−ｎに印加される。そして、加算回路５８は、ポジ側抵抗変化メモリ６４−ｐに流れる電流とネガ側抵抗変化メモリ６４−ｎとに流れる電流との差分値を、係数行列における行毎に加算することにより、ｍ個の逆方向乗累算値を算出する。
【０１６０】
これにより、このような構成の行列演算部２０は、順方向処理において、ｍ個の第１信号値と係数行列とを差動信号を用いて行列乗算して、ｎ個の順方向乗累算値を出力することができる。また、行列演算部２０は、逆方向処理において、（ｍ×ｎ）個の係数を含む係数行列とｎ個の第１誤差値とを差動信号を用いて行列乗算して、ｍ個の逆方向乗累算値を出力することができる。
【０１６１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【０１６２】
また、実施形態において説明した行列演算部２０は、ニューラルネットワーク以外のアプリケーションに適用することも可能である。例えば、行列演算部２０は、行列演算を実行する演算装置として機能させることもできる。この場合、行列演算部２０は、１行およびｍ列の順方向第１行列と、ｍ行およびｎ列（ｍおよびｎは１以上の整数であり、一方が１の場合には他方は２以上）の係数行列とを行列演算して１行およびｎ列の順方向第２行列を出力する。さらに、行列演算部２０は、係数行列とｎ行および１列の逆方向第１行列とを行列演算してｍ行および１列の逆方向第２行列を出力する。
【符号の説明】
【０１６３】
１０  ニューラルネットワーク装置
１２  プロセッサ
１４  メモリ部
１６  通信部
２０  行列演算部
２２  層演算部
２４  制御部
２６  学習部
２８  ネットワーク構成記憶部
３０  係数記憶部
３２  信号値記憶部
３４  乗累算値記憶部
３６  誤差値記憶部
４２  第１層
４４  第２層
５２  取得回路
５４  乗算器
５６  係数メモリ
５８  加算回路
６０  デコーダ
６２  電圧発生部
６４  抵抗変化メモリ
６６  共通信号線
６８  スイッチ
７０  電流検出部
７２  ＡＮＤ回路
７４  電圧スイッチ
８２  荷重乗算部
８４  加算部
８６  差動電圧発生部
８８  減算部
【図１】
2019095860.tif 000010
【図２】
2019095860.tif 000011
【図３】
2019095860.tif 000012
【図４】
2019095860.tif 000013
【図５】
2019095860.tif 000014
【図６】
2019095860.tif 000015
【図７】
2019095860.tif 000016
【図８】
2019095860.tif 000017
【図９】
2019095860.tif 000018
【図１０】
2019095860.tif 000019
【図１１】
2019095860.tif 000020
【図１２】
2019095860.tif 000021
【図１３】
2019095860.tif 000022
【図１４】
2019095860.tif 000023
【図１５】
2019095860.tif 000024
【図１６】
2019095860.tif 000025
【図１７】
2019095860.tif 000026
【図１８】
2019095860.tif 000027