(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-07-19
(45)【発行日】2023-07-27
(54)【発明の名称】ニューラルネットワークの演算装置
(51)【国際特許分類】
G06N 3/063 20230101AFI20230720BHJP
【FI】
G06N3/063
(21)【出願番号】P 2019056641
(22)【出願日】2019-03-25
【審査請求日】2021-10-29
(73)【特許権者】
【識別番号】519084397
【氏名又は名称】株式会社エヌエスアイテクス
(73)【特許権者】
【識別番号】000004260
【氏名又は名称】株式会社デンソー
(74)【代理人】
【識別番号】100113549
【氏名又は名称】鈴木 守
(74)【代理人】
【識別番号】100115808
【氏名又は名称】加藤 真司
(74)【代理人】
【識別番号】230125313
【氏名又は名称】新藤 圭介
(72)【発明者】
【氏名】石渡 一嘉
(72)【発明者】
【氏名】鈴木 亜季
【審査官】今城 朋彬
(56)【参考文献】
【文献】米国特許出願公開第2019/0042922(US,A1)
【文献】特表2011-504274(JP,A)
【文献】特開2019-003547(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
(57)【特許請求の範囲】
【請求項1】
複数種類の活性化関数について、前記活性化関数を用いた演算を行う活性化関数回路(208)を有する演算ユニット(206)と、
スレッドに対応付けて前記活性化関数の種類の指定を記憶するレジスタ(214)と、
を備え
、
前記演算ユニットに対して送信されるスレッドの命令コードにおいて前記活性化関数の種類が指定されている場合には、前記演算ユニットは、前記レジスタでの指定にかかわらず、前記命令コードで指定された前記活性化関数を用いて演算を行う、
ニューラルネットワークの演算装置(116)。
【請求項2】
前記演算ユニットに対して送信されるスレッドの命令コードにおいて前記活性化関数の種類の指定として予め定められた所定値が指定されている場合、前記演算ユニットは、前記レジスタにて前記スレッドに対応付けて指定された前記活性化関数を用いて演算を行う請求項1に記載のニューラルネットワークの演算装置。
【請求項3】
スレッドに対応付けて前記活性化関数の係数の指定を記憶するレジスタ(216)をさらに備える請求項1
又は2に記載のニューラルネットワークの演算装置。
【請求項4】
前記演算ユニットに対して送信されるスレッドの命令コードにおいて前記活性化関数の係数の指定として予め定められた所定値が指定されている場合、前記演算ユニットは、前記レジスタにて前記スレッドに対応付けて指定された前記活性化関数の係数を用いて演算を行う請求項
3に記載のニューラルネットワークの演算装置。
【請求項5】
複数種類の活性化関数について、前記活性化関数を用いた演算を行う活性化関数回路(208)を有する演算ユニット(206)と、
スレッドに対応付けて前記活性化関数の種類の指定を記憶するレジスタ(214)と、
スレッドに対応付けて前記活性化関数の係数の指定を記憶するレジスタ(216)と、
を備え、
前記演算ユニットに対して送信されるスレッドの命令コードにおいて前記活性化関数の係数が指定されている場合には、前記演算ユニットは、前記レジスタでの指定にかかわらず、前記命令コードで指定された前記活性化関数の係数を用いて演算を行う
、ニューラルネットワークの演算装置。
【請求項6】
複数種類の前記活性化関数回路のうちの少なくとも1つの前記活性化関数回路は、複数のデータを並行してベクトル演算する請求項1から
5のいずれかに記載のニューラルネットワークの演算装置。
【請求項7】
前記演算ユニットは、複数種類の前記活性化関数のそれぞれの微分関数を演算する複数種類の活性化関数の微分関数回路(210)をさらに備え、
前記活性化関数と前記活性化関数の微分関数とを用いて演算を行う請求項1から
6のいずれかに記載のニューラルネットワークの演算装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ニューラルネットワークの演算装置に関する。
【背景技術】
【0002】
従来、ニューラルネットワークの演算装置では、複数の活性化関数が使われることがある(例えば、特許文献1参照)。活性化関数は、例えば、シグモイド関数、Softmax関数、ReLU(Rectified Linear Unit)関数、恒等関数等が使われている。計算量の削減のため、日々新たな活性化関数が考案されている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
従来のニューラルネットワークの演算装置では、処理を高速化するために活性化関数に関するプログラム専用のハードウェアを設計し活性化関数をハードウェア化することがあった。この場合、新たな活性化関数への対応が難しくなるという課題があった。
【0005】
本発明は、活性化関数をハードウェア化して処理を高速化し、かつ適用する活性化関数を容易に変更できるニューラルネットワークの演算装置を提供することを目的とする。
【課題を解決するための手段】
【0006】
本開示は上記課題を解決するために以下の技術的手段を採用する。特許請求の範囲及びこの項に記載した括弧内の符号は、ひとつの態様として後述する実施の形態に記載の具体的手段との対応関係を示す一例であって、本発明の技術的範囲を限定するものではない。
【0007】
上記目的を達成するために、本発明は、ニューラルネットワークの演算装置(116)であって、複数種類の活性化関数について、前記活性化関数を用いた演算を行う活性化関数回路(208)を有する演算ユニット(206)と、スレッドに対応付けて前記活性化関数の種類の指定を記憶するレジスタ(214)と、を備える。
【発明の効果】
【0008】
本開示によれば、活性化関数をハードウェア化して処理を高速化し、かつ活性化関数の種類をレジスタで指定するので、適用する活性化関数を容易に変更できる。
【図面の簡単な説明】
【0009】
【
図1】本発明の実施の形態に係る演算装置の構成を示すブロック図である。
【
図2】本発明の実施の形態に係る演算装置が処理するスレッドを説明するための図である。
【
図3】本発明の実施の形態に係るデータフロー型プロセッサの構成を示すブロック図である。
【
図4】本発明の実施の形態に係るPE(Processing Element)の構成を示すブロック図である。
【
図5】(a)本発明の実施の形態に係る活性化関数としてParametric ReLU関数を指定するアセンブラコードを示す図である。 (b)本発明の実施の形態に係る活性化関数として、Hyperbolic Tangent関数を指定するアセンブラコードを示す図である。
【
図6】(a)本発明の実施の形態に係る活性化関数としてParametric ReLU関数とその微分関数のグラフを示す図である。 (b)本発明の実施の形態に係る活性化関数としてHyperbolic Tangent関数とその微分関数のグラフを示す図である。
【発明を実施するための形態】
【0010】
以下、図面を参照して本発明の実施の形態を説明する。なお、以下に説明する実施の形態は、本発明を実施する場合の一例を示すものであって、本発明を以下に説明する具体的構成に限定するものではない。本発明の実施にあたっては、実施の形態に応じた具体的構成が適宜採用されてよい。
【0011】
[演算装置10の構成]
図1は、本発明の実施の形態に係る演算装置10の構成を示すブロック図である。演算装置10は、データフロー型プロセッサ100、ホストCPU(Central Processing Unit)200、システムバス300、ROM(Read Only Memory)400、RAM(Random Access Memory)500、外部インターフェイス600、イベントハンドラ700を有する。
【0012】
図2は、本発明の実施の形態に係る演算装置10が処理するスレッドを説明するための図である。
図2に示すように、プログラムコードは、データと処理とが分割されているグラフ構造を有している。このグラフ構造は、プログラムのタスク並列性、グラフ並列性を保持している。演算装置10は、このグラフ構造のプログラムを分割して得られた多量のスレッドを処理する。
【0013】
演算装置10が、例えば、畳み込みニューラルネットワーク(Convolutional Neural Network:CNN)における畳み込みやプーリング処理をするとき、データフロー型プロセッサ100に大きな負荷がかかる。演算装置10が、後述する活性化関数モジュール208や活性化関数の微分モジュール210を備え活性化関数のハードウェア化をすることで、このデータフロー型プロセッサ100にかかる大きな負荷を低減できる。
【0014】
図1に戻って説明を続ける。データフロー型プロセッサ100には、割込み処理を生成するイベントハンドラ700が接続されており、イベントハンドラ700が生成した割込みをサポートしている。データフロー型プロセッサ100の具体的な構成は、
図3を用いて後述する。
【0015】
ホストCPU200は、演算装置10の中央処理装置(CPU)である。ホストCPU200は、システムバス300を介して、演算装置10の各部と情報の授受が可能である。ホストCPU200が、ROM400又はRAM500に記憶されたプログラムを実行することにより、演算装置10の各部の機能を実現する。
【0016】
ROM400は、読み出し専用の不揮発性メモリである。RAM500は、読み書き用の揮発性メモリである。ROM400とRAM500とは、ホストCPU200が演算装置10の各部の機能を実現するためのプログラムを記憶する。ROM400とRAM500とは、データフロー型プロセッサ100の演算結果を記憶してもよい。
【0017】
外部インターフェイス600は、演算装置10が外部から情報を入力し、又は外部へ情報を出力する入出力装置である。外部インターフェイス600は、例えば、カメラ、超音波センサ等である。
【0018】
[データフロー型プロセッサ100の構成]
図3は、データフロー型プロセッサ100の構成を示すブロック図である。データフロー型プロセッサ100は、コマンドユニット102と、メモリサブシステム104と、スレッドスケジューラ112と、実行コア114とを有する。
【0019】
コマンドユニット102は、データフロー型プロセッサ100の機能の実行を指示する命令部である。コマンドユニット102は、ユーザが設定できるコンフィギュレーション(設定項目)のインターフェイスであるコンフィグインターフェイスと通信してもよい。コマンドユニット102は、データの読み出し命令、書き込み命令、消去命令等のコマンドを一時的に格納するコマンドバッファの機能を有してもよい。
【0020】
メモリサブシステム104は、RAM500と実行コア114との間に置かれるメモリのシステムである。メモリサブシステム104は、システムバスインターフェイス又はROMインターフェイスと通信してもよい。メモリサブシステム104は、アービタ106、L1キャッシュ108、L2キャッシュ110を有する。
【0021】
アービタ106は、PE116とL1キャッシュ108との間に配置され、複数のデータアクセス要求が競合したときに、優先度等を用いた予め定められた規則に従って調整する調整装置である。L1キャッシュ108は、RAM500よりも高速に読み書きできるメモリである。L2キャッシュ110は、L1キャッシュの下位にあるRAM500よりも高速に読み書きできるメモリである。
【0022】
スレッドスケジューラ112は、処理すべき優先度にしたがい複数スレッドを実行コア114に割り当てる、スレッドのスケジューラである。
【0023】
実行コア114は、スレッドの処理を実行する実行部である。実行コア114は、複数の演算器(Processing Element:PE)116を有する。PE116は、スカラ演算するスカラ演算器でもよいし、ベクトル演算するベクトル演算器でもよい。本実施の形態では、PE116は、少なくとも1つはベクトル演算器である。
【0024】
[PE116の構成]
図4は、本発明の実施の形態に係るPE116の構成を示すブロック図である。PE116は、命令デコーダ・制御部202、汎用レジスタファイル204、演算ユニット206、設定レジスタ212を有する。
【0025】
命令デコーダ・制御部202は、命令をデコードし、各部を制御する命令デコーダ・制御部である。命令デコーダ・制御部202は、汎用レジスタファイル204に対して演算に用いられるレジスタを指定し、設定レジスタ212に対して演算スレッドを指定し、演算ユニット206に対して演算に用いるモジュールを指定する。
【0026】
演算ユニット206は、入力データに基づいて出力データを生成する演算部である。上述したように、演算ユニット206は、命令デコーダ・制御部202が指定したレジスタの値に対して、命令デコーダ・制御部202が指定したモジュールを使用して演算する。本実施の形態では、演算ユニット206は、ベクトル演算を行う。演算ユニット206は、活性化関数モジュール208と活性化関数の微分モジュール210とを有する。
【0027】
活性化関数モジュール208は、活性化関数を演算に適用する活性化関数回路であり、ハードウェアによって構成されている。活性化関数モジュール208は、種類の異なる複数の活性化関数を有する。
【0028】
活性化関数は、例えば、恒等関数、ステップ関数、線形関数、ソフトプラス関数、シグモイド関数、ハードシグモイド関数、Hyperbolic Tangent関数、ソフトサイン関数、ReLU関数、Leaky ReLU関数、Parametric ReLU関数、Thresholded ReLU関数、eLU(Exponential Linear Units)関数、SeLU(Scaled Exponential Linear Unit)関数、Softmax関数、Gumbel-Softmax関数、Swish関数等がある。
図4では、活性化関数モジュール208が、活性化関数A、活性化関数B、活性化関数Cの3つの活性化関数を有する例を挙げた。
【0029】
活性化関数の微分モジュール210は、活性化関数の微分を演算に適用する活性化関数の微分関数回路であり、ハードウェアによって構成されている。活性化関数の微分モジュール210は、種類の異なる複数の活性化関数の微分関数を有する。活性化関数の微分モジュール210が演算に適用する複数の活性化関数の微分関数は、例えば、活性化関数モジュール208が記憶する複数の活性化関数を微分した関数である。
図4では、活性化関数の微分モジュール210が、活性化関数Aの微分関数、活性化関数Bの微分関数、活性化関数Cの微分関数を有する例を挙げた。
【0030】
なお、本実施の形態では、演算ユニット206が活性化関数モジュール208と活性化関数の微分モジュール210を有する例を挙げたが、演算ユニット206は、活性化関数モジュール208だけでもよい。
【0031】
設定レジスタ212は、活性化関数の種類を指定し、活性化関数の係数を指定するためのデータを記憶するレジスタである。なお、設定レジスタ212としては、プロセッサが対応するスレッドの数分の設定レジスタ212が備えられる。設定レジスタ212は、活性化関数の種類を指定するデータを記憶するレジスタ214を有する。本実施の形態では、活性化関数Aを指定するレジスタ値を「1」、活性化関数Bを指定するレジスタ値を「2」、活性化関数Cを指定するレジスタ値を「3」とする。スレッドに指定されたレジスタ値に対応する活性化関数を、そのスレッドの「デフォルトの活性化関数」という。
【0032】
設定レジスタ212は、活性化関数の係数を指定するデータを記憶するレジスタ216を有してもよい。本実施の形態では、設定レジスタ212は、活性化関数の種類と係数とを指定する。
【0033】
命令デコーダ・制御部202は、演算ユニット206に対して、命令コードで活性化関数の種類、およびその係数を指定する。活性化関数の種類の指定は、命令コードの活性化関数の種類を指定するビットにより判別される。命令コードの活性化関数の種類を指定するビットが「0」のときは、活性化関数の種類を指定するレジスタの値によって、該当する活性化関数(すなわち、デフォルトの活性化関数)を実行する。ここで、「0」は、活性化関数A~Cに対応するレジスタ値とは異なる予め定められた値である。一方、命令コードの活性化関数の種類を指定するビットが「1」~「3」のときは、演算ユニット206は、指定された値に該当する活性化関数A~Cのいずれかを実行する。
【0034】
同様に、活性化関数の係数の指定は、命令コードの活性化関数の係数を指定するビットにより判別される。命令コードの活性化関数の種類を指定するビットが「0」のときは、活性化関数の係数を指定するレジスタの値によって、該当する活性化関数の係数(すなわち、デフォルトの活性化関数の係数)を指定する。一方、命令コードの活性化関数の種類を指定するビットが「1」以上のときは、命令コードには、必要に応じて活性化関数の係数が指定されており、演算ユニット206は、指定された値を用いて活性化関数を実行する。
【0035】
上述した活性化関数の種類と係数の指定とを、
図5と
図6とを用いて説明する。
図5(a)は、本発明の実施の形態に係る活性化関数としてParametric ReLU関数を指定するアセンブラコードを示す図である。
図6(a)は、本発明の実施の形態に係る活性化関数としてParametric ReLU関数とその微分関数のグラフを示す図である。
【0036】
アセンブラコード(1)302は、活性化関数の種類を指定するデータを記述している。本実施の形態では、アセンブラコード(1)302は、活性化関数の種類を指定する引数が「1」であり、「1」に対応付けられたParametric ReLU関数を指定している。
【0037】
アセンブラコード(2)304は、活性化関数の種類を指定するレジスタR1に、アセンブラコード(1)302で指定した活性化関数を指定するデータ(actfunc#sel)を設定することを記述している。
【0038】
アセンブラコード(3)306は、引数で活性化関数の係数を指定し、活性化関数を演算に適用することを記述している。本実施の形態では、アセンブラコード(3)306は、引数「1」でParametric ReLU関数の係数「1」を指定し、Parametric ReLU関数を演算に適用することを記述している。
【0039】
アセンブラコード(4)308は、引数で活性化関数の微分関数の係数を指定し、活性化関数の微分関数を演算に適用することを記述している。本実施の形態では、アセンブラコード(4)308は、引数「1」でParametric ReLU関数の微分関数の係数を指定し、Parametric ReLUの微分関数を演算に適用することを記述している。
【0040】
図5(a)に示すアセンブラコードにより演算に適用されるParametric ReLU関数をグラフにすると、
図6(a)に示すように係数a=1のParametric ReLU関数とその微分関数のグラフとなる。
【0041】
次に、演算に適用する活性化関数をParametric ReLU関数及びその微分関数からHyperbolic Tangent関数及びその微分関数へと変更するアセンブラコードを説明する。
図5(b)本発明の実施の形態に係る活性化関数として、Hyperbolic Tangent関数を指定するアセンブラコードを示す図であり、
図6(b)本発明の実施の形態に係る活性化関数としてHyperbolic Tangent関数及びその微分関数のグラフを示す図である。
【0042】
図5(b)に示すように、本実施の形態では、アセンブラコード(1)402は、活性化関数の種類を指定する値が「1」から「2」に変更されている。この変更により、値「1」に対応づけられたParametric ReLU関数から値「2」に対応付けられたHyperbolic Tangent関数へと活性化関数及びその微分関数の指定が変更される。
【0043】
アセンブラコード(2)304からアセンブラコード(4)308は、アセンブラコード(2)404からアセンブラコード(4)408と同じアセンブラコードである。このように、他のアセンブラコードは変えずにアセンブラコード(1)402により関数の種類を指定するのみで、演算に適用するデフォルトの活性化関数を変更できる。
【0044】
なお、Hyperbolic Tangent関数は係数がない関数であり係数の指定が不要である。そのため、アセンブラコード(3)406が、引数「1」により関数の係数を指定し、アセンブラコード(4)408が引数「1」により関数の係数を指定しても、いずれも無視される。
【0045】
図5(b)に示すアセンブラコードにより適用される活性化関数をグラフにすると
図6(b)に示すように係数をもたないHyperbolic Tangent関数及びその微分関数のグラフとなる。
【0046】
このように、ニューラルネットワークの演算装置10は、活性化関数回路を有する演算ユニット206と、スレッドに対応付けて活性化関数の種類及び係数の指定を記憶する設定レジスタ212とを備えているため、活性化関数をハードウェア化して処理を高速化し、かつ適用する活性化関数を容易に変更できる。
【0047】
また、ニューラルネットワークの演算装置10は、少なくとも1つの活性化関数回路がベクトル演算を行うため、複数のデータを並列処理できる。
【0048】
また、ニューラルネットワークの演算装置10は、演算ユニット206として、複数種類の活性化関数回路とその微分関数回路とを有するため、一つの命令で複数の活性化関数とその微分とを切り替えて利用できる。
【0049】
また、活性化関数の種類と係数とは、設定レジスタ212の値又は命令コードの引数により指定されるため、設定レジスタ212のデフォルト値を変えるだけで異なる活性化関数及びその係数への対応が可能となり、デフォルトの活性化関数を変更するためにROMコードの書き換えを不要若しくは少なくできる。
【0050】
また、活性化関数の種類とその係数との指定は、設定レジスタ212による指定よりも命令コードによる指定を優先できるため、設定レジスタ212による活性化関数の指定を受けたくないスレッドは、命令コードにより活性化関数とその係数とを指定できる。なお、設定レジスタ212による指定よりも命令コードによる指定を優先できる場合でも、命令コードの引数として予め定められた所定値が指定されているときは、設定レジスタ212による活性化関数とその係数との指定を採用できる。
【0051】
[変形例]
本発明の実施の形態では、データフロー型プロセッサ100が用いられているが、データフロー型プロセッサ100に代えてCPU(Central Processing Unit)、GPU(Graphics Processing Unit)等の従来のプロセッサを用いてもよい。
【符号の説明】
【0052】
10・・・演算装置,100・・・データフロー型プロセッサ,
200・・・ホストCPU,300・・・システムバス,400・・・ROM,
500・・・RAM,600・・・外部インターフェイス,
700・・・イベントハンドラ,102・・・コマンドユニット,
104・・・メモリサブシステム,106・・・アービタ,
108・・・L1キャッシュ,110・・・L2キャッシュ,
112・・・スレッドスケジューラ,114・・・実行コア,116・・・PE,
202・・・命令デコーダ・制御部,204・・・汎用レジスタファイル,
206・・・演算ユニット,208・・・活性化関数モジュール,
210・・・活性化関数の微分モジュール,212・・・設定レジスタ,
214・・・活性化関数の種類を指定するレジスタ,
216・・・活性化関数の係数を指定するレジスタ