(57)【要約】【課題】積和演算の高速化および低電力化を図る。【解決手段】実施形態に係る積和演算器は、係数記憶部と、制御部と、上位乗算部と、上位累積部と、下位乗算部と、出力部とを備える。上位乗算部は、Ｎ個の入力値のそれぞれについて、対応する入力値と、対応する係数における対象桁の値と、対象桁の重みとを乗算した上位乗算値を算出する。上位累積部は、上位乗算値を累積加算した上位累積値を算出する。下位乗算部は、Ｎ個の入力値のそれぞれについて、対応する入力値と、対応する係数における停止桁より小さい桁の値とを乗算した下位乗算値を算出する。出力部は、上位累積値が境界値を通り超えた場合、境界値を通り超えた後の範囲の値を乗累算値として出力する。出力部は、上位累積値が境界値を通り超えなかった場合、上位累積値に、下位乗算値を累積加算した下位累積値を加えた値を乗累算値として出力する。【選択図】図３
2018120433.tif 000002
【特許請求の範囲】
【請求項１】
Ｎ個（Ｎは２以上の整数）の入力値に一対一で対応しており、最上位桁の値が符号を表すＮ個の係数を記憶する係数記憶部と、
前記最上位桁から予め定められた停止桁までの複数の桁のそれぞれを、対象桁として指定する制御部と、
前記Ｎ個の入力値のそれぞれについて、対応する入力値と、対応する係数における前記対象桁の値と、前記対象桁の重みとを乗算した上位乗算値を算出する上位乗算部と、
前記上位乗算値を累積加算した上位累積値を算出する上位累積部と、
前記Ｎ個の入力値のそれぞれについて、対応する入力値と、対応する係数における前記停止桁より小さい桁の値とを乗算した下位乗算値を算出する下位乗算部と、
前記上位累積値が予め設定された境界値を通り超えた場合、前記境界値を通り超えた後の範囲の値を乗累算値として出力し、前記停止桁を前記対象桁として指定して前記上位乗算値を算出しても前記上位累積値が前記境界値を通り超えなかった場合、前記上位累積値に、前記下位乗算値を累積加算した下位累積値を加えた値を乗累算値として出力する出力部と、
を備える積和演算器。
【請求項２】
前記上位乗算部は、前記最上位桁より下位側の桁の値と対応する入力値との乗算結果が０または正となる第１演算式を実行する回路により、前記上位乗算値を算出し、
前記下位乗算部は、前記第１演算式を実行する回路により前記下位乗算値を算出する
請求項１に記載の積和演算器。
【請求項３】
前記出力部は、
前記上位累積値が予め設定された第１境界値より大きくなった場合、前記第１境界値より大きい値を乗累算値として出力し、
前記停止桁を前記対象桁として指定して前記上位乗算値を算出しても前記上位累積値が前記第１境界値より大きくならなかった場合、前記上位累積値に前記下位累積値を加えた値を、乗累算値として出力する
請求項２に記載の積和演算器。
【請求項４】
前記上位乗算部は、前記最上位桁より下位側の桁の値と対応する入力値との乗算結果が０または負となる第２演算式を実行する回路により、前記上位乗算値を算出し、
前記下位乗算部は、前記第２演算式を実行する回路により前記下位乗算値を算出する
請求項１に記載の積和演算器。
【請求項５】
前記出力部は、
前記上位累積値が予め設定された第２境界値より小さくなった場合、前記第２境界値より小さい値を乗累算値として出力し、
前記停止桁を前記対象桁として指定して前記上位乗算値を算出しても前記上位累積値が前記第２境界値より小さくならなかった場合、前記上位累積値に前記下位累積値を加えた値を、乗累算値として出力する
請求項４に記載の積和演算器。
【請求項６】
前記制御部は、
前記最上位桁から予め定められた停止桁までの複数の桁のそれぞれを、上位側から順次に、前記対象桁として指定し、
指定した前記対象桁について前記Ｎ個の入力値の全ての前記上位乗算値を算出した後に、新たな対象桁を指定し、
前記上位乗算部は、前記対象桁が指定される毎に、前記上位乗算値を算出する
請求項１から５の何れか１項に記載の積和演算器。
【請求項７】
前記制御部は、前記上位累積値が前記境界値を通り超えた場合、前記上位乗算部および前記下位乗算部による乗算処理を停止させる
請求項６に記載の積和演算器。
【請求項８】
前記係数記憶部は、
前記Ｎ個の係数のそれぞれにおける、前記停止桁の値および前記停止桁より上位の桁の値を記憶する第１メモリと、
前記Ｎ個の係数のそれぞれにおける、前記停止桁より下位の桁の値を記憶する第２メモリと、
を有し、
前記第１メモリは、桁単位で、前記Ｎ個の係数のそれぞれの値を読み出させることが可能である
請求項１から７の何れか１項に記載の積和演算器。
【請求項９】
前記第２メモリは、前記第１メモリより低い電源電圧が印加される
請求項８に記載の積和演算器。
【請求項１０】
前記Ｎ個の係数のそれぞれは、２の補数表現がされた２進数データである
請求項１から９の何れか１項に記載の積和演算器。
【請求項１１】
前記Ｎ個の入力値のそれぞれは、符号を含むデータであり、
前記上位乗算部は、前記対象桁が指定される毎に、前記Ｎ個の入力値のそれぞれについて、
対応する入力値の絶対値と、前記係数における前記対象桁の値を対応する入力値の符号に従って反転させた値と、前記対象桁の重みとを乗算した前記上位乗算値を算出する
請求項１０に記載の積和演算器。
【請求項１２】
前記下位乗算部は、前記上位乗算部の処理が完了した後に、処理を開始する
請求項１から１１の何れか１項に記載の積和演算器。
【請求項１３】
前記下位乗算部は、前記上位乗算部の処理と並行して、処理を実行する
請求項１から１１の何れか１項に記載の積和演算器。
【請求項１４】
前記下位乗算部は、予め定められた桁が前記対象桁として指定された場合に、処理を開始する
請求項１３に記載の積和演算器。
【請求項１５】
前記上位乗算部および前記下位乗算部の少なくとも一方は、
複数の係数のそれぞれに対応する複数の抵抗変化メモリを有するメモリアレイと、
乗算に先だって、前記複数の抵抗変化メモリのそれぞれを、対応する係数に応じたコンダクタンスに設定する書込部と、
前記複数の抵抗変化メモリのそれぞれに、対応する入力値に応じた電圧を印加する読出部と、
を有する請求項１に記載の積和演算器。
【請求項１６】
前記上位乗算部および前記下位乗算部の少なくとも一方は、
複数の係数のそれぞれに対応する複数の容量結合メモリを有するメモリアレイと、
乗算に先だって、前記複数の容量結合メモリのそれぞれを、対応する係数に応じたキャパシタンスに設定する書込部と、
前記複数の容量結合メモリのそれぞれに、対応する入力値に応じた電圧を印加する読出部と、
を有する請求項１に記載の積和演算器。
【請求項１７】
Ｎ個（Ｎは２以上の整数）の入力値のそれぞれと対応する係数とを乗算したＮ個の乗算値を累積した乗累算値を出力する積和演算器と、
独立変数の絶対値が大きくなると従属変数の値が飽和して一定となる関数に基づき、前記乗累算値に応じた中間値を出力値に変換する活性化関数回路と、
を備え、
前記積和演算器は、
前記Ｎ個の入力値に一対一で対応しており、最上位桁の値が符号を表すＮ個の係数を記憶する係数記憶部と、
前記最上位桁から予め定められた停止桁までの複数の桁のそれぞれを、対象桁として指定する制御部と、
前記Ｎ個の入力値のそれぞれについて、対応する入力値と、対応する係数における前記対象桁の値と、前記対象桁の重みとを乗算した上位乗算値を算出する上位乗算部と、
前記上位乗算値を累積加算した上位累積値を算出する上位累積部と、
前記Ｎ個の入力値のそれぞれについて、対応する入力値と、対応する係数における前記停止桁より小さい桁の値とを乗算した下位乗算値を算出する下位乗算部と、
前記上位累積値が予め設定された境界値を通り超えた場合、前記境界値を通り超えた後の範囲の値を前記乗累算値として出力し、前記停止桁を前記対象桁として指定して前記上位乗算値を算出しても前記上位累積値が前記境界値を通り超えなかった場合、前記上位累積値に、前記下位乗算値を累積加算した下位累積値を加えた値を前記乗累算値として出力する出力部と、
を有するネットワークユニット。
【請求項１８】
従属に接続された複数の層を備え、
前記複数の層のそれぞれは、請求項１７に記載のネットワークユニットを少なくとも１つ含み、
前記複数の層のうちの何れかの層に含まれる前記少なくとも１つのネットワークユニットは、直前の層から出力されたＮ個の信号値を、前記Ｎ個の入力値として受け取る
ネットワーク装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、積和演算器、ネットワークユニットおよびネットワーク装置に関する。
【背景技術】
【０００２】
ニューラルネットワークを用いたディープラーニング技術が知られている。また、専用のハードウェアを用いてディープラーニングを行う技術も研究されている。
【０００３】
ニューラルネットワークに含まれる各ユニットでは、積和演算（乗累算）を実行する。すなわち、各ユニットでは、前段のユニットから受け取った複数の入力値のそれぞれに対して係数を乗算し、係数を乗算した後の複数の入力値を加算する。さらに、各ユニットでは、このように算出した値を例えばシグモイド関数等の活性化関数に与える。そして、各ユニットでは、活性化関数の出力値を出力する。
【０００４】
ところで、ハードウェアで実現したニューラルネットワーク装置は、このようなユニットを多数備えなければならない。このため、ニューラルネットワークをハードウェアで実現する場合、個々のユニットでの処理の高速化および低電力化の両立が望まれる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平０９−１０１９４４号公報
【非特許文献】
【０００６】
【非特許文献１】Marukame  T.，  Ueyoshi  K.，  Asai  T.，  Motomura  M.，  Schmid  A.，  Suzuki  M.，  Higashi  Y.，  and  Mitani  Y.，  "Error  tolerance  analysis  of  deep  learning  hardware  using  restricted  Boltzmann  machine  towards  low-power  memory  implementation"，  IEEE  Transactions  on  Circuits  and  Systems  II，  vol.  63，  (2016)
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明が解決しようとする課題は、高速化および低電力化を図ることにある。
【課題を解決するための手段】
【０００８】
実施形態に係る積和演算器は、係数記憶部と、制御部と、上位乗算部と、上位累積部と、下位乗算部と、出力部とを備える。前記係数記憶部は、Ｎ個（Ｎは２以上の整数）の入力値に一対一で対応しており、最上位桁の値が符号を表すＮ個の係数を記憶する。前記制御部は、前記最上位桁から予め定められた停止桁までの複数の桁のそれぞれを、対象桁として指定する。前記上位乗算部は、前記Ｎ個の入力値のそれぞれについて、対応する入力値と、対応する係数における前記対象桁の値と、前記対象桁の重みとを乗算した上位乗算値を算出する。前記上位累積部は、前記上位乗算値を累積加算した上位累積値を算出する。前記下位乗算部は、前記Ｎ個の入力値のそれぞれについて、対応する入力値と、対応する係数における前記停止桁より小さい桁の値とを乗算した下位乗算値を算出する。前記出力部は、前記上位累積値が予め設定された境界値を通り超えた場合、前記境界値を通り超えた後の範囲の値を乗累算値として出力する。前記出力部は、前記停止桁を前記対象桁として指定して前記上位乗算値を算出しても前記上位累積値が前記境界値を通り超えなかった場合、前記上位累積値に、前記下位乗算値を累積加算した下位累積値を加えた値を乗累算値として出力する。
【図面の簡単な説明】
【０００９】
【図１】実施形態に係るネットワークユニットの構成図。
【図２】活性化関数の一例を示す図。
【図３】積和演算器の構成図。
【図４】係数記憶部に記憶されている係数のイメージを示す図。
【図５】積和演算器の処理を示すフローチャート。
【図６】積和演算器の下位累積値の算出処理を示すフローチャート。
【図７】第１演算式による上位累積値の遷移の一例を示す図。
【図８】第１演算式を実行する上位乗算部の処理を示すフローチャート。
【図９】第１演算式を実行する上位乗算部の構成図。
【図１０】第２演算式による上位累積値の遷移の一例を示す図。
【図１１】第２演算式を実行する上位乗算部の処理を示すフローチャート。
【図１２】第２演算式を実行する上位乗算部の構成図。
【図１３】変形例に係る積和演算器の処理を示すフローチャート。
【図１４】途中終了したビット位置と頻度との関係を示す図。
【図１５】抵抗変化メモリを用いた上位乗算部および下位乗算部の構成図。
【図１６】容量結合メモリを用いた上位乗算部および下位乗算部の構成図。
【図１７】ネットワーク装置の構成図。
【発明を実施するための形態】
【００１０】
図１は、実施形態に係るネットワークユニット１０の構成を示す図である。ネットワークユニット１０は、例えば、多層ニューラルネットワーク等の各層の構成要素として用いられる。ネットワークユニット１０は、例えば、半導体装置等のハードウェアにより実現される。
【００１１】
ネットワークユニット１０は、積和演算器２０と、活性化関数回路３０とを備える。積和演算器２０は、Ｎ個の入力値と、Ｎ個の係数とを外部から受け取る。Ｎは、２以上の整数である。Ｎ個の係数は、Ｎ個の入力値に一対一で対応している。
【００１２】
積和演算器２０は、Ｎ個の係数を例えば外部の学習装置等から受け取り、内部に記憶する。また、積和演算器２０は、Ｎ個の入力値を他のユニットから受け取る。積和演算器２０は、Ｎ個の入力値を受け取ると、積和演算処理（乗累算処理）を開始する。
【００１３】
本実施形態においては、Ｎ個の入力値を、ｘ１、ｘ２、ｘ３、…、ｘＮと表す。また、Ｎ個の係数を、ｗ１、ｗ２、ｗ３、…、ｗＮと表す。下付の添え字は、インデックスを表す。同一のインデックスが付けられた入力値と係数とは、対応している。すなわち、ｘ１とｗ１とが対応しており、ｘ２とｗ２とが対応しており、ｘＮとｗＮとが対応している。また、任意のインデックスの入力値をｘｉと表し、任意のインデックスの係数をｘｉと表す。ｉは、１からＮまでの整数である。
【００１４】
積和演算器２０は、外部からＮ個の入力値を受け取った場合、積和演算（乗累算）処理を実行して乗累算値を算出する。すなわち、積和演算器２０は、Ｎ個の入力値のそれぞれと対応する係数とを乗算したＮ個の乗算値を累積した乗累算値を算出する。すなわち、積和演算器２０は、下記の式（１１）の演算処理を実行する。
【００１５】
【数１】
2018120433.tif 000003
ｕは、中間値を表す。また、ドットは、乗算を表す。
【００１６】
積和演算器２０は、このように算出した乗累算値を、中間値として活性化関数回路３０へと出力する。活性化関数回路３０は、積和演算器２０から中間値を受け取る。活性化関数回路３０は、予め設定された活性化関数に従って、中間値を出力値に変換する。すなわち、活性化関数回路３０は、下記の式（１２）の演算処理を実行する。
【００１７】
【数２】
2018120433.tif 000004
ｆ（）は、活性化関数を表す。ｙは、出力値を表す。
【００１８】
そして、ネットワークユニット１０は、活性化関数回路３０から出力された出力値を、他のユニットに供給する。なお、ネットワークユニット１０は、積和演算器２０と、活性化関数回路３０との間に、加算回路をさらに備えてもよい。加算回路は、例えば学習装置からバイアス値を予め受け取り、内部に記憶する。加算回路は、積和演算器２０から出力された乗累算値とバイアス値とを加算した加算値を、中間値として活性化関数回路３０に与える。
【００１９】
図２は、活性化関数の一例を示す図である。活性化関数は、例えば、独立変数（中間値）の絶対値が大きくなると従属変数（出力値）の値が飽和して一定となる。例えば、活性化関数は、独立変数（中間値）が正側へと変化していくと、従属変数（出力値）の値が正の所定値に漸近するように増加する。また、活性化関数は、独立変数（中間値）が負側へと変化していくと、従属変数（出力値）の値が負の所定値に漸近するように減少する。
【００２０】
例えば、活性化関数は、図２に示すような、シグモイド関数であってよい。活性化関数は、上述の特性を有する関数であれば、シグモイド関数以外の非線形関数であってもよい。
【００２１】
ところで、活性化関数における独立変数（中間値）の絶対値が大きい領域は、従属変数（出力値）の変化が少なく飽和している。活性化関数における独立変数（中間値）の絶対値が大きい領域を飽和領域と呼ぶ。また、活性化関数における独立変数（中間値）が正となる飽和領域を、正側飽和領域と呼ぶ。また、活性化関数における独立変数（中間値）が負となる飽和領域を、負側飽和領域と呼ぶ。さらに、活性化関数における飽和領域ではない領域、すなわち、活性化関数における独立変数（中間値）の絶対値が小さい領域を、過渡領域と呼ぶ。
【００２２】
ここで、活性化関数は、飽和領域において中間値の変化が大きくても、出力値の変化が小さい。つまり、飽和領域は、出力値の精度に対する影響が小さい。反対に、活性化関数は、過渡領域において中間値の変化が小さくても、出力値の変化が大きい。つまり、過渡領域は、出力値の精度に対する影響が大きい。
【００２３】
そこで、積和演算器２０は、中間値が過渡領域となる場合、精度の良い処理を実行する。反対に、積和演算器２０は、中間値が飽和領域となる場合、精度が悪いが、高速化および低電力化が図られた処理を実行する。
【００２４】
図３は、積和演算器２０の構成を示す図である。積和演算器２０は、入力値保持部４２と、係数記憶部４４と、制御部４６と、取得部４８と、上位乗算部５０と、上位累積部５２と、下位乗算部５４と、下位累積部５６と、比較部５８と、出力部６０とを有する。
【００２５】
入力値保持部４２は、外部からＮ個の入力値を受け取る。例えば、入力値保持部４２は、Ｎ個の入力値として、ｘ１、ｘ２、ｘ３、…、ｘＮを受け取る。そして、入力値保持部４２は、受け取ったＮ個の入力値を保持する。
【００２６】
Ｎ個の入力値のそれぞれは、例えば、符号付きの２進数データである。例えば、Ｎ個の入力値のそれぞれは、２の補数表現がされた２進数データであってよい。なお、Ｎ個の入力値のそれぞれは、２値データであってもよいし、絶対値で表現されたデータ（符号無しのデータ）であってもよい。
【００２７】
係数記憶部４４は、演算処理に先だって、Ｎ個の入力値に一対一で対応しているＮ個の係数を、予め受け取って記憶する。例えば、係数記憶部４４は、Ｎ個の係数として、ｗ１、ｗ２、ｗ３、…、ｗＮを記憶する。係数記憶部４４は、例えば、不揮発性の特性を有し、電源電圧の供給が停止しても、Ｎ個の係数を記憶し続ける。
【００２８】
Ｎ個の係数は、所定の桁数を有する。Ｎ個の係数のそれぞれは、符号を表す桁と、絶対値を表す少なくとも１つの桁を含む。例えば、Ｎ個の係数のそれぞれは、最上位桁の値が符号を表す。また、Ｎ個の係数のそれぞれは、最下位桁から、最上位桁より１つ下位の桁までの範囲が、絶対値を表す。例えば、Ｎ個の係数のそれぞれは、同一のビット幅の、符号付きの２進数データである。例えば、Ｎ個の係数のそれぞれは、同一のビット幅の、２の補数表現がされた２進数データであってよい。
【００２９】
係数記憶部４４は、第１メモリ６２と、第２メモリ６４とを含む。第１メモリ６２および第２メモリ６４のそれぞれは、不揮発性メモリである。
【００３０】
第１メモリ６２は、Ｎ個の係数のそれぞれにおける、停止桁の値および停止桁より上位の桁の値を記憶する。ここで、停止桁は、最下位桁より大きく、最上位桁より小さい、予め設定された任意の桁である。第１メモリ６２は、Ｎ個の係数のそれぞれの値を、桁単位（例えば、ビット単位）で読み出させることが可能である。
【００３１】
第２メモリ６４は、Ｎ個の係数のそれぞれにおける、停止桁より下位の桁の値を記憶する。第２メモリ６４は、第１メモリ６２より読み出しエラー率が高くてよい。例えば、第２メモリ６４は、第１メモリ６２より簡易な構成または低い信頼性であってよい。また、第２メモリ６４は、第１メモリ６２より低い電源電圧が印加されて動作してもよい。
【００３２】
制御部４６は、回路全体の動作タイミング等を制御する。さらに、制御部４６は、演算処理を開始すると、係数における、最上位桁から予め定められた停止桁までの複数の桁のそれぞれを、上位側から順次に、対象桁として指定する。制御部４６は、指定した対象桁を取得部４８および上位乗算部５０に対して与える。
【００３３】
例えば、制御部４６は、０からｓまでの整数を１ずつ昇順で、対象桁（ｋ）として指定する。ｋ＝０は、最上位桁（例えば、ＭＳＢ）を表す。ｋ＝１は、最上位桁から１つ下位の桁を表す。ｋ＝２は、最上位桁から２つ下位の桁を表す。ｓは、最上位桁から数えた停止桁の桁数を表す。
【００３４】
例えば、制御部４６は、上位乗算部５０がＮ個の入力値の全ての上位乗算値を算出した後に、新たな対象桁を指定する。そして、制御部４６は、停止桁を対象桁として指定した後、新たな対象桁の指定を停止する。
【００３５】
また、制御部４６は、演算処理を開始した後の所定のタイミングにおいて、下位乗算部５４に対して、演算開始指示を与える。例えば、制御部４６は、上位乗算部５０による乗算処理が停止桁まで全て完了した後に、下位乗算部５４に対して演算開始指示を与える。制御部４６は、上位乗算部５０による乗算処理が停止桁まで完了する前に、下位乗算部５４に対して演算開始指示を与えてもよい。例えば、制御部４６は、停止桁より前の予め定められた桁を対象桁として指定する場合に、下位乗算部５４に対して演算開始指示を与えてもよい。また、制御部４６は、停止桁を対象桁として指定した場合、停止桁を対象桁として指定したことを比較部５８に通知する。
【００３６】
取得部４８は、対象桁が指定される毎に、係数記憶部４４から、Ｎ個の係数のそれぞれの対象桁の値を順次に読み出す。そして、取得部４８は、Ｎ個の係数のそれぞれの対象桁の値を順次に上位乗算部５０に与える。
【００３７】
上位乗算部５０は、対象桁が指定される毎に、入力値保持部４２から、Ｎ個の入力値を順次に読み出す。これとともに、上位乗算部５０は、読み出した入力値に対応する係数における対象桁の値を、取得部４８から受け取る。
【００３８】
そして、上位乗算部５０は、対象桁が指定される毎に、Ｎ個の入力値のそれぞれについて、対応する入力値と、対応する係数における対象桁の値と、対象桁の重みとを乗算した上位乗算値を算出する。係数が２進数データである場合には、最下位桁の重みは、２０＝１であり、最下位桁から２桁目の重みは、２１＝２であり、最下位桁からｃ桁目の重みは、２（ｃ−１）である。上位乗算部５０は、Ｎ個の入力値のそれぞれについて算出した、Ｎ個の上位乗算値を上位累積部５２に順次に与える。
【００３９】
上位累積部５２は、上位乗算部５０により何れかの入力値に対する上位乗算値が算出される毎に、上位乗算値を累積加算した上位累積値を算出する。具体的には、上位累積部５２は、既に記憶している上位累積値に、上位乗算部５０により新たに算出された上位乗算値を加算して、上位累積値を更新する。
【００４０】
このような上位乗算部５０および上位累積部５２は、式（１３）に示すように、最上位桁から下位に向かい１桁ずつ逐次的に、演算処理を実行する。
【数３】
2018120433.tif 000005
【００４１】
ＡＵは、上位累積値を表す。ｋは、０以上の整数であって、対象桁の、最上位桁からの桁位置を示す。対象桁が最上位桁である場合には、ｋ＝０となる。ｓは、停止桁の最上位桁からの桁数である。ｗｉｋは、対象桁がｋの場合の、入力値に対して乗算される値を表す。
【００４２】
ここで、上位乗算部５０は、最上位桁より下位側の桁の値と対応する入力値との乗算結果が０または正となる第１演算式を実行する回路により、上位乗算値を算出する。すなわち、上位乗算部５０は、式（１３）に示す（ｗｉｋ・ｘｉ）の演算を、第１演算式を実行する回路により実現する。これにより、上位累積部５２は、最上位桁（符号）に対する乗算処理を実行した後に、上位累積値を増加させること（減少させないこと）ができる。なお、第１演算式については、図７、図８および図９を参照してさらに説明する。
【００４３】
第１演算式に代えて、上位乗算部５０は、最上位桁より下位側の桁の値と対応する入力値との乗算結果が０または負となる第２演算式を実行する回路により、上位乗算値を算出してもよい。すなわち、上位乗算部５０は、式（１３）に示す（ｗｉｋ・ｘｉ）の演算を、第２演算式を実行する回路により実現してもよい。これにより、上位累積部５２は、最上位桁を演算した後に、上位累積値を減少させること（増加させないこと）ができる。なお、第２演算式については、図１０、図１１および図１２を参照してさらに説明する。
【００４４】
下位乗算部５４は、所定のタイミングにおいて、制御部４６から乗算開始の指示を受け取る。下位乗算部５４は、乗算開始の指示を受け取ると、入力値保持部４２から、Ｎ個の入力値を順次に読み出す。これとともに、下位乗算部５４は、読み出した入力値に対応する係数における停止桁より小さい桁の値を、係数記憶部４４から読み出す。
【００４５】
そして、下位乗算部５４は、Ｎ個の入力値のそれぞれについて、対応する入力値と、対応する係数における停止桁より小さい桁の値とを乗算した下位乗算値を順次に算出する。下位乗算部５４は、Ｎ個の入力値のそれぞれについて算出した、Ｎ個の下位乗算値を下位累積部５６に順次に与える。
【００４６】
下位累積部５６は、何れかの入力値に対する下位乗算値が算出される毎に、下位乗算値を累積加算した下位累積値を算出する。具体的には、下位累積部５６は、既に記憶している下位累積値に、下位乗算部５４により新たに算出された下位乗算値を加算して、下位累積値を更新する。
【００４７】
このような下位乗算部５４および下位累積部５６は、式（１４）に示すように、演算処理を実行する。
【数４】
2018120433.tif 000006
【００４８】
ＡＬは、下位累積値を表す。ｗｉＬは、インデックス（ｉ）の係数における、最下位桁から停止桁の１つ下の桁までの値を表す。例えば、係数が２進数データであって、停止桁が“９”である場合、ｗｉＬは、ｗｉにおける、最下位ビットから８ビット目までの値を表す８ビットデータとなる。
【００４９】
ここで、下位乗算部５４は、上位乗算部５０が演算する式と同一式を実行する回路により、下位乗算値を算出する。すなわち、下位乗算部５４は、式（１４）に示す（ｗｉＬ・ｘｉ）の演算を、上位乗算部５０が上位乗算値を算出した式と同一式を実行する回路により実現する。
【００５０】
例えば、上位乗算部５０が第１演算式を実行する回路により上位乗算値を算出する場合、下位乗算部５４は、第１演算式を実行する回路により下位乗算値を算出する。また、例えば、上位乗算部５０が第２演算式を実行する回路により上位乗算値を算出する場合、下位乗算部５４は、第２演算式を実行する回路により下位乗算値を算出する。これにより、下位乗算部５４は、上位乗算値と下位乗算値とを整合させることができる。
【００５１】
なお、例えば、下位乗算部５４は、上位乗算部５０の処理が完了した後に、処理を開始する。また、下位乗算部５４は、上位乗算部５０の処理と並行して、処理を実行してもよい。例えば、下位乗算部５４は、予め定められた桁が対象桁として指定された場合に、処理を開始する。
【００５２】
比較部５８は、上位累積値が予め設定された境界値を通り超えたか否かを判定する。境界値は、中間値（乗累算値）における、過渡領域と飽和領域との境界を示す値である。通り超えたとは、上位累積値が、過渡領域から飽和領域へと変化したことを意味する。これにより、比較部５８は、上位累積値が、過渡領域から飽和領域へと変化したことを検出することができる。
【００５３】
例えば、上位乗算部５０が第１演算式を実行する回路により上位乗算値を算出する場合、比較部５８は、上位累積値が予め設定された第１境界値より大きくなったか否かを判定する。第１境界値は、中間値（乗累算値）における、過渡領域と正側飽和領域との境界を示す値である。これにより、比較部５８は、上位累積値が、過渡領域から正側飽和領域へと変化したことを検出することができる。
【００５４】
また、例えば、上位乗算部５０が第２演算式を実行する回路により上位乗算値を算出する場合、比較部５８は、上位累積値が予め設定された第２境界値より小さくなったか否かを判定する。第２境界値は、中間値（乗累算値）における、過渡領域と負側飽和領域との境界を示す値である。これにより、比較部５８は、上位累積値が、過渡領域から負側飽和領域へと変化したことを検出することができる。
【００５５】
比較部５８は、上位累積値が境界値を通り超えた場合、上位累積値が境界値を通り超えたことを出力部６０に通知する。また、比較部５８は、制御部４６から、停止桁を対象桁として指定したことの通知を受ける。比較部５８は、停止桁を対象桁として指定してＮ個の入力値の全ての上位乗算値を算出しても、上位累積値が境界値を通り超えなかった場合、上位累積値が境界値を通り超えなかったことを出力部６０に通知する。
【００５６】
出力部６０は、上位累積値が予め設定された境界値を通り超えた場合、境界値を通り超えた後の範囲の値を乗累算値として出力する。例えば、上位乗算部５０が第１演算式を実行する回路により上位乗算値を算出する場合、出力部６０は、第１境界値より大きい任意の値を、乗累算値として出力してもよい。また、例えば、上位乗算部５０が第２演算式を実行する回路により上位乗算値を算出する場合、出力部６０は、第２境界値より小さい任意の値を、乗累算値として出力してもよい。
【００５７】
例えば、出力部６０は、上位累積値が境界値を通り超えた場合、境界値を通り超えた時点の上位累積値を、乗累算値として出力してもよい。すなわち、出力部６０は、上位累積値が境界値を通り超えたと判定された時点において上位累積部５２から出力されている値を、乗累算値として出力してもよい。
【００５８】
なお、比較部５８は、上位累積値が境界値を通り超えた場合、上位累積値が境界値を通り超えたことを制御部４６に通知する。制御部４６は、上位累積値が境界値を通り超えた場合、上位乗算部５０および下位乗算部５４による乗算処理を停止させる。これにより、制御部４６は、出力部６０が累乗算値を出力した後の無駄な乗算処理を無くすことができる。
【００５９】
また、出力部６０は、比較部５８から、停止桁を対象桁として指定して上位乗算値を算出しても上位累積値が境界値を通り超えなかったことの通知を受ける。出力部６０は、停止桁を対象桁として指定してＮ個の入力値の全てについて上位乗算値を算出しても上位累積値が境界値を通り超えなかった場合、上位累積値に下位累積値を加えた値を、乗累算値として出力する。
【００６０】
例えば、出力部６０は、停止桁を対象桁として指定してＮ個の入力値の全てについて上位乗算値を算出しても上位累積値が第１境界値より大きくならなかった場合に、上位累積値に下位累積値を加えた値を、乗累算値として出力する。また、例えば、出力部６０は、停止桁を対象桁として指定してＮ個の入力値の全てについて上位乗算値を算出しても上位累積値が第２境界値より小さくならなかった場合に、上位累積値に下位累積値を加えた値を、乗累算値として出力する。
【００６１】
このような積和演算器２０は、出力部６０から出力された乗累算値を、中間値として活性化関数回路３０へと出力する。
【００６２】
図４は、係数記憶部４４に記憶されている係数のイメージを示す図である。係数記憶部４４は、Ｎ個の係数（ｗ１、ｗ２、ｗ３、…、ｗＮ）を記憶する。
【００６３】
係数が、ビット幅が１９桁の２の補数で表され、停止桁（ｓ）が、最下位桁（ＬＳＢ）から数えて７桁目であるとする。このような場合、第１メモリ６２は、Ｎ個の係数のそれぞれについて、７桁目から１９桁目（ＭＳＢ）までのビット値（ｋ＝０〜１２）を記憶する。さらに、第１メモリ６２は、係数における７桁目から１９桁目（ＭＳＢ）までのそれぞれのビット値を、桁単位で読み出しが可能となっている。
【００６４】
また、第２メモリ６４は、Ｎ個の係数のそれぞれについて、１桁目（ＬＳＢ）から６桁目までの６ビット分の値を記憶する。第２メモリ６４は、例えば、Ｎ個の係数のそれぞれについて、６ビット単位で読み出しが可能となっている。
【００６５】
そして、第１メモリ６２と第２メモリ６４とは別個の電源電圧が印加される回路であってよい。例えば、第２メモリ６４は、第１メモリ６２より低い電源電圧が印加される。これにより、積和演算器２０は、係数における停止桁（ｓ）より下位の桁に対する乗算処理を低電力で実行することができる。
【００６６】
また、第２メモリ６４は、第１メモリ６２より読み出しエラー率が高くてよい。例えば、第２メモリ６４は、第１メモリ６２より簡易な構成または低い信頼性であってよい。これにより、積和演算器２０は、係数における停止桁（ｓ）より下位の桁に対する乗算処理を低コストおよび高速に実行することができる。
【００６７】
図５は、積和演算器２０の処理を示すフローチャートである。積和演算器２０は、演算処理を実行する場合、図５の流れに従って処理を実行する。
【００６８】
まず、Ｓ１１１において、制御部４６は、対象桁（ｋ）を指定する。例えば、制御部４６は、対象桁（ｋ）として、０からｓまでの整数を１ずつ昇順で指定する。
【００６９】
続いて、Ｓ１１２において、上位乗算部５０は、インデックス（ｉ）を選択する。例えば、上位乗算部５０は、インデックス（ｉ）として、１からＮまでの整数を１ずつ昇順で選択する。
【００７０】
続いて、Ｓ１１３において、上位乗算部５０は、選択したインデックス（ｉ）に対応する入力値（ｘｉ）を取得する。続いて、Ｓ１１４において、上位乗算部５０は、選択したインデックス（ｉ）に対応する係数（ｗｉ）における、対象桁（ｋ）の値（ｗｉ（ｋ））を取得する。
【００７１】
続いて、Ｓ１１５において、上位乗算部５０は、上位乗算値（ｗｉ（ｋ）・ｘｉ）を算出する。続いて、Ｓ１１６において、上位累積部５２は、上位乗算値（ｗｉ（ｋ）・ｘｉ）を累積する。すなわち、上位累積部５２は、演算前の上位累積値（ＡＵ）に、Ｓ１１５で算出した上位乗算値（ｗｉ（ｋ）・ｘｉ）を加算して、上位累積値（ＡＵ）を更新する。なお、上位累積値（ＡＵ）は、フロー開始時において０に初期化されている。
【００７２】
続いて、Ｓ１１７において、比較部５８は、上位累積値（ＡＵ）が境界値を通り超えたか否かを判断する。例えば、比較部５８は、上位乗算値（ｗｉ（ｋ）・ｘｉ）が第１演算式により算出される場合には、上位累積値（ＡＵ）が第１境界値より大きくなったか否かを判断する。また、例えば、比較部５８は、上位乗算値（ｗｉ（ｋ）・ｘｉ）が第２演算式により算出される場合には、上位累積値（ＡＵ）が第２境界値より小さくなったか否かを判断する。
【００７３】
上位累積値（ＡＵ）が境界値を通り超えていない場合（Ｓ１１７のＮｏ）、比較部５８は、処理をＳ１１８に進める。
【００７４】
Ｓ１１８において、上位乗算部５０は、インデックス（ｉ）がＮであるか否かを判断する。すなわち、上位乗算部５０は、Ｎ個の全ての入力値を選択したか否かを判断する。上位乗算部５０は、インデックス（ｉ）がＮではない場合（Ｓ１１８のＮｏ）、処理をＳ１１２に戻す。上位乗算部５０は、処理をＳ１１２に戻すと、Ｓ１１２においてインデックス（ｉ）として、次の値を選択して、以後の処理を繰り返す。上位乗算部５０は、インデックス（ｉ）がＮである場合（Ｓ１１８のＹｅｓ）、処理をＳ１１９に進める。
【００７５】
Ｓ１１９において、制御部４６は、対象桁（ｋ）が停止桁（ｓ）であるか否かを判断する。すなわち、制御部４６は、対象桁（ｋ）を最上位桁から停止桁（ｓ）まで全て指定したか否かを判断する。制御部４６は、対象桁（ｋ）が停止桁（ｓ）ではない場合（Ｓ１１９のＮｏ）、処理をＳ１１１に戻す。制御部４６は、処理をＳ１１１に戻すと、Ｓ１１１において新たな対象桁（ｋ）を指定して、以後の処理を繰り返す。制御部４６は、対象桁（ｋ）が停止桁（ｓ）である場合（Ｓ１１９のＹｅｓ）、処理をＳ１２２に進める。
【００７６】
一方、積和演算器２０は、Ｓ１１１とＳ１１９との間のループ処理と並行して、Ｓ１２０およびＳ１２１の処理を実行する。Ｓ１２０において、制御部４６は、フローを開始した後、所定のタイミングとなったか否かを判断する。制御部４６は、所定のタイミングとなった場合に（Ｓ１２０のＹｅｓ）、下位乗算部５４に演算開始指示を与えて、処理をＳ１２１に進める。
【００７７】
例えば、制御部４６は、対象桁（ｋ）が停止桁（ｓ）まで指定され、且つ、インデックス（ｉ）の値がＮとなった場合に、所定のタイミングとなったと判断してよい。また、制御部４６は、フローの開始直後に、所定のタイミングとなったと判断してもよい。また、制御部４６は、対象桁（ｋ）が停止桁（ｓ）より前の予め定められた桁となった場合に、所定のタイミングとなったと判断してもよい。制御部４６は、所定のタイミングとなるまで、処理を待機する（Ｓ１２０のＮｏ）。
【００７８】
Ｓ１２１において、下位乗算部５４および下位累積部５６は、下位累積値（ＡＬ）を算出する。下位乗算部５４および下位累積部５６は、下位累積値（ＡＬ）を算出すると、処理をＳ１２２に進める。なお、Ｓ１２１の処理については、図６においてさらに詳細を説明する。
【００７９】
Ｓ１１９において、対象桁（ｋ）が停止桁（ｓ）であると判断され（Ｓ１１９のＹｅｓ）、且つ、Ｓ１２１において下位累積値（ＡＬ）の算出が完了すると、出力部６０は、Ｓ１２２の処理を実行する。Ｓ１２２において、出力部６０は、上位累積値（ＡＵ）と下位累積値（ＡＬ）とを加算して、乗累算値である中間値（ｕ）を算出する。出力部６０は、Ｓ１２２の処理を終えると、処理をＳ１２５に進める。
【００８０】
また、Ｓ１１１とＳ１１９との間のループ処理内において、上位累積値（ＡＵ）が境界値を通り超えた場合（Ｓ１１７のＹｅｓ）、比較部５８は、処理をＳ１２３に進める。
【００８１】
Ｓ１２３において、制御部４６は、上位乗算部５０による処理、並びに、下位乗算部５４による処理を停止させる。続いて、Ｓ１２４において、出力部６０は、乗累算値である中間値（ｕ）に、上位累積値（ＡＵ）を代入する。出力部６０は、Ｓ１２４の処理を終えると、処理をＳ１２５に進める。
【００８２】
そして、Ｓ１２５において、出力部６０は、中間値（ｕ）を後段の活性化関数回路３０へと出力する。
【００８３】
図６は、積和演算器２０の下位累積値の算出処理を示すフローチャートである。Ｓ１２０で所定のタイミングとなったと判断された場合、下位乗算部５４および下位累積部５６は、図６に示すＳ１３１〜Ｓ１３６の処理を実行する。
【００８４】
Ｓ１３１において、下位乗算部５４は、インデックス（ｉ）を選択する。例えば、下位乗算部５４は、インデックス（ｉ）として、１からＮまでの整数を１ずつ昇順で選択する。
【００８５】
続いて、Ｓ１３２において、下位乗算部５４は、選択したインデックス（ｉ）に対応する入力値（ｘｉ）を取得する。続いて、Ｓ１３３において、下位乗算部５４は、選択したインデックス（ｉ）に対応する係数（ｗｉ）における、停止桁より下位の値（ｗｉＬ）を取得する。
【００８６】
続いて、Ｓ１３４において、下位乗算部５４は、下位乗算値（ｗｉＬ・ｘｉ）を算出する。続いて、Ｓ１３５において、下位累積部５６は、下位乗算値（ｗｉＬ・ｘｉ）を累積する。すなわち、下位累積部５６は、演算前の下位累積値（ＡＬ）に、Ｓ１３４で算出した下位乗算値（ｗｉＬ・ｘｉ）を加算して、下位累積値（ＡＬ）を更新する。なお、下位累積値（ＡＬ）は、フロー開始前において０に初期化されている。
【００８７】
Ｓ１３６において、下位乗算部５４は、インデックス（ｉ）がＮであるか否かを判断する。すなわち、下位乗算部５４は、Ｎ個の入力値の全てを選択したか否かを判断する。下位乗算部５４は、インデックス（ｉ）がＮではない場合（Ｓ１３６のＮｏ）、処理をＳ１３１に戻す。下位乗算部５４は、処理をＳ１３１に戻すと、Ｓ１３１においてインデックス（ｉ）として次の値を選択して、以後の処理を繰り返す。下位乗算部５４は、インデックス（ｉ）がＮである場合（Ｓ１３６のＹｅｓ）、処理をＳ１２２に進める。
【００８８】
図７は、第１演算式による上位累積値（ＡＵ）の遷移の一例を示す図である。上位乗算部５０は、（ｗｉｋ・ｘｉ）の演算を、例えば第１演算式を実行する回路により実現する。（ｗｉｋ・ｘｉ）は、インデックス（ｉ）の入力値（ｘｉ）と、インデックス（ｉ）の係数（ｗｉ）における対象桁（ｋ）の値と、対象桁（ｋ）の重みとを乗算する演算である。また、この場合、下位乗算部５４も、（ｗｉＬ・ｘｉ）の演算を、第１演算式を実行する回路により実現する。（ｗｉＬ・ｘｉ）は、インデックス（ｉ）の入力値（ｘｉ）と、インデックス（ｉ）の係数（ｗｉ）における停止桁（ｓ）より下位の値とを乗算する演算である。
【００８９】
第１演算式は、最上位桁より下位側の桁の値（すなわち、最下位桁から最上位桁の１つ下位の桁までの各桁の値）と、対応する入力値との乗算結果が０または正となる演算である。具体的に、入力値（ｘｉ）および係数（ｗｉ）が２の補数で表された２進数の場合、第１演算式は、式（２１）のようになる。
【数５】
2018120433.tif 000007
【００９０】
なお、オーバーバーは、ビット反転を表す。ｍは、係数（ｗｉ）の桁数（ビット幅）から１を減算した値である。｜ｘｉ｜は、ｘｉの絶対値を表す。つまり、｜ｘｉ｜は、ｘｉの符号（最上位桁）を除いた値を表す。
【００９１】
第１演算式を実行する回路により実現される上位乗算部５０は、対象桁（ｋ）が最上位桁（ｋ＝０）の場合、下記の式（２２）の演算を実行する。
【数６】
2018120433.tif 000008
【００９２】
第１演算式を実行する回路により実現される上位乗算部５０は、対象桁（ｋ）が最上位桁より下位の桁（ｋ＝１〜ｓ）の場合、下記の式（２３）を実行する。
【数７】
2018120433.tif 000009
【００９３】
第１演算式を実行する回路により実現される下位乗算部５４は、下記の式（２４）を実行する。
【数８】
2018120433.tif 000010
【００９４】
ここで、第１演算式を実行する回路により実現される上位乗算部５０が最上位桁から下位に向かい１桁ずつ、（ｗｉｋ・ｘｉ）の演算を実行した場合、上位累積値（ＡＵ）は、図７に示すように遷移する。すなわち、最上位桁（符号桁）が対象桁として指定された演算が完了した後、上位累積値（ＡＵ）は、累積処理のステップが進んでも減少しない。
【００９５】
従って、上位累積値（ＡＵ）は、過渡領域と正側飽和領域との間の第１境界値より大きくなった場合、その後に累積処理のステップが進んでも、過渡領域に戻らない。つまり、上位累積値（ＡＵ）が累積処理の途中で第１境界値より大きくなった場合、最終的な上位累積値（ＡＵ）は、正側飽和領域の値となる。
【００９６】
積和演算器２０により算出された中間値は、活性化関数回路３０に与えられる。活性化関数回路３０において、正側飽和領域における中間値は、出力値の精度に対する影響が小さい。そこで、積和演算器２０は、上位累積値（ＡＵ）が第１境界値より大きくなった場合、処理を途中で終了して、比較的に精度の悪い上位累積値（ＡＵ）を出力する。これにより、積和演算器２０では、中間値が正側飽和領域となる場合、処理の高速化および低電力化を図ることができる。
【００９７】
一方、上位累積値（ＡＵ）が第１境界値より大きくならない場合、最終的な上位累積値（ＡＵ）は、過渡領域に含まれる可能性がある。活性化関数回路３０において、過渡領域における中間値は、出力値の精度に対する影響が大きい。そこで、積和演算器２０は、上位累積値（ＡＵ）が第１境界値より大きくならずに、対象桁（ｋ）が停止桁（ｓ）に達した場合、処理を最後まで完了させて、上位累積値（ＡＵ）と下位累積値（ＡＬ）とを加算した精度の良い中間値を出力する。これにより、積和演算器２０では、中間値が過渡領域に含まれる可能性がある場合には、活性化関数回路３０に精度の良い出力値を出力させることができる。
【００９８】
図８は、第１演算式を実行する回路により実現される上位乗算部５０の処理を示すフローチャートである。第１演算式を実行する回路により実現される上位乗算部５０は、例えば、図８に示すフローチャートに従って処理を実行する。
【００９９】
まず、Ｓ１４１において、上位乗算部５０は、入力値（ｘｉ）が負であるか否かを判断する。上位乗算部５０は、入力値（ｘｉ）が負ではない場合（Ｓ１４１のＮｏ）、処理をＳ１４２に進める。Ｓ１４２において、上位乗算部５０は、下記の式（２５）によりＰ１を算出する。
【数９】
2018120433.tif 000011
【０１００】
続いて、Ｓ１４３において、上位乗算部５０は、ｋが０であるか否かを判断する。ｋが０である場合（Ｓ１４３のＹｅｓ）、Ｓ１４４において、上位乗算部５０は、式（２５）により算出したＰ１に−１を乗算して、第１の上位乗算値（Ｍ１）を算出する。ｋが０ではない場合（Ｓ１４３のＮｏ）、Ｓ１４５において、上位乗算部５０は、式（２５）により算出したＰ１を、第１の上位乗算値（Ｍ１）とする。そして、上位乗算部５０は、Ｓ１４４またはＳ１４５の処理を終了すると、（ｗｉ（ｋ）・ｘｉ）の演算を終了する。
【０１０１】
また、上位乗算部５０は、入力値（ｘｉ）が負である場合（Ｓ１４１のＹｅｓ）、処理をＳ１４６に進める。Ｓ１４６において、上位乗算部５０は、係数（ｗｉ）における対象桁（ｋ）の値（ｗｉ（ｋ））をビット反転する。続いて、Ｓ１４７において、上位乗算部５０は、下記の式（２６）によりＰ１を算出する。
【数１０】
2018120433.tif 000012
【０１０２】
続いて、Ｓ１４８において、上位乗算部５０は、ｋが０であるか否かを判断する。ｋが０である場合（Ｓ１４８のＹｅｓ）、Ｓ１４９において、上位乗算部５０は、式（２６）により算出したＰ１に−１を乗算し、（−１×Ｐ１）に入力値（ｘｉ）の絶対値（｜ｘｉ｜）を加算して、第１の上位乗算値（Ｍ１）を算出する。ｋが０ではない場合（Ｓ１４８のＮｏ）、Ｓ１５０において、上位乗算部５０は、式（２６）により算出したＰ１を、第１の上位乗算値（Ｍ１）とする。そして、上位乗算部５０は、Ｓ１４９またはＳ１５０の処理を終了すると、（ｗｉ（ｋ）・ｘｉ）の演算を終了する。
【０１０３】
図９は、第１演算式を実行する回路により実現される上位乗算部５０の構成を示す図である。第１演算式を実行する回路により実現される上位乗算部５０は、例えば、図９に示す構成となる。
【０１０４】
上位乗算部５０は、反転器７０と、第１切替器７２と、第１乗算器７４と、シフト回路７６と、第２乗算器７７と、加算器７８と、第２切替器８２と、第３切替器８４とを含む。
【０１０５】
反転器７０は、係数（ｗｉ）における対象桁（ｋ）の値（ｗｉ（ｋ））をビット反転する。第１切替器７２は、入力値（ｘｉ）が０以上の場合、係数（ｗｉ）における対象桁（ｋ）の値（ｗｉ（ｋ））を選択して出力する。第１切替器７２は、入力値（ｘｉ）が０より小さい場合、反転器７０の出力値を選択して出力する。
【０１０６】
第１乗算器７４は、入力値（ｘｉ）の絶対値（｜ｘｉ｜）と、第１切替器７２の出力値とを乗算する。シフト回路７６は、第１乗算器７４の出力値を、（ｍ−ｋ）ビット分、左ビットシフトをする。
【０１０７】
第２乗算器７７は、シフト回路７６の出力値に−１を乗算する。加算器７８は、第２乗算器７７の出力値と、入力値（ｘｉ）の絶対値（｜ｘｉ｜）とを加算する。
【０１０８】
第２切替器８２は、入力値（ｘｉ）が０以上の場合、第２乗算器７７の出力値を選択して出力する。第２切替器８２は、入力値（ｘｉ）が０より小さい場合、加算器７８の出力値を選択して出力する。
【０１０９】
第３切替器８４は、対象桁（ｋ）が０ではない場合、シフト回路７６の出力値を選択して出力する。第３切替器８４は、対象桁（ｋ）が０である場合、第２切替器８２の出力値を選択して出力する。そして、上位乗算部５０は、第３切替器８４の出力値を、（ｗｉ（ｋ）・ｘｉ）として出力する。
【０１１０】
図１０は、第２演算式による上位累積値（ＡＵ）の遷移の一例を示す図である。上位乗算部５０は、（ｗｉｋ・ｘｉ）の演算を、例えば第２演算式を実行する回路により実現する。また、この場合、下位乗算部５４も、（ｗｉＬ・ｘｉ）の演算を、第２演算式を実行する回路により実現する。
【０１１１】
第２演算式は、最上位桁より下位側の桁の値（すなわち、最下位桁から最上位桁の１つ下位の桁までの各桁の値）と、対応する入力値との乗算結果が０または負となる演算である。具体的に、入力値（ｘｉ）および係数（ｗｉ）が２の補数で表された２進数の場合、第２演算式は、式（３１）のようになる。
【数１１】
2018120433.tif 000013
【０１１２】
第２演算式を実行する回路により実現される上位乗算部５０は、対象桁（ｋ）が最上位桁（ｋ＝０）の場合、下記の式（３２）の演算を実行する。
【数１２】
2018120433.tif 000014
【０１１３】
第２演算式を実行する回路により実現される上位乗算部５０は、対象桁（ｋ）が最上位桁より下位の桁（ｋ＝１〜ｓ）の場合、下記の式（３３）を実行する。
【数１３】
2018120433.tif 000015
【０１１４】
第２演算式を実行する回路により実現される下位乗算部５４は、下記の式（３４）を実行する。
【数１４】
2018120433.tif 000016
【０１１５】
ここで、第２演算式を実行する回路により実現される上位乗算部５０が最上位桁から下位に向かい１桁ずつ、（ｗｉｋ・ｘｉ）の演算を実行した場合、上位累積値（ＡＵ）は、図１０に示すように遷移する。すなわち、最上位桁（符号桁）が対象桁として指定された演算が完了した後、上位累積値（ＡＵ）は、累積処理のステップが進んでも増加しない。
【０１１６】
従って、上位累積値（ＡＵ）は、過渡領域と負側飽和領域との間の第２境界値より小さくなった場合、その後に累積処理のステップが進んでも、過渡領域に戻らない。つまり、上位累積値（ＡＵ）が累積処理の途中で第２境界値より小さくなった場合、最終的な上位累積値（ＡＵ）は、負側飽和領域の値となる。
【０１１７】
積和演算器２０により算出された中間値は、活性化関数回路３０に与えられる。活性化関数回路３０において、負側飽和領域における中間値は、出力値の精度に対する影響が小さい。そこで、積和演算器２０は、上位累積値（ＡＵ）が第２境界値より小さくなった場合、処理を途中で終了して、比較的に精度の悪い上位累積値（ＡＵ）を出力する。これにより、積和演算器２０では、中間値が負側飽和領域となる場合、処理の高速化および低電力化を図ることができる。
【０１１８】
一方、上位累積値（ＡＵ）が第２境界値より小さくならない場合、最終的な上位累積値（ＡＵ）は、過渡領域に含まれる可能性がある。活性化関数回路３０において、過渡領域における中間値は、出力値の精度に対する影響が大きい。そこで、積和演算器２０は、上位累積値（ＡＵ）が第２境界値より小さくならずに、対象桁（ｋ）が停止桁（ｓ）に達した場合、処理を最後まで完了させて、上位累積値（ＡＵ）と下位累積値（ＡＬ）とを加算した精度の良い中間値を出力する。これにより、積和演算器２０では、中間値が過渡領域に含まれる可能性がある場合には、活性化関数回路３０に精度の良い出力値を出力させることができる。
【０１１９】
図１１は、第２演算式を実行する回路により実現される上位乗算部５０の処理を示すフローチャートである。第２演算式を実行する回路により実現される上位乗算部５０は、例えば、図１１に示すフローチャートに従って処理を実行する。
【０１２０】
まず、Ｓ１７１において、上位乗算部５０は、入力値（ｘｉ）が負であるか否かを判断する。上位乗算部５０は、入力値（ｘｉ）が負ではない場合（Ｓ１７１のＮｏ）、処理をＳ１７２に進める。Ｓ１７２において、上位乗算部５０は、係数（ｗｉ）における対象桁（ｋ）の値（ｗｉ（ｋ））をビット反転する。続いて、Ｓ１７３において、上位乗算部５０は、下記の式（３５）によりＰ２を算出する。
【数１５】
2018120433.tif 000017
【０１２１】
続いて、Ｓ１７４において、上位乗算部５０は、ｋが０であるか否かを判断する。ｋが０である場合（Ｓ１７４のＹｅｓ）、Ｓ１７５において、上位乗算部５０は、式（３５）により算出したＰ２から、入力値の絶対値（｜ｘｉ｜）を減算して、第２の上位乗算値（Ｍ２）を算出する。ｋが０ではない場合（Ｓ１７４のＮｏ）、Ｓ１７６において、上位乗算部５０は、式（３５）により算出したＰ２に−１を乗算し、（−１×Ｐ２）を、第２の上位乗算値（Ｍ２）とする。そして、上位乗算部５０は、Ｓ１７５またはＳ１７６の処理を終了すると、（ｗｉ（ｋ）・ｘｉ）の演算を終了する。
【０１２２】
また、上位乗算部５０は、入力値（ｘｉ）が負である場合（Ｓ１７１のＹｅｓ）、処理をＳ１７７に進める。続いて、Ｓ１７７において、上位乗算部５０は、下記の式（３６）によりＰ２を算出する。
【数１６】
2018120433.tif 000018
【０１２３】
続いて、Ｓ１７８において、上位乗算部５０は、ｋが０であるか否かを判断する。ｋが０である場合（Ｓ１７８のＹｅｓ）、Ｓ１７９において、上位乗算部５０は、式（３６）により算出したＰ２を、第２の上位乗算値（Ｍ２）とする。ｋが０ではない場合（Ｓ１７８のＮｏ）、Ｓ１８０において、上位乗算部５０は、式（３６）により算出したＰ２に−１を乗算して、第２の上位乗算値（Ｍ２）を算出する。そして、上位乗算部５０は、Ｓ１７９またはＳ１８０の処理を終了すると、（ｗｉ（ｋ）・ｘｉ）の演算を終了する。
【０１２４】
図１２は、第２演算式を実行する回路により実現される上位乗算部５０の構成を示す図である。第２演算式を実行する回路により実現される上位乗算部５０は、例えば、図１２に示す構成となる。
【０１２５】
上位乗算部５０は、反転器７０と、第１切替器７２と、第１乗算器７４と、シフト回路７６と、第２乗算器７７と、加算器７８と、第３乗算器８０と、第２切替器８２と、第３切替器８４とを含む。
【０１２６】
反転器７０は、係数（ｗｉ）における対象桁（ｋ）の値（ｗｉ（ｋ））をビット反転する。第１切替器７２は、入力値（ｘｉ）が０以上の場合、反転器７０の出力値を選択して出力する。第１切替器７２は、入力値（ｘｉ）が０より小さい場合、係数（ｗｉ）における対象桁（ｋ）の値（ｗｉ（ｋ））を選択して出力する。
【０１２７】
第１乗算器７４は、入力値（ｘｉ）の絶対値（｜ｘｉ｜）と、第１切替器７２の出力値とを乗算する。シフト回路７６は、第１乗算器７４の出力値を、（ｍ−ｋ）ビット分、左ビットシフトをする。第２乗算器７７は、シフト回路７６の出力値に−１を乗算する。
【０１２８】
第３乗算器８０は、入力値（ｘｉ）の絶対値（｜ｘｉ｜）に−１を乗算する。加算器７８は、シフト回路７６の出力値と、第３乗算器８０の出力値とを加算する。
【０１２９】
第２切替器８２は、入力値（ｘｉ）が０より小さい場合、シフト回路７６の出力値を選択して出力する。第２切替器８２は、入力値（ｘｉ）が０以上の場合、加算器７８の出力値を選択して出力する。
【０１３０】
第３切替器８４は、対象桁（ｋ）が０ではない場合、第２乗算器７７の出力値を選択して出力する。第３切替器８４は、対象桁（ｋ）が０である場合、第２切替器８２の出力値を選択して出力する。そして、上位乗算部５０は、第３切替器８４の出力値を、（ｗｉ（ｋ）・ｘｉ）として出力する。
【０１３１】
図１３は、変形例に係る積和演算器２０の処理を示すフローチャートである。上位乗算部５０および下位乗算部５４は、第１演算式を実行する回路および第２演算式を実行する回路の両方を備え、両者の処理を並行して実行してもよい。
【０１３２】
第１演算式に基づく乗算処理および第２演算式に基づく乗算処理の両方を並行して実行する場合、積和演算器２０は、図５に示したＳ１１５、Ｓ１１６、Ｓ１１７、Ｓ１２３およびＳ１２４の処理に代えて、図１３に示す処理を実行する。
【０１３３】
Ｓ１１４の処理に続き、上位乗算部５０は、Ｓ１８１を実行する。Ｓ１８１において、上位乗算部５０は、第１演算式を実行する回路により、第１の上位乗算値（Ｍ１）を算出する。続いて、Ｓ１８２において、上位累積部５２は、第１の上位乗算値（Ｍ１）を累積する。すなわち、上位累積部５２は、演算前の第１の上位累積値（ＡＵ＿１）に第１の上位乗算値（Ｍ１）を加算して、第１の上位累積値（ＡＵ＿１）を更新する。なお、第１の上位累積値（ＡＵ＿１）は、フローの開始前において０に初期化されている。
【０１３４】
続いて、Ｓ１８３において、比較部５８は、第１の上位累積値（ＡＵ＿１）が第１境界値より大きいか否かを判断する。第１の上位累積値（ＡＵ＿１）が第１境界値より大きくない場合（Ｓ１８３のＮｏ）、比較部５８は、処理を図５のＳ１１８に進める。
【０１３５】
第１の上位累積値（ＡＵ＿１）が第１境界値より大きい場合（Ｓ１８３のＹｅｓ）、比較部５８は、処理をＳ１８４に進める。Ｓ１８４において、制御部４６は、上位乗算部５０および上位累積部５２による処理、並びに、下位乗算部５４および下位累積部５６による処理を停止させる。
【０１３６】
続いて、Ｓ１８５において、出力部６０は、乗累算値である中間値（ｕ）に、第１の上位累積値（ＡＵ＿１）を代入する。出力部６０は、Ｓ１８５の処理を終えると、処理を、図５に示したＳ１２５に進める。
【０１３７】
積和演算器２０は、Ｓ１８１からＳ１８５の処理と並行して、Ｓ１８６からＳ１９０の処理も実行する。Ｓ１１４の処理に続き、Ｓ１８６において、上位乗算部５０は、第２演算式を実行する回路により、第２の上位乗算値（Ｍ２）を算出する。続いて、Ｓ１８７において、上位累積部５２は、第２の上位乗算値（Ｍ２）を累積する。すなわち、上位累積部５２は、第２の上位累積値（ＡＵ＿２）に第２の上位乗算値（Ｍ２）を加算して、第２の上位累積値（ＡＵ＿２）を更新する。なお、第２の上位累積値（ＡＵ＿２）は、フローの開始前において０に初期化されている。
【０１３８】
続いて、Ｓ１８８において、比較部５８は、第２の上位累積値（ＡＵ＿２）が第２境界値より小さいか否かを判断する。第２の上位累積値（ＡＵ＿２）が第２境界値より小さくない場合（Ｓ１８８のＮｏ）、比較部５８は、処理を、図５に示したＳ１１８に進める。
【０１３９】
第２の上位累積値（ＡＵ＿２）が第２境界値より小さい場合（Ｓ１８８のＹｅｓ）、比較部５８は、処理をＳ１８９に進める。Ｓ１８９において、制御部４６は、上位乗算部５０および上位累積部５２による処理、並びに、下位乗算部５４および下位累積部５６による処理を停止させる。
【０１４０】
続いて、Ｓ１９０において、出力部６０は、乗累算値である中間値（ｕ）に、第２の上位累積値（ＡＵ＿２）を代入する。出力部６０は、Ｓ１９０の処理を終えると、処理を、図５に示したＳ１２５に進める。
【０１４１】
このような変形例に係る積和演算器２０は、中間値が正側飽和領域となる場合、および、中間値が負側飽和領域となる場合の両者を検出することができる。そして、変形例に係る積和演算器２０は、中間値が正側飽和領域となる場合および中間値が負側飽和領域となる場合の両者において、処理の高速化および低電力化を図ることができる。
【０１４２】
なお、下位乗算部５４は、第１演算式を実行する回路、または、第２演算式を実行する回路の何れか一方を備えればよい。下位乗算部５４が第１演算式を実行する回路を備える場合には、出力部６０は、下位累積部５６により算出された下位累積値（ＡＬ）と、第１の上位累積値（ＡＵ＿１）とを加算して累乗算値を算出する。また、下位乗算部５４が第２演算式を実行する回路を備える場合には、出力部６０は、下位累積部５６により算出された下位累積値（ＡＬ）と、第２の上位累積値（ＡＵ＿２）とを加算して累乗算値を算出する。なお、何れの累乗算値も同一の値となる。
【０１４３】
図１４は、上位累積値の算出処理を途中終了したビット位置と、頻度との関係の一例を示す図である。
【０１４４】
上位乗算部５０および上位累積部５２により実行される乗累算処理を、上位桁処理とする。上位桁処理での１桁毎の処理時間をＴＭとする。例えば、最上位桁から停止桁までの桁数をＳとした場合、上位桁処理で必要される時間は、最長でＳ×ＴＭとなる。また、上位桁処理では、上位累積値が途中で境界値を通り超えた場合、処理が打ち切られる。最上位桁から４桁目で打ち切りが発生した場合、上位桁処理の時間は、４×ＴＭとなる。また、例えば、停止桁が最上位桁から１９桁目であり、打ち切りが発生しなかった場合、上位桁処理の時間は、１９×ＴＭとなる。
【０１４５】
下位乗算部５４および下位累積部５６により実行される乗累算処理を、下位桁処理とする。下位桁処理での処理時間をＴＬとする。制御部４６は、下位桁処理の開始タイミングを制御する。例えば、制御部４６は、上位桁処理が停止桁に達した後に下位桁処理を開始させてもよい。上位桁処理が停止桁に達した後に下位桁処理が開始した場合、積和演算器２０での全体の処理時間は、最長で、（Ｓ×ＴＭ）＋ＴＬとなる。
【０１４６】
下位桁処理を実行しなかった場合（すなわち、係数の最上位桁から最下位桁まで上位桁処理を実行した場合）、積和演算器２０の処理時間（ワーストケースの処理時間）は、Ｌ×ＴＭとなる。Ｌは、係数の桁数である。上位桁処理が停止桁に達した後に下位桁処理が開始した場合、積和演算器２０の処理時間のワーストケースからの削減時間は、（Ｌ×ＴＭ）−｛（Ｓ×ＴＭ）＋ＴＬ｝＝（Ｌ−Ｓ）×ＴＭ−ＴＬとなる。従って、上位桁処理が停止桁に達した後に下位桁処理が開始した場合であっても、停止桁より下位の桁を上位桁処理で実行する時間（（Ｌ−Ｓ）×ＴＭ）より、下位桁処理の時間（ＴＬ）の方が短ければ、削減効果が生じる。
【０１４７】
図１４の例では、８ビット目の桁（ＭＳＢから数えて１２ビット目の桁）までに、約半数が途中終了となっていることが示されている。そこで、このような場合、設計者は、例えば、８ビット目の桁（ＭＳＢから数えて１２ビット目の桁）を停止桁として設定してもよい。
【０１４８】
また、このような場合、上位１２ビット分の上位桁処理が完了する前に、下位７ビット分の下位桁処理が完了するように、制御部４６は、下位桁処理を開始させてもよい。すなわち、制御部４６は、上位桁処理が停止桁に達するまでに下位桁処理を完了するタイミングで、下位桁処理を開始させてもよい。
【０１４９】
この場合、積和演算器２０での全体の処理時間は、最長で、（１２×ＴＭ）となる。上位桁処理が停止桁に達するまでに下位桁処理を完了させた場合、積和演算器２０の処理時間のワーストケースからの削減時間は、（Ｌ×ＴＭ）−（Ｓ×ＴＭ）＝（Ｌ−Ｓ）×ＴＭとなる。
【０１５０】
なお、制御部４６は、上位桁処理が停止桁に達するまでに下位桁処理を完了するタイミングよりも遅いタイミングで、下位桁処理を開始させてもよい。この場合、積和演算器２０の処理時間は、（Ｓ×ＴＭ）＋αとなる。ここで、αは、上位桁処理が停止桁に達してから、下位桁処理が完了するまでの余り時間である。このような場合であっても、積和演算器２０は、処理時間を削減することができる。例えば、この場合における、積和演算器２０の処理時間のワーストケースからの削減時間は、（Ｌ×ＴＭ）−｛（Ｓ×ＴＭ）＋α｝＝｛（Ｌ−Ｓ）×ＴＭ｝−αとなる。
【０１５１】
積和演算器２０での全体の処理時間は、最上位桁から停止桁までの桁数に応じて変更される。すなわち、停止桁を下位側の桁に設定するほど、全体の処理時間は長くなり、停止桁を上位側の桁に設定するほど、全体の処理時間は短くなる。
【０１５２】
また、停止桁より下位側の係数の値は、停止桁より上位の係数の値より、読み出し精度の悪いメモリに記憶されている。従って、停止桁を下位側の桁に設定するほど、全体の演算精度が高くなり、停止桁を上位側の桁に設定するほど、全体の演算精度が低くなる。従って、設計者は、要求される処理時間、入力値および係数の固定小数点表現の形式（小数点の位置）、および、要求される演算精度に応じて、停止桁を適切に設定すればよい。
【０１５３】
図１５は、抵抗変化メモリ１１４を用いた下位乗算部５４および下位累積部５６の構成例を示す。下位乗算部５４および下位累積部５６は、例えば、図１５に示すような構成であってもよい。
【０１５４】
下位乗算部５４は、メモリアレイ１００と、書込部１０２と、読出部１０４とを有する。メモリアレイ１００は、Ｎ本のロウライン１１０（１１０−１〜１１０−Ｎ）と、Ｎ本のカラムライン１１２（１１２−１〜１１２−Ｎ）とを有する。
【０１５５】
Ｎ本のロウライン１１０のそれぞれは、Ｎ個の入力値のそれぞれに対応する。例えば、第１のロウライン１１０−１は、ｘ１に対応する。第２のロウライン１１０−２は、ｘ２に対応する。第Ｎのロウライン１１０−Ｎは、ｘＮに対応する。
【０１５６】
Ｎ本のカラムライン１１２のそれぞれは、Ｎ個の係数のそれぞれに対応する。例えば、第１のカラムライン１１２−１は、ｗ１に対応する。第２のカラムライン１１２−２は、ｗ２に対応する。第Ｎのカラムライン１１２−Ｎは、ｗＮに対応する。
【０１５７】
さらに、メモリアレイ１００は、複数の抵抗変化メモリ１１４を有する。複数の抵抗変化メモリ１１４は、書き込み時において、抵抗値が変化し、印加された電圧に応じた抵抗値に設定される。また、複数の抵抗変化メモリ１１４は、読み出し時において、抵抗値が変化せず、設定された抵抗値の抵抗として機能する。
【０１５８】
複数の抵抗変化メモリ１１４は、複数の係数のそれぞれに対応する。すなわち、メモリアレイ１００は、（Ｎ×Ｎ）個の抵抗変化メモリ１１４を有する。より具体的には、メモリアレイ１００は、Ｎ個の入力値のそれぞれについて、Ｎ個の係数のそれぞれに対応するＮ個の抵抗変化メモリ１１４を有する。例えば、メモリアレイ１００は、ｘ１について、Ｎ個の抵抗変化メモリ１１４（１１４−１１，１１４−１２，…１１４−１Ｎ）を有する。また、メモリアレイ１００は、ｘ２について、Ｎ個の抵抗変化メモリ１１４（１１４−２１，１１４−２２，…１１４−２Ｎ）を有する。また、メモリアレイ１００は、ｘ３について、Ｎ個の抵抗変化メモリ１１４（１１４−Ｎ１，１１４−Ｎ２，…１１４−ＮＮ）を有する。
【０１５９】
（Ｎ×Ｎ）個の抵抗変化メモリ１１４は、対応する入力値に対応するロウライン１１０と、対応する係数に対応するカラムライン１１２との間に接続される。
【０１６０】
例えば、ｘ１およびｗ１に対応する抵抗変化メモリ１１４−１１は、第１のロウライン１１０−１および第１のカラムライン１１２−１との間に接続される。例えば、ｘ２およびｗ１に対応する抵抗変化メモリ１１４−２１は、第２のロウライン１１０−２および第１のカラムライン１１２−１との間に接続される。例えば、ｘＮおよびｗ１に対応する抵抗変化メモリ１１４−Ｎ１は、第Ｎのロウライン１１０−Ｎおよび第１のカラムライン１１２−１との間に接続される。
【０１６１】
例えば、ｘ１およびｗ２に対応する抵抗変化メモリ１１４−１２は、第１のロウライン１１０−１および第２のカラムライン１１２−２との間に接続される。例えば、ｘ２およびｗ２に対応する抵抗変化メモリ１１４−２２は、第２のロウライン１１０−２および第２のカラムライン１１２−２との間に接続される。例えば、ｘＮおよびｗ２に対応する抵抗変化メモリ１１４−Ｎ２は、第Ｎのロウライン１１０−Ｎおよび第２のカラムライン１１２−２との間に接続される。
【０１６２】
例えば、ｘ１およびｗＮに対応する抵抗変化メモリ１１４−１Ｎは、第１のロウライン１１０−１および第Ｎのカラムライン１１２−Ｎとの間に接続される。例えば、ｘ２およびｗＮに対応する抵抗変化メモリ１１４−２Ｎは、第２のロウライン１１０−２および第Ｎのカラムライン１１２−Ｎとの間に接続される。例えば、ｘＮおよびｗＮに対応する抵抗変化メモリ１１４−ＮＮは、第Ｎのロウライン１１０−Ｎおよび第Ｎのカラムライン１１２−Ｎとの間に接続される。
【０１６３】
書込部１０２は、乗算に先だって、複数の抵抗変化メモリ１１４のそれぞれを、対応する係数に応じたコンダクタンス（抵抗の逆数）に設定する。例えば、書込部１０２は、それぞれの抵抗変化メモリ１１４に、対応する係数における停止桁より小さい桁の値に応じたコンダクタンスとなるような電圧を印加する。
【０１６４】
例えば、書込部１０２は、Ｎ個の係数電圧発生部１１６（１１６−１〜１１６−Ｎ）と、Ｎ個のロウラインスイッチ１１８（１１８−１〜１１８−Ｎ）とを含む。Ｎ個の係数電圧発生部１１６のそれぞれは、Ｎ本のカラムライン１１２（１１２−１〜１１２−Ｎ）のそれぞれに電圧を印加する。Ｎ個のロウラインスイッチ１１８（１１８−１〜１１８−Ｎ）のそれぞれは、書き込み時において、Ｎ本のロウライン１１０（１１０−１〜１１０−Ｎ）のそれぞれを所定電位に接続する。
【０１６５】
第１の係数電圧発生部１１６−１は、ｗ１における停止桁より小さい桁の値であるｗ１Ｌに応じた電圧を、第１のカラムライン１１２−１に印加する。これにより、ｗ１に対応する抵抗変化メモリ１１４（１１４−１１，１１４−２１，…，１１４−Ｎ１）は、ｗ１Ｌに対応するコンダクタンスに設定される。
【０１６６】
第２の係数電圧発生部１１６−２は、ｗ２における停止桁より小さい桁の値であるｗ２Ｌに応じた電圧を、第２のカラムライン１１２−２に印加する。これにより、ｗ２に対応する抵抗変化メモリ１１４（１１４−１２，１１４−２２，…，１１４−Ｎ２）は、ｗ２Ｌに対応するコンダクタンスに設定される。
【０１６７】
第Ｎの係数電圧発生部１１６−Ｎは、ｗＮにおける停止桁より小さい桁の値であるｗＮＬに応じた電圧を、第Ｎのカラムライン１１２−Ｎに印加する。これにより、ｗＮに対応する抵抗変化メモリ１１４（１１４−１Ｎ，１１４−２Ｎ，…，１１４−ＮＮ）は、ｗＮＬに対応するコンダクタンスに設定される。
【０１６８】
なお、書込部１０２は、読み出し時（乗算時）においては、Ｎ本のロウライン１１０と書込部１０２との間、および、Ｎ本のカラムライン１１２と書込部１０２との間を、オープンとする。
【０１６９】
読出部１０４は、複数の抵抗変化メモリ１１４のそれぞれに、対応する入力値に応じた電圧を印加する。複数の抵抗変化メモリ１１４のそれぞれは、対応する係数に応じたコンダクタンスに設定されている。これにより、複数の抵抗変化メモリ１１４は、対応する入力値と、対応する係数とを乗算した値に応じた電流を流すことができる。
【０１７０】
例えば、読出部１０４は、Ｎ個の入力電圧発生部１２０（１２０−１〜１２０−Ｎ）と、Ｎ個のカラムラインスイッチ１２２（１２２−１〜１２２−Ｎ）とを含む。Ｎ個の入力電圧発生部１２０のそれぞれは、Ｎ本のロウライン１１０（１１０−１〜１１０−Ｎ）のそれぞれに電圧を印加する。Ｎ個のカラムラインスイッチ１２２（１１８−１〜１１８−Ｎ）のそれぞれは、Ｎ本のカラムライン１１２（１１２−１〜１１２−Ｎ）のそれぞれを所定電位に接続する。
【０１７１】
第１の入力電圧発生部１２０−１は、ｘ１に応じた電圧を、第１のロウライン１１０−１に印加する。これにより、ｘ１に対応する抵抗変化メモリ１１４（１１４−１１，１１４−１２，…，１１４−１Ｎ）は、ｘ１に応じた電圧が印加される。
【０１７２】
第２の入力電圧発生部１２０−２は、ｘ２に応じた電圧を、第２のロウライン１１０−２に印加する。これにより、ｘ２に対応する抵抗変化メモリ１１４（１１４−２１，１１４−２２，…，１１４−２Ｎ）は、ｘ２に応じた電圧が印加される。
【０１７３】
第Ｎの入力電圧発生部１２０−Ｎは、ｘＮに応じた電圧を、第Ｎのロウライン１１０−Ｎに印加する。これにより、ｘＮに対応する抵抗変化メモリ１１４（１１４−Ｎ１，１１４−Ｎ２，…，１１４−ＮＮ）は、ｘＮに応じた電圧が印加される。
【０１７４】
これにより、（Ｎ×Ｎ）個の抵抗変化メモリ１１４のそれぞれは、対応する入力値と、
と、対応する係数における停止桁より小さい桁の値とを乗算した電流値を流すことができる。すなわち、ｉ番目の入力値およびｉ番目の係数に対応する抵抗変化メモリ１１４−ｉｉは、（ｘｉ×ｗｉＬ）に応じた電流を流すことができる。
【０１７５】
なお、読出部１０４は、書き込み時においては、Ｎ本のロウライン１１０と読出部１０４との間、および、Ｎ本のカラムライン１１２と読出部１０４との間を、オープンとする。
【０１７６】
下位累積部５６は、複数の抵抗変化メモリ１１４のそれぞれに流れる電流を合計した値を、下位累積値として検出する。
【０１７７】
例えば、下位累積部５６は、検出部１０６と、ＡＤＣ１０８とを含む。検出部１０６は、Ｎ本のカラムライン１１２のそれぞれに流れる電流を加算する。例えば、検出部１０６は、一方の端がＮ本のカラムライン１１２のそれぞれに接続され、他方の端が所定電位に接続された微小抵抗であってよい。ＡＤＣ１０８は、検出部１０６により検出された合成電流をＡＤ変換して、デジタル値に変換する。例えば、ＡＤＣ１０８は、検出部１０６が微小抵抗である場合、微小抵抗の電圧値をデジタル値に変換する。そして、ＡＤＣ１０８は、出力したデジタル値を微小抵抗の抵抗値で除算した値を、下位累積値として出力する。
【０１７８】
下位乗算部５４および下位累積部５６は、このような構成とすることにより、高速に乗算処理および累積処理を実行することができる。
【０１７９】
なお、上位乗算部５０および上位累積部５２も、図１５と同様の構成であってもよい。この場合、書込部１０２が、乗算に先だって、係数における対応するビットの値を、それぞれの抵抗変化メモリ１１４のコンダクタンスに設定すればよい。
【０１８０】
図１６は、容量結合メモリ１２４を用いた下位乗算部５４および下位累積部５６の構成例を示す。下位乗算部５４および下位累積部５６は、例えば、図１６に示すような構成であってもよい。
【０１８１】
図１６に示す下位乗算部５４は、図１５に示す構成における抵抗変化メモリ１１４に代えて、容量結合メモリ１２４を有する。複数の容量結合メモリ１２４は、書き込み時において、キャパシタンスが変化し、印加された電圧に応じたキャパシタンスに設定される。また、複数の容量結合メモリ１２４は、読み出し時において、キャパシタンスが変化せず、設定されたキャパシタンスのキャパシタとして機能する。
【０１８２】
書込部１０２は、乗算に先だって、複数の容量結合メモリ１２４のそれぞれを、対応する係数に応じたキャパシタンスに設定する。例えば、書込部１０２は、それぞれの容量結合メモリ１２４に、対応する係数における停止桁より小さい桁の値に応じたキャパシタンスとなるような電圧を印加する。
【０１８３】
これにより、ｗ１に対応する容量結合メモリ１２４（１２４−１１，１２４−２１，…，１２４−Ｎ１）は、ｗ１Ｌに対応するキャパシタンスに設定される。また、ｗ２に対応する容量結合メモリ１２４（１２４−１２，１２４−２２，…，１２４−Ｎ２）は、ｗ２Ｌに対応するキャパシタンスに設定される。また、ｗＮに対応する容量結合メモリ１２４（１２４−１Ｎ，１２４−２Ｎ，…，１２４−ＮＮ）は、ｗＮＬに対応するキャパシタンスに設定される。
【０１８４】
読出部１０４は、複数の容量結合メモリ１２４のそれぞれに、対応する入力値に応じた電圧を印加する。複数の容量結合メモリ１２４のそれぞれは、対応する係数に応じたキャパシタンスに設定されている。これにより、複数の容量結合メモリ１２４は、対応する入力値と、対応する係数とを乗算した値に応じた電荷を蓄積することができる。
【０１８５】
第１の入力電圧発生部１２０−１は、ｘ１に応じた電圧を、第１のロウライン１１０−１に印加する。これにより、ｘ１に対応する容量結合メモリ１２４（１２４−１１，１２４−１２，…，１２４−１Ｎ）は、ｘ１に応じた電圧が印加される。
【０１８６】
第２の入力電圧発生部１２０−２は、ｘ２に応じた電圧を、第２のロウライン１１０−２に印加する。これにより、ｘ２に対応する容量結合メモリ１２４（１２４−２１，１２４−２２，…，１２４−２Ｎ）は、ｘ２に応じた電圧が印加される。
【０１８７】
第Ｎの入力電圧発生部１２０−Ｎは、ｘＮに応じた電圧を、第Ｎのロウライン１１０−Ｎに印加する。これにより、ｘＮに対応する容量結合メモリ１２４（１２４−Ｎ１，１２４−Ｎ２，…，１２４−ＮＮ）は、ｘＮに応じた電圧が印加される。
【０１８８】
これにより、（Ｎ×Ｎ）個の容量結合メモリ１２４のそれぞれは、対応する入力値と、
と、対応する係数における停止桁より小さい桁の値とを乗算した値に応じた電荷を蓄積することができる。すなわち、ｉ番目の入力値およびｉ番目の係数に対応する容量結合メモリ１２４−ｉｉは、（ｘｉ×ｗｉＬ）に応じた電荷を蓄積することができる。
【０１８９】
下位累積部５６は、複数の容量結合メモリ１２４のそれぞれに蓄積した電荷を合計した値を、下位累積値として検出する。
【０１９０】
例えば、検出部１０６は、２つのＦＥＴ（電界効果トランジスタ）で構成されるインバータ回路である。インバータ回路のゲート端子は、Ｎ本のカラムライン１１２のそれぞれに接続される。あるキャパシタに印加される電圧をＶ、そのキャパシタのキャパシタンスをｗとした場合、そのキャパシタに蓄積される電荷は、ｗ×Ｖとなる。また、インバータの回路のゲート端子には、全ての容量結合メモリ１２４が並列に接続されており、全体として１つのキャパシタとして見える。インバータの回路のゲート端子に接続されたキャパシタに電荷が蓄積された場合、蓄積された電荷分、ゲート端子の電位が上昇する。従って、ＡＤＣ１０８は、インバータ回路の出力端の電位の上昇分を測定することにより、下位累積値を表すデジタル値を出力することができる。
【０１９１】
下位乗算部５４および下位累積部５６は、このような構成とすることにより、高速に乗算処理および累積処理を実行することができる。
【０１９２】
なお、上位乗算部５０および上位累積部５２も、図１６と同様の構成であってもよい。この場合、書込部１０２が、乗算に先だって、係数における対応するビットの値を、それぞれの容量結合メモリ１２４のキャパシタンスに設定すればよい。
【０１９３】
図１７は、ネットワーク装置１３０の構成を示す図である。ネットワークユニット１０は、例えば、図１７に示すようなニューラルネットワークを構成するネットワーク装置１３０に適用される。
【０１９４】
ネットワーク装置１３０は、従属に接続された複数の層を備える。例えば、ネットワーク装置１３０は、入力層１３２と、少なくとも１つの中間層１３４と、出力層１３６とを備える。入力層１３２、中間層１３４および出力層１３６のそれぞれは、少なくとも１つの信号の取得処理、取得した信号に対する演算処理、および、少なくとも１つの信号の出力処理を実行する。
【０１９５】
入力層１３２、少なくとも１つの中間層１３４および出力層１３６は、直列に接続される。入力層１３２は、外部から信号値を受け取り、演算処理を実行する。そして、入力層１３２は、演算結果として得られた少なくとも１つの信号値を、次段の中間層１３４へ出力する。
【０１９６】
また、それぞれの中間層１３４は、前段から受け取った少なくとも１つの信号値に対して演算処理を実行する。そして、それぞれの中間層１３４は、演算結果として得られた少なくとも１つの信号値を、次段の中間層１３４または出力層１３６へと出力する。さらに、それぞれの中間層１３４は、自身への信号を帰還させる帰還路を有してもよい。
【０１９７】
出力層１３６は、前段の中間層１３４から受け取った信号値に対して演算処理を実行する。そして、出力層１３６は、演算結果として確率値等を出力する。例えば、出力層１３６は、ソフトマックス関数による演算を実行する。
【０１９８】
そして、入力層１３２、少なくとも１つの中間層１３４および出力層１３６の何れかの層は、少なくとも１つのネットワークユニット１０を含む。何れかの層に含まれるネットワークユニット１０は、直前の層から出力されたＮ個の信号値を入力値として受け取る。また、何れかの層に含まれるネットワークユニット１０は、出力値を、信号値として次の段または外部へと出力する。
【０１９９】
以上のように、本実施形態に係るネットワークユニット１０および積和演算器２０は、活性化関数回路３０に適切な精度の中間値を与えて、効率良く出力値を出力させることができる。すなわち、積和演算器２０は、活性化関数の飽和領域となる中間値（乗累算値）を出力する場合には、精度は低いが、高速化および低電力化を図った処理を実行することができる。また、積和演算器２０は、活性化関数の過渡領域となる中間値（乗累算値）を出力する場合には、精度の良い処理を実行することができる。
【０２００】
本発明の実施形態を説明したが、実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２０１】
１０  ネットワークユニット
２０  積和演算器
３０  活性化関数回路
４２  入力値保持部
４４  係数記憶部
４６  制御部
４８  取得部
５０  上位乗算部
５２  上位累積部
５４  下位乗算部
５６  下位累積部
５８  比較部
６０  出力部
６２  第１メモリ
６４  第２メモリ
７０  反転器
７２  第１切替器
７４  第１乗算器
７６  シフト回路
７７  第２乗算器
７８  加算器
８０  第３乗算器
８２  第２切替器
８４  第３切替器
１００  メモリアレイ
１０２  書込部
１０４  読出部
１０６  検出部
１０８  ＡＤＣ
１１０  ロウライン
１１２  カラムライン
１１４  抵抗変化メモリ
１１６  係数電圧発生部
１１８  ロウラインスイッチ
１２０  入力電圧発生部
１２２  カラムラインスイッチ
１３０  ネットワーク装置
１３２  入力層
１３４  中間層
１３６  出力層
【図１】
2018120433.tif 000019
【図２】
2018120433.tif 000020
【図３】
2018120433.tif 000021
【図４】
2018120433.tif 000022
【図５】
2018120433.tif 000023
【図６】
2018120433.tif 000024
【図７】
2018120433.tif 000025
【図８】
2018120433.tif 000026
【図９】
2018120433.tif 000027
【図１０】
2018120433.tif 000028
【図１１】
2018120433.tif 000029
【図１２】
2018120433.tif 000030
【図１３】
2018120433.tif 000031
【図１４】
2018120433.tif 000032
【図１５】
2018120433.tif 000033
【図１６】
2018120433.tif 000034
【図１７】
2018120433.tif 000035