(57)【要約】【課題】ＦＰＧＡのリコンフィグレーション機能よりも、ニューラルネットワーク回路の構成を短時間で変更することができる技術を提供することを目的とする。【解決手段】ニューラルネットワーク回路２０は、入力データに対して演算処理を行い、当該演算処理の結果である出力データを出力する演算回路８００と、演算回路８００への入力データの供給を制御する入力データ制御部２００とを備え、演算回路８００は、重みパラメータ及び選択パラメータを格納する格納部７００と、それぞれが、入力データ制御部２００が供給した入力データと、格納部７００が格納する重みパラメータとの積を算出する複数の乗算器の乗算器３００、乗算器３０１及び乗算器３０２と、複数の乗算器がそれぞれ算出した積の和を算出する加算器５００と、格納部７００が格納する選択パラメータに応じて、加算器５００が算出した和を加算器５００にフィードバックする選択部４００と、を備えている。【選択図】図２
2020135175.tif 000002
【特許請求の範囲】
【請求項１】
入力データに対して演算処理を行い、当該演算処理の結果である出力データを出力する演算回路と、
前記演算回路への入力データの供給を制御する入力データ制御部とを備え、
前記演算回路は、
重みパラメータ及び選択パラメータを格納する格納部と、
それぞれが、前記入力データ制御部が供給した入力データと、前記格納部が格納する重みパラメータとの積を算出する複数の乗算器と、
前記複数の乗算器がそれぞれ算出した積の和を算出する加算器と、
前記格納部が格納する選択パラメータに応じて、前記加算器が算出した和を前記加算器にフィードバックする選択部と、を備えていることを特徴とする、ニューラルネットワーク回路。
【請求項２】
前記入力データ制御部は、前記複数の乗算器のうちの一部又は全ての乗算器に前記入力データを供給し、
前記複数の乗算器のうちの一部又は全ての乗算器は、それぞれ、前記入力データ制御部が供給した入力データと、前記格納部が格納する重みパラメータとの積を算出し、
前記加算器は、前記複数の乗算器のうちの一部又は全ての乗算器がそれぞれ前記入力データを用いて算出した積の和である第１の和を算出し、
前記入力データ制御部は、前記複数の乗算器のうちの一部又は全ての乗算器に前記入力データとは別の入力データを供給し、
前記複数の乗算器のうちの一部又は全ての乗算器は、それぞれ、前記入力データ制御部が供給した別の入力データと、前記格納部が格納する重みパラメータとの積を算出し、
前記加算器は、前記複数の乗算器のうちの一部又は全ての乗算器がそれぞれ前記別の入力データを用いて算出した積の和である第２の和を算出し、
前記選択部は、前記選択パラメータに応じて、前記加算器が算出した第１の和を前記加算器にフィードバックし、
前記加算器は、前記選択部がフィードバックした第１の和と、算出した第２の和との和である第３の和を算出することを特徴とする、請求項１に記載のニューラルネットワーク回路。
【請求項３】
前記入力データ制御部は、第１の入力データを、前記複数の乗算器のうちの第１の乗算器に供給し、第２の入力データを、前記複数の乗算器のうちの第２の乗算器に供給し、
前記第１の乗算器は、前記入力データ制御部が供給した第１の入力データと、前記格納部が格納する重みパラメータとの積である第１の積を算出し、
前記第２の乗算器は、前記入力データ制御部が供給した第２の入力データと、前記格納部が格納する重みパラメータとの積である第２の積を算出し、
前記加算器は、前記第１の積と前記第２の積との和である第１の和を算出し、
前記入力データ制御部は、第３の入力データを、前記複数の乗算器のうちの第１の乗算器に供給し、第４の入力データを、前記複数の乗算器のうちの第２の乗算器に供給し、
前記第１の乗算器は、前記入力データ制御部が供給した第３の入力データと、前記格納部が格納する重みパラメータとの積である第３の積を算出し、
前記第２の乗算器は、前記入力データ制御部が供給した第４の入力データと、前記格納部が格納する重みパラメータとの積である第４の積を算出し、
前記加算器は、前記第３の積と前記第４の積との和である第２の和を算出し、
前記選択部は、前記選択パラメータに応じて、前記加算器が算出した第１の和を前記加算器にフィードバックし、
前記加算器は、前記選択部がフィードバックした第１の和と、算出した第２の和との和である第３の和を算出することを特徴とする、請求項１又は２に記載のニューラルネットワーク回路。
【請求項４】
前記入力データ制御部は、前記入力データの数をmとし、前記複数の乗算器の数をnとして、前記複数の乗算器のうちのceil(m/ceil(m/n))個の乗算器にceil(m/ceil(m/n))個ずつ前記入力データを供給することを特徴とする、請求項１から請求項３の何れか１項に記載のニューラルネットワーク回路。
【請求項５】
前記演算回路を複数備え、
前記複数の演算回路のうちの第１の演算回路が備えている選択部は、前記格納部が格納する選択パラメータに応じて、前記複数の演算回路のうちの第２の演算回路が備えている加算器が算出した和を、前記第１の演算回路が備えている加算器にさらに出力し、
前記第１の演算回路が備えている加算器は、算出した和と、第２の演算回路が備えている加算器が算出した和との和を算出することを特徴とする、請求項１から請求項４の何れか１項に記載のニューラルネットワーク回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ニューラルネットワーク回路に関する。
【背景技術】
【０００２】
ニューラルネットワークは、一般的に、積和演算回路を用いて構成される。また、ニューラルネットワークは、学習又は推論する対象（以下、学習又は推論対象）に応じて異なった構成となるため、学習又は推論対象を変更する場合には、ニューラルネットワークの構成の変更に伴って、ニューラルネットワーク回路の構成を変更する必要がある。そこで、従来では、ニューラルネットワークの学習又は推論対象を変更する際に、ＦＰＧＡ（field-programmable gate array）のリコンフィグレーション機能を利用し、ＦＰＧＡ内の論理回路を書き換える方法が用いられている（例えば、特許文献１参照）。なお、ＦＰＧＡのリコンフィグレーション機能とは、ＦＰＧＡに変更後の設計データを書き込むことで、例えば、ＦＰＧＡが備えている複数のロジックセル間の配線の接続を変更することにより、ＦＰＧＡの論理回路を書き換える機能を意味する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１８−１３２８３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来のリコンフィグレーション機能を利用してＦＰＧＡの論理回路を書き換える手法では、ＦＰＧＡのリコンフィグレーション機能を動作させるのに時間を要するため、ニューラルネットワークの学習又は推論対象を変更する際に、新たな学習又は推論対象に対応したニューラルネットワーク回路の構成を構築しなおすまでに時間を要するという問題がある。
この発明は、上記のような問題点を解決するためになされたものであり、ＦＰＧＡのリコンフィグレーション機能よりも、ニューラルネットワーク回路の構成を短時間で変更することができる技術を提供することを目的とする。
【課題を解決するための手段】
【０００５】
この発明に係るニューラルネットワーク回路は、入力データに対して演算処理を行い、当該演算処理の結果である出力データを出力する演算回路と、演算回路への入力データの供給を制御する入力データ制御部とを備え、演算回路は、重みパラメータ及び選択パラメータを格納する格納部と、それぞれが、入力データ制御部が供給した入力データと、格納部が格納する重みパラメータとの積を算出する複数の乗算器と、複数の乗算器がそれぞれ算出した積の和を算出する加算器と、格納部が格納する選択パラメータに応じて、加算器が算出した和を加算器にフィードバックする選択部と、を備えている。
【発明の効果】
【０００６】
ＦＰＧＡのリコンフィグレーション機能よりも、ニューラルネットワーク回路の構成を短時間で変更することができる。
【図面の簡単な説明】
【０００７】
【図１】実施の形態１に係るニューラルネットワーク回路を含む学習・推論システムの構成を示すブロック図である。
【図２】実施の形態１に係るニューラルネットワーク回路の構成を示すブロック図である。
【図３】実施の形態１に係るニューラルネットワーク回路による第１の演算処理方法を示すフローチャートである。
【図４】実施の形態１に係るニューラルネットワーク回路の動作の第１の具体例を説明するための図である。
【図５】実施の形態１に係るニューラルネットワーク回路による第２の演算処理方法を示すフローチャートである。
【図６】実施の形態１に係るニューラルネットワーク回路の動作の第２の具体例を説明するための図である。
【図７】実施の形態２に係るニューラルネットワーク回路の構成を示すブロック図である。
【図８】実施の形態２に係るニューラルネットワーク回路による演算処理方法を示すフローチャートである。
【図９】実施の形態２に係るニューラルネットワーク回路の動作の具体例を説明するための図である。
【発明を実施するための形態】
【０００８】
以下、この発明をより詳細に説明するため、この発明を実施するための形態について、添付の図面に従って説明する。
実施の形態１．
図１は、実施の形態１に係るニューラルネットワーク回路２０を含む学習・推論システム１の構成を示すブロック図である。図１が示すように、学習・推論システム１は、情報入力部１０、ニューラルネットワーク回路２０、制御部３０、及び学習・推論結果出力部４０を備えている。
【０００９】
情報入力部１０は、ユーザによる入力により、ニューラルネットワーク回路２０が学習又は推論を行う対象である入力データを取得する。情報入力部１０は、入力データを、制御部３０を介してニューラルネットワーク回路２０に出力する。情報入力部１０の例として、カメラ、マイク又はキーボード等が挙げられる。情報入力部１０が入力する入力データの例として、画像データ、音声データ、又は文字列データ等が挙げられる。
ニューラルネットワーク回路２０は、情報入力部１０から取得した入力データを参照して、学習処理及び推論処理を行う。ニューラルネットワーク回路２０は、当該学習処理及び推論処理の結果である出力データを制御部３０に出力する。ニューラルネットワーク回路２０の詳細な説明は後述する。
【００１０】
制御部３０は、情報入力部１０から取得した入力データを参照して、学習処理及び推論処理に用いられる重みパラメータ及び選択パラメータを設定又は更新する。次に、制御部３０は、当該入力データ、重みパラメータ及び選択パラメータをニューラルネットワーク回路２０に出力し、ニューラルネットワーク回路２０から出力データを取得する。次に、制御部３０は、当該出力データを参照して、ニューラルネットワーク回路２０が学習処理及び推論処理に用いた重みパラメータ及び選択パラメータを設定又は更新する。以上の工程により、制御部３０は、ニューラルネットワーク回路２０による学習処理及び推論処理を制御する。なお、制御部３０は、ニューラルネットワーク回路２０から取得した出力データを参照して、重みパラメータを更新した後に、当該出力データをニューラルネットワーク回路２０に戻してもよい。その場合、ニューラルネットワーク回路２０は、当該出力データを用いて、再度、学習処理及び推論処理を行ってもよい。また、制御部３０は、ニューラルネットワーク回路２０から取得した出力データを、学習・推論結果出力部４０による出力に適した形態に変換し、変換後のデータを学習・推論結果出力部４０に出力する。当該変換後のデータの例として、画像データ、音声データ又は文字データ等が挙げられる。制御部３０の例として、ＣＰＵが挙げられる。
学習・推論結果出力部４０は、制御部３０から取得した変換後のデータを、画像、音声又は文字等の形態として出力する。学習・推論結果出力部４０の例として、ディスプレイ、ＬＥＤ又はスピーカ等が挙げられる。
【００１１】
図２は、実施の形態１に係るニューラルネットワーク回路２０の構成を示すブロック図である。図２が示すように、ニューラルネットワーク回路２０は、入力データ制御部２００、バッファ２１０、第１の演算回路８００、及び第１の演算回路８００と同様の構成を有する第２の演算回路９００を備えている。なお、実施の形態１では、ニューラルネットワーク回路２０が２つの演算回路を備えている構成について説明するが、ニューラルネットワーク回路２０が備える演算回路の数は、これに限定されず、１以上の任意の数であり得る。
【００１２】
バッファ２１０は、制御部３０から入力データを取得し、当該入力データを一時的に蓄積する。バッファ２１０は、蓄積した入力データの一部又は全部を入力データ制御部２００に出力する。
入力データ制御部２００は、バッファ２１０から複数の入力データを取得し、第１の演算回路８００及び第２の演算回路９００への各入力データの供給を制御する。入力データ制御部２００が入力データの供給を制御する方法の詳細については後述する。また、入力データ制御部２００は、後述する格納部７００からの重みパラメータ及び選択パラメータの出力を制御することにより、第１の演算回路８００及び第２の演算回路９００による各演算処理をさらに制御する。
【００１３】
第１の演算回路８００は、乗算器３００、乗算器３０１、乗算器３０２、選択部４００、加算器５００、出力部６００、及び格納部７００を備えている。なお、本実施形態では、第１の演算回路８００及び第２の演算回路９００が、それぞれ、３つの乗算器を備えている構成について説明する。しかし、第１の演算回路８００及び第２の演算回路９００は、それぞれ、複数の乗算器を備えていればよく、第１の演算回路８００が備えている乗算器の数と、第２の演算回路９００が備えている乗算器の数とは、異なっていてもよく、当該構成に限定されない。
【００１４】
格納部７００は、制御部３０が出力した重みパラメータ及び選択パラメータを格納する。また、格納部７００は、入力データ制御部２００の命令に基づいて、格納している重みパラメータを乗算器３００、乗算器３０１、又は乗算器３０２に出力する。なお、重みパラメータは、出力される乗算器毎に存在し、それらの重みパラメータは、互いに同じ値でもよく、異なる値でもよい。また、格納部７００は、入力データ制御部２００の命令に基づいて、格納している選択パラメータを選択部４００に出力する。なお、本実施形態では、入力データ制御部２００が格納部７００からの重みパラメータ及び選択パラメータの出力を制御する構成について説明するが、制御部３０が格納部７００からの重みパラメータ及び選択パラメータの出力を制御してもよい。
【００１５】
乗算器３００、乗算器３０１、及び乗算器３０２は、それぞれ、入力データ制御部２００が供給した入力データと、格納部７００が出力した重みパラメータとの積を算出する。乗算器３００、乗算器３０１、及び乗算器３０２は、それぞれ、算出した積を加算器５００に出力する。
加算器５００は、乗算器３００、乗算器３０１、及び乗算器３０２がそれぞれ算出した積の和を算出する。加算器５００は、算出した和を、後述する選択部４００の動作に応じて、選択部４００又は出力部６００に出力する。
【００１６】
選択部４００は、格納部７００が出力した選択パラメータに応じて、加算器５００が算出した和を加算器５００にフィードバックする。
例えば、選択部４００は、選択パラメータが、加算器５００が算出した和である第１の和を加算器５００にフィードバックするように指示する値である場合、当該第１の和を加算器５００にフィードバックする。次に、加算器５００は、選択部４００がフィードバックした第１の和と、当該第１の和を算出した後に算出した和である第２の和とを加算し、当該加算結果である第３の和を、出力部６００に出力する。一方で、選択部４００は、選択パラメータが、当該第１の和を加算器５００にフィードバックしないように指示する値である場合、０値を加算器５００に出力する。その場合、加算器５００は、算出した和をそのまま出力部６００に出力する。つまり、加算器５００の出力先は、算出した和が選択部４００からフィードバックされた場合、及び、選択部４００から０値を取得した場合、出力部６００であり、それ以外の場合、選択部４００である。
出力部６００は、加算器５００から取得した和を出力データとして制御部３０に出力する。
【００１７】
第２の演算回路９００は、乗算器３１０、乗算器３１１、乗算器３１２、選択部４１０、加算器５１０、出力部６１０、及び格納部７１０を備えている。乗算器３１０、乗算器３１１、乗算器３１２、選択部４１０、加算器５１０、出力部６１０、及び格納部７１０は、それぞれ、上述の乗算器３１０、乗算器３１１、乗算器３１２、選択部４００、加算器５００、出力部６００及び格納部７００と同様の機能を有している。
【００１８】
より詳細には、乗算器３１０は、入力データ制御部２００が乗算器３００に供給した入力データと同一の入力データと、乗算器３００が用いた重みパラメータとは別の重みパラメータとの積を算出する。乗算器３１１は、入力データ制御部２００が乗算器３０１に供給した入力データと同一の入力データと、乗算器３０１が用いた重みパラメータとは別の重みパラメータとの積を算出する。乗算器３１２は、入力データ制御部２００が乗算器３０２に供給した入力データと同一の入力データと、乗算器３０２が用いた重みパラメータとは別の重みパラメータとの積を算出する。
【００１９】
加算器５１０は、乗算器３１０、乗算器３１１、及び乗算器３１２がそれぞれ算出した積の和を算出し、選択部４１０は、格納部７１０が出力した選択パラメータに応じて、加算器５１０が算出した和を加算器５１０にフィードバックする。出力部６１０は、加算器５１０から取得した和を出力データとして制御部３０に出力する。以上の構成により、ニューラルネットワーク回路２０は、第１の演算回路８００が算出した出力データと、第２の演算回路９００が算出した出力データとの２つの出力データを出力する。上述の通り、ニューラルネットワーク回路２０が備える演算回路の数は、２つに限定されず、任意の数であり得る。そのため、本実施形態に係るニューラルネットワーク回路２０は、備えている演算回路の数と同一の数の出力データを出力し得る。
【００２０】
次に、実施の形態１に係るニューラルネットワーク回路２０の動作について図面を参照して説明する。なお、ニューラルネットワーク回路２０は、制御部３０から、入力データと、重みパラメータ及び選択パラメータとを取得した時点から、当該動作を開始する。また、第１の演算回路８００の動作と、第２の演算回路９００の動作とは同じであるため、ニューラルネットワーク回路２０が備えている演算回路の動作の説明に関しては、第１の演算回路８００の動作についてのみ説明する。
【００２１】
まず、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数が、第１の演算回路８００及び第２の演算回路９００がそれぞれ備えている乗算器の数以下である場合における、ニューラルネットワーク回路２０の動作について説明する。図３は、当該場合における、実施の形態１に係るニューラルネットワーク回路２０による演算処理方法を示すフローチャートである。また、本願明細書において、用語「同時」は、厳密に同じ時刻でなくてもよく、実質的に同じ時刻を含むものとする。
【００２２】
図３が示すように、入力データ制御部２００は、乗算器３００、乗算器３０１、及び乗算器３０２に各入力データを供給する（ステップＳＴ１）。また、入力データ制御部２００は、格納部７００が乗算器３００、乗算器３０１、及び乗算器３０２にそれぞれ重みパラメータを出力するように格納部７００に命令する。また、入力データ制御部２００は、格納部７００が選択部４００に選択パラメータを出力するように格納部７００に命令する。
【００２３】
乗算器３００、乗算器３０１、及び乗算器３０２は、それぞれ、入力データ制御部２００が供給した入力データと、格納部７００から取得した重みパラメータとの積を算出する（ステップＳＴ２）。乗算器３００、乗算器３０１、及び乗算器３０２は、算出した各積を加算器５００に出力する。
【００２４】
加算器５００は、乗算器３００、乗算器３０１、及び乗算器３０２がそれぞれ算出した積の和を算出する（ステップＳＴ３）。
選択部４００は、格納部７００から取得した選択パラメータに基づき、加算器５００に０値を出力する（ステップＳＴ４）。次に、加算器５００は、ステップＳＴ３で算出した和をそのまま出力部６００に出力する。
出力部６００は、加算器５００から取得した和を出力データとして制御部３０に出力する（ステップＳＴ５）。
【００２５】
次に、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数が、第１の演算回路８００及び第２の演算回路９００がそれぞれ備えている乗算器の数以下である場合における、ニューラルネットワーク回路２０の動作の具体例について説明する。図４は、当該具体例を説明するための図である。図４では、同一の行に記載されている各ブロックは、ニューラルネットワーク回路２０が備えている何れかの構成が処理する各データを示し、同一の列に記載されている各データは、ニューラルネットワーク回路２０が備えている何れかの構成が同時に処理する各データを示している。なお、図４において網掛けされたブロックは、当該ブロックに対応するニューラルネットワーク回路２０の構成が処理を行わないことを示しているか、又は、当該ブロックに対応するニューラルネットワーク回路２０の構成が処理を行っても処理結果を別の構成に出力しないことを示す。また、以下の具体例では、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数が３であり、第１の演算回路８００及び第２の演算回路９００がそれぞれ備えている乗算器の数が３である場合の例を説明するが、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数は、第１の演算回路８００又は第２の演算回路９００がそれぞれ備えている乗算器の数以下であればよく、当該例に限定されない。
【００２６】
まず、図４のＡの列が示すように、入力データ制御部２００は、上述のステップＳＴ１において、同時に、乗算器３００に入力データＤ１１を供給し、乗算器３０１に入力データＤ１２を供給し、乗算器３０２に入力データＤ１３を供給する。また、入力データ制御部２００は、格納部７００が乗算器３００に重みパラメータＭ１１を出力し、乗算器３０１に重みパラメータＭ１２を出力し、乗算器３０２に重みパラメータＭ１３を出力するように、これらの入力データの供給と同時に格納部７００に命令する。そして、これらの工程の後に、乗算器３００は、上述のステップＳＴ２において、入力データＤ１１と重みパラメータＭ１１との積を算出し、乗算器３０１は、入力データＤ１２と重みパラメータＭ１２との積を算出し、乗算器３０２は、入力データＤ１３と重みパラメータＭ１３との積を算出する。
【００２７】
次に、図４のＢの列が示すように、加算器５００は、上述のステップＳＴ３において、乗算器３００が算出した積であるＤ１１×Ｍ１１と、乗算器３０１が算出した積であるＤ１２×Ｍ１２と、乗算器３０２が算出した積であるＤ１３×Ｍ１３との和を算出する。加算器５００による当該和の算出の次に、又は、当該和の算出と並行して、選択部４００は、上述のステップＳＴ４において、選択パラメータに基づき加算器５００に０値を出力する。次に、加算器５００は、算出した和であるＤ１１×Ｍ１１＋Ｄ１２×Ｍ１２＋Ｄ１３×Ｍ１３をそのまま出力部６００に出力し、出力部６００は、上述のステップＳＴ５において、当該和を出力データとして制御部３０に出力する。
加算器５００による上記工程の実行と並行して、入力データ制御部２００は、上述のステップＳＴ１において、同時に、乗算器３００に入力データＤ２１を供給し、乗算器３０１に入力データＤ２２を供給し、及び乗算器３０２に入力データＤ２３を供給する。また、入力データ制御部２００は、これらの入力データの供給と同時に、格納部７００が乗算器３００に重みパラメータＭ２１を出力し、乗算器３０１に重みパラメータＭ２２を出力し、乗算器３０２に重みパラメータＭ２３を出力するように、格納部７００に命令する。次に、乗算器３００は、上述のステップＳＴ２において、入力データＤ２１と重みパラメータＭ２１との積を算出し、乗算器３０１は、入力データＤ２２と重みパラメータＭ２２との積を算出し、乗算器３０２は、入力データＤ２３と重みパラメータＭ２３との積を算出する。
【００２８】
次に、図４のＣの列が示すように、加算器５００は、上述のステップＳＴ３において、乗算器３００が算出した積であるＤ２１×Ｍ２１と、乗算器３０１が算出した積であるＤ２２×Ｍ２２と、乗算器３０２が算出した積であるＤ２３×Ｍ２３との和を算出する。加算器５００による当該和の算出の次に、又は当該和の算出と並行して、選択部４００は、上述のステップＳＴ４において、格納部７００から取得した選択パラメータに基づき、加算器５００に０値を出力する。次に、加算器５００は、算出した和であるＤ２１×Ｍ２１＋Ｄ２２×Ｍ２２＋Ｄ２３×Ｍ２３をそのまま出力部６００に出力し、出力部６００は、上述のステップＳＴ５において、当該和を出力データとして制御部３０に出力する。
加算器５００による上記工程の実行と並行して、入力データ制御部２００は、上述のステップＳＴ１において、同時に、乗算器３００に入力データＤ３１を供給し、乗算器３０１に入力データＤ３２を供給し、及び乗算器３０２に入力データＤ３３を供給する。また、入力データ制御部２００は、これらの入力データの供給と同時に、格納部７００が乗算器３００に重みパラメータＭ３１を出力し、乗算器３０１に重みパラメータＭ３２を出力し、乗算器３０２に重みパラメータＭ３３を出力するように、格納部７００に命令する。次に、乗算器３００は、上述のステップＳＴ２において、入力データＤ３１とＭ３１との積を算出し、乗算器３０１は、入力データＤ３２とＭ３２との積を算出し、乗算器３０２は、入力データＤ３３とＭ３３との積を算出する。
【００２９】
以上のように、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数が、第１の演算回路８００及び第２の演算回路９００がそれぞれ備えている乗算器の数以下である場合、上記の具体例のように、選択部４００は、加算器５００が算出した和を加算器５００にフィードバックせずに、加算器５００は、当該和を出力部６００に出力する。
【００３０】
次に、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数が、第１の演算回路８００及び第２の演算回路９００がそれぞれ備えている乗算器の数よりも多い場合における、ニューラルネットワーク回路２０の動作について説明する。図５は、当該場合における、実施の形態１に係るニューラルネットワーク回路２０による演算処理方法を示すフローチャートである。
【００３１】
入力データ制御部２００は、第１の入力データを、第１の乗算器である乗算器３００に供給し、第２の入力データを、第２の乗算器である乗算器３０１に供給する（ステップＳＴ１０）。また、入力データ制御部２００は、格納部７００が乗算器３００及び乗算器３０１にそれぞれ重みパラメータを出力するように格納部７００に命令する。
【００３２】
乗算器３００は、入力データ制御部２００から取得した第１の入力データと、格納部７００から取得した重みパラメータとの積である第１の積を算出し、乗算器３０１は、入力データ制御部２００から取得した第２の入力データと、格納部７００から取得した重みパラメータとの積である第２の積を算出する（ステップＳＴ１１）。乗算器３００は、算出した第１の積を加算器５００に出力し、乗算器３０１は、算出した第２の積を加算器５００に出力する。
【００３３】
加算器５００は、乗算器３００が算出した第１の積と、乗算器３０１が算出した第２の積との和である第１の和を算出する（ステップＳＴ１２）。加算器５００は、算出した第１の和を選択部４００に出力する。
【００３４】
入力データ制御部２００は、第３の入力データを、乗算器３００に供給し、第４の入力データを、乗算器３０１に供給する（ステップＳＴ１３）。また、入力データ制御部２００は、格納部７００が乗算器３００及び乗算器３０１にそれぞれ重みパラメータを出力するように格納部７００に命令する。なお、当該重みパラメータは、ステップＳＴ１０及びステップＳＴ１１における重みパラメータとは別の重みパラメータであり、値が異なっていてもよく、同一であってもよい。また、入力データ制御部２００は、格納部７００が選択部４００に選択パラメータを出力するように格納部７００に命令する。
【００３５】
乗算器３００は、入力データ制御部２００から取得した第３の入力データと、格納部７００から取得した重みパラメータとの積である第３の積を算出し、乗算器３０１は、入力データ制御部２００から取得した第４の入力データと、格納部７００から取得した重みパラメータとの積である第４の積を算出する（ステップＳＴ１４）。乗算器３００は、算出した第３の積を加算器５００に出力し、乗算器３０１は、算出した第４の積を加算器５００に出力する。
【００３６】
加算器５００は、乗算器３００が算出した第３の積と、乗算器３０１が算出した第４の積との和である第２の和を算出する（ステップＳＴ１５）。
選択部４００は、格納部７００から取得した選択パラメータに基づき、加算器５００から取得した第１の和を加算器５００にフィードバックする（ステップＳＴ１６）。
加算器５００は、選択部４００がフィードバックした第１の和と、算出した第２の和との和である第３の和を算出する（ステップＳＴ１７）。加算器５００は、算出した第３の和を出力部６００に出力する。
出力部６００は、加算器５００から取得した第３の和を出力データとして制御部３０に出力する（ステップＳＴ１８）。
【００３７】
次に、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数が、第１の演算回路８００及び第２の演算回路９００がそれぞれ備えている乗算器の数よりも多い場合における、ニューラルネットワーク回路２０の動作の具体例について説明する。図６は、当該具体例を説明するための図である。図６では、同一の行に記載されている各ブロックは、ニューラルネットワーク回路２０が備えている何れかの構成が処理する各データを示し、同一の列に記載されている各データは、ニューラルネットワーク回路２０が備えている何れかの構成が同時に処理する各データを示している。なお、図６において網掛けされたブロックは、当該ブロックに対応するニューラルネットワーク回路２０の構成が処理を行わないことを示しているか、又は、当該ブロックに対応するニューラルネットワーク回路２０の構成が処理を行っても処理結果を別の構成に出力しないことを示す。また、以下の具体例では、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数が４であり、第１の演算回路８００及び第２の演算回路９００がそれぞれ備えている乗算器の数が３である場合の例を説明するが、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数は、第１の演算回路８００又は第２の演算回路９００がそれぞれ備えている乗算器の数よりも多ければよく、当該例に限定されない。
【００３８】
図６のＤの列が示すように、入力データ制御部２００は、上述のステップＳＴ１０において、同時に、乗算器３００に入力データＤ１１（第１の入力データ）を供給し、乗算器３０１に入力データＤ１２（第２の入力データ）を供給する。また、入力データ制御部２００は、これらの入力データの供給と同時に、格納部７００が乗算器３００に重みパラメータＭ１１を出力し、乗算器３０１に重みパラメータＭ１２を出力するように、格納部７００に命令する。そして、上記の各工程の後に、乗算器３００は、上述のステップＳＴ１１において、入力データＤ１１と重みパラメータＭ１１との積（第１の積）を算出し、乗算器３０１は、入力データＤ１２と重みパラメータＭ１２との積（第２の積）を算出する。
【００３９】
図６のＥの列が示すように、加算器５００は、上述のステップＳＴ１２において、乗算器３００が算出した積であるＤ１１×Ｍ１１と、乗算器３０１が算出した積であるＤ１２×Ｍ１２との和（第１の和）を算出する。加算器５００による当該和の算出の次に、又は、当該和の算出と並行して、入力データ制御部２００は、上述のステップＳＴ１３において、乗算器３００に入力データＤ１３（第３の入力データ）を供給し、乗算器３０１に入力データＤ１４（第４の入力データ）を供給する。また、入力データ制御部２００は、格納部７００が乗算器３００に重みパラメータＭ１３を出力し、乗算器３０１に重みパラメータＭ１４を出力するように、これらの入力データの供給と同時に格納部７００に命令する。次に、乗算器３００は、上述のステップＳＴ１４において、入力データＤ１３と重みパラメータＭ１３との積（第３の積）を算出し、乗算器３０１は、入力データＤ１４と重みパラメータＭ１４との積（第４の積）を算出する。
【００４０】
図６のＦの列が示すように、加算器５００は、上述のステップＳＴ１５において、乗算器３００が算出した積であるＤ１３×Ｍ１３と、乗算器３０１が算出した積であるＤ１４×Ｍ１４との和（第２の和）を算出する。加算器５００による当該和の算出の次に、又は、当該和の算出と並行して、選択部４００は、上述のステップＳＴ１６において、格納部７００から取得した選択パラメータに基づき、加算器５００が算出した和であるＤ１１×Ｍ１１＋Ｄ１２×Ｍ１２を加算器５００に出力する。そして、加算器５００は、上述のステップＳＴ１７において、選択部４００から取得した第１の和Ｄ１１×Ｍ１１＋Ｄ１２×Ｍ１２と、算出した第２の和Ｄ１３×Ｍ１３＋Ｄ１４×Ｍ１４との和（第３の和）を算出する。次に、加算器５００は、算出した第３の和であるＤ１１×Ｍ１１＋Ｄ１２×Ｍ１２＋Ｄ１３×Ｍ１３＋Ｄ１４×Ｍ１４をそのまま出力部６００に出力し、出力部６００は、上述のステップＳＴ１８において、当該第３の和を出力データとして制御部３０に出力する。一方で、入力データ制御部２００は、上述のステップＳＴ１０の工程に戻り、乗算器３００に入力データＤ２１（第１の入力データ）を供給し、乗算器３０１に入力データＤ２２（第２の入力データ）を供給する。また、入力データ制御部２００は、格納部７００が乗算器３００に重みパラメータＭ２１を出力し、乗算器３０１に重みパラメータＭ２２を出力するように、これらの入力データの供給と同時に、格納部７００に命令する。なお、図６のＧの列及びＨの列に関する構成は、Ｅの列及びＦの列に関する構成と同様のため、説明を省略する。
【００４１】
以上のように、上記の具体例では、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数が、第１の演算回路８００及び第２の演算回路９００がそれぞれ備えている乗算器の数よりも多い。その場合、選択部４００が、加算器５００が算出した和を加算器５００にフィードバックすることにより、加算器５００は、それぞれ異なる時刻に算出した２つの和同士を加算する。上記の具体例では、入力データ制御部２００がステップＳＴ１０において第１の演算回路が備えている複数の乗算器のうちの第１の乗算器３００及び第２の乗算器３０１に入力データを供給し、第１の乗算器３００及び第２の乗算器３０１がそれぞれステップＳＴ１１で第１の積及び第２の積を算出する構成を説明したが、当該構成に限定されない。入力データ制御部２００は、第１の演算回路が備えている複数の乗算器のうちの一部又は全ての乗算器に供給し得る。また、当該複数の乗算器のうちの一部又は全ての乗算器は、それぞれ、入力データ制御部２００が供給した入力データと、格納部７００が格納する重みパラメータとの積を算出し得る。
【００４２】
以上の、実施の形態１に係るニューラルネットワーク回路２０の動作の説明において、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数が、第１の演算回路８００及び第２の演算回路９００がそれぞれ備えている乗算器の数以下である場合における、ニューラルネットワーク回路２０の動作と、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数が、第１の演算回路８００及び第２の演算回路９００がそれぞれ備えている乗算器の数よりも多い場合における、ニューラルネットワーク回路２０の動作とについて説明した。このように、ニューラルネットワーク回路２０の動作は、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数と、第１の演算回路８００及び第２の演算回路９００がそれぞれ備えている乗算器の数とによって異なる。これを一般化すると、入力データ制御部２００は、入力データ制御部２００が各乗算器に同時に供給する入力データの数をｍとし、第１の演算回路８００及び第２の演算回路９００がそれぞれ備えている乗算器の数をｎとして、一時的にバッファ２１０にｍ個のデータを蓄積し、バッファ２１０から、ceil(m/ceil(m/n))個ずつ入力データを取得し、ｎ個の乗算器のうちのceil(m/ceil(m/n))個の乗算器に、ceil(m/ceil(m/n))個ずつ入力データを供給する。なお、「ceil(m/ceil(m/n))」における「ceil()」は、引数に対して小数点第一位を切り上げる関数を示す。
【００４３】
以上のように、実施の形態１に係るニューラルネットワーク回路２０は、入力データに対して演算処理を行い、当該演算処理の結果である出力データを出力する第１の演算回路８００と、演算回路への入力データの供給を制御する入力データ制御部２００とを備え、第１の演算回路８００は、重みパラメータ及び選択パラメータを格納する格納部７００と、それぞれが、入力データ制御部２００が供給した入力データと、格納部７００が格納する重みパラメータとの積を算出する複数の乗算器の乗算器３００、乗算器３０１及び乗算器３０２と、複数の乗算器がそれぞれ算出した積の和を算出する加算器５００と、格納部７００が格納する選択パラメータに応じて、加算器５００が算出した和を加算器５００にフィードバックする選択部４００と、を備えている。
【００４４】
上記の構成によれば、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数が、第１の演算回路８００及び第２の演算回路９００がそれぞれ備えている乗算器の数以下である場合、入力データ制御部２００が複数の乗算器への各入力データの供給を制御することにより、入力データの数と同一の数の乗算器が入力データを並列に処理することができる。また、上記の構成によれば、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数が、第１の演算回路及び第２の演算回路がそれぞれ備えている乗算器の数よりも多い場合、入力データ制御部２００が入力データを分割して、分割された入力データをそれぞれ異なるタイミングで複数の乗算器に供給することにより入力データの時分割を行い、複数の乗算器と、加算器５００とが、分割された入力データを順に処理し、選択部４００が、加算器５００が過去に処理した入力データを当該加算器５００にフィードバックする。これにより、入力データの時分割処理を行うことができる。このような入力データ制御部２００による複数の乗算器への入力データの供給の制御と、選択部４００による加算器５００へのフィードバックとにより、ニューラルネットワークの学習又は推論対象を変更する際に、ＦＰＧＡのリコンフィグレーション機能のようには論理回路を書き換えずに、ニューラルネットワーク回路の構成を変更することができる。よって、ＦＰＧＡのリコンフィグレーション機能よりも、ニューラルネットワーク回路の構成を短時間で変更することができる。
【００４５】
また、上記の構成によれば、上述の通り、入力データを並列に処理することができるため、演算処理に要する時間を抑制することができる。また、上記の構成によれば、上述の通り、入力データの時分割処理を行うことができるため、並列に処理を行う乗算器の数を制限し、回路規模を縮小した状態でも演算処理を行うことができる。これにより、ニューラルネットワーク回路の演算処理時間と回路規模とのバランスを動的に変更することができる。よって、学習又は推論対象を変更しても、変更後の学習又は推論対象に最適なニューラルネットワーク回路を、時間を要することなく構築できる。
【００４６】
また、実施の形態１に係るニューラルネットワーク回路２０は、入力データ制御部２００は、複数の乗算器のうちの一部又は全ての乗算器に入力データを供給し、複数の乗算器のうちの一部又は全ての乗算器は、それぞれ、入力データ制御部２００が供給した入力データと、格納部７００が格納する重みパラメータとの積を算出し、加算器５００は、複数の乗算器のうちの一部又は全ての乗算器がそれぞれ入力データを用いて算出した積の和である第１の和を算出し、入力データ制御部２００は、複数の乗算器のうちの一部又は全ての乗算器に入力データとは別の入力データを供給し、複数の乗算器のうちの一部又は全ての乗算器は、それぞれ、入力データ制御部２００が供給した別の入力データと、格納部７００が格納する重みパラメータとの積を算出し、加算器５００は、複数の乗算器のうちの一部又は全ての乗算器がそれぞれ別の入力データを用いて算出した積の和である第２の和を算出し、選択部４００は、選択パラメータに応じて、加算器５００が算出した第１の和を加算器５００にフィードバックし、加算器５００は、選択部４００がフィードバックした第１の和と、算出した第２の和との和である第３の和を算出する。
【００４７】
上記の構成によれば、実施の形態１に係るニューラルネットワーク回路は、入力データ制御部２００が入力データを分割して、分割された入力データを複数の乗算器のうちの一部又は全ての乗算器にそれぞれ供給し、複数の乗算器のうちの一部又は全ての乗算器と、加算器５００とが、分割された入力データを順に処理し、選択部４００が、加算器５００が過去に処理したデータを当該加算器５００にフィードバックする。加算器５００は、現行の処理済みのデータと、選択部４００がフィードバックしたデータとを加算する。これにより、入力データの時分割処理を行うことができる。
【００４８】
また、実施の形態１に係るニューラルネットワーク回路２０は、入力データ制御部２００は、第１の入力データを、複数の乗算器のうちの第１の乗算器３００に供給し、第２の入力データを、複数の乗算器のうちの第２の乗算器３０１に供給し、第１の乗算器３００は、入力データ制御部２００が供給した第１の入力データと、格納部７００が格納する重みパラメータとの積である第１の積を算出し、第２の乗算器３０１は、入力データ制御部２００が供給した第２の入力データと、格納部７００が格納する重みパラメータとの積である第２の積を算出し、加算器５００は、第１の積と第２の積との和である第１の和を算出し、入力データ制御部２００は、第３の入力データを、複数の乗算器のうちの第１の乗算器３００に供給し、第４の入力データを、複数の乗算器のうちの第２の乗算器３０１に供給し、第１の乗算器３００は、入力データ制御部２００が供給した第３の入力データと、格納部７００が格納する重みパラメータとの積である第３の積を算出し、第２の乗算器３０１は、入力データ制御部２００が供給した第４の入力データと、格納部７００が格納する重みパラメータとの積である第４の積を算出し、加算器５００は、第３の積と第４の積との和である第２の和を算出し、選択部４００は、選択パラメータに応じて、加算器５００が算出した第１の和を加算器５００にフィードバックし、加算器５００は、選択部４００がフィードバックした第１の和と、算出した第２の和との和である第３の和を算出する。
【００４９】
上記の構成によれば、実施の形態１に係るニューラルネットワーク回路は、入力データ制御部２００が第１の入力データ、第２の入力データ、第３の入力データ及び第４の入力データの複数の入力データを分割して、分割された入力データを第１の乗算器３００及び第２の乗算器３０１にそれぞれ供給し、第１の乗算器３００及び第２の乗算器３０１と、加算器５００とが、分割された入力データを順に処理し、選択部４００が、加算器５００が過去に処理したデータを当該加算器５００にフィードバックする。加算器５００は、現行の処理済みのデータと、選択部４００がフィードバックしたデータとを加算する。これにより、入力データの時分割処理を行うことができる。
【００５０】
また、実施の形態１に係るニューラルネットワーク回路２０は、入力データ制御部２００は、入力データの数をmとし、複数の乗算器の数をnとして、複数の乗算器のうちのceil(m/ceil(m/n))個の乗算器にceil(m/ceil(m/n))個ずつ入力データを供給する。
上記の構成によれば、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数が、第１の演算回路８００及び第２の演算回路９００がそれぞれ備えている乗算器の数以下である場合に、上述のように、入力データを並列に処理することができる。また、ニューラルネットワーク回路２０が１つの出力データを算出するために用いる入力データの数が、第１の演算回路８００及び第２の演算回路９００がそれぞれ備えている乗算器の数よりも多い場合に、入力データの時分割処理を行うことができる。
【００５１】
実施の形態２．
実施の形態１では、第１の演算回路８００が入力データに対して演算処理を行い、演算処理の結果として出力データを出力する構成について説明した。また、実施の形態１では、説明を省略したが、第２の演算回路９００も第１の演算回路８００と同様に入力データに対して演算処理を行い、演算処理の結果として出力データを出力する。つまり、実施の形態１では、第１の演算回路８００及び第２の演算回路９００は、それぞれ独立に、入力データに対して演算処理を行い、演算処理の結果として出力データを出力する。一方、実施の形態２では、第１の演算回路８００の加算器５０１が、第２の演算回路９０１の加算器５１１が算出した和を、さらに用いて演算処理を行うことができる構成について説明する。
【００５２】
以下で、実施の形態２について図面を参照して説明する。なお、実施の形態１で説明した構成と同様の機能を有する構成については同一の符号を付し、その説明を省略する。
図７は、実施の形態２に係るニューラルネットワーク回路２１の構成を示すブロック図である。図７が示すように、実施の形態２に係るニューラルネットワーク回路２１が実施の形態１に係るニューラルネットワーク回路２０と異なる点は、入力データ制御部２０１が、乗算器３００、乗算器３０１、乗算器３０２、乗算器３１０、乗算器３１１及び乗算器３１２にそれぞれ個別に接続している点である。これにより、入力データ制御部２０１は、乗算器３００に供給する入力データと、乗算器３１０に供給する入力データとを同一のものとすることも、異なるものとすることもできる。また、入力データ制御部２０１は、乗算器３０１に供給する入力データと、乗算器３１１に供給する入力データとを異ならせることができる。また、入力データ制御部２０１は、乗算器３０２に供給する入力データと、乗算器３１２に供給する入力データとを異ならせることができる。
【００５３】
さらに、実施の形態２に係るニューラルネットワーク回路２１が実施の形態１に係るニューラルネットワーク回路２０と異なる点は、第２の演算回路９０１の加算器５１１の出力側が、第１の演算回路８０１の選択部４０１に接続されている点である。これにより、加算器５１１は、算出した和を選択部４０１に出力する。選択部４０１は、格納部７００から取得した選択パラメータに応じて、加算器５１１が算出した和を加算器５０１に出力する。加算器５０１は、算出した和と、選択部４０１から取得した和との和を算出し、当該和を出力部６００に出力する。
【００５４】
次に、実施の形態２に係るニューラルネットワーク回路２１による演算処理方法について図面を参照して説明する。図８は、実施の形態２に係るニューラルネットワーク回路２１による演算処理方法を示すフローチャートである。なお、実施の形態２に係るニューラルネットワーク回路２１による演算処理方法のステップＳＴ２０からステップＳＴ２２は、それぞれ、実施の形態１に係る演算処理方法のステップＳＴ１からステップＳＴ３と同様である。そのため、ステップＳＴ２０からステップＳＴ２２についての説明については省略する。
【００５５】
また、ステップＳＴ２１及びステップＳＴ２２の各工程は、第１の演算回路８０１と第２の演算回路９０１とで、並行して行われるものとする。また、以下で説明する演算処理方法は、入力データ制御部２０１が、乗算器３００及び乗算器３１０にそれぞれ異なる入力データを供給し、乗算器３０１及び乗算器３１１にそれぞれ異なる入力データを供給し、乗算器３０２及び乗算器３１２にそれぞれ異なる入力データを供給し、出力部６００のみが出力データを出力する場合の例である。
【００５６】
まず、ステップＳＴ２２の工程の後に、加算器５１１は、ステップＳＴ２２で算出した和を、第１の演算回路８０１の選択部４０１に出力する。次に、第１の演算回路８０１の選択部４０１は、格納部７００から取得した選択パラメータに基づき、第２の演算回路９０１の加算器５１１がステップＳＴ２２で算出した和を、第１の演算回路８０１の加算器５０１に出力する（ステップＳＴ２３）。
【００５７】
次に、第１の演算回路８０１の加算器５０１は、ステップＳＴ２２で算出した和と、加算器５１１が算出した和との和を算出する（ステップＳＴ２４）。加算器５０１は、算出した当該和を出力部６００に出力する。
次に、出力部６００は、加算器５０１がステップＳＴ２４で算出した和を出力データとして制御部３０に出力する（ステップＳＴ２５）。
【００５８】
なお、実施の形態２に係るニューラルネットワーク回路２１の第１の演算回路８０１及び第２の演算回路９０１のいずれか又は両方は、上記のステップＳＴ２０からステップＳＴ２２の代わりに、実施形態１で説明したステップＳＴ１０からステップＳＴ１７を行ってもよい。第２の演算回路９０１が、実施形態１で説明したステップＳＴ１０からステップＳＴ１７を行った場合、ステップＳＴ１７で加算器５１１が算出した第３の和が、ステップＳＴ２３で、第２の演算回路９０１の加算器５１１がステップＳＴ２２で算出した和の代わりに用いられる。
【００５９】
また、上記の演算処理方法の説明では、入力データ制御部２０１が、乗算器３００及び乗算器３１０にそれぞれ異なる入力データを供給し、乗算器３０１及び乗算器３１１にそれぞれ異なる入力データを供給し、乗算器３０２及び乗算器３１２にそれぞれ異なる入力データを供給し、出力部６００が出力データを出力する場合の例について説明した。一方で、入力データ制御部２０１が、乗算器３００及び乗算器３１０にそれぞれ同一の入力データを供給し、乗算器３０１及び乗算器３１１にそれぞれ同一の入力データを供給し、乗算器３０２及び乗算器３１２にそれぞれ同一の入力データを供給し、出力部６００及び出力部６１０がそれぞれ出力データを出力する場合、実施の形態１に係る演算処理方法と同様の方法を行うことができる。より詳細には、上述のステップＳＴ２３の代わりに、第１の演算回路８０１の選択部４０１は、格納部７００から取得した選択パラメータに基づき、第２の演算回路９０１の加算器５１１がステップＳＴ２２で算出した和の代わりに、ゼロ値を第１の演算回路８０１の加算器５０１に出力する。次に、ステップＳＴ２４及びステップＳＴ２５の代わりに、出力部６００は、加算器５０１が算出した和をそのまま出力データとして制御部３０に出力し、出力部６１０は、加算器５１１がステップＳＴ２２で算出した和をそのまま出力データとして制御部３０に出力する。
【００６０】
次に、実施の形態２に係るニューラルネットワーク回路２１の動作の具体例について説明する。図９は、当該具体例を説明するための図である。図９では、同一の行に記載されている各ブロックは、ニューラルネットワーク回路２１が備えている何れかの構成が処理する各データを示し、同一の列に記載されている各データは、ニューラルネットワーク回路２１が備えている何れかの構成が同時に処理する各データを示している。なお、図９において網掛けされたブロックは、当該ブロックに対応するニューラルネットワーク回路２０の構成が処理を行わないことを示しているか、又は、当該ブロックに対応するニューラルネットワーク回路２０の構成が処理を行っても処理結果を別の構成に出力しないことを示す。
【００６１】
図９のＩの列が示すように、入力データ制御部２０１は、上述のステップＳＴ２０において、同時に、乗算器３１０に入力データＤ１４を供給し、乗算器３１１に入力データＤ１５を供給し、乗算器３１２に入力データＤ１６を供給する。また、入力データ制御部２０１は、これらの入力データの供給と同時に、格納部７１０が乗算器３１０に重みパラメータＭ１４を出力し、乗算器３１１に重みパラメータＭ１５を出力し、乗算器３１２に重みパラメータＭ１６を出力するように、格納部７００に命令する。そして、これらの工程の後に、乗算器３１０は、上述のステップＳＴ２１において、入力データＤ１４と重みパラメータＭ１４との積を算出し、乗算器３０１は、入力データＤ１５と重みパラメータＭ１５との積を算出し、乗算器３０２は、入力データＤ１６と重みパラメータＭ１６との積を算出する。
【００６２】
次に、図９のＪの列が示すように、加算器５１１は、上述のステップＳＴ２２において、乗算器３１０が算出した積であるＤ１４×Ｍ１４と、乗算器３０１が算出した積であるＤ１５×Ｍ１５と、乗算器３０２が算出した積であるＤ１６×Ｍ１６との和を算出する。次に、第１の演算回路８０１の選択部４０１は、上述のステップＳＴ２３において、格納部７００から取得した選択パラメータに基づき、第２の演算回路９０１の加算器５１１がステップＳＴ２２で算出した和であるＤ１４×Ｍ１４＋Ｄ１５×Ｍ１５＋Ｄ１６×Ｍ１６を、第１の演算回路８０１の加算器５０１に出力する。一方、入力データ制御部２０１は、上述のステップＳＴ２０において、同時に、乗算器３００に入力データＤ１１を供給し、乗算器３０１に入力データＤ１２を供給し、及び乗算器３０２に入力データＤ１３を供給する。入力データ制御部２０１は、上述のステップＳＴ２０において、これらの入力データの供給と同時に、乗算器３１０に入力データＤ２４を供給し、乗算器３１１に入力データＤ２５を供給し、及び乗算器３１２に入力データＤ２６を供給する。また、入力データ制御部２０１は、格納部７００が乗算器３００に重みパラメータＭ１１を出力し、乗算器３０１に重みパラメータＭ１２を出力し、乗算器３０２に重みパラメータＭ１３を出力するように、これらの入力データの供給と同時に、格納部７００に命令する。また、入力データ制御部２０１は、格納部７１０が乗算器３１０に重みパラメータＭ２４を出力し、乗算器３１１に重みパラメータＭ２５を出力し、乗算器３０２に重みパラメータＭ２６を出力するように、これらの入力データの供給と同時に、格納部７００に命令する。次に、乗算器３００は、上述のステップＳＴ２１において、入力データＤ１１と重みパラメータＭ１１との積を算出し、乗算器３０１は、入力データＤ１２と重みパラメータＭ１２との積を算出し、乗算器３０２は、入力データＤ１３と重みパラメータＭ１３との積を算出する。また、乗算器３１０は、上述のステップＳＴ２１において、入力データＤ２４と重みパラメータＭ２４との積を算出し、乗算器３１１は、入力データＤ２５と重みパラメータＭ２５との積を算出し、乗算器３１２は、入力データＤ２６と重みパラメータＭ２６との積を算出する。
【００６３】
次に、図９のＫの列が示すように、第１の演算回路８０１の加算器５０１は、上述のステップＳＴ２２において、乗算器３００が算出した積であるＤ１１×Ｍ１１と、乗算器３０１が算出した積であるＤ１２×Ｍ１２と、乗算器３０２が算出した積であるＤ１３×Ｍ１３との和を算出する。次に、加算器５０１は、上述のステップＳＴ２４において、当該和と、選択部４０１がステップＳＴ２３で加算器５０１に出力した和であるＤ１４×Ｍ１４＋Ｄ１５×Ｍ１５＋Ｄ１６×Ｍ１６との和を算出する。出力部６００は、上述のステップＳＴ２５において、加算器５０１がステップＳＴ２４で算出した和であるＤ１１×Ｍ１１＋Ｄ１２×Ｍ１２＋Ｄ１３×Ｍ１３＋Ｄ１４×Ｍ１４＋Ｄ１５×Ｍ１５＋Ｄ１６×Ｍ１６を出力データとして制御部３０に出力する。一方、入力データ制御部２０１は、上述のステップＳＴ２０において、同時に、乗算器３００に入力データＤ２１を供給し、乗算器３０１に入力データＤ２２を供給し、及び乗算器３０２に入力データＤ２３を供給する。入力データ制御部２０１は、上述のステップＳＴ２０において、これらの入力データの供給と同時に、乗算器３１０に入力データＤ３４を供給し、乗算器３１１に入力データＤ３５を供給し、及び乗算器３１２に入力データＤ３６を供給する。また、入力データ制御部２０１は、格納部７００が乗算器３００に重みパラメータＭ２１を出力し、乗算器３０１に重みパラメータＭ２２を出力し、乗算器３０２に重みパラメータＭ２３を出力するように、これらの入力データの供給と同時に、格納部７００に命令する。また、入力データ制御部２０１は、格納部７１０が乗算器３１０に重みパラメータＭ３４を出力し、乗算器３１１に重みパラメータＭ３５を出力し、乗算器３０２に重みパラメータＭ３６を出力するように、これらの入力データの供給と同時に、格納部７００に命令する。また、加算器５１０は、上述のステップＳＴ２２において、上記の入力データ制御部２０１による入力データの供給と格納部７００への命令と同時に、乗算器３１０が算出した積であるＤ２４×Ｍ２４と、乗算器３１１が算出した積であるＤ２５×Ｍ２５と、乗算器３１２が算出した積であるＤ２６×Ｍ２６との和を算出する。なお、図９のＬの列に関する構成は、Ｋの列に関する構成と同様のため、説明を省略する。
【００６４】
以上のように、実施の形態１に係るニューラルネットワーク回路２０は、演算回路を複数備え、入力データ制御部２０１は、複数の演算回路への各入力データの供給を制御し、複数の演算回路のうちの第１の演算回路８０１が備えている選択部４０１は、格納部７００が格納する選択パラメータに応じて、複数の演算回路のうちの第２の演算回路９０１が備えている加算器５１１が算出した和を、第１の演算回路８０１が備えている加算器５０１にさらに出力し、第１の演算回路８０１が備えている加算器５０１は、算出した和と、第２の演算回路９０１が備えている加算器５１１が算出した和との和を算出する。
【００６５】
上記の構成によれば、第１の演算回路８０１と第２の演算回路９０１とが、入力データを並列に処理することによって、演算処理時間を短縮するようにニューラルネットワーク回路２１を動作させることができる。また、選択部４０１が選択パラメータに応じて加算器５１１が算出した和を加算器５０１に出力し、第１の演算回路８０１の加算器５０１が、算出した和と、第２の演算回路９０１の加算器５１１が算出した和との和を算出することにより、１つの出力データを出力するために並列に演算処理を行う入力データの数を増やすことができる。これにより、学習又は推論対象の性能を向上させることができる。
なお、本願発明はその発明の範囲内において、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。
【符号の説明】
【００６６】
１  学習・推論システム、１０  情報入力部、２０  ニューラルネットワーク回路、２１  ニューラルネットワーク回路、３０  制御部、４０  学習・推論結果出力部、２００  入力データ制御部、２０１  入力データ制御部、２１０  バッファ、３００  乗算器、３０１  乗算器、３０２  乗算器、３１０  乗算器、３１１  乗算器、３１２  乗算器、４００  選択部、４０１  選択部、４１０  選択部、５００  加算器、５０１  加算器、５１０  加算器、５１１  加算器、６００  出力部、６１０  出力部、７００  格納部、７１０  格納部、８００  第１の演算回路、８０１  第１の演算回路、９００  第２の演算回路、９０１  第２の演算回路。
【図１】
2020135175.tif 000003
【図２】
2020135175.tif 000004
【図３】
2020135175.tif 000005
【図４】
2020135175.tif 000006
【図５】
2020135175.tif 000007
【図６】
2020135175.tif 000008
【図７】
2020135175.tif 000009
【図８】
2020135175.tif 000010
【図９】
2020135175.tif 000011