(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022012628
(43)【公開日】2022-01-17
(54)【発明の名称】演算装置及び演算方法
(51)【国際特許分類】
H04L 9/10 20060101AFI20220107BHJP
G06F 21/55 20130101ALI20220107BHJP
【FI】
H04L9/00 621A
G06F21/55 380
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2020114597
(22)【出願日】2020-07-02
【新規性喪失の例外の表示】特許法第30条第2項適用申請有り 公開の事実1:令和 1年12月 6日、ハードウェアセキュリティフォーラム2019にて発表 公開の事実2-1:令和 2年 1月21日、2020年暗号と情報セキュリティシンポジウム予稿集に掲載 公開の事実2-2:令和 2年 1月30日、2020年暗号と情報セキュリティシンポジウムにて発表
【国等の委託研究の成果に係る記載事項】(出願人による申告)令和元年度、国立研究開発法人科学技術振興機構、未来社会創造事業「エッジAIのハードウェアセキュリティに関する各種攻撃手法の網羅的抽出と対策手法の研究」委託研究、産業技術力強化法第17条の適用を受ける特許出願
(71)【出願人】
【識別番号】593006630
【氏名又は名称】学校法人立命館
(74)【代理人】
【識別番号】100111567
【弁理士】
【氏名又は名称】坂本 寛
(72)【発明者】
【氏名】藤野 毅
(72)【発明者】
【氏名】大倉 俊介
(72)【発明者】
【氏名】吉田 康太
(57)【要約】 (修正有)
【課題】サイドチャネル攻撃耐性を確保する演算装置び演算方法を提供する。
【解決手段】演算装置は、単位演算を繰り返すことを含む演算処理を実行する処理エレメントPEを備える。処理エレメントPEは、レジスタc
regと、第1入力データaと第2入力データbとを乗算するよう構成された乗算器501と、第1入力データと第2入力データの乗算結果と、レジスタに保存された値と、を加算した結果をレジスタc
regに保存するよう構成された加算器502と、を備える。演算処理は、レジスタc
regに保存された値と乱数とを加算した値をレジスタc
regに保存する第1処理を実行し、第1処理の後に少なくとも1回の単位演算を実行した後に、レジスタc
regに保存された値から乱数を減算した値をレジスタc
regに保存する第2処理を実行することを含む。
【選択図】
図5
【特許請求の範囲】
【請求項1】
単位演算を繰り返すことを含む演算処理を実行する少なくとも1個の処理エレメントを備え、
少なくとも1個の処理エレメントそれぞれは、
レジスタと、
第1入力データと第2入力データとを乗算するよう構成された乗算器と、
前記第1入力データと前記第2入力データの乗算結果と、前記レジスタに保存された値と、を加算した結果を前記レジスタに保存するよう構成された加算器と、
を備え、
前記単位演算は、
前記第1入力データと前記第2入力データとを前記乗算器によって乗算すること、及び、
前記第1入力データと前記第2入力データの乗算結果と、前記レジスタに保存された値と、を前記加算器によって加算すること、
を含み、
前記演算処理は、
前記レジスタに保存された値と乱数とを加算した値を前記レジスタに保存する第1処理を実行し、
前記第1処理の後に少なくとも1回の前記単位演算を実行した後に、前記レジスタに保存された値から前記乱数を減算した値を前記レジスタに保存する第2処理を実行することを含む、
演算装置。
【請求項2】
前記第1処理において、前記レジスタに保存された前記値と前記乱数とを加算することは、前記加算器によって行われる
請求項1に記載の演算装置。
【請求項3】
前記第2処理において、前記レジスタに保存された前記値から前記乱数を減算することは、前記レジスタに保存された前記値と、前記乱数を符号反転した値と、を前記加算器によって加算することによって行われる
請求項1又は2に記載の演算装置。
【請求項4】
前記乱数は、第1乱数と第2乱数とを前記乗算器によって乗算することによって得られる
請求項1から請求項3のいずれか1項に記載の演算装置。
【請求項5】
前記第1処理は、前記単位演算の繰り返しの開始前に行われ、
前記第2処理は、前記単位演算の繰り返し終了後に行われる
請求項1から請求項4のいずれか1項に記載の演算装置。
【請求項6】
前記少なくとも1個の処理エレメントは、複数の処理エレメントであり、
前記複数の処理エレメントは、シストリックアレイを構成している
請求項1から請求項5のいずれか1項に記載の演算装置。
【請求項7】
前記第1入力データは、ニューラルネットワークへの入力データであり、
前記第2入力データは、前記ニューラルネットワークの重みパラメータである
請求項1から請求項6のいずれか1項に記載の演算装置。
【請求項8】
複数の単位演算を繰り返すことを含む演算方法であって、
前記単位演算は、第1入力データと第2入力データとを乗算すること、及び、前記第1入力データと前記第2入力データの乗算結果とレジスタに保存された値とを加算すること、を含み、
前記演算方法は、
前記レジスタに保存された値と乱数とを加算した値を前記レジスタに保存する第1処理を実行し、
前記第1処理の後に少なくとも1回の前記単位演算を実行した後に、前記レジスタに保存された値から前記乱数を減算した値を前記レジスタに保存する第2処理を実行する
ことを含む、
演算方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、演算装置及び演算方法に関する。
【背景技術】
【0002】
特許文献1は、ニューラルネットワーク計算を実行するための回路を開示している。特許文献1に開示された回路は、行列計算ユニットを備える。行列計算ユニットは、複数のセルを含む二次元シストリックアレイとして構成されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許出願公開第2006/034289号明細書
【非特許文献】
【0004】
【非特許文献1】吉田康太ら,"シストリックアレイ構造を持つDNN推論回路に対する相関電力解析を用いたDNNモデルのリバースエンジニアリング攻撃", 暗号と情報セキュリティシンポジウム(SCIS), 3D2-4,2020
【発明の概要】
【0005】
ニューラルネットワークのような人工知能を、車両又は電子機器などに組み込まれるエッジデバイスとして構成したエッジAIが注目されている。エッジAIデバイスは、攻撃者の手元に存在するため、学習モデルの搾取が懸念される。学習モデルの構築には多大な費用と時間を要することがあり、学習モデルは重要な資産である。
【0006】
攻撃を防止するために、学習モデルのパラメータを暗号化して保存することが考えられる。しかし、パラメータを暗号化しても、ニューラルネットワーク演算の実行時に発生する漏洩電磁波などのサイドチャネル情報を利用した攻撃がなされると、学習モデルが搾取されるおそれがある(非特許文献1参照)。
【0007】
したがって、ニューラルネットワーク演算などの演算において、サイドチャネル攻撃耐性の確保が望まれる。
【0008】
本開示のある側面は、演算装置である。開示の演算装置は、単位演算を繰り返すことを含む演算処理を実行する少なくとも1個の処理エレメントを備え、少なくとも1個の処理エレメントそれぞれは、レジスタと、第1入力データと第2入力データとを乗算するよう構成された乗算器と、前記第1入力データと前記第2入力データの乗算結果と、前記レジスタに保存された値と、を加算した結果を前記レジスタに保存するよう構成された加算器と、を備え、前記単位演算は、前記第1入力データと前記第2入力データとを前記乗算器によって乗算すること、及び、前記第1入力データと前記第2入力データの乗算結果と、前記レジスタに保存された値と、を前記加算器によって加算すること、を含み、前記演算処理は、前記レジスタに保存された値と乱数とを加算した値を前記レジスタに保存する第1処理を実行し、前記第1処理の後に少なくとも1回の前記単位演算を実行した後に、前記レジスタに保存された値から前記乱数を減算した値を前記レジスタに保存する第2処理を実行することを含む。
【0009】
本開示の他の側面は、演算方法である。開示の演算方法は、複数の単位演算を繰り返すことを含む演算方法であって、前記単位演算は、第1入力データと第2入力データとを乗算すること、及び、前記第1入力データと前記第2入力データの乗算結果とレジスタに保存された値とを加算すること、を含み、前記演算方法は、前記レジスタに保存された値と乱数とを加算した値を前記レジスタに保存する第1処理を実行し、前記第1処理の後に少なくとも1回の前記単位演算を実行した後に、前記レジスタに保存された値から前記乱数を減算した値を前記レジスタに保存する第2処理を実行することを含む。
【0010】
更なる詳細は、後述の実施形態として説明される。
【図面の簡単な説明】
【0011】
【
図1】
図1は、実施形態に係るセンサシステムのハードウエア構成図である。
【
図2】
図2は、実施形態に係る演算装置のハードウエア 構成図である。
【
図4】
図4は、複数の処理エレメントからなるシストリックアレイの構成図である。
【
図5】
図5は、処理エレメントの内部回路図である。
【
図6】
図6は、処理エレメントの演算(参考例)の説明図である。
【
図7】
図7は、処理エレメントの演算(実施例)の説明図である。
【
図8】
図8は、実施形態に係るシストリックアレイへのデータフロー図である。
【
図10】
図10は、演算装置の処理手順を示すフローチャートである。
【発明を実施するための形態】
【0012】
<1.演算装置及び演算方法の概要>
【0013】
(1)実施形態に係る演算装置は、単位演算を繰り返すことを含む演算処理を実行する少なくとも1個の処理エレメントを備える。少なくとも1個の処理エレメントそれぞれは、レジスタと、第1入力データと第2入力データとを乗算するよう構成された乗算器と、前記第1入力データと前記第2入力データの乗算結果と、前記レジスタに保存された値と、を加算した結果を前記レジスタに保存するよう構成された加算器と、を備える。
【0014】
前記単位演算は、前記第1入力データと前記第2入力データとを前記乗算器によって乗算すること、及び、前記第1入力データと前記第2入力データの乗算結果と、前記レジスタに保存された値と、を前記加算器によって加算すること、を含む。
【0015】
前記演算処理は、前記レジスタに保存された値と乱数とを加算した値を前記レジスタに保存する第1処理を実行し、前記第1処理の後に少なくとも1回の前記単位演算を実行した後に、前記レジスタに保存された値から前記乱数を減算した値を前記レジスタに保存する第2処理を実行することを含む。
【0016】
実施形態に係る演算装置によれば、乱数によって、レジスタの値が予測困難になるため、サイドチャネル攻撃耐性が確保される。
【0017】
(2)前記第1処理において、前記レジスタに保存された前記値と前記乱数とを加算することは、前記加算器によって行われるのが好ましい。この場合、レジスタに保存された前記値と前記乱数とを加算するための追加のハードウエアが不要になる。
【0018】
(3)前記第2処理において、前記レジスタに保存された前記値から前記乱数を減算することは、前記レジスタに保存された前記値と、前記乱数を符号反転した値と、を前記加算器によって加算することによって行われるのが好ましい。この場合、前記レジスタに保存された前記値から前記乱数を減算するための追加のハードウエアが不要になる。
【0019】
(4)前記乱数は、第1乱数と第2乱数とを前記乗算器によって乗算することによって得られるのが好ましい。第1乱数と第2乱数の乗算によって、乱数の値の範囲を広くすることができる。
【0020】
(5)前記第1処理は、前記単位演算の繰り返しの開始前に行われ、前記第2処理は、前記単位演算の繰り返し終了後に行われるのが好ましい。この場合、サイドチャネル攻撃に対する保護がより充実する。
【0021】
(6)前記少なくとも1個の処理エレメントは、複数の処理エレメントであり、前記複数の処理エレメントは、シストリックアレイを構成しているのが好ましい。
【0022】
(7)前記第1入力データは、ニューラルネットワークへの入力データであり、前記第2入力データは、前記ニューラルネットワークの重みパラメータであるのが好ましい。
【0023】
(8)実施形態に係る演算方法は、複数の単位演算を繰り返すことを含む。前記単位演算は、第1入力データと第2入力データとを乗算すること、及び、前記第1入力データと前記第2入力データの乗算結果とレジスタに保存された値とを加算すること、を含む。前記演算方法は、前記レジスタに保存された値と乱数とを加算した値を前記レジスタに保存する第1処理を実行し、前記第1処理の後に少なくとも1回の前記単位演算を実行した後に、前記レジスタに保存された値から前記乱数を減算した値を前記レジスタに保存する第2処理を実行することを含む。
【0024】
<2.演算装置及び演算方法の例>
【0025】
図1は、センサシステム10を示している。実施形態に係るセンサシステム10は、エッジAIデバイスである。センサシステム10は、例えば、センサ300と、センサ300から出力されたセンサデータに対して、学習済みモデルによって、センサデータの識別などの推論処理を実行する回路100,200を備える。センサ300は、例えば、イメージセンサであるが、センサの種類は特に限定されない。センサシステム10は、例えば、車載カメラとして用いられ、イメージセンサによって撮像された物体の識別結果を出力する。
【0026】
センサシステム10が備える回路100,200は、ディープニューラルネットワーク(DNN)などのニューラルネットワークのための演算を行う演算装置100を有する。
【0027】
また、センサシステム10が備える回路100,200は、処理回路200を有する。処理回路200は、センサ300に接続される外部インターフェース210を備える。外部インターフェース210は、センサ300から取得したセンサデータをホストCPU220に渡す。ホストCPU220は、センサ300からセンサデータを受け取り、第1入力データとしてセンサデータを、バス230を介して、演算装置100に渡す。ホストCPU220は、演算の指令を演算装置100に送信することで、演算装置100の動作を制御する。
【0028】
処理回路200は、学習モデルの重みパラメータを保存するパラメータストレージ240を備える。重みパラメータは、学習済みモデルを構成する。学習済みモデルは、例えば、DNNモデルである。なお、以下では、重みパラメータを単に「重み」という。パラメータストレージ240は、例えば、不揮発性メモリによって構成される。パラメータストレージ240に保存される重みは、暗号化されている。
【0029】
暗号化された重みは、バス230を介して、演算装置100に渡される。暗号化された重みは、演算装置100の暗号化/復号器101において復号され、第2入力データとして、演算装置100における演算に用いられる。
【0030】
処理回路200は、演算装置100による中間演算結果を保存するためのオフチップメモリ250を備える。オフチップメモリ250は、例えば、ランダムアクセスメモリによって構成される。演算装置100の中間演算結果は、演算装置100の暗号化/復号器101において暗号化され、バス230を介して、オフチップメモリ250に保存される。演算装置100は、オフチップメモリ250から、暗号化された中間演算結果を取得し、復号して、演算に用いることができる。
【0031】
図2は、実施形態に係る演算装置100の一例を示している。演算装置100は、行列計算ユニット110を備える。行列計算ユニット110は、複数のレイヤーを有するニューラルネットワークのための行列計算を行う。ニューラルネットワークによる推論において、行列計算は、全計算コストの大部分を占める。実施形態の行列計算ユニット110は、ニューラルネットワークアクセラレータチップとして構成され、行列計算(ドット積)を高速化するよう構成されたハードウエア回路である。ニューラルネットワークは、例えば、多層パーセプトロンであり、ノードとなるニューロン400(
図3参照)を有する。
【0032】
図3中の式(1)に示すように、(隠れ層に含まれる)ニューロン400の出力hは、入力x
0、x
1、・・・x
nと重みw
0、w
1、・・・、w
nとの積の総和にバイアスbを加算したものに、活性化関数fを適用したものである。なお、多層パーセプトロンは、ニューロンを層状に結合させたものであって、層と層との間に全結合を有する。
【0033】
ニューラルネットワーク演算の基本は、入力x0、x1、・・・、xnからなる入力ベクトルと、重みw0、w1、・・・、wnからなる重みベクトルの行列積として表現される。前述の行列計算ユニット110は、ニューラルネットワーク演算における行列計算を実行する。
【0034】
実施形態に係る演算装置100は、ベクトル計算ユニット120を備える。ベクトル計算ユニットは、行列計算ユニット110で計算可能なサイズよりも大きなサイズの行列の計算を可能にするため、行列計算ユニット110での中間演算結果を用いて、より大きなサイズの行列の計算結果を生成する。
【0035】
実施形態に係る演算装置100は、行列計算ユニット110に与えられる第1入力データが格納される第1入力データバッファ130と、行列計算ユニット110に与えられる第2入力データが格納される第2入力データバッファ140と、を備える。
図2において、第2入力データバッファ140は、重みバッファ140として示されている。第1入力データは、前述のように、例えば、センサ300から取得されるセンサデータである。第2入力データは、前述のように、例えば、ニューラルネットワークにおける重みである。重みは、パラメータストレージ240から取得される。
【0036】
実施形態に係る演算装置100は、第1入力データ及び第2入力データを演算装置100外部から取得することを可能にするため、ホストインターフェース160と、ダイレクトメモリアクセスエンジン170と、を備える。また、実施形態に係る演算装置100は、行列計算ユニット110の演算を制御するシーケンサ180を備える。シーケンサ180は、第1入力データバッファ130から行列計算ユニット110に与えられる第1入力データのデータフローを制御する。また、シーケンサ180は、第2入力データバッファ140から行列計算ユニット110に与えられる第2入力データのデータフローを制御する。さらに、シーケンサ180は、ベクトル計算ユニット120の演算を制御する。
【0037】
実施形態に係る演算装置100は、乱数生成器150を備える。乱数生成器150が生成する乱数は、真正乱数が好ましいが、疑似乱数であってもよい。乱数生成器150が生成した乱数は、第1入力データバッファ130と第2入力データバッファに与えられる。つまり、第1入力データバッファ130には、第1入力データと乱数とが格納され、第2入力データバッファ140には、第2入力データ(重み)と乱数とが格納される。実施形態において、第1入力データのデータフロー及び第2データのデータフローには、乱数が含まれる。この点については後述する。
【0038】
図4は、実施形態に係る行列計算ユニット110を示している。実施形態の行列計算ユニット110は、シストリックアレイ(Systolic array)として構成されている。
図4に示す行列計算ユニット110は、シストリックアレイの一種であるWavefront arrayを示している。Wavefront arrayは、ドット積を高速に計算できる。なお、行列のドット積は、
図4の式(2)に示す演算であり、第1入力データaの行列と第2入力データbの行列との行列積の演算により求められる。
【0039】
図4に示す行列計算ユニット110は、二次元に配列された複数の処理エレメント(Processing Element)を備える。複数の処理エレメントPEは、前述のシストリックアレイを構成している。
【0040】
図4において、行列計算ユニット110は、3×3=9個の処理エレメントPEを備える。
図4において、処理エレメントPE
11は、行列ドット積の要素c
11を求める演算処理を実行する。処理エレメントPE
12は、行列ドット積の要素c
12を求める演算処理を実行する。処理エレメントPE
13は、行列ドット積の要素c
13を求める演算処理を実行する。処理エレメントPE
21は、行列ドット積の要素c
21を求める演算処理を実行する。処理エレメントPE
22は、行列ドット積の要素c
22を求める演算処理を実行する。処理エレメントPE
23は、行列ドット積の要素c
23を求める演算処理を実行する。処理エレメントPE
31は、行列ドット積の要素c
31を求める演算処理を実行する。処理エレメントPE
32は、行列ドット積の要素c
32を求める演算処理を実行する。処理エレメントPE
33は、行列ドット積の要素c
33を求める演算処理を実行する。
【0041】
複数の処理エレメントPEは、それぞれ、同じ構造を有する。
図5は、処理エレメントPEの内部構造を示す。処理エレメントPEは、クロック毎に第1入力データaと第2入力データbとを受け取る。処理エレメントPEは、乗算器501と加算器502と、を備える。また、処理エレメントPEは、レジスタa
reg、レジスタb
reg、及びレジスタc
regを備える。
【0042】
乗算器501は、処理エレメントPEが受け取った第1入力データaと第2入力データbとを乗算するよう構成されている。乗算器501は、第1入力データaと第2入力データbの乗算結果a×bを、加算器502へ出力する。加算器502は、乗算結果a×bと、レジスタcregに保存された値と、を加算するよう構成されている。加算器502は、乗算結果a×bと、レジスタcregに保存された値と、の加算結果を、レジスタcregに保存する。加算器502によって加算される“レジスタcregに保存された値”は、一つ前の時刻(クロック)における加算器502の加算結果である。レジスタcregに保存された値は、処理エレメントPEの出力データcとして、出力される。レジスタcregに保存された値cは、第1入力データa及び第2入力データbを受け取った時刻(クロック)の次の時刻(クロック)において、処理エレメントPEから出力される。
【0043】
レジスタa
regは、処理エレメントPEが受け取った第1入力データaを保存する。レジスタa
regに保存された第1入力データaは、第1入力データaを受け取った時刻(クロック)の次の時刻(クロック)において、処理エレメントPEから出力され、隣の処理エレメントPEに与えられる。例えば、
図4の処理エレメントPE
11から出力された第1入力データaは、右隣の処理エレメントPE
12に与えられる。
【0044】
レジスタb
regは、処理エレメントPEが受け取った第2入力データbを保存する。レジスタb
regに保存された第2入力データbは、第2入力データbを受け取った時刻(クロック)の次の時刻(クロック)において、処理エレメントPEから出力され、隣の処理エレメントPEに与えられる。例えば、
図5の処理エレメントPE
11から出力された第2入力データbは、下隣の処理エレメントPE
21に与えられる。
【0045】
図4に戻り、行列計算ユニット110へ与えられる一般的なデータフローを説明する。まず、ある時刻(クロック)において、処理エレメントPE
11には第1入力データa
11が与えられ、その後、クロック毎に、第1入力データa
12、第1入力データa
13の順で与えられる。
【0046】
処理エレメントPE21には、処理エレメントPE11に第1入力データa12が与えられるのと同じ時刻(クロック)において、第1入力データa21が与えられ、その後、クロック毎に、第1入力データa22、第1入力データa23の順で与えられる。
【0047】
処理エレメントPE31には、処理エレメントPE21に第1入力データa22が与えられるのと同じ時刻(クロック)において、第1入力データa31が与えられ、その後、クロック毎に、第1入力データa32、第1入力データa33の順で与えられる。
【0048】
また、処理エレメントPE11には、処理エレメントPE11に第1入力データa11が与えられるのと同じ時刻(クロック)において、第2入力データb11が与えられ、その後、クロック毎に、第2入力データb21、第2入力データb31の順で与えられる。
【0049】
処理エレメントPE12には、処理エレメントPE11に第2入力データb21が与えられるのと同じ時刻(クロック)において、第2入力データb12が与えられ、その後、クロック毎に、第2入力データb22、第2入力データb32の順で与えられる。
【0050】
処理エレメントPE13には、処理エレメントPE12に第2入力データb22が与えられるのと同じ時刻(クロック)において、第2入力データb13が与えられ、その後、クロック毎に、第2入力データb23、第2入力データb33の順で与えられる。
【0051】
図4に示す行列計算ユニット110では、
図4の式(2)に示す行列のドット積の計算を7クロックで完了することができる。
【0052】
前述のように、第1入力データaは、例えば、センサデータなどのニューラルネットワークへの入力データであり、第2入力データbは、ニューラルネットワークの重みである。ニューラルネットワークの重みは、パラメータストレージ240においては、暗号化により保護されているが、行列計算ユニット110での計算の際には、復号されて平文に戻っている。この場合、行列計算の実行時に発生する漏洩電磁波などのサイドチャネル情報を利用した攻撃がなされると、学習モデルが搾取されるおそれがある(非特許文献1参照)。
【0053】
ここで、回路からの漏洩電磁波による情報漏洩は、回路の内部動作と、その時の回路の消費電力に相関があると情報が洩れる(相関電力解析)。そして、ニューラルネットワークの重みは、処理エレメントPEのレジスタ(フリップフロップ)においては、レジスタに保存された値regがある時刻(クロック)tにおける値regtから、次の時刻(クロック)t+1における値regt+1に遷移する場合、レジスタは、そのハミング距離HD(regt,regt+1)に応じて電力を消費する。
【0054】
このことを利用すると、攻撃者は、相関電力解析を利用したサイドチャネル攻撃によって、ニューラルネットワークの重みを搾取することができる(詳細は、非特許文献1参照)。
【0055】
ここでは、攻撃者は、演算装置100に対して任意の第1入力データを与えることができるものとする。また、攻撃者は、行列計算ユニット110のアーキテクチャ及びニューラルネットワークのアーキテクチャを知っているものとする。
【0056】
この場合、攻撃者は、各処理エレメントPEのレジスタcregからの漏洩電磁波を観測することで、レジスタcregに保存された値を計算により求めることができる。そして、攻撃者は、レジスタcregに保存された値から、未知数である重みを求めることができる。
【0057】
以下、一つの処理エレメントPE
11に着目して、未知数である重みb(第2入力データ)を求めることが可能であることを説明する。
図6に示すように、処理エレメントPE
11の出力c
11は、
図6の式(3)のように計算される。
図6には、出力c
11が保存されるレジスタc
regの値の遷移も示されている。
図6に示すように、時刻t=0(初期時刻)において、レジスタc
regの値c
11
tは0(初期値)をとる。時刻t=0(初期時刻)において、レジスタc
regの値c
11
tが0(初期値)をとることは、攻撃者にとって既知であるとする。
【0058】
次の時刻t=1において、処理エレメントPE11に第1入力データa11と第2入力データb11とが与えられる。この時刻t=1においては、第1入力データa11と第2入力データb11とが乗算器501により乗算されるとともに、その加算結果a11×b11と現在のレジスタcregの値(0:初期値)とが加算器502によって加算される。加算結果は、次の時刻t=2におけるレジスタcreg
tの値になる。
【0059】
ここで、処理エレメントPEにおいて、各時刻tにおいて実行される演算を単位演算という。実施形態において、単位演算は、乗算器501による乗算と、加算器502による加算と、を含む。つまり、時刻t=1においては、単位演算が実行される。
【0060】
単位演算は、必要な回数(
図6では3回)繰り返される。時刻t=2において、処理エレメントPE
11には、第1入力データa
12と第2入力データb
21とが与えられる。この時刻t=2においては、単位演算の実行により、第1入力データa
12と第2入力データb
21とが乗算器501により乗算されるとともに、その加算結果a
12×b
21と現在のレジスタc
regの値とが加算器502によって加算される。加算結果は、次の時刻t=3におけるレジスタc
reg
tの値になる。
【0061】
時刻t=3において、処理エレメントPE11には、第1入力データa13と第2入力データb31とが与えられる。この時刻t=3においては、単位演算の実行により、第1入力データa13と第2入力データb31とが乗算器501により乗算されるとともに、その加算結果a13×b31と現在のレジスタcregの値とが加算器502によって加算される。加算結果は、処理エレメントPE11の出力c11になる。
【0062】
図6に示すc
11の遷移において、第1入力データa
11、第1入力データa
12、第1入力データa
13は、攻撃者により与えられるものであるから、攻撃者にとって既知である。また、レジスタc
regの値の遷移の仕方(レジスタc
regの動作)は、レジスタc
regからの漏洩電磁波によって推定可能であるため、レジスタc
regの初期値が攻撃者にとって既知であると、各時刻tのレジスタc
regの遷移後の値を計算することができる。
【0063】
そうすると、
図6に示すc
11の遷移として示される式において、未知数は第2入力データb
11,b
21,b
31だけであり、各時刻tにおいて未知数は、1つである。したがって、未知数である第2入力データb
11,b
21,b
31は、他の値a
11,a
12,a
13,c
reg
t,c
reg
t+1から求めることができる。
【0064】
このように、攻撃者は、レジスタcregの初期値が既知であり、処理エレメントPEのレジスタcregの遷移の仕方が推測可能であることを利用して、攻撃を行う。そこで、そこで、本実施形態では、攻撃対策として、レジスタcregを、攻撃者が知り得ない乱数で初期化し、遷移後の値を予想できないようにする。
【0065】
例えば、
図7に示すように、処理エレメントPE
11の出力c
11を求める演算処理においては、時刻t=1において、乱数R
1×R
4をレジスタc
regにセットする(第1処理の実行)。そして、その後の時刻t=2~4において、
図6と同様に計3回の単位演算を繰り返し実行する。その後の時刻t=5において、レジスタc
regから乱数R
1×R
4を減算する(第2処理の実行)。
【0066】
図7に示す式(4)は、乱数R
1×R
4の加算及び減算が含まれている以外は、
図6に示す式(3)と同じである。そして、乱数R
1×R
4を加算しても、最後にその乱数R
1×R
4を減算するため、処理エレメントPE
11の出力c
11は、乱数R
1×R
4の影響を受けない。したがって、
図7に示す式(4)は、
図6に示す式(3)と等価である。しかし、
図7の場合、時刻t=1において、レジスタc
regには、攻撃者が知り得ない乱数R
1×R
4がセットされているため、攻撃者は、処理エレメントPEのレジスタc
regの遷移の仕方を推測できても、レジスタc
regの遷移前の値が不明である。この結果、攻撃者が、各時刻t=2,3,4,5における遷移後の、レジスタc
regの値を予想するのが困難になる。レジスタc
regの値を予想できないことで、ニューラルネットワークの重みを示す第2入力データの値を求めることも困難になる。
【0067】
本実施形態のように、レジスタcregに乱数をセットすることで、その後のレジスタcregの値が予測困難になる。本実施形態においては、前述のように、レジスタcregに乱数をセットする第1処理は、単位演算の繰り返しの開始前に行われ、乱数を減算する第2処理は単位演算の繰り返し終了後に行われる。これにより、レジスタcregの全ての時刻における値を予測困難にできる。ただし、第1処理と第2処理の実行タイミングはこれらに限られない。例えば、少なくとも1回の単位演算を行った後に、レジスタcregの値に乱数を加算してもよい。また、レジスタcregの値から乱数を減算した後に、少なくとも1回の単位演算を実行してもよい。
【0068】
なお、
図7では、乱数R
1×R
4は、二つの乱数R
1,R
4の乗算値として与えられる。乱数が乗算値であることで、乱数の値の範囲を大きくすることができる。例えば、乱数R1,R4がそれぞれ8ビットである場合、乗算値である乱数R
1×R
4は16ビットの値になる。乱数は、ビット数が大きいほど、推測が困難になる。乗算値である乱数R
1×R
4は、乱数生成器150によって生成した第1乱数R
1と第2乱数R
4とを、処理エレメントPEの乗算器501によって乗算することで得られる。
【0069】
本実施形態において、レジスタcregに乱数をセットする第1処理は、乗算器501によって乱数R1×R4を求め、乗算器501から出力された乱数R1×R4を、レジスタcregの値(初期値:0)に加算し、加算結果(R1×R4+creg)をレジスタcregに保存することによって行われる。このように、本実施形態では、第1処理は、処理エレメントPEにおいて実行される単位演算と同じ処理である。したがって、第1処理の実行に処理エレメントPEを利用できる。この結果、第1処理の実行のために、演算装置100に別のハードウエアを設ける必要がない。
【0070】
また、本実施形態において、レジスタcregから乱数を減算する第2処理は、乱数R1,-R4から、前述の乱数R1×R4を符号反転した値-R1×R4を乗算器501によって求め、乗算器501から出力された符号反転値-R1×R4を、レジスタcregの値に加算し、加算結果(-R1×R4+creg)をレジスタcregに保存することによって行われる。このように、本実施形態では、第2処理は、処理エレメントPEにおいて実行される単位演算と同じ処理である。したがって、第2処理の実行に処理エレメントPEを利用できる。この結果、第2処理の実行のために、演算装置100に別のハードウエアを設ける必要がない。
【0071】
図8は、実施形態に係る行列計算ユニット110に与えられる第1データフロー及び第2データフローを示している。第1データフローは、第1入力データaの先頭と末尾に乱数を付加して構成されている。例えば、処理エレメントPE
11に与えられる第1データフローは、処理エレメントPE
11に与えられる順に、乱数R
1,第1入力データa
11,第1入力データa
12,第1入力データa
13,乱数R
1を有している。処理エレメントPE
21に与えられる第1データフローは、処理エレメントPE
21に与えられる順に、乱数R
2,第1入力データa
21,第1入力データa
22,第1入力データa
23,乱数R
2を有している。処理エレメントPE
31に与えられる第1データフローは、処理エレメントPE
31に与えられる順に、乱数R
3,第1入力データa
31,第1入力データa
32,第1入力データa
33,乱数R
3を有している。
【0072】
第2データフローは、第2入力データbの先頭と末尾に乱数を付加して構成されている。例えば、処理エレメントPE11に与えられる第2データフローは、処理エレメントPE11に与えられる順に、乱数R4,第2入力データb11,第2入力データb21,第2入力データb31,乱数-R4を有している。処理エレメントPE12に与えられる第2データフローは、処理エレメントPE12に与えられる順に、乱数R5,第2入力データb12,第2入力データb22,第2入力データb32,乱数-R5を有している。処理エレメントPE13に与えられる第2データフローは、処理エレメントPE13に与えられる順に、乱数R6,第2入力データb13,第2入力データb23,第2入力データb33,乱数-R6を有している。
【0073】
本実施形態においては、
図8に示すように、行列計算ユニット110に与えられる第1データフロー及び第2データフローに乱数を加えるだけで、行列計算ユニット110のハードウエア構成を変更することなく、第1処理及び第2処理を実行できる。
【0074】
図4に示すデータフローの場合、
図9に示す従来の行列演算601が行われるのに対して、
図8に示すデータフローの場合、
図9に示すように乱数の加算(第1処理)及び減算(第2処理)を含む行列演算602が行われる。二つの行列演算601,602は等価である。行列演算602は、攻撃耐性を持つため、入力データb(ニューラルネットワークの重みなど)の漏洩を防止できる。
【0075】
図10は、実施形態に係る演算装置100による演算処理の手順を示す。
図10に示す演算手順は演算装置100が備えるシーケンサ180(
図2参照)によって制御される。
【0076】
まず、シーケンサ180は、演算装置100外部から、センサデータなどの入力データa(第1入力データ)と、重みb(第2入力データ)とを、取得する(ステップS11)。取得した第1入力データaは、入力データバッファ130に格納される。取得した第2入力データbは、重みバッファ140に格納される。さらに、シーケンサは、乱数生成器150によって生成した乱数R1,R2,R3を入力データバッファ130に格納させ、同じく乱数生成器150によって生成した,R4,R5,R6を重みバッファ140に格納させる(ステップS12)。
【0077】
続いて、シーケンサ180は、
図8に示すような第1データフロー及び第2データフローをスケジュールする(ステップS13)。第1データフローは、第1入力データaと乱数とからなる。第2データフローは、重みbと乱数とからなる。
【0078】
そして、シーケンサ180は、シストリックアレイを構成する複数の処理エレメントPEそれぞれに単位演算を順次実行させ、処理エレメントの出力cとなる累積値を生成させる(ステップS14)。処理エレメントPEで実行させる単位演算には、第1処理(乱数の加算)及び第2処理(乱数の減算)が含まれる
【0079】
そして、演算装置100は、累積値(出力c)から、ニューラルネットワークを構成する各ニューロン400の出力値hを生成する。
【0080】
以上によって、ニューラルネットワークのための行列演算処理が完了する。
【0081】
本実施形態によれば、レジスタcregの値の遷移がランダム化されるため、ニューラルネットワークのモデルパラメータ(重み)の保護を図ることができる。また、本実施形態によれば、従来の行列計算ユニット110をほとんど変更することなく、モデルパラメータ(重み)の保護を図ることができる。
【0082】
本実施形態によれば、
図9に示すように、行列積のサイズが乱数の分ほど大きくなるが、演算処理時間のオーバヘッドは非常に小さく、低コストでモデルパラメータ(重み)の保護を図ることができる。
【0083】
<3.付記>
本発明は、上記実施形態に限定されるものではなく、様々な変形が可能である。
【符号の説明】
【0084】
10 :センサシステム
100 :演算装置
101 :復号器
110 :行列計算ユニット
120 :ベクトル計算ユニット
130 :第1入力データバッファ
140 :第2入力データバッファ
150 :乱数生成器
160 :ホストインターフェース
170 :ダイレクトメモリアクセスエンジン
180 :シーケンサ
200 :処理回路
210 :外部インターフェース
220 :ホストCPU
230 :バス
240 :パラメータストレージ
250 :オフチップメモリ
300 :センサ
400 :ニューロン
501 :乗算器
502 :加算器
601 :行列演算
602 :行列演算
PE :処理エレメント
creg :レジスタ