【文献】
LIN, Darryl D. et al.,Fixed Point Quantization of Deep Convolutional Networks,[オンライン],2016年06月02日,[検索日 2021.09.30], インターネット: <URL: https://arxiv.org/abs/1511.06393>
【文献】
LAI, Liangzhen et al.,Deep Convolutional Neural Network Inference with Floating-point Weights and Fixed-point Activations,[オンライン],2017年03月08日,[検索日 2021.09.30], インターネット: <URL: https://arxiv.org/abs/1703.03073>
(58)【調査した分野】(Int.Cl.,DB名)
1つ以上のユニットでそれぞれ構成された複数の層が結合された判別モデルを用いた演算で、第1の演算精度で演算を行う第1の演算回路をどの層に適用し、前記第1の演算精度よりも高い第2の演算精度で演算を行う第2の演算回路をどの層に適用するかを定めた情報である適用パターン毎に、所定の説明変数の値を取得する説明変数値取得手段と、
前記所定の説明変数で表される目的関数の値を、適用パターン毎に計算する目的関数計算手段と、
目的関数の値が最小となる適用パターンを決定する適用パターン決定手段とを備える
ことを特徴とする演算最適化装置。
1つ以上のユニットでそれぞれ構成された複数の層が結合された判別モデルを用いた演算で、第1の演算精度で演算を行う第1の演算回路をどの層に適用し、前記第1の演算精度よりも高い第2の演算精度で演算を行う第2の演算回路をどの層に適用するかを定めた情報である適用パターン毎に、所定の説明変数の値を取得し、
前記所定の説明変数で表される目的関数の値を、適用パターン毎に計算し、
目的関数の値が最小となる適用パターンを決定する
ことを特徴とする演算最適化方法。
【発明を実施するための形態】
【0017】
本発明の演算最適化装置は、1つ以上のユニットでそれぞれ構成された複数の層が結合された判別モデルにおける各層の演算精度を決定する。このような判別モデルの例として、ニューラルネットワークがある。以下の説明では、判別モデルがニューラルネットワークである場合を例にして説明する。ただし、判別モデルは、ニューラルネットワークに限定されるわけではない。
【0018】
また、以下の説明では、ニューラルネットワークを用いた処理として、与えられた入力データが示す内容を推論する処理を例にして説明する。例えば、画像データが与えられ、その画像データと、ニューラルネットワークとによって、その画像データが表わしている物(画像に写っている物)を推論する処理を例にして説明する。
【0019】
ただし、ニューラルネットワークを用いた処理は、上記の推論処理に限定されず、例えば、ニューラルネットワークの各層のパラメタ更新処理等もある。後述の実施形態では、本発明の演算最適化装置が、推論処理を行う場合におけるニューラルネットワークの各層の演算精度を決定する場合を例にして説明するが、上記のパラメタ更新処理等の他の処理も本発明に適用可能である。
【0020】
図1は、ニューラルネットワークを用いた推論処理を示す模式図である。
図1において、ニューラルネットワークにおけるニューロンに相当するユニット51が楕円で表されている。各層には、1つ以上のユニットが存在する。また、線分52(図中のユニット間を結ぶ線)は、ユニット間結合を表わす。また、矢印53(図中の右向きの太線矢印)は、推論処理を模式的に表している。なお、
図1では、各ユニット51への入力が前段の層のユニットの出力となるフィードフォワード型のニューラルネットワークの例を示しているが、各ユニット51への入力はこれに限られない。例えば、時系列情報を保持している場合には、リカレント型のニューラルネットワークのように、各ユニット51への入力に、前の時刻における前段の層のユニットの出力を含めることも可能である。なお、そのような場合も、推論処理の方向は、入力層から出力層への向かう方向(順方向)であるとみなされる。このように入力層から所定の順番で行われる推論処理は「順伝搬」とも呼ばれる。以下の説明では、入力層を第0層と記し、出力層を第n層と記す。
【0021】
図2は、1つのユニット51に着目したときの当該ユニット51の入出力および他のユニットとの結合の例を示す説明図である。
図2(a)は、1つのユニット51の入出力の例を示し、
図2(b)は、2層に並べられたユニット51の間の結合の例を示す。
図2(a)に示すように、1つのユニット51に対して4つの入力(x
1〜x
4)と1つの出力(z)があった場合に、当該ユニット51の動作は、例えば、式(1A)のように表される。ここで、f()は活性化関数を表わしている。
【0022】
z=f(u) ・・・(1A)
ただし、u=a+w
1x
1+w
2x
2+w
3x
3+w
4x
4 ・・・(1B)
【0023】
式(1B)において、aは切片、w
1〜w
4は各入力(x
1〜x
4)に対応した重み等のパラメタを表す。
【0024】
一方、
図2(b)に示すように、2層に並べられた層間で各ユニット51が結合されている場合、後段の層に着目すると、当該層(2層のうちの後段の層)内の各ユニットへの入力(それぞれx
1〜x
4)に対する各ユニット51の出力(z
1〜z
4)は、例えば、次のように表される。なお、iは同一層内のユニットの識別子(本例ではi=1〜3)である。
【0025】
z
i=f(u
i) ・・・(2A)
ただし、u
i=a+w
i,1x
1+w
i,2x
2+w
i,3x
3+w
i,4x
4
・・・(2B)
【0026】
以下では、式(2B)を単純化して、u
i=Σw
i,k*x
kと記す場合がある。なお、切片aは省略した。なお、切片aを値1の定数項の係数(パラメタの1つ)とみなすことも可能である。ここで、kは、当該層における各ユニット51への入力の識別子を表わす。より具体的には、kは、その入力を行う他のユニットの識別子を表わしているということもできる。このとき当該層における各ユニット51への入力が前段の層の各ユニットの出力のみである場合には、上記の簡略式を、u
i(L)=Σw
i,k(L)*x
k(L−1)と記すことも可能である。なお、Lは層の識別子を表わす。これらの式において、w
i,kが、当該層(第L層)における各ユニットiのパラメタに相当する。このパラメタは、より具体的には、各ユニットiと他のユニットkとの結合(ユニット間結合)の重みに相当する。以下では、ユニットを特に区別せず、ユニットの出力値を決める関数(活性化関数)を簡略化して、z=Σw*xと記す場合がある。
【0027】
上記の例において、ある層の各ユニット51について、入力xから出力zを求める演算が、その層における推論処理に相当する。
【0028】
本発明の実施形態を説明する前に、ニューラルネットワークの各層のうち、一部の層の演算を低精度で実行し、残りの層の演算を高精度で実行する処理装置の例について説明する。
図3は、上記の処理装置の例を示す模式図である。処理装置18は、例えば、低精度演算回路5と、高精度演算回路6と、第1メモリ7と、第2メモリ8と、第3メモリ9とを備える。低精度演算回路5、高精度演算回路6、第1メモリ7、第2メモリ8および第3メモリ9は、例えば、バス10を介して接続される。
【0029】
低精度演算回路5は、推論処理において、ニューラルネットワークの各層のうち、一部の層の演算を第1の演算精度で実行する。
【0030】
第1メモリ7は、低精度演算回路5が演算を実行する際に使用するメモリであり、低精度演算回路5は、第1メモリ7に適宜アクセスしながら、演算を実行する。
【0031】
高精度演算回路6は、推論処理において、ニューラルネットワークの各層のうち、残りの層の演算を、第1の演算精度よりも高い第2の演算精度で実行する。
【0032】
第2メモリ8は、高精度演算回路6が演算を実行する際に使用するメモリであり、高精度演算回路6は、第2メモリ8に適宜アクセスしながら、演算を実行する。
【0033】
なお、第1メモリ7および第2メモリ8は、異なるメモリで実現されも、単一のメモリで実現されていてもよい。第1メモリ7および第2メモリ8が単一のメモリで実現される場合には、その単一のメモリが、低精度演算回路5のアクセス領域と、高精度演算回路6のアクセス領域とに分けられていればよい。
【0034】
また、第3メモリ9は、低精度演算回路5と高精度演算回路6がデータを授受する際に用いられるデータ授受用メモリである。なお、第3メモリ9が設けられていなくてもよい。すなわち、低精度演算回路5と高精度演算回路6が、第3メモリ9(データ授受用メモリ)を介さずに、通信によってデータを授受してもよい。
【0035】
高精度演算回路6の演算精度(第2の演算精度)は、低精度演算回路5の演算精度(第1の演算精度)よりも高い。なお、演算に用いる数値データの値域の広さ・細かさの尺度(より具体的には、演算回路におけるビット幅および小数点の取り扱い等で定まる数値データの値域の広さ・細かさの尺度)を、「精度」または「演算精度」と呼ぶ。
【0036】
以下、低精度演算回路5の演算精度が8ビットの整数演算であり、高精度演算回路6の演算精度が32ビットの浮動小数点演算である場合を例にして説明する。ただし、低精度演算回路5の演算精度および高精度演算回路6の演算精度は、この例に限定されず、高精度演算回路6の演算精度が、低精度演算回路5の演算精度よりも高ければよい。
【0037】
低精度演算回路5および高精度演算回路6は、例えば、GPU(Graphics Processing Unit)に実装される。
【0038】
図4は、低精度演算回路5の一例を示す概略構成図である。
図4に例示するように、低精度演算回路5は、例えば、複数のMAC(Multiplier-Accumulator)221を並列に接続した構成であってもよい。
【0039】
同様に、高精度演算回路6も、
図4に例示するように、複数のMACを並列に接続した構成であってもよい。ただし、低精度演算回路5に設けられるMAC221の演算精度よりも、高精度演算回路6に設けられるMACの演算精度の方が高い。
【0040】
MACは、低精度演算回路5や高精度演算回路6に設けられる演算器の一例である。
【0041】
図5は、MAC221の構成例を示すブロック図である。MAC221は、乗算器234と、加算器235と、3つの入力を保持する記憶素子231〜233と、1つの出力を保持する記憶素子236とを備えていてもよい。
図5に例示するMAC221は、3つの変数a,w,xを受け取ると、1つの出力変数z=a+w*xを計算する演算回路である。本例において、zがユニットの出力に相当し、a,wがパラメタに相当し、xがユニットの入力に相当する。MAC221は、3つの変数w,x,aをそれぞれ、記憶素子231,232,233を介して受け取る。計算されたzは、記憶素子236を介して外部に送られる。このような構成において、MAC221の演算精度は、乗算器234や加算器235のビット幅および小数点の取り扱い(浮動小数点か固定小数点か等)により決定される。例えば、低精度演算回路5に設けられるMAC221では、乗算器234および加算器235による演算が、低精度演算回路5の演算精度(例えば、8ビットの整数演算)に対応していればよい。
【0042】
高精度演算回路6に設けられるMACも、
図5に示す構成と同様に表すことができる。ただし、高精度演算回路6に設けられるMACでは、乗算器234および加算器235による演算が、高精度演算回路6の演算精度(例えば、32ビットの浮動小数点演算)に対応する。
【0043】
なお、低精度演算回路5および高精度演算回路6の構成は、
図4に例示する構成に限定されない。
図4に示す構成とは異なる構成によって、低精度演算回路5および高精度演算回路6が実現されていてもよい。例えば、低精度演算回路5および高精度演算回路6は、MAC以外の演算器を備える構成であってもよい。
【0044】
図6は、ニューラルネットワークを用いた推論処理の処理経過の例を示すフローチャートである。
【0045】
低精度演算回路5に入力データが与えられると(ステップS111)、低精度演算回路5は、ニューラルネットワークの第1層から第(k−1)層までの順伝搬を、第1の演算精度で行う(ステップS112)。すなわち、低精度演算回路5は、第1層から第(k−1)層までの各層に含まれる各ユニットの出力を計算する推論演算を、第1の演算精度で実行する。
【0046】
次に、低精度演算回路5は、ステップS112の演算結果を第3メモリ9に保存する(ステップS113)。具体的には、低精度演算回路5は、第(k−1)層の各ユニットからの出力を、第3メモリ9に保存する。
【0047】
次に、低精度演算回路5は、高精度演算回路6は、ステップS112の演算結果(第(k−1)層の各ユニットからの出力)を、第3メモリ9から読み出す(ステップS114)。
【0048】
ステップS113,S114において、低精度演算回路5および高精度演算回路6は、データ(ステップS112の演算結果。具体的には、第(k−1)層の各ユニットからの出力。)を、第3メモリ9を介して、授受していることになる。
【0049】
なお、低精度演算回路5および高精度演算回路6は、第3メモリ9を介さずに、通信によって直接、データを授受してもよい。
【0050】
ステップS114の後、高精度演算回路6は、ニューラルネットワークの第k層から第n層までの順伝搬を、第2の演算精度で行う(ステップS115)。すなわち、高精度演算回路6は、第k層から第n層までの各層に含まれる各ユニットの出力を計算する推論演算を、第2の計算精度で実行する。
【0051】
なお、
図6に示す処理経過において、ニューラルネットワークの入力層を第0層とし、第n層が出力層であるものとする。また、上記の第(k−1)層は、入力層(第0層)よりも後段でかつ出力層(第n層)よりも前段の中間層であるものとする。すなわち、kは、0<k−1<nを満たす整数であるものとする。
【0052】
ステップS115で得られる第n層のユニットの出力が、推論結果を表わしているということができる。
【0053】
以下、本発明の実施形態を図面を参照して説明する。
【0054】
本実施形態では、本発明の演算最適化装置が、ニューラルネットワークにおける各層の演算精度を決定する場合を例にして説明する。また、前述のように、ニューラルネットワークを用いた処理として、与えられた入力データが示す内容を推論する処理を例にして説明する。例えば、画像データが与えられ、その画像データと、ニューラルネットワークとによって、その画像データが表わしている物(画像に写っている物)を推論する処理を例にして説明する。ただし、本発明は、ニューラルネットワークを用いた他の処理にも適用可能である。
【0055】
図7は、本発明の演算最適化装置の構成例を示すブロック図である。本発明の演算最適化装置は、判別モデル記憶部21と、データ記憶部22と、説明変数値取得部23と、目的関数記憶部24と、目的関数計算部25と、計算結果記憶部26と、適用パターン決定部27とを備える。
【0056】
判別モデル記憶部21は、判別モデルとして、ニューラルネットワークを記憶する記憶装置である。
【0057】
データ記憶部22は、ニューラルネットワークを用いた推論処理の対象なるデータ(例えば、画像に写っている物を推論対象とする画像データ)を記憶する記憶装置である。データ記憶部22は、推論対象となるデータを複数個(N個とする。)、記憶し、個々のデータに対応する推論結果の正解データも記憶する。例えば、データ記憶部22は、N個の画像データと、個々の画像データに対応する正解データ(実際に画像に写っている物を示すデータ)とを記憶する。
【0058】
目的関数記憶部24は、所定の説明変数(以下、単に説明変数と記す。)で表される目的関数を記憶する。目的関数を表わす式は、予め定められる。本実施形態では、少なくとも、ニューラルネットワークを用いた推論処理における「推論精度」と「処理速度」とを、上記の説明変数として用いるものとする。以下の説明では、説明を簡単にするために、まず、「推論精度」と「処理速度」とを説明変数とする場合について説明する。目的関数が、「推論精度」および「処理速度」に加え、さらに他の説明変数によって表されてもよいが、この場合については、後述する。
【0059】
ここで、「推論精度」とは、推論処理の演算結果(換言すれば、推論結果)の正確さである。
【0060】
目的関数記憶部24は、目的関数として、例えば、以下の式(3)で表される関数を記憶する。
【0061】
目的関数=「推論精度」×α+「処理速度」×β ・・・(3)
【0062】
「推論精度」および「処理速度」は、説明変数である。αは、「推論精度」の係数であり、βは、「処理速度」の係数である。αおよびβの値は、予め決定されている。本実施形態では、αおよびβがいずれも、正の値として定められている場合を例にして説明する。
【0063】
説明変数値取得部23は、目的関数記憶部24に記憶されている目的関数において用いられている説明変数の値を取得する。本例では、ニューラルネットワークを用いた推論処理における「推論精度」および「処理速度」の値を取得する。
【0064】
また、説明変数値取得部23は、予め、複数種類の適用パターンを記憶している。適用パターンとは、判別モデル(本実施形態では、ニューラルネットワーク)を用いた演算で、低精度演算回路5(
図3参照)をニューラルネットワークのどの層に適用し、高精度演算回路6(
図3参照)をニューラルネットワークのどの層に適用するのかを定めた情報である。なお、本実施形態では、第1層以降に低精度演算回路5を適用し、いずれかの層と層の間で、層に適用する回路を低精度演算回路5から高精度演算回路6に切り替えてもよいものとする。ただし、説明を簡単にするために、その切り替えは最大で1回である場合を例にして説明する。また、第1層以降の全ての層に高精度演算回路6を適用してもよいものとする。
【0065】
従って、本実施形態では、第1層から第p層までに低精度演算回路5を適用し、第p+1層から第q層までに高精度演算回路6を適用し、第q+1層から第n層(出力層)までに再び低精度演算回路5を適用するようなケースは、適用パターンから除外する。ただし、本発明において、このようなケースを適用パターンに含めてもよい。
【0066】
図8は、適用パターンの例を示す模式図である。
図8に示す各矩形は、ニューラルネットワークの各層を表わしている。
【0067】
図8に示す適用パターン1は、第1層から第n層までの全ての層に低精度演算回路5を適用することを定めている。換言すれば、適用パターン1は、第1層から第n層までの全ての層の演算を低精度演算回路5が実行することを定めている。
【0068】
図8に示す適用パターン2は、第1層から第n−1層までの各層に低精度演算回路5を適用し、第n層に高精度演算回路6を適用することを定めている。換言すれば、適用パターン2は、第1層から第n−1層までの各層の演算を低精度演算回路5が実行し、第n層の演算を高精度演算回路6が実行することを定めている。
【0069】
図8に示す適用パターン3は、第1層から第n−2層までの各層に低精度演算回路5を適用し、第n−1層および第n層に高精度演算回路6を適用することを定めている。
【0070】
図8に示す適用パターンX−1は、第1層に低精度演算回路5を適用し、第2層から第n層までの各層に高精度演算回路6を適用することを定めている。換言すれば、適用パターンX−1は、第1層の演算を低精度演算回路5が実行し、第2層から第n層までの各層の演算を高精度演算回路6が実行することを定めている。
【0071】
図8に示す適用パターンXは、第1層から第n層までの全ての層に高精度演算回路6を適用することを定めている。換言すれば、適用パターンXは、第1層から第n層までの全ての層の演算を高精度演算回路6が実行することを定めている。
【0072】
図8に例示するような種々の適用パターンは、予め決定されていて、説明変数値取得部23は、個々の適用パターンを予め記憶している。そして、説明変数値取得部23は、個々の適用パターン毎に、説明変数「推論精度」の値、および、説明変数「処理速度」の値を取得する。
【0073】
適用パターンが異なれば、説明変数(本例では、「推論精度」および「処理速度」)の値も異なる。
【0074】
説明変数値取得部23が説明変数(本例では、「推論精度」および「処理速度」)の値を取得する態様として、2つの態様がある。第1の態様は、説明変数値取得部23が、実際に存在する処理装置18(
図3参照)に推論処理を実行させ、実測により「推論精度」および「処理速度」の値を取得する態様である。第2の態様は、説明変数値取得部23がシミュレーションによって「推論精度」および「処理速度」の値を取得する態様である。すなわち、第1の態様は、説明変数の値を実測により取得する態様であり、第2の態様は、説明変数の値をシミュレーションにより取得する態様である。
【0075】
説明変数値取得部23が実測により説明変数の値を取得する場合、演算最適化装置は、
図9に示すように、処理装置18を備えていてもよい。処理装置18の構成や動作は、
図3等を参照して既に説明しているので、ここでは説明を省略する。
【0076】
また、処理装置18がまだ設計段階であり、まだ実際に処理装置18が存在していない場合もあり得る。その場合には、
図10に示すように、演算最適化装置は、設計情報記憶部19を備えていてもよい。設計情報記憶部19は、処理装置18の設計情報を記憶する記憶装置である。設計情報の例として、処理装置18内の低精度演算回路5に設けられる演算器(例えば、MAC)の数や、処理装置18内の高精度演算回路6に設けられる演算器(例えば、MAC)の数等が挙げられる。ただし、設計情報は、これらの例に限定されない。説明変数値取得部23は、設計情報記憶部19に記憶された設計情報に基づいて、説明変数の値をシミュレーションにより取得すればよい。
【0077】
まず、説明変数値取得部23が実測により説明変数の値を取得する場合の動作について説明する。ここでは、
図9に示すように、演算最適化装置が、処理装置18を備えている場合を例にして説明する。
【0078】
説明変数値取得部23が「処理速度」の値を実測によって取得する動作を説明する。説明変数値取得部23は、処理装置18に対して適用パターンを指定する。そして、説明変数値取得部23は、判別モデル記憶部21に記憶されているニューラルネットワークと、データ記憶部22に記憶されているデータとを、処理装置18に入力し、処理装置18に推論処理を実行させ、処理装置18がそのデータに対する推論処理を行う際の処理速度を計測すればよい。この結果、説明変数値取得部23は、処理速度の値を取得する。また、このとき、処理装置18は、指定された適用パターンに応じた動作で、推論処理を実行する。
【0079】
処理速度は、例えば、1つのデータに対する推論処理時間(換言すれば、1秒当たりに処理可能なデータ数の逆数)である。あるいは、説明変数値取得部23は、処理速度の値として、例えば、レイテンシまたはスループットの値を取得してもよい。この点は、シミュレーションによって処理速度の値を取得する場合においても同様である。
【0080】
なお、説明変数値取得部23は、1つのデータに関して、処理装置18に推論処理を実行させることで、処理速度の値を取得することができる。
【0081】
説明変数値取得部23は、指定する適用パターンを順次、変更し、適用パターン毎に、実測によって処理速度の値を取得する。
【0082】
説明変数値取得部23が「推論精度」の値を実測によって取得する動作を説明する。推論精度の値を実測によって取得する場合、説明変数値取得部23は、例えば、以下のように動作すればよい。説明変数値取得部23は、処理装置18に対して適用パターンを指定する。そして、説明変数値取得部23は、判別モデル記憶部21に記憶されているニューラルネットワークを処理装置18に入力する。また、説明変数値取得部23は、データ記憶部22に記憶されている複数個(N個とする。)のデータをそれぞれ、処理装置18に入力し、個々のデータ毎に、処理装置18に推論結果を導出させる。すなわち、説明変数値取得部23は、処理装置18にN回の推論処理を実行させる。このとき、処理装置18は、指定された適用パターンに応じた動作で、推論処理を実行する。この結果、N個の推論結果が得られる。説明変数値取得部23は、データ記憶部22に記憶されている正解データと、それぞれの推論結果とを照合し、N回の推論処理回数に対する、正解データが得られた推論処理回数の割合を算出し、さらにその割合の逆数を算出する。その割合の逆数が、推論精度の値に該当する。なお、説明変数値取得部23が推論精度の値を実測によって取得する動作は、上記の例に限定されない。
【0083】
説明変数値取得部23は、指定する適用パターンを順次、変更し、適用パターン毎に、実測によって、推論精度の値を取得する。
【0084】
次に、説明変数値取得部23がシミュレーションにより説明変数の値を取得する場合の動作について説明する。ここでは、
図10に示すように、演算最適化装置が、設計情報記憶部19を備えている場合を例にして説明する。本例では、処理装置18内の低精度演算回路5(
図3参照)に設けられる演算器(例えば、MAC)の数や、処理装置18内の高精度演算回路6(
図3参照)に設けられる演算器(例えば、MAC)の数が、設計情報として設計情報記憶部19に記憶されているものとする。
【0085】
説明変数値取得部23が「処理速度」の値をシミュレーションによって取得する動作を説明する。本例では、説明変数値取得部23は、例えば、「処理速度」の値を求めるための関数(以下、処理速度関数と記す。)を予め保持する。処理速度関数は、予め定められている。処理速度関数は、例えば、低精度演算回路5に設けられる演算器の数、高精度演算回路6に設けられる演算器の数、低精度演算回路5が第1メモリ7にアクセスする場合のメモリアクセス量(メモリアクセス回数)、高精度演算回路6が第2メモリ8にアクセスする場合のメモリアクセス量(メモリアクセス回数)、および、低精度演算回路5と高精度演算回路6との間で授受されるデータ量(以下、データ授受量と記す場合がある。)を変数とする。以下、処理速度関数が、上記の各変数で表される場合を例にして説明する。ただし、処理速度関数で用いられる変数は、上記の例に限定されない。
【0086】
なお、データ授受量は、例えば、授受されるデータの個数と、データ1個当たりのバイト数との積によって表される。この場合の単位は、例えば、バイトである。
【0087】
説明変数値取得部23は、上記の各変数の値を処理速度関数に代入することによって、処理速度の値を計算すればよい。ここで、変数のうち、低精度演算回路5に設けられる演算器の数、高精度演算回路6に設けられる演算器の数は、設計情報で定められた値を用いればよい。低精度演算回路5が第1メモリ7にアクセスする場合のメモリアクセス量(メモリアクセス回数)、高精度演算回路6が第2メモリ8にアクセスする場合のメモリアクセス量(メモリアクセス回数)、および、低精度演算回路5と高精度演算回路6との間のデータ授受量に関しては、説明変数値取得部23が適用パターンを選択し、設計情報記憶部19に記憶された設計情報から定まる処理装置18の動作であって選択した適用パターンに応じた動作を模擬することによって、導出すればよい。説明変数値取得部23は、上記の演算器の数や、選択した適用パターンに基づいて導出したメモリアクセス量、低精度演算回路5と高精度演算回路6との間のデータ授受量を、処理速度関数に代入することによって、処理速度の値を計算すればよい。この結果、説明変数値取得部23は、シミュレーションに基づいて、処理速度の値を取得することができる。
【0088】
説明変数値取得部23は、選択する適用パターンを順次、変更し、適用パターン毎に、シミュレーションに基づく処理速度の値を計算する。
【0089】
説明変数値取得部23が「推論精度」の値をシミュレーションによって取得する動作を説明する。推論精度の値をシミュレーションによって取得する場合、説明変数値取得部23は、例えば、以下のように動作すればよい。説明変数値取得部23は、適用パターンを選択する。そして、説明変数値取得部23は、データ記憶部22に記憶されている複数個(本例では、N個)のデータ毎に、設計情報から定まる処理装置18の動作であって選択した適用パターンに応じた動作を模擬することによって、データに対する推論結果を導出する。この結果、N個の推論結果が得られる。説明変数値取得部23は、推論結果の数(N個)に対する、正解データと一致する推論結果の数の割合を算出し、さらにその割合の逆数を算出する。その割合の逆数が、推論精度の値に該当する。なお、説明変数値取得部23が推論精度の値をシミュレーションによって取得する動作は、上記の例に限定されない。
【0090】
説明変数値取得部23は、指定する適用パターンを順次、変更し、適用パターン毎に、シミュレーションによって、推論精度の値を取得する。
【0091】
本発明では、説明変数値取得部23は、説明変数の値を、実測によって取得してもよく、あるいは、シミュレーションによって取得してもよい。いずれの場合であっても、説明変数値取得部23は、適用パターン毎に説明変数(本例では、「推論精度」および「処理速度」)の値を取得する。
【0092】
なお、上記の例のように、1つのデータに対する推論処理時間(換言すれば、1秒当たりに処理可能なデータ数の逆数)で処理速度を表わす場合、処理速度を示す値が小さい方が好ましい。同様に、N回の推論処理回数に対する、正解データが得られた推論処理回数の割合の逆数(換言すれば、推論結果の数(N個)に対する、正解データと一致する推論結果の数の割合の逆数)によって推論精度を表わす場合にも、推論精度を示す値が小さいほど好ましい。
【0093】
目的関数計算部25は、説明変数値取得部23が適用パターン毎に算出した説明変数(本例では、「推論精度」および「処理速度」)の値を、目的関数を表わす式(本例では、前述の式(3))に代入することによって、目的関数の値を計算する。目的関数計算部25は、目的関数の値を計算する処理を、適用パターン毎に行う。
【0094】
計算結果記憶部26は、適用パターン毎に計算された目的関数の値を記憶する記憶装置である。目的関数計算部25は、適用パターン毎に目的関数の値を計算し、適用パターン毎の目的関数の値を、計算結果記憶部26に記憶させる。
【0095】
前述のように、本例では、処理速度を示す値が小さい方が好ましく、同様に、推論精度を示す値が小さいほど好ましい。従って、式(3)に例示するように表される目的関数の値が小さいほど好ましい。従って、目的関数の値が最小となる適用パターンが最も好ましい適用パターン(すなわち、最適な適用パターン)であると言える。
【0096】
適用パターン決定部27は、計算結果記憶部26に記憶された適用パターン毎の目的関数の値を参照し、目的関数の値が最小となる適用パターンを決定する。前述のように、目的関数の値が最小となる適用パターンは、最適な適用パターンである。
【0097】
ここで、適用パターンは、判別モデル(本実施形態では、ニューラルネットワーク)を用いた演算で、低精度演算回路5(
図3参照)をニューラルネットワークのどの層に適用し、高精度演算回路6(
図3参照)をニューラルネットワークのどの層に適用するのかを定めた情報である。従って、適用パターンが決定されることで、ニューラルネットワークを用いた演算を最適化することができる。そして、ニューラルネットワークの個々の層に、低精度演算回路5および高精度演算回路6のどちらを適用するのかが決定されるので、ニューラルネットワークの各層の演算精度を、第1の演算精度(例えば、低精度演算回路5による8ビットの整数演算)とするのか、第2の演算精度(例えば、高精度演算回路6による32ビットの浮動小数点演算)とするのかを決定することができる。
【0098】
説明変数値取得部23、目的関数計算部25および適用パターン決定部27は、例えば、演算最適化プログラムに従って動作するコンピュータのCPU(Central Processing Unit )によって実現される。この場合、CPUが、プログラム記憶装置等のプログラム記録媒体から演算最適化プログラムを読み込む。そして、CPUは、その演算最適化プログラムに従って、説明変数値取得部23、目的関数計算部25および適用パターン決定部27として動作すればよい。
【0099】
次に、本発明の実施形態の処理経過の例を説明する。
図11は、本発明の実施形態の演算最適化装置の処理経過の例を示すフローチャートである。なお、ここでは、目的関数記憶部24が前述の式(3)で表される目的関数を記憶し、説明変数値取得部23が説明変数の値として、「推論精度」の値および「処理速度」の値を取得する場合を例にして説明する。また、既に説明した事項については、適宜、説明を省略する。
【0100】
まず、説明変数値取得部23は、予め記憶している複数の適用パターンの中から、未選択の適用パターンを1つ選択する(ステップS1)。
【0101】
次に、説明変数値取得部23は、ステップS1で選択した適用パターンのもとでの推論処理の動作における説明変数の値を取得する(ステップS2)。本例では、説明変数値取得部23は、ステップS1で選択した適用パターンのもとでの動作における、「推論精度」の値、および、「処理速度」の値をそれぞれ取得する。
【0102】
説明変数値取得部23は、実測によって説明変数の値を取得してもよく、あるいは、シミュレーションによって説明変数の値を取得してもよい。実測により「推論精度」の値や「処理速度」の値を取得する動作や、シミュレーションにより「推論精度」の値や「処理速度」の値を取得する動作については、既に説明したので、ここでは説明を省略する。
【0103】
ステップS2の後、目的関数計算部25は、選択された適用パターンに関してステップS2で取得された説明変数の値(本例では、「推論精度」の値、および、「処理速度」の値)を、目的関数を表わす式(本例では、前述の式(3))に代入することによって、目的関数の値を計算する(ステップS3)。そして、目的関数計算部25は、ステップS1で選択された適用パターンと、目的関数の値とを対応付けて、計算結果記憶部26に記憶させる。
【0104】
次に、説明変数値取得部23は、予め記憶している全ての適用パターンがステップS1で選択済みになっているか否かを判定する(ステップS4)。
【0105】
未選択の適用パターンが存在する場合には(ステップS4のNo)、演算最適化装置は、ステップS1以降の処理を繰り返す。
【0106】
全ての適用パターンが選択済みとなっている場合には(ステップS4のYes)、適用パターン決定部27は、計算結果記憶部26に記憶された適用パターン毎の目的関数の値を参照し、目的関数の値が最小となる適用パターンを決定する(ステップS5)。ステップS5で処理を終了する。
【0107】
既に説明したように、適用パターンが決定されることで、ニューラルネットワークを用いた演算を最適化することができる。そして、ニューラルネットワークの個々の層に、低精度演算回路5および高精度演算回路6のどちらを適用するのかが決定されるので、ニューラルネットワークの各層の演算精度を、第1の演算精度(例えば、低精度演算回路5による8ビットの整数演算)とするのか、第2の演算精度(例えば、高精度演算回路6による32ビットの浮動小数点演算)とするのかを決定することができる。
【0108】
また、本実施形態では、上記のステップS1〜S5の処理によって、適用パターンを決定するので、自動的に適用パターンを決定することができる。従って、ニューラルネットワークの各層の演算精度を、第1の演算精度とするのか、第2の演算精度とするのかを自動的に決定することができる。
【0109】
次に、本発明の実施形態の変形例として、目的関数を、「推論精度」および「処理速度」に加えさらに他の説明変数によって表した場合を説明する。なお、以下に示す変形例の説明では、既に説明した事項については、適宜、説明を省略する。
【0110】
目的関数は、「推論精度」および「処理速度」に加えて、さらに、「低精度演算回路5と高精度演算回路6との間で授受されるデータ量」も説明変数として、表されてもよい。以下、「低精度演算回路5と高精度演算回路6との間で授受されるデータ量」を、単に、データ授受量と記す。既に説明したように、データ授受量は、例えば、授受されるデータの個数と、データ1個当たりのバイト数との積によって表される。
【0111】
本例では、目的関数記憶部24は、目的関数として、例えば、以下の式(4)で表される関数を記憶すればよい。
【0112】
目的関数=「推論精度」×α+「処理速度」×β+「データ授受量」×γ
・・・(4)
【0113】
γは、「データ授受量」の係数であり、予め決定されている。本例では、γが正の値として定められている場合を例にして説明する。
【0114】
本変形例では、説明変数値取得部23は、「推論精度」および「処理速度」の他に、「データ授受量」の値も適用パターン毎に取得する。
【0115】
説明変数値取得部23が「データ授受量」の値を実測によって取得する動作を説明する。説明変数値取得部23は、処理装置18に対して適用パターンを指定する。そして、説明変数値取得部23は、判別モデル記憶部21に記憶されているニューラルネットワークと、データ記憶部22に記憶されているデータとを、処理装置18に入力し、処理装置18に推論処理を実行させ、処理装置18がそのデータに対する推論処理を行う際のデータ授受量を計測すればよい、この結果、説明変数値取得部23は、データ授受量の値を取得する。また、このとき、処理装置18は、指定された適用パターンに応じた動作で、推論処理を実行する。なお、説明変数値取得部23は、1つのデータに関して、処理装置18に推論処理を実行させることで、データ授受量の値を取得することができる。
【0116】
説明変数値取得部23は、指定する適用パターンを順次、変更し、適用パターン毎に、実測によってデータ授受量の値を取得する。
【0117】
説明変数値取得部23が「データ授受量」の値をシミュレーションによって取得する動作を説明する。説明変数値取得部23は、適用パターンを選択し、設計情報記憶部19に記憶された設計情報から定まる処理装置18の動作であって選択した適用パターンに応じた動作を模擬することによって、データ授受量の値を導出すればよい。なお、説明変数値取得部23は、1つのデータに関して、処理装置18の動作を模擬することで、データ授受量の値を導出することができる。
【0118】
説明変数値取得部23は、選択する適用パターンを順次、変更し、適用パターン毎に、シミュレーションによってデータ授受量の値を導出する。
【0119】
本変形例では、目的関数計算部25は、「推論精度」の値、「処理速度」の値、および、「データ授受量」の値を式(4)に代入することによって、適用パターン毎に目的関数の値を計算すればよい。
【0120】
その他の点に関しては、上記の実施形態と同様である。
【0121】
本変形例によれば、「データ授受量」も加味して、ニューラルネットワークの各層の演算精度を、第1の演算精度とするのか、第2の演算精度とするのかを決定することができる。
【0122】
また、目的関数は、「推論精度」および「処理速度」に加えて、さらに、「処理装置18の回路規模(以下、単に回路規模と記す。)」を説明変数として、表されてもよい。
【0123】
本例では、目的関数記憶部24は、目的関数として、例えば、以下の式(5)で表される関数を記憶すればよい。
【0124】
目的関数=「推論精度」×α+「処理速度」×β+「回路規模」×δ
・・・(5)
【0125】
δは、「回路規模」の係数であり、予め決定されている。本例では、δが正の値として定められている場合を例にして説明する。
【0126】
以下の説明では、低精度演算回路5に含まれる演算器(例えば、MAC)、および、高精度演算回路6に含まれる演算器(例えば、MAC)の個数を、低精度演算回路5に含まれる演算器、または、高精度演算回路6に含まれる演算器を基準として表した値を、「回路規模」とする場合を例にして説明する。本例では、低精度演算回路5に含まれる演算器を基準とするものとして説明する。低精度演算回路5に含まれる演算器を基準とする場合、高精度演算回路6に含まれる演算器の個数を、低精度演算回路5に含まれる演算器の何個分に相当するかという値に変換して表わす。また、高精度演算回路6に含まれる1個の演算器が、低精度演算回路5に含まれる演算器何個分に相当するかは、高精度演算回路6に含まれる1個の演算器の占有面積が、低精度演算回路5に含まれる演算器何個分の占有面積に相当するかによって求めればよい。以下、説明を簡単にするために、高精度演算回路6に含まれる1個の演算器が、低精度演算回路5に含まれる演算器J個分に相当するものとして説明する。
【0127】
本変形例では、説明変数値取得部23は、「推論精度」および「処理速度」の他に、「回路規模」の値も取得する。
【0128】
説明変数値取得部23が「回路規模」の値を実測によって取得する動作を説明する。処理装置18が存在する場合には、その処理装置18内の低精度演算回路5に含まれる演算器の個数、高精度演算回路6に含まれる演算器の個数、および、高精度演算回路6に含まれる1個の演算器が、低精度演算回路5に含まれる演算器何個分に相当するかという情報は、既知の情報である。説明変数値取得部23は、例えば、この既知の情報を、予め記憶しているものとする。また、説明を簡単にするために、高精度演算回路6に含まれる1個の演算器が、低精度演算回路5に含まれる演算器J個分に相当するものとして説明する。
【0129】
この場合、説明変数値取得部23は、以下に示す式(6)の計算によって、「回路規模」の値を計算すればよい。
【0130】
回路規模=「低精度演算回路5に含まれる演算器の個数」+
「高精度演算回路6に含まれる演算器の個数」×J
・・・(6)
【0131】
なお、上記の例では、回路規模の値は、適用パターンに依存しないので、説明変数値取得部23は、回路規模の値を、各適用パターンで共通の値として算出してよい。
【0132】
説明変数値取得部23が「回路規模」の値をシミュレーションによって取得する動作を説明する。この場合、設計情報記憶部19(
図10参照)が記憶する設計情報に、低精度演算回路5に含まれる演算器の個数の設計値、高精度演算回路6に含まれる演算器の個数の設計値、および、高精度演算回路6に含まれる1個の演算器が、低精度演算回路5に含まれる演算器何個分に相当するかという設計値を含めておけばよい。本例においても、高精度演算回路6に含まれる1個の演算器が、低精度演算回路5に含まれる演算器J個分に相当するものとして説明する。
【0133】
この場合、説明変数値取得部23は、以下に示す式(7)の計算によって、「回路規模」の値を計算すればよい。
【0134】
回路規模=「低精度演算回路5に含まれる演算器の個数の設計値」+
「高精度演算回路6に含まれる演算器の個数の設計値」×J
・・・(7)
【0135】
なお、上記の例では、回路規模の値は、適用パターンに依存しないので、説明変数値取得部23は、回路規模の値を、各適用パターンで共通の値として算出してよい。
【0136】
また、シミュレーションによって「回路規模」の値を取得する場合、説明変数値取得部23は、演算器の個数を低精度演算回路5に含まれる演算器等を基準として表した値とは異なる値で求めてもよい。例えば、説明変数値取得部23は、「回路規模」の値を求めるための関数(以下、回路規模関数と記す。)によって、回路規模の値を計算してもよい。この場合、説明変数値取得部23は、回路規模関数を予め保持する。また、回路規模関数は、予め定められている。回路規模関数は、例えば、低精度演算回路5に設けられる演算器の数、高精度演算回路6に設けられる演算器の数、低精度演算回路5がアクセスする第1メモリ7(
図3参照)のメモリサイズ、高精度演算回路6がアクセスする第2メモリ8(
図3参照)のメモリサイズ、および、データ授受量(低精度演算回路5と高精度演算回路6との間で授受されるデータ量)を変数とする。以下、回路規模関数が、上記の各変数で表される場合を例にして説明する。ただし、回路規模関数で用いられる変数は、上記の例に限定されない。第1メモリ7のメモリサイズ、および、第2メモリ8のメモリサイズは、設計情報として設計情報記憶部19に記憶させておけばよい。
【0137】
説明変数値取得部23は、上記の各変数の値を回路規模関数に代入することによって、回路規模の値を計算すればよい。ここで、変数のうち、低精度演算回路5に設けられる演算器の数、高精度演算回路6に設けられる演算器の数、第1メモリ7のメモリサイズ、および、第2メモリ8のメモリサイズは、設計情報で定められた値を用いればよい。データ授受量に関しては、説明変数値取得部23が適用パターンを選択し、設計情報記憶部19に記憶された設計情報から定まる処理装置18の動作であって選択した適用パターンに応じた動作を模擬することによって、導出すればよい。説明変数値取得部23は、上記の演算器の数やメモリサイズ、および、選択した適用パターンに基づいて導出したデータ授受量を回路規模関数に代入することによって、回路規模の値を計算すればよい。また、この場合、説明変数値取得部23は、選択する適用パターンを順次、変更し、適用パターン毎に、シミュレーションに基づく回路規模の値を計算する。
【0138】
本変形例では、目的関数計算部25は、「推論精度」の値、「処理速度」の値、および、「回路規模」の値を式(5)に代入することによって、適用パターン毎に目的関数の値を計算すればよい。
【0139】
その他の点に関しては、上記の実施形態と同様である。
【0140】
本変形例によれば、「回路規模」も加味して、ニューラルネットワークの各層の演算精度を、第1の演算精度とするのか、第2の演算精度とするのかを決定することができる。
【0141】
また、目的関数は、「推論精度」および「処理速度」に加えて、さらに、「処理装置18の消費電力(以下、単に消費電力と記す。)」を説明変数として、表されてもよい。
【0142】
本例では、目的関数記憶部24は、目的関数として、例えば、以下の式(8)で表される関数を記憶すればよい。
【0143】
目的関数=「推論精度」×α+「処理速度」×β+「消費電力」×ε
・・・(8)
【0144】
εは、「消費電力」の係数であり、予め決定されている。本例では、εが正の値として定められている場合を例にして説明する。
【0145】
本変形例では、説明変数値取得部23は、「推論精度」および「処理速度」の他に、「消費電力」の値も適用パターン毎に取得する。
【0146】
説明変数値取得部23が「消費電力」の値を実測によって取得する動作を説明する。説明変数値取得部23は、処理装置18に対して適用パターンを指定する。そして、説明変数値取得部23は、判別モデル記憶部21に記憶されているニューラルネットワークと、データ記憶部22に記憶されているデータとを、処理装置18に入力し、処理装置18に推論処理を実行させ、処理装置18がそのデータに対する推論処理を行う際の消費電力を計測すればよい。この結果、説明変数値取得部23は、消費電力の値を取得する。また、このとき、処理装置18は、指定された適用パターンに応じた動作で、推論処理を実行する。なお、説明変数値取得部23は、1つのデータに関して、処理装置18に推論処理を実行させることで、消費電力の値を取得することができる。
【0147】
説明変数値取得部23は、指定する適用パターンを順次、変更し、適用パターン毎に、実測によって消費電力の値を取得する。
【0148】
説明変数値取得部23が「消費電力」の値をシミュレーションによって取得する動作を説明する。「消費電力」の値をシミュレーションによって導出する場合、設計段階で定められている、消費電力値導出に必要なデータを、設計情報記憶部19に記憶される設計情報に含めておく。説明変数値取得部23は、適用パターンを選択し、設計情報記憶部19に記憶された設計情報から定まる処理装置18の動作であって選択した適用パターンに応じた動作を模擬することによって、消費電力の値を導出すればよい。なお、説明変数値取得部23は、1つのデータに関して、処理装置18の動作を模擬することで、消費電力の値を導出することができる。
【0149】
説明変数値取得部23は、選択する適用パターンを順次、変更し、適用パターン毎に、シミュレーションによって消費電力の値を導出する。
【0150】
本変形例では、目的関数計算部25は、「推論精度」の値、「処理速度」の値、および、「消費電力」の値を式(8)に代入することによって、適用パターン毎に目的関数の値を計算すればよい。
【0151】
その他の点に関しては、上記の実施形態と同様である。
【0152】
本変形例によれば、「消費電力」も加味して、ニューラルネットワークの各層の演算精度を、第1の演算精度とするのか、第2の演算精度とするのかを決定することができる。
【0153】
上記の各変形例では、目的関数が、「推論精度」および「処理速度」に加えて、さらに、「データ授受量」、「回路規模」および「消費電力」のいずれかを説明変数として表される場合を説明した。目的関数は、「推論精度」および「処理速度」に加えて、さらに、「データ授受量」、「回路規模」および「消費電力」のうちの任意の1つ以上の説明変数によって表されていてもよい。
【0154】
目的関数が、「推論精度」、「処理速度」、「データ授受量」、「回路規模」および「消費電力」を説明変数として表されていてもよい。この場合、目的関数記憶部24は、目的関数として、例えば、以下の式(9)で表される関数を記憶すればよい。
【0155】
目的関数=「推論精度」×α+「処理速度」×β+「データ授受量」×γ
+「回路規模」×δ+「消費電力」×ε
・・・(9)
【0156】
この場合、説明変数値取得部23は、実測により、または、シミュレーションにより、各説明変数(「推論精度」、「処理速度」、「データ授受量」、「回路規模」および「消費電力」)の値を、適用パターン毎に取得すればよい。
【0157】
また、目的関数計算部25は、説明変数値取得部23によって取得された各説明変数の値を式(9)に代入することによって、適用パターン毎に目的関数の値を計算すればよい。
【0158】
この場合、「データ授受量」、「回路規模」および「消費電力」も加味して、ニューラルネットワークの各層の演算精度を、第1の演算精度とするのか、第2の演算精度とするのかを決定することができる。
【0159】
なお、式(9)において、「データ授受量」×γの項が含まれていなくてもよい。この場合、説明変数値取得部23は、「データ授受量」の値を取得しなくてよい。
【0160】
また、式(9)において、「回路規模」×δの項が含まれていなくてもよい。この場合、説明変数値取得部23は、「回路規模」の値を取得しなくてよい。
【0161】
また、式(9)において、「消費電力」×εの項が設けられていなくてもよい。この場合、説明変数値取得部23は、「消費電力」の値を取得しなくてよい。
【0162】
図12は、本発明の実施形態またはその変形例に係るコンピュータの構成例を示す概略ブロック図である。コンピュータ1000は、CPU1001と、主記憶装置1002と、補助記憶装置1003と、インタフェース1004とを備える。
【0163】
本発明の演算最適化装置は、コンピュータ1000に実装される。演算最適化装置の動作は、演算最適化プログラムの形式で補助記憶装置1003に記憶されている。CPU1001は、その演算最適化プログラムを補助記憶装置1003から読み出して主記憶装置1002に展開し、その演算最適化プログラムに従って、上記の実施形態やその変形例で説明した処理を実行する。
【0164】
補助記憶装置1003は、一時的でない有形の媒体の例である。一時的でない有形の媒体の他の例として、インタフェース1004を介して接続される磁気ディスク、光磁気ディスク、CD−ROM(Compact Disk Read Only Memory )、DVD−ROM(Digital Versatile Disk Read Only Memory )、半導体メモリ等が挙げられる。また、プログラムが通信回線によってコンピュータ1000に配信される場合、配信を受けたコンピュータ1000がそのプログラムを主記憶装置1002に展開し、上記の処理を実行してもよい。
【0165】
また、プログラムは、前述の処理の一部を実現するためのものであってもよい。さらに、プログラムは、補助記憶装置1003に既に記憶されている他のプログラムとの組み合わせで前述の処理を実現する差分プログラムであってもよい。
【0166】
また、各構成要素の一部または全部は、汎用または専用の回路(circuitry )、プロセッサ等やこれらの組み合わせによって実現されてもよい。これらは、単一のチップによって構成されてもよいし、バスを介して接続される複数のチップによって構成されてもよい。各構成要素の一部または全部は、上述した回路等とプログラムとの組み合わせによって実現されてもよい。
【0167】
各構成要素の一部または全部が複数の情報処理装置や回路等により実現される場合には、複数の情報処理装置や回路等は集中配置されてもよいし、分散配置されてもよい。例えば、情報処理装置や回路等は、クライアントアンドサーバシステム、クラウドコンピューティングシステム等、各々が通信ネットワークを介して接続される形態として実現されてもよい。
【0168】
次に、本発明の概要について説明する。
図13は、本発明の演算最適化装置の概要を示すブロック図である。本発明の演算最適化装置は、説明変数値取得手段73と、目的関数計算手段75と、適用パターン決定手段77とを備える。
【0169】
説明変数値取得手段73(例えば、説明変数値取得部23)は、1つ以上のユニットでそれぞれ構成された複数の層が結合された判別モデル(例えば、ニューラルネットワーク)を用いた演算で、第1の演算精度で演算を行う第1の演算回路(例えば、低精度演算回路5)をどの層に適用し、第1の演算精度よりも高い第2の演算精度で演算を行う第2の演算回路(例えば、高精度演算回路6)をどの層に適用するかを定めた情報である適用パターン毎に、所定の説明変数の値を取得する。
【0170】
目的関数計算手段75(例えば、目的関数計算部25)は、所定の説明変数で表される目的関数の値を、適用パターン毎に計算する。
【0171】
適用パターン決定手段77(例えば、適用パターン決定部27)は、目的関数の値が最小となる適用パターンを決定する。
【0172】
そのような構成によって、判別モデルを用いた演算を最適化できるように、判別モデルの各層における演算精度を自動的に定めることができる。
【0173】
目的関数は、少なくとも、判別モデルを用いた演算の処理速度、および、演算結果の正確さを所定の説明変数として表されていてもよい。
【0174】
目的関数は、第1の演算回路と第2の演算回路との間で授受されるデータ量を所定の説明変数として表されていてもよい。
【0175】
目的関数は、判別モデルを用いた演算を行う回路の回路規模を所定の説明変数として表されていてもよい。
【0176】
目的関数は、判別モデルを用いた演算での消費電力を所定の説明変数として表されていてもよい。
【0177】
説明変数値取得手段73が、所定の説明変数の値を実測により取得する構成であってもよい。
【0178】
説明変数値取得手段73が、所定の説明変数の値をシミュレーションにより取得する構成であってもよい。
【0179】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記の実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【0180】
本発明は、例えば、ニューラルネットワーク等の判別モデルを用いた演算を最適化する演算最適化装置に好適に適用される。