(57)【要約】【課題】学習を必要とせず、組み込み機器やモバイル機器等の低スペックのデバイスにおいて、高性能なコンパクト化したモデルを搭載することができるニューラルネットワーク用プロセッサを実現する。【解決手段】ニューラルネットワーク用プロセッサでは、畳み込み層の処理と、全結合層の処理において、同様の処理が実行される部分を共通化し、ノルムモード、内積演算モードの処理を組み合わせた処理を実行することで、畳み込み層の処理と全結合層の処理とを実行することができる。したがって、ニューラルネットワーク用プロセッサでは、ハードウェア規模の増大を抑制しつつ、多値化ニューラルネットワーク用処理を高速に実行することができる。【選択図】図１
2020021208.tif 000002
【特許請求の範囲】
【請求項１】
畳み込み層の処理と全結合層の処理とを含む多値化ニューラルネットワーク用処理を実行するためのニューラルネットワーク用プロセッサであって、
実数ベクトルデータであるスケーリング係数ベクトルを設定するとともに、多値データを要素とする多値基底行列を設定する制御部と、
前記畳み込み層に入力される特徴マップおよび前記全結合層に入力される特徴ベクトルに対して量子化処理を実行する量子化処理部であって、前記特徴マップの最小値および前記特徴ベクトルの最小値が所定の値よりも小さい値となるようにオフセット値を設定し、前記特徴マップおよび前記特徴ベクトルの最大値および最小値に基づいて取得される量子化幅を用いて前記量子化処理を実行する前記量子化処理部と、
（１）前記特徴マップおよび前記特徴ベクトルのノルムを算出するノルムモードと、（２）前記多値基底行列と前記量子化処理後の前記特徴マップまたは前記特徴ベクトルとを用いた内積演算処理を実行する内積演算モードとを有し、前記ノルムモードの処理、および、前記内積演算モードを組み合わせた処理を実行することで、前記畳み込み層の処理と前記全結合層の処理とを実行する内積処理部と、
を備えるニューラルネットワーク用プロセッサ。
【請求項２】
前記内積処理部は、
ノルムモード用マイクロコードと、内積演算モード用マイクロコードとを取得するマイクロコード取得部と、
マイクロコードに基づいて、算術演算処理を実行する算術演算処理部と、
を備え、
（１）ノルムモードに設定されている場合、
前記マイクロコード取得部は、前記ノルムモード用マイクロコードを取得し、
前記算術演算処理部は、前記ノルムモード用マイクロコードに基づいて、前記算術演算処理を実行し、
（２）内積演算モードに設定されている場合、
前記マイクロコード取得部は、前記内積演算モード用マイクロコードを取得し、
前記算術演算処理部は、前記内積演算モード用マイクロコードに基づいて、前記算術演算処理を実行する、
請求項１に記載のニューラルネットワーク用プロセッサ。
【請求項３】
前記内積処理部は、
前記畳み込み層の処理を実行する場合、
（１）前記ノルムモードの処理を、処理対象の畳み込み層の特徴マップ数分繰り返し実行し、
（２）前記内積演算モードの処理を、各特徴マップについて前記ノルムモードの処理が実行されるごとに、処理対象の畳み込み層の出力数分繰り返し実行する、
請求項１または２に記載のニューラルネットワーク用プロセッサ。
【請求項４】
前記内積処理部は、
前記全結合層の処理を実行する場合、
（１）処理対象の全結合層につき、前記ノルムモードの処理を１回実行し、
（２）前記内積演算モードの処理を、処理対象の全結合層の出力数分繰り返し実行する、
請求項１から３のいずれかに記載のニューラルネットワーク用プロセッサ。
【請求項５】
畳み込み層の処理と全結合層の処理とを含む多値化ニューラルネットワーク用処理を実行するためのニューラルネットワーク用処理方法であって、
実数ベクトルデータであるスケーリング係数ベクトルを設定するとともに、多値データを要素とする多値基底行列を設定する制御ステップと、
前記畳み込み層に入力される特徴マップおよび前記全結合層に入力される特徴ベクトルに対して量子化処理を実行する量子化処理ステップであって、前記特徴マップの最小値および前記特徴ベクトルの最小値が所定の値よりも小さい値となるようにオフセット値を設定し、前記特徴マップおよび前記特徴ベクトルの最大値および最小値に基づいて取得される量子化幅を用いて前記量子化処理を実行する前記量子化処理ステップと、
（１）前記特徴マップおよび前記特徴ベクトルのノルムを算出するノルムモードと、（２）前記多値基底行列と前記量子化処理後の前記特徴マップまたは前記特徴ベクトルとを用いた内積演算処理を実行する内積演算モードとを有し、前記ノルムモードの処理、および、前記内積演算モードを組み合わせた処理を実行することで、前記畳み込み層の処理と前記全結合層の処理とを実行する内積処理ステップと、
を備えるニューラルネットワーク用処理方法。
【請求項６】
請求項５に記載のニューラルネットワーク用処理方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ニューラルネットワークの技術に関する。
【背景技術】
【０００２】
近年、ニューラルネットワーク技術の１つである、ＣＮＮ（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ）を用いた多様な技術が開発されている（例えば、特許文献１を参照）。ＣＮＮの中でも、中間層を多く設けたＤＣＮＮ（Ｄｅｅｐ  Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ）を用いた技術が、多様な分野で成果を上げているため、特に注目を集めている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−１９７７０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＤＣＮＮは、一般物体認識やセマンティックセグメンテーション等の様々なタスクにおいて高い認識性能を実現している。その一方で、ＤＣＮＮは、処理を実行するために必要な計算量とパラメータ数が非常に多いため、処理を実行するときに、膨大な処理時間と多大なメモリ量が必要となる。
【０００５】
また、ＤＣＮＮでは、層をより深くすることで認識精度が向上する傾向が見られ、これに伴い識別時間（処理時間）に加えモデルサイズも増加するという問題が発生する。組み込み機器やモバイル機器等の低スペックのデバイスでＤＣＮＮを使用するには、識別計算の高速化とモデルサイズの圧縮が大きな課題となる。
【０００６】
つまり、組み込み機器やモバイル機器等の低スペックのデバイス（例えば、エッジ端末）において、大規模システムで学習し取得した学習済みモデルをそのまま搭載することは困難であり、低スペックのデバイスにおいて、コンパクト化したモデルを構築する必要がある。
【０００７】
組み込み機器やモバイル機器等の低スペックのデバイス（例えば、エッジ端末）に、大規模システムで学習し取得した学習済みモデルを搭載するためには、低スペックのデバイスにおいて、当該学習済みモデルのコンパクト化したモデルを構築し、当該学習済みモデルに用いた学習用データを用いて、再度、コンパクト化したモデルにおいて、学習させる必要がある（この学習を「再学習」という）。
【０００８】
つまり、組み込み機器やモバイル機器等の低スペックのデバイス（例えば、エッジ端末）で、大規模システムで学習し取得した学習済みモデルを搭載するためには、再学習が必要となるという課題がある。
【０００９】
そこで、本発明は、上記課題に鑑み、再学習を必要とせず、組み込み機器やモバイル機器等の低スペックのデバイス（例えば、エッジ端末）において、高性能なコンパクト化したモデルを搭載することができるニューラルネットワーク用プロセッサ、ニューラルネットワーク用データ処理方法、および、プログラムを実現することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、第１の発明は、畳み込み層の処理と全結合層の処理とを含む多値化ニューラルネットワーク用処理を実行するためのニューラルネットワーク用プロセッサであって、制御部と、量子化処理部と、内積処理部と、を備える。
【００１１】
制御部は、実数ベクトルデータであるスケーリング係数ベクトルを設定するとともに、多値データを要素とする多値基底行列を設定する。
【００１２】
量子化処理部は、畳み込み層に入力される特徴マップおよび全結合層に入力される特徴ベクトルに対して量子化処理を実行する。また、量子化処理部は、特徴マップの最小値および特徴ベクトルの最小値が所定の値よりも小さい値となるようにオフセット値を設定し、特徴マップおよび特徴ベクトルの最大値および最小値に基づいて取得される量子化幅を用いて量子化処理を実行する。
【００１３】
内積処理部は、（１）特徴マップおよび特徴ベクトルのノルムを算出するノルムモードと、（２）多値基底行列と量子化処理後の特徴マップまたは特徴ベクトルとを用いた内積演算処理を実行する内積演算モードとを有する。内積処理部は、ノルムモードの処理、および、内積演算モードを組み合わせた処理を実行することで、畳み込み層の処理と全結合層の処理とを実行する。
【００１４】
このニューラルネットワーク用プロセッサでは、畳み込み層の処理と、全結合層の処理において、同様の処理が実行される部分を共通化し、２つのモード（（１）ノルムモード、（２）内積演算モード）の処理を組み合わせた処理を実行することで、畳み込み層の処理と全結合層の処理とを実行することができる。したがって、このニューラルネットワーク用プロセッサでは、ハードウェア規模の増大を抑制しつつ、ニューラルネットワーク用処理を高速に実行することができる。
【００１５】
第２の発明は、第１の発明であって、内積処理部は、ノルムモード用マイクロコードと、内積演算モード用マイクロコードとを取得するマイクロコード取得部と、マイクロコードに基づいて、算術演算処理を実行する算術演算処理部と、を備える。
（１）ノルムモードに設定されている場合、
マイクロコード取得部は、ノルムモード用マイクロコードを取得し、算術演算処理部は、ノルムモード用マイクロコードに基づいて、算術演算処理を実行する。
（２）内積演算モードに設定されている場合、
マイクロコード取得部は、内積演算モード用マイクロコードを取得し、算術演算処理部は、内積演算モード用マイクロコードに基づいて、算術演算処理を実行する。
【００１６】
このニューラルネットワーク用プロセッサでは、畳み込み層の処理と、全結合層の処理において、同様の処理が実行される部分を共通化し、２つのモード（（１）ノルムモード、（２）内積演算モード）の処理を、各モードに対応するマイクロコードにより処理することで実行する。そして、このニューラルネットワーク用プロセッサでは、畳み込み層の処理と全結合層の処理とにおいて、相違する部分の処理を、上記の２つのモードの処理を適切な順序で組み合わせることで実現する。したがって、このニューラルネットワーク用プロセッサでは、ハードウェア規模の増大を抑制しつつ、ニューラルネットワーク用処理を高速に実行することができる。
【００１７】
第３の発明は、第１または第２の発明であって、内積処理部は、畳み込み層の処理を実行する場合、
（１）ノルムモードの処理を、処理対象の畳み込み層の特徴マップ数分繰り返し実行し、
（２）内積演算モードの処理を、各特徴マップについてノルムモードの処理が実行されるごとに、処理対象の畳み込み層の出力数分繰り返し実行する。
【００１８】
これにより、このニューラルネットワーク用プロセッサでは、２つのモードによる処理を組み合わせることで、畳み込み層の処理を実行することができる。
【００１９】
第４の発明は、第１から第３のいずれかの発明であって、内積処理部は、全結合層の処理を実行する場合、
（１）処理対象の全結合層につき、ノルムモードの処理を１回実行し、
（２）内積演算モードの処理を、処理対象の全結合層の出力数分繰り返し実行する。
【００２０】
これにより、このニューラルネットワーク用プロセッサでは、２つのモードによる処理を組み合わせることで、全結合層の処理を実行することができる。
【００２１】
第５の発明は、畳み込み層の処理と全結合層の処理とを含む多値化ニューラルネットワーク用処理を実行するためのニューラルネットワーク用処理方法であって、制御ステップと、量子化処理ステップと、内積処理ステップと、を備える。
【００２２】
制御ステップは、実数ベクトルデータであるスケーリング係数ベクトルを設定するとともに、多値データを要素とする多値基底行列を設定する。
【００２３】
量子化処理ステップは、畳み込み層に入力される特徴マップおよび全結合層に入力される特徴ベクトルに対して量子化処理を実行する。また、量子化処理ステップは、特徴マップの最小値および特徴ベクトルの最小値が所定の値よりも小さい値となるようにオフセット値を設定し、前記特徴マップおよび前記特徴ベクトルの最大値および最小値に基づいて取得される量子化幅を用いて量子化処理を実行する。
【００２４】
内積処理ステップは、（１）特徴マップおよび特徴ベクトルのノルムを算出するノルムモードと、（２）多値基底行列と量子化処理後の特徴マップまたは特徴ベクトルとを用いた内積演算処理を実行する内積演算モードとを有する。内積処理ステップは、ノルムモードの処理、および、内積演算モードを組み合わせた処理を実行することで、畳み込み層の処理と全結合層の処理とを実行する。
【００２５】
これにより、第１の発明と同様の効果を奏するニューラルネットワーク用処理方法を実現させることができる。
【００２６】
第６の発明は、第５の発明であるニューラルネットワーク用処理方法をコンピュータに実行させるためのプログラムである。
【００２７】
これにより、第１の発明と同様の効果を奏するニューラルネットワーク用処理方法をコンピュータに実行させるためのプログラムを実現させることができる。
【発明の効果】
【００２８】
本発明によれば、再学習を必要とせず、組み込み機器やモバイル機器等の低スペックのデバイス（例えば、エッジ端末）において、高性能なコンパクト化したモデルを搭載することができるニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラムを実現することができる。
【図面の簡単な説明】
【００２９】
【図１】第１実施形態に係る二値化ニューラルネットワーク用プロセッサ１００の概略構成図。
【図２】第１実施形態に係る内積処理部３の概略構成図。
【図３】Ｏｆｆｓｅｔモードの処理を説明するための図。
【図４】Ｎｏｒｍモードの処理を説明するための図。
【図５】ＤＰモード（内積演算処理モード）の処理を説明するための図。
【図６】ＣＰＵバス構成を示す図。
【発明を実施するための形態】
【００３０】
［第１実施形態］
第１実施形態について、図面を参照しながら、以下、説明する。
【００３１】
＜１．１：二値化ニューラルネットワーク用プロセッサの構成＞
図１は、第１実施形態に係る二値化ニューラルネットワーク用プロセッサ１００の概略構成図である。
【００３２】
図２は、第１実施形態に係る内積処理部３の概略構成図である。
【００３３】
二値化ニューラルネットワーク用プロセッサ１００は、図１に示すように、入出力インターフェースＩＦ１と、制御部ＣＰＵ１と、演算処理部ＰＬ１と、バスＢ１とを備える。入出力インターフェースＩＦ１と、制御部ＣＰＵ１と、演算処理部ＰＬ１とは、図１に示すように、バスＢ１により接続されており、必要なデータ、コマンド等を、バスＢ１を介して、入出力することができる。なお、上記機能部の一部または全部は、バス接続ではなく、必要に応じて、直接接続されるものであってもよい。
【００３４】
入出力インターフェースＩＦ１は、外部から処理対象となるデータＤｉｎを入力し、二値化ニューラルネットワーク用プロセッサにより処理結果を含むデータをデータＤｏｕｔとして外部に出力する。
【００３５】
制御部ＣＰＵ１は、二値化ニューラルネットワーク用プロセッサ１００の全体制御、各機能部の制御および二値化ニューラルネットワーク用処理に必要な処理を行う。制御部ＣＰＵ１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やＣＰＵコアにより実現される。
【００３６】
制御部ＣＰＵ１は、例えば、大規模システムでの学習済みモデルのパラメータ（重み付けデータ）を近似するスケーリング係数ベクトルｖ＿ｃおよび二値基底行列Ｍを取得（設定）し、取得（設定）したスケーリング係数ベクトルｖ＿ｃおよび二値基底行列Ｍを、それぞれ、内部ＲＡＭ  Ｒ１の領域ＣＶ、および領域ＢｉｎＭｔｘ０／１に記憶保持させる。
【００３７】
なお、上記スケーリング係数ベクトルｖ＿ｃおよび二値基底行列Ｍは、入出力インターフェースＩＦ１を介して、外部から、二値化ニューラルネットワーク用プロセッサ１００に入力されるものであってもよい。
【００３８】
演算処理部ＰＬ１は、図１に示すように、ＤＭＡ制御部１と、量子化処理部２と、内積処理部３と、内部ＲＡＭ  Ｒ１と、を備える。
【００３９】
ＤＭＡ制御部１は、ＤＭＡ転送処理（ＤＭＡ：Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）を行う。
【００４０】
量子化処理部２は、ＤＣＮＮ（Ｄｅｅｐ  Ｃｏｎｖｏｌｕｔｉｏｎ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ）の畳み込み層の入力である特徴マップのデータに対して、量子化処理を行う。また、量子化処理部２は、ＤＣＮＮの全結合層の入力データに対して、量子化処理を行う。
【００４１】
内積処理部３は、図２に示すように、ＡＮＤ処理部３１と、セレクタ３２と、カウント処理部３３と、マイクロコード取得部３４と、ＡＬＵ３５（ＡＬＵ：Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）と、を備える。
【００４２】
ＡＮＤ処理部３１は、データＤ２（例えば、内部ＲＡＭ  Ｒ１（領域ＢｉｎＭｔｘ０／１）から取得される重みベクトルの整数部のデータ）とデータＤ３（例えば、内部ＲＡＭ  Ｒ１（領域ＢｉｎＩｎＴ）から取得されるデータであって、ビット分解され、さらに量子化処理が実行されたデータ）とを入力し、データＤ２とデータＤ３とに対してＡＮＤ処理を実行し、実行結果を含むデータをデータＤ４としてセレクタ３２に出力する。
【００４３】
セレクタ３２は、データＤ２とデータＤ４と、モードを指示する信号ｄｐ＿ｍｏｄｅとを入力する。セレクタ３２は、信号ｄｐ＿ｍｏｄｅに基づいて、データＤ２およびデータＤ４のいずれか一方を選択し、選択したデータをデータＤ５としてカウント処理部３３に出力する。
【００４４】
カウント処理部３３は、セレクタ３２から出力されるデータＤ５を入力し、データＤ５に対してカウント処理を実行する。そして、カウント処理部３３は、処理結果を含むデータをデータＤ６として、ＡＬＵ３５に出力する。
【００４５】
マイクロコード取得部３４は、マイクロコードμＣｏｄｅ（例えば、モードに応じたマイクロコード）を取得し、取得したマイクロコードμＣｏｄｅをＡＬＵ３５に出力する。モードとして、例えば、（１）Ｏｆｆｓｅｔモード、（２）Ｎｏｒｍモード、（３）ＤＰモードが設定される。
なお、「Ｏｆｆｓｅｔモード」は、畳み込み層に入力される特徴マップおよび全結合層に入力される特徴ベクトルに対して量子化処理を実行する場合において、特徴マップの最小値および特徴ベクトルの最小値が所定の値よりも小さい値となるように設定されるオフセット値を取得する処理を実行するためのモードである。
「Ｎｏｒｍモード」は、特徴マップおよび特徴ベクトルのノルムを算出する処理を実行するためのモードである。
「ＤＰモード」は、多値基底行列と量子化処理後の特徴マップまたは特徴ベクトルとを用いた内積演算処理を実行するためのモードである。
【００４６】
ＡＬＵ３５は、データＤ１（例えば、内部ＲＡＭ  Ｒ１（領域ＣＶ）から取得される重みベクトルの実数部のデータ（スケール係数ベクトル））と、カウント処理部３３から出力されるデータＤ６と、マイクロコード取得部３４から出力されるマイクロコードμＣｏｄｅとを入力する。ＡＬＵ３５は、マイクロコードμＣｏｄｅに基づいて、算術演算を行い、当該算術演算の結果を含むデータをデータＤｏとして出力する。
【００４７】
内部ＲＡＭ  Ｒ１は、二値化ニューラルネットワーク用処理を実行するために必要なデータを記憶保持するためのＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００４８】
＜１．２：二値化ニューラルネットワーク用プロセッサの動作＞
以上のように構成された二値化ニューラルネットワーク用プロセッサ１００の動作について、以下、説明する。
【００４９】
一般に、ＣＮＮでは、入力層と、畳み込み層（コンボリューション層）と、全結合層とを含む。例えば、二値化ニューラルネットワーク用プロセッサ１００の入出力インターフェースＩＦ１に、入力データＤｉｎとして、画像データが入力され、ＣＮＮによる画像認識処理が実行され、画像認識処理結果が出力データＤｏｕｔとして外部に出力される。
【００５０】
ＣＮＮでは、畳み込み層の処理、あるいは、全結合層の処理において、入力データに対して重み演算処理が実行され、当該処理結果に対して活性化関数（例えば、ランプ関数（ＲｅＬＵ：Ｒｅｃｔｉｆｉｅｄ  Ｌｉｎｅａｒ  Ｕｎｉｔ）、シグモイド関数、Ｓｏｆｔｍａｘ関数等）により処理が実行されることで、畳み込み層あるいは全結合層の出力が得られる。
【００５１】
また、下記先行技術文献Ａに開示されているように、Ｂｉｎａｒｉｚｅｄ−ＤＣＮＮ（ＤＣＮＮ：Ｄｅｅｐ  Ｃｏｎｖｏｌｕｔｉｏｎ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ）（以下、「ＢＮＮ」という）では、Ｑｕａｎｔｉｚａｔｉｏｎ  ｓｕｂ−ｌａｙｅｒと結合係数の二値分解を導入し、実数同士の内積計算を二値同士の内積計算に置換することで、既存のネットワークモデルに対して再学習なしに識別計算の高速化およびモデルサイズの圧縮を実現することができる。ＢＮＮの二値同士の演算は、ＸＯＲやＡＮＤ等の論理演算とビットカウントにより高速な演算が可能となる。
（先行技術文献Ａ）：
神谷龍司等  “Binarized-DCNNによる識別計算の高速化とモデル圧縮”  信学技報 116(366), 47-52, 2016-12-15  電子情報通信学会
上記先行技術文献Ａの開示に基づいて、ＢＮＮの識別計算の基本式を、下記（数式１）のように導出することができる。
（数式１）：
ｙｉｊｎ＝ｃｎＴＭｎＴＢｉｊｒｉｊ＋ｍｉｎ（ｘ）Ｏｆｆｓｅｔ
ｙｉｊｎ：ｎ番目の特徴マップの出力（特徴マップの座標（ｉ，ｊ）の出力値）
ｃｎＴ：ｎ番目の特徴マップのスケール係数ベクトルｃｎの転置行列
ＭｎＴ：ｎ番目の特徴マップの二値基底行列の転置行列
Ｂｉｊｒｉｊ：二値特徴マップ（量子化後の二値特徴マップ）   
ｍｉｎ（ｘ）：ｎ番目の特徴マップの各要素の値のうちの最小値
Ｏｆｆｓｅｔ：Ｏｆｆｓｅｔモードで取得される結果
また、ＭｎＴ∈｛−１，１｝とＢｉｊｒｉｊ∈｛−１，１｝とは二値であるため、下記（数式２）を用いて論理演算とビットカウントで計算することができる。
（数式２）：
ＭｎＴＢｉｊｒｉｊ
＝２×ＢＩＴＣＮＴ（ＡＮＤ（ＭｎＴ，Ｂｉｊｒｉｊ））−Ｎｏｒｍ（ｚ）
ｚ＝Ｂｉｊｒｉｊ
Ｎｏｒｍ（ｚ）：ｚのノルムを取得する関数
ＢＩＴＣＮＴ（ｘ）：バイナリコードｘにおいて、「１」であるビット数をカウントする関数
二値化ニューラルネットワーク用プロセッサ１００では、畳み込み層の処理と、全結合層の処理において、同様の処理が実行される部分を共通化することで、ハードウェア規模の増大を抑制しつつ、高速処理を実現させる。
【００５２】
以下では、「畳み込み層の処理」と「全結合層の処理」とに分けて、二値化ニューラルネットワーク用プロセッサ１００の動作について説明する。
【００５３】
図３は、Ｏｆｆｓｅｔモードの処理を説明するための図である。
【００５４】
図４は、Ｎｏｒｍモードの処理を説明するための図である。
【００５５】
図５は、ＤＰモード（内積演算処理モード）の処理を説明するための図である。
【００５６】
二値化ニューラルネットワーク用プロセッサ１００では、（１）Ｏｆｆｓｅｔモード、（２）Ｎｏｒｍモード、（３）ＤＰモードの３つのモードを用いて、処理が実行される。
【００５７】
（１．２．１：畳み込み層の処理）
まず、畳み込み層の処理について、説明する。
【００５８】
二値化ニューラルネットワーク用プロセッサ１００の量子化処理部２は、第ｌ層（ｌ：自然数）におけるｍ番目（ｍ：自然数）の特徴マップｚｌｉｊｍにおける最大値−最小値間の量子化幅Δｄを、
Δｄ＝｛ｍａｘ（ｚｌｉｊｍ）−ｍｉｎ（ｚｌｉｊｍ）｝／（２Ｑ−１）
ｍａｘ（ｘ）：ｘの最大値を取得する関数
ｍｉｎ（ｘ）：ｘの最小値を取得する関数
Ｑ：量子化ビット数
として取得する。
【００５９】
そして、量子化処理部２は、特徴マップの最小値が０となるように値をシフトさせる。つまり、量子化処理部２は、
ｚｌｉｊｍ’＝｛ｚｌｉｊｍ−ｍｉｎ（ｚｌｉｊｍ）｝／Ｑ
に相当する処理を実行し、さらに、上記数式により取得された値を四捨五入して整数値に丸め量子化する。さらに、量子化処理部２は、丸め量子化により取得された値に対して、二値化処理をすることで、バイナリコードｚｌｉｊｍ（ｂ）∈｛０，１｝を取得する。
【００６０】
上記のようにして取得されたバイナリコードｚｌｉｊｍ（ｂ）∈｛０，１｝（量子化処理後の特徴マップＢｉｊｒｉｊ）は、内部ＲＡＭの領域ＢｉｎＩｎＴに記憶保持される。
【００６１】
畳み込み層の処理において、以下のことが成り立つ。
（１）量子化処理後の特徴マップＢｉｊｒｉｊは、特徴マップごとに変化する（入れ替わる）。
（２）上記（数式１）の右辺の第２項、すなわち、ｍｉｎ（ｘ）Ｏｆｆｓｅｔの値は、特徴マップに関わらず、一定である。
【００６２】
二値化ニューラルネットワーク用プロセッサ１００では、上記を考慮して、畳み込み層の処理を以下の疑似コードに相当する処理により実行する。
≪畳み込み層の処理の擬似コード≫
For (出力数)
Operate_offset();     // オフセット復元処理
For (特徴マップ数)
Operate_Norm();    // ノルムの計算  （数式２）の右辺の第２項に相当する処理
For (出力数)
Operate_dp();   // 内積計算
二値化ニューラルネットワーク用プロセッサ１００は、
（１）上記のオフセット復元処理をＯｆｆｓｅｔモードの処理で実行し、
（２）上記のノルム計算の処理をＮｏｒｍモードの処理で実行し、
（３）上記の内積計算の処理をＤＰモード（内積演算処理モード）の処理で実行する。
【００６３】
以下、これについて、説明する。
【００６４】
（１．２．１．１：Ｏｆｆｓｅｔモードの処理（畳み込み層の処理））
Ｏｆｆｓｅｔモードの処理について、説明する。
【００６５】
図３に示すように、データＤ２が、セレクタ３２に入力される。
【００６６】
セレクタ３２では、信号値が「０」に設定されたモード信号ｄｐ＿ｍｏｄｅが入力されており、セレクタ３２は、当該モード信号ｄｐ＿ｍｏｄｅに基づいて、データＤ２を選択し、データＤ５としてカウント処理部３３に出力する。
【００６７】
カウント処理部３３は、Ｏｆｆｓｅｔモードにおいて、入力データＤ５を、そのまま、データＤ６として、ＡＬＵ３５に出力する。
【００６８】
マイクロコード取得部３４は、Ｏｆｆｓｅｔモード用のマイクロコードμＣｏｄｅ（Ｏｆｆｓｅｔ＿ｍｏｄｅ）を取得し、ＡＬＵ３５に出力する。なお、Ｏｆｆｓｅｔモード用のマイクロコードμＣｏｄｅ（Ｏｆｆｓｅｔ＿ｍｏｄｅ）は、例えば、以下の処理をＡＬＵ３５に実行させるコードである。
（１）ｍｉｎ（ｘ）のロード（読み出し）
（２）データＤ１（＝ｃｎＴ）と、データＤ６（＝ＭｎＴ）と、ｍｉｎ（ｘ）との乗算処理
なお、ｍｉｎ（ｘ）は、量子化処理が実行されるときに取得した値を、例えば、内部ＲＡＭ  Ｒ１に記憶保持しておき、マイクロコード取得部３４が、ｍｉｎ（ｘ）のデータを、内部ＲＡＭ  Ｒ１から読み出すようにしてもよい。
【００６９】
ＡＬＵ３５は、図３に示すように、データＤ１（＝ｃｎＴ）とデータＤ６（＝ＭｎＴ）とを入力する。なお、データＤ１（＝ｃｎＴ）は、内部ＲＡＭの領域ＣＶに記憶保持されているスケール係数ベクトルのデータｃｎＴである。
【００７０】
また、ＡＬＵ３５は、マイクロコード取得部３４から出力されるＯｆｆｓｅｔモード用のマイクロコードμＣｏｄｅ（Ｏｆｆｓｅｔ＿ｍｏｄｅ）を入力し、当該Ｏｆｆｓｅｔモード用のマイクロコードμＣｏｄｅ（Ｏｆｆｓｅｔ＿ｍｏｄｅ）に従って演算を行う。
【００７１】
つまり、ＡＬＵ３５は、
（１）ｍｉｎ（ｘ）のロード（読み出し）
（２）データＤ１（＝ｃｎＴ）と、データＤ６（＝ＭｎＴ）と、ｍｉｎ（ｘ）との乗算処理
を実行することで、出力データＤｏ（＝ｍｉｎ（ｘ）Ｏｆｆｓｅｔ）を取得する。
【００７２】
以上のように処理することで、上記（数式１）の右辺の第２項、すなわち、ｍｉｎ（ｘ）Ｏｆｆｓｅｔの値（オフセット値）を取得することができる。
【００７３】
畳み込み層の処理では、上記処理（オフセット復元処理）が、畳み込み層の出力数分、実行される。
【００７４】
（１．２．１．２：Ｎｏｒｍモードの処理（畳み込み層の処理））
Ｎｏｒｍモードの処理について、説明する。
【００７５】
図４に示すように、データＤ３（＝Ｂｉｊｒｉｊ）が、ＡＮＤ処理部３１に入力される。なお、データＤ３は、量子化処理後の特徴マップＢｉｊｒｉｊであり、内部ＲＡＭの領域ＢｉｎＩｎＴに記憶保持されている。
【００７６】
ＡＮＤ処理部３１は、Ｎｏｒｍモードでは、入力データＤ３を、そのまま、データＤ４として、セレクタ３２に出力する。
【００７７】
セレクタ３２では、信号値が「１」に設定されたモード信号ｄｐ＿ｍｏｄｅが入力されており、セレクタ３２は、当該モード信号ｄｐ＿ｍｏｄｅに基づいて、データＤ４を選択し、データＤ５としてカウント処理部３３に出力する。
【００７８】
カウント処理部３３は、入力データＤ５に対してカウント処理（ＢＩＴＣＮＴ関数による処理）を実行し、処理結果をデータＤ６（＝ＢＩＴＣＮＴ（Ｂｉｊｒｉｊ））としてＡＬＵ３５に出力する。
【００７９】
マイクロコード取得部３４は、Ｎｏｒｍモード用のマイクロコードμＣｏｄｅ（Ｎｏｒｍ＿ｍｏｄｅ）を取得し、ＡＬＵ３５に出力する。なお、Ｎｏｒｍモード用のマイクロコードμＣｏｄｅ（Ｎｏｒｍ＿ｍｏｄｅ）は、カウント処理部３３から入力されたデータをそのまま出力させる処理をＡＬＵ３５に実行させるコードである。
【００８０】
ＡＬＵ３５は、図４に示すように、カウント処理部３３から出力されるデータＤ６（＝ＢＩＴＣＮＴ（Ｂｉｊｒｉｊ））を入力する。
【００８１】
また、ＡＬＵ３５は、マイクロコード取得部３４から出力されるＮｏｒｍモード用のマイクロコードμＣｏｄｅ（Ｎｏｒｍ＿ｍｏｄｅ）を入力し、当該Ｎｏｒｍモード用のマイクロコードμＣｏｄｅ（Ｎｏｒｍ＿ｍｏｄｅ）に従って演算を行う。
【００８２】
つまり、ＡＬＵ３５は、カウント処理部３３から入力されたデータをそのまま出力させる処理を行い、データＤｏ（＝ＢＩＴＣＮＴ（Ｂｉｊｒｉｊ））を出力する。なお、ＢＩＴＣＮＴ（Ｂｉｊｒｉｊ）は、量子化処理後の特徴マップＢｉｊｒｉｊのノルムに相当する。
【００８３】
以上のように処理することで、上記（数式２）の右辺の第２項、すなわち、Ｎｏｒｍ（ｚ）（ｚ＝Ｂｉｊｒｉｊ）の値（ノルム）を取得することができる。
【００８４】
畳み込み層の処理では、上記処理（ノルム算出処理）が、処理対象となっている畳み込み層の特徴マップ数分、実行される。
【００８５】
（１．２．１．３：ＤＰモードの処理（畳み込み層の処理））
ＤＰモードの処理について、説明する。
【００８６】
図５に示すように、データＤ２（＝ＭｎＴ）およびデータＤ３（＝Ｂｉｊｒｉｊ）が、ＡＮＤ処理部３１に入力される。
【００８７】
データＤ２は、内部ＲＡＭの領域ＢｉｎＭｔｘ０／１に記憶保持されている二値基底行列のデータＭｎＴである。
【００８８】
データＤ３は、量子化処理後の特徴マップＢｉｊｒｉｊであり、内部ＲＡＭの領域ＢｉｎＩｎＴに記憶保持されている。
【００８９】
ＡＮＤ処理部３１は、データＤ２およびデータＤ３に対してＡＮＤ処理を実行し、処理結果を含むデータをデータＤ４（＝ＡＮＤ（ＭｎＴ，Ｂｉｊｒｉｊ））として、セレクタ３２に出力する。なお、ＡＮＤ処理は、要素の値が「−１」である場合、当該「−１」を「０」に置換して論理積をとる処理である。
【００９０】
セレクタ３２では、信号値が「１」に設定されたモード信号ｄｐ＿ｍｏｄｅが入力されており、セレクタ３２は、当該モード信号ｄｐ＿ｍｏｄｅに基づいて、データＤ４を選択し、データＤ５としてカウント処理部３３に出力する。
【００９１】
カウント処理部３３は、入力データＤ５に対してカウント処理（ＢＩＴＣＮＴ関数による処理）を実行し、処理結果をデータＤ６（＝ＢＩＴＣＮＴ（ＡＮＤ（ＭｎＴ，Ｂｉｊｒｉｊ）））としてＡＬＵ３５に出力する。
【００９２】
マイクロコード取得部３４は、ＤＰモード用のマイクロコードμＣｏｄｅ（ＤＰ＿ｍｏｄｅ）を取得し、ＡＬＵ３５に出力する。なお、ＤＰモード用のマイクロコードμＣｏｄｅ（ＤＰ＿ｍｏｄｅ）は、例えば、以下の処理をＡＬＵ３５に実行させるコードである。
（１）Ｄ６×２の処理（１ビット左にシフトさせる処理）
（２）上記（１）の結果からノルムを減算する処理
（３）上記（２）の結果に、データＤ１（＝ｃｎＴ）を乗算する処理
ＡＬＵ３５は、図５に示すように、データＤ１（＝ｃｎＴ）とデータＤ６（＝ＢＩＴＣＮＴ（ＡＮＤ（ＭｎＴ，Ｂｉｊｒｉｊ）））とを入力する。なお、データＤ１（＝ｃｎＴ）は、内部ＲＡＭの領域ＣＶに記憶保持されているスケール係数ベクトルのデータｃｎＴである。
【００９３】
また、ＡＬＵ３５は、マイクロコード取得部３４から出力されるＤＰモード用のマイクロコードμＣｏｄｅ（ＤＰ＿ｍｏｄｅ）を入力し、当該ＤＰモード用のマイクロコードμＣｏｄｅ（ＤＰ＿ｍｏｄｅ）に従って演算を行う。
【００９４】
つまり、ＡＬＵ３５は、
（１）Ｄ６×２の処理（１ビット左にシフトさせる処理）
（２）上記（１）の結果からノルムを減算する処理（２×Ｄ６―Ｎｏｒｍ（ｚ））
（３）上記（２）の結果に、データＤ１（＝ｃｎＴ）を乗算する処理
を実行することで、出力データＤｏ（＝ｃｎＴＭｎＴＢｉｊｒｉｊ）を取得する。
【００９５】
つまり、上記により、下記に相当する処理が実行される。
Ｄｏ＝ｃｎＴＭｎＴＢｉｊｒｉｊ
ＭｎＴＢｉｊｒｉｊ＝２×ＢＩＴＣＮＴ（ＡＮＤ（ＭｎＴ，Ｂｉｊｒｉｊ））−Ｎｏｒｍ（ｚ）
以上のように処理することで、上記（数式１）の右辺の第１項、すなわち、ｃｎＴＭｎＴＢｉｊｒｉｊの値を取得することができる。
【００９６】
畳み込み層の処理では、上記処理（内積演算処理）が、処理対象となっている畳み込み層の特徴マップごとに、当該畳み込み層の出力数分、実行される。上記の処理結果は、例えば、内部ＲＡＭ  Ｒ１の所定の領域に記憶保持される、あるいは、制御部ＣＰＵ１へ出力され、制御部ＣＰＵ１が当該処理結果を用いて所定の処理を実行する。
【００９７】
以上のように処理することで、二値化ニューラルネットワーク用プロセッサ１００では、畳み込み層の処理を実行することができる。すなわち、二値化ニューラルネットワーク用プロセッサ１００では、上記の３つのモードによる処理により、（数式１）のｙｉｊｎを取得するために必要なデータを取得することができ、その結果、畳み込み層の処理を実行することができる。
【００９８】
（１．２．２：全結合層の処理）
次に、全結合層の処理について、説明する。
【００９９】
二値化ニューラルネットワーク用プロセッサ１００の量子化処理部２は、ｌ番目の全結合層への入力ベクトルｚｌｉにおける最大値−最小値間の量子化幅Δｄを、
Δｄ＝｛ｍａｘ（ｚｌｉ）−ｍｉｎ（ｚｌｉ）｝／（２Ｑ−１）
ｍａｘ（ｘ）：ｘの最大値を取得する関数
ｍｉｎ（ｘ）：ｘの最小値を取得する関数
Ｑ：量子化ビット数
として取得する。
【０１００】
そして、量子化処理部２は、全結合層への入力ベクトルの最小値が０となるように値をシフトさせる。つまり、量子化処理部２は、
ｚｌｉ’＝｛ｚｌｉ−ｍｉｎ（ｚｌｉ）｝／Ｑ
に相当する処理を実行し、さらに、上記数式により取得された値を四捨五入して整数値に丸め量子化する。さらに、量子化処理部２は、丸め量子化により取得された値に対して、二値化処理をすることで、バイナリコードｚｌｉ（ｂ）∈｛０，１｝を取得する。
【０１０１】
上記のようにして取得されたバイナリコードｚｌｉ（ｂ）∈｛０，１｝（量子化処理後の特徴ベクトルＢｉｊｒｉｊ）は、内部ＲＡＭの領域ＢｉｎＩｎＴに記憶保持される。
【０１０２】
全結合層の処理において、以下のことが成り立つ。
（１）量子化処理後の特徴ベクトルは１つだけである。
【０１０３】
二値化ニューラルネットワーク用プロセッサ１００では、上記を考慮して、全結合層の処理を以下の疑似コードに相当する処理により実行する。
≪全結合層の処理の擬似コード≫
Operate_Norm();    // ノルムの計算  （数式２）の右辺の第２項に相当する処理
For (出力数)
Operate_offset();     // オフセット復元処理
Operate_dp();   // 内積計算
二値化ニューラルネットワーク用プロセッサ１００は、
（１）上記のノルム計算の処理をＮｏｒｍモードの処理で実行し、
（２）上記のオフセット復元処理をＯｆｆｓｅｔモードの処理で実行し、
（３）上記の内積計算の処理をＤＰモード（内積演算処理モード）の処理で実行する。
【０１０４】
以下、これについて、説明する。
【０１０５】
（１．２．２．１：Ｎｏｒｍモードの処理（全結合層の処理））
Ｎｏｒｍモードの処理について、説明する。
【０１０６】
図４に示すように、データＤ３（＝Ｂｉｊｒｉｊ）が、ＡＮＤ処理部３１に入力される。なお、データＤ３は、量子化処理後の特徴ベクトルＢｉｊｒｉｊであり、内部ＲＡＭの領域ＢｉｎＩｎＴに記憶保持されている。
【０１０７】
ＡＮＤ処理部３１は、Ｎｏｒｍモードでは、入力データＤ３を、そのまま、データＤ４として、セレクタ３２に出力する。
【０１０８】
セレクタ３２では、信号値が「１」に設定されたモード信号ｄｐ＿ｍｏｄｅが入力されており、セレクタ３２は、当該モード信号ｄｐ＿ｍｏｄｅに基づいて、データＤ４を選択し、データＤ５としてカウント処理部３３に出力する。
【０１０９】
カウント処理部３３は、入力データＤ５に対してカウント処理（ＢＩＴＣＮＴ関数による処理）を実行し、処理結果をデータＤ６（＝ＢＩＴＣＮＴ（Ｂｉｊｒｉｊ））としてＡＬＵ３５に出力する。
【０１１０】
マイクロコード取得部３４は、Ｎｏｒｍモード用のマイクロコードμＣｏｄｅ（Ｎｏｒｍ＿ｍｏｄｅ）を取得し、ＡＬＵ３５に出力する。なお、Ｎｏｒｍモード用のマイクロコードμＣｏｄｅ（Ｎｏｒｍ＿ｍｏｄｅ）は、カウント処理部３３から入力されたデータをそのまま出力させる処理をＡＬＵ３５に実行させるコードである。
【０１１１】
ＡＬＵ３５は、図４に示すように、カウント処理部３３から出力されるデータＤ６（＝ＢＩＴＣＮＴ（Ｂｉｊｒｉｊ））を入力する。
【０１１２】
また、ＡＬＵ３５は、マイクロコード取得部３４から出力されるＮｏｒｍモード用のマイクロコードμＣｏｄｅ（Ｎｏｒｍ＿ｍｏｄｅ）を入力し、当該Ｎｏｒｍモード用のマイクロコードμＣｏｄｅ（Ｎｏｒｍ＿ｍｏｄｅ）に従って演算を行う。
【０１１３】
つまり、ＡＬＵ３５は、カウント処理部３３から入力されたデータをそのまま出力させる処理を行い、データＤｏ（＝ＢＩＴＣＮＴ（Ｂｉｊｒｉｊ））を出力する。なお、ＢＩＴＣＮＴ（Ｂｉｊｒｉｊ）は、量子化処理後の特徴ベクトルＢｉｊｒｉｊのノルムに相当する。
【０１１４】
以上のように処理することで、上記（数式２）の右辺の第２項、すなわち、Ｎｏｒｍ（ｚ）（ｚ＝Ｂｉｊｒｉｊ）の値（ノルム）を取得することができる。
【０１１５】
全結合層の処理では、上記処理（ノルム算出処理）が、処理対象となっている全結合層につき１回実行される。
【０１１６】
（１．２．２．２：Ｏｆｆｓｅｔモードの処理（全結合層の処理））
Ｏｆｆｓｅｔモードの処理について、説明する。
【０１１７】
図３に示すように、データＤ２が、セレクタ３２に入力される。
【０１１８】
セレクタ３２では、信号値が「０」に設定されたモード信号ｄｐ＿ｍｏｄｅが入力されており、セレクタ３２は、当該モード信号ｄｐ＿ｍｏｄｅに基づいて、データＤ２を選択し、データＤ５としてカウント処理部３３に出力する。
【０１１９】
カウント処理部３３は、Ｏｆｆｓｅｔモードにおいて、入力データＤ５を、そのまま、データＤ６として、ＡＬＵ３５に出力する。
【０１２０】
マイクロコード取得部３４は、Ｏｆｆｓｅｔモード用のマイクロコードμＣｏｄｅ（Ｏｆｆｓｅｔ＿ｍｏｄｅ）を取得し、ＡＬＵ３５に出力する。なお、Ｏｆｆｓｅｔモード用のマイクロコードμＣｏｄｅ（Ｏｆｆｓｅｔ＿ｍｏｄｅ）は、例えば、以下の処理をＡＬＵ３５に実行させるコードである。
（１）ｍｉｎ（ｘ）のロード（読み出し）
（２）データＤ１（＝ｃｎＴ）と、データＤ６（＝ＭｎＴ）と、ｍｉｎ（ｘ）との乗算処理
なお、ｍｉｎ（ｘ）は、量子化処理が実行されるときに取得した値を、例えば、内部ＲＡＭ  Ｒ１に記憶保持しておき、マイクロコード取得部３４が、ｍｉｎ（ｘ）のデータを、内部ＲＡＭ  Ｒ１から読み出すようにしてもよい。
【０１２１】
ＡＬＵ３５は、図３に示すように、データＤ１（＝ｃｎＴ）とデータＤ６（＝ＭｎＴ）とを入力する。なお、データＤ１（＝ｃｎＴ）は、内部ＲＡＭの領域ＣＶに記憶保持されているスケール係数ベクトルのデータｃｎＴである。
【０１２２】
また、ＡＬＵ３５は、マイクロコード取得部３４から出力されるＯｆｆｓｅｔモード用のマイクロコードμＣｏｄｅ（Ｏｆｆｓｅｔ＿ｍｏｄｅ）を入力し、当該Ｏｆｆｓｅｔモード用のマイクロコードμＣｏｄｅ（Ｏｆｆｓｅｔ＿ｍｏｄｅ）に従って演算を行う。
【０１２３】
つまり、ＡＬＵ３５は、
（１）ｍｉｎ（ｘ）のロード（読み出し）
（２）データＤ１（＝ｃｎＴ）と、データＤ６（＝ＭｎＴ）と、ｍｉｎ（ｘ）との乗算処理
を実行することで、出力データＤｏ（＝ｍｉｎ（ｘ）Ｏｆｆｓｅｔ）を取得する。
【０１２４】
以上のように処理することで、上記（数式１）の右辺の第２項、すなわち、ｍｉｎ（ｘ）Ｏｆｆｓｅｔの値（オフセット値）を取得することができる。
【０１２５】
全結合層の処理では、上記処理（オフセット復元処理）が、全結合層の出力数分、実行される。
【０１２６】
（１．２．２．３：ＤＰモードの処理（全結合層の処理））
ＤＰモードの処理について、説明する。
【０１２７】
図５に示すように、データＤ２（＝ＭｎＴ）およびデータＤ３（＝Ｂｉｊｒｉｊ）が、ＡＮＤ処理部３１に入力される。
【０１２８】
データＤ２は、内部ＲＡＭの領域ＢｉｎＭｔｘ０／１に記憶保持されている二値基底行列のデータＭｎＴである。
【０１２９】
データＤ３は、量子化処理後の特徴マップＢｉｊｒｉｊであり、内部ＲＡＭの領域ＢｉｎＩｎＴに記憶保持されている。
【０１３０】
ＡＮＤ処理部３１は、データＤ２およびデータＤ３に対してＡＮＤ処理を実行し、処理結果を含むデータをデータＤ４（＝ＡＮＤ（ＭｎＴ，Ｂｉｊｒｉｊ））として、セレクタ３２に出力する。なお、ＡＮＤ処理は、要素の値が「−１」である場合、当該「−１」を「０」に置換して論理積をとる処理である。
【０１３１】
セレクタ３２では、信号値が「１」に設定されたモード信号ｄｐ＿ｍｏｄｅが入力されており、セレクタ３２は、当該モード信号ｄｐ＿ｍｏｄｅに基づいて、データＤ４を選択し、データＤ５としてカウント処理部３３に出力する。
【０１３２】
カウント処理部３３は、入力データＤ５に対してカウント処理（ＢＩＴＣＮＴ関数による処理）を実行し、処理結果をデータＤ６（＝ＢＩＴＣＮＴ（ＡＮＤ（ＭｎＴ，Ｂｉｊｒｉｊ）））としてＡＬＵ３５に出力する。
【０１３３】
マイクロコード取得部３４は、ＤＰモード用のマイクロコードμＣｏｄｅ（ＤＰ＿ｍｏｄｅ）を取得し、ＡＬＵ３５に出力する。なお、ＤＰモード用のマイクロコードμＣｏｄｅ（ＤＰ＿ｍｏｄｅ）は、例えば、以下の処理をＡＬＵ３５に実行させるコードである。
（１）Ｄ６×２の処理（１ビット左にシフトさせる処理）
（２）上記（１）の結果からノルムを減算する処理
（３）上記（２）の結果に、データＤ１（＝ｃｎＴ）を乗算する処理
ＡＬＵ３５は、図５に示すように、データＤ１（＝ｃｎＴ）とデータＤ６（＝ＢＩＴＣＮＴ（ＡＮＤ（ＭｎＴ，Ｂｉｊｒｉｊ）））とを入力する。なお、データＤ１（＝ｃｎＴ）は、内部ＲＡＭの領域ＣＶに記憶保持されているスケール係数ベクトルのデータｃｎＴである。
【０１３４】
また、ＡＬＵ３５は、マイクロコード取得部３４から出力されるＤＰモード用のマイクロコードμＣｏｄｅ（ＤＰ＿ｍｏｄｅ）を入力し、当該ＤＰモード用のマイクロコードμＣｏｄｅ（ＤＰ＿ｍｏｄｅ）に従って演算を行う。
【０１３５】
つまり、ＡＬＵ３５は、
（１）Ｄ６×２の処理（１ビット左にシフトさせる処理）
（２）上記（１）の結果からノルムを減算する処理（２×Ｄ６―Ｎｏｒｍ（ｚ））
（３）上記（２）の結果に、データＤ１（＝ｃｎＴ）を乗算する処理
を実行することで、出力データＤｏ（＝ｃｎＴＭｎＴＢｉｊｒｉｊ）を取得する。
【０１３６】
つまり、上記により、下記に相当する処理が実行される。
Ｄｏ＝ｃｎＴＭｎＴＢｉｊｒｉｊ
ＭｎＴＢｉｊｒｉｊ＝２×ＢＩＴＣＮＴ（ＡＮＤ（ＭｎＴ，Ｂｉｊｒｉｊ））−Ｎｏｒｍ（ｚ）
以上のように処理することで、上記（数式１）の右辺の第１項、すなわち、ｃｎＴＭｎＴＢｉｊｒｉｊの値を取得することができる。
【０１３７】
全結合層の処理では、上記処理（内積演算処理）が、全結合層の出力数分、実行される。上記の処理結果は、例えば、内部ＲＡＭ  Ｒ１の所定の領域に記憶保持される、あるいは、制御部ＣＰＵ１へ出力され、制御部ＣＰＵ１が当該処理結果を用いて所定の処理を実行する。
【０１３８】
以上のように処理することで、二値化ニューラルネットワーク用プロセッサ１００では、全結合層の処理を実行することができる。すなわち、二値化ニューラルネットワーク用プロセッサ１００では、上記の３つのモードによる処理により、（数式１）のｙｉｊｎを取得するために必要なデータを取得することができ、その結果、全結合層の処理を実行することができる。
【０１３９】
以上のように、二値化ニューラルネットワーク用プロセッサ１００では、畳み込み層の処理と、全結合層の処理において、同様の処理が実行される部分を共通化し、３つのモード（（１）Ｏｆｆｓｅｔモード、（２）Ｎｏｒｍモード、（３）ＤＰモード）の処理を、各モードに対応するマイクロコードにより処理することで実行する。そして、二値化ニューラルネットワーク用プロセッサ１００では、畳み込み層の処理と全結合層の処理とにおいて、相違する部分の処理を、上記の３つのモードの処理を適切な順序で組み合わせることで実現する。したがって、二値化ニューラルネットワーク用プロセッサ１００では、ハードウェア規模の増大を抑制しつつ、ＢＮＮの処理を高速に実行することができる。
【０１４０】
［他の実施形態］
上記実施形態では、二値化ニューラルネットワーク用プロセッサ１００が二値化データをjsよりする場合について、説明したが、本発明はこれに限定されることなく、本発明の手法を多値化データに適用し、多値化ニューラルネットワーク用プロセッサを実現するようにしてもよい。
【０１４１】
また、上記実施形態では、二値化ニューラルネットワーク用プロセッサ１００が、３つのモード（（１）Ｏｆｆｓｅｔモード、（２）Ｎｏｒｍモード、（３）ＤＰモード）により処理を実行する場合について説明したが、これに限定されることはない。例えば、二値化ニューラルネットワーク用プロセッサ１００は、（１）Ｎｏｒｍモード、（２）ＤＰモードにより処理を実行するようにし、このＤＰモードの処理に、上記実施形態で説明したＯｆｆｓｅｔモードの処理を含めるようにしてもよい。また、二値化ニューラルネットワーク用プロセッサ１００は、予め、Ｏｆｆｓｅｔモードで得られる値を演算により取得し、取得した値を保持しておき、ＤＰモード実行時にその値を使用して処理を実行するようにしてもよい。これにより、二値化ニューラルネットワーク用プロセッサ１００において、Ｎｏｒｍモードの処理とＤＰモードの処理とをＣＰＵの制御を介在せずに連続して実行することができる。
【０１４２】
上記実施形態では、内積処理部がＢＮＮの処理の一部を実行する場合について説明したが、これに限定されることはなく、例えば、演算処理部ＰＬ１の内積処理部３において、活性化関数の処理（例えば、ＲｅＬＵ関数の処理）を実行するようにしてもよい。また、活性化関数の処理（例えば、ＲｅＬＵ関数の処理）は、内積処理部３および制御部ＣＰＵ１で実行されるものであってもよい。
【０１４３】
上記実施形態では、内部ＲＡＭの個数については特に限定せず説明したが、内部ＲＡＭは、複数個のＲＡＭにより構成されるものであってもよいし、また、二値化ニューラルネットワーク用プロセッサの外部に設けたＲＡＭ（例えば、ＤＲＡＭ）等を用いて、上記実施形態の処理を実行するようにしてもよい。
【０１４４】
上記実施形態において、スカラー、ベクトル、行列で表現したデータについては、一例であり、上記に限定されるものではない。ＢＮＮの処理に応じて、スカラー、ベクトル、テンソルのデータとして、二値化ニューラルネットワーク用プロセッサ１００が、上記と同様の処理を実行してもよい。
【０１４５】
上記実施形態で説明した二値化ニューラルネットワーク用プロセッサ１００の各ブロック（各機能部）は、ＬＳＩなどの半導体装置により個別に１チップ化されても良いし、一部又は全部を含むように１チップ化されても良い。また、上記実施形態で説明した二値化ニューラルネットワーク用プロセッサ１００の各ブロック（各機能部）は、複数のＬＳＩなどの半導体装置により実現されるものであってもよい。
【０１４６】
なお、ここでは、ＬＳＩとしたが、集積度の違いにより、ＩＣ、システムＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。
【０１４７】
また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。
【０１４８】
また、上記各実施形態の各機能ブロックの処理の一部または全部は、プログラムにより実現されるものであってもよい。そして、上記各実施形態の各機能ブロックの処理の一部または全部は、コンピュータにおいて、中央演算装置（ＣＰＵ）により行われる。また、それぞれの処理を行うためのプログラムは、ハードディスク、ＲＯＭなどの記憶装置に格納されており、ＲＯＭにおいて、あるいはＲＡＭに読み出されて実行される。
【０１４９】
また、上記実施形態の各処理をハードウェアにより実現してもよいし、ソフトウェア（ＯＳ（オペレーティングシステム）、ミドルウェア、あるいは、所定のライブラリとともに実現される場合を含む。）により実現してもよい。さらに、ソフトウェアおよびハードウェアの混在処理により実現しても良い。
【０１５０】
例えば、上記実施形態（変形例を含む）の各機能部を、ソフトウェアにより実現する場合、図６に示したハードウェア構成（例えば、ＣＰＵ、ＲＯＭ、ＲＡＭ、入力部、出力部等をバスＢｕｓにより接続したハードウェア構成）を用いて、各機能部をソフトウェア処理により実現するようにしてもよい。
【０１５１】
また、上記実施形態における処理方法の実行順序は、必ずしも、上記実施形態の記載に制限されるものではなく、発明の要旨を逸脱しない範囲で、実行順序を入れ替えることができるものである。
【０１５２】
前述した方法をコンピュータに実行させるコンピュータプログラム及びそのプログラムを記録したコンピュータ読み取り可能な記録媒体は、本発明の範囲に含まれる。ここで、コンピュータ読み取り可能な記録媒体としては、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、大容量ＤＶＤ、次世代ＤＶＤ、半導体メモリを挙げることができる。
【０１５３】
上記コンピュータプログラムは、上記記録媒体に記録されたものに限られず、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送されるものであってもよい。
【０１５４】
また、文言「部」は、「サーキトリー（ｃｉｒｃｕｉｔｒｙ）」を含む概念であってもよい。サーキトリーは、ハードウェア、ソフトウェア、あるいは、ハードウェアおよびソフトウェアの混在により、その全部または一部が、実現されるものであってもよい。
【０１５５】
なお、本発明の具体的な構成は、前述の実施形態に限られるものではなく、発明の要旨を逸脱しない範囲で種々の変更および修正が可能である。
【符号の説明】
【０１５６】
１００  二値化ニューラルネットワーク用プロセッサ
ＰＬ１  演算処理部
１  ＤＭＡ制御部
２  量子化処理部
Ｒ１  内部ＲＡＭ
３  内積処理部
３４  マイクロコード取得部
３５  ＡＬＵ
【図１】
2020021208.tif 000003
【図２】
2020021208.tif 000004
【図３】
2020021208.tif 000005
【図４】
2020021208.tif 000006
【図５】
2020021208.tif 000007
【図６】
2020021208.tif 000008