(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-03-02
(45)【発行日】2022-03-10
(54)【発明の名称】ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム
(51)【国際特許分類】
G06N 3/063 20060101AFI20220303BHJP
G06N 3/08 20060101ALI20220303BHJP
【FI】
G06N3/063
G06N3/08 140
(21)【出願番号】P 2018143466
(22)【出願日】2018-07-31
【審査請求日】2021-02-15
(73)【特許権者】
【識別番号】591128453
【氏名又は名称】株式会社メガチップス
(74)【代理人】
【識別番号】100143498
【氏名又は名称】中西 健
(74)【代理人】
【識別番号】100136319
【氏名又は名称】北原 宏修
(74)【代理人】
【識別番号】100148275
【氏名又は名称】山内 聡
(74)【代理人】
【識別番号】100142745
【氏名又は名称】伊藤 世子
(72)【発明者】
【氏名】松本 真人
(72)【発明者】
【氏名】石尾 康史
【審査官】北川 純次
(56)【参考文献】
【文献】特開平6-19872(JP,A)
【文献】特開2009-176110(JP,A)
【文献】米国特許出願公開第2016/0328645(US,A1)
【文献】神谷 龍司,Binarized-DCNNによる識別計算の高速化とモデル圧縮,電子情報通信学会技術研究報告,日本,一般社団法人電子情報通信学会,2016年12月08日,第116巻 第366号,p. 47-52
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/063
G06N 3/08
(57)【特許請求の範囲】
【請求項1】
畳み込み層の処理と全結合層の処理とを含む多値化ニューラルネットワーク用処理を実行するためのニューラルネットワーク用プロセッサであって、
実数ベクトルデータであるスケーリング係数ベクトルを設定するとともに、多値データを要素とする多値基底行列を設定する制御部と、
前記畳み込み層に入力される特徴マップおよび前記全結合層に入力される特徴ベクトルに対して量子化処理を実行する量子化処理部であって、前記特徴マップの最小値および前記特徴ベクトルの最小値が所定の値よりも小さい値となるようにオフセット値を設定し、前記特徴マップおよび前記特徴ベクトルの最大値および最小値に基づいて取得される量子化幅を用いて前記量子化処理を実行する前記量子化処理部と、
(1)前記特徴マップおよび前記特徴ベクトルのノルムを算出するノルムモードと、(2)前記多値基底行列と前記量子化処理後の前記特徴マップまたは前記特徴ベクトルとを用いた内積演算処理を実行する内積演算モードとを有し、前記ノルムモードの処理、および、前記内積演算モードを組み合わせた処理を実行することで、前記畳み込み層の処理と前記全結合層の処理とを実行する内積処理部と、
を備えるニューラルネットワーク用プロセッサ。
【請求項2】
前記内積処理部は、
ノルムモード用マイクロコードと、内積演算モード用マイクロコードとを取得するマイクロコード取得部と、
マイクロコードに基づいて、算術演算処理を実行する算術演算処理部と、
を備え、
(1)ノルムモードに設定されている場合、
前記マイクロコード取得部は、前記ノルムモード用マイクロコードを取得し、
前記算術演算処理部は、前記ノルムモード用マイクロコードに基づいて、前記算術演算処理を実行し、
(2)内積演算モードに設定されている場合、
前記マイクロコード取得部は、前記内積演算モード用マイクロコードを取得し、
前記算術演算処理部は、前記内積演算モード用マイクロコードに基づいて、前記算術演算処理を実行する、
請求項1に記載のニューラルネットワーク用プロセッサ。
【請求項3】
前記内積処理部は、
前記畳み込み層の処理を実行する場合、
(1)前記ノルムモードの処理を、処理対象の畳み込み層の特徴マップ数分繰り返し実行し、
(2)前記内積演算モードの処理を、各特徴マップについて前記ノルムモードの処理が実行されるごとに、処理対象の畳み込み層の出力数分繰り返し実行する、
請求項1または2に記載のニューラルネットワーク用プロセッサ。
【請求項4】
前記内積処理部は、
前記全結合層の処理を実行する場合、
(1)処理対象の全結合層につき、前記ノルムモードの処理を1回実行し、
(2)前記内積演算モードの処理を、処理対象の全結合層の出力数分繰り返し実行する、
請求項1から3のいずれかに記載のニューラルネットワーク用プロセッサ。
【請求項5】
畳み込み層の処理と全結合層の処理とを含む多値化ニューラルネットワーク用処理を実行するためのニューラルネットワーク用処理方法であって、
実数ベクトルデータであるスケーリング係数ベクトルを設定するとともに、多値データを要素とする多値基底行列を設定する制御ステップと、
前記畳み込み層に入力される特徴マップおよび前記全結合層に入力される特徴ベクトルに対して量子化処理を実行する量子化処理ステップであって、前記特徴マップの最小値および前記特徴ベクトルの最小値が所定の値よりも小さい値となるようにオフセット値を設定し、前記特徴マップおよび前記特徴ベクトルの最大値および最小値に基づいて取得される量子化幅を用いて前記量子化処理を実行する前記量子化処理ステップと、
(1)前記特徴マップおよび前記特徴ベクトルのノルムを算出するノルムモードと、(2)前記多値基底行列と前記量子化処理後の前記特徴マップまたは前記特徴ベクトルとを用いた内積演算処理を実行する内積演算モードとを有し、前記ノルムモードの処理、および、前記内積演算モードを組み合わせた処理を実行することで、前記畳み込み層の処理と前記全結合層の処理とを実行する内積処理ステップと、
を備えるニューラルネットワーク用処理方法。
【請求項6】
請求項5に記載のニューラルネットワーク用処理方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ニューラルネットワークの技術に関する。
【背景技術】
【0002】
近年、ニューラルネットワーク技術の1つである、CNN(Convolutional Neural Network)を用いた多様な技術が開発されている(例えば、特許文献1を参照)。CNNの中でも、中間層を多く設けたDCNN(Deep Convolutional Neural Network)を用いた技術が、多様な分野で成果を上げているため、特に注目を集めている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
DCNNは、一般物体認識やセマンティックセグメンテーション等の様々なタスクにおいて高い認識性能を実現している。その一方で、DCNNは、処理を実行するために必要な計算量とパラメータ数が非常に多いため、処理を実行するときに、膨大な処理時間と多大なメモリ量が必要となる。
【0005】
また、DCNNでは、層をより深くすることで認識精度が向上する傾向が見られ、これに伴い識別時間(処理時間)に加えモデルサイズも増加するという問題が発生する。組み込み機器やモバイル機器等の低スペックのデバイスでDCNNを使用するには、識別計算の高速化とモデルサイズの圧縮が大きな課題となる。
【0006】
つまり、組み込み機器やモバイル機器等の低スペックのデバイス(例えば、エッジ端末)において、大規模システムで学習し取得した学習済みモデルをそのまま搭載することは困難であり、低スペックのデバイスにおいて、コンパクト化したモデルを構築する必要がある。
【0007】
組み込み機器やモバイル機器等の低スペックのデバイス(例えば、エッジ端末)に、大規模システムで学習し取得した学習済みモデルを搭載するためには、低スペックのデバイスにおいて、当該学習済みモデルのコンパクト化したモデルを構築し、当該学習済みモデルに用いた学習用データを用いて、再度、コンパクト化したモデルにおいて、学習させる必要がある(この学習を「再学習」という)。
【0008】
つまり、組み込み機器やモバイル機器等の低スペックのデバイス(例えば、エッジ端末)で、大規模システムで学習し取得した学習済みモデルを搭載するためには、再学習が必要となるという課題がある。
【0009】
そこで、本発明は、上記課題に鑑み、再学習を必要とせず、組み込み機器やモバイル機器等の低スペックのデバイス(例えば、エッジ端末)において、高性能なコンパクト化したモデルを搭載することができるニューラルネットワーク用プロセッサ、ニューラルネットワーク用データ処理方法、および、プログラムを実現することを目的とする。
【課題を解決するための手段】
【0010】
上記課題を解決するために、第1の発明は、畳み込み層の処理と全結合層の処理とを含む多値化ニューラルネットワーク用処理を実行するためのニューラルネットワーク用プロセッサであって、制御部と、量子化処理部と、内積処理部と、を備える。
【0011】
制御部は、実数ベクトルデータであるスケーリング係数ベクトルを設定するとともに、多値データを要素とする多値基底行列を設定する。
【0012】
量子化処理部は、畳み込み層に入力される特徴マップおよび全結合層に入力される特徴ベクトルに対して量子化処理を実行する。また、量子化処理部は、特徴マップの最小値および特徴ベクトルの最小値が所定の値よりも小さい値となるようにオフセット値を設定し、特徴マップおよび特徴ベクトルの最大値および最小値に基づいて取得される量子化幅を用いて量子化処理を実行する。
【0013】
内積処理部は、(1)特徴マップおよび特徴ベクトルのノルムを算出するノルムモードと、(2)多値基底行列と量子化処理後の特徴マップまたは特徴ベクトルとを用いた内積演算処理を実行する内積演算モードとを有する。内積処理部は、ノルムモードの処理、および、内積演算モードを組み合わせた処理を実行することで、畳み込み層の処理と全結合層の処理とを実行する。
【0014】
このニューラルネットワーク用プロセッサでは、畳み込み層の処理と、全結合層の処理において、同様の処理が実行される部分を共通化し、2つのモード((1)ノルムモード、(2)内積演算モード)の処理を組み合わせた処理を実行することで、畳み込み層の処理と全結合層の処理とを実行することができる。したがって、このニューラルネットワーク用プロセッサでは、ハードウェア規模の増大を抑制しつつ、ニューラルネットワーク用処理を高速に実行することができる。
【0015】
第2の発明は、第1の発明であって、内積処理部は、ノルムモード用マイクロコードと、内積演算モード用マイクロコードとを取得するマイクロコード取得部と、マイクロコードに基づいて、算術演算処理を実行する算術演算処理部と、を備える。
(1)ノルムモードに設定されている場合、
マイクロコード取得部は、ノルムモード用マイクロコードを取得し、算術演算処理部は、ノルムモード用マイクロコードに基づいて、算術演算処理を実行する。
(2)内積演算モードに設定されている場合、
マイクロコード取得部は、内積演算モード用マイクロコードを取得し、算術演算処理部は、内積演算モード用マイクロコードに基づいて、算術演算処理を実行する。
【0016】
このニューラルネットワーク用プロセッサでは、畳み込み層の処理と、全結合層の処理において、同様の処理が実行される部分を共通化し、2つのモード((1)ノルムモード、(2)内積演算モード)の処理を、各モードに対応するマイクロコードにより処理することで実行する。そして、このニューラルネットワーク用プロセッサでは、畳み込み層の処理と全結合層の処理とにおいて、相違する部分の処理を、上記の2つのモードの処理を適切な順序で組み合わせることで実現する。したがって、このニューラルネットワーク用プロセッサでは、ハードウェア規模の増大を抑制しつつ、ニューラルネットワーク用処理を高速に実行することができる。
【0017】
第3の発明は、第1または第2の発明であって、内積処理部は、畳み込み層の処理を実行する場合、
(1)ノルムモードの処理を、処理対象の畳み込み層の特徴マップ数分繰り返し実行し、
(2)内積演算モードの処理を、各特徴マップについてノルムモードの処理が実行されるごとに、処理対象の畳み込み層の出力数分繰り返し実行する。
【0018】
これにより、このニューラルネットワーク用プロセッサでは、2つのモードによる処理を組み合わせることで、畳み込み層の処理を実行することができる。
【0019】
第4の発明は、第1から第3のいずれかの発明であって、内積処理部は、全結合層の処理を実行する場合、
(1)処理対象の全結合層につき、ノルムモードの処理を1回実行し、
(2)内積演算モードの処理を、処理対象の全結合層の出力数分繰り返し実行する。
【0020】
これにより、このニューラルネットワーク用プロセッサでは、2つのモードによる処理を組み合わせることで、全結合層の処理を実行することができる。
【0021】
第5の発明は、畳み込み層の処理と全結合層の処理とを含む多値化ニューラルネットワーク用処理を実行するためのニューラルネットワーク用処理方法であって、制御ステップと、量子化処理ステップと、内積処理ステップと、を備える。
【0022】
制御ステップは、実数ベクトルデータであるスケーリング係数ベクトルを設定するとともに、多値データを要素とする多値基底行列を設定する。
【0023】
量子化処理ステップは、畳み込み層に入力される特徴マップおよび全結合層に入力される特徴ベクトルに対して量子化処理を実行する。また、量子化処理ステップは、特徴マップの最小値および特徴ベクトルの最小値が所定の値よりも小さい値となるようにオフセット値を設定し、前記特徴マップおよび前記特徴ベクトルの最大値および最小値に基づいて取得される量子化幅を用いて量子化処理を実行する。
【0024】
内積処理ステップは、(1)特徴マップおよび特徴ベクトルのノルムを算出するノルムモードと、(2)多値基底行列と量子化処理後の特徴マップまたは特徴ベクトルとを用いた内積演算処理を実行する内積演算モードとを有する。内積処理ステップは、ノルムモードの処理、および、内積演算モードを組み合わせた処理を実行することで、畳み込み層の処理と全結合層の処理とを実行する。
【0025】
これにより、第1の発明と同様の効果を奏するニューラルネットワーク用処理方法を実現させることができる。
【0026】
第6の発明は、第5の発明であるニューラルネットワーク用処理方法をコンピュータに実行させるためのプログラムである。
【0027】
これにより、第1の発明と同様の効果を奏するニューラルネットワーク用処理方法をコンピュータに実行させるためのプログラムを実現させることができる。
【発明の効果】
【0028】
本発明によれば、再学習を必要とせず、組み込み機器やモバイル機器等の低スペックのデバイス(例えば、エッジ端末)において、高性能なコンパクト化したモデルを搭載することができるニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラムを実現することができる。
【図面の簡単な説明】
【0029】
【
図1】第1実施形態に係る二値化ニューラルネットワーク用プロセッサ100の概略構成図。
【
図2】第1実施形態に係る内積処理部3の概略構成図。
【
図3】Offsetモードの処理を説明するための図。
【
図5】DPモード(内積演算処理モード)の処理を説明するための図。
【発明を実施するための形態】
【0030】
[第1実施形態]
第1実施形態について、図面を参照しながら、以下、説明する。
【0031】
<1.1:二値化ニューラルネットワーク用プロセッサの構成>
図1は、第1実施形態に係る二値化ニューラルネットワーク用プロセッサ100の概略構成図である。
【0032】
図2は、第1実施形態に係る内積処理部3の概略構成図である。
【0033】
二値化ニューラルネットワーク用プロセッサ100は、
図1に示すように、入出力インターフェースIF1と、制御部CPU1と、演算処理部PL1と、バスB1とを備える。入出力インターフェースIF1と、制御部CPU1と、演算処理部PL1とは、
図1に示すように、バスB1により接続されており、必要なデータ、コマンド等を、バスB1を介して、入出力することができる。なお、上記機能部の一部または全部は、バス接続ではなく、必要に応じて、直接接続されるものであってもよい。
【0034】
入出力インターフェースIF1は、外部から処理対象となるデータDinを入力し、二値化ニューラルネットワーク用プロセッサにより処理結果を含むデータをデータDoutとして外部に出力する。
【0035】
制御部CPU1は、二値化ニューラルネットワーク用プロセッサ100の全体制御、各機能部の制御および二値化ニューラルネットワーク用処理に必要な処理を行う。制御部CPU1は、CPU(Central Processing Unit)やCPUコアにより実現される。
【0036】
制御部CPU1は、例えば、大規模システムでの学習済みモデルのパラメータ(重み付けデータ)を近似するスケーリング係数ベクトルv_cおよび二値基底行列Mを取得(設定)し、取得(設定)したスケーリング係数ベクトルv_cおよび二値基底行列Mを、それぞれ、内部RAM R1の領域CV、および領域BinMtx0/1に記憶保持させる。
【0037】
なお、上記スケーリング係数ベクトルv_cおよび二値基底行列Mは、入出力インターフェースIF1を介して、外部から、二値化ニューラルネットワーク用プロセッサ100に入力されるものであってもよい。
【0038】
演算処理部PL1は、
図1に示すように、DMA制御部1と、量子化処理部2と、内積処理部3と、内部RAM R1と、を備える。
【0039】
DMA制御部1は、DMA転送処理(DMA:Direct Memory Access)を行う。
【0040】
量子化処理部2は、DCNN(Deep Convolution Neural Network)の畳み込み層の入力である特徴マップのデータに対して、量子化処理を行う。また、量子化処理部2は、DCNNの全結合層の入力データに対して、量子化処理を行う。
【0041】
内積処理部3は、
図2に示すように、AND処理部31と、セレクタ32と、カウント処理部33と、マイクロコード取得部34と、ALU35(ALU:Arithmetic Logic Unit)と、を備える。
【0042】
AND処理部31は、データD2(例えば、内部RAM R1(領域BinMtx0/1)から取得される重みベクトルの整数部のデータ)とデータD3(例えば、内部RAM R1(領域BinInT)から取得されるデータであって、ビット分解され、さらに量子化処理が実行されたデータ)とを入力し、データD2とデータD3とに対してAND処理を実行し、実行結果を含むデータをデータD4としてセレクタ32に出力する。
【0043】
セレクタ32は、データD2とデータD4と、モードを指示する信号dp_modeとを入力する。セレクタ32は、信号dp_modeに基づいて、データD2およびデータD4のいずれか一方を選択し、選択したデータをデータD5としてカウント処理部33に出力する。
【0044】
カウント処理部33は、セレクタ32から出力されるデータD5を入力し、データD5に対してカウント処理を実行する。そして、カウント処理部33は、処理結果を含むデータをデータD6として、ALU35に出力する。
【0045】
マイクロコード取得部34は、マイクロコードμCode(例えば、モードに応じたマイクロコード)を取得し、取得したマイクロコードμCodeをALU35に出力する。モードとして、例えば、(1)Offsetモード、(2)Normモード、(3)DPモードが設定される。
なお、「Offsetモード」は、畳み込み層に入力される特徴マップおよび全結合層に入力される特徴ベクトルに対して量子化処理を実行する場合において、特徴マップの最小値および特徴ベクトルの最小値が所定の値よりも小さい値となるように設定されるオフセット値を取得する処理を実行するためのモードである。
「Normモード」は、特徴マップおよび特徴ベクトルのノルムを算出する処理を実行するためのモードである。
「DPモード」は、多値基底行列と量子化処理後の特徴マップまたは特徴ベクトルとを用いた内積演算処理を実行するためのモードである。
【0046】
ALU35は、データD1(例えば、内部RAM R1(領域CV)から取得される重みベクトルの実数部のデータ(スケール係数ベクトル))と、カウント処理部33から出力されるデータD6と、マイクロコード取得部34から出力されるマイクロコードμCodeとを入力する。ALU35は、マイクロコードμCodeに基づいて、算術演算を行い、当該算術演算の結果を含むデータをデータDoとして出力する。
【0047】
内部RAM R1は、二値化ニューラルネットワーク用処理を実行するために必要なデータを記憶保持するためのRAM(Random Access Memory)である。
【0048】
<1.2:二値化ニューラルネットワーク用プロセッサの動作>
以上のように構成された二値化ニューラルネットワーク用プロセッサ100の動作について、以下、説明する。
【0049】
一般に、CNNでは、入力層と、畳み込み層(コンボリューション層)と、全結合層とを含む。例えば、二値化ニューラルネットワーク用プロセッサ100の入出力インターフェースIF1に、入力データDinとして、画像データが入力され、CNNによる画像認識処理が実行され、画像認識処理結果が出力データDoutとして外部に出力される。
【0050】
CNNでは、畳み込み層の処理、あるいは、全結合層の処理において、入力データに対して重み演算処理が実行され、当該処理結果に対して活性化関数(例えば、ランプ関数(ReLU:Rectified Linear Unit)、シグモイド関数、Softmax関数等)により処理が実行されることで、畳み込み層あるいは全結合層の出力が得られる。
【0051】
また、下記先行技術文献Aに開示されているように、Binarized-DCNN(DCNN:Deep Convolution Neural Network)(以下、「BNN」という)では、Quantization sub-layerと結合係数の二値分解を導入し、実数同士の内積計算を二値同士の内積計算に置換することで、既存のネットワークモデルに対して再学習なしに識別計算の高速化およびモデルサイズの圧縮を実現することができる。BNNの二値同士の演算は、XORやAND等の論理演算とビットカウントにより高速な演算が可能となる。
(先行技術文献A):
神谷龍司等 “Binarized-DCNNによる識別計算の高速化とモデル圧縮” 信学技報 116(366), 47-52, 2016-12-15 電子情報通信学会
上記先行技術文献Aの開示に基づいて、BNNの識別計算の基本式を、下記(数式1)のように導出することができる。
(数式1):
yijn=cn
TMn
TBijrij+min(x)Offset
yijn:n番目の特徴マップの出力(特徴マップの座標(i,j)の出力値)
cn
T:n番目の特徴マップのスケール係数ベクトルcnの転置行列
Mn
T:n番目の特徴マップの二値基底行列の転置行列
Bijrij:二値特徴マップ(量子化後の二値特徴マップ)
min(x):n番目の特徴マップの各要素の値のうちの最小値
Offset:Offsetモードで取得される結果
また、Mn
T∈{-1,1}とBijrij∈{-1,1}とは二値であるため、下記(数式2)を用いて論理演算とビットカウントで計算することができる。
(数式2):
Mn
TBijrij
=2×BITCNT(AND(Mn
T,Bijrij))-Norm(z)
z=Bijrij
Norm(z):zのノルムを取得する関数
BITCNT(x):バイナリコードxにおいて、「1」であるビット数をカウントする関数
二値化ニューラルネットワーク用プロセッサ100では、畳み込み層の処理と、全結合層の処理において、同様の処理が実行される部分を共通化することで、ハードウェア規模の増大を抑制しつつ、高速処理を実現させる。
【0052】
以下では、「畳み込み層の処理」と「全結合層の処理」とに分けて、二値化ニューラルネットワーク用プロセッサ100の動作について説明する。
【0053】
図3は、Offsetモードの処理を説明するための図である。
【0054】
図4は、Normモードの処理を説明するための図である。
【0055】
図5は、DPモード(内積演算処理モード)の処理を説明するための図である。
【0056】
二値化ニューラルネットワーク用プロセッサ100では、(1)Offsetモード、(2)Normモード、(3)DPモードの3つのモードを用いて、処理が実行される。
【0057】
(1.2.1:畳み込み層の処理)
まず、畳み込み層の処理について、説明する。
【0058】
二値化ニューラルネットワーク用プロセッサ100の量子化処理部2は、第l層(l:自然数)におけるm番目(m:自然数)の特徴マップzl
ijmにおける最大値-最小値間の量子化幅Δdを、
Δd={max(zl
ijm)-min(zl
ijm)}/(2Q-1)
max(x):xの最大値を取得する関数
min(x):xの最小値を取得する関数
Q:量子化ビット数
として取得する。
【0059】
そして、量子化処理部2は、特徴マップの最小値が0となるように値をシフトさせる。つまり、量子化処理部2は、
zl
ijm’={zl
ijm-min(zl
ijm)}/Q
に相当する処理を実行し、さらに、上記数式により取得された値を四捨五入して整数値に丸め量子化する。さらに、量子化処理部2は、丸め量子化により取得された値に対して、二値化処理をすることで、バイナリコードzl
ijm
(b)∈{0,1}を取得する。
【0060】
上記のようにして取得されたバイナリコードzl
ijm
(b)∈{0,1}(量子化処理後の特徴マップBijrij)は、内部RAMの領域BinInTに記憶保持される。
【0061】
畳み込み層の処理において、以下のことが成り立つ。
(1)量子化処理後の特徴マップBijrijは、特徴マップごとに変化する(入れ替わる)。
(2)上記(数式1)の右辺の第2項、すなわち、min(x)Offsetの値は、特徴マップに関わらず、一定である。
【0062】
二値化ニューラルネットワーク用プロセッサ100では、上記を考慮して、畳み込み層の処理を以下の疑似コードに相当する処理により実行する。
≪畳み込み層の処理の擬似コード≫
For (出力数)
Operate_offset(); // オフセット復元処理
For (特徴マップ数)
Operate_Norm(); // ノルムの計算 (数式2)の右辺の第2項に相当する処理
For (出力数)
Operate_dp(); // 内積計算
二値化ニューラルネットワーク用プロセッサ100は、
(1)上記のオフセット復元処理をOffsetモードの処理で実行し、
(2)上記のノルム計算の処理をNormモードの処理で実行し、
(3)上記の内積計算の処理をDPモード(内積演算処理モード)の処理で実行する。
【0063】
以下、これについて、説明する。
【0064】
(1.2.1.1:Offsetモードの処理(畳み込み層の処理))
Offsetモードの処理について、説明する。
【0065】
図3に示すように、データD2が、セレクタ32に入力される。
【0066】
セレクタ32では、信号値が「0」に設定されたモード信号dp_modeが入力されており、セレクタ32は、当該モード信号dp_modeに基づいて、データD2を選択し、データD5としてカウント処理部33に出力する。
【0067】
カウント処理部33は、Offsetモードにおいて、入力データD5を、そのまま、データD6として、ALU35に出力する。
【0068】
マイクロコード取得部34は、Offsetモード用のマイクロコードμCode(Offset_mode)を取得し、ALU35に出力する。なお、Offsetモード用のマイクロコードμCode(Offset_mode)は、例えば、以下の処理をALU35に実行させるコードである。
(1)min(x)のロード(読み出し)
(2)データD1(=cn
T)と、データD6(=Mn
T)と、min(x)との乗算処理
なお、min(x)は、量子化処理が実行されるときに取得した値を、例えば、内部RAM R1に記憶保持しておき、マイクロコード取得部34が、min(x)のデータを、内部RAM R1から読み出すようにしてもよい。
【0069】
ALU35は、
図3に示すように、データD1(=c
n
T)とデータD6(=M
n
T)とを入力する。なお、データD1(=c
n
T)は、内部RAMの領域CVに記憶保持されているスケール係数ベクトルのデータc
n
Tである。
【0070】
また、ALU35は、マイクロコード取得部34から出力されるOffsetモード用のマイクロコードμCode(Offset_mode)を入力し、当該Offsetモード用のマイクロコードμCode(Offset_mode)に従って演算を行う。
【0071】
つまり、ALU35は、
(1)min(x)のロード(読み出し)
(2)データD1(=cn
T)と、データD6(=Mn
T)と、min(x)との乗算処理
を実行することで、出力データDo(=min(x)Offset)を取得する。
【0072】
以上のように処理することで、上記(数式1)の右辺の第2項、すなわち、min(x)Offsetの値(オフセット値)を取得することができる。
【0073】
畳み込み層の処理では、上記処理(オフセット復元処理)が、畳み込み層の出力数分、実行される。
【0074】
(1.2.1.2:Normモードの処理(畳み込み層の処理))
Normモードの処理について、説明する。
【0075】
図4に示すように、データD3(=B
ijr
ij)が、AND処理部31に入力される。なお、データD3は、量子化処理後の特徴マップB
ijr
ijであり、内部RAMの領域BinInTに記憶保持されている。
【0076】
AND処理部31は、Normモードでは、入力データD3を、そのまま、データD4として、セレクタ32に出力する。
【0077】
セレクタ32では、信号値が「1」に設定されたモード信号dp_modeが入力されており、セレクタ32は、当該モード信号dp_modeに基づいて、データD4を選択し、データD5としてカウント処理部33に出力する。
【0078】
カウント処理部33は、入力データD5に対してカウント処理(BITCNT関数による処理)を実行し、処理結果をデータD6(=BITCNT(Bijrij))としてALU35に出力する。
【0079】
マイクロコード取得部34は、Normモード用のマイクロコードμCode(Norm_mode)を取得し、ALU35に出力する。なお、Normモード用のマイクロコードμCode(Norm_mode)は、カウント処理部33から入力されたデータをそのまま出力させる処理をALU35に実行させるコードである。
【0080】
ALU35は、
図4に示すように、カウント処理部33から出力されるデータD6(=BITCNT(B
ijr
ij))を入力する。
【0081】
また、ALU35は、マイクロコード取得部34から出力されるNormモード用のマイクロコードμCode(Norm_mode)を入力し、当該Normモード用のマイクロコードμCode(Norm_mode)に従って演算を行う。
【0082】
つまり、ALU35は、カウント処理部33から入力されたデータをそのまま出力させる処理を行い、データDo(=BITCNT(Bijrij))を出力する。なお、BITCNT(Bijrij)は、量子化処理後の特徴マップBijrijのノルムに相当する。
【0083】
以上のように処理することで、上記(数式2)の右辺の第2項、すなわち、Norm(z)(z=Bijrij)の値(ノルム)を取得することができる。
【0084】
畳み込み層の処理では、上記処理(ノルム算出処理)が、処理対象となっている畳み込み層の特徴マップ数分、実行される。
【0085】
(1.2.1.3:DPモードの処理(畳み込み層の処理))
DPモードの処理について、説明する。
【0086】
図5に示すように、データD2(=M
n
T)およびデータD3(=B
ijr
ij)が、AND処理部31に入力される。
【0087】
データD2は、内部RAMの領域BinMtx0/1に記憶保持されている二値基底行列のデータMn
Tである。
【0088】
データD3は、量子化処理後の特徴マップBijrijであり、内部RAMの領域BinInTに記憶保持されている。
【0089】
AND処理部31は、データD2およびデータD3に対してAND処理を実行し、処理結果を含むデータをデータD4(=AND(Mn
T,Bijrij))として、セレクタ32に出力する。なお、AND処理は、要素の値が「-1」である場合、当該「-1」を「0」に置換して論理積をとる処理である。
【0090】
セレクタ32では、信号値が「1」に設定されたモード信号dp_modeが入力されており、セレクタ32は、当該モード信号dp_modeに基づいて、データD4を選択し、データD5としてカウント処理部33に出力する。
【0091】
カウント処理部33は、入力データD5に対してカウント処理(BITCNT関数による処理)を実行し、処理結果をデータD6(=BITCNT(AND(Mn
T,Bijrij)))としてALU35に出力する。
【0092】
マイクロコード取得部34は、DPモード用のマイクロコードμCode(DP_mode)を取得し、ALU35に出力する。なお、DPモード用のマイクロコードμCode(DP_mode)は、例えば、以下の処理をALU35に実行させるコードである。
(1)D6×2の処理(1ビット左にシフトさせる処理)
(2)上記(1)の結果からノルムを減算する処理
(3)上記(2)の結果に、データD1(=c
n
T)を乗算する処理
ALU35は、
図5に示すように、データD1(=c
n
T)とデータD6(=BITCNT(AND(M
n
T,B
ijr
ij)))とを入力する。なお、データD1(=c
n
T)は、内部RAMの領域CVに記憶保持されているスケール係数ベクトルのデータc
n
Tである。
【0093】
また、ALU35は、マイクロコード取得部34から出力されるDPモード用のマイクロコードμCode(DP_mode)を入力し、当該DPモード用のマイクロコードμCode(DP_mode)に従って演算を行う。
【0094】
つまり、ALU35は、
(1)D6×2の処理(1ビット左にシフトさせる処理)
(2)上記(1)の結果からノルムを減算する処理(2×D6―Norm(z))
(3)上記(2)の結果に、データD1(=cn
T)を乗算する処理
を実行することで、出力データDo(=cn
TMn
TBijrij)を取得する。
【0095】
つまり、上記により、下記に相当する処理が実行される。
Do=cn
TMn
TBijrij
Mn
TBijrij=2×BITCNT(AND(Mn
T,Bijrij))-Norm(z)
以上のように処理することで、上記(数式1)の右辺の第1項、すなわち、cn
TMn
TBijrijの値を取得することができる。
【0096】
畳み込み層の処理では、上記処理(内積演算処理)が、処理対象となっている畳み込み層の特徴マップごとに、当該畳み込み層の出力数分、実行される。上記の処理結果は、例えば、内部RAM R1の所定の領域に記憶保持される、あるいは、制御部CPU1へ出力され、制御部CPU1が当該処理結果を用いて所定の処理を実行する。
【0097】
以上のように処理することで、二値化ニューラルネットワーク用プロセッサ100では、畳み込み層の処理を実行することができる。すなわち、二値化ニューラルネットワーク用プロセッサ100では、上記の3つのモードによる処理により、(数式1)のyijnを取得するために必要なデータを取得することができ、その結果、畳み込み層の処理を実行することができる。
【0098】
(1.2.2:全結合層の処理)
次に、全結合層の処理について、説明する。
【0099】
二値化ニューラルネットワーク用プロセッサ100の量子化処理部2は、l番目の全結合層への入力ベクトルzl
iにおける最大値-最小値間の量子化幅Δdを、
Δd={max(zl
i)-min(zl
i)}/(2Q-1)
max(x):xの最大値を取得する関数
min(x):xの最小値を取得する関数
Q:量子化ビット数
として取得する。
【0100】
そして、量子化処理部2は、全結合層への入力ベクトルの最小値が0となるように値をシフトさせる。つまり、量子化処理部2は、
zl
i’={zl
i-min(zl
i)}/Q
に相当する処理を実行し、さらに、上記数式により取得された値を四捨五入して整数値に丸め量子化する。さらに、量子化処理部2は、丸め量子化により取得された値に対して、二値化処理をすることで、バイナリコードzl
i
(b)∈{0,1}を取得する。
【0101】
上記のようにして取得されたバイナリコードzl
i
(b)∈{0,1}(量子化処理後の特徴ベクトルBijrij)は、内部RAMの領域BinInTに記憶保持される。
【0102】
全結合層の処理において、以下のことが成り立つ。
(1)量子化処理後の特徴ベクトルは1つだけである。
【0103】
二値化ニューラルネットワーク用プロセッサ100では、上記を考慮して、全結合層の処理を以下の疑似コードに相当する処理により実行する。
≪全結合層の処理の擬似コード≫
Operate_Norm(); // ノルムの計算 (数式2)の右辺の第2項に相当する処理
For (出力数)
Operate_offset(); // オフセット復元処理
Operate_dp(); // 内積計算
二値化ニューラルネットワーク用プロセッサ100は、
(1)上記のノルム計算の処理をNormモードの処理で実行し、
(2)上記のオフセット復元処理をOffsetモードの処理で実行し、
(3)上記の内積計算の処理をDPモード(内積演算処理モード)の処理で実行する。
【0104】
以下、これについて、説明する。
【0105】
(1.2.2.1:Normモードの処理(全結合層の処理))
Normモードの処理について、説明する。
【0106】
図4に示すように、データD3(=B
ijr
ij)が、AND処理部31に入力される。なお、データD3は、量子化処理後の特徴ベクトルB
ijr
ijであり、内部RAMの領域BinInTに記憶保持されている。
【0107】
AND処理部31は、Normモードでは、入力データD3を、そのまま、データD4として、セレクタ32に出力する。
【0108】
セレクタ32では、信号値が「1」に設定されたモード信号dp_modeが入力されており、セレクタ32は、当該モード信号dp_modeに基づいて、データD4を選択し、データD5としてカウント処理部33に出力する。
【0109】
カウント処理部33は、入力データD5に対してカウント処理(BITCNT関数による処理)を実行し、処理結果をデータD6(=BITCNT(Bijrij))としてALU35に出力する。
【0110】
マイクロコード取得部34は、Normモード用のマイクロコードμCode(Norm_mode)を取得し、ALU35に出力する。なお、Normモード用のマイクロコードμCode(Norm_mode)は、カウント処理部33から入力されたデータをそのまま出力させる処理をALU35に実行させるコードである。
【0111】
ALU35は、
図4に示すように、カウント処理部33から出力されるデータD6(=BITCNT(B
ijr
ij))を入力する。
【0112】
また、ALU35は、マイクロコード取得部34から出力されるNormモード用のマイクロコードμCode(Norm_mode)を入力し、当該Normモード用のマイクロコードμCode(Norm_mode)に従って演算を行う。
【0113】
つまり、ALU35は、カウント処理部33から入力されたデータをそのまま出力させる処理を行い、データDo(=BITCNT(Bijrij))を出力する。なお、BITCNT(Bijrij)は、量子化処理後の特徴ベクトルBijrijのノルムに相当する。
【0114】
以上のように処理することで、上記(数式2)の右辺の第2項、すなわち、Norm(z)(z=Bijrij)の値(ノルム)を取得することができる。
【0115】
全結合層の処理では、上記処理(ノルム算出処理)が、処理対象となっている全結合層につき1回実行される。
【0116】
(1.2.2.2:Offsetモードの処理(全結合層の処理))
Offsetモードの処理について、説明する。
【0117】
図3に示すように、データD2が、セレクタ32に入力される。
【0118】
セレクタ32では、信号値が「0」に設定されたモード信号dp_modeが入力されており、セレクタ32は、当該モード信号dp_modeに基づいて、データD2を選択し、データD5としてカウント処理部33に出力する。
【0119】
カウント処理部33は、Offsetモードにおいて、入力データD5を、そのまま、データD6として、ALU35に出力する。
【0120】
マイクロコード取得部34は、Offsetモード用のマイクロコードμCode(Offset_mode)を取得し、ALU35に出力する。なお、Offsetモード用のマイクロコードμCode(Offset_mode)は、例えば、以下の処理をALU35に実行させるコードである。
(1)min(x)のロード(読み出し)
(2)データD1(=cn
T)と、データD6(=Mn
T)と、min(x)との乗算処理
なお、min(x)は、量子化処理が実行されるときに取得した値を、例えば、内部RAM R1に記憶保持しておき、マイクロコード取得部34が、min(x)のデータを、内部RAM R1から読み出すようにしてもよい。
【0121】
ALU35は、
図3に示すように、データD1(=c
n
T)とデータD6(=M
n
T)とを入力する。なお、データD1(=c
n
T)は、内部RAMの領域CVに記憶保持されているスケール係数ベクトルのデータc
n
Tである。
【0122】
また、ALU35は、マイクロコード取得部34から出力されるOffsetモード用のマイクロコードμCode(Offset_mode)を入力し、当該Offsetモード用のマイクロコードμCode(Offset_mode)に従って演算を行う。
【0123】
つまり、ALU35は、
(1)min(x)のロード(読み出し)
(2)データD1(=cn
T)と、データD6(=Mn
T)と、min(x)との乗算処理
を実行することで、出力データDo(=min(x)Offset)を取得する。
【0124】
以上のように処理することで、上記(数式1)の右辺の第2項、すなわち、min(x)Offsetの値(オフセット値)を取得することができる。
【0125】
全結合層の処理では、上記処理(オフセット復元処理)が、全結合層の出力数分、実行される。
【0126】
(1.2.2.3:DPモードの処理(全結合層の処理))
DPモードの処理について、説明する。
【0127】
図5に示すように、データD2(=M
n
T)およびデータD3(=B
ijr
ij)が、AND処理部31に入力される。
【0128】
データD2は、内部RAMの領域BinMtx0/1に記憶保持されている二値基底行列のデータMn
Tである。
【0129】
データD3は、量子化処理後の特徴マップBijrijであり、内部RAMの領域BinInTに記憶保持されている。
【0130】
AND処理部31は、データD2およびデータD3に対してAND処理を実行し、処理結果を含むデータをデータD4(=AND(Mn
T,Bijrij))として、セレクタ32に出力する。なお、AND処理は、要素の値が「-1」である場合、当該「-1」を「0」に置換して論理積をとる処理である。
【0131】
セレクタ32では、信号値が「1」に設定されたモード信号dp_modeが入力されており、セレクタ32は、当該モード信号dp_modeに基づいて、データD4を選択し、データD5としてカウント処理部33に出力する。
【0132】
カウント処理部33は、入力データD5に対してカウント処理(BITCNT関数による処理)を実行し、処理結果をデータD6(=BITCNT(AND(Mn
T,Bijrij)))としてALU35に出力する。
【0133】
マイクロコード取得部34は、DPモード用のマイクロコードμCode(DP_mode)を取得し、ALU35に出力する。なお、DPモード用のマイクロコードμCode(DP_mode)は、例えば、以下の処理をALU35に実行させるコードである。
(1)D6×2の処理(1ビット左にシフトさせる処理)
(2)上記(1)の結果からノルムを減算する処理
(3)上記(2)の結果に、データD1(=c
n
T)を乗算する処理
ALU35は、
図5に示すように、データD1(=c
n
T)とデータD6(=BITCNT(AND(M
n
T,B
ijr
ij)))とを入力する。なお、データD1(=c
n
T)は、内部RAMの領域CVに記憶保持されているスケール係数ベクトルのデータc
n
Tである。
【0134】
また、ALU35は、マイクロコード取得部34から出力されるDPモード用のマイクロコードμCode(DP_mode)を入力し、当該DPモード用のマイクロコードμCode(DP_mode)に従って演算を行う。
【0135】
つまり、ALU35は、
(1)D6×2の処理(1ビット左にシフトさせる処理)
(2)上記(1)の結果からノルムを減算する処理(2×D6―Norm(z))
(3)上記(2)の結果に、データD1(=cn
T)を乗算する処理
を実行することで、出力データDo(=cn
TMn
TBijrij)を取得する。
【0136】
つまり、上記により、下記に相当する処理が実行される。
Do=cn
TMn
TBijrij
Mn
TBijrij=2×BITCNT(AND(Mn
T,Bijrij))-Norm(z)
以上のように処理することで、上記(数式1)の右辺の第1項、すなわち、cn
TMn
TBijrijの値を取得することができる。
【0137】
全結合層の処理では、上記処理(内積演算処理)が、全結合層の出力数分、実行される。上記の処理結果は、例えば、内部RAM R1の所定の領域に記憶保持される、あるいは、制御部CPU1へ出力され、制御部CPU1が当該処理結果を用いて所定の処理を実行する。
【0138】
以上のように処理することで、二値化ニューラルネットワーク用プロセッサ100では、全結合層の処理を実行することができる。すなわち、二値化ニューラルネットワーク用プロセッサ100では、上記の3つのモードによる処理により、(数式1)のyijnを取得するために必要なデータを取得することができ、その結果、全結合層の処理を実行することができる。
【0139】
以上のように、二値化ニューラルネットワーク用プロセッサ100では、畳み込み層の処理と、全結合層の処理において、同様の処理が実行される部分を共通化し、3つのモード((1)Offsetモード、(2)Normモード、(3)DPモード)の処理を、各モードに対応するマイクロコードにより処理することで実行する。そして、二値化ニューラルネットワーク用プロセッサ100では、畳み込み層の処理と全結合層の処理とにおいて、相違する部分の処理を、上記の3つのモードの処理を適切な順序で組み合わせることで実現する。したがって、二値化ニューラルネットワーク用プロセッサ100では、ハードウェア規模の増大を抑制しつつ、BNNの処理を高速に実行することができる。
【0140】
[他の実施形態]
上記実施形態では、二値化ニューラルネットワーク用プロセッサ100が二値化データをjsよりする場合について、説明したが、本発明はこれに限定されることなく、本発明の手法を多値化データに適用し、多値化ニューラルネットワーク用プロセッサを実現するようにしてもよい。
【0141】
また、上記実施形態では、二値化ニューラルネットワーク用プロセッサ100が、3つのモード((1)Offsetモード、(2)Normモード、(3)DPモード)により処理を実行する場合について説明したが、これに限定されることはない。例えば、二値化ニューラルネットワーク用プロセッサ100は、(1)Normモード、(2)DPモードにより処理を実行するようにし、このDPモードの処理に、上記実施形態で説明したOffsetモードの処理を含めるようにしてもよい。また、二値化ニューラルネットワーク用プロセッサ100は、予め、Offsetモードで得られる値を演算により取得し、取得した値を保持しておき、DPモード実行時にその値を使用して処理を実行するようにしてもよい。これにより、二値化ニューラルネットワーク用プロセッサ100において、Normモードの処理とDPモードの処理とをCPUの制御を介在せずに連続して実行することができる。
【0142】
上記実施形態では、内積処理部がBNNの処理の一部を実行する場合について説明したが、これに限定されることはなく、例えば、演算処理部PL1の内積処理部3において、活性化関数の処理(例えば、ReLU関数の処理)を実行するようにしてもよい。また、活性化関数の処理(例えば、ReLU関数の処理)は、内積処理部3および制御部CPU1で実行されるものであってもよい。
【0143】
上記実施形態では、内部RAMの個数については特に限定せず説明したが、内部RAMは、複数個のRAMにより構成されるものであってもよいし、また、二値化ニューラルネットワーク用プロセッサの外部に設けたRAM(例えば、DRAM)等を用いて、上記実施形態の処理を実行するようにしてもよい。
【0144】
上記実施形態において、スカラー、ベクトル、行列で表現したデータについては、一例であり、上記に限定されるものではない。BNNの処理に応じて、スカラー、ベクトル、テンソルのデータとして、二値化ニューラルネットワーク用プロセッサ100が、上記と同様の処理を実行してもよい。
【0145】
上記実施形態で説明した二値化ニューラルネットワーク用プロセッサ100の各ブロック(各機能部)は、LSIなどの半導体装置により個別に1チップ化されても良いし、一部又は全部を含むように1チップ化されても良い。また、上記実施形態で説明した二値化ニューラルネットワーク用プロセッサ100の各ブロック(各機能部)は、複数のLSIなどの半導体装置により実現されるものであってもよい。
【0146】
なお、ここでは、LSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。
【0147】
また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。
【0148】
また、上記各実施形態の各機能ブロックの処理の一部または全部は、プログラムにより実現されるものであってもよい。そして、上記各実施形態の各機能ブロックの処理の一部または全部は、コンピュータにおいて、中央演算装置(CPU)により行われる。また、それぞれの処理を行うためのプログラムは、ハードディスク、ROMなどの記憶装置に格納されており、ROMにおいて、あるいはRAMに読み出されて実行される。
【0149】
また、上記実施形態の各処理をハードウェアにより実現してもよいし、ソフトウェア(OS(オペレーティングシステム)、ミドルウェア、あるいは、所定のライブラリとともに実現される場合を含む。)により実現してもよい。さらに、ソフトウェアおよびハードウェアの混在処理により実現しても良い。
【0150】
例えば、上記実施形態(変形例を含む)の各機能部を、ソフトウェアにより実現する場合、
図6に示したハードウェア構成(例えば、CPU、ROM、RAM、入力部、出力部等をバスBusにより接続したハードウェア構成)を用いて、各機能部をソフトウェア処理により実現するようにしてもよい。
【0151】
また、上記実施形態における処理方法の実行順序は、必ずしも、上記実施形態の記載に制限されるものではなく、発明の要旨を逸脱しない範囲で、実行順序を入れ替えることができるものである。
【0152】
前述した方法をコンピュータに実行させるコンピュータプログラム及びそのプログラムを記録したコンピュータ読み取り可能な記録媒体は、本発明の範囲に含まれる。ここで、コンピュータ読み取り可能な記録媒体としては、例えば、フレキシブルディスク、ハードディスク、CD-ROM、MO、DVD、DVD-ROM、DVD-RAM、大容量DVD、次世代DVD、半導体メモリを挙げることができる。
【0153】
上記コンピュータプログラムは、上記記録媒体に記録されたものに限られず、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送されるものであってもよい。
【0154】
また、文言「部」は、「サーキトリー(circuitry)」を含む概念であってもよい。サーキトリーは、ハードウェア、ソフトウェア、あるいは、ハードウェアおよびソフトウェアの混在により、その全部または一部が、実現されるものであってもよい。
【0155】
なお、本発明の具体的な構成は、前述の実施形態に限られるものではなく、発明の要旨を逸脱しない範囲で種々の変更および修正が可能である。
【符号の説明】
【0156】
100 二値化ニューラルネットワーク用プロセッサ
PL1 演算処理部
1 DMA制御部
2 量子化処理部
R1 内部RAM
3 内積処理部
34 マイクロコード取得部
35 ALU