(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022059923
(43)【公開日】2022-04-14
(54)【発明の名称】活性化関数演算方法、および活性化関数演算処理装置
(51)【国際特許分類】
G06N 20/00 20190101AFI20220407BHJP
G06N 3/08 20060101ALI20220407BHJP
【FI】
G06N20/00
G06N3/08
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2020167815
(22)【出願日】2020-10-02
(71)【出願人】
【識別番号】504159235
【氏名又は名称】国立大学法人 熊本大学
(74)【代理人】
【識別番号】100106909
【弁理士】
【氏名又は名称】棚井 澄雄
(74)【代理人】
【識別番号】100126664
【弁理士】
【氏名又は名称】鈴木 慎吾
(74)【代理人】
【識別番号】100188558
【弁理士】
【氏名又は名称】飯田 雅人
(74)【代理人】
【識別番号】100189337
【弁理士】
【氏名又は名称】宮本 龍
(72)【発明者】
【氏名】尼崎 太樹
(72)【発明者】
【氏名】上村 斗真
(72)【発明者】
【氏名】中原 康宏
(72)【発明者】
【氏名】飯田 全広
(57)【要約】
【課題】従来より回路面積の削減を行うことができる活性化関数演算方法、および活性化関数演算処理装置を提供することを目的とする。
【解決手段】活性化関数演算方法は、活性化関数演算処理装置が、活性化関数への入力ビットを上位ビットより下位ビットを少なくし、所定の条件を満たすように真理値表に対応する出力ビット毎の二次元座標のグラフの入力と出力それぞれの分割数を設定し、分割数に基づいて真理値表を作成し、作成された真理値表をLUT(ルックアップテーブル)に記憶する。
【選択図】
図18
【特許請求の範囲】
【請求項1】
活性化関数演算処理装置が、
活性化関数への入力ビットを上位ビットより下位ビットを少なくし、所定の条件を満たすように真理値表に対応する出力ビット毎の二次元座標のグラフの入力と出力それぞれの分割数を設定し、前記分割数に基づいて前記真理値表を作成し、作成された前記真理値表をLUT(ルックアップテーブル)に記憶する、
活性化関数演算方法。
【請求項2】
前記所定の条件は、前記グラフにおいて分割された各マス目を前記活性化関数が通る領域が列ごとに1つのみである、
請求項1に記載の活性化関数演算方法。
【請求項3】
前記活性化関数演算処理装置が、前記活性化関数を近似化する、
請求項1または請求項2に記載の活性化関数演算方法。
【請求項4】
前記活性化関数演算処理装置が、
前記所定の条件を満たさない場合に、入力ビットの下位ビットのビット数を変更する、
請求項1から請求項3のうちのいずれか1項に記載の活性化関数演算方法。
【請求項5】
前記入力ビットは、8ビットの場合、最下位のビットが1ビットであり、最下位から2ビット目が2ビットであり、最下位から3ビット目が3ビットであり、最下位から4ビット目が4ビットであり、最下位から5ビット目が5ビットであり、最下位から6ビット目が6ビットであり、最下位から7ビット目が7ビットであり、最上位のビットが8ビットである、
請求項1から請求項4のうちのいずれか1項に記載の活性化関数演算方法。
【請求項6】
前記入力ビットが8ビットの場合、変更後のビット数が、最下位のビットが2ビットであり、最下位から2ビット目が3ビットであり、最下位から3ビット目が4ビットであり、最下位から4ビット目が5ビットであり、最下位から5ビット目が6ビットであり、最下位から6ビット目が7ビットであり、最下位から7ビット目が8ビットであり、最上位のビットが8ビットである、
請求項4に記載の活性化関数演算方法。
【請求項7】
前記活性化関数は、線形関数、非線形関数、傾きが変化する関数、ReLU、Leaky ReLU、Hard Sigmoid、Hard tanhのうちの少なくとも1つである、
請求項1から請求項6のうちのいずれか1項に記載の活性化関数演算方法。
【請求項8】
学習の際に用いられる活性化関数を取得する取得部と、
取得された前記活性化関数を必要に応じて近似する近似部と、
前記活性化関数に基づいて、前記活性化関数を真理値表で表したときに対応するグラフの分割数を設定する設定部と、
設定された前記分割数のグラフにおいて前記活性化関数の入力と出力それぞれのビットで条件を満たしているか否かを確認する確認部と、
前記入力と前記出力の関係の真理値表を作成する真理値表作成部と、
作成された前記真理値表をLUT記憶部に記憶させる書込部と、
を備える活性化関数演算処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、活性化関数演算方法、および活性化関数演算処理装置に関する。
【背景技術】
【0002】
ニューラルネットワークで用いられる活性化関数は、モデルに非線形分離性をもたせる重要な部分を担い、シグモイド関数やtanh関数のように非線形式が用いられてきた。近年の畳み込みニューラルネットワーク(以下CNN)における活性化関数としては、例えばReLU関数が選択肢となる。ReLU関数は、入力変数が負において出力は0で、入力変数が正においては傾き1、切片0の線形関数での出力値となる。しかしながら、近年、活性化関数としては、MobileNet V3におけるswishのようなReLU関数以外の複雑な非線形関数が用いられるようになってきた。
【0003】
また、RNNのように畳み込みニューラルネットワーク以外のDNNモデルにおいては、シグモイド関数やtanh関数が用いられることが多い。例えば汎用AI(Artificial Intelligence)チップ用途のように、1個のLSIでCNN、RNNのDNNモデルを実装対象とした場合は、様々な活性化関数に対応したハードウェアが重要となる。
【0004】
例えば、特許文献1には、活性化関数の入力にlog2を適用することで、活性化関数内の乗算、除算を加算、減算に変換し小面積な回路で様々な活性化関数を実現する手法が提案されている。
また、特許文献2には、連続又は不連続な非線形関数を各範囲で線形近似して部分的線形関数を構築、部分的線形関数の部分集合である副関数を生成し、全副関数のコントリビューションの総和を計算することによって、近似した関数を出力する手法が提案されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2020-4398号公報
【特許文献2】特開平7-282038号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
AIエッジコンピューティングに代表されるように、AIチップはエッジ側で用いられることが多いため、活性化関数部には、高性能(小面積、低遅延、省電力)であることが求められる。しかしながら、従来技術では、活性化関数は非線形関数で表現されるため、算術演算式として回路化した場合、実装に要するハードウェアのリソースは膨大なものとなる課題があった。
【0007】
本発明は、上記の問題点に鑑みてなされたものであって、従来より回路面積の削減を行うことができる活性化関数演算方法、および活性化関数演算処理装置を提供することを目的とする。
【課題を解決するための手段】
【0008】
上記目的を達成するため、本発明の一態様に係る活性化関数演算方法は、活性化関数演算処理装置が、活性化関数への入力ビットを上位ビットより下位ビットを少なくし、所定の条件を満たすように真理値表に対応する出力ビット毎の二次元座標のグラフの入力と出力それぞれの分割数を設定し、前記分割数に基づいて前記真理値表を作成し、作成された前記真理値表をLUT(ルックアップテーブル)に記憶する。
【0009】
また、本発明の一態様に係る活性化関数演算方法において、前記所定の条件は、前記グラフにおいて分割された各マス目を前記活性化関数が通る領域が列ごとに1つのみであるようにしてもよい。
【0010】
また、本発明の一態様に係る活性化関数演算方法において、前記活性化関数演算処理装置が、前記活性化関数を近似化するようにしてもよい。
【0011】
また、本発明の一態様に係る活性化関数演算方法において、前記活性化関数演算処理装置が、前記所定の条件を満たさない場合に、入力ビットの下位ビットのビット数を変更するようにしてもよい。
【0012】
また、本発明の一態様に係る活性化関数演算方法において、前記入力ビットは、8ビットの場合、最下位のビットが1ビットであり、最下位から2ビット目が2ビットであり、最下位から3ビット目が3ビットであり、最下位から4ビット目が4ビットであり、最下位から5ビット目が5ビットであり、最下位から6ビット目が6ビットであり、最下位から7ビット目が7ビットであり、最上位のビットが8ビットであるようにしてもよい。
【0013】
また、本発明の一態様に係る活性化関数演算方法において、前記入力ビットが8ビットの場合、変更後のビット数が、最下位のビットが2ビットであり、最下位から2ビット目が3ビットであり、最下位から3ビット目が4ビットであり、最下位から4ビット目が5ビットであり、最下位から5ビット目が6ビットであり、最下位から6ビット目が7ビットであり、最下位から7ビット目が8ビットであり、最上位のビットが8ビットであるようにしてもよい。
【0014】
また、本発明の一態様に係る活性化関数演算方法において、前記活性化関数は、線形関数、非線形関数、傾きが変化する関数、ReLU、Leaky ReLU、Hard Sigmoid、Hard tanhのうちの少なくとも1つであるようにしてもよい。
【0015】
上記目的を達成するため、本発明の一態様に係る活性化関数演算処理装置は、学習の際に用いられる活性化関数を取得する取得部と、取得された前記活性化関数を必要に応じて近似する近似部と、前記活性化関数に基づいて、前記活性化関数を真理値表で表したときに対応するグラフの分割数を設定する設定部と、設定された前記分割数のグラフにおいて前記活性化関数の入力と出力それぞれのビットで条件を満たしているか否かを確認する確認部と、前記入力と前記出力の関係の真理値表を作成する真理値表作成部と、作成された前記真理値表をLUT記憶部に記憶させる書込部と、を備える。
【発明の効果】
【0016】
本発明によれば、従来より回路面積の削減を行うことができる。
【図面の簡単な説明】
【0017】
【
図1】第1実施形態に係る非線形関数の演算処理装置の構成例を示すブロック図である。
【
図2】比較例におけるDNNをFPGAに実装する例を示すイメージ図である。
【
図4】比較例の入力が8ビット、出力が8ビットのLUTの処理を説明するための図である。
【
図5】第1実施形態に係るLUTの入力と出力を説明するための図である。
【
図6】入力信号uと出力信号zのビット幅と分割を説明するための図である。
【
図10】途中で傾きが変わる活性化関数で条件を満たす場合の一例を示す図である。
【
図12】Leaky ReLUの実装例を示す図である。
【
図13】シグモイド関数を線形近似したハードシグモイド関数の実装例を示す図である。
【
図14】Hard tanh関数の実装例を示す図である。
【
図15】出力z[1]、M=0、N=3かつz=uの場合の2次元座標グラフと真理値表の対応を示す図である。
【
図16】出力z[2]、M=0、N=3かつz=uの場合の2次元座標グラフと真理値表の対応を示す図である。
【
図17】出力z[3]、M=0、N=3かつz=uの場合の2次元座標グラフと真理値表の対応を示す図である。
【
図18】非線形関数の演算処理装置が記憶する情報例を示す図である。
【
図19】第2実施形態に係るLUTの入力と出力を説明するための図である。
【
図20】入力信号uと出力信号zのビット幅と分割を説明するための図である。
【
図21】M=1、N=3の場合を説明するための図である。
【
図22】活性化関数が領域を跨ぐ例を示す図である。
【発明を実施するための形態】
【0018】
以下、本発明の実施の形態について図面を参照しながら説明する。
【0019】
[第1実施形態]
図1は、本実施形態に係る活性化関数演算処理装置1の構成例を示すブロック図である。
図1のように、活性化関数演算処理装置1は、取得部11、近似部12、設定部13、確認部14、真理値表作成部15、書込部16、およびLUT記憶部17を備える。なお、
図1に示した構成例は一例であり、これに限らない。
【0020】
活性化関数演算処理装置1は、例えばFPGA(Field Programmable Gate Array)であってもよく、LUT記憶部17以外は外部装置(例えばCPU(中央演算装置)、コンピュータ)であってもよい。
【0021】
取得部11は、学習の際に用いられる活性化関数を取得する。
【0022】
近似部12は、取得された活性化関数を必要に応じて近似する。また、近似部12は、確認部14が出力する変更指示に基づいて活性化関数を近似する。
【0023】
設定部13は、活性化関数または近似された活性化関数に基づいて、活性化関数を真理値表で表したときに対応するグラフの分割数を設定する。また、設定部13は、確認部14が出力する変更指示に基づいて、設定した分割数を変更する。
【0024】
確認部14は、設定した分割数のグラフにおいて活性化関数の入力と出力それぞれのビットで条件を満たしているか否かを確認する。確認部14は、条件を満たしていない場合、近似部12と設定部13に変更指示を出力する。
【0025】
真理値表作成部15は、入力と出力の関係の真理値表を作成する。
【0026】
書込部16は、作成された真理値表をLUT記憶部17に記憶させる。
【0027】
LUT記憶部17は、LUT(ルックアップテーブル)として真理値表を記憶する。
【0028】
<DNNをFPGAに実装する例>
まず、DNN(Deep Neural Network)をFPGA(Field Programmable Gate Array)に実装する例を説明する。
図2は、比較例におけるDNNをFPGAに実装する例を示すイメージ図である。
図2において、Convは畳み込み層であり、Poolはプーリング層であり、FC(Fully Connected layer)は全結合層である。
GPU(Graphics Processing Unit)などで学習を行う(g1)場合は、FPGAなどでハードウェアによる実装(g2)と、FPGAなどでソフトウェアによる実現がある。このような構成において、本実施形態では、演算量の多い活性化関数のLUT(Look-Up Table)の処理において、入力ビット数等の削減を行うことで、LUTに使用する回路面積を削減する。
【0029】
<活性化関数>
活性化関数について説明する。
図3は、活性化関数のブロック図である。活性化関数は、ニューロン部で計算された値(例、CNN(Convolutional Neural Network)では積和演算)uを入力とし、出力zを生成する。活性化関数は、線形変換または非線形変換を行う。
【0030】
ハードウェアで活性化関数を実現する場合、その関係は、真理値表(LUT;ルックアップテーブル)を用いて表現される。回路化の際は、例えばFPGAで用いられるLUT方式を用いることで活性化関数を実現できる。しかし、n入力LUT方式では、入力のビットNに対し、構成メモリは2
N必要となる。
図4は、比較例の入力が8ビット、出力が8ビットのLUTの処理を説明するための図である。
図4において、入力の最上位ビットはu[1]で、最下位ビットはu[N]である。
図4の構成では、出力z[1](g11)~z[8](g18)すべてにおいて、入力uは8ビット(u[1], …,u[8])である。このため、
図4のように、例えば8ビットのzとuにおいて、全構成メモリ数は8×2
8=2,048必要である。
【0031】
図5は、本実施形態に係るLUTの入力と出力を説明するための図である。
図5のように、本実施形態では、zの上位ビットほど入力uのビットを削減する。最上位のz[1](g21)の場合は、入力uをu[1]のように8ビットから1ビットに削減する。z[2](g22)の場合は、入力uをu[1],u[2]のように8ビットから2ビットに削減する。z[3](g23)の場合は、入力uをu[1],u[2],u[3]のように8ビットから3ビットに削減する。z[4](g24)の場合は、入力uをu[1],u[2],u[3],u[4]のように8ビットから4ビットに削減する。z[5](g25)の場合は、入力uをu[1],u[2],u[3],u[4],u[5]のように8ビットから5ビットに削減する。z[6](g26)の場合は、入力uをu[1],u[2],u[3],u[4],u[5],u[6]のように8ビットから6ビットに削減する。z[7](g27)の場合は、入力uをu[1],u[2],u[3],u[4],u[5],u[6],u[7]のように8ビットから7ビットに削減する。最下位のz[8](g28)の場合は、入力uをu[1]~u[8]の8ビットのままとする。
【0032】
この構成の場合、全構成メモリ数は510(=2
1+2
2+2
3+2
4+2
5+2
6+2
7+2
8)となり、
図4の比較例の構成と比較して約75%(=(1-510/2048)×100)削減できる。
図5の構成において、3ビット(N=3)の場合は、例えばFF(フリップフロップ)回路14(=2
1+2
2+2
3)個で実現できる。ただし、表現可能な論理関数には制限が生じる(実施形態ではこれを柔軟性とよぶ)。また、
図5に示した構成は一例であり、これに限らない。各出力ビットに対して入力となるビットは様々な組み合わせが可能である。
【0033】
各出力zビットに対して全入力uビットを入れる
図4の比較例の構成は柔軟性が最も高いが、性能は低い(特に回路の面積が大きい)。一方、
図5のように、各出力zビットに対して入力ビットuを制限するほど柔軟性は低くなるが、性能は高くなる(回路面積を小さくできる)。このように柔軟性と性能にはトレードオフが存在し、DNNの活性化関数をサポートできる柔軟性を保ちつつ、性能を保持させることが重要である。活性化関数が、例えば単調関数であれば、
図5のように入力を順次減らすことが有効である。
【0034】
次に、
図5の構成の場合に実現可能な活性化関数の例を説明する。
図6は、入力信号uと出力信号zのビット幅と分割を説明するための図である。
図6のように、入力信号uと出力信号zのビット幅をNとする。このとき、活性化関数の2次元領域を2
N×2
N分割する。すなわち最上位ビットでは2×2(g31)、最上位から2ビット目では2
2×2
2=4×4(g32)、最下位ビットでは2
N×2
N分割になる。このように、まず、出力ビット数N全てについて2次元座標に展開する。この場合、入力ビット幅=出力ビット幅=Nの場合の条件(ただし各LUTの入力数は最上位ビットから1,2,…,Nとする)、すなわち実装可能な活性化関数条件は、各分割で活性化関数が通る領域が列ごとに1つだけであることである。
【0035】
この条件の具体例を説明する。
図7は、N=3の場合を説明するための図である。なお、
図7では、説明を簡単にするため3ビットの例を示している。N=3の場合、
図7のようにz=uの関係であれば、条件を満たすため実装可能である。すなわち、最上位ビット(g41)ではz=uの活性化関数が列ごとに1つずつであり、最上位から2ビット(g42)ではz=uの活性化関数が列ごとに1つずつであり、最上位から3ビット目(g43)ではz=uの活性化関数が列ごとに1つずつである。この関係は、最下位ビットの2
N×2
N分割でも同様である。なお、z=2
(-a)u(ただしaは整数)である場合にも実装可能である。
【0036】
図8は、実装可能な他の例を示す図である。なお、
図8では、説明を簡単にするため3ビットの例を示している。N=3であり、分割は
図7と同じである。この場合は、中心点がz=0.5、傾き0.5であり、すなわちz=0.5u+0.5である。そして、最上位ビット(g51)、最上位から2ビット(g62)、および最上位から3ビット目(g63)では、列ごとに1つずつである。この場合も、条件に合致するため実装可能である。このように、正負が変わらず、切片が2のべき乗である場合も実装可能である。
【0037】
次に、実装できない場合の例を説明する。
図9は、実装できない場合の例を示す図である。N=3であり、分割は
図7と同じである。なお、
図9では、説明を簡単にするため3ビットの例を示している。この場合、最上位ビット(g61)ではz=uの活性化関数が列ごとに1つずつであるが、最上位から2ビット(g62)と最上位から3ビット目(g63)ではz=uの活性化関数が列ごとに2つずつである。すなわち、z=2uの場合、2×2の分割では条件が成り立っているが、4×4と8×8の分割では関数が列ごとに2つの領域にまたがって存在しているため条件が成り立たず表現不可能である。このように、活性化関数が部分的に線形性を持ち、勾配の絶対値が1よりも大きい場合は、表現不可能(実装不可能)である。
【0038】
図7、
図8では、活性化関数が連続した直線間数の例を説明したが、これに限らない。
図10は、途中で傾きが変わる活性化関数で条件を満たす場合の一例を示す図である。なお、
図10では、説明を簡単にするため3ビットの例を示している。N=3であり、分割は
図7と同じである。この場合も、最上位ビット(g71)~最上位から3ビット目(g73)では、列ごとに1つずつである。このように、条件を満たす限り不連続な活性化関数、途中で傾きが変わる活性化関数でも実装可能である。
【0039】
図11は、ReLUの場合を示す図である。N=3であり、分割は
図7と同じである。なお、
図11では、説明を簡単にするため3ビットの例を示している。この場合も、最上位ビット(g81)~最上位から3ビット目(g83)では、列ごとに1つずつである。このように、条件に合致するため、このような活性化関数でも実装可能である。
【0040】
図12は、Leaky ReLUの実装例を示す図である。なお、
図12では、説明を簡単にするため3ビットの例を示している。N=3であり、分割は
図7と同じである。この場合も、最上位ビット(g91)~最上位から3ビット目(g93)では、列ごとに1つずつである。この例では、横軸負の領域での勾配が2
(-a)(aは整数)である場合、実装可能である。なお、
図12は、a=2の例である。
【0041】
図13は、シグモイド関数を線形近似したハードシグモイド(Hard Sigmoid)関数の実装例を示す図である。なお、
図13では、説明を簡単にするため3ビットの例を示している。N=3であり、分割は
図7と同じである。この場合も、最上位ビット(g101)~最上位から3ビット目(g103)では、列ごとに1つずつである。なお、ハードシグモイドを実装する場合は、中心点がz=0.5となるように傾き0.25となるよう近似した。このように、勾配が0.25でかつスケーリングが2のべき乗で行われる場合に表現可能である。
【0042】
図14は、Hard tanh関数の実装例を示す図である。なお、
図14では、説明を簡単にするため3ビットの例を示している。N=3であり、分割は
図7と同じである。この場合も、最上位ビット(g111)~最上位から3ビット目(g113)では、列ごとに1つずつである。この場合も、条件に合致するため実装可能である。
【0043】
<記憶する情報例>
ここで、LUT記憶部17が記憶する情報例を、
図15~
図17を用いて説明する。
図15は、出力z[1]、M=0、N=3かつz=uの場合の2次元座標グラフg121と真理値表g122の対応を示す図である。なお、2次元座標グラフg121においてハッチングで示す部分((u,z)=(0,0)、(1,1))は活性化関数が通る列を示し、真理値表g122においてハッチングで示す部分はグラフで活性化関数が通る列に対応する入力uと出力zを示している。なお、u、z軸方向は、負から正の方向に向かって、順に0、1に対応している。
【0044】
図16は、出力z[2]、M=0、N=3かつz=uの場合の2次元座標グラフg131と真理値表g132の対応を示す図である。なお、2次元座標グラフg131においてハッチングで示す部分((u,z)=(00,00)、(01,01)、(10,10)、(11,11))は活性化関数が通る列を示し、真理値表g132においてハッチングで示す部分はグラフで活性化関数が通る列に対応する入力uと出力zを示している。なお、u、z軸方向は、負から正の方向に向かって、順に00、01、10、11に対応している。
【0045】
図17は、出力z[3]、M=0、N=3かつz=uの場合の2次元座標グラフg141と真理値表g142の対応を示す図である。なお、2次元座標グラフg141においてハッチングで示す部分((u,z)=(000,000)、(001,001)、(010,010)、(011,011)、(100,100)、(101,101)、(110,110)、(111,111))は活性化関数が通る列を示し、真理値表g142においてハッチングで示す部分はグラフで活性化関数が通る列に対応する入力uと出力zを示している。なお、u、z軸方向は、負から正の方向に向かって、順に000、001、010、011、100、101、110、111に対応している。
【0046】
<処理手順>
ここで、処理手順例を説明する。
図18は、本実施形態に係る非線形関数演算方法の処理手順例のフローチャートである。
【0047】
(ステップS1)取得部11は、学習際に用いられる活性化関数を取得する。
【0048】
(ステップS2)近似部12は、取得された活性化関数を必要に応じて近似する。
【0049】
(ステップS3)設定部13は、活性化関数または近似された活性化関数に基づいて、後述する分割数を設定する。
【0050】
(ステップS4)確認部14は、設定した分割数のグラフにおいて活性化関数の入力と出力それぞれのビットで所定の条件を満たしているか否かを確認する。確認部14は、所定の条件を満たしていない場合(ステップS4;NO)、近似部12と設定部13に変更指示を出力する。そして、近似部12は、確認部14が出力する変更指示に基づいて活性化関数を近似する。設定部13は、確認部14が出力する変更指示に基づいて、設定した分割数を変更する。なお、活性化関数演算処理装置1は、入力ビット数を、上述したように上位ビットより下位ビットほど削減する。なお、確認部14は、所定の条件を満たしていない場合(ステップS4;NO)、)確認部13は、下位ビットのビット数を増やす変更指示を近似部12と設定部13に出力する。なお、下位ビットのビット数の変更については、第2実施形態で説明する。
【0051】
(ステップS5)所定の条件を満たしていない場合(ステップS4;YES)、真理値表作成部15は、入力と出力の関係の真理値表を作成する。
【0052】
(ステップS6)書込部16は、作成された真理値表をLUT記憶部17に記憶させる。
【0053】
ここで、本実施形態を適用した結果の一例を説明する。
本実施形態によって活性化関数を近似した結果、CIFAR-100データセットでのResNet、VGGNetに関する認識精度において、近似をしない場合と比較して性能劣化を1%以下に抑えることができた。
【0054】
本実施形態の活性化関数演算処理装置1は、
図15~
図17に示したような分割数に応じ使用する関数に応じた真理値表を記憶する。このように、本実施形態の活性化関数演算処理装置1は、LUT(ルックアップテーブル)のメモリ内の値を変更することで回路構造を変更せずとも様々な活性化関数に対応可能である。
【0055】
[第2実施形態]
本実施形態では、出力uの各ビットに対し入力uのビットを増やした例を説明する。
例えば、入力ビット数と出力ビット数それぞれをNビットとする場合は、付加ビットをMとすると、出力の最上位ビットz[1]に対し、入力はu[1]、u[2]、…、u[1+M]となる。
【0056】
図19は、本実施形態に係るLUTの入力と出力を説明するための図である。なお、
図19は、N=8、M=1の場合の例である。
図19のように、本実施形態では、zの上位ビットほど入力uのビットを削減するが、第1実施形態とは削減するビット数が異なる。最上位のz[1](g151)の場合は、入力uをu[1],u[2]のように8ビットから2ビットに削減する。z[2](g152)の場合は、入力uをu[1],u[2],u[3]のように8ビットから3ビットに削減する。z[3](g153)の場合は、入力uをu[1],u[2],u[3],u[4]のように8ビットから4ビットに削減する。z[4](g154)の場合は、入力uをu[1],u[2],u[3],u[4],u[5]のように8ビットから5ビットに削減する。z[5](g155)の場合は、入力uをu[1],u[2],u[3],u[4],u[5],u[6]のように8ビットから6ビットに削減する。z[6](g156)の場合は、入力uをu[1],u[2],u[3],u[4],u[5],u[6],u[7]のように8ビットから7ビットに削減する。z[7](g157)と最下位のz[8](g28)の場合は、入力uをu[1]~u[8]の8ビットのままとする。
【0057】
この構成の場合、全構成メモリ数は764(=2
2+2
3+2
4+2
5+2
6+2
7+2
8+2
8)となり、
図4の比較例の構成と比較して約63%(=(1-764/2048)×100)削減できる。
図21の構成において、3ビット(N=3)の場合は、例えばFF(フリップフロップ)回路20(=2
2+2
3+2
3)個で実現できる。ただし、表現可能な論理関数には制限が生じる。また、
図19に示した構成は一例であり、これに限らない。各出力ビットに対して入力となるビットは様々な組み合わせが可能である。
【0058】
次に、実装条件を説明する。
図20は、入力信号uと出力信号zのビット幅と分割を説明するための図である。入力信号uと出力信号zのビット幅をNとする。このとき、活性化関数の2次元領域を2
NM×2
N分割する。すなわち最上位ビットでは2M×2(g161)、最上位から2ビット目では4M×4(g162)、最下位ビットでは2
NM×2
N分割になる。このように、まず、出力ビット数N全てについて2次元座標に展開する。この場合、入力ビット幅=出力ビット幅=Nの場合の条件(ただし各LUTの入力数は最上位ビットから1+M,2+M,…,Nとする)、すなわち実装可能な活性化関数条件は、各分割で活性化関数が通る領域が列ごとに1つだけであることである。
【0059】
この条件の具体例を説明する。
図21は、M=1、N=3の場合を説明するための図である。なお、
図21では、説明を簡単にするため3ビットの例を示している。M=1、N=3の場合、
図21のようにz=2uの関係であれば、条件を満たすため実装可能である。すなわち、最上位ビット(g171)、最上位から2ビット(g172)、最上位から3ビット目(g173)それぞれでは、z=2uの活性化関数が列ごとに1つずつである。この関係は、最下位ビットの2
N×2
NM分割でも同様である。このような構成によれば、
図9を用いて説明したM=0の時に実現できなかたy=2xが実装可能になる。なお、傾きが負である場合にも実装可能である。
【0060】
<変形例>
上述したように、グラフを分割し、分割した列の1つだけを通る活性化関数であれば実装可能である。しかしながら、これらの条件を満たさない活性化関数も存在しうる。
【0061】
図22は、活性化関数g191が領域を跨ぐ例を示す図である。なお、
図22では、説明を簡単にするため3ビットの例を示している。
図22のように、最上位から3ビット目(g183)ではz=uの活性化関数が列ごとに1つずつである。しかし、最上位ビット(g181)では活性化関数が(u,z)=(0,0)、(0,1)で2つの列を跨いでいる。また、最上位ビットから2ビット(g182)では活性化関数が(u,z)=(00,00)、(00,01)、(01,01)、(01,10)、(10,10)、(10,11)、および(11,11)で2つの列を跨いでいる。
【0062】
このため、活性化関数演算処理装置1は、このように活性化関数が2つ以上の列をまたぐ場合、活性化関数を近似(g192)する。このように近似化することによって、最上位ビット(g181)、最上位から2ビット(g182)、最上位から3ビット目(g183)それぞれでは、z=2uの活性化関数が列ごとに1つずつになるこの結果、条件に合致するため実装可能である。
【0063】
以上のように、各実施形態、変形例によれば、活性化関数演算処理装置1は、LUT(ルックアップテーブル)のメモリ内の値を変更することで回路構造を変更せずとも様々な活性化関数に対応可能である。また、各実施形態、変形例によれば、LUTのメモリの割り当てによって関数を表現しているので、回路面積の削減できる。
【0064】
なお、上述した各実施形態、変形例は、監視カメラ、組込みカメラ、仮想現実/拡張現実システム、IoT/ビッグデータ処理等に適用できる。
また、低電力、かつ多様なDNNアルゴリズムに対応した各実施形態、変形例をエッジ側のアクセラレータとして使用することで以下の応用が考えられる。
(1)監視カメラ:対象物をカメラが認識することで、行動監視などを同時並列に実行可能。
(2)組み込みカメラ:サーバに接続することなく顔認証が可能となり、製品が持ち主を認識できるようになる。
(3)仮想現実/拡張現実システム:一般的な30[fps]の処理を想定すると、1枚の処理にかかる時間は約33[ms]である。エッジ側で処理を行うことで低レイテンシな処理が可能となり、仮想現実酔い等を防ぐことができる。
(4)IoT/ビッグデータ処理:各種センサをエッジ側で統合することで異常検知に用いる。
【0065】
これらは主に画像処理が中心であるが、エッジ端末では画像以外の時系列処理にも対応するため、CNNやRNN(Recurrent Neural Network)など多岐にわたったDNNモデルの活性化関数への対応が可能である。上述した実施形態または変形例によれば、現状の多くのAIチップがCNNを対象としているが、様々な活性化関数に対応したエッジ端末が実現することで、接続センサ搭載DNNモデルに依存しないエッジ端末が実現可能となる。
【0066】
なお、上述した実施形態または変形例は、CNN、RNN、DNNのいずれにも適用可能である。また、上述した実施形態または変形例は、活性化関数が非線形関数に限らず線形関数であってもよい。また、活性化関数は、ReLU、Leaky ReLU、Hard Sigmoid、Hard tanhに限らず、他の関数であってもよい。さらに、活性化関数は、曲線を含むものであってもよい。その場合は、近似部12(
図1)が活性化関数の全てまたは一部を近似するようにしてもよい。
【0067】
なお、上述した実施形態または変形例では、説明を簡略化するために、活性化関数の入出力が8ビットの例を説明したが、これに限らない。入力は8ビット未満であってもよく、8ビットより大きくてもよい。
【0068】
以上、本発明の実施形態と変形例を説明したが、これらの実施形態と変形例は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態と変形例は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更、組合わせを行うことができる。これら実施形態及びその変形例は、発明の範囲や要旨に含まれると同時に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【0069】
1…活性化関数演算処理装置、11…取得部、12…近似部、13…設定部、14…確認部、15…真理値表作成部、16…書込部、17…LUT記憶部