IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社メガチップスの特許一覧

特許7265946ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム
<>
  • 特許-ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム 図1
  • 特許-ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム 図2
  • 特許-ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム 図3
  • 特許-ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム 図4
  • 特許-ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム 図5
  • 特許-ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム 図6
  • 特許-ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム 図7
  • 特許-ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム 図8
  • 特許-ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム 図9
  • 特許-ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム 図10
  • 特許-ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム 図11
  • 特許-ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム 図12
  • 特許-ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム 図13
  • 特許-ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム 図14
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-04-19
(45)【発行日】2023-04-27
(54)【発明の名称】ニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラム
(51)【国際特許分類】
   G06N 3/02 20060101AFI20230420BHJP
   G06F 17/10 20060101ALI20230420BHJP
   G06F 17/16 20060101ALI20230420BHJP
【FI】
G06N3/02
G06F17/10 A
G06F17/16 K
【請求項の数】 8
(21)【出願番号】P 2019130416
(22)【出願日】2019-07-12
(65)【公開番号】P2021015510
(43)【公開日】2021-02-12
【審査請求日】2022-01-28
(73)【特許権者】
【識別番号】591128453
【氏名又は名称】株式会社メガチップス
(74)【代理人】
【識別番号】100143498
【弁理士】
【氏名又は名称】中西 健
(74)【代理人】
【識別番号】100136319
【弁理士】
【氏名又は名称】北原 宏修
(74)【代理人】
【識別番号】100148275
【弁理士】
【氏名又は名称】山内 聡
(74)【代理人】
【識別番号】100142745
【弁理士】
【氏名又は名称】伊藤 世子
(72)【発明者】
【氏名】松本 真人
(72)【発明者】
【氏名】石尾 康史
(72)【発明者】
【氏名】藤吉 弘亘
【審査官】加藤 優一
(56)【参考文献】
【文献】国際公開第2018/016608(WO,A1)
【文献】KAMIYA, Ryuji ほか,Binary-decomposed DCNN for accelerating computation and compressing model without retraining,[オンライン],2017年09月14日,pp.1-8,[検索日 2023.03.20], インターネット: <URL:https://arxiv.org/pdf/1709.04731.pdf>
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00 -99/00
G06F 17/00 -17/18
G06F 18/00 -18/40
(57)【特許請求の範囲】
【請求項1】
畳み込み層の処理と全結合層の処理とを含む多値化ニューラルネットワーク用処理を実行するためのニューラルネットワーク用プロセッサであって、
実数ベクトルデータであるスケーリング係数ベクトルを設定するとともに、多値データを要素とする多値基底行列を設定する制御部と、
前記畳み込み層に入力される特徴マップおよび前記全結合層に入力される特徴ベクトルに対して量子化処理を実行する量子化処理部であって、前記特徴マップの最小値および前記特徴ベクトルの最小値が所定の値よりも小さい値となるようにオフセット値を設定し、前記特徴マップおよび前記特徴ベクトルの最大値および最小値に基づいて取得される量子化幅を用いて前記量子化処理を実行する前記量子化処理部と、
二値基底行列を用いたときに所定の近似精度を実現するために必要となるスケーリング係数ベクトルの要素数よりも少ない要素数を有するスケーリング係数ベクトルと、当該スケーリング係数ベクトルに対応して設定される多値基底行列とを用いて行列演算処理を実行する内積処理部と、
を備えるニューラルネットワーク用プロセッサ。
【請求項2】
前記内積処理部は、
前記多値基底行列の要素のデータを入力するためのインターフェース部であって、N1ビット幅(N1:自然数)のバスに接続されている前記インターフェース部と、
前記多値基底行列の要素がとりうる値の数に応じて設定されるモードを設定するモード設定部と、
前記量子化処理後のデータと、前記多値基底行列に含まれる要素の所定数の要素からなるデータとに対して、前記モード設定部により設定された前記モードに基づいて、整数演算処理を実行する整数処理部と、
前記整数演算処理を実行することにより取得されたデータと、前記スケーリング係数ベクトルとに対して、実数演算処理を実行する実数処理部と、
を備える、
請求項1に記載のニューラルネットワーク用プロセッサ。
【請求項3】
前記整数処理部は、
前記多値基底行列に含まれる要素のデータと整数値である符号語とを割り当てた符号テーブルを保持する符号テーブル保持部と、
前記符号テーブル保持部により保持されている符号テーブルに基づいて、前記多値基底行列に含まれる要素のデータに対応する整数値である符号語にデコードするデコーダと、
を備え、
前記整数処理部は、
前記デコーダによりデコードされた前記多値基底行列に含まれる要素のデータに対応する整数値と、前記量子化処理後のデータとを用いて、前記整数演算処理を実行する、
請求項2に記載のニューラルネットワーク用プロセッサ。
【請求項4】
前記インターフェース部は、符号テーブル設定用データを入力することができ、前記符号テーブル設定用データを、前記符号テーブル保持部に出力し、
前記符号テーブル保持部は、前記インターフェース部から入力した前記符号テーブル設定用データにより特定される符号テーブルを保持する、
請求項3に記載のニューラルネットワーク用プロセッサ。
【請求項5】
前記内積処理部は、
前記インターフェース部のバス幅のビット数と、前記インターフェース部に一度に入力される前記多値基底行列の要素のデータの合計ビット数とに基づいて、前記整数演算処理の整数積算処理の繰り返し回数である整数積算ループ回数を決定するループ回数取得部をさらに備え、
前記整数処理部は、
前記ループ回数取得部により決定された前記整数積算ループ回数に従い、前記整数演算処理の整数積算処理を繰り返し実行する、
請求項2から4のいずれかに記載のニューラルネットワーク用プロセッサ。
【請求項6】
前記ループ回数取得部は、
前記インターフェース部に入力される前記スケーリング係数ベクトルの次元数に基づいて、前記実数演算処理の実数積算処理の繰り返し回数である実数積算ループ回数を決定し、
前記実数処理部は、
前記ループ回数取得部により決定された前記実数積算ループ回数に従い、前記実数演算処理の実数積算処理を繰り返し実行する、
請求項5に記載のニューラルネットワーク用プロセッサ。
【請求項7】
畳み込み層の処理と全結合層の処理とを含む多値化ニューラルネットワーク用処理を実行するためのニューラルネットワーク用処理方法であって、
実数ベクトルデータであるスケーリング係数ベクトルを設定するとともに、多値データを要素とする多値基底行列を設定する制御ステップと、
前記畳み込み層に入力される特徴マップおよび前記全結合層に入力される特徴ベクトルに対して量子化処理を実行する量子化処理ステップであって、前記特徴マップの最小値および前記特徴ベクトルの最小値が所定の値よりも小さい値となるようにオフセット値を設定し、前記特徴マップおよび前記特徴ベクトルの最大値および最小値に基づいて取得される量子化幅を用いて前記量子化処理を実行する前記量子化処理ステップと、
二値基底行列を用いたときに所定の近似精度を実現するために必要となるスケーリング係数ベクトルの要素数よりも少ない要素数を有するスケーリング係数ベクトルと、当該スケーリング係数ベクトルに対応して設定される多値基底行列とを用いて行列演算処理を実行する内積処理ステップと、
を備えるニューラルネットワーク用処理方法。
【請求項8】
請求項7に記載のニューラルネットワーク用処理方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ニューラルネットワークの技術に関する。
【背景技術】
【0002】
近年、ニューラルネットワーク技術の1つである、CNN(Convolutional Neural Network)を用いた多様な技術が開発されている(例えば、特許文献1を参照)。CNNの中でも、中間層を多く設けたDCNN(Deep Convolutional Neural Network)を用いた技術が、多様な分野で成果を上げているため、特に注目を集めている。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2015-197702号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
DCNNは、一般物体認識やセマンティックセグメンテーション等の様々なタスクにおいて高い認識性能を実現している。その一方で、DCNNは、処理を実行するために必要な計算量とパラメータ数が非常に多いため、処理を実行するときに、膨大な処理時間と多大なメモリ量が必要となる。
【0005】
また、DCNNでは、層をより深くすることで認識精度が向上する傾向が見られ、これに伴い識別時間(処理時間)に加えモデルサイズも増加するという問題が発生する。組み込み機器やモバイル機器等の低スペックのデバイスでDCNNを使用するには、識別計算の高速化とモデルサイズの圧縮が大きな課題となる。
【0006】
つまり、組み込み機器やモバイル機器等の低スペックのデバイス(例えば、エッジ端末)において、大規模システムで学習し取得した学習済みモデルをそのまま搭載することは困難であり、低スペックのデバイスにおいて、コンパクト化したモデルを構築する必要がある。
【0007】
組み込み機器やモバイル機器等の低スペックのデバイス(例えば、エッジ端末)に、大規模システムで学習し取得した学習済みモデルを搭載するためには、低スペックのデバイスにおいて、当該学習済みモデルのコンパクト化したモデルを構築し、当該学習済みモデルに用いた学習用データを用いて、再度、コンパクト化したモデルにおいて、学習させる必要がある(この学習を「再学習」という)。
【0008】
つまり、組み込み機器やモバイル機器等の低スペックのデバイス(例えば、エッジ端末)で、大規模システムで学習し取得した学習済みモデルを搭載するためには、再学習が必要となるという課題がある。
【0009】
そこで、本発明は、上記課題に鑑み、再学習を必要とせず、組み込み機器やモバイル機器等の低スペックのデバイス(例えば、エッジ端末)において、高性能なコンパクト化したモデルを搭載することができるニューラルネットワーク用プロセッサ、ニューラルネットワーク用データ処理方法、および、プログラムを実現することを目的とする。
【課題を解決するための手段】
【0010】
上記課題を解決するために、第1の発明は、畳み込み層の処理と全結合層の処理とを含む多値化ニューラルネットワーク用処理を実行するためのニューラルネットワーク用プロセッサであって、制御部と、量子化処理部と、内積処理部と、を備える。
【0011】
制御部は、実数ベクトルデータであるスケーリング係数ベクトルを設定するとともに、多値データを要素とする多値基底行列を設定する。
【0012】
量子化処理部は、畳み込み層に入力される特徴マップおよび全結合層に入力される特徴ベクトルに対して量子化処理を実行する。また、量子化処理部は、特徴マップの最小値および特徴ベクトルの最小値が所定の値よりも小さい値となるようにオフセット値を設定し、特徴マップおよび特徴ベクトルの最大値および最小値に基づいて取得される量子化幅を用いて量子化処理を実行する。
【0013】
内積処理部は、二値基底行列を用いたときに所定の近似精度を実現するために必要となるスケーリング係数ベクトルの要素数よりも少ない要素数を有するスケーリング係数ベクトルと、当該スケーリング係数ベクトルに対応して設定される多値基底行列とを用いて行列演算処理を実行する。
【0014】
このニューラルネットワーク用プロセッサでは、多値基底行列を用いるため、多値基底行列の各要素がとりうる整数値の範囲が広くなるので、それに応じて、スケーリング係数ベクトルの次元数(要素数)を減らすことができる。スケーリング係数ベクトルの要素は実数であるため、スケーリング係数ベクトルの次元数(要素数)を減らすことで、実数演算処理の処理量を減らすことができる。その結果、このニューラルネットワーク用プロセッサでは、二値基底行列を用いた行列演算処理を実行するときの計算精度を確保しつつ、演算処理量を著しく低減させることができる。
【0015】
つまり、このニューラルネットワーク用プロセッサ100では、多値基底行列を使用することで、スケーリング係数ベクトルの次元数を減らし、実数処理量を低減させつつ、高精度の演算処理を効率良く行うことができる。このため、このニューラルネットワーク用プロセッサを用いることで、再学習を必要とせず、組み込み機器やモバイル機器等の低スペックのデバイス(例えば、エッジ端末)において、高性能なコンパクト化したモデルを搭載することができる。
【0016】
なお、「所定の近似精度」とは、例えば、(1)所定の行列M1を、スケーリング係数ベクトルと二値基底行列とを用いてベクトル分解して近似したときに、目標値となる行列M1と、ベクトル分解して得られた、スケーリング係数ベクトルと二値基底行列とにより取得される行列との差(例えば、各要素の差分の2乗平均の総和)をX1とし、(2)所定の行列M1を、スケーリング係数ベクトルと多値基底行列とを用いてベクトル分解して近似したときに、目標値となる行列M1と、ベクトル分解して得られた、スケーリング係数ベクトルと多値基底行列とにより取得される行列との差(例えば、各要素の差分の2乗平均の総和)をX2とすると、X1とX2との差が所定の範囲内(許容誤差範囲内)に入っていることをいう。
また、「X1とX2との差が所定の範囲内(許容誤差範囲内)に入る」とは、例えば、目標値となる行列M1の各要素の値の2乗平均の総和をZ1とし、上記のX1を(行列の)各要素の差分の2乗平均の総和とし、上記のX2を(行列の)各要素の差分の2乗平均の総和とすると、
Abs(X1-X2)/Z1<Th1
Abs(x):xの絶対値をとる関数
を満たすことをいう。Th1は、例えば、0.5以下の任意の実数である。
【0017】
また、「行列演算処理」には、内積演算処理(2つのベクトルの内積を求める処理)が含まれる。
【0018】
第2の発明は、第1の発明であって、内積処理部は、インターフェース部と、モード設定部と、整数処理部と、実数処理部と、を備える。
【0019】
インターフェース部は、多値基底行列の要素のデータを入力するためのインターフェース部であって、N1ビット幅(N1:自然数)のバスに接続されている。
【0020】
モード設定部は、多値基底行列の要素がとりうる値の数に応じて設定されるモードを設定する。
【0021】
整数処理部は、量子化処理後のデータと、多値基底行列に含まれる要素の所定数の要素からなるデータとに対して、モード設定部により設定されたモードに基づいて、整数演算処理を実行する。
【0022】
実数処理部は、整数演算処理を実行することにより取得されたデータと、スケーリング係数ベクトルとに対して、実数演算処理を実行する。
【0023】
このニューラルネットワーク用プロセッサでは、インターフェース部のバス幅(N1ビット)と、モード設定部により設定されたモードに応じて、整数演算処理を実行することができる。これにより、ニューラルネットワーク用プロセッサでは、データ転送バスのバス幅の有効データの占有率を高めることができるため、効率良く演算処理が実行できる。
【0024】
第3の発明は、第2の発明であって、整数処理部は、符号テーブル保持部と、デコーダと、を備える。
【0025】
符号テーブル保持部は、多値基底行列に含まれる要素のデータと整数値である符号語とを割り当てた符号テーブルを保持する。
【0026】
デコーダは、符号テーブル保持部により保持されている符号テーブルに基づいて、多値基底行列に含まれる要素のデータに対応する整数値である符号語にデコードする。
【0027】
そして、整数処理部は、デコーダによりデコードされた多値基底行列に含まれる要素のデータに対応する整数値と、量子化処理後のデータとを用いて、整数演算処理を実行する。
【0028】
これにより、このニューラルネットワーク用プロセッサでは、多値(N値)基底行列の各要素がとる整数値(符号語)を、符号テーブルを用いて柔軟に設定することができるため、多様な行列演算処理を効率良く行うことができる。
【0029】
第4の発明は、第3の発明であって、インターフェース部は、符号テーブル設定用データを入力することができ、符号テーブル設定用データを、符号テーブル保持部に出力する。
【0030】
符号テーブル保持部は、インターフェース部から入力した符号テーブル設定用データにより特定される符号テーブルを保持する。
【0031】
これにより、このニューラルネットワーク用プロセッサでは、例えば、外部から符号テーブル設定用データを内積処理部に入力することで、多様な符号テーブルを設定することができる。その結果、このニューラルネットワーク用プロセッサでは、柔軟性を有しつつ、高精度の演算処理を効率良く行うことができる。
【0032】
第5の発明は、第2から第4のいずれかの発明であって、内積処理部は、インターフェース部のバス幅のビット数と、インターフェース部に一度に入力される多値基底行列の要素のデータの合計ビット数とに基づいて、整数演算処理の整数積算処理の繰り返し回数である整数積算ループ回数を決定するループ回数取得部をさらに備える。
【0033】
整数処理部は、ループ回数取得部により決定された整数積算ループ回数に従い、整数演算処理の整数積算処理を繰り返し実行する。
【0034】
これにより、このニューラルネットワーク用プロセッサでは、インターフェース部に一度に入力される多値基底行列の要素のデータの合計ビット数が、インターフェース部のバス幅のビット数を超える場合であっても、整数積算処理を繰り返し実行することで、正しい計算値を取得することができる。
【0035】
第6の発明は、第5の発明であって、ループ回数取得部は、インターフェース部に入力されるスケーリング係数ベクトルの次元数に基づいて、実数演算処理の実数積算処理の繰り返し回数である実数積算ループ回数を決定する。
【0036】
実数処理部は、ループ回数取得部により決定された実数積算ループ回数に従い、実数演算処理の実数積算処理を繰り返し実行する。
【0037】
これにより、このニューラルネットワーク用プロセッサでは、スケーリング係数ベクトルの次元数がいくつであっても、適切に実数演算処理を実行することができる。
【0038】
第7の発明は、畳み込み層の処理と全結合層の処理とを含む多値化ニューラルネットワーク用処理を実行するためのニューラルネットワーク用処理方法であって、制御ステップと、量子化処理ステップと、内積処理ステップと、を備える。
【0039】
制御ステップは、実数ベクトルデータであるスケーリング係数ベクトルを設定するとともに、多値データを要素とする多値基底行列を設定する。
【0040】
量子化処理ステップは、畳み込み層に入力される特徴マップおよび全結合層に入力される特徴ベクトルに対して量子化処理を実行する。また、量子化処理ステップは、特徴マップの最小値および特徴ベクトルの最小値が所定の値よりも小さい値となるようにオフセット値を設定し、特徴マップおよび特徴ベクトルの最大値および最小値に基づいて取得される量子化幅を用いて量子化処理を実行する。
【0041】
内積処理ステップは、二値基底行列を用いたときに所定の近似精度を実現するために必要となるスケーリング係数ベクトルの要素数よりも少ない要素数を有するスケーリング係数ベクトルと、当該スケーリング係数ベクトルに対応して設定される多値基底行列とを用いて行列演算処理を実行する。
【0042】
これにより、第1の発明と同様の効果を奏するニューラルネットワーク用処理方法を実現することができる。
【0043】
第8の発明は、第7の発明であるニューラルネットワーク用処理方法をコンピュータに実行させるためのプログラムである。
【0044】
これにより、第1の発明と同様の効果を奏するニューラルネットワーク用処理方法をコンピュータに実行させるためのプログラムを実現することができる。
【発明の効果】
【0045】
本発明によれば、再学習を必要とせず、組み込み機器やモバイル機器等の低スペックのデバイス(例えば、エッジ端末)において、高性能なコンパクト化したモデルを搭載することができるニューラルネットワーク用プロセッサ、ニューラルネットワーク用処理方法、および、プログラムを実現することができる。
【図面の簡単な説明】
【0046】
図1】第1実施形態に係るニューラルネットワーク用プロセッサ100の概略構成図。
図2】第1実施形態に係る内積処理部3の概略構成図。
図3】第1実施形態に係る内積処理部3の概略構成図。
図4】CNNの重み演算処理を、マトリックスで表現した図(上図)と、二値化ニューラルネットワークの重み演算処理を、マトリックスで表現した図(下図)とを含む図。
図5】CNNの重み演算処理を、マトリックスで表現した図(上図)と、多値化ニューラルネットワークの重み演算処理を、マトリックスで表現した図(下図)とを含む図。
図6】スケーリング係数ベクトルv_c(=[c1,c2,・・・,c6])、および、二値基底行列Mの設定処理を説明するための図。
図7】スケーリング係数ベクトルv_c(=[c1,c2,c3])、および、N値基底行列M(N)(N=4)の設定処理を説明するための図。
図8】符号テーブル(4値基底行列用)(一例)を示す図。
図9】ニューラルネットワーク用プロセッサ100の内積演算処理(行列演算処理)を説明するための図。
図10】1ビットデータフォーマット(1つの符号語に1ビットを割り当てる場合)を模式的に示した図。
図11】2ビットデータフォーマット(1つの符号語に2ビットを割り当てる場合)を模式的に示した図。
図12】ニューラルネットワーク用プロセッサ100の内積演算処理(行列演算処理)を説明するための図。
図13】符号テーブル(一例)を示す図。
図14】CPUバス構成を示す図。
【発明を実施するための形態】
【0047】
[第1実施形態]
第1実施形態について、図面を参照しながら、以下、説明する。
【0048】
<1.1:ニューラルネットワーク用プロセッサの構成>
図1は、第1実施形態に係るニューラルネットワーク用プロセッサ100の概略構成図である。
【0049】
図2図3は、第1実施形態に係る内積処理部3の概略構成図である。
【0050】
ニューラルネットワーク用プロセッサ100は、図1に示すように、第1インターフェース部IF1と、制御部CPU1と、演算処理部PL1と、バスB1とを備える。第1インターフェース部IF1と、制御部CPU1と、演算処理部PL1とは、図1に示すように、バスB1により接続されており、必要なデータ、コマンド等を、バスB1を介して、入出力することができる。なお、上記機能部の一部または全部は、バス接続ではなく、必要に応じて、直接接続されるものであってもよい。
【0051】
第1インターフェース部IF1は、外部から処理対象となるデータDinを入力し、ニューラルネットワーク用プロセッサによる処理結果を含むデータをデータDoutとして外部に出力する。
【0052】
制御部CPU1は、ニューラルネットワーク用プロセッサ100の全体制御、各機能部の制御およびニューラルネットワーク用処理に必要な処理を行う。制御部CPU1は、CPU(Central Processing Unit)やCPUコアにより実現される。
【0053】
制御部CPU1は、例えば、大規模システムでの学習済みモデルのパラメータ(重み付けデータ)を近似するスケーリング係数ベクトルv_cおよび多値基底行列Mを取得(設定)し、取得(設定)したスケーリング係数ベクトルv_cおよび多値基底行列Mを、それぞれ、内部RAM R1の領域AR(CV)、および領域AR(MMtx)に記憶保持させる。
【0054】
なお、上記スケーリング係数ベクトルv_cおよび多値基底行列Mは、第1インターフェース部IF1を介して、外部から、ニューラルネットワーク用プロセッサ100に入力されるものであってもよい。
【0055】
演算処理部PL1は、図1に示すように、DMA制御部1と、量子化処理部2と、内部RAM R1と、内積処理部3と、を備える。
【0056】
DMA制御部1は、DMA転送処理(DMA:Direct Memory Access)を行う。
【0057】
量子化処理部2は、DCNN(Deep Convolution Neural Network)の畳み込み層の入力である特徴マップのデータに対して、量子化処理を行う。また、量子化処理部2は、DCNNの全結合層の入力データに対して、量子化処理を行う。
【0058】
内部RAM R1は、ニューラルネットワーク用処理を実行するために必要なデータを記憶保持するためのRAM(Random Access Memory)である。
【0059】
内積処理部3は、図2に示すように、第2インターフェース部IF2と、モード設定部31と、ループ回数取得部32と、整数処理部33と、実数処理部34とを備える。
【0060】
第2インターフェース部IF2は、内部RAM R1とのインターフェースである。第2インターフェース部IF2は、内部RAM R1から所定のデータを読み出し、および/または、内部RAM R1に所定のデータを書き込む。また、第2インターフェース部IF2は、内部RAM R1から読み出したデータから、所定のデータを取得し、取得したデータを、モード設定部31、ループ回数取得部32、整数処理部33、および/または、実数処理部34に出力する。また、第2インターフェース部IF2は、実数処理部34から出力されるデータDoを入力し、当該データDoを、例えば、内部RAM R1の所定の領域に書き込む。
【0061】
モード設定部31は、第2インターフェース部IF2から出力されるデータであって、モード設定のための情報を含むデータInfo1.Mtx(N)を入力する。そして、モード設定部31は、データInfo1.Mtx(N)に基づいて、モード信号Modeを生成し、生成したモード信号Modeを整数処理部33に出力する。
【0062】
ループ回数取得部32は、第2インターフェース部IF2から出力されるデータであって、(1)整数処理部33で実行される整数積算処理におけるループ回数を決定するための情報と、(2)実数処理部34で実行される実数積算処理におけるループ回数を決定するための情報と、を含むデータInfo2.Mtx(N)を入力する。そして、ループ回数取得部32は、データInfo2.Mtx(N)に基づいて、(1)整数処理部33で実行される整数積算処理におけるループ回数を制御するための制御信号Ctl_loop1と、(2)実数処理部34で実行される実数積算処理におけるループ回数を制御するための制御信号Ctl_loop2とを生成する。そして、ループ回数取得部32は、制御信号Ctl_loop1を整数処理部33に出力し、制御信号Ctl_loop2を実数処理部34に出力する。
【0063】
整数処理部33は、図2に示すように、整数演算部33Aと、整数積算部33Bとを備える。
【0064】
整数演算部33Aは、図3に示すように、符号テーブル保持部331と、デコーダ332と、整数乗算器333と、積算器334と、を備える。整数演算部33Aは、モード設定部31から出力されるモード信号Modeを入力し、モード信号Modeに従い、処理モードを設定する。そして、設定した処理モードに従い、デコード処理、整数乗算処理、積算処理を実行する。
【0065】
符号テーブル保持部331は、第2インターフェース部IF2から出力される符号テーブルのデータを入力し、当該符号テーブルのデータを保持する。
【0066】
デコーダ332は、第2インターフェース部IF2から出力される多値行列データD_Mtx(N)を入力する。デコーダ332は、符号テーブル保持部331で保持されている符号テーブルを参照して、多値行列データD_Mtx(N)に対してデコード処理を実行し、デコード処理後のデータをデータD1として取得する。そして、デコーダ332は、データD1を整数乗算器333に出力する。
【0067】
整数乗算器333は、第2インターフェース部IF2から出力される量子化処理後のデータD_Qinと、デコーダ332から出力されるデータD1とを入力する。整数乗算器333は、データD_QinおよびデータD1に対して整数乗算処理を行い、整数乗算処理後のデータをデータD2として取得する。そして、整数乗算器333は、取得したデータD2を積算器334に出力する。
【0068】
積算器334は、整数乗算器333から出力されるデータD2を入力し、データD2に対して積算処理を実行し、積算処理後のデータをデータD3として、整数積算部33Bに出力する。
【0069】
整数積算部33Bは、図3に示すように、遅延器335と積算器336とを備える。整数積算部33Bは、ループ回数取得部32から出力される制御信号Ctl_loop1を入力する。整数積算部33Bでは、制御信号Ctl_loop1で指示されるループ回数分の積算処理(ループ処理)が実行される。
【0070】
遅延器335は、積算器336の出力データD4(これを現時刻tのデータD4(t)と表記する)を入力とし、入力されたデータD4(t)を保持し、積算器336が次の演算処理を実行するとき(このタイミングを時刻t+1とする)に、保持しているデータを積算器336に出力する。つまり、遅延器335は、時刻tにおいて、積算器336の1つ前の出力データ(これをデータD4(t-1)と表記する)を積算器336の入力へと出力する。なお、データD4(t-1)の初期値は「0」である。
【0071】
積算器336は、整数演算部33Aから出力されるデータD3と、遅延器335から出力されるデータD4(t-1)とを入力する。そして、積算器336は、データD3およびデータD4(t-1)に対して積算処理を実行し、積算処理後のデータをデータDIo(=D4(t))として、実数処理部34に出力する。
【0072】
実数処理部34は、図2図3に示すように、実数乗算部34Aと、実数積算部34Bとを備える。
【0073】
実数乗算部34Aは、第2インターフェース部IF2から出力されるスケーリング係数ベクトルデータD_cvと、整数処理部33から出力されるデータDIoとを入力する。実数乗算部34Aは、スケーリング係数ベクトルデータD_cvおよびデータDIoに対して、実数乗算処理を実行し、実数乗算処理後のデータをデータD5として、実数積算部34Bに出力する。
【0074】
実数積算部34Bは、図3に示すように、遅延器341と実数積算器342とを備える。実数積算部34Bは、ループ回数取得部32から出力される制御信号Ctl_loop2を入力する。実数積算部34Bでは、制御信号Ctl_loop2で指示されるループ回数分の積算処理(ループ処理)が実行される。
【0075】
遅延器341は、実数積算器342の出力データDo(これを現時刻tのデータDo(t)と表記する)を入力とし、入力されたデータDo(t)を保持し、実数積算器342が次の演算処理を実行するとき(このタイミングを時刻t+1とする)に、保持しているデータを実数積算器342に出力する。つまり、遅延器341は、時刻tにおいて、実数積算器342の1つ前の出力データ(これをデータDo(t-1)と表記する)を実数積算器342の入力へと出力する。なお、データDo(t-1)の初期値は「0」である。
【0076】
実数積算器342は、実数乗算部34Aから出力されるデータD5と、遅延器341から出力されるデータDo(t-1)とを入力する。そして、実数積算器342は、データD5およびデータDo(t-1)に対して積算処理を実行し、積算処理後のデータをデータDo(=Do(t))として、第2インターフェース部IF2に出力する。
【0077】
<1.2:ニューラルネットワーク用プロセッサの動作>
以上のように構成されたニューラルネットワーク用プロセッサ100の動作について、以下、説明する。
【0078】
一般に、CNNでは、入力層と、畳み込み層(コンボリューション層)と、全結合層とを含む。例えば、ニューラルネットワーク用プロセッサ100の第1インターフェース部IF1に、入力データDinとして、画像データが入力され、CNNによる画像認識処理が実行され、画像認識処理結果が出力データDoutとして外部に出力される。
【0079】
CNNでは、畳み込み層の処理、あるいは、全結合層の処理において、入力データに対して重み演算処理が実行され、当該処理結果に対して活性化関数(例えば、ランプ関数(ReLU:Rectified Linear Unit)、シグモイド関数、Softmax関数等)により処理が実行されることで、畳み込み層あるいは全結合層の出力が得られる。
【0080】
また、下記先行技術文献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):
ijn=c ijij+min(x)Offset
ijn:n番目の特徴マップの出力(特徴マップの座標(i,j)の出力値)
:n番目の特徴マップのスケーリング係数ベクトルcの転置行列
:n番目の特徴マップの二値基底行列の転置行列
ijij:二値特徴マップ(量子化後の二値特徴マップ)
min(x):n番目の特徴マップの各要素の値のうちの最小値
Offset:オフセット調整用データ
また、M ∈{-1,1}とBijij∈{0,1}とは二値であるため、下記(数式2)を用いて論理演算とビットカウントで計算することができる。
(数式2):
ijij
=2×BITCNT(AND(M ,Bijij))-Norm(z)
z=Bijij
Norm(z):zのノルムを取得する関数
BITCNT(x):バイナリコードxにおいて、「1」であるビット数をカウントする関数
本実施形態のニューラルネットワーク用プロセッサ100では、特徴マップの基底行列の要素のとりうる値を多値(N値、N:2以上の自然数)とする。つまり、ニューラルネットワーク用プロセッサ100では、特徴マップの基底行列として、多値(N値)基底行列を用いる。これにより、ニューラルネットワーク用プロセッサ100では、特徴マップのスケーリング係数ベクトルの要素数を少なくした場合であっても、CNNの処理の精度を確保することができる。
【0081】
多値ニューラルネットワークの識別計算の基本式を、下記(数式3)のように導出することができる。
(数式3):
ijn=c (N)Tijij+min(x)offset
ijn:n番目の特徴マップの出力(特徴マップの座標(i,j)の出力値)
:n番目の特徴マップのスケーリング係数ベクトルcの転置行列
(N)T:n番目の特徴マップの多値(N値)基底行列の転置行列
ijij:二値特徴マップ(量子化後の二値特徴マップ)
min(x):n番目の特徴マップの各要素の値のうちの最小値
Offset:オフセット調整用データ
ここで、本実施形態のニューラルネットワーク用プロセッサ100において、BNNを用いた場合と同程度の計算精度(CNNの処理精度)を実現できることについて、説明する。
【0082】
なお、説明便宜のために、N=4の場合(4値基底行列を用いる場合)について、説明する。
【0083】
図4は、CNNの重み演算処理を、マトリックスで表現した図(上図)と、二値化ニューラルネットワークの重み演算処理を、マトリックスで表現した図(下図)とを含む図である。
【0084】
図5は、CNNの重み演算処理を、マトリックスで表現した図(上図)と、多値化ニューラルネットワークの重み演算処理を、マトリックスで表現した図(下図)とを含む図である。
【0085】
図4の上図に示すように、CNNの重み演算処理では、各要素wijが実数である行列W(n×mの行列)と、入力データ(ベクトルv_x(1×mの行列))との行列の積を求めることで、出力データy(1×mの行列)が取得される。
【0086】
一方、二値化ニューラルネットワークの重み演算処理では、図4の下図に示すように、(1)各要素が実数であるスケーリング係数ベクトルv_c(=[c,c,・・・,c])(ここでは、一例として、スケーリング係数ベクトルの次元数を6次元とする)と、(2)各要素が「-1」または「1」である二値基底行列Mと、(3)入力データv_x(=[x,x,・・・,x])との行列の積を求めることで、出力データyが取得される。そして、上記と同様の処理を、y~yに対して行うことで、出力データy(1×mの行列)が取得される。
【0087】
多値化ニューラルネットワークの重み演算処理では、図5の下図に示すように、(1)各要素が実数であるスケーリング係数ベクトルv_c(=[c,c,c])(ここでは、一例として、スケーリング係数ベクトルの次元数を3次元とする)と、(2)各要素がN値をとる多値基底行列(N値基底行列)M(N)と、(3)入力データv_x(=[x,x,・・・,x])との行列の積を求めることで、出力データyが取得される。そして、上記と同様の処理を、y~yに対して行うことで、出力データy(1×mの行列)が取得される。
【0088】
ここで、一例として、CNNの重み行列、つまり、各要素wijが実数である行列W(n×mの行列)の第1行目の要素を要素とするベクトルが、
[w11,w12,w13,w14,w15,w16,w17,w18
=[44.1,-19.0,-25.2,14.0,26.8,-25.2,44.1,-25.1]
図6図7において、「目標値」として示しているベクトル)
である場合における(1)スケーリング係数ベクトルと二値基底行列とを用いた場合に取得される近似ベクトル、および、(2)スケーリング係数ベクトルとN値基底行列(N=4)とを用いた場合に取得される近似ベクトルについて、説明する。
【0089】
図6は、スケーリング係数ベクトルv_c(=[c,c,・・・,c])、および、二値基底行列Mの設定処理を説明するための図である。なお、説明便宜のため、m=8としている。
【0090】
例えば、大規模システムにおいて、学習が実行され、重み行列Wが取得された場合において、図6に示すように、重み行列Wの第1行目のデータが
vec1_target=
[w11,w12,w13,w14,w15,w16,w17,w18
=[44.1,-19.0,-25.2,14.0,26.8,-25.2,44.1,-25.1]
図6において、「目標値」として示しているベクトル)
(上記ベクトルを、目標ベクトルvec1_targetとする)
である場合、図6の下段に示す値に、スケーリング係数ベクトル(6次元ベクトル)および二値基底行列を設定すれば、大規模システムでの学習により取得された重み行列Wの第1行目のデータを再現(近似)することができる。
【0091】
つまり、この場合、重み行列Wの第1行目のデータ(これをベクトルvec1_cv6_Mtx(2)とする)は、
vec1_cv6_Mtx(2)
[w’11,w’12,w’13,w’14,w’15,w’16,w’17,w’18
=[44.0,-19.8,-25.6,14.6,26.4,-25.6,44.0,-25.6]
と近似することができる。そして、近似精度として、重み行列Wの第1行目のデータの目標データである目標ベクトルvec1_targetと、スケーリング係数ベクトル(6次元ベクトル)および二値基底行列により取得された重み行列Wの第1行目のデータのデータであるベクトルvec1_cv6_Mtx(2)との差分ベクトルのノルムは、以下のようになる。
Norm(vec1_target―vec1_cv6_Mtx(2)
≒1.323
Norm(vec_x):ベクトルvec_xのノルム(ユークリッド距離)を取得する関数
図7は、スケーリング係数ベクトルv_c(=[c,c,c])、および、N値基底行列M(N)(N=4)の設定処理を説明するための図である。なお、説明便宜のため、m=8としている。
【0092】
例えば、大規模システムにおいて、学習が実行され、重み行列Wが取得された場合において、図7に示すように、重み行列Wの第1行目のデータが
vec1_target=
[w11,w12,w13,w14,w15,w16,w17,w18
=[44.1,-19.0,-25.2,14.0,26.8,-25.2,44.1,-25.1]
図7において、「目標値」として示しているベクトル(目標ベクトルvec1_target))
である場合、図7の下段に示す値に、スケーリング係数ベクトル(3次元ベクトル)およびN値基底行列(N=4)を設定すれば、大規模システムでの学習により取得された重み行列Wの第1行目のデータを再現(近似)することができる。
【0093】
つまり、この場合、重み行列Wの第1行目のデータ(これをベクトルvec1_Mtx(4)とする)は、
vec1_cv3_Mtx(4)
[w’’11,w’’12,w’’13,w’’14,w’’15,w’’16,w’’17,w’’18
=[44.2,-18.2,-25.0,13.3,27.0,-25.0,44.2,-25.0]
と近似することができる。そして、近似精度として、重み行列Wの第1行目のデータの目標データである目標ベクトルvec1_targetと、スケーリング係数ベクトル(3次元ベクトル)およびN値基底行列(N=4)により取得された重み行列Wの第1行目のデータのデータであるベクトルvec1_cv3_Mtx(4)との差分ベクトルのノルムは、以下のようになる。
Norm(vec1_target―vec1_cv3_Mtx(4)
≒1.131
Norm(vec_x):ベクトルvec_xのノルム(ユークリッド距離)を取得する関数
上記から分かるように、
(1)BNNを用いた場合、すなわち、スケーリング係数ベクトル(6次元ベクトル)およびN値基底行列(N=4)を用いて取得した重み行列Wの第1行目のデータ(ベクトルvec1_Mtx(2))と、目標ベクトルとの差(両ベクトルの差分ベクトルのノルム≒1.323)と、
(2)多値基底行列(ここでは、4値基底行列)によるベクトル分解を行うニューラルネットワークを用いた場合、すなわち、スケーリング係数ベクトル(3次元ベクトル)およびN値基底行列(N=4)を用いて取得した重み行列Wの第1行目のデータ(ベクトルvec1_Mtx(4))と、目標ベクトルとの差(両ベクトルの差分ベクトルのノルム≒1.131)と、
は同程度である。
【0094】
つまり、本実施形態のニューラルネットワーク用プロセッサ100において、BNNを用いた場合と同程度の計算精度(CNNの処理精度)を実現できる。すなわち、ニューラルネットワーク用プロセッサ100では、特徴マップの基底行列として、多値(N値)基底行列を用いて、特徴マップのスケーリング係数ベクトルの要素数を少なくした場合であっても、CNNの処理の精度を確保することができる。
【0095】
このような処理を実行するニューラルネットワーク用プロセッサ100の動作について、以下、図面を参照しながら説明する。
【0096】
(1.2.1:畳み込み層の処理)
まず、畳み込み層の処理について、説明する。
【0097】
ニューラルネットワーク用プロセッサ100の量子化処理部2は、第l層(l:自然数)におけるm番目(m:自然数)の特徴マップz ijmにおける最大値-最小値間の量子化幅Δdを、
Δd={max(z ijm)-min(z ijm)}/(2-1)
max(x):xの最大値を取得する関数
min(x):xの最小値を取得する関数
Q:量子化ビット数
として取得する。
【0098】
そして、量子化処理部2は、特徴マップの最小値が0となるように値をシフトさせる。つまり、量子化処理部2は、
ijm’={z ijm-min(z ijm)}/Q
に相当する処理を実行し、さらに、上記数式により取得された値を四捨五入して整数値に丸め量子化する。さらに、量子化処理部2は、丸め量子化により取得された値に対して、二値化処理をすることで、バイナリコードz ijm (b)∈{0,1}を取得する。
【0099】
上記のようにして取得されたバイナリコードz ijm (b)∈{0,1}(量子化処理後の特徴マップBijij)は、内部RAMの所定の領域(この領域を領域BinInTという)に記憶保持される。
【0100】
(1.2.2:内積処理(畳み込み層の処理))
次に、内積処理について、説明する。
【0101】
内積処理部3の第2インターフェース部IF2は、内部RAM R1に所定の領域に記憶保持されているモード設定用のデータ(情報)をデータInfo1.Mtx(N)として読み出し、読み出したデータInfo1.Mtx(N)をモード設定部31に出力する。
【0102】
モード設定部31は、第2インターフェース部IF2から出力されるデータInfo1.Mtx(N)に基づいて、モード信号Modeを生成し、生成したモード信号Modeを整数処理部33に出力する。
【0103】
データInfo1.Mtx(N)は、ニューラルネットワーク用プロセッサ100において用いられるN値基底行列の各要素の値を表現するためのビット数の情報を含んでいる。例えば、ニューラルネットワーク用プロセッサ100において用いられるN値基底行列の各要素の値が4値(N=4)である場合、N値基底行列の各要素の値を表現するためのビット数は、「2」(すなわち、2ビット)である。この場合、モード設定部31は、整数演算部33Aに対して、2ビットモード(N値基底行列の各要素の値を表現するためのビット数が「2」であることを示すモード)を示すモード信号Modeを整数処理部33に出力する。
【0104】
整数演算部33Aは、モード信号Modeに従い、上記の場合、2ビットモードで整数演算処理を実行する。
【0105】
なお、ニューラルネットワーク用プロセッサ100で用いられるモードは、上記の2ビットモードの他に、例えば、1ビットモード(2値基底行列を用いるモード)、4ビットモード(例えば、15値基底行列、あるいは、16値基底行列を用いるモード)等であってもよい。
【0106】
第2インターフェース部IF2は、内部RAM R1に所定の領域に記憶保持されている整数処理部33でのループ処理の回数、および、実数処理部34でのループ処理の回数を決定するためのデータ(情報)をデータInfo2.Mtx(N)として読み出し、読み出したデータInfo2.Mtx(N)をループ回数取得部32に出力する。
【0107】
ループ回数取得部32は、データInfo2.Mtx(N)に基づいて、(1)整数処理部33で実行される整数積算処理におけるループ回数を制御するための制御信号Ctl_loop1と、(2)実数処理部34で実行される実数積算処理におけるループ回数を制御するための制御信号Ctl_loop2とを生成する。そして、ループ回数取得部32は、制御信号Ctl_loop1を整数処理部33に出力し、制御信号Ctl_loop2を実数処理部34に出力する。
【0108】
また、内積処理部3の第2インターフェース部IF2は、内部RAM R1に所定の領域に記憶保持されている符号テーブルのデータをデータD_tblとして読み出し、読み出したデータD_tblを符号テーブル保持部331に出力する。
【0109】
データD_tblは、符号テーブルを特定するためのデータである。例えば、ニューラルネットワーク用プロセッサ100において、4値基底行列を用いる場合であって、当該4値が{-2,-1,1,2}である場合、データD_tblは、例えば、図8に示すように、2ビットのビットパターンと値(4つの整数値(4値))との対応関係を特定するデータである。なお、図8に示すのは、一例であり、N値基底行列用のビットパターンと符号語(整数値)との対応関係は、他のもの(任意のもの)であってもよい。
【0110】
以下では、説明便宜のために、一例として、ニューラルネットワーク用プロセッサ100において、以下の条件の場合について、説明する。
(1)設定モードは、2ビットモードである。
(2)N=4、すなわち、4値基底行列を用いる場合であって、当該4値が{-2,-1,1,2}である。
(3)内部RAM R1と内積処理部3の第2インターフェース部IF2とのバス幅は、8ビットである(つまり、1度にデータ転送できるビット数は、8ビットである)。
【0111】
また、説明便宜のため、ニューラルネットワーク用プロセッサ100において、図9の計算を実行する場合(一例)について、以下、説明する。なお、図9の場合、整数syロイブ33で実行される整数積算処理におけるループ回数と、実数処理部34で実行される実数積算処理におけるループ回数は、以下のようになる。
(1)整数積算処理におけるループ回数(制御信号Ctl_loop1)
N値基底行列(N=4)の列数が8であり、量子化処理後のデータD_Qin(バイナリコードz ijm (b))(図9において、vec_Bijと表記)の行数が8であるので、モードが2ビットモードである場合、整数処理部33で実行される整数積算処理におけるループ回数は「1」(=(N値基底行列(N=4)の列数)×(1つの符号語を表すために必要なビット数)/(バス幅(一度に転送できるビット数))=8×2/8)-1)である。
【0112】
したがって、この場合、ループ回数取得部32は、整数積算処理におけるループ回数が「1」とするための制御信号Ctl_loop1を生成し、当該制御信号Ctl_loop1を整数処理部33に出力する。
(2)実数積算処理におけるループ回数(制御信号Ctl_loop2)
スケーリング係数ベクトルの次元数が「3」であるので、実数処理部34で実行される実数積算処理におけるループ回数は、「2」(=(スケーリング係数ベクトルの次元数)-1)である。
【0113】
したがって、この場合、ループ回数取得部32は、実数積算処理におけるループ回数が「2」とするための制御信号Ctl_loop2を生成し、当該制御信号Ctl_loop2を実数処理部34に出力する。
【0114】
≪1回目の整数積算処理≫
まず、整数処理部33では、1回目の整数積算処理が実行される。
【0115】
符号テーブル保持部331は、第2インターフェース部IF2から出力される符号テーブルのデータを入力し、当該符号テーブルのデータを保持する。具体的には、符号テーブル保持部331は、図8に示す符号テーブルのデータを保持する。
【0116】
また、第2インターフェース部IF2は、内部RAM R1に所定の領域に記憶保持されている多値行列データD_Mtx(N)を読み出し、読み出したデータD_Mtx(N)をデコーダ332に出力する。なお、ここでは、N=4であるので、多値行列データD_Mtx(N)は、4値行列データD_Mtx(4)である。そして、図9の場合、1回目のデータ転送において、8ビット分のデータ[00 11 11 01](2ビットデータ4個)が、内部RAM R1から第2インターフェース部IF2へと転送される。つまり、図9に示した4値基底行列の第1行目の第1列から第4列までの要素を要素とするベクトル(1行4列の行列)vec_r1_upper_Mtx(4)に相当する8ビット分のデータが、内部RAM R1から第2インターフェース部IF2へと転送される。
【0117】
デコーダ332は、符号テーブル保持部331で保持されている符号テーブルを参照して、多値行列データD_Mtx(N)(ここでは、4値行列データD_Mtx(4))に対してデコード処理を実行し、デコード処理後のデータをデータD1として取得する。ここでは、モードが2ビットモードに設定されており、符号テーブルが図8に示すものであるので、デコーダ332は、4値行列データD_Mtx(4)の2ビットのパターンを、図8の符号テーブルに基づいて、整数値にデコードする。デコーダ332は、図8の符号テーブルに基づいて、1回目のデータ転送により取得された8ビット分のデータ[00 11 11 01](2ビットデータ4個)を、[2 -1 -1 1](4個の整数値)にデコードする。
【0118】
そして、デコーダ332は、デコードした整数値のデータをデータD1として、整数乗算器333に出力する。
【0119】
また、第2インターフェース部IF2は、内部RAM R1に領域BinInTに記憶保持されている量子化処理後のデータD_Qin(バイナリコードz ijm (b))を読み出し、読み出したデータD_Qinを整数乗算器333に出力する。なお、ここでは、図9に示すように、データD_Qinが1行8列の行列であり、[1 0 1 0 1 0 1 0](転置行列として表記)であるものとする。このデータD_Qinは、8ビット分のデータであるので、内部RAM R1から第2インターフェース部IF2への1回の転送により、データ転送することができる。
【0120】
第2インターフェース部IF2は、デコーダ332で取得されたデータD1(=[2 -1 -1 1](4個の整数値))と整数乗算処理を行うのに必要な分のデータ、すなわち、この場合、データD_Qinの4ビット分のデータを整数乗算器333に出力する。具体的には、第2インターフェース部IF2は、データD_Qinの上位4ビット分のデータ(これをデータvec_upper_Bijという。図9を参照。)を整数乗算器333に出力する。
【0121】
整数乗算器333は、データD_Qin(=[1 0 1 0 1 0 1 0](転置行列として表記))の上位4ビット分のデータvec_upper_Bij(=[1 0 1 0](転置行列として表記))およびデータD1(=[2 -1 -1 1](4個の整数値))に対して整数乗算処理を行う。具体的には、整数乗算器333は、以下の数式に相当する処理を実行して、整数乗算処理結果をデータD2として取得する。なお、k回目(k:自然数)の整数乗算処理結果のデータをデータD2(k)と表記する。
1回目:D2(1)=1×2=2
2回目:D2(2)=0×(-1)=0
3回目:D2(3)=1×(-1)=-1
4回目:D2(4)=0×1=0
整数乗算器333は、上記により取得したデータD2(k)を積算器336に出力する。
【0122】
積算器334は、整数乗算器333から出力されるデータD2(D2(k))に対して積算処理を実行し、積算処理後のデータをデータD3として取得する。上記の場合、積算器334は、
D3=D2(1)+D2(2)+D2(3)+D2(4)=1
に相当する処理(積算処理)により、データD3(上記の場合、D3=1)を取得する。
【0123】
そして、積算器334は、取得したデータD3を整数積算部33Bに出力する。
【0124】
≪2回目の整数積算処理≫
次に、整数処理部33では、2回目の整数積算処理が実行される。
【0125】
第2インターフェース部IF2は、内部RAM R1に所定の領域に記憶保持されている多値行列データD_Mtx(N)(N=4)を読み出し、読み出したデータD_Mtx(N)をデコーダ332に出力する。2回目のデータ転送において、8ビット分のデータ[01 11 00 11](2ビットデータ4個)が、内部RAM R1から第2インターフェース部IF2へと転送される。つまり、図9に示した4値基底行列の第1行目の第5列から第8列までの要素を要素とするベクトル(1行4列の行列)vec_r1_lower_Mtx(4)に相当する8ビット分のデータが、内部RAM R1から第2インターフェース部IF2へと転送される。
【0126】
デコーダ332は、符号テーブル保持部331で保持されている符号テーブルを参照して、多値行列データD_Mtx(N)(ここでは、4値行列データD_Mtx(4))に対してデコード処理を実行し、デコード処理後のデータをデータD1として取得する。ここでは、モードが2ビットモードに設定されており、符号テーブルが図8に示すものであるので、デコーダ332は、4値行列データD_Mtx(4)の2ビットのパターンを、図8の符号テーブルに基づいて、整数値にデコードする。デコーダ332は、図8の符号テーブルに基づいて、2回目のデータ転送により取得された8ビット分のデータ[01 11 00 11](2ビットデータ4個)を、[1 -1 2 -1](4個の整数値)にデコードする。
【0127】
そして、デコーダ332は、デコードした整数値のデータをデータD1として、整数乗算器333に出力する。
【0128】
また、第2インターフェース部IF2は、1回目の整数積算処理において、内部RAM R1に領域BinInTから読み出した量子化処理後のデータD_Qin(バイナリコードz ijm (b))のうち、下位4ビット分のデータ(これをデータvec_lower_Bijという。図9を参照。)を整数乗算器333に出力する。
【0129】
整数乗算器333は、データD_Qin(=[1 0 1 0 1 0 1 0](転置行列として表記))の下位4ビット分のデータvec_upper_Bij(=[1 0 1 0](転置行列として表記))およびデータD1(=[1 -1 2 -1](4個の整数値))に対して整数乗算処理を行う。具体的には、整数乗算器333は、以下の数式に相当する処理を実行して、整数乗算処理結果をデータD2として取得する。なお、k回目(k:自然数)の整数乗算処理結果のデータをデータD2(k)と表記する。
1回目:D2(1)=1×1=1
2回目:D2(2)=0×(-1)=0
3回目:D2(3)=1×2=2
4回目:D2(4)=0×(-1)=0
整数乗算器333は、上記により取得したデータD2(k)を積算器336に出力する。
【0130】
積算器334は、整数乗算器333から出力されるデータD2(D2(k))に対して積算処理を実行し、積算処理後のデータをデータD3として取得する。上記の場合、積算器334は、
D3=D2(1)+D2(2)+D2(3)+D2(4)=3
に相当する処理(積算処理)により、データD3(上記の場合、D3=1)を取得する。
【0131】
そして、積算器334は、取得したデータD3を整数積算部33Bに出力する。
【0132】
整数積算部33Bの積算器336は、整数演算部33Aから出力されるデータD3と、遅延器335の出力データD4(t-1)(1つ前の積算器336の積算処理結果データ)とを入力する。そして、積算器336は、データD3およびデータD4(t-1)に対して積算処理を実行する。つまり、整数積算部33Bの積算器336は、1回目の整数処理の処理結果をD4(t-1)とし、2回目の整数処理の処理結果をD3(t)として、
DIo=D4(t-1)+D3(t)=1+3=4
に相当する処理を実行することで、積算処理後のデータDIoを取得する。
【0133】
≪1回目の実数処理≫
まず、実数処理部34では、1回目の実数処理が実行される。
【0134】
第2インターフェース部IF2は、内部RAM R1から所定の領域から、スケーリング係数ベクトルデータD_cvを読み出す。図9の場合、第2インターフェース部IF2は、3次元のスケーリング係数ベクトルv_c(=[c]=[26 8.8 4.9])の最初の要素cのデータを、内部RAM R1から所定の領域から読み出し、読み出したデータをスケーリング係数ベクトルデータD_cv(D_cv(1))(=26)として、実数処理部34に出力する。なお、k回目(k:自然数)の実数処理で読み出したスケーリング係数ベクトルデータD_cvをD_cv(k)と表記する。
【0135】
実数処理部34の実数乗算部34Aは、第2インターフェース部IF2から出力されるスケーリング係数ベクトルデータD_cv(1)(=26)と、整数処理部33から出力されるデータDIo(=4)とを入力する。実数乗算部34Aは、スケーリング係数ベクトルデータD_cvおよびデータDIoに対して、実数乗算処理を実行する。すなわち、実数乗算部34Aは、
D5=D_cv(1)×DIo=26×4=104
に相当する処理を実行することで、実数乗算処理後のデータD5を取得する。
【0136】
そして、実数乗算部34Aは、データD5を実数積算部34Bに出力する。
【0137】
≪2回目の実数処理≫
次に、実数処理部34では、2回目の実数処理が実行される。
【0138】
第2インターフェース部IF2は、内部RAM R1から所定の領域から、スケーリング係数ベクトルデータD_cvを読み出す。図9の場合、第2インターフェース部IF2は、3次元のスケーリング係数ベクトルv_c(=[c]=[26 8.8 4.9])の2番目の要素cのデータを、内部RAM R1から所定の領域から読み出し、読み出したデータをスケーリング係数ベクトルデータD_cv(D_cv(2))(=8.8)として、実数処理部34に出力する。
【0139】
整数処理部33では、上記説明したのと同様の処理により、4値基底行列Mtx(4)の第2行目と、量子化処理後のデータD_Qin(バイナリコードz ijm (b))(図9において、vec_Bijと表記)との整数乗算処理(内積演算処理)が実行される。つまり、整数処理部33は、上記説明したのと同様の処理により、
DIo=vec_r2_upper_Mtx(4)・vec_upper_Bij
+vec_r2_lower_Mtx(4)・vec_lower_Bij
=-6
に相当する処理を実行することで、データDIoを取得する。
【0140】
なお、データvec_r2_upper_Mtx(4)は、4値基底行列Mtx(4)の第2行目の第1列~第4列の要素を要素とするベクトル(1行4列の行列)であり、図9の場合、
vec_r2_upper_Mtx(4)=[-2 2 -1 -2]
である。
【0141】
また、データvec_r2_lower_Mtx(4)は、4値基底行列Mtx(4)の第2行目の第5列~第8列の要素を要素とするベクトル(1行4列の行列)であり、図9の場合、
vec_r2_lower_Mtx(4)=[-1 -1 -2 -1]
である。
【0142】
上記処理により取得されたデータDIo(=-6)は、整数処理部33から、実数処理部34に出力される。
【0143】
実数処理部34の実数乗算部34Aは、第2インターフェース部IF2から出力されるスケーリング係数ベクトルデータD_cv(2)(=8.8)と、整数処理部33から出力されるデータDIo(=-6)とを入力する。実数乗算部34Aは、スケーリング係数ベクトルデータD_cvおよびデータDIoに対して、実数乗算処理を実行する。すなわち、実数乗算部34Aは、
D5=D_cv(2)×DIo=8.8×(-6)=-52.8
に相当する処理を実行することで、実数乗算処理後のデータD5を取得する。
【0144】
そして、実数乗算部34Aは、データD5を実数積算部34Bに出力する。
【0145】
実数積算部34Bの実数積算器342は、実数乗算部34Aから出力されるデータD5と、遅延器341から出力されるデータDo(t-1)(1つ前の実数積算器の処理結果データ)とを入力する。そして、実数積算器342は、データD5およびデータDo(t-1)に対して積算処理を実行する。つまり、実数積算部34Bの実数積算器342は、1回目の実数処理の処理結果をDo(t-1)とし、2回目の実数処理の処理結果をDo(t)として、
Do(t)=Do(t-1)+D5(t)=104+(-52.8)=51.2
に相当する処理を実行することで、実数積算処理後のデータDo(=Do(t))を取得する。
【0146】
≪3回目の実数処理≫
次に、実数処理部34では、3回目の実数処理が実行される。
【0147】
第2インターフェース部IF2は、内部RAM R1から所定の領域から、スケーリング係数ベクトルデータD_cvを読み出す。図9の場合、第2インターフェース部IF2は、3次元のスケーリング係数ベクトルv_c(=[c]=[26 8.8 4.9])の3番目の要素cのデータを、内部RAM R1から所定の領域から読み出し、読み出したデータをスケーリング係数ベクトルデータD_cv(D_cv(3))(=4.9)として、実数処理部34に出力する。
【0148】
整数処理部33では、上記説明したのと同様の処理により、4値基底行列Mtx(4)の第2行目と、量子化処理後のデータD_Qin(バイナリコードz ijm (b))(図9において、vec_Bijと表記)との整数乗算処理(内積演算処理)が実行される。つまり、整数処理部33は、上記説明したのと同様の処理により、
DIo=vec_r3_upper_Mtx(4)・vec_upper_Bij
+vec_r3_lower_Mtx(4)・vec_lower_Bij
=8
に相当する処理を実行することで、データDIoを取得する。
【0149】
なお、データvec_r3_upper_Mtx(4)は、4値基底行列Mtx(4)の第3行目の第1列~第4列の要素を要素とするベクトル(1行4列の行列)であり、図9の場合、
vec_r3_upper_Mtx(4)=[2 ―2 2 1]
である。
【0150】
また、データvec_r3_lower_Mtx(4)は、4値基底行列Mtx(4)の第3行目の第5列~第8列の要素を要素とするベクトル(1行4列の行列)であり、図9の場合、
vec_r3_lower_Mtx(4)=[2 2 2 2]
である。
【0151】
上記処理により取得されたデータDIo(=8)は、整数処理部33から、実数処理部34に出力される。
【0152】
実数処理部34の実数乗算部34Aは、第2インターフェース部IF2から出力されるスケーリング係数ベクトルデータD_cv(3)(=4.9)と、整数処理部33から出力されるデータDIo(=8)とを入力する。実数乗算部34Aは、スケーリング係数ベクトルデータD_cvおよびデータDIoに対して、実数乗算処理を実行する。すなわち、実数乗算部34Aは、
D5=D_cv(3)×DIo=4.9×8=39.2
に相当する処理を実行することで、実数乗算処理後のデータD5を取得する。
【0153】
そして、実数乗算部34Aは、データD5を実数積算部34Bに出力する。
【0154】
実数積算部34Bの実数積算器342は、実数乗算部34Aから出力されるデータD5と、遅延器341から出力されるデータDo(t-1)(1つ前の実数積算器の処理結果データ)とを入力する。そして、実数積算器342は、データD5およびデータDo(t-1)に対して積算処理を実行する。つまり、実数積算部34Bの実数積算器342は、1回目の実数処理の処理結果をDo(t-1)とし、2回目の実数処理の処理結果をDo(t)として、
Do(t)=Do(t-1)+D5(t)=51.2+39.2=90.4
に相当する処理を実行することで、実数積算処理後のデータDo(=Do(t))を取得する。
【0155】
取得されたデータDo(=Do(t))は、実数処理部34から第2インターフェース部IF2に出力される。そして、第2インターフェース部IF2は、例えば、データDoを内部RAM R1の所定の領域に書き込む。
【0156】
このように処理することで、ニューラルネットワーク用プロセッサ100では、図9の下段の行列計算を行うことができ、yの値を取得することができる。つまり、ニューラルネットワーク用プロセッサ100において、上記のように処理することで、BNNでの処理精度と同等の処理精度を実現することができるとともに、BNNに比べて、実数演算処理を格段に少なくすることができる。図4図5に示した計算を実行する場合、(1)BNNにより実行すると、実数を要素とするスケーリング係数ベクトルの次元が「6」であり、それに応じて、実数の演算処理の回数が多くなるが、(2)N値基底行列(N=4)を用いるニューラルネットワーク用プロセッサ100により実行すると、スケーリング係数ベクトルの次元が「3」(BNNのときの半分)であり、それに応じて、実数の演算処理の回数が、BNNの場合に比べて、格段に少なくなる。
【0157】
このように、ニューラルネットワーク用プロセッサ100では、BNNと同等の計算精度を確保しつつ、実数演算の処理量を著しく低減させることができる。
【0158】
また、ニューラルネットワーク用プロセッサ100では、多値基底行列を用いるため(1つの符号語(多値基底行列の要素の値)に複数ビットを割り当てるため)、内部RAM R1と内積処理部3とのデータ伝送効率を高めることができる。これについて、図10図11を用いて説明する。
【0159】
図10は、1ビットデータフォーマット(1つの符号語に1ビットを割り当てる場合)を模式的に示した図である。
【0160】
図11は、2ビットデータフォーマット(1つの符号語に2ビットを割り当てる場合)を模式的に示した図である。
【0161】
上記では、説明便宜のために、内部RAM R1と内積処理部3との間のデータ転送バスのバス幅が8ビットであるとしたが、例えば、内部RAM R1と内積処理部3との間のデータ転送バスのバス幅が64ビットである場合について説明する。
【0162】
1ビットモード(1つの符号語に1ビットを割り当てる場合、BNNがこれに相当)で9要素分のデータを転送する場合、図10の上段に示すように、データは9ビット分であり、残りの55ビット分は、パディングデータとなり、データ転送バスにおいて、有効データの占める割合が低く、データ転送効率が悪い。
【0163】
2ビットモード(1つの符号語に2ビットを割り当てる場合、上記実施形態のニューラルネットワーク用プロセッサ100で4値基底行列を用いて処理する場合がこれに相当)で9要素分のデータを転送する場合、図11の上段に示すように、データは18ビット分(=2×9)であり、残りの46ビット分は、パディングデータとなり、データ転送バスにおいて、有効データの占める割合が1ビットモード(図10の場合)に比べて高く、データ転送効率が良くなる。
【0164】
9要素分のデータを転送する場合、図10の上段の図、図11の上段の図から分かるように、ともにデータ転送回数は、1回であり、同じである。したがって、この場合、ニューラルネットワーク用プロセッサ100では、2ビットモード(図11の場合)で内部RAM R1と内積処理部3との間のデータ転送を行うことで、1ビットモードで処理(BNNで処理)する場合と同じデータ転送回数で済む。そして、この場合(ニューラルネットワーク用プロセッサ100において2ビットモードで処理する場合)、上記で説明したように、スケーリング係数ベクトルの次元数を、1ビットモードで処理(BNNで処理)する場合に比べて著しく低減させることができる(上記実施形態では、スケーリング係数ベクトルの次元数を6次元から3次元に低減)。したがって、この場合、ニューラルネットワーク用プロセッサ100では、内部RAM R1と内積処理部3との間のデータ転送回数を、1ビットモードで処理(BNNで処理)する場合と同じにしつつ、実数演算処理量を著しく低減させることができる。
【0165】
また、図10の中段、および、図11の中段に示すように、48要素分のデータを転送する場合、ニューラルネットワーク用プロセッサ100において2ビットモードで処理すると、データ転送回数は、1ビットモードで処理(BNNで処理)する場合の2倍となるが(データ転送回数が2回になるが)、図10の下段、および、図11の下段に示すように、96要素分のデータを転送する場合、ニューラルネットワーク用プロセッサ100において2ビットモードで処理すると、データ転送回数は、1ビットモードで処理(BNNで処理)する場合の1.5倍にしかならない(1ビットモードの場合、データ転送回数が2回であり、2ビットモードの場合、データ転送回数が3回である)。
【0166】
つまり、ニューラルネットワーク用プロセッサ100において、Nビットモードで処理した場合、1ビットモードで処理する場合に比べて、データ転送回数は、符号語の数の増加率よりも低い割合で増加することになる(例えば、符号語の数を2倍にしても、データ転送回数は、2倍以下になる)。一方、ニューラルネットワーク用プロセッサ100において、Nビットモードで処理した場合、1ビットモードで処理する場合に比べて、スケーリング係数ベクトルの次元数は、著しく低減させることができ、その結果、実数演算量を著しく低減させることができる。そのため、ニューラルネットワーク用プロセッサ100において、Nビットモードで処理した場合、1ビットモードで処理する場合に比べて、トータルの処理量を著しく低減させることができる。
【0167】
このように、ニューラルネットワーク用プロセッサ100では、多値基底行列を用いた処理を行うことで、内部RAM R1と内積処理部3との間のデータ転送バスの利用率を高め、スケーリング係数ベクトルの次元数を低減させることで、実数演算処理量を著しく低減させることができる。したがって、ニューラルネットワーク用プロセッサ100では、従来のBNNで処理する場合と同等の計算精度を確保しつつ、演算処理量を著しく低減させることができる。
【0168】
なお、上記では、説明便宜のために、量子化処理後のデータD_Qinが1行8列の行列のデータであり、各要素が1ビットデータである場合について説明したが、これに限定されることはなく、量子化処理後のデータD_Qinは、任意のn行m列(n,m:自然数)の行列のデータあり、かつ、各要素がpビット(p:自然数)のデータであってもよい。
【0169】
例えば、図12に示すように、ニューラルネットワーク用プロセッサ100において、1行3列の出力データ[y111213]を算出する場合、3次元のスケーリング係数ベクトル、3行3列のN値基底行列(N=4)、および、pビットの量子化後データ(図12の場合、p=3であり、3ビット目の量子化後2値化データの3行3列の行列(これをB[2]と表記する)、2ビット目の量子化後2値化データの3行3列の行列(これをB[1]と表記する)、および、1ビット目の量子化後2値化データの3行3列の行列(これをB[0]と表記する))に対して、上記で説明したのと同様に、行列計算の処理を行う。これにより、ニューラルネットワーク用プロセッサ100では、図12の右下端に示した算出結果を取得することができる。なお、算出結果のスケーリング係数ベクトルに掛ける3行3列の行列M(N)Bの要素xijは、
ij=M(N)B[2]ij×2+M(N)B[1]ij×2+M(N)B[0]ij×2
である。
【0170】
なお、M(N)B[k]ij(k:整数、0≦k≦2)は、図12に示した3行3列の行列のi行j列(i,j:自然数、1≦i≦3、1≦j≦3)の要素である。
【0171】
また、ニューラルネットワーク用プロセッサ100において使用するN値基底行列は、任意のN値であってよい。上記では、ニューラルネットワーク用プロセッサ100において、図8の符号テーブルを用いて、N=4、すなわち、4値基底行列を用いる場合について説明したが、これに限定されることはない。例えば、ニューラルネットワーク用プロセッサ100において、図13の左図に示すように、3値基底行列用の符号テーブルを用いて、N=3、すなわち、3値基底行列を用いて、上記と同様の手法により、内積演算処理(行列演算処理)を実行してもよい。また、ニューラルネットワーク用プロセッサ100において、図13の右図に示すように、8値基底行列用の符号テーブルを用いて、N=8、すなわち、8値基底行列を用いて、上記と同様の手法により、内積演算処理(行列演算処理)を実行してもよい。また、ニューラルネットワーク用プロセッサ100において、15値の符号テーブルを用いて、15値基底行列により、上記と同様の手法により、内積演算処理(行列演算処理)を実行してもよい。また、ニューラルネットワーク用プロセッサ100において、16値の符号テーブルを用いて、16値基底行列により、上記と同様の手法により、内積演算処理(行列演算処理)を実行してもよい。
【0172】
なお、ニューラルネットワーク用プロセッサ100において、符号テーブルにおける符号語使用率は、75%以上とすることが好ましい。図13の左図において、ビットパターン「00」は、符号語の割当がなく、2ビットの4通りのビットパターンのうち、符号語に使用されているのは、3つだけであるので、符号語使用率は、75%となる。図13の右図において、全てのビットパターンに対して符号語の割当があるので、図13の右図の符号テーブルの符号語使用率は、100%である。
【0173】
また、N値基底行列の要素のとりうる符号語(整数値)に、2の累乗ではない符号語(整数値)を少なくとも1つ含めることが好ましい(例えば、図13の右図の符号テーブルでは、ビットパターン「001」に割り当てられている符号語(整数値)「3」やビットパターン「110」に割り当てられている符号語(整数値)「―3」がこれに相当する)。これにより、表現できる整数値のバリエーションが増え、ニューラルネットワーク用プロセッサ100における計算の精度が向上する。
【0174】
また、ニューラルネットワーク用プロセッサ100において、4値の符号テーブルを用いて、4値基底行列により、内積演算処理(行列演算処理)を実行する場合、例えば、図8のように符号語に「0」を含まない符号テーブルにより、内積演算処理(行列演算処理)を実行することが好ましい。これにより、特定のビットパターンに符号語「0」に割り当てることがないため、他の符号語(整数値)にビットパターンを割り当てることができ、表現できる数値のバリエーションが増える。特に、密な行列の演算を行うことが多い場合、上記のように「0」以外の整数値(符号語)にビットパターンを割り当てる符号テーブルを用いて、内積演算処理(行列演算処理)を実行することで、効率良く、かつ、高精度の演算処理を行うことができる。
【0175】
以上のように、ニューラルネットワーク用プロセッサ100では、従来のBNNで処理する場合と同等の計算精度を確保しつつ、演算処理量を著しく低減させることができる。また、ニューラルネットワーク用プロセッサ100では、上記の通り、データ転送バスのバス幅の有効データの占有率を高めることができるため、効率良く演算処理が実行できる。さらに、ニューラルネットワーク用プロセッサ100では、多値(N値)基底行列の各要素がとる整数値(符号語)を、符号テーブルを用いて柔軟に設定することができるため、多様な行列演算処理を効率良く行うことができる。
【0176】
このように、ニューラルネットワーク用プロセッサ100では、柔軟性を有しつつ、高精度の演算処理を効率良く行うことができる。このため、ニューラルネットワーク用プロセッサ100を用いることで、再学習を必要とせず、組み込み機器やモバイル機器等の低スペックのデバイス(例えば、エッジ端末)において、高性能なコンパクト化したモデルを搭載することができる。
【0177】
[他の実施形態]
上記実施形態では、ニューラルネットワーク用プロセッサ100で実行される処理として、畳み込み層の処理を想定して、説明したが、これに限定されることはなく、全結合層の処理も、ニューラルネットワーク用プロセッサ100において、同様に実行することができる。この場合、ニューラルネットワーク用プロセッサ100において、上記の特徴マップ(行列のデータ)を特徴ベクトル(ベクトルデータ)として、同様に処理を実行すればよい。
【0178】
ニューラルネットワーク用プロセッサ100の各機能部の一部または全部は、マイクロコードにより、あるいは、マイクロコードとともに所定のハードウェアにより実現されるものであってもよい。
【0179】
また、上記実施形態では、ニューラルネットワーク用プロセッサ100において、実数処理部34の出力データDoが、第2インターフェースに出力され、第2インターフェースにより、当該データDoが内部RAM R1に書き込まれる場合について、説明したが、これに限定されることはなく、例えば、ニューラルネットワーク用プロセッサ100において、実数処理部34の出力データDoに対して、(数式3)の右辺の第2項のオフセット分の調整を行ったデータを内部RAM R1に書き込むようにしてもよい。
【0180】
また、上記実施形態では、内積処理部がニューラルネットワークの演算処理の一部を実行する場合について説明したが、これに限定されることはなく、例えば、演算処理部PL1の内積処理部3において、活性化関数の処理(例えば、ReLU関数の処理)を実行するようにしてもよい。また、活性化関数の処理(例えば、ReLU関数の処理)は、内積処理部3および制御部CPU1で実行されるものであってもよい。
【0181】
上記実施形態では、内部RAMの個数については特に限定せず説明したが、内部RAMは、複数個のRAMにより構成されるものであってもよいし、また、ニューラルネットワーク用プロセッサ100の外部に設けたRAM(例えば、DRAM)等を用いて、上記実施形態の処理を実行するようにしてもよい。
【0182】
上記実施形態において、スカラー、ベクトル、行列で表現したデータについては、一例であり、上記に限定されるものではない。BNNの処理に応じて、スカラー、ベクトル、テンソルのデータとして、ニューラルネットワーク用プロセッサ100が、上記と同様の処理を実行してもよい。
【0183】
上記実施形態で説明したニューラルネットワーク用プロセッサ100の各ブロック(各機能部)は、LSIなどの半導体装置により個別に1チップ化されても良いし、一部又は全部を含むように1チップ化されても良い。また、上記実施形態で説明したニューラルネットワーク用プロセッサ100の各ブロック(各機能部)は、複数のLSIなどの半導体装置により実現されるものであってもよい。
【0184】
なお、ここでは、LSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。
【0185】
また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。
【0186】
また、上記各実施形態の各機能ブロックの処理の一部または全部は、プログラムにより実現されるものであってもよい。そして、上記各実施形態の各機能ブロックの処理の一部または全部は、コンピュータにおいて、中央演算装置(CPU)により行われる。また、それぞれの処理を行うためのプログラムは、ハードディスク、ROMなどの記憶装置に格納されており、ROMにおいて、あるいはRAMに読み出されて実行される。
【0187】
また、上記実施形態の各処理をハードウェアにより実現してもよいし、ソフトウェア(OS(オペレーティングシステム)、ミドルウェア、あるいは、所定のライブラリとともに実現される場合を含む。)により実現してもよい。さらに、ソフトウェアおよびハードウェアの混在処理により実現しても良い。
【0188】
例えば、上記実施形態(変形例を含む)の各機能部を、ソフトウェアにより実現する場合、図14に示したハードウェア構成(例えば、CPU、GPU、ROM、RAM、入力部、出力部等をバスBusにより接続したハードウェア構成)を用いて、各機能部をソフトウェア処理により実現するようにしてもよい。
【0189】
また、上記実施形態における処理方法の実行順序は、必ずしも、上記実施形態の記載に制限されるものではなく、発明の要旨を逸脱しない範囲で、実行順序を入れ替えることができるものである。
【0190】
前述した方法をコンピュータに実行させるコンピュータプログラム及びそのプログラムを記録したコンピュータ読み取り可能な記録媒体は、本発明の範囲に含まれる。ここで、コンピュータ読み取り可能な記録媒体としては、例えば、フレキシブルディスク、ハードディスク、CD-ROM、MO、DVD、DVD-ROM、DVD-RAM、大容量DVD、次世代DVD、半導体メモリを挙げることができる。
【0191】
上記コンピュータプログラムは、上記記録媒体に記録されたものに限られず、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送されるものであってもよい。
【0192】
また、文言「部」は、「サーキトリー(circuitry)」を含む概念であってもよい。サーキトリーは、ハードウェア、ソフトウェア、あるいは、ハードウェアおよびソフトウェアの混在により、その全部または一部が、実現されるものであってもよい。
【0193】
ここに開示される要素の機能は、当該開示される要素を実行するように構成された、あるいは当該開示される機能を実行するようにプログラミングされた汎用プロセッサ、専用プロセッサ、集積回路、ASIC(「特定用途向け集積回路」)、従来の回路構成及び/またはそれらの組み合わせを含む回路構成あるいは処理回路構成が用いられて実装されてもよい。プロセッサは、それが、その中にトランジスタ及び他の回路構成を含むとき、処理回路構成あるいは回路構成として見なされる。本開示において、回路構成、ユニットあるいは手段は、挙げられた機能を実行するハードウェア、あるいは当該機能を実行するようにプログラミングされたハードウェアである。ハードウェアは、挙げられた機能を実行するようにプログラミングされた、あるいは当該機能を実行するように構成された、ここで開示されるいかなるハードウェアあるいは既知の他のものであってもよい。ハードウェアが、あるタイプの回路構成として見なされるかもしれないプロセッサであるとき、回路構成、手段あるいはユニットは、ハードウェアとソフトウェアの組み合わせ、ハードウェアを構成するために用いられるソフトウェア及び/またはプロセッサである。
【0194】
なお、本発明の具体的な構成は、前述の実施形態に限られるものではなく、発明の要旨を逸脱しない範囲で種々の変更および修正が可能である。
【符号の説明】
【0195】
100 ニューラルネットワーク用プロセッサ
PL1 演算処理部
1 DMA制御部
2 量子化処理部
R1 内部RAM
3 内積処理部
31 モード設定部
32 ループ回数取得部
33 整数処理部
34 実数積算部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14