(57)【要約】【課題】回路の小規模化、省電力化及び高速化を実現する演算処理装置、演算処理装置の制御プログラム及び演算処理装置の制御方法を提供する。【解決手段】サンプルデータ処理部１０１は、浮動小数点形式の複数の演算を含む情報処理に対し、所定のデータを用いて、各演算における入データ及び出力データを取得する。代替関数取得部１０３は、各演算のうち少なくとも超越関数を含む複雑関数で表される特定演算を抽出し、入力データを基に各特定演算における複雑関数よりも計算量の少ない代替関数を求める。置換部１０４は、代替関数取得部１０３により求められた代替関数に情報処理における特定演算を置き換える。【選択図】図２
2019212112.tif 000002
【特許請求の範囲】
【請求項１】
浮動小数点形式の複数の演算を含む情報処理に対し、所定のデータを用いて、各前記演算における入力データ及び出力データを取得する取得部と、
各前記演算のうち少なくとも超越関数を含む複雑関数で表される特定演算を抽出し、前記入力データを基に各前記特定演算における前記複雑関数よりも計算量の少ない代替関数を求める関数取得部と、
前記関数取得部により求められた前記代替関数に前記情報処理における前記特定演算を置き換える置換部と
を備えたことを特徴とする演算処理装置。
【請求項２】
前記関数取得部は、前記入力データの最大値、最小値及び中央値を基に、前記複雑関数の近似式を求め、前記近似式と前記複雑関数との誤差が許容範囲内であれば前記近似式を前記代替関数とすることを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記関数取得部は、前記最大値、前記最小値及び前記中央値を基に、最小二乗法を用いて直線近似式を求め、前記直線近似式と前記複雑関数との誤差が許容範囲内であれば前記直線近似式を前記代替関数とすることを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記関数取得部は、前記入力データに関する情報と近似式との対応表を予め保持し、前記入力データを基に前記対応表から前記複雑関数に対応する前記近似式を求め、求めた前記近似式を前記代替関数とすることを特徴とする請求項１に記載の演算処理装置。
【請求項５】
各前記演算のうち前記入力データ及び出力データが所定範囲に収まる変換可能演算を特定する特定部と、
各前記変換可能演算を固定小数点形式の演算に変換する変換部と、
各前記演算のうち前記変換可能演算以外の演算の入出力を調整する入出力調整部と、
前記情報処理の最終出力を調整する最終出力調整部とをさらに備え、
前記関数取得部は、前記変換可能演算で且つ前記複雑関数である演算を前記特定演算として抽出する
ことを特徴とする請求項１〜４のいずれか一つに記載の演算処理装置。
【請求項６】
前記特定部は、入力データ及び出力データの最大値、最小値及び分布頻度が前記所定範囲内に収まる演算を前記変換可能演算として特定することを特徴とする請求項５に記載の演算処理装置。
【請求項７】
浮動小数点形式の複数の演算を含む情報処理に対し、所定のデータを用いて、各前記演算における入力データ及び出力データを取得し、
各前記演算のうち少なくとも超越関数を含む複雑関数で表される特定演算を抽出し、
前記入力データを基に各前記特定演算における前記複雑関数よりも計算量の少ない代替関数を求め、
前記情報処理における前記特定演算を前記代替関数に置き換える
処理をコンピュータに実行させることを特徴とする演算処理装置の制御プログラム。
【請求項８】
浮動小数点形式の複数の演算を含む情報処理に対し、所定のデータを用いて、各前記演算における入力データ及び出力データを取得し、
各前記演算のうち少なくとも超越関数を含む複雑関数で表される特定演算を抽出し、
前記入力データを基に各前記特定演算における前記複雑関数よりも計算量の少ない代替関数を求め、
前記情報処理における前記特定演算を前記代替関数に置き換える
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、演算処理装置の制御プログラム及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
近年、人工知能分野、特に深層学習という新しい手法による問題解決に対する関心が高まっており、深層学習を効率よく実施するための工夫が求められている。深層学習では、個々の演算精度への要求は他のコンピュータ処理ほど厳密ではない。例えば、従来の信号処理などでは、プログラマは極力桁あふれを発生させないようにコンピュータプログラムを開発する。一方、深層学習では、大きな値がある程度飽和することは許容される。なぜなら、深層学習では、複数の入力データを畳み込み演算するときの係数の調整が主な処理となり、入力データのうち極端なデータは重視されないことが多いからである。
【０００３】
このような深層学習の特性を考慮し、例えば、深層学習を効率よく実施するための工夫の１つとして、数値の表現に通常用いられる浮動小数点形式の代わりに、固定小数点形式を用いる技術が提案されている。
【０００４】
ここで、数値の表現に浮動小数点形式を用いた情報処理を、１６ビット又は８ビットの固定小数点形式の数値を扱う情報処理に変換する従来の手順について説明する。まず、演算処理装置は、数値の表現に浮動小数点形式を使用した場合の情報処理でサンプルデータを処理する。次に、演算処理装置は、情報処理に含まれる各演算に対して固定小数点形式に変換できるか否かを判定する。具体的には以下の処理を繰り返す。
【０００５】
まず、演算処理装置は、演算が超越関数か否かを判定する。そして演算が超越関数の場合、演算処理装置は、次の演算の処理に移る。ここで、超越関数とは、入力データに対する答えの桁数が大きく異なりうる関数である。より具体的には、超越関数とは、加算、乗算及び冪根という代数的演算を有限回用いて表すことが困難な関数であり、言い換えれば、多項式方程式を満たさない解析関数である。例えば、指数関数、対数関数及び三角関数などは超越関数である。演算が超越関数でなければ、演算処理装置は、演算の入出力のデータの最大値及び最小値の頻度分布を確認する。演算の入出力のデータの最大値及び最小値の頻度分布が一定の範囲内に収まる場合、演算処理装置は、その演算は固定小数点に変換できると判定する。そして、演算処理装置は、その演算の各変数に適した固定小数点形式における小数点位置を記録する。これに対して、最大値及び最小値の頻度分布が一定の範囲内に収まらない場合、演算処理装置は、次の演算に移る。
【０００６】
各演算に対する固定小数点形式への変換の可否の判定が完了すると、演算処理装置は、情報処理を先頭から順に走査して、固定小数点形式に変換できると判定した各演算を特定して固定小数点形式に変換する。次に、演算処理装置は、固定小数点形式に変換できると判定した各演算において、入力データが浮動小数点形式である演算を特定する。そして、演算処理装置は、特定した演算を固定小数点形式に変換する場合の小数点位置を用いて、入力データを固定小数点形式に変換する処理を挿入する。
【０００７】
固定小数点形式への変換可能な演算の変換完了後に、演算処理装置は、固定小数点形式に変換できない演算の入出力の調整を以下の方法で行う。演算処理装置は、情報処理を先頭から順に走査して固定小数点形式に変換できない各演算の中から入力データが固定小数点形式である演算を特定する。そして、演算処理装置は、特定した各演算の入力データを固定小数点形式から浮動小数点形式に変換する処理を挿入する。次に、演算処理装置は、情報処理を先頭から順に走査して固定小数点形式に変換できない各演算の中から出力データが他の固定小数点形式の演算の入力データである演算を特定する。そして、演算処理装置は、特定した各演算の次の演算を固定小数点形式に変換する際の小数点位置を用いて、特定した各演算の出力データを固定小数点形式に変換する処理を挿入する。
【０００８】
固定小数点形式に変換できない演算の入出力の調整の完了後、演算処理装置は、最終出力が浮動小数点形式の場合、その最終出力を固定小数点形式に変換する処理を挿入することで最終出力調整を行う。以上により、演算処理装置は、数値の表現に浮動小数点形式を用いた情報処理を、固定小数点形式の数値表現を用いた情報処理に変換することができる。
【０００９】
ここで、演算回路の設計について考えると、所定の小数点位置である固定小数点形式の数値データを取り扱う超越関数の演算回路を設計することは困難である。そのため、情報処理に超越関数を用いる演算が含まれる場合、与えられたサンプルデータの頻度分布が固定小数点形式への変換が可能な範囲に収まっている場合でも、その演算処理を固定小数点形式に変換することは困難である。そこで、従来の固定小数点形式への変換処理では、演算処理装置は、上述のように演算が超越関数で表される場合その演算を浮動小数点形式のままにして、前後の固定小数点形式の演算との間にデータ形式を変換する処理を挿入していた。
【００１０】
また、浮動小数点形式の演算を固定小数点形式の演算に変換する技術として、対象変数の値の変化を履歴として出力し、検出した対象変数の値の範囲に基づいて固定小数点形式に変換する従来技術がある。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００８−３３７２９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、超越関数の演算はハードウェアのコスト、演算の実行時間及び消費電力が通常の演算に比べてかさむ。そのため、従来の固定小数点形式への変換のように、超越関数を残した場合、固定小数点形式に変換することによる回路の小規模化、省電力化及び高速化といった利点の一部が相殺される可能性がある。また、超越関数を含む演算の前後に浮動小数点形式と固定小数点形式との間の形式変換処理が挿入されるため、余分なコストや時間がかかるおそれがある。
【００１３】
また、履歴を基に検出した対象変数の値の範囲に応じて固定小数点形式へ変換する従来技術でも、超越関数についての取り扱いは考慮されておらず、回路の小規模化、省電力化及び高速化を実現することは困難である。
【００１４】
なお、ここでは、超越関数について説明したが、演算回路の設計が困難である関数については同様の問題が生じる。超越関数以外の演算回路の設計が困難である関数としては、例えば、平方根などがある。
【００１５】
開示の技術は、上記に鑑みてなされたものであって、回路の小規模化、省電力化及び高速化を実現する演算処理装置、演算処理装置の制御プログラム及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１６】
本願の開示する演算処理装置、演算処理装置の制御プログラム及び演算処理装置の制御方法の一つの態様において、取得部は、浮動小数点形式の複数の演算を含む情報処理に対し、所定のデータを用いて、各前記演算における入データ及び出力データを取得する。関数取得部は、各前記演算のうち少なくとも超越関数を含む複雑関数で表される特定演算を抽出し、前記入力データを基に各前記特定演算における前記複雑関数よりも計算量の少ない代替関数を求める。置換部は、前記関数取得部により求められた前記代替関数に前記情報処理における前記特定演算を置き換える。
【発明の効果】
【００１７】
１つの側面では、本発明は、回路の小規模化、省電力化及び高速化を実現することができる。
【図面の簡単な説明】
【００１８】
【図１】図１は、演算処理装置のハードウェア構成図である。
【図２】図２は、演算処理装置のブロック図である。
【図３】図３は、Ｑ表記の決定処理を説明するための図である。
【図４】図４は、超越関数と直線近似式とを表す図である。
【図５】図５は、超越関数と直線近似式の誤差を説明するための図である。
【図６】図６は、実施例１に係る演算処理装置による深層学習の処理のフローチャートである。
【図７】図７は、浮動小数点版プログラムの固定小数点版プログラムへの変換処理のフローチャートである。
【図８】図８は、変換可能演算の抽出及び複雑関数の置換の処理のフローチャートである。
【図９】図９は、実施例１に係る演算処理装置による深層学習全体の流れを説明するための図である。
【発明を実施するための形態】
【００１９】
以下に、本願の開示する演算処理装置、演算処理装置の制御プログラム及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置、演算処理装置の制御プログラム及び演算処理装置の制御方法が限定されるものではない。
【実施例１】
【００２０】
図１は、演算処理装置のハードウェア構成図である。演算処理装置１は、サーバ装置などのコンピュータである。演算処理装置１は、図１に示すように、ＣＰＵ１１、メモリ１２、ディスク装置１３、入力装置１４及び出力装置１５を有する。ＣＰＵ１１は、バスを介してメモリ１２、ディスク装置１３、入力装置１４及び出力装置１５と接続される。
【００２１】
ディスク装置１３は、ハードディスクなどの記憶媒体を備える。本実施例では、ディスク装置１３は、利用者により入力装置１４を用いて入力された浮動小数点版プログラム３１及び浮動小数点サンプルデータ３２を予め格納する。浮動小数点版プログラム３１は、例えば、数値の表現に浮動小数点形式が用いられた深層学習プログラムである。すなわち、浮動小数点版プログラム３１は、浮動小数点形式の入力データが与えられ、浮動小数点形式の数値を用いて計算を行うプログラムである。浮動小数点版プログラム３１は、複数の浮動小数点形式の演算を含む。例えば、浮動小数点版プログラム３１は、深層学習における畳み込み層（Convolution  Layer）、プーリング層（Pooling  Layer）、全結合層（Fully  Connected  Layer）及びＳｏｆｔｍａｘ層といった各層で実行される演算を含む。浮動小数点サンプルデータ３２は、浮動小数点版プログラム３１のサンプル用の入力データである。言い換えると、当該浮動小数点サンプルデータ３２は、所定のデータであって、浮動小数点版プログラム３１が正常に動作するようなデータであれば、どのようなデータであってもよい。浮動小数点サンプルデータ３２は、浮動小数点形式の値を有する。この浮動小数点版プログラム３１が、「情報処理」の一例にあたる。
【００２２】
また、ディスク装置１３は、後述する浮動小数点版プログラム３１の固定小数点形式への変換処理が行われた後に、その変換結果である固定小数点版プログラム３３を格納する。固定小数点版プログラム３３は、数値の表現に固定小数点形式が用いられた深層学習プログラムである。すなわち、固定小数点版プログラム３３は、固定小数点形式の入力データが与えられ、固定小数点形式の数値を用いて計算を行うプログラムである。
【００２３】
さらに、ディスク装置１３は、後述する浮動小数点形式の演算を固定小数点形式の演算に変換する機能を実現するプログラムを含む各種プログラムを有する。
【００２４】
メモリ１２は、例えばＤＲＡＭ（Dynamic  Random  Access  Memory）などの主記憶装置である。入力装置１４は、例えばキーボードやマウスなどである。演算処理装置１の利用者は、入力装置１４を用いて演算処理装置１へデータ及び命令の入力などを行う。出力装置１５は、例えばモニタなどである。演算処理装置１の利用者は、出力装置１５を用いて演算処理装置１による演算結果の確認などを行う。
【００２５】
ＣＰＵ１１は、ディスク装置１３に格納された各種プログラムを読み出してメモリ１２上に展開して実行する。これにより、例えば、ＣＰＵ１１は、後述する浮動小数点形式の演算を固定小数点形式の演算に変換する機能や深層学習の機能を実現する。
【００２６】
次に、図２を参照して、本実施例に係る演算処理装置１による浮動小数点形式の演算を固定小数点形式の演算に変換する機能について説明する。図２は、演算処理装置のブロック図である。
【００２７】
図２に示すように、演算処理装置１は、サンプルデータ処理部１０１、演算変換判定部１０２、代替関数取得部１０３、置換部１０４、変換部１０５、入出力調整部１０６、最終出力調整部１０７を有する。さらに、演算処理装置１は、記憶部１０８及び深層学習実行部１０９を有する。サンプルデータ処理部１０１、演算変換判定部１０２、代替関数取得部１０３、置換部１０４、変換部１０５、入出力調整部１０６及び最終出力調整部１０７深層学習実行部１０９は、ＣＰＵ１１がディスク装置１３に格納された各種プログラムを実行することで実現される。また、深層学習実行部１０９も、ＣＰＵ１１がディスク装置１３に格納された各種プログラムを実行することで実現される。
【００２８】
記憶部１０８は、図１に示すディスク装置１３により実現される。記憶部１０８は、予め浮動小数点版プログラム３１及び浮動小数点サンプルデータ３２を記憶する。
【００２９】
サンプルデータ処理部１０１は、浮動小数点版プログラム３１及び浮動小数点サンプルデータ３２を記憶部１０８から取得する。次に、サンプルデータ処理部１０１は、各浮動小数点サンプルデータ３２を入力データとして浮動小数点版プログラム３１を実行する。そして、サンプルデータ処理部１０１は、浮動小数点版プログラム３１に含まれる各演算に対する入力データ及び各演算からの出力データを取得する。その後、サンプルデータ処理部１０１は、各演算の入出力データを演算変換判定部１０２へ出力する。このサンプルデータ処理部１０１が、「取得部」の一例にあたる。
【００３０】
演算変換判定部１０２は、浮動小数点版プログラム３１に含まれる各演算の入出力データの入力をサンプルデータ処理部１０１から受ける。次に、演算変換判定部１０２は、浮動小数点版プログラム３１に含まれる演算から１つの演算を判定対象演算として抽出する。そして、演算変換判定部１０２は、判定対象演算の入力データの最大値及び最小値を取得する。さらに、演算変換判定部１０２は、判定対象演算の入力データの頻度分布を求める。また、演算変換判定部１０２は、判定対象演算の出力データの最大値及び最小値を取得する。さらに、演算変換判定部１０２は、判定対象演算の出力データの頻度分布を求める。
【００３１】
次に、演算変換判定部１０２は、判定対象演算の入力データの最大値、最小値及び頻度分布、並びに、出力データの最大値、最小値及び頻度分布が一定の範囲内に収まるか否かを判定する。入力データの最大値、最小値及び頻度分布、並びに、出力データの最大値、最小値及び頻度分布が一定の範囲内に収まる場合、演算変換判定部１０２は、判定対象演算が固定小数点形式に変換可能な変換可能演算であると判定する。逆に、入力データの最大値、最小値及び頻度分布、並びに、出力データの最大値、最小値及び頻度分布が一定の範囲内に収まらない場合、演算変換判定部１０２は、判定対象演算が固定小数点形式に変換が困難な演算であると判定する。そして、演算変換判定部１０２は、各変換可能演算について固定小数点形式に変換する場合に数値の小数点がどの位置にあるかを示すＱ表記を取得する。
【００３２】
Ｑ表記はＱフォーマットとも呼ばれる。例えば、Ｎビットの固定小数点のＱ表記は、Ｑｍ，ｎと表される。ただし、ｍ＋ｎ＝Ｎ−１である。これは、数値の正負の符号を表すために１ビットを使用するからである。そして、Ｑｍ，ｎとされたＱ表記で表現できる数値の範囲は、−２ｍ〜＋２ｍ−２−ｎであり、その精度は２−ｎである。
【００３３】
以下に、演算変換判定部１０２による判定処理及びＱ表記の決定処理の詳細について説明する。Ｑ表記においてｍとｎとの和は一定であるため、表現できる数値の範囲と精度とはトレードオフの関係となる。したがって、表現できる数値の範囲を広げた場合、個々のデータを弁別するための精度は下がる。逆に、精度を取るために表現できる数値の範囲を狭めた場合、その範囲を超えるデータが発生する可能性が上がる。範囲を超えるデータが発生した状態は「飽和」と呼ばれ、飽和状態において範囲を超えないデータが、そのＱ表記での表現可能な最大値又は最小値にあたる。
【００３４】
表現できる数値の範囲を広げた場合や飽和状態となった場合のいずれでも、深層学習の収束までの繰り返し実行回数が延びる、あるいは永遠に収束しないといった状態に陥るおそれがある。そこで、深層学習を固定小数点形式で実施する場合、学習の収束が浮動小数点形式の場合と同程度で収束するＱ表記の範囲は、予め決られていることが好ましい。このＱ表記の範囲は、個々の深層学習プログラムによって異なる。そこで、演算変換判定部１０２は、以下の方法により実測で判定対象演算に対するＱ表記を取得する。
【００３５】
演算変換判定部１０２は、浮動小数点版プログラム３１で浮動小数点サンプルデータ３２を用いた場合の学習収束までの繰り返し実行回数を計測する。次に、演算変換判定部１０２は、入力データの最大値、最小値及び頻度分布から固定小数点版プログラム３３のＱ表記を仮決めする。次に、演算変換判定部１０２は、仮決めしたＱ表記により、固定小数点版プログラム３３を実行する。そして、演算変換判定部１０２は、浮動小数点版プログラム３１における判定対象演算を仮決めしたＱ表記を用いて固定小数点形式に変換したプログラムを実行した場合の繰り返し実行回数を求める。そして、演算変換判定部１０３は、求めた実行回数が元の浮動小数点版プログラム３１を実行した場合の繰り返し実行回数を大きく超える場合、Ｑ表記を更新する。
【００３６】
その後、演算変換判定部１０２は、更新したＱ表記を用いて浮動小数点版プログラム３１における判定対象演算を固定小数点形式に変換したプログラムを実行して、繰り返し実行回数の比較を再度行う。判定対象演算を固定小数点形式に変換したプログラムを実行した場合の繰り返し実行回数が、浮動小数点版プログラム３１を実行した場合の繰り返し実行回数を大きく超えなくなるまで、演算変換判定部１０２は、Ｑ表記の更新を繰り返す。そして、演算変換判定部１０２は、判定対象演算を固定小数点形式に変換したプログラムを実行した場合の繰り返し実行回数が浮動小数点版プログラム３１を実行した場合の繰り返し実行回数と同程度になると、判定対象演算は変換可能演算であると判定する。そして、演算変換判定部１０２は、その時点でのＱ表記を判定対象演算で用いる固定小数点のＱ表記とする。例えば、演算変換判定部１０２は、繰り返し実行回数の差が予め決められた閾値以下になった場合に、繰り返し実行回数が同程度と判定する。
【００３７】
例えば、入力データを例に演算変換判定部１０２による判定処理及びＱ表記の決定処理について説明する。ここでは、入力データの最大値、最小値及び頻度分布に応じて入力データが図３のグラフ２０１で表される場合で説明する。図３は、Ｑ表記の決定処理を説明するための図である。グラフ２０１及び２０２は、入力データの分布を表すグラフであり、いずれも縦軸で個数を表し、横軸で入力データの値である入力値を表す。
【００３８】
８ビットの固定小数点を用いる場合、最大値が８．５であり、最小値が０．０であるので、演算変換判定部１０２は、Ｑ表記をＱ４．３として仮決めする。Ｑ４．３は、表現範囲が−１６〜１５．８７５であり、精度が０．１２５である。演算変換判定部１０２は、判定対象演算を固定小数点形式にした場合のＱ表記をＱ４．３として、深層学習を実行する。この深層学習が浮動小数点形式の場合と同程度の繰り返し実行回数で学習が収束すれば、演算変換判定部１０２は、判定対象演算が変換可能演算であると判定し、そのＱ表記をＱ４．３と決定する。
【００３９】
また、深層学習が浮動小数点形式の場合と同程度の繰り返し実行回数で学習が収束しない場合、演算変換判定部１０２は、例えば、Ｑ表記をＱ３．４に変更する。Ｑ３．４は、表現範囲がー８〜７．９３２５であり、精度が０．０６２５である。この場合、グラフ２０２において、７．９３２５である最大値Ｔを超える入力データが飽和する。ただし、Ｑ３．４の場合、Ｑ４．３のＱ表記の場合に比べてデータを表現する精度が高くなる。演算変換判定部１０２は、判定対象演算を固定小数点形式にした場合のＱ表記をＱ３．４として、深層学習を実行する。この深層学習が浮動小数点形式の場合と同程度の繰り返し実行回数で学習が収束すれば、演算変換判定部１０２は、判定対象演算が変換可能演算であると判定し、そのＱ表記をＱ３．４と決定する。
【００４０】
以上のような処理を行って、演算変換判定部１０２は、判定対象演算が変換可能演算か否かを判定し、判定対象演算が変換可能演算の場合、判定対象可能演算のＱ表記を決定する。演算変換判定部１０２は、この判定処理を浮動小数点版プログラム３１に含まれる全ての演算について繰り返し実行する。そして、演算変換判定部１０２は、変換可能演算であると判定した演算の情報を代替関数取得部１０３へ出力する。さらに、演算変換判定部１０２は、変換可能演算であると判定した各演算について決定したＱ表記の情報を変換部１０５へ出力する。この演算変換判定部１０２が、「特定部」の一例にあたる。
【００４１】
代替関数取得部１０３は、変換可能演算である演算の情報の入力を演算変換判定部１０２から受ける。次に、代替関数取得部１０３は、変換可能演算であると判定された各演算を表す関数が、固定小数点形式へ変換するための演算回路の設計が困難である複雑関数か否かを判定する。複雑関数は、入力に対して出力の桁数が所定値以上となる関数と定義することもできる。複雑関数には、例えば、超越関数や平方根を求める関数などが含まれる。ただし、複雑関数は、固定小数点へ変換するための演算回路の設計が困難である関数であれば他の関数でもよく、例えば、べき乗計算を行う関数などでもよい。べき乗計算には、例えば、ｘの２乗、ｘの３乗、ｘの−１乗（１／ｘ）、ｘの１／２乗（√ｘ）、ｘの−１／２乗（１／√ｘ）などがある。この複雑演算で表される演算が、「特定演算」の一例にあたる。
【００４２】
代替関数取得部１０３は、複雑関数で表される演算の中から演算を１つ選択する。次に、代替関数取得部１０３は、選択した演算の入力データの最小値、最大値及び中央値を求める。次に、代替関数取得部１０３は、入力データの最小値、最大値及び中央値の３点に対応する演算の出力データの値である出力値を算出する。そして、代替関数取得部１０３は、入力値と出力値との対応を表す座標上の、入力データの最小値、最大値及び中央値とそれらの出力値を表す３点に対して、最小二乗法を用いて直線近似式を求める。次に、代替関数取得部１０３は、求めた直線近似式の出力値と元の複雑関数の出力値との誤差を求める。そして、誤差が予め決められた許容範囲内であれば、代替関数取得部１０３は、その演算の情報とともに求めた直線近似式の情報を代替関数として置換部１０４へ出力し、置換を指示する。これに対して誤差が予め決められた許容範囲内に収まらない場合、代替関数取得部１０３は、その演算の置換を行わない旨を置換部１０４に通知する。代替関数取得部１０３は、変換可能関数全てについて上述した代替関数を決定する処理を繰り返す。
【００４３】
ここで、図４及び５を参照して、複雑関数から直線近似式への置換についてさらに説明する。図４は、超越関数と直線近似式とを表す図である。図５は、超越関数と直線近似式の誤差を説明するための図である。ここでは、複雑関数がｙ＝ｌｏｇ（ｘ）という超越関数である場合で説明する。図４及び５は、いずれも横軸でｘの値を表し、縦軸でｙの値を表す。
【００４４】
代替関数取得部１０３は、図４に示すように、ｌｏｇ（ｘ）である超越関数３０１の入力データにおける最小値３１１、最大値３１２及び中央値３１３を求める。次に、代替関数取得部１０３は、最小値３１１、最大値３１２及び中央値３１３を入力値とした場合の出力値を表す点３２１〜３２３を求める。そして、代替関数取得部１０３は、点３２１〜３２３に対して、最小二乗法を用いて直線近似式を求める。近似直線３０２は、代替関数取得部１０３により求められた直線近似式で表される直線である。ここで、近似直線３０２は、入力データが多い中央値３１３の近傍で、超越関数３０１との誤差が少なくなる。次に、代替関数取得部１０３は、入力データの範囲内での近似直線３０２と超越関数３０１との最大誤差を求める。ここでは、入力値の最大値３１２において誤差が最大となる。図５における枠Ｆは、入力値の最大値３１２付近の近似直線３０２と超越関数３０１とを拡大したものを表す。代替関数取得部１０３は、入力データの範囲内での近似直線３０２と超越関数３０１との最大誤差として誤差Ｐを取得する。そして、代替関数取得部１０３は、入力データの範囲内での最大誤差である誤差Ｐが許容範囲内であれば超越関数３０１を近似直線３０２に置換可能であると判定する。この代替関数取得部１０３が、「関数取得部」の一例にあたる。
【００４５】
置換部１０４は、関数の置換を行う演算の情報とともにその演算に対応する直線近似式の情報の入力を代替関数取得部１０３から受ける。次に、置換部１０４は、浮動小数点版プログラム３１を記憶部１０８から取得する。そして、置換部１０４は、浮動小数点版プログラム３１に含まれるプログラムにおける各演算のうち関数の置換が指示された演算を表す関数を複雑関数から直線近似式へ置換する。その後、置換部１０４は、指定された演算の複雑関数から直線近似への置換を施した浮動小数点版プログラム３１を変換部１０５へ出力する。
【００４６】
変換部１０５は、複雑関数から直線近似式への置換が施された浮動小数点版プログラム３１の入力を置換部１０４から受ける。また、変換部１０５は、浮動小数点版プログラム３１に含まれる各変換可能演算のＱ表記の入力を演算変換判定部１０２から受ける。次に、変換部１０５は、浮動小数点版プログラム３１に含まれる演算を先頭から順に走査し、変換可能演算を特定する。そして、変換部１０５は、特定した各変換可能演算を変換部１０５から指定された固定小数点形式に変換し、固定小数点版プログラム３３を生成する。さらに、変換部１０５は、固定小数点形式に変換した各演算の入力データが浮動小数点であるか否かを判定する。入力データが浮動小数点である演算について、変換部１０５は、その演算に与えられたＱ表記で入力データを固定小数点形式に変換する処理を固定小数点版プログラム３３に挿入する。その後、変換部１０５は、固定小数点版プログラム３３を入出力調整部１０６へ出力する。
【００４７】
入出力調整部１０６は、固定小数点版プログラム３３の入力を変換部１０５から受ける。次に、入出力調整部１０６は、固定小数点版プログラム３３に含まれる演算を先頭から順に走査し、固定小数点形式に変換されずに浮動小数点形式のままの演算を抽出する。次に、入出力調整部１０６は、抽出した浮動小数点形式の各演算に対する入力データが固定小数点形式か否かを判定する。そして、入出力調整部１０６は、抽出した演算のうち入力データが固定小数点形式である演算について、その演算の入力データを浮動小数点形式に変換する処理を固定小数点版プログラム３３に挿入する。
【００４８】
次に、入出力調整部１０６は、抽出した浮動小数点形式の演算の出力データが他の固定小数点形式の演算の入力データとなる場合、後ろの演算に与えられたＱ表記で出力データを固定小数点形式に変換する処理を固定小数点版プログラム３３に挿入する。その後、入出力調整部１０６は、入出力調整が完了した固定小数点版プログラム３３を最終出力調整部１０７へ出力する。
【００４９】
最終出力調整部１０７は、入出力調整が完了した固定小数点版プログラム３３の入力を入出力調整部１０６から受ける。そして、最終出力調整部１０７は、固定小数点版プログラム３３の最終の出力データが浮動小数点形式であるか否かを判定する。最終の出力データが浮動小数点形式である場合、最終出力調整部１０７は、最終の出力データを固定小数点形式に変換する処理を固定小数点版プログラム３３に挿入し、最終的な固定小数点版プログラム３３を作成する。これに対して、最終の出力データが浮動小数点形式でない場合、最終出力調整部１０７は、取得した固定小数点版プログラム３３を最終的な固定小数点版プログラム３３とする。その後、最終出力調整部１０７は、最終的な固定小数点版プログラム３３を記憶部１０８に記憶させる。
【００５０】
深層学習実行部１０９は、操作者からの入力データを受信する。そして、深層学習実行部１０９は、記憶部１０８に記憶された固定小数点版プログラム３３を読み出し、受信したデータを用いて深層学習を実行する。
【００５１】
本実施例に係る深層学習実行部１０９は、深層学習の実行中に固定小数点版プログラム３３に含まれる各演算における各変数の小数点位置を、オーバーフローの量を抑えるように更新する処理を行う。例えば、深層学習実行部１０９は、記憶部１０８に記憶された固定小数点版プログラム３３に含まれる各演算に割り当てられたＱ表記を用いて深層学習を始める。そして、深層学習実行部１０９は、各層の各変数のオーバーフローの回数を統計情報として保存する。変数にオーバーフローが発生した場合、深層学習実行部１０９は、変数に対する飽和処理を行い、学習を続行する。ここで、飽和処理とは、オーバーフローした上位桁を無視する処理である。
【００５２】
そして、深層学習実行部１０９は、学習終了後、統計情報として蓄積したオーバーフロー回数からオーバーフロー率を求め、求めたオーバーフロー率を基に、固定小数点版プログラム３３の各演算で用いる固定小数点の小数点位置を調整する。その後、深層学習実行部１０９は、固定小数点の小数点位置を調整した固定小数点版プログラム３３を用いて、オーバーフローの回数をカウントしつつ深層学習を再度行う。深層学習実行部１０９は、深層学習の状態が所定の条件を満たした場合、深層学習を終了する。例えば、深層学習実行部１０９は、全結合層でのエラーが基準値以下となるか又は学習回数が既定の最大値に達した場合に深層学習を終了する。
【００５３】
次に、図６を参照して、本実施例に係る演算処理装置１による深層学習の処理の全体的な流れを説明する。図６は、実施例１に係る演算処理装置による深層学習の処理のフローチャートである。
【００５４】
サンプルデータ処理部１０１は、浮動小数点形式の深層学習用プログラムである浮動小数点版プログラム３１を記憶部１０８から取得する（ステップＳ１）。
【００５５】
また、サンプルデータ処理部１０１は、浮動小数点サンプルデータ３２を記憶部１０８から取得する（ステップＳ２）。
【００５６】
次に、サンプルデータ処理部１０１、演算変換判定部１０２、代替関数取得部１０３、置換部１０４、変換部１０５、入出力調整部１０６及び最終出力調整部１０７は、固定小数点形式の深層学習プログラムである固定小数点版プログラム３３を生成する（ステップＳ３）。その後、最終出力調整部１０７は、生成した固定小数点版プログラム３３を記憶部１０８に記憶させる。
【００５７】
その後、深層学習実行部１０９は、記憶部１０８に記憶された固定小数点版プログラム３を用いて深層学習を実行する（ステップＳ４）。
【００５８】
次に、図７を参照して、浮動小数点版プログラム３１の固定小数点版プログラム３３への変換処理の流れについて説明する。図７は、浮動小数点版プログラムの固定小数点版プログラムへの変換処理のフローチャートである。図７に示したフローチャートは、図６におけるステップＳ３の処理の一例にあたる。
【００５９】
サンプルデータ処理部１０１は、浮動小数点サンプルデータ３２を用いて浮動小数点版プログラム３１を実行してサンプルデータを処理する（ステップＳ１１）。これにより、サンプルデータ処理部１０１は、浮動小数点版プログラム３１に含まれる各演算の入力データ及び出力データを取得する。そして、サンプルデータ処理部１０１は、浮動小数点版プログラム３１に含まれる各演算の入力データ及び出力データを演算変換判定部１０２へ出力する。
【００６０】
演算変換判定部１０２は、浮動小数点版プログラム３１に含まれる各演算の入力データ及び出力データの入力をサンプルデータ処理部１０１から受ける。そして、演算変換判定部１０２は、各演算の入力データの最大値、最小値及び頻度分布、並びに、出力データの最大値、最小値及び頻度分布を取得する。次に、演算変換判定部１０２は、各演算の入力データの最大値、最小値及び頻度分布、並びに、出力データの最大値、最小値及び頻度分布が一定の範囲内に収まるか否かを判定し、演算毎に固定小数点形式に変換できるか否かを検査する。ここで、入力データの最大値、最小値及び頻度分布、並びに、出力データの最大値、最小値及び頻度分布が一定の範囲内に収まる場合、演算変換判定部１０２は、その演算が固定小数点形式に変換可能な変換可能演算であると判定する。そして、各変換可能演算について、演算変換判定部１０２は、固定小数点形式に変換する場合のＱ表記を決定する（ステップＳ１２）。その後、演算変換判定部１０２は、変換可能演算の情報を代替関数取得部１０３及び変換部１０５へ出力する。さらに、演算変換判定部１０２は、各変換可能演算のＱ表記の情報を変換部１０５へ出力する。
【００６１】
代替関数取得部１０３は、変換可能演算の情報の入力を演算変換判定部１０２から受ける。次に、代替関数取得部１０３は、変換可能演算のうち複雑関数で表される演算を抽出する。次に、代替関数取得部１０３は、抽出した各変換可能演算の入力データの最大値、最小値及び中央値を求める。そして、代替関数取得部１０３は、求めた入力データの最大値、最小値及び中央値を用いて各変換可能演算を表す複雑関数の直線近似式を求める。次に、代替関数取得部１０３は、各変換可能演算を表す複雑関数とその直線近似式との誤差が許容範囲内であるか否かを判定する。誤差が許容範囲内であれば、代替関数取得部１０３は、変換可能演算を表す複雑関数に求めた直線近似式が置換可能であると判定する。これに対して、誤差が許容範囲内になければ、代替関数取得部１０３は、変換可能演算を表す複雑関数を置換する直線近似式は無いと判定する。このようにして、代替関数取得部１０３は、演算を表す複雑関数に置換可能な直線近似式を求める（ステップＳ１３）。その後、代替関数取得部１０３は、置換可能な複雑関数で表される変換可能演算の情報及び置換する直線近似式の情報を置換部１０４へ出力する。
【００６２】
置換部１０４は、置換可能な複雑関数で表される変換可能演算の情報及び置換する直線近似式の情報の入力を代替関数取得部１０３から取得する。また、置換部１０４は、浮動小数点版プログラム３１を記憶部１０８から取得する。そして、置換部１０４は、浮動小数点版プログラム３１に含まれる演算を先頭から順に走査して置換可能な複雑関数で表される変換可能演算を抽出する。次に、置換部１０４は、浮動小数点版プログラム３１における抽出した変換可能演算を表す複雑関数を取得した直線近似式に置換する（ステップＳ１４）。その後、置換部１０４は、複雑関数を直線近似式に置換した浮動小数点版プログラム３１を変換部１０５へ出力する。
【００６３】
変換部１０５は、複雑関数を直線近似式に置換した浮動小数点版プログラム３１の入力を置換部１０４から受ける。また、変換部１０５は、変換可能演算の情報の入力を演算変換判定部１０２から受ける。次に、変換部１０５は、取得した浮動小数点版プログラム３１に含まれる演算を先頭から走査し、変換可能演算を抽出する。そして、変換部１０５は、浮動小数点版プログラム３１における抽出した変換可能演算を固定小数点形式に変換して固定小数点版プログラム３３を生成する（ステップＳ１５）。さらに、変換部１０５は、固定小数点形式に変換した演算の入力データが浮動小数点形式である場合、その入力データを固定小数点形式に変換する処理を固定小数点版プログラム３３に挿入する。その後、変換部１０５は、固定小数点版プログラム３３を入出力調整部１０６へ出力する。
【００６４】
入出力調整部１０６は、固定小数点版プログラム３３の入力を変換部１０５から受ける。次に、入出力調整部１０６は、固定小数点版プログラム３３に含まれる演算を先頭から順に走査して浮動小数点形式の演算を抽出する。そして、入出力調整部１０６は、抽出した浮動小数点形式の演算の入出力の調整を行う（ステップＳ１６）。具体的には、入出力調整部１０６は、抽出した各浮動小数点形式の演算の入力データが固定小数点形式か否かを判定する。入力データが固定小数点形式の場合、入出力調整部１０６は、その浮動小数点形式の演算の入力データを浮動小数点形式に変換する処理を固定小数点版プログラム３３に挿入する。さらに、入出力調整部１０６は、抽出した各浮動小数点形式の演算の出力データが固定小数点形式の演算の入力データであるか否かを判定する。出力データが固定小数点形式の演算の入力データである場合、入出力調整部１０６は、その浮動小数点形式の演算の出力データを固定小数点形式に変換する処理を固定小数点版プログラム３３に挿入する。その後、入出力調整部１０６は、浮動小数点形式の演算の入出力の調整を行った固定小数点版プログラム３３を最終出力調整部１０７へ出力する。
【００６５】
最終出力調整部１０７は、固定小数点版プログラム３３の入力を入出力調整部１０６から受ける。そして、最終出力調整部１０７は、固定小数点版プログラム３３の最終出力の調整を行う（ステップＳ１７）。具体的には、最終出力調整部１０７は、最終の出力データが浮動小数点形式であるか否かを判定する。そして、最終の出力データが浮動小数点形式で有れば、最終出力調整部１０７は、最終の出力データを固定小数点形式に変換する処理を固定小数点版プログラム３３に挿入する。その後、最終出力調整部１０７は、固定小数点版プログラム３３を記憶部１０８に記憶させる。
【００６６】
次に、図８を参照して、変換可能演算の抽出及び複雑関数の置換の処理の流れについて説明する。図８は、変換可能演算の抽出及び複雑関数の置換の処理のフローチャートである。図８に示したフローは、図７におけるステップＳ１２〜Ｓ１４で実行される処理を具体的にした一例にあたる。図７では、特定の演算に対する処理を行う場合で説明する。
【００６７】
演算変換判定部１０２は、特定の演算における入力データ及び出力データの最大値、最小値及び分布頻度を求める（ステップＳ１０１）。
【００６８】
演算変換判定部１０２は、Ｑ表記を変更しつつ入力データ及び出力データの最大値、最小値及び分布頻度が一定の範囲に収まるか否かを判定する。入力データ及び出力データの最大値、最小値及び分布頻度が一定の範囲に収まらない場合（ステップＳ１０２：否定）、演算変換判定部１０２は、特定の演算に対する関数の置換処理を終了する。
【００６９】
これに対して、入力データ及び出力データの最大値、最小値及び分布頻度が一定の範囲に収まる場合（ステップＳ１０２：肯定）、演算変換判定部１０２は、特定の演算が変換可能演算であると判定する。そして、演算変換判定部１０２は、特定の演算を固定小数点形式に変換する場合のＱ表記として、入力データ及び出力データの最大値、最小値及び分布頻度が一定の範囲に収まる場合のＱ表記を記録する（ステップＳ１０３）。その後、演算変換判定部１０２は、変換可能演算である特定の演算の情報を代替関数取得部１０３へ出力する。
【００７０】
代替関数取得部１０３は、変換可能演算である特定の演算の情報の入力を演算変換判定部１０２から受ける。そして、代替関数取得部１０３は、特定の演算が複雑関数か否かを判定する（ステップＳ１０４）。特定の演算が複雑関数でない場合（ステップＳ１０４：否定）、代替関数取得部１０３は、特定の演算に対する関数の置換処理を終了する。
【００７１】
これに対して、特定の演算が複雑関数である場合（ステップＳ１０４：肯定）、代替関数取得部１０３は、特定の演算の入力データの最大値、最小値及び中心値を求める（ステップＳ１０５）。
【００７２】
次に、代替関数取得部１０３は、入力データの最大値、最小値及び中心値に対応する出力データを求める。そして、代替関数取得部１０３は、入力データと出力データとを表す座標における入力データの最大値、最小値及び中心値に対応する特定の演算を表す複雑関数上の３点に対する直線近似式を最小二乗法を用いて算出する（ステップＳ１０６）。
【００７３】
次に、代替関数取得部１０３は、特定の演算を表す複雑関数と直線近似式との差を求め、直線近似式による近似誤差が所定範囲内に収まるか否かを判定する（ステップＳ１０７）。近似誤差が所定範囲内に収まらない場合（ステップＳ１０７：否定）、代替関数取得部１０３は、特定の演算に対する関数の置換処理を終了する。
【００７４】
これに対して、近似誤差が所定範囲内である場合（ステップＳ１０７：肯定）、代替関数取得部１０３は、特定の演算を表す関数を複雑関数から直線近似式に置換する（ステップＳ１０８）。その後、代替関数取得部１０３は、特定の演算に対する関数の置換処理を終了する。
【００７５】
次に、図９を参照して、本実施例に係る演算処理装置１による深層学習全体の流れの詳細に説明する。図９は、実施例１に係る演算処理装置による深層学習全体の流れを説明するための図である。
【００７６】
記憶部１０８は、浮動小数点版プログラム３１を保持する。浮動小数点版プログラム３１は、例えば、畳み込み層４１１、プーリング層４１２、畳み込み層４１３、プーリング層４１４、全結合層４１５、全結合層４１６及びＳｏｆｔｍａｘ層４１７を有する。演算処理装置１は、浮動小数点版プログラム３１を実行する場合、各層においてそれぞれ演算を行う。畳み込み層４１１、プーリング層４１２、畳み込み層４１３、プーリング層４１４、全結合層４１５、全結合層４１６及びＳｏｆｔｍａｘ層４１７における演算は浮動小数点形式の演算である。また、ここではＳｏｆｔｍａｘ層４１７において複雑関数である指数関数が用いられ、他の層では複雑関数が使用されない場合で説明する。
【００７７】
置換部１０４は、Ｓｏｆｔｍａｘ層４１７における指数関数を直線近似式に置換する（ステップＳ２０１）。また、変換部１０５は、畳み込み層４１１、プーリング層４１２、畳み込み層４１３、プーリング層４１４、全結合層４１５、全結合層４１６及びＳｏｆｔｍａｘ層４１７における変換可能演算を固定小数点形式に変換する。ここでは、変換部１０５は、畳み込み層４２１、プーリング層４２２、畳み込み層４１３、プーリング層４１４、全結合層４１５、全結合層４１６及びＳｏｆｔｍａｘ層４１７を生成する。また、変換部１０５は、固定小数点形式に変換した演算への入力データが浮動小数点形式の場合、その入力データを固定小数点形式に変換する処理を挿入する。さらに、変換部１０５は、浮動小数点形式の演算の入出力の調整及び最終出力の調整を行う。これにより、固定小数点版プログラム３３が生成される（ステップＳ２０２）。
【００７８】
その後、深層学習実行部１０９は、固定小数点版プログラム３３を用いて深層学習を開始する（ステップＳ２０３）。深層学習実行部１０９は、各層の各演算におけるオーバーフロー回数を統計情報として保存する（ステップＳ２０４）。そして、学習中にオーバーフローが発生した場合、深層学習実行部１０９は、飽和処理を実行する（ステップＳ２０５）。
【００７９】
予め決められた回数の学習終了後、深層学習実行部１０９は、統計情報として保持するオーバーフロー回数からオーバーフロー率を求める。次に、深層学習実行部１０９は、オーバーフロー率が規定値を超えた場合、その演算における固定小数点の小数点位置を１つ下げ、整数部を１ビット拡張する。また、オーバーフロー率の２倍の値が規定値以下の場合、深層学習実行部１０９は、その演算における固定小数点の小数点位置を１つ上げ、整数部を１ビット削減する。このように、深層学習実行部１０９は、各層の各演算の小数点位置を更新することで、固定小数点版プログラム３３の精度を更新する（ステップＳ２０６）。そして、深層学習実行部１０９は、ステップＳ２０３に戻り、精度を更新した固定小数点版プログラム３３を用いて深層学習を行う。深層学習実行部１０９は、全結合層４２７でのエラーが基準値以下となるか又は学習回数が既定の最大値に達した場合に深層学習を終了する。
【００８０】
ここで、本実施例に係る演算処理装置１は、上述したように小数点位置の更新を行い、深層学習の精度を上げる処理を行ったが、深層学習の精度がある程度低くても許容できる場合、小数点位置の更新の処理は行わなくてもよい。
【００８１】
以上に説明したように、本実施例に係る演算処理装置は、超越関数などの演算回路の設計が困難である複雑関数を近似直線に置換し、浮動小数点形式のプログラムを固定小数点形式のプログラムに変換する。これにより、浮動小数点形式のプログラムに含まれる演算のうち固定小数点形式の演算に変換できる演算を増やすことができる。したがって、複雑関数によるハードウェアのコストの増加や、実行時間及び消費電力の増加を軽減することができる。また、複雑関数をそのまま残した場合の浮動小数点形式と固定小数点形式との間の形式変換処理の挿入を回避することができ、形式変換処理の挿入によるコストの増加及び処理時間の増加を抑えることができる。すなわち、プログラムを実行する回路の小規模化、省電力化及び高速化を実現することができる。
【実施例２】
【００８２】
次に、実施例２について説明する。本実施例に係る演算処理装置１は、代替関数として近似直線式以外の関数を用いることが実施例１と異なる。本実施例に係る演算処理装置１も、図２のブロック図で表される。以下の説明では、実施例１と同様の各部の機能については説明を省略する。
【００８３】
代替関数取得部１０３は、変換可能演算のうち複雑関数で表される各演算の中から関数の置換を行う演算を１つずつ順番に選択する。そして、代替関数取得部１０３は、選択した演算の入力データの最大値、最小値及び中央値を取得する。次に、代替関数取得部１０３は、入力データの最大値、最小値及び中央値を用いた場合の選択した演算の出力データを算出する。
【００８４】
そして、代替関数取得部１０３は、入力データ及び出力データを表す座標上の、入力データの最大値、最小値及び中央値の場合の選択した演算上の３点を特定する。次に、代替関数取得部１０３は、折れ線近似を用いて選択した演算を表す複雑関数を近似的に表す代替関数を取得する。そして、代替関数取得部１０３は、置換を決定した演算の情報とともに、その演算を表す複雑関数と置換する関数として折れ線近似を用いて求めた代替関数を置換部１０４へ出力する。
【００８５】
置換部１０４は、置換を決定した演算の情報とともに、折れ線近似により求められた代替関数の入力を代替関数取得部１０３から受ける。そして、置換部１０４は、記憶部１０８から取得した浮動小数点版プログラム３１の中の演算のうち指定された演算を表す複雑関数を、折れ線近似により求められた代替関数に置換する。
【００８６】
このように、浮動小数点版プログラム３１に含まれる演算が複雑関数で表される場合、その複雑関数は、折れ線近似を用いて求めた代替関数に置換することが可能である。また、ここでは、代替関数取得部１０３は、折れ線近似を用いて複雑関数に近似的な関数を求めたが、これ以外の近似を用いることもできる。例えば、代替関数取得部１０３は、二次曲線近似やベジエ曲線近似などを用いることもできる。すなわち、代替関数取得部１０３は、元の複雑関数よりも計算量が少ない近似式であれば近似式の種類を問わず複雑関数の近似に用いることができる。
【００８７】
例えば、ベジエ曲線近似を用いる場合、代替関数取得部１０３は、入力データの最大値及び最小値に対する元の複雑関数の値を求める。また、代替関数取得部１０３は、入力データの最大値と最小値との間の一定間隔ごとに区切りＮ−２分割する値に対する元の複雑関数の値を取得する。そして、代替関数取得部１０３は、取得したＮ個の値を表す点の両端を通り、残りの点に近づくなめらかな曲線を求めることでベジエ曲線近似を用いた場合の代替関数を求めることができる。
【００８８】
以上に説明したように、本実施例に係る演算処理装置は、直線近似式以外の置き換え対象の複雑関数よりも計算量が少ない近似式を用いて求めた代数関数に、置き換え対象の複雑関数を置換することができる。このように、直線近似式以外であっても置き換え対象の複雑関数よりも計算量が少ない近似式を用いれば、複雑関数を置き換える代替関数を求めることができ、プログラムを実行する回路の小規模化、省電力化及び高速化を実現することができる。
【実施例３】
【００８９】
次に、実施例３について説明する。本実施例に係る演算処理装置１は、予め決められた近似式の対応表を用いて代替関数を決定することが実施例１と異なる。本実施例に係る演算処理装置１も、図２のブロック図で表される。以下の説明では、実施例１と同様の各部の機能については説明を省略する。
【００９０】
記憶部１０８は、複雑関数の種類毎に入力データの最大値及び最小値に対応する近似式が登録された対応表テーブルを予め記憶する。
【００９１】
代替関数取得部１０３は、置換の対象とする演算を表す複雑関数の種類を取得する。さらに、代替関数取得部１０３は、その演算の入力データの最大値及び最小値を取得する。次に、代替関数取得部１０３は、取得した複雑関数の種類の対応表を記憶部１０８から読み出す。そして、代替関数取得部１０３は、読み出した対応表の中から取得した入力データの最大値及び最小値に対応する近似式を取得する。その後、代替関数取得部１０３は、その演算を表す複雑関数と置換する関数として取得した近似式を代替関数として置換部１０４へ出力する。
【００９２】
ここで、本実施例では、入力データの最大値及び最小値に近似式を対応させた表を用いたが、近似式を対応させるパラメータは、置換の対象となる複雑関数を表す値であれば他の値を用いてもよい。例えば、演算処理装置１は、入力データの最大値、最小値及び中央値の組に近似式を対応させた対応表を用いてもよい。
【００９３】
以上に説明したように本実施例に係る演算処理装置は、予め登録された対応表を用いて複雑関数を置換する代替関数を決定する。これにより、代替関数を決定する処理が容易になり、固定小数点形式への変換処理の時間を短縮することができる。したがって、プログラムを実行する回路の小規模化、省電力化及び高速化をより確実に実現することができる。
【００９４】
ここで、以上の各実施例では、演算処理装置１が深層学習を実行したが、深層学習を行う機能を他の装置に分割してもよい。すなわち、演算処理装置１は、浮動小数点形式のプログラムを固定小数点形式のプログラムに変更する処理を実行する。そして、他の情報処理装置が、演算処理装置１により生成された固定小数点形式のプログラムを用いて深層学習を実行してもよい。また、浮動小数点形式のプログラム及び浮動小数点形式のサンプルデータを外部のストレージ装置や他の演算処理装置に配置してもよい。
【００９５】
また、本実施例では、浮動小数点形式の情報処理として深層学習を行うプログラムを例に説明したが、演算精度が低くてもよく固定小数点形式に変換することが許容される情報処理であれば他の情報処理であってもよい。
【符号の説明】
【００９６】
１  演算処理装置
１１  ＣＰＵ
１２  メモリ
１３  ディスク装置
１４  入力装置
１５  出力装置
３１  浮動小数点版プログラム
３２  浮動小数点サンプルデータ
３３  固定小数点版プログラム
１０１  サンプルデータ処理部
１０２  演算変換判定部
１０３  代替関数取得部
１０４  置換部
１０５  変換部
１０６  入出力調整部
１０７  最終出力調整部
１０８  記憶部
１０９  深層学習実行部
【図１】
2019212112.tif 000003
【図２】
2019212112.tif 000004
【図３】
2019212112.tif 000005
【図４】
2019212112.tif 000006
【図５】
2019212112.tif 000007
【図６】
2019212112.tif 000008
【図７】
2019212112.tif 000009
【図８】
2019212112.tif 000010
【図９】
2019212112.tif 000011