(57)【特許請求の範囲】
【請求項１】
１つ以上のユニットでそれぞれ構成された複数の層が結合された判別モデルを用いた演算で、第１の演算精度で演算を行う第１の演算回路をどの層に適用し、前記第１の演算精度よりも高い第２の演算精度で演算を行う第２の演算回路をどの層に適用するかを定めた情報である適用パターン毎に、所定の説明変数の値を取得する説明変数値取得手段と、
前記所定の説明変数で表される目的関数の値を、適用パターン毎に計算する目的関数計算手段と、
目的関数の値が最小となる適用パターンを決定する適用パターン決定手段とを備える
ことを特徴とする演算最適化装置。
【請求項２】
目的関数は、少なくとも、判別モデルを用いた演算の処理速度、および、演算結果の正確さを所定の説明変数として表される
請求項１に記載の演算最適化装置。
【請求項３】
目的関数は、第１の演算回路と第２の演算回路との間で授受されるデータ量を所定の説明変数として表される
請求項２に記載の演算最適化装置。
【請求項４】
目的関数は、判別モデルを用いた演算を行う回路の回路規模を所定の説明変数として表される
請求項２または請求項３に記載の演算最適化装置。
【請求項５】
目的関数は、判別モデルを用いた演算での消費電力を所定の説明変数として表される
請求項２から請求項４のうちのいずれか１項に記載の演算最適化装置。
【請求項６】
説明変数値取得手段は、所定の説明変数の値を実測により取得する
請求項１から請求項５のうちのいずれか１項に記載の演算最適化装置。
【請求項７】
説明変数値取得手段は、所定の説明変数の値をシミュレーションにより取得する
請求項１から請求項５のうちのいずれか１項に記載の演算最適化装置。
【請求項８】
１つ以上のユニットでそれぞれ構成された複数の層が結合された判別モデルを用いた演算で、第１の演算精度で演算を行う第１の演算回路をどの層に適用し、前記第１の演算精度よりも高い第２の演算精度で演算を行う第２の演算回路をどの層に適用するかを定めた情報である適用パターン毎に、所定の説明変数の値を取得し、
前記所定の説明変数で表される目的関数の値を、適用パターン毎に計算し、
目的関数の値が最小となる適用パターンを決定する
ことを特徴とする演算最適化方法。
【請求項９】
コンピュータに、
１つ以上のユニットでそれぞれ構成された複数の層が結合された判別モデルを用いた演算で、第１の演算精度で演算を行う第１の演算回路をどの層に適用し、前記第１の演算精度よりも高い第２の演算精度で演算を行う第２の演算回路をどの層に適用するかを定めた情報である適用パターン毎に、所定の説明変数の値を取得する説明変数値取得処理、
前記所定の説明変数で表される目的関数の値を、適用パターン毎に計算する目的関数計算処理、および、
目的関数の値が最小となる適用パターンを決定する適用パターン決定処理
を実行させるための演算最適化プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、ニューラルネットワーク等の判別モデルを用いた演算を最適化する演算最適化装置、演算最適化方法および演算最適化プログラムに関する。
【背景技術】
【０００２】
与えられたデータに対する推論を、モデルを用いることによって行う場合がある。このようなモデルは、判別モデルと呼ばれる。例えば、画像データが与えられ、その画像データと、判別モデルとによって、その画像データが表わしている物（画像に写っている物）を推論する場合がある。【０００３】
判別モデルの例として、ニューラルネットワークが知られている。ニューラルネットワークでは、複数の層が結合されたモデルであり、それぞれの層は、１つ以上のユニット（ニューロン）で構成されている。ニューラルネットワークを用いて推論処理を行う場合、入力データを入力層に入力し、入力層側から出力層側に順方向に演算を行うことによって、入力データに関する推論結果が得られる。【０００４】
ニューラルネットワークは、深層学習によって学習される。【０００５】
ニューラルネットワークを用いた演算を行うためのツールが、例えば、非特許文献１に記載されている。【０００６】
ニューラルネットワークを用いた演算を行うための既存のツールには、ニューラルネットワークの全ての層の演算精度を一律に変えることができるものがある。例えば、ニューラルネットワークの全ての層の演算を、浮動小数点演算に設定したり、整数演算に設定したりすることができるツールがある。また、そのような設定は、ユーザ（人間）が行う。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】“NVIDIA TensorRT”、［online］、NVIDIA Corporation、［平成３０年７月３日検索］、インターネット<URL: https://developer.nvidia.com/tensorrt>
【発明の概要】
【発明が解決しようとする課題】
【０００８】
前述のように、ニューラルネットワークを用いた演算を行うための既存のツールには、ニューラルネットワークの全ての層の演算精度を一律に変えることができるものがある。しかし、そのようなツールでは、個々の層の演算精度をそれぞれ個別に設定することができない。そのため、ニューラルネットワークを用いた演算を最適化することが困難であった。【０００９】
例えば、ニューラルネットワークの全ての層の演算を浮動小数点演算に設定した場合には、高精度で演算を行えるが、消費電力等に関する効率は低下する。逆に、ニューラルネットワークの全ての層の演算を整数演算に設定した場合には、消費電力等に関する効率は向上するが、演算精度は低下する。【００１０】
また、既存のツールでは、ニューラルネットワーク全体の演算精度を、浮動小数点演算にするか、整数演算にするかを、ユーザが判断しなければならなかった。【００１１】
そこで、本発明は、判別モデルを用いた演算を最適化できるように、判別モデルの各層における演算精度を自動的に定めることができる演算最適化装置、演算最適化方法および演算最適化プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明による演算最適化装置は、１つ以上のユニットでそれぞれ構成された複数の層が結合された判別モデルを用いた演算で、第１の演算精度で演算を行う第１の演算回路をどの層に適用し、第１の演算精度よりも高い第２の演算精度で演算を行う第２の演算回路をどの層に適用するかを定めた情報である適用パターン毎に、所定の説明変数の値を取得する説明変数値取得手段と、所定の説明変数で表される目的関数の値を、適用パターン毎に計算する目的関数計算手段と、目的関数の値が最小となる適用パターンを決定する適用パターン決定手段とを備えることを特徴とする。【００１３】
また、本発明による演算最適化方法は、１つ以上のユニットでそれぞれ構成された複数の層が結合された判別モデルを用いた演算で、第１の演算精度で演算を行う第１の演算回路をどの層に適用し、第１の演算精度よりも高い第２の演算精度で演算を行う第２の演算回路をどの層に適用するかを定めた情報である適用パターン毎に、所定の説明変数の値を取得し、所定の説明変数で表される目的関数の値を、適用パターン毎に計算し、目的関数の値が最小となる適用パターンを決定することを特徴とする。【００１４】
また、本発明による演算最適化プログラムは、コンピュータに、１つ以上のユニットでそれぞれ構成された複数の層が結合された判別モデルを用いた演算で、第１の演算精度で演算を行う第１の演算回路をどの層に適用し、第１の演算精度よりも高い第２の演算精度で演算を行う第２の演算回路をどの層に適用するかを定めた情報である適用パターン毎に、所定の説明変数の値を取得する説明変数値取得処理、所定の説明変数で表される目的関数の値を、適用パターン毎に計算する目的関数計算処理、および、目的関数の値が最小となる適用パターンを決定する適用パターン決定処理を実行させることを特徴とする。
【発明の効果】
【００１５】
本発明によれば、判別モデルを用いた演算を最適化できるように、判別モデルの各層における演算精度を自動的に定めることができる。
【図面の簡単な説明】
【００１６】
【図１】ニューラルネットワークを用いた推論処理を示す模式図である。
【図２】１つのユニットに着目したときの当該ユニットの入出力および他のユニットとの結合の例を示す説明図である。
【図３】ニューラルネットワークの各層のうち、一部の層の演算を低精度で実行し、残りの層の演算を高精度で実行する処理装置の例を示す模式図である。
【図４】低精度演算回路の一例を示す概略構成図である。
【図５】ＭＡＣの構成例を示すブロック図である。
【図６】ニューラルネットワークを用いた推論処理の処理経過の例を示すフローチャートである。
【図７】本発明の演算最適化装置の構成例を示すブロック図である。
【図８】適用パターンの例を示す模式図である。
【図９】処理装置を備える演算最適化装置の構成例を示すブロック図である。
【図１０】設計情報記憶部を備える演算最適化装置の構成例を示すブロック図である。
【図１１】本発明の実施形態の演算最適化装置の処理経過の例を示すフローチャートである。
【図１２】本発明の実施形態またはその変形例に係るコンピュータの構成例を示す概略ブロック図である。
【図１３】本発明の演算最適化装置の概要を示すブロック図である。
【発明を実施するための形態】
【００１７】
本発明の演算最適化装置は、１つ以上のユニットでそれぞれ構成された複数の層が結合された判別モデルにおける各層の演算精度を決定する。このような判別モデルの例として、ニューラルネットワークがある。以下の説明では、判別モデルがニューラルネットワークである場合を例にして説明する。ただし、判別モデルは、ニューラルネットワークに限定されるわけではない。
【００１８】
また、以下の説明では、ニューラルネットワークを用いた処理として、与えられた入力データが示す内容を推論する処理を例にして説明する。例えば、画像データが与えられ、その画像データと、ニューラルネットワークとによって、その画像データが表わしている物（画像に写っている物）を推論する処理を例にして説明する。
【００１９】
ただし、ニューラルネットワークを用いた処理は、上記の推論処理に限定されず、例えば、ニューラルネットワークの各層のパラメタ更新処理等もある。後述の実施形態では、本発明の演算最適化装置が、推論処理を行う場合におけるニューラルネットワークの各層の演算精度を決定する場合を例にして説明するが、上記のパラメタ更新処理等の他の処理も本発明に適用可能である。
【００２０】
図１は、ニューラルネットワークを用いた推論処理を示す模式図である。図１において、ニューラルネットワークにおけるニューロンに相当するユニット５１が楕円で表されている。各層には、１つ以上のユニットが存在する。また、線分５２（図中のユニット間を結ぶ線）は、ユニット間結合を表わす。また、矢印５３（図中の右向きの太線矢印）は、推論処理を模式的に表している。なお、図１では、各ユニット５１への入力が前段の層のユニットの出力となるフィードフォワード型のニューラルネットワークの例を示しているが、各ユニット５１への入力はこれに限られない。例えば、時系列情報を保持している場合には、リカレント型のニューラルネットワークのように、各ユニット５１への入力に、前の時刻における前段の層のユニットの出力を含めることも可能である。なお、そのような場合も、推論処理の方向は、入力層から出力層への向かう方向（順方向）であるとみなされる。このように入力層から所定の順番で行われる推論処理は「順伝搬」とも呼ばれる。以下の説明では、入力層を第０層と記し、出力層を第ｎ層と記す。
【００２１】
図２は、１つのユニット５１に着目したときの当該ユニット５１の入出力および他のユニットとの結合の例を示す説明図である。図２（ａ）は、１つのユニット５１の入出力の例を示し、図２（ｂ）は、２層に並べられたユニット５１の間の結合の例を示す。図２（ａ）に示すように、１つのユニット５１に対して４つの入力（ｘ１〜ｘ４）と１つの出力（ｚ）があった場合に、当該ユニット５１の動作は、例えば、式（１Ａ）のように表される。ここで、ｆ（）は活性化関数を表わしている。
【００２２】
ｚ＝ｆ（ｕ）  ・・・（１Ａ）
ただし、ｕ＝ａ＋ｗ１ｘ１＋ｗ２ｘ２＋ｗ３ｘ３＋ｗ４ｘ４  ・・・（１Ｂ）
【００２３】
式（１Ｂ）において、ａは切片、ｗ１〜ｗ４は各入力（ｘ１〜ｘ４）に対応した重み等のパラメタを表す。
【００２４】
一方、図２（ｂ）に示すように、２層に並べられた層間で各ユニット５１が結合されている場合、後段の層に着目すると、当該層（２層のうちの後段の層）内の各ユニットへの入力（それぞれｘ１〜ｘ４）に対する各ユニット５１の出力（ｚ１〜ｚ４）は、例えば、次のように表される。なお、ｉは同一層内のユニットの識別子（本例ではｉ＝１〜３）である。
【００２５】
ｚｉ＝ｆ（ｕｉ）  ・・・（２Ａ）
ただし、ｕｉ＝ａ＋ｗｉ，１ｘ１＋ｗｉ，２ｘ２＋ｗｉ，３ｘ３＋ｗｉ，４ｘ４
・・・（２Ｂ）
【００２６】
以下では、式（２Ｂ）を単純化して、ｕｉ＝Σｗｉ，ｋ＊ｘｋと記す場合がある。なお、切片ａは省略した。なお、切片ａを値１の定数項の係数（パラメタの１つ）とみなすことも可能である。ここで、ｋは、当該層における各ユニット５１への入力の識別子を表わす。より具体的には、ｋは、その入力を行う他のユニットの識別子を表わしているということもできる。このとき当該層における各ユニット５１への入力が前段の層の各ユニットの出力のみである場合には、上記の簡略式を、ｕｉ（Ｌ）＝Σｗｉ，ｋ（Ｌ）＊ｘｋ（Ｌ−１）と記すことも可能である。なお、Ｌは層の識別子を表わす。これらの式において、ｗｉ，ｋが、当該層（第Ｌ層）における各ユニットｉのパラメタに相当する。このパラメタは、より具体的には、各ユニットｉと他のユニットｋとの結合（ユニット間結合）の重みに相当する。以下では、ユニットを特に区別せず、ユニットの出力値を決める関数（活性化関数）を簡略化して、ｚ＝Σｗ＊ｘと記す場合がある。
【００２７】
上記の例において、ある層の各ユニット５１について、入力ｘから出力ｚを求める演算が、その層における推論処理に相当する。
【００２８】
本発明の実施形態を説明する前に、ニューラルネットワークの各層のうち、一部の層の演算を低精度で実行し、残りの層の演算を高精度で実行する処理装置の例について説明する。図３は、上記の処理装置の例を示す模式図である。処理装置１８は、例えば、低精度演算回路５と、高精度演算回路６と、第１メモリ７と、第２メモリ８と、第３メモリ９とを備える。低精度演算回路５、高精度演算回路６、第１メモリ７、第２メモリ８および第３メモリ９は、例えば、バス１０を介して接続される。
【００２９】
低精度演算回路５は、推論処理において、ニューラルネットワークの各層のうち、一部の層の演算を第１の演算精度で実行する。
【００３０】
第１メモリ７は、低精度演算回路５が演算を実行する際に使用するメモリであり、低精度演算回路５は、第１メモリ７に適宜アクセスしながら、演算を実行する。
【００３１】
高精度演算回路６は、推論処理において、ニューラルネットワークの各層のうち、残りの層の演算を、第１の演算精度よりも高い第２の演算精度で実行する。
【００３２】
第２メモリ８は、高精度演算回路６が演算を実行する際に使用するメモリであり、高精度演算回路６は、第２メモリ８に適宜アクセスしながら、演算を実行する。
【００３３】
なお、第１メモリ７および第２メモリ８は、異なるメモリで実現されも、単一のメモリで実現されていてもよい。第１メモリ７および第２メモリ８が単一のメモリで実現される場合には、その単一のメモリが、低精度演算回路５のアクセス領域と、高精度演算回路６のアクセス領域とに分けられていればよい。
【００３４】
また、第３メモリ９は、低精度演算回路５と高精度演算回路６がデータを授受する際に用いられるデータ授受用メモリである。なお、第３メモリ９が設けられていなくてもよい。すなわち、低精度演算回路５と高精度演算回路６が、第３メモリ９（データ授受用メモリ）を介さずに、通信によってデータを授受してもよい。
【００３５】
高精度演算回路６の演算精度（第２の演算精度）は、低精度演算回路５の演算精度（第１の演算精度）よりも高い。なお、演算に用いる数値データの値域の広さ・細かさの尺度（より具体的には、演算回路におけるビット幅および小数点の取り扱い等で定まる数値データの値域の広さ・細かさの尺度）を、「精度」または「演算精度」と呼ぶ。
【００３６】
以下、低精度演算回路５の演算精度が８ビットの整数演算であり、高精度演算回路６の演算精度が３２ビットの浮動小数点演算である場合を例にして説明する。ただし、低精度演算回路５の演算精度および高精度演算回路６の演算精度は、この例に限定されず、高精度演算回路６の演算精度が、低精度演算回路５の演算精度よりも高ければよい。
【００３７】
低精度演算回路５および高精度演算回路６は、例えば、ＧＰＵ（Graphics Processing Unit）に実装される。
【００３８】
図４は、低精度演算回路５の一例を示す概略構成図である。図４に例示するように、低精度演算回路５は、例えば、複数のＭＡＣ（Multiplier-Accumulator）２２１を並列に接続した構成であってもよい。  
【００３９】
同様に、高精度演算回路６も、図４に例示するように、複数のＭＡＣを並列に接続した構成であってもよい。ただし、低精度演算回路５に設けられるＭＡＣ２２１の演算精度よりも、高精度演算回路６に設けられるＭＡＣの演算精度の方が高い。
【００４０】
ＭＡＣは、低精度演算回路５や高精度演算回路６に設けられる演算器の一例である。
【００４１】
図５は、ＭＡＣ２２１の構成例を示すブロック図である。ＭＡＣ２２１は、乗算器２３４と、加算器２３５と、３つの入力を保持する記憶素子２３１〜２３３と、１つの出力を保持する記憶素子２３６とを備えていてもよい。図５に例示するＭＡＣ２２１は、３つの変数ａ，ｗ，ｘを受け取ると、１つの出力変数ｚ＝ａ＋ｗ＊ｘを計算する演算回路である。本例において、ｚがユニットの出力に相当し、ａ，ｗがパラメタに相当し、ｘがユニットの入力に相当する。ＭＡＣ２２１は、３つの変数ｗ，ｘ，ａをそれぞれ、記憶素子２３１，２３２，２３３を介して受け取る。計算されたｚは、記憶素子２３６を介して外部に送られる。このような構成において、ＭＡＣ２２１の演算精度は、乗算器２３４や加算器２３５のビット幅および小数点の取り扱い（浮動小数点か固定小数点か等）により決定される。例えば、低精度演算回路５に設けられるＭＡＣ２２１では、乗算器２３４および加算器２３５による演算が、低精度演算回路５の演算精度（例えば、８ビットの整数演算）に対応していればよい。
【００４２】
高精度演算回路６に設けられるＭＡＣも、図５に示す構成と同様に表すことができる。ただし、高精度演算回路６に設けられるＭＡＣでは、乗算器２３４および加算器２３５による演算が、高精度演算回路６の演算精度（例えば、３２ビットの浮動小数点演算）に対応する。
【００４３】
なお、低精度演算回路５および高精度演算回路６の構成は、図４に例示する構成に限定されない。図４に示す構成とは異なる構成によって、低精度演算回路５および高精度演算回路６が実現されていてもよい。例えば、低精度演算回路５および高精度演算回路６は、ＭＡＣ以外の演算器を備える構成であってもよい。
【００４４】
図６は、ニューラルネットワークを用いた推論処理の処理経過の例を示すフローチャートである。
【００４５】
低精度演算回路５に入力データが与えられると（ステップＳ１１１）、低精度演算回路５は、ニューラルネットワークの第１層から第（ｋ−１）層までの順伝搬を、第１の演算精度で行う（ステップＳ１１２）。すなわち、低精度演算回路５は、第１層から第（ｋ−１）層までの各層に含まれる各ユニットの出力を計算する推論演算を、第１の演算精度で実行する。
【００４６】
次に、低精度演算回路５は、ステップＳ１１２の演算結果を第３メモリ９に保存する（ステップＳ１１３）。具体的には、低精度演算回路５は、第（ｋ−１）層の各ユニットからの出力を、第３メモリ９に保存する。
【００４７】
次に、低精度演算回路５は、高精度演算回路６は、ステップＳ１１２の演算結果（第（ｋ−１）層の各ユニットからの出力）を、第３メモリ９から読み出す（ステップＳ１１４）。
【００４８】
ステップＳ１１３，Ｓ１１４において、低精度演算回路５および高精度演算回路６は、データ（ステップＳ１１２の演算結果。具体的には、第（ｋ−１）層の各ユニットからの出力。）を、第３メモリ９を介して、授受していることになる。
【００４９】
なお、低精度演算回路５および高精度演算回路６は、第３メモリ９を介さずに、通信によって直接、データを授受してもよい。
【００５０】
ステップＳ１１４の後、高精度演算回路６は、ニューラルネットワークの第ｋ層から第ｎ層までの順伝搬を、第２の演算精度で行う（ステップＳ１１５）。すなわち、高精度演算回路６は、第ｋ層から第ｎ層までの各層に含まれる各ユニットの出力を計算する推論演算を、第２の計算精度で実行する。
【００５１】
なお、図６に示す処理経過において、ニューラルネットワークの入力層を第０層とし、第ｎ層が出力層であるものとする。また、上記の第（ｋ−１）層は、入力層（第０層）よりも後段でかつ出力層（第ｎ層）よりも前段の中間層であるものとする。すなわち、ｋは、０＜ｋ−１＜ｎを満たす整数であるものとする。
【００５２】
ステップＳ１１５で得られる第ｎ層のユニットの出力が、推論結果を表わしているということができる。
【００５３】
以下、本発明の実施形態を図面を参照して説明する。
【００５４】
本実施形態では、本発明の演算最適化装置が、ニューラルネットワークにおける各層の演算精度を決定する場合を例にして説明する。また、前述のように、ニューラルネットワークを用いた処理として、与えられた入力データが示す内容を推論する処理を例にして説明する。例えば、画像データが与えられ、その画像データと、ニューラルネットワークとによって、その画像データが表わしている物（画像に写っている物）を推論する処理を例にして説明する。ただし、本発明は、ニューラルネットワークを用いた他の処理にも適用可能である。
【００５５】
図７は、本発明の演算最適化装置の構成例を示すブロック図である。本発明の演算最適化装置は、判別モデル記憶部２１と、データ記憶部２２と、説明変数値取得部２３と、目的関数記憶部２４と、目的関数計算部２５と、計算結果記憶部２６と、適用パターン決定部２７とを備える。
【００５６】
判別モデル記憶部２１は、判別モデルとして、ニューラルネットワークを記憶する記憶装置である。
【００５７】
データ記憶部２２は、ニューラルネットワークを用いた推論処理の対象なるデータ（例えば、画像に写っている物を推論対象とする画像データ）を記憶する記憶装置である。データ記憶部２２は、推論対象となるデータを複数個（Ｎ個とする。）、記憶し、個々のデータに対応する推論結果の正解データも記憶する。例えば、データ記憶部２２は、Ｎ個の画像データと、個々の画像データに対応する正解データ（実際に画像に写っている物を示すデータ）とを記憶する。
【００５８】
目的関数記憶部２４は、所定の説明変数（以下、単に説明変数と記す。）で表される目的関数を記憶する。目的関数を表わす式は、予め定められる。本実施形態では、少なくとも、ニューラルネットワークを用いた推論処理における「推論精度」と「処理速度」とを、上記の説明変数として用いるものとする。以下の説明では、説明を簡単にするために、まず、「推論精度」と「処理速度」とを説明変数とする場合について説明する。目的関数が、「推論精度」および「処理速度」に加え、さらに他の説明変数によって表されてもよいが、この場合については、後述する。
【００５９】
ここで、「推論精度」とは、推論処理の演算結果（換言すれば、推論結果）の正確さである。
【００６０】
目的関数記憶部２４は、目的関数として、例えば、以下の式（３）で表される関数を記憶する。
【００６１】
目的関数＝「推論精度」×α＋「処理速度」×β    ・・・（３）
【００６２】
「推論精度」および「処理速度」は、説明変数である。αは、「推論精度」の係数であり、βは、「処理速度」の係数である。αおよびβの値は、予め決定されている。本実施形態では、αおよびβがいずれも、正の値として定められている場合を例にして説明する。
【００６３】
説明変数値取得部２３は、目的関数記憶部２４に記憶されている目的関数において用いられている説明変数の値を取得する。本例では、ニューラルネットワークを用いた推論処理における「推論精度」および「処理速度」の値を取得する。
【００６４】
また、説明変数値取得部２３は、予め、複数種類の適用パターンを記憶している。適用パターンとは、判別モデル（本実施形態では、ニューラルネットワーク）を用いた演算で、低精度演算回路５（図３参照）をニューラルネットワークのどの層に適用し、高精度演算回路６（図３参照）をニューラルネットワークのどの層に適用するのかを定めた情報である。なお、本実施形態では、第１層以降に低精度演算回路５を適用し、いずれかの層と層の間で、層に適用する回路を低精度演算回路５から高精度演算回路６に切り替えてもよいものとする。ただし、説明を簡単にするために、その切り替えは最大で１回である場合を例にして説明する。また、第１層以降の全ての層に高精度演算回路６を適用してもよいものとする。
【００６５】
従って、本実施形態では、第１層から第ｐ層までに低精度演算回路５を適用し、第ｐ＋１層から第ｑ層までに高精度演算回路６を適用し、第ｑ＋１層から第ｎ層（出力層）までに再び低精度演算回路５を適用するようなケースは、適用パターンから除外する。ただし、本発明において、このようなケースを適用パターンに含めてもよい。
【００６６】
図８は、適用パターンの例を示す模式図である。図８に示す各矩形は、ニューラルネットワークの各層を表わしている。
【００６７】
図８に示す適用パターン１は、第１層から第ｎ層までの全ての層に低精度演算回路５を適用することを定めている。換言すれば、適用パターン１は、第１層から第ｎ層までの全ての層の演算を低精度演算回路５が実行することを定めている。
【００６８】
図８に示す適用パターン２は、第１層から第ｎ−１層までの各層に低精度演算回路５を適用し、第ｎ層に高精度演算回路６を適用することを定めている。換言すれば、適用パターン２は、第１層から第ｎ−１層までの各層の演算を低精度演算回路５が実行し、第ｎ層の演算を高精度演算回路６が実行することを定めている。
【００６９】
図８に示す適用パターン３は、第１層から第ｎ−２層までの各層に低精度演算回路５を適用し、第ｎ−１層および第ｎ層に高精度演算回路６を適用することを定めている。
【００７０】
図８に示す適用パターンＸ−１は、第１層に低精度演算回路５を適用し、第２層から第ｎ層までの各層に高精度演算回路６を適用することを定めている。換言すれば、適用パターンＸ−１は、第１層の演算を低精度演算回路５が実行し、第２層から第ｎ層までの各層の演算を高精度演算回路６が実行することを定めている。
【００７１】
図８に示す適用パターンＸは、第１層から第ｎ層までの全ての層に高精度演算回路６を適用することを定めている。換言すれば、適用パターンＸは、第１層から第ｎ層までの全ての層の演算を高精度演算回路６が実行することを定めている。
【００７２】
図８に例示するような種々の適用パターンは、予め決定されていて、説明変数値取得部２３は、個々の適用パターンを予め記憶している。そして、説明変数値取得部２３は、個々の適用パターン毎に、説明変数「推論精度」の値、および、説明変数「処理速度」の値を取得する。
【００７３】
適用パターンが異なれば、説明変数（本例では、「推論精度」および「処理速度」）の値も異なる。
【００７４】
説明変数値取得部２３が説明変数（本例では、「推論精度」および「処理速度」）の値を取得する態様として、２つの態様がある。第１の態様は、説明変数値取得部２３が、実際に存在する処理装置１８（図３参照）に推論処理を実行させ、実測により「推論精度」および「処理速度」の値を取得する態様である。第２の態様は、説明変数値取得部２３がシミュレーションによって「推論精度」および「処理速度」の値を取得する態様である。すなわち、第１の態様は、説明変数の値を実測により取得する態様であり、第２の態様は、説明変数の値をシミュレーションにより取得する態様である。
【００７５】
説明変数値取得部２３が実測により説明変数の値を取得する場合、演算最適化装置は、図９に示すように、処理装置１８を備えていてもよい。処理装置１８の構成や動作は、図３等を参照して既に説明しているので、ここでは説明を省略する。
【００７６】
また、処理装置１８がまだ設計段階であり、まだ実際に処理装置１８が存在していない場合もあり得る。その場合には、図１０に示すように、演算最適化装置は、設計情報記憶部１９を備えていてもよい。設計情報記憶部１９は、処理装置１８の設計情報を記憶する記憶装置である。設計情報の例として、処理装置１８内の低精度演算回路５に設けられる演算器（例えば、ＭＡＣ）の数や、処理装置１８内の高精度演算回路６に設けられる演算器（例えば、ＭＡＣ）の数等が挙げられる。ただし、設計情報は、これらの例に限定されない。説明変数値取得部２３は、設計情報記憶部１９に記憶された設計情報に基づいて、説明変数の値をシミュレーションにより取得すればよい。
【００７７】
まず、説明変数値取得部２３が実測により説明変数の値を取得する場合の動作について説明する。ここでは、図９に示すように、演算最適化装置が、処理装置１８を備えている場合を例にして説明する。
【００７８】
説明変数値取得部２３が「処理速度」の値を実測によって取得する動作を説明する。説明変数値取得部２３は、処理装置１８に対して適用パターンを指定する。そして、説明変数値取得部２３は、判別モデル記憶部２１に記憶されているニューラルネットワークと、データ記憶部２２に記憶されているデータとを、処理装置１８に入力し、処理装置１８に推論処理を実行させ、処理装置１８がそのデータに対する推論処理を行う際の処理速度を計測すればよい。この結果、説明変数値取得部２３は、処理速度の値を取得する。また、このとき、処理装置１８は、指定された適用パターンに応じた動作で、推論処理を実行する。
【００７９】
処理速度は、例えば、１つのデータに対する推論処理時間（換言すれば、１秒当たりに処理可能なデータ数の逆数）である。あるいは、説明変数値取得部２３は、処理速度の値として、例えば、レイテンシまたはスループットの値を取得してもよい。この点は、シミュレーションによって処理速度の値を取得する場合においても同様である。
【００８０】
なお、説明変数値取得部２３は、１つのデータに関して、処理装置１８に推論処理を実行させることで、処理速度の値を取得することができる。
【００８１】
説明変数値取得部２３は、指定する適用パターンを順次、変更し、適用パターン毎に、実測によって処理速度の値を取得する。
【００８２】
説明変数値取得部２３が「推論精度」の値を実測によって取得する動作を説明する。推論精度の値を実測によって取得する場合、説明変数値取得部２３は、例えば、以下のように動作すればよい。説明変数値取得部２３は、処理装置１８に対して適用パターンを指定する。そして、説明変数値取得部２３は、判別モデル記憶部２１に記憶されているニューラルネットワークを処理装置１８に入力する。また、説明変数値取得部２３は、データ記憶部２２に記憶されている複数個（Ｎ個とする。）のデータをそれぞれ、処理装置１８に入力し、個々のデータ毎に、処理装置１８に推論結果を導出させる。すなわち、説明変数値取得部２３は、処理装置１８にＮ回の推論処理を実行させる。このとき、処理装置１８は、指定された適用パターンに応じた動作で、推論処理を実行する。この結果、Ｎ個の推論結果が得られる。説明変数値取得部２３は、データ記憶部２２に記憶されている正解データと、それぞれの推論結果とを照合し、Ｎ回の推論処理回数に対する、正解データが得られた推論処理回数の割合を算出し、さらにその割合の逆数を算出する。その割合の逆数が、推論精度の値に該当する。なお、説明変数値取得部２３が推論精度の値を実測によって取得する動作は、上記の例に限定されない。
【００８３】
説明変数値取得部２３は、指定する適用パターンを順次、変更し、適用パターン毎に、実測によって、推論精度の値を取得する。
【００８４】
次に、説明変数値取得部２３がシミュレーションにより説明変数の値を取得する場合の動作について説明する。ここでは、図１０に示すように、演算最適化装置が、設計情報記憶部１９を備えている場合を例にして説明する。本例では、処理装置１８内の低精度演算回路５（図３参照）に設けられる演算器（例えば、ＭＡＣ）の数や、処理装置１８内の高精度演算回路６（図３参照）に設けられる演算器（例えば、ＭＡＣ）の数が、設計情報として設計情報記憶部１９に記憶されているものとする。
【００８５】
説明変数値取得部２３が「処理速度」の値をシミュレーションによって取得する動作を説明する。本例では、説明変数値取得部２３は、例えば、「処理速度」の値を求めるための関数（以下、処理速度関数と記す。）を予め保持する。処理速度関数は、予め定められている。処理速度関数は、例えば、低精度演算回路５に設けられる演算器の数、高精度演算回路６に設けられる演算器の数、低精度演算回路５が第１メモリ７にアクセスする場合のメモリアクセス量（メモリアクセス回数）、高精度演算回路６が第２メモリ８にアクセスする場合のメモリアクセス量（メモリアクセス回数）、および、低精度演算回路５と高精度演算回路６との間で授受されるデータ量（以下、データ授受量と記す場合がある。）を変数とする。以下、処理速度関数が、上記の各変数で表される場合を例にして説明する。ただし、処理速度関数で用いられる変数は、上記の例に限定されない。
【００８６】
なお、データ授受量は、例えば、授受されるデータの個数と、データ１個当たりのバイト数との積によって表される。この場合の単位は、例えば、バイトである。
【００８７】
説明変数値取得部２３は、上記の各変数の値を処理速度関数に代入することによって、処理速度の値を計算すればよい。ここで、変数のうち、低精度演算回路５に設けられる演算器の数、高精度演算回路６に設けられる演算器の数は、設計情報で定められた値を用いればよい。低精度演算回路５が第１メモリ７にアクセスする場合のメモリアクセス量（メモリアクセス回数）、高精度演算回路６が第２メモリ８にアクセスする場合のメモリアクセス量（メモリアクセス回数）、および、低精度演算回路５と高精度演算回路６との間のデータ授受量に関しては、説明変数値取得部２３が適用パターンを選択し、設計情報記憶部１９に記憶された設計情報から定まる処理装置１８の動作であって選択した適用パターンに応じた動作を模擬することによって、導出すればよい。説明変数値取得部２３は、上記の演算器の数や、選択した適用パターンに基づいて導出したメモリアクセス量、低精度演算回路５と高精度演算回路６との間のデータ授受量を、処理速度関数に代入することによって、処理速度の値を計算すればよい。この結果、説明変数値取得部２３は、シミュレーションに基づいて、処理速度の値を取得することができる。
【００８８】
説明変数値取得部２３は、選択する適用パターンを順次、変更し、適用パターン毎に、シミュレーションに基づく処理速度の値を計算する。
【００８９】
説明変数値取得部２３が「推論精度」の値をシミュレーションによって取得する動作を説明する。推論精度の値をシミュレーションによって取得する場合、説明変数値取得部２３は、例えば、以下のように動作すればよい。説明変数値取得部２３は、適用パターンを選択する。そして、説明変数値取得部２３は、データ記憶部２２に記憶されている複数個（本例では、Ｎ個）のデータ毎に、設計情報から定まる処理装置１８の動作であって選択した適用パターンに応じた動作を模擬することによって、データに対する推論結果を導出する。この結果、Ｎ個の推論結果が得られる。説明変数値取得部２３は、推論結果の数（Ｎ個）に対する、正解データと一致する推論結果の数の割合を算出し、さらにその割合の逆数を算出する。その割合の逆数が、推論精度の値に該当する。なお、説明変数値取得部２３が推論精度の値をシミュレーションによって取得する動作は、上記の例に限定されない。
【００９０】
説明変数値取得部２３は、指定する適用パターンを順次、変更し、適用パターン毎に、シミュレーションによって、推論精度の値を取得する。
【００９１】
本発明では、説明変数値取得部２３は、説明変数の値を、実測によって取得してもよく、あるいは、シミュレーションによって取得してもよい。いずれの場合であっても、説明変数値取得部２３は、適用パターン毎に説明変数（本例では、「推論精度」および「処理速度」）の値を取得する。
【００９２】
なお、上記の例のように、１つのデータに対する推論処理時間（換言すれば、１秒当たりに処理可能なデータ数の逆数）で処理速度を表わす場合、処理速度を示す値が小さい方が好ましい。同様に、Ｎ回の推論処理回数に対する、正解データが得られた推論処理回数の割合の逆数（換言すれば、推論結果の数（Ｎ個）に対する、正解データと一致する推論結果の数の割合の逆数）によって推論精度を表わす場合にも、推論精度を示す値が小さいほど好ましい。
【００９３】
目的関数計算部２５は、説明変数値取得部２３が適用パターン毎に算出した説明変数（本例では、「推論精度」および「処理速度」）の値を、目的関数を表わす式（本例では、前述の式（３））に代入することによって、目的関数の値を計算する。目的関数計算部２５は、目的関数の値を計算する処理を、適用パターン毎に行う。
【００９４】
計算結果記憶部２６は、適用パターン毎に計算された目的関数の値を記憶する記憶装置である。目的関数計算部２５は、適用パターン毎に目的関数の値を計算し、適用パターン毎の目的関数の値を、計算結果記憶部２６に記憶させる。
【００９５】
前述のように、本例では、処理速度を示す値が小さい方が好ましく、同様に、推論精度を示す値が小さいほど好ましい。従って、式(３）に例示するように表される目的関数の値が小さいほど好ましい。従って、目的関数の値が最小となる適用パターンが最も好ましい適用パターン（すなわち、最適な適用パターン）であると言える。
【００９６】
適用パターン決定部２７は、計算結果記憶部２６に記憶された適用パターン毎の目的関数の値を参照し、目的関数の値が最小となる適用パターンを決定する。前述のように、目的関数の値が最小となる適用パターンは、最適な適用パターンである。
【００９７】
ここで、適用パターンは、判別モデル（本実施形態では、ニューラルネットワーク）を用いた演算で、低精度演算回路５（図３参照）をニューラルネットワークのどの層に適用し、高精度演算回路６（図３参照）をニューラルネットワークのどの層に適用するのかを定めた情報である。従って、適用パターンが決定されることで、ニューラルネットワークを用いた演算を最適化することができる。そして、ニューラルネットワークの個々の層に、低精度演算回路５および高精度演算回路６のどちらを適用するのかが決定されるので、ニューラルネットワークの各層の演算精度を、第１の演算精度（例えば、低精度演算回路５による８ビットの整数演算）とするのか、第２の演算精度（例えば、高精度演算回路６による３２ビットの浮動小数点演算）とするのかを決定することができる。
【００９８】
説明変数値取得部２３、目的関数計算部２５および適用パターン決定部２７は、例えば、演算最適化プログラムに従って動作するコンピュータのＣＰＵ（Central Processing Unit ）によって実現される。この場合、ＣＰＵが、プログラム記憶装置等のプログラム記録媒体から演算最適化プログラムを読み込む。そして、ＣＰＵは、その演算最適化プログラムに従って、説明変数値取得部２３、目的関数計算部２５および適用パターン決定部２７として動作すればよい。
【００９９】
次に、本発明の実施形態の処理経過の例を説明する。図１１は、本発明の実施形態の演算最適化装置の処理経過の例を示すフローチャートである。なお、ここでは、目的関数記憶部２４が前述の式（３）で表される目的関数を記憶し、説明変数値取得部２３が説明変数の値として、「推論精度」の値および「処理速度」の値を取得する場合を例にして説明する。また、既に説明した事項については、適宜、説明を省略する。
【０１００】
まず、説明変数値取得部２３は、予め記憶している複数の適用パターンの中から、未選択の適用パターンを１つ選択する（ステップＳ１）。
【０１０１】
次に、説明変数値取得部２３は、ステップＳ１で選択した適用パターンのもとでの推論処理の動作における説明変数の値を取得する（ステップＳ２）。本例では、説明変数値取得部２３は、ステップＳ１で選択した適用パターンのもとでの動作における、「推論精度」の値、および、「処理速度」の値をそれぞれ取得する。
【０１０２】
説明変数値取得部２３は、実測によって説明変数の値を取得してもよく、あるいは、シミュレーションによって説明変数の値を取得してもよい。実測により「推論精度」の値や「処理速度」の値を取得する動作や、シミュレーションにより「推論精度」の値や「処理速度」の値を取得する動作については、既に説明したので、ここでは説明を省略する。
【０１０３】
ステップＳ２の後、目的関数計算部２５は、選択された適用パターンに関してステップＳ２で取得された説明変数の値（本例では、「推論精度」の値、および、「処理速度」の値）を、目的関数を表わす式（本例では、前述の式（３））に代入することによって、目的関数の値を計算する（ステップＳ３）。そして、目的関数計算部２５は、ステップＳ１で選択された適用パターンと、目的関数の値とを対応付けて、計算結果記憶部２６に記憶させる。
【０１０４】
次に、説明変数値取得部２３は、予め記憶している全ての適用パターンがステップＳ１で選択済みになっているか否かを判定する（ステップＳ４）。
【０１０５】
未選択の適用パターンが存在する場合には（ステップＳ４のＮｏ）、演算最適化装置は、ステップＳ１以降の処理を繰り返す。
【０１０６】
全ての適用パターンが選択済みとなっている場合には（ステップＳ４のＹｅｓ）、適用パターン決定部２７は、計算結果記憶部２６に記憶された適用パターン毎の目的関数の値を参照し、目的関数の値が最小となる適用パターンを決定する（ステップＳ５）。ステップＳ５で処理を終了する。
【０１０７】
既に説明したように、適用パターンが決定されることで、ニューラルネットワークを用いた演算を最適化することができる。そして、ニューラルネットワークの個々の層に、低精度演算回路５および高精度演算回路６のどちらを適用するのかが決定されるので、ニューラルネットワークの各層の演算精度を、第１の演算精度（例えば、低精度演算回路５による８ビットの整数演算）とするのか、第２の演算精度（例えば、高精度演算回路６による３２ビットの浮動小数点演算）とするのかを決定することができる。
【０１０８】
また、本実施形態では、上記のステップＳ１〜Ｓ５の処理によって、適用パターンを決定するので、自動的に適用パターンを決定することができる。従って、ニューラルネットワークの各層の演算精度を、第１の演算精度とするのか、第２の演算精度とするのかを自動的に決定することができる。
【０１０９】
次に、本発明の実施形態の変形例として、目的関数を、「推論精度」および「処理速度」に加えさらに他の説明変数によって表した場合を説明する。なお、以下に示す変形例の説明では、既に説明した事項については、適宜、説明を省略する。
【０１１０】
目的関数は、「推論精度」および「処理速度」に加えて、さらに、「低精度演算回路５と高精度演算回路６との間で授受されるデータ量」も説明変数として、表されてもよい。以下、「低精度演算回路５と高精度演算回路６との間で授受されるデータ量」を、単に、データ授受量と記す。既に説明したように、データ授受量は、例えば、授受されるデータの個数と、データ１個当たりのバイト数との積によって表される。
【０１１１】
本例では、目的関数記憶部２４は、目的関数として、例えば、以下の式（４）で表される関数を記憶すればよい。
【０１１２】
目的関数＝「推論精度」×α＋「処理速度」×β＋「データ授受量」×γ
・・・（４）
【０１１３】
γは、「データ授受量」の係数であり、予め決定されている。本例では、γが正の値として定められている場合を例にして説明する。
【０１１４】
本変形例では、説明変数値取得部２３は、「推論精度」および「処理速度」の他に、「データ授受量」の値も適用パターン毎に取得する。
【０１１５】
説明変数値取得部２３が「データ授受量」の値を実測によって取得する動作を説明する。説明変数値取得部２３は、処理装置１８に対して適用パターンを指定する。そして、説明変数値取得部２３は、判別モデル記憶部２１に記憶されているニューラルネットワークと、データ記憶部２２に記憶されているデータとを、処理装置１８に入力し、処理装置１８に推論処理を実行させ、処理装置１８がそのデータに対する推論処理を行う際のデータ授受量を計測すればよい、この結果、説明変数値取得部２３は、データ授受量の値を取得する。また、このとき、処理装置１８は、指定された適用パターンに応じた動作で、推論処理を実行する。なお、説明変数値取得部２３は、１つのデータに関して、処理装置１８に推論処理を実行させることで、データ授受量の値を取得することができる。
【０１１６】
説明変数値取得部２３は、指定する適用パターンを順次、変更し、適用パターン毎に、実測によってデータ授受量の値を取得する。
【０１１７】
説明変数値取得部２３が「データ授受量」の値をシミュレーションによって取得する動作を説明する。説明変数値取得部２３は、適用パターンを選択し、設計情報記憶部１９に記憶された設計情報から定まる処理装置１８の動作であって選択した適用パターンに応じた動作を模擬することによって、データ授受量の値を導出すればよい。なお、説明変数値取得部２３は、１つのデータに関して、処理装置１８の動作を模擬することで、データ授受量の値を導出することができる。
【０１１８】
説明変数値取得部２３は、選択する適用パターンを順次、変更し、適用パターン毎に、シミュレーションによってデータ授受量の値を導出する。
【０１１９】
本変形例では、目的関数計算部２５は、「推論精度」の値、「処理速度」の値、および、「データ授受量」の値を式（４）に代入することによって、適用パターン毎に目的関数の値を計算すればよい。
【０１２０】
その他の点に関しては、上記の実施形態と同様である。
【０１２１】
本変形例によれば、「データ授受量」も加味して、ニューラルネットワークの各層の演算精度を、第１の演算精度とするのか、第２の演算精度とするのかを決定することができる。
【０１２２】
また、目的関数は、「推論精度」および「処理速度」に加えて、さらに、「処理装置１８の回路規模（以下、単に回路規模と記す。）」を説明変数として、表されてもよい。
【０１２３】
本例では、目的関数記憶部２４は、目的関数として、例えば、以下の式（５）で表される関数を記憶すればよい。
【０１２４】
目的関数＝「推論精度」×α＋「処理速度」×β＋「回路規模」×δ
・・・（５）
【０１２５】
δは、「回路規模」の係数であり、予め決定されている。本例では、δが正の値として定められている場合を例にして説明する。
【０１２６】
以下の説明では、低精度演算回路５に含まれる演算器（例えば、ＭＡＣ）、および、高精度演算回路６に含まれる演算器（例えば、ＭＡＣ）の個数を、低精度演算回路５に含まれる演算器、または、高精度演算回路６に含まれる演算器を基準として表した値を、「回路規模」とする場合を例にして説明する。本例では、低精度演算回路５に含まれる演算器を基準とするものとして説明する。低精度演算回路５に含まれる演算器を基準とする場合、高精度演算回路６に含まれる演算器の個数を、低精度演算回路５に含まれる演算器の何個分に相当するかという値に変換して表わす。また、高精度演算回路６に含まれる１個の演算器が、低精度演算回路５に含まれる演算器何個分に相当するかは、高精度演算回路６に含まれる１個の演算器の占有面積が、低精度演算回路５に含まれる演算器何個分の占有面積に相当するかによって求めればよい。以下、説明を簡単にするために、高精度演算回路６に含まれる１個の演算器が、低精度演算回路５に含まれる演算器Ｊ個分に相当するものとして説明する。
【０１２７】
本変形例では、説明変数値取得部２３は、「推論精度」および「処理速度」の他に、「回路規模」の値も取得する。
【０１２８】
説明変数値取得部２３が「回路規模」の値を実測によって取得する動作を説明する。処理装置１８が存在する場合には、その処理装置１８内の低精度演算回路５に含まれる演算器の個数、高精度演算回路６に含まれる演算器の個数、および、高精度演算回路６に含まれる１個の演算器が、低精度演算回路５に含まれる演算器何個分に相当するかという情報は、既知の情報である。説明変数値取得部２３は、例えば、この既知の情報を、予め記憶しているものとする。また、説明を簡単にするために、高精度演算回路６に含まれる１個の演算器が、低精度演算回路５に含まれる演算器Ｊ個分に相当するものとして説明する。
【０１２９】
この場合、説明変数値取得部２３は、以下に示す式（６）の計算によって、「回路規模」の値を計算すればよい。
【０１３０】
回路規模＝「低精度演算回路５に含まれる演算器の個数」＋
「高精度演算回路６に含まれる演算器の個数」×Ｊ
・・・（６）
【０１３１】
なお、上記の例では、回路規模の値は、適用パターンに依存しないので、説明変数値取得部２３は、回路規模の値を、各適用パターンで共通の値として算出してよい。
【０１３２】
説明変数値取得部２３が「回路規模」の値をシミュレーションによって取得する動作を説明する。この場合、設計情報記憶部１９（図１０参照）が記憶する設計情報に、低精度演算回路５に含まれる演算器の個数の設計値、高精度演算回路６に含まれる演算器の個数の設計値、および、高精度演算回路６に含まれる１個の演算器が、低精度演算回路５に含まれる演算器何個分に相当するかという設計値を含めておけばよい。本例においても、高精度演算回路６に含まれる１個の演算器が、低精度演算回路５に含まれる演算器Ｊ個分に相当するものとして説明する。
【０１３３】
この場合、説明変数値取得部２３は、以下に示す式（７）の計算によって、「回路規模」の値を計算すればよい。
【０１３４】
回路規模＝「低精度演算回路５に含まれる演算器の個数の設計値」＋
「高精度演算回路６に含まれる演算器の個数の設計値」×Ｊ
・・・（７）
【０１３５】
なお、上記の例では、回路規模の値は、適用パターンに依存しないので、説明変数値取得部２３は、回路規模の値を、各適用パターンで共通の値として算出してよい。
【０１３６】
また、シミュレーションによって「回路規模」の値を取得する場合、説明変数値取得部２３は、演算器の個数を低精度演算回路５に含まれる演算器等を基準として表した値とは異なる値で求めてもよい。例えば、説明変数値取得部２３は、「回路規模」の値を求めるための関数（以下、回路規模関数と記す。）によって、回路規模の値を計算してもよい。この場合、説明変数値取得部２３は、回路規模関数を予め保持する。また、回路規模関数は、予め定められている。回路規模関数は、例えば、低精度演算回路５に設けられる演算器の数、高精度演算回路６に設けられる演算器の数、低精度演算回路５がアクセスする第１メモリ７（図３参照）のメモリサイズ、高精度演算回路６がアクセスする第２メモリ８（図３参照）のメモリサイズ、および、データ授受量（低精度演算回路５と高精度演算回路６との間で授受されるデータ量）を変数とする。以下、回路規模関数が、上記の各変数で表される場合を例にして説明する。ただし、回路規模関数で用いられる変数は、上記の例に限定されない。第１メモリ７のメモリサイズ、および、第２メモリ８のメモリサイズは、設計情報として設計情報記憶部１９に記憶させておけばよい。
【０１３７】
説明変数値取得部２３は、上記の各変数の値を回路規模関数に代入することによって、回路規模の値を計算すればよい。ここで、変数のうち、低精度演算回路５に設けられる演算器の数、高精度演算回路６に設けられる演算器の数、第１メモリ７のメモリサイズ、および、第２メモリ８のメモリサイズは、設計情報で定められた値を用いればよい。データ授受量に関しては、説明変数値取得部２３が適用パターンを選択し、設計情報記憶部１９に記憶された設計情報から定まる処理装置１８の動作であって選択した適用パターンに応じた動作を模擬することによって、導出すればよい。説明変数値取得部２３は、上記の演算器の数やメモリサイズ、および、選択した適用パターンに基づいて導出したデータ授受量を回路規模関数に代入することによって、回路規模の値を計算すればよい。また、この場合、説明変数値取得部２３は、選択する適用パターンを順次、変更し、適用パターン毎に、シミュレーションに基づく回路規模の値を計算する。
【０１３８】
本変形例では、目的関数計算部２５は、「推論精度」の値、「処理速度」の値、および、「回路規模」の値を式（５）に代入することによって、適用パターン毎に目的関数の値を計算すればよい。
【０１３９】
その他の点に関しては、上記の実施形態と同様である。
【０１４０】
本変形例によれば、「回路規模」も加味して、ニューラルネットワークの各層の演算精度を、第１の演算精度とするのか、第２の演算精度とするのかを決定することができる。
【０１４１】
また、目的関数は、「推論精度」および「処理速度」に加えて、さらに、「処理装置１８の消費電力（以下、単に消費電力と記す。）」を説明変数として、表されてもよい。
【０１４２】
本例では、目的関数記憶部２４は、目的関数として、例えば、以下の式（８）で表される関数を記憶すればよい。
【０１４３】
目的関数＝「推論精度」×α＋「処理速度」×β＋「消費電力」×ε
・・・（８）
【０１４４】
εは、「消費電力」の係数であり、予め決定されている。本例では、εが正の値として定められている場合を例にして説明する。
【０１４５】
本変形例では、説明変数値取得部２３は、「推論精度」および「処理速度」の他に、「消費電力」の値も適用パターン毎に取得する。
【０１４６】
説明変数値取得部２３が「消費電力」の値を実測によって取得する動作を説明する。説明変数値取得部２３は、処理装置１８に対して適用パターンを指定する。そして、説明変数値取得部２３は、判別モデル記憶部２１に記憶されているニューラルネットワークと、データ記憶部２２に記憶されているデータとを、処理装置１８に入力し、処理装置１８に推論処理を実行させ、処理装置１８がそのデータに対する推論処理を行う際の消費電力を計測すればよい。この結果、説明変数値取得部２３は、消費電力の値を取得する。また、このとき、処理装置１８は、指定された適用パターンに応じた動作で、推論処理を実行する。なお、説明変数値取得部２３は、１つのデータに関して、処理装置１８に推論処理を実行させることで、消費電力の値を取得することができる。
【０１４７】
説明変数値取得部２３は、指定する適用パターンを順次、変更し、適用パターン毎に、実測によって消費電力の値を取得する。
【０１４８】
説明変数値取得部２３が「消費電力」の値をシミュレーションによって取得する動作を説明する。「消費電力」の値をシミュレーションによって導出する場合、設計段階で定められている、消費電力値導出に必要なデータを、設計情報記憶部１９に記憶される設計情報に含めておく。説明変数値取得部２３は、適用パターンを選択し、設計情報記憶部１９に記憶された設計情報から定まる処理装置１８の動作であって選択した適用パターンに応じた動作を模擬することによって、消費電力の値を導出すればよい。なお、説明変数値取得部２３は、１つのデータに関して、処理装置１８の動作を模擬することで、消費電力の値を導出することができる。
【０１４９】
説明変数値取得部２３は、選択する適用パターンを順次、変更し、適用パターン毎に、シミュレーションによって消費電力の値を導出する。
【０１５０】
本変形例では、目的関数計算部２５は、「推論精度」の値、「処理速度」の値、および、「消費電力」の値を式（８）に代入することによって、適用パターン毎に目的関数の値を計算すればよい。
【０１５１】
その他の点に関しては、上記の実施形態と同様である。
【０１５２】
本変形例によれば、「消費電力」も加味して、ニューラルネットワークの各層の演算精度を、第１の演算精度とするのか、第２の演算精度とするのかを決定することができる。
【０１５３】
上記の各変形例では、目的関数が、「推論精度」および「処理速度」に加えて、さらに、「データ授受量」、「回路規模」および「消費電力」のいずれかを説明変数として表される場合を説明した。目的関数は、「推論精度」および「処理速度」に加えて、さらに、「データ授受量」、「回路規模」および「消費電力」のうちの任意の１つ以上の説明変数によって表されていてもよい。
【０１５４】
目的関数が、「推論精度」、「処理速度」、「データ授受量」、「回路規模」および「消費電力」を説明変数として表されていてもよい。この場合、目的関数記憶部２４は、目的関数として、例えば、以下の式（９）で表される関数を記憶すればよい。
【０１５５】
目的関数＝「推論精度」×α＋「処理速度」×β＋「データ授受量」×γ
＋「回路規模」×δ＋「消費電力」×ε
・・・（９）
【０１５６】
この場合、説明変数値取得部２３は、実測により、または、シミュレーションにより、各説明変数（「推論精度」、「処理速度」、「データ授受量」、「回路規模」および「消費電力」）の値を、適用パターン毎に取得すればよい。
【０１５７】
また、目的関数計算部２５は、説明変数値取得部２３によって取得された各説明変数の値を式（９）に代入することによって、適用パターン毎に目的関数の値を計算すればよい。
【０１５８】
この場合、「データ授受量」、「回路規模」および「消費電力」も加味して、ニューラルネットワークの各層の演算精度を、第１の演算精度とするのか、第２の演算精度とするのかを決定することができる。
【０１５９】
なお、式（９）において、「データ授受量」×γの項が含まれていなくてもよい。この場合、説明変数値取得部２３は、「データ授受量」の値を取得しなくてよい。
【０１６０】
また、式（９）において、「回路規模」×δの項が含まれていなくてもよい。この場合、説明変数値取得部２３は、「回路規模」の値を取得しなくてよい。
【０１６１】
また、式（９）において、「消費電力」×εの項が設けられていなくてもよい。この場合、説明変数値取得部２３は、「消費電力」の値を取得しなくてよい。
【０１６２】
図１２は、本発明の実施形態またはその変形例に係るコンピュータの構成例を示す概略ブロック図である。コンピュータ１０００は、ＣＰＵ１００１と、主記憶装置１００２と、補助記憶装置１００３と、インタフェース１００４とを備える。
【０１６３】
本発明の演算最適化装置は、コンピュータ１０００に実装される。演算最適化装置の動作は、演算最適化プログラムの形式で補助記憶装置１００３に記憶されている。ＣＰＵ１００１は、その演算最適化プログラムを補助記憶装置１００３から読み出して主記憶装置１００２に展開し、その演算最適化プログラムに従って、上記の実施形態やその変形例で説明した処理を実行する。
【０１６４】
補助記憶装置１００３は、一時的でない有形の媒体の例である。一時的でない有形の媒体の他の例として、インタフェース１００４を介して接続される磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ（Compact Disk Read Only Memory ）、ＤＶＤ−ＲＯＭ（Digital Versatile Disk Read Only Memory ）、半導体メモリ等が挙げられる。また、プログラムが通信回線によってコンピュータ１０００に配信される場合、配信を受けたコンピュータ１０００がそのプログラムを主記憶装置１００２に展開し、上記の処理を実行してもよい。
【０１６５】
また、プログラムは、前述の処理の一部を実現するためのものであってもよい。さらに、プログラムは、補助記憶装置１００３に既に記憶されている他のプログラムとの組み合わせで前述の処理を実現する差分プログラムであってもよい。
【０１６６】
また、各構成要素の一部または全部は、汎用または専用の回路（circuitry ）、プロセッサ等やこれらの組み合わせによって実現されてもよい。これらは、単一のチップによって構成されてもよいし、バスを介して接続される複数のチップによって構成されてもよい。各構成要素の一部または全部は、上述した回路等とプログラムとの組み合わせによって実現されてもよい。
【０１６７】
各構成要素の一部または全部が複数の情報処理装置や回路等により実現される場合には、複数の情報処理装置や回路等は集中配置されてもよいし、分散配置されてもよい。例えば、情報処理装置や回路等は、クライアントアンドサーバシステム、クラウドコンピューティングシステム等、各々が通信ネットワークを介して接続される形態として実現されてもよい。
【０１６８】
次に、本発明の概要について説明する。図１３は、本発明の演算最適化装置の概要を示すブロック図である。本発明の演算最適化装置は、説明変数値取得手段７３と、目的関数計算手段７５と、適用パターン決定手段７７とを備える。
【０１６９】
説明変数値取得手段７３（例えば、説明変数値取得部２３）は、１つ以上のユニットでそれぞれ構成された複数の層が結合された判別モデル（例えば、ニューラルネットワーク）を用いた演算で、第１の演算精度で演算を行う第１の演算回路（例えば、低精度演算回路５）をどの層に適用し、第１の演算精度よりも高い第２の演算精度で演算を行う第２の演算回路（例えば、高精度演算回路６）をどの層に適用するかを定めた情報である適用パターン毎に、所定の説明変数の値を取得する。
【０１７０】
目的関数計算手段７５（例えば、目的関数計算部２５）は、所定の説明変数で表される目的関数の値を、適用パターン毎に計算する。
【０１７１】
適用パターン決定手段７７(例えば、適用パターン決定部２７）は、目的関数の値が最小となる適用パターンを決定する。
【０１７２】
そのような構成によって、判別モデルを用いた演算を最適化できるように、判別モデルの各層における演算精度を自動的に定めることができる。
【０１７３】
目的関数は、少なくとも、判別モデルを用いた演算の処理速度、および、演算結果の正確さを所定の説明変数として表されていてもよい。
【０１７４】
目的関数は、第１の演算回路と第２の演算回路との間で授受されるデータ量を所定の説明変数として表されていてもよい。
【０１７５】
目的関数は、判別モデルを用いた演算を行う回路の回路規模を所定の説明変数として表されていてもよい。
【０１７６】
目的関数は、判別モデルを用いた演算での消費電力を所定の説明変数として表されていてもよい。
【０１７７】
説明変数値取得手段７３が、所定の説明変数の値を実測により取得する構成であってもよい。
【０１７８】
説明変数値取得手段７３が、所定の説明変数の値をシミュレーションにより取得する構成であってもよい。
【０１７９】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記の実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【産業上の利用の可能性】
【０１８０】
本発明は、例えば、ニューラルネットワーク等の判別モデルを用いた演算を最適化する演算最適化装置に好適に適用される。
【符号の説明】
【０１８１】
５  低精度演算回路
６  高精度演算回路
７  第１メモリ
８  第２メモリ
９  第３メモリ
１８  処理装置
１９  設計情報記憶部
２１  判別モデル記憶部
２２  データ記憶部
２３  説明変数値取得部
２４  目的関数記憶部
２５  目的関数計算部
２６  計算結果記憶部
２７  適用パターン決定部
【図１】
0006973651.tif 000002
【図２】
0006973651.tif 000003
【図３】
0006973651.tif 000004
【図４】
0006973651.tif 000005
【図５】
0006973651.tif 000006
【図６】
0006973651.tif 000007
【図７】
0006973651.tif 000008
【図８】
0006973651.tif 000009
【図９】
0006973651.tif 000010
【図１０】
0006973651.tif 000011
【図１１】
0006973651.tif 000012
【図１２】
0006973651.tif 000013
【図１３】
0006973651.tif 000014