(57)【要約】【課題】機械学習の学習効率を向上させる情報処理装置、情報処理装置の制御方法及び情報処理装置の制御プログラムを提供する。【解決手段】演算部１０３は、演算対象を用いて演算を実行し算出した演算結果を用いて演算を繰り返す。データベース更新部１４２は、前記演算結果に含まれる要素数のうち、所定ビットの固定小数点数として表現可能な範囲に含まれる割合を求める。演算データ型決定部１４１は、前記データベース更新部１４２により算出された前記割合を基に、前記所定ビットの固定小数点数を用いて前記演算部１０３に前記演算を実行させる。【選択図】図３
2020135814.tif 000002
【特許請求の範囲】
【請求項１】
演算対象を用いて演算を実行し算出した演算結果を用いて前記演算を繰り返す演算部と、
前記演算結果に含まれる要素数のうち、所定ビットの固定小数点数として表現可能な範囲に含まれる割合を求める割合算出部と、
前記割合算出部により算出された前記割合を基に、前記所定ビットの固定小数点数を用いて前記演算部に前記演算を実行させる演算制御部と
を備えたことを特徴とする情報処理装置。
【請求項２】
前記割合算出部は、前記演算結果に含まれる要素数を基に小数点位置を決定し、前記小数点位置で所定ビットの固定小数点数として表現可能な範囲に含まれる前記要素数の割合を求めることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記演算制御部は、前記割合が所定の割合閾値より大きい場合に、前記所定ビットの固定小数点数を用いて前記演算部に前記演算を実行させることを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記割合算出部は、前記演算部が前記演算結果を算出する毎に、前記割合を求め、
前記演算制御部は、前記割合算出部により求められた最新の割合から所定回数前の割合の間の割合の変動を基に、前記所定ビットの固定小数点数を用いて前記演算部に前記演算を実行させる
ことを特徴とする請求項１〜３のいずれか一つに記載の情報処理装置。
【請求項５】
前記演算制御部は、前記割合算出部により算出された前記割合を基に、第１所定ビットの固定小数点数又は第２所定ビットの固定小数点数を用いて前記演算部に前記演算を実行させることを特徴とする請求項１〜４のいずれか一つに記載の情報処理装置。
【請求項６】
前記演算制御部は、前記割合算出部により算出された前記割合を基に、浮動小数点数を用いて前記演算部に前記演算を実行させることを特徴とする請求項１〜５のいずれか一つに記載の情報処理装置。
【請求項７】
演算対象を用いて演算を実行し算出した演算結果を用いて前記演算を繰り返す情報処理装置の制御方法であって、
前記演算結果に含まれる要素数のうち、所定ビットの固定小数点数として表現可能な範囲に含まれる割合を求め、
算出した前記割合を基に、前記所定ビットの固定小数点数を用いて前記情報処理装置に前記演算を実行させる
ことを特徴とする情報処理装置の制御方法。
【請求項８】
演算対象を用いて演算を実行し算出した演算結果を用いて前記演算を繰り返す情報処理装置の制御方法であって、
前記演算結果に含まれる要素数のうち、所定ビットの固定小数点数として表現可能な範囲に含まれる割合を求め、
算出した前記割合を基に、前記所定ビットの固定小数点数を用いて前記情報処理装置に前記演算を実行させる
処理をコンピュータに実行させることを特徴とする情報処理装置の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理装置の制御方法及び情報処理装置の制御プログラムに関する。
【背景技術】
【０００２】
近年、深層学習や機械学習が注目されてきたことで、学習で実行される演算を高速に処理できるプロセッサに注目が集まっている。以下では、深層学習や機械学習をまとめて学習と呼ぶ場合がある。学習に使用されるプロセッサの中でも特に注目されているのが、テンソル演算を並列に実行して演算を高速化できるＧＰＵ（Graphics  Processing  Unit）である。ただし、ＧＰＵは、３Ｄ（Dimension）グラフィクス処理を実行するために開発されたプロセッサであり、学習に最適化されていない。そのため、ＧＰＵは、学習を行う際に、処理の段階に関わらず３２ｂｉｔの浮動小数点数を用いた演算を行う。このことから、電力性能という指標で考えると、ＧＰＵは、学習に対して最適化の余地があるといえる。
【０００３】
このような状況の中で、様々な企業が、学習に最適化されたプロセッサの開発に取り組んでいる。学習の演算は主にテンソル演算であり、３Ｄグラフィック処理で行われるテンソル演算と変わりがない。ただし、深層学習や機械学習は、学習が進むにつれてテンソル演算で用いる演算要素の値のバラつきが小さくなるという特徴がある。このような学習で実行される演算の特殊な性質に着目し、各企業が、８ｂｉｔの整数で推論演算を行うプロセッサや、１６ｂｉｔの浮動小数点数で学習演算するプロセッサが機械学習向けに発表した。これらのプロセッサは、演算精度を低くして演算を行うことで、電力性能を向上させることが目標である。
【０００４】
さらに、学習演算ループの前半のフェーズである事前学習では３２ｂｉｔの浮動小数点数で演算を行い、事前学習が完了した段階で、８ｂｉｔ整数での学習演算に切り替えるハードウェアも存在する。このハードウェアは、８ｂｉｔ整数を固定小数点数として扱い、その小数点位置を１イテレーション前の学習演算時の出力結果から決定する。イテレーションとは、繰り返し行われる学習におけるパラメータを決定する学習演算の１回のループにあたる。これにより、小数点位置を決定するための演算と小数点位置を決定した後の演算の２回の演算を行わずにすみ、演算回数が低減される。また、画像データを濃度データ又は２値化されたデータとして取り込み学習及び認識を行い、画像認識を高速化する従来技術がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平０６−９６０４８号公報
【特許文献２】特開平０８−３６６４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、深層学習や機械学習向けに開発されたプロセッサは、予め演算精度がハードウェアで決まっており、学習が進むにつれて演算に用いられる演算要素の値の変動が小さくなるという学習の特徴に対応することが困難である。そのため、深層学習や機械学習向けに開発されたプロセッサでは、学習効率を向上させることは困難である。
【０００７】
また、事前学習が完了した段階で３２ｂｉｔの浮動小数点数の演算から８ｂｉｔ整数での学習演算に切り替えるハードウェアは、学習中には演算を切替えないため、学習中の演算における演算要素の値の変動に対応することが困難である。そのため、このようなハードウェアを使用しても、学習効率を向上させることは困難である。また、画像データを濃度データ又は２値化されたデータとして取り込み学習及び認識を行う従来技術を用いても、学習中の演算における演算要素の値の変動に対応することが困難であり、学習効率が低下するおそれがある。
【０００８】
さらに、小数点位置が大きく変化する事前学習の予め決められた段階以降に８ｂｉｔの固定小数点数を利用する場合、小数点位置が大きく変化することで学習が進まなくなるおそれがある。そこで、８ｂｉｔの固定小数点数を用いた演算に切り替わるタイミングとして、学習停滞を回避するように学習演算ループの回数を使用者が試行錯誤して決定する方法が考えられる。しかし、適切な切り替えタイミングとなるように学習演算のループ回数を利用者が指定することは困難であり、機械学習の学習効率が低下するおそれがある。
【０００９】
開示の技術は、上記に鑑みてなされたものであって、深層学習や機械学習の学習効率を向上させる情報処理装置、情報処理装置の制御方法及び情報処理装置の制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本願の開示する情報処理装置、情報処理装置の制御方法及び情報処理装置の制御プログラムの一つの態様において、演算部は、演算対象を用いて演算を実行し算出した演算結果を用いて前記演算を繰り返す。割合算出部は、前記演算結果に含まれる要素数のうち、所定ビットの固定小数点数として表現可能な範囲に含まれる割合を求める。演算制御部は、前記割合算出部により算出された前記割合を基に、前記所定ビットの固定小数点数を用いて前記演算部に前記演算を実行させる。
【発明の効果】
【００１１】
１つの側面では、本発明は、深層学習や機械学習の学習効率を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、情報処理装置のハードウェア構成図である。
【図２】図２は、学習の過程を説明するための図である。
【図３】図３は、実施例１に係る情報処理装置のブロック図である。
【図４】図４は、実施例１に係る演算データ型データベースの登録情報の一例の図である。
【図５】図５は、実施例１に係る表現可能割合データベースの登録情報の一例の図である。
【図６】図６は、実施例１に係る演算データ型の決定処理を説明するための図である。
【図７】図７は、実施例１に係る情報処理装置による演算データ型決定処理のシーケンス図である。
【図８】図８は、実施例１に係る演算データ型決定処理のフローチャートである。
【図９】図９は、２つの情報処理装置を用いた学習を表す図である。
【図１０】図１０は、実施例２に係る表現可能割合データベースの登録情報の一例の図である。
【図１１】図１１は、実施例２に係る演算データ型データベースの登録情報の一例の図である。
【図１２】図１２は、実施例２に係る演算データ型の決定処理を説明するための図である。
【図１３】図１３は、実施例２に係る演算データ型決定処理のフローチャートである。
【図１４】図１４は、実施例３に係る情報処理装置のブロック図である。
【図１５】図１５は、演算データ型の遷移を説明するための図である。
【図１６】図１６は、実施例３に係る情報処理装置による演算データ型決定処理のシーケンス図である。
【図１７】図１７は、実施例３に係る演算データ型決定処理のフローチャートである。
【発明を実施するための形態】
【００１３】
以下に、本願の開示する情報処理装置、情報処理装置の制御方法及び情報処理装置の制御プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、情報処理装置の制御方法及び情報処理装置の制御プログラムが限定されるものではない。
【実施例１】
【００１４】
図１は、情報処理装置のハードウェア構成図である。情報処理装置１は、深層学習を実行する。以下では、深層学習を実行する情報処理装置１について説明するが、機械学習を実行する情報処理装置であっても同様の機能を有する。情報処理装置１は、ノードと呼ばれる場合もある。図１に示すように、情報処理装置１は、ＣＰＵ（Central  Processing  Unit）１１、深層学習用プロセッサ１２、メモリ１３、ストレージ１４及びネットワークインタフェース１５を有する。
【００１５】
ＣＰＵ１１は、深層学習用プロセッサ１２が行わない演算を実行する。例えば、ＣＰＵ１１は、システムプログラムの処理などを実行する。
【００１６】
深層学習用プロセッサ１２は、深層学習の演算に特化したプロセッサである。深層学習用プロセッサ１２は、ＣＰＵ１１と比較して、深層学習の演算を高速に実行することが可能である。
【００１７】
メモリ１３は、揮発性メモリである。メモリ１３は、ストレージ１４から読み込んだ学習用のデータを、深層学習向けのプロセッサに読み込んで転送するまで一時的に保持する。
【００１８】
ストレージ１４は、ＨＤＤ（Hard  Disk  Drive）又はＳＳＤ（Solid  State  Drive）などの不揮発性メモリである。ストレージ１４は、情報処理装置１において深層学習を実行する際に使用するデータが格納される。
【００１９】
ネットワークインタフェース１５は、イーサネット（登録商標）やインフィニバンド（登録商標）を経由して他の情報処理装置１に接続するためのインタフェースである。ネットワークインタフェース１５は、ＣＰＵ１１と他の情報処理装置１に搭載されたＣＰＵ１１との間のデータの送受信の中継を行う。
【００２０】
情報処理装置１は、図２に示すように多層のニューラルネットワークを用いて深層学習を行う。図２は、学習の過程を説明するための図である。情報処理装置１は、各層における演算を繰り返すことで認識精度を高める。例えば、図２に示すように、各層のそれぞれで演算＃１〜＃Ｎが行われる場合、情報処理装置１は、学習データを用いて演算＃１〜＃Ｎを繰り返す。ここで、図２に示すように、繰り返しにおける演算＃１〜＃Ｎまでを実行する１回の学習の期間２をイテレーションと呼ぶ。すなわち、情報処理装置１は、イテレーションを複数回繰り返すことで深層学習を完了する。
【００２１】
次に、図３を参照して、本実施例に係る情報処理装置１が有する深層学習の機能について説明する。図３は、実施例１に係る情報処理装置のブロック図である。
【００２２】
図３に示すように、情報処理装置１は、深層学習フレームワーク１００及び学習データ記憶部２００を有する。学習データ記憶部２００は、例えば、図１に示すストレージ１４により実現される。学習データ記憶部２００は、深層学習で使用する複数の学習データが予め格納される。
【００２３】
深層学習フレームワーク１００は、深層学習のアプリケーションを容易に作成するために開発されたソフトウェアライブラリ群である。深層学習フレームワーク１００は、図１に示すＣＰＵ１１、深層学習用プロセッサ１２及びメモリ１３で実現される。
【００２４】
深層学習フレームワーク１００は、ユーザアプリケーション１０１、実行制御部１０２、演算部１０３、演算データ型判定部１０４、学習データ読込部１０５、演算データ型データベース１０６及び表現可能割合データベース１０７を有する。具体的には、ユーザアプリケーション１０１、実行制御部１０２、演算データ型１０４及び学習データ読込部１０５の機能が、ＣＰＵ１１により実現される。これに対して、演算部１０３の機能は、深層学習用プロセッサ１２により実現される。また、演算データ型データベース１０６及び表現可能割合データベース１０７は、メモリ１３に配置される。
【００２５】
ユーザアプリケーション１０１は、操作者が作成した深層学習のアプリケーションである。ユーザアプリケーション１０１は、深層学習の実行を実行制御部１０２に指示する。
【００２６】
演算データ型データベース１０６は、各層に含まれる各演算のそれぞれで３２ｂｉｔ浮動小数点数又は８ｂｉｔ固定小数点数のいずれの演算データ型が用いられるかが登録されるデータベースである。図４は、実施例１に係る演算データ型データベースの登録情報の一例の図である。演算データ型データベース１０６は、図４に示すように、演算ＩＤ（Identification）に対応させてそれぞれの演算で用いる演算データ型を保持する。演算ＩＤは、１回のイテレーション中に行う各演算に対して一意に設定された識別情報である。例えば、図４の状態であれば、演算＃１では３２ｂｉｔ浮動小数点数が用いられる。また、演算＃２〜＃４では、８ｂｉｔ固定小数点数が用いられる。
【００２７】
表現可能割合データベース１０７は、各イテレーションでの演算結果に含まれるテンソル要素数おいて、所定の小数点位置を用いて８ｂｉｔ固定小数点数で表現可能なテンソル要素数の割合が登録されるデータベースである。ここで、テンソル要素数とは、各イテレーションにおいて各層で実行されるテンソル演算で用いられる演算対象に含まれる各要素の値である。演算対象とは、演算に用いられる数値や行列などの被演算子である。例えば、テンソル演算においてｋ×ｋ行列が演算対象である場合、ｋ×ｋ行列に含まれるｋ×ｋ個の行列要素の各々がテンソル要素数にあたる。
【００２８】
図５は、実施例１に係る表現可能割合データベースの登録情報の一例の図である。表現可能割合データベース１０７は、図５に示すように、イテレーションＩＤに対応させて演算ＩＤ及び割合が登録される。イテレーションＩＤは、深層学習の学習段階におけるイテレーション毎に一意に設定された識別子である。例えば、図５に示した表現可能割合データベース１０７では、イテレーションＩＤがｉｔ１のイテレーションにおける演算＃１の演算結果に含まれる８ｂｉｔ固定小数点数を用いた場合の小数点位置から表現可能なテンソル要素数の割合は、２０．６％である。以下では、８ｂｉｔ固定小数点数を用いた場合の小数点位置から表現可能なテンソル要素数の割合を「表現可能割合」という。
【００２９】
実行制御部１０２は、深層学習の処理を統括制御する。実行制御部１０２は、演算指示部１２１、演算データ型要求部１２２、データベース更新指示部１２３及びデータ読込制御部１２４を有する。
【００３０】
データベース更新指示部１２３は、ユーザアプリケーション１０１からの深層学習の実行指示の入力を受けると、演算データ型データベース１０６の初期化を演算データ型判定部１０４の演算データ型決定部１４１に指示する。また、データベース更新指示部１２３は、表現可能割合データベース１０７の初期化を演算データ型判定部１０４の演算データ型判定部１０４に指示する。
【００３１】
次に、データベース更新指示部１２３は、データベースの初期化完了の通知をデータ読込制御部１２４へ出力する。その後、データベース更新指示部１２３は、各イテレーションにおける各演算の終了毎に、演算結果を演算部１０３から取得する。そして、データベース更新指示部１２３は、取得した演算結果をデータベース更新部１４２へ出力し、表現可能割合データベース１０７の更新を指示する。
【００３２】
データ読込制御部１２４は、データベースの初期化完了の通知の入力をデータベース更新指示部１２３から受ける。さらに、データ読込制御部１２４は、学習に使用する学習データの取得要求を演算指示部１２１から受ける。そして、データ読込制御部１２４は、学習に使用する学習データの読み込みを学習データ読込部１０５に指示する。その後、データ読込制御部１２４は、学習に使用する学習データを学習データ読込部１０５から取得する。そして、データ読込制御部１２４は、取得した学習データを演算指示部１２１へ出力する。
【００３３】
その後、データ読込制御部１２４は、イテレーション終了毎に演算指示部１２１から学習データの取得要求を演算指示部１２１から受ける。そして、データ読込制御部１２４は、イテレーション毎に、学習データの読み込みを学習データ読込部１０５に指示して学習データを取得し、取得した学習データを演算指示部１２１へ出力する。
【００３４】
演算指示部１２１は、ユーザアプリケーション１０１から入力された深層学習の実行指示を取得する。そして、演算指示部１２１は、各イテレーションの開始時に以下の処理を行う。
【００３５】
演算指示部１２１は、学習に使用する学習データの取得要求をデータ読込制御部１２４へ出力する。そして、演算指示部１２１は、取得要求の応答として、学習データの入力をデータ読込制御部１２４から受ける。
【００３６】
次に、演算指示部１２１は、演算データ型の送信要求を演算データ型要求部１２２へ出力する。その後、演算指示部１２１は、送信要求の応答として次のイテレーションにおける各演算で使用されるそれぞれの演算データ型の入力を演算データ型要求部１２２から取得する。例えば、１回目のイテレーションでは、全ての演算において３２ｂｉｔ浮動小数点数が用いられる。その後、演算指示部１２１は、学習データ及び各演算で使用されるそれぞれの演算データ型を演算部１０３へ出力し、さらに演算の実行を指示する。
【００３７】
その後、演算指示部１２１は、イテレーションの完了通知の入力を演算部１０３から受ける。そして、演算指示部１２１は、学習データ及び演算データ型を取得して演算を演算部１０３に実行させる処理を繰り返す。
【００３８】
演算指示部１２１は、深層学習が完了するまでイテレーション毎の各層における演算を演算部１０３に繰り返させる。ここで、演算指示部１２１は、予め決められた回数のイテレーションが終了した場合又は認識精度が９割を超えた場合などのように予め決められた条件を満たした場合に深層学習が完了したと判定する。認識精度は、所定回数のイテレーションが完了する毎に試験用データを用いて認識処理が行われることで取得される。
【００３９】
演算データ型要求部１２２は、演算データ型の送信要求の入力を演算指示部１２１から受ける。そして、演算データ型要求部１２２は、演算データ型決定部１４１に対して演算データ型の取得を要求する。その後、演算データ型要求部１２２は、次のイテレーションの各演算で使用する演算データ型の入力を演算データ型決定部１４１から受ける。そして、演算データ型要求部１２２は、取得した次のイテレーションの各演算で使用する演算データ型を演算指示部１２１へ出力する。
【００４０】
演算部１０３は、各イテレーションの開始時に、学習データの入力を演算指示部１２１から受ける。さらに、演算部１０３は、次のイテレーションにおける各演算で使用する演算データ型の入力を演算指示部１２１から受ける。１回目のイテレーションでは、演算部１０３は、各演算で使用する演算データ型として３２ｂｉｔ浮動小数点数を用いる指示を演算指示部１２１から受ける。そして、演算部１０３は、学習データを入力として、各演算で３２ｂｉｔ浮動小数点数を用いて各演算を行い１回目のイテレーションを終了する。その後、演算部１０３は、各演算の演算結果をデータベース更新指示部１２３へ出力する。また、演算部１０３は、イテレーションに含まれる演算が全て完了すると、イテレーションの完了通知を演算指示部１２１へ出力する。演算部１０３は、演算指示部１２１からの演算の実行指示が停止するまで演算処理を繰り返す。
【００４１】
演算データ型判定部１０４は、演算データ型決定部１４１及びデータベース更新部１４２を有する。
【００４２】
データベース更新部１４２は、表現可能割合データベース１０７の初期化の指示をデータベース更新指示部１２３から受ける。そして、データベース更新部１４２は、表現可能割合データベース１０７における登録情報を全て削除して初期化する。
【００４３】
その後、データベース更新部１４２は、イテレーションの完了毎に各演算における演算結果の入力をデータベース更新指示部１２３から受ける。そして、データベース更新部１４２は、各演算における演算結果に含まれる各テンソル要素数を表現するための適切な小数点位置を決定する。その後、データベース更新部１４２は、各演算における演算結果に含まれる各テンソル要素数のそれぞれについて、決定した小数点位置で８ｂｉｔ固定小数点数を用いた表現が可能か否かを判定する。この８ビット固定小数点数が、「所定ビットの固定小数点数」の一例にあたる。
【００４４】
次に、データベース更新部１４２は、各演算の演算結果における決定した小数点位置から８ｂｉｔ固定小数点数を用いて表現可能なテンソル要素数の割合を算出する。その後、データベース更新部１４２は、イテレーション毎に各演算における決定した小数点位置から８ｂｉｔ固定小数点数を用いて表現可能なテンソル要素数の割合である表現可能割合を表現可能割合データベース１０７に登録する。
【００４５】
ここで、データベース更新部１４２による表現可能割合の算出について詳細に説明する。小数点位置をＱ８とした場合、Ｑ８は、次の数式（１）により決定される。
【００４６】
【数１】
2020135814.tif 000003
【００４７】
ｘｍｉｎは、テンソル要素数の最小値である。また、ｘｍａｘはテンソル要素数の最大値である。そして、ｃｅｉｌ（Ｘ）は、Ｘを超える最小の整数を求める関数である。すなわち、テンソル要素数の最小値の絶対値と、テンソル要素数の最大値とでいずれか大きい方を２進数で表した場合の整数部分の桁のｂｉｔ数と符号ビットの１ｂｉｔとを８ｂｉｔから減算した値により小数点位置Ｑ８が算出される。この場合、小数点位置Ｑ８により表現可能な値の範囲Ｒは、−１２８×２−Ｑ〜１２７×２−Ｑとなる。
【００４８】
したがって、表現可能なテンソル要素数の割合Ｐは、テンソル要素数をＮとすると次の数式（２）により算出される。
【００４９】
【数２】
2020135814.tif 000004
【００５０】
すなわち、データベース更新部１４２は、数式（１）で求まる小数点位置Ｑ８の場合の範囲Ｒを用いて、数式（２）から各演算における表現可能割合を算出する。
【００５１】
演算データ型決定部１４１は、演算データ型データベース１０６の初期化の指示をデータベース更新指示部１２３から受ける。そして、演算データ型決定部１４１は、各演算で使用する演算データ型を３２ｂｉｔ浮動小数点数として演算データ型データベース１０６に登録して初期化する。
【００５２】
その後、演算データ型決定部１４１は、各演算の演算データ型の送信の要求を演算データ型要求部１２２から受ける。次に、演算データ型決定部１４１は、演算データ型データベース１０６を確認して各演算の現在の演算データ型を取得する。そして、演算データ型決定部１４１は、既に８ｂｉｔ固定小数点数を演算データ型とした演算を特定する。演算データ型決定部１４１は、特定した既に８ｂｉｔ固定小数点数を演算データ型とした演算については８ｂｉｔ固定小数点数を演算データ型として演算データ型要求部１２２に通知する。
【００５３】
これに対して、３２ｂｉｔ浮動小数点数を演算データ型とした演算について、演算データ型決定部１４１は、表現可能割合データベース１０７から最新のイテレーションから判定範囲内のイテレーションにおける表現可能割合を取得する。
【００５４】
例えば、図６を参照して、その時点でイテレーションが１５０４回終了した場合で説明する。図６は、実施例１に係る演算データ型の決定処理を説明するための図である。図６のテーブル１７０は、表現可能割合データベース１０７を分かり易いように並べ直したテーブルである。
【００５５】
例えば、判定範囲を４回のイテレーションとした場合、演算データ型決定部１４１は、図６における、使用範囲７１〜７４内の表現可能割合を演算毎に取得する。ここでは、演算＃１〜＃４のこの時点における演算データ型は、３２ｂｉｔ浮動小数点数である。次に、演算データ型決定部１４１は、各演算の最新のイテレーションにおける表現可能割合が割合閾値を超えたか否かを判定する。例えば、割合閾値をＴｆ１とした場合、演算データ型決定部１４１は、次の数式（３）を満たすか否かを判定する。
【００５６】
【数３】
2020135814.tif 000005
【００５７】
ここで、最新のイテレーションにおける表現可能割合の割合閾値であるＴｆ１は、例えば、８０％〜９０％とすることができる。
【００５８】
閾値を超えていない場合にはその時点での状態では、８ｂｉｔ固定小数点数で表現すると適切な演算精度を維持することが困難であると考えられる。そこで、演算データ型決定部１４１は、その演算の演算データ型を３２ｂｉｔ浮動小数点数と決定し、演算データ型要求部１２２に通知する。例えば、割合閾値を８０％とした場合、図６においてイテレーションＩＤがｉｔ１５０４のイテレーションでの演算＃１の表現可能割合は、４６．５％であり、割合閾値以下である。そこで、演算データ型決定部１４１は、演算＃１の演算データ型を３２ｂｉｔ浮動小数点数と決定する。
【００５９】
これに対して、表現可能割合が閾値を超えた演算について、演算データ型決定部１４１は、判定範囲内での表現可能割合の変動が小さいか否かを判定する。具体的には、演算データ型決定部１４１は、次の数式（４）を用いて演算ｆについてのイテレーション間のゆらぎであるΔｆを算出する。演算ｆについてこのイテレーション間のゆらぎΔｆが、「割合の変動」の一例にあたる。
【００６０】
【数４】
2020135814.tif 000006
【００６１】
ここで、ｉは、その時点で完了したイテレーション回数である。また、Ｉは、判定範囲である。そして、ｆは、ｉ−Ｉからｉまでのいずれかの整数を表す。また、Δｆｉは、ｉ回目のイテレーションにおける演算ｆのイテレーション間のゆらぎを示す。そして、Ｐｏｊは、判定範囲内のｊ番目のイテレーションにおける表現可能割合である。また、Ｐｏｉは、ｉ番目のイテレーションにおける表現可能割合である。すなわち、演算データ型決定部１４１は、数式（４）を用いてその時点での表現可能割合と判定範囲内のイテレーションにおける表現可能割合との差の最大値をゆらぎΔｆｉとして算出する。
【００６２】
次に、演算データ型決定部１４１は、算出したゆらぎが予め決められたゆらぎ閾値未満か否かを判定する。例えば、ゆらぎ閾値をＴｆ２とした場合、演算データ型決定部１４１は、次の数式（５）を満たすか否かを判定する。
【００６３】
【数５】
2020135814.tif 000007
【００６４】
ゆらぎが予め決められゆらぎ閾値未満の場合、演算の小数点位置が収束しつつあると言える。そこで、演算データ型決定部１４１は、算出したゆらぎがたゆらぎ閾値未満の場合、その演算の演算データ型を８ｂｉｔ固定小数点数と決定し、演算データ型要求部１２２に通知する。これに対して、算出したゆらぎがゆらぎ閾値以上の場合、演算データ型決定部１４１は、その演算の演算データ型を３２ｂｉｔ浮動小数点数と決定し、演算データ型要求部１２２に通知する。
【００６５】
ここで、ゆらぎ閾値であるＴｆ２は、例えば、１０％〜２０％とすることができる。ゆらぎ閾値を１０％とした場合、図６において演算＃３の使用範囲７３におけるゆらぎは、ゆらぎ閾値以上である。これに対して、演算＃２及び＃４のゆらぎは、ゆらぎ閾値未満である。そこで、演算データ型決定部１４１は、演算＃３の演算データ型を３２ｂｉｔ浮動小数点数と決定し、演算＃２及び＃４の演算データ型を８ｂｉｔ固定小数点数と決定する。
【００６６】
８ｂｉｔ固定小数点数を演算データ型として通知して、実行制御部１０２を介して演算部１０３に８ｂｉｔ固定小数点数を用いて演算を行わせる処理が、「所定ビットの固定小数点数を用いて演算部に演算を実行させる」処理にあたる。
【００６７】
さらに、演算データ型決定部１４１は、各演算について決定した演算データ型を演算データ型データベース１０６に登録する。これにより、演算データ型決定部１４１は、演算データ型データベース１０６を用いて次のイテレーションにおいて各演算がどちらの演算データ型を使用したかが確認できるようになる。
【００６８】
学習データ読込部１０５は、学習に使用する学習データの読み込みの指示をデータ読込制御部１２４から受ける。そして、学習データ読込部１０５は、指定された学習データを学習データ記憶部２００から読み込む。その後、学習データ読込部１０５は、読み込んだ隔週データをデータ読込制御部１２４へ送信する。
【００６９】
次に、図７を参照して、実施例１に係る情報処理装置１による演算データ型決定処理の全体的な流れの概要について説明する。図７は、実施例１に係る情報処理装置による演算データ型決定処理のシーケンス図である。
【００７０】
ユーザアプリケーション１０１は、深層学習の実行指示を実行制御部１０２に出力する（ステップＳ１０１）。
【００７１】
実行制御部１０２は、深層学習の実行指示をユーザアプリケーション１０１から受けると、演算データ型データベース１０６の初期化を演算データ型判定部１０４に指示する（ステップＳ１０２）。
【００７２】
演算データ型判定部１０４は、演算データ型データベース１０６の初期化の指示を受けて、演算データ型データベース１０６の各演算の演算データ型を３２ｂｉｔ浮動小数点数に更新して初期化する（ステップＳ１０３）。
【００７３】
その後、演算データ型判定部１０４は、演算データ型データベース１０６の初期化完了を実行制御部１０２に通知する（ステップＳ１０４）。
【００７４】
実行制御部１０２は、演算データ型データベース１０６の初期化完了の応答を受信すると、表現可能割合データベース１０７の初期化を演算データ型判定部１０４に指示する（ステップＳ１０５）。
【００７５】
演算データ型判定部１０４は、表現可能割合データベース１０７の初期化の指示を受けて、表現可能割合データベース１０７に登録済みのデータを消去して初期化する（ステップＳ１０６）。
【００７６】
その後、演算データ型判定部１０４は、表現可能割合データベース１０７の初期化完了を実行制御部１０２に通知する（ステップＳ１０７）。
【００７７】
実行制御部１０２は、表現可能割合データベース１０７の初期化完了の応答を受信すると、学習に使用する学習データの読み込みを学習データ読込部１０５に指示する（ステップＳ１０８）。
【００７８】
学習データ読込部１０５は、学習データの読み込み指示を受けて、指定された学習データを学習データ記憶部２００から読み込む（ステップＳ１０９）。
【００７９】
その後、学習データ読込部１０５は、読み込んだ学習データを実行制御部１０２へ送信する（ステップＳ１１０）。
【００８０】
実行制御部１０２は、学習データを学習データ読込部１０５から取得する。次に、実行制御部１０２は、次のイテレーションの各演算で使用する演算データ型の取得要求を演算データ型判定部１０４へ出力する（ステップＳ１１１）。
【００８１】
演算データ型判定部１０４は、演算データ型の取得要求の入力を受けて、演算データ型データベース１０６及び表現可能割合データベース１０７を用いて各演算で使用する演算データ型を決定する（ステップＳ１１２）。
【００８２】
そして、演算データ型判定部１０４は、決定した各演算で使用する演算データ型の通知を実行制御部１０２へ出力する（ステップＳ１１３）。
【００８３】
実行制御部１０２は、各演算で用いる演算データ型を取得する。そして、実行制御部１０２は、取得した学習データを演算部１０３へ出力し、さらに各演算で用いる演算データ型を演算部１０３に通知して演算を実行させる（ステップＳ１１４）。
【００８４】
その後、実行制御部１０２は、演算結果の入力を演算部１０３から受ける（ステップＳ１１５）。
【００８５】
次に、実行制御部１０２は、取得した演算結果を演算データ型判定部１０４へ出力して表現可能割合データベース１０７の更新を指示する（ステップＳ１１６）。
【００８６】
演算データ型判定部１０４は、演算結果に含まれるテンソル要素数を用いて表現可能割合を算出し、算出した表現可能割合を登録して表現可能割合データベース１０７を更新する（ステップＳ１１７）。
【００８７】
その後、演算データ型判定部１０４は、表現可能割合データベース１０７の更新完了の通知を実行制御部１０２へ出力する（ステップＳ１１８）。
【００８８】
次に、実行制御部１０２は、演算データ型データベース１０６の更新を演算データ型判定部１０４に指示する（ステップＳ１１９）。
【００８９】
演算データ型判定部１０４は、最新のイテレーションにおいて各演算で使用された演算データ型を登録して演算データ型データベース１０６を更新する（ステップＳ１２０）。
【００９０】
その後、演算データ型判定部１０４は、演算データ型データベース１０６の更新完了の通知を実行制御部１０２へ出力する（ステップＳ１２１）。
【００９１】
実行制御部１０２は、演算データ型データベース１０６の更新完了の通知の入力を実行制御部１０２から受ける。実行制御部１０２、演算部１０３、演算データ型判定部１０４及び学習データ読込部１０５は、１回のイテレーションに含まれる演算全てが完了するまで、ステップＳ１１１〜Ｓ１２１を繰り返す。さらに、実行制御部１０２、演算部１０３、演算データ型判定部１０４及び学習データ読込部１０５は、深層学習が完了するまで、ステップＳ１０８〜Ｓ１２１を繰り返す。その後、実行制御部１０２は、深層学習の完了をユーザアプリケーション１０１に通知する（ステップＳ１２２）。
【００９２】
次に、図８を参照して、実施例１に係る演算データ型決定処理の詳細な流れについて説明する。図８は、実施例１に係る演算データ型決定処理のフローチャートである。
【００９３】
ユーザアプリケーション１０１からの深層学習の実行指示を受けると、データベース更新指示部１２３は、演算データ型データベース１０６の初期化の指示を演算データ型決定部１４１へ出力する。また、データベース更新指示部１２３は、表現可能割合データベース１０７の初期化の指示をデータベース更新部１４２へ出力する。演算データ型決定部１４１は、演算データ型データベース１０６に登録された各演算の演算データ型を３２ｂｉｔ浮動小数点数に変更して演算データ型データベース１０６を初期化する。また、データベース更新部１４２は、表現可能割合データベース１０７に登録された表現可能割合を削除して初期化する。これにより、演算データ型判定部１０４は、データベースの初期化を行う（ステップＳ２０１）。
【００９４】
データ読込制御部１２４は、データベースの初期化完了の通知をデータベース更新指示部１２３から受ける。また、データ読込制御部１２４は、学習データの取得要求を演算指示部１２１から受ける。そして、データ読込制御部１２４は、学習データの読込要求を学習データ読込部１０５へ出力する。学習データ読込部１０５は、学習データの読込要求を受けて、学習データ記憶部２００から指定された学習データを読み込む（ステップＳ２０２）。その後、学習データ読込部１０５は、読み込んだ学習データをデータ読込制御部１２４へ出力する。データ読込制御部１２４は、取得した学習データを演算指示部１２１へ出力する。
【００９５】
演算指示部１２１は、ユーザアプリケーション１０１から入力された深層学習の実行指示から実行するイテレーションにおける次の演算を選択する（ステップＳ２０３）。
【００９６】
そして、演算指示部１２１は、選択した演算で使用する演算データ型の取得要求を演算データ型決定部１４１へ出力する。演算データ型決定部１４１は、取得要求を受けると、選択された演算の使用範囲内のイテレーションでの表現可能割合を表現可能割合データベース１０７から取得する（ステップＳ２０４）。ただし、イテレーションが進んでおらず、使用範囲内のイテレーションがそろっていない場合、演算データ型決定部１４１は、表現可能割合の取得をエラーと判定する。
【００９７】
次に、演算データ型決定部１４１は、取得した表現可能割合を数式（４）に用いて表現可能割合のゆらぎを算出する（ステップＳ２０５）。ただし、表現可能割合の取得がエラーの場合、演算データ型決定部１４１は、表現可能割合のゆらぎを算出せずに未算出とする。
【００９８】
次に、演算データ型決定部１４１は、選択された演算が既に８ｂｉｔ固定小数点数で実行されたか否かを判定する（ステップＳ２０６）。既に８ｂｉｔ固定小数点で演算が実行された場合（ステップＳ２０６：肯定）、演算データ型決定部１４１は、選択された演算で用いる演算データ型を８ｂｉｔ固定小数点数のまま維持して、ステップＳ２１０へ進む。
【００９９】
これに対して、未だ８ｂｉｔ固定小数点数で演算が実行されていない場合（ステップＳ２０６：否定）、演算データ型決定部１４１は、表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する（ステップＳ２０７）。
【０１００】
表現可能割合のゆらぎがゆらぎ閾値未満の場合（ステップＳ２０７：肯定）、演算データ型決定部１４１は、最新の表現可能割合が割合閾値より大きいか否かを判定する（ステップＳ２０８）。
【０１０１】
最新の表現可能割合が割合閾値より大きい場合（ステップＳ２０８：肯定）、演算データ型決定部１４１は、演算データ型を８ｂｉｔ固定小数点数に決定する。その後、演算データ型決定部１４１は、選択された演算の演算データ型として８ｂｉｔ固定小数点数を使用することを演算指示部１２１に通知し、演算データ型を８ｂｉｔ固定小数点数に変更させる。（ステップＳ２０９）。
【０１０２】
演算指示部１２１は、８ｂｉｔ固定小数点数を用いて選択した演算を演算部１０３に実行させる（ステップＳ２１０）。
【０１０３】
一方、ゆらぎがゆらぎ閾値未満でない場合（ステップＳ２０７：否定）又は最新の表現可能割合が割合閾値以下の場合（ステップＳ２０８：否定）、演算データ型決定部１４１は、選択された演算の演算データ型を３２ｂｉｔ浮動小数点数に維持する。ここで、表現可能割合のゆらぎが未算出の場合も、演算データ型決定部１４１は、ゆらぎがゆらぎ閾値未満でない場合と判定する。この場合、本実施例では演算データ型決定部１４１は、演算データ型の変更の指示を演算指示部１２１への通知は行わない。ただし、演算データ型決定部１４１は、選択された演算の演算データ型として３２ｂｉｔ浮動小数点数を使用することを演算指示部１２１に通知してもよい。演算指示部１２１は、３２ｂｉｔ浮動小数点数を用いて選択した演算を演算部１０３に実行させる（ステップＳ２１１）。
【０１０４】
その後、演算データ型要求部１２２は、選択された演算の演算結果を演算部１０３から取得する。そして、演算データ型要求部１２２は、取得した演算結果をデータベース更新部１４２へ出力するとともに表現可能割合データベース１０７の更新を指示する。データベース更新部１４２は、入力された演算結果に含まれるテンソル要素数を用いて表現可能割合を計算する（ステップＳ２１２）。
【０１０５】
次に、データベース更新部１４２は、算出した表現可能割合を表現可能割合データベース１０７に保存する（ステップＳ２１３）。
【０１０６】
演算指示部１２１は、演算部１０３からイテレーションの完了通知を取得したか否かにより、１イテレーション中の全ての演算処理が完了したか否かを判定する（ステップＳ２１４）。実行していない演算処理が存在する場合（ステップＳ２１４：否定）、演算指示部１２１は、ステップＳ２０３に戻る。
【０１０７】
これに対して、１イテレーション中の全ての演算処理が完了した場合（ステップＳ２１４：肯定）、演算指示部１２１は、深層学習が完了したか否かを判定する（ステップＳ２１５）。深層学習が完了していない場合（ステップＳ２１５：否定）、演算指示部１２１は、ステップＳ２０２へ戻る。
【０１０８】
これに対して、深層学習が完了した場合（ステップＳ２１５：肯定）、演算指示部１２１は、深層学習の実行完了をユーザアプリケーション１０１へ通知する。そして、演算指示部１２１は、演算データ型の切り替えを伴う深層学習の実行を終了する。
【０１０９】
以上に説明したように、本実施例に係る情報処理装置は、演算結果に含まれる要素数の８ｂｉｔ固定小数点数での表現可能割合を求め、求めた表現可能割合が閾値以上であり、且つゆらぎが閾値未満であれば演算データ型を８ｂｉｔ固定小数点数に切り替える。このように、８ｂｉｔ固定小数点数で十分に表現可能となったタイミングで演算データ型が自動的に切り替わるため、操作者が試行錯誤して演算データ型のタイミングを指定しなくてよく、容易に深層学習や機械学習の学習効率を向上させることができる。また、表現可能な要素数を基に演算データ型の切り替えを行うため、事前学習が不十分なことで生じる演算精度不足による学習の停滞も軽減することができる。
【０１１０】
さらに、学習演算中に演算データ型を自動で変更するため、他のシステムで構築された深層学習のモデルを利用して追加学習や転移学習を行う場合などに、操作者はモデルで定義された各演算について演算データ型を指定しなくてもよい。すなわち、このような場合にも操作性を向上することができる。
【０１１１】
また、本実施例では、演算データ型を３２ｂｉｔ浮動小数点数から８ｂｉｔ固定小数点数に自動で切り替えた。ただし、機械学習や深層学習の分野では、演算性能よりも学習後の認識精度を重視する操作者も一定数存在すると考えられる。そのため、学習後の認識精度を重視する操作者を考慮することも重要である。
【０１１２】
そこで、本実施例に係る情報処理装置は、８ｂｉｔ固定小数点数への自動切り替えと、全ての演算の３２ｂｉｔ浮動小数点数での実行とを選択できる構成としてもよい。８ｂｉｔ固定小数点数への自動切り替えが指定された場合、情報処理装置は、上述した処理と同様の処理を実行する。これに対して、全ての演算の３２ｂｉｔ浮動小数点数での実行が指定された場合、情報処理装置は、８ｂｉｔ固定小数点数への演算データ型の切り替えを行わずに、深層学習が完了するまで全ての演算を３２ｂｉｔ浮動小数点数で実行する。
【０１１３】
（変形例）
実施例１では単一の情報処理装置１で学習を行う場合を例に説明したが、複数の情報処理装置を使用した学習の場合にも同様の機能を適用することができ、同様の効果を得ることができる。
【０１１４】
例えば、図９は、２つの情報処理装置を用いた学習を表す図である。ここでは、学習データ格納ストレージ８１に格納された学習データを、情報処理装置１Ａ及び１Ｂの双方が利用する。
【０１１５】
情報処理装置１Ａは、学習データ格納ストレージ８１から学習データを取得して学習を進める。この場合、データベース１５６Ａが、図３の演算データ型データベース１０６及び表現可能割合データベース１０７となる。情報処理装置１Ａは、演算結果のテンソル要素数からイテレーション毎の表現可能割合を算出してデータベース１５６Ａに格納する。そして、情報処理装置１Ａは、データベース１５６Ａに格納された表現可能割合から演算データ型を決定して、自動的に演算＃１〜＃ｎで用いる演算データ型を８ｂｉｔ固定小数点数に切り替える。
【０１１６】
同様に、情報処理装置１Ｂは、学習データ格納ストレージ８１から学習データを取得して学習を進める。この場合、データベース１５６Ｂが、図３の演算データ型データベース１０６及び表現可能割合データベース１０７となる。情報処理装置１Ｂは、演算結果のテンソル要素数からイテレーション毎の表現可能割合を算出してデータベース１５６Ｂに格納する。そして、情報処理装置１Ｂは、データベース１５６Ｂに格納された表現可能割合から演算データ型を決定して、自動的に演算＃１〜＃ｎで用いる演算データ型を８ｂｉｔ固定小数点数に切り替える。
【０１１７】
その後、情報処理装置１Ａ及び１Ｂのそれぞれにおける学習結果がまとめられて、学習が完了する。このように、複数の情報処理装置を学習に用いる場合でも、各情報処理装置において容易に機械学習の学習効率を向上させることができる。
【実施例２】
【０１１８】
次に、実施例２について説明する。本実施例に係る情報処理装置１は、８ｂｉｔ固定小数点数では未だ表現することが困難だが、１６ｂｉｔ固定小数点数では表現可能な一部の演算を、１６ｂｉｔ固定小数点数を用いて実行することが実施例１と異なる。本実施例に係る情報処理装置１のブロック図も図３で表される。以下の説明では、演算データ型の決定処理を主に説明し、実施例１と同様の各部の機能については説明を省略する。
【０１１９】
本実施例に係る表現可能割合データベース１０７は、図１０に示すフォーマットを有する。図１０は、実施例２に係る表現可能割合データベースの登録情報の一例の図である。本実施例に係る表現可能割合データベース１０７は、図１０に示すように、各イテレーションの演算毎に、演算結果に含まれるテンソル要素数の８ｂｉｔ固定小数点数での表現可能割合及び１６ｂｉｔ固定小数点数での表現可能割合が登録される。
【０１２０】
また、本実施例に係る演算データ型データベース１０６は、図１１に示すフォーマットを有する。図１１は、実施例２に係る演算データ型データベースの登録情報の一例の図である。本実施例に係る演算データ型データベース１０６は、図１１に示すように、演算データ型として、各演算ＩＤに対応させて、３２ｂｉｔ浮動小数点数、１６ｂｉｔ固定小数点数又は８ｂｉｔ固定小数点数のいずれかが各演算で用いられる演算データ型として登録される。
【０１２１】
データベース更新部１４２は、最新のイテレーションにおいて実行された演算の演算結果の入力をデータベース更新指示部１２３から受ける。次に、データベース更新部１４２は、演算結果からテンソル要素数を取得する。次に、データベース更新部１４２は、取得したテンソル要素数と数式（１）とを用いて、演算結果を８ｂｉｔ固定小数点数で表現する場合のその演算における適切な小数点位置Ｑ８を決定する。そして、数式（２）を用いて小数点位置Ｑ８の場合の８ｂｉｔ固定小数点数でのテンソル要素数の表現可能割合Ｐ８を算出する。そして、データベース更新部１４２は、最新のイテレーションの各演算における８ｂｉｔ固定小数点数での表現可能割合を表現可能割合データベース１０７に登録する。
【０１２２】
次に、データベース更新部１４２は、取得したテンソル要素数と次の数式（６）とを用いて、演算結果を１６ｂｉｔ固定小数点数で表現する場合のその演算における適切な小数点位置Ｑ１６を決定する。
【０１２３】
【数６】
2020135814.tif 000008
【０１２４】
次に、データベース更新部１４２は、次の数式（７）を用いて小数点位置Ｑ１６の場合の１６ｂｉｔ固定小数点数でのテンソル要素数の表現可能割合Ｐ１６を算出する。そして、データベース更新部１４２は、表現可能割合データベース１０７に最新のイテレーションの各演算における１６ｂｉｔ固定小数点数での表現可能割合を登録する。
【０１２５】
【数７】
2020135814.tif 000009
【０１２６】
これにより、データベース更新部１４２は、図１０で示されるデータを表現可能割合データベース１０７に登録する。すなわち、表現可能割合データベース１０７には、８ｂｉｔ浮動小数点数を用いた場合の表現可能割合及び１６ｂｉｔ浮動小数点数を用いた場合の表現可能割合が登録される。
【０１２７】
ここで、８ｂｉｔ固定小数点数が、「第１所定ビットの固定小数点数」の一例にあたり、１６ｂｉｔ固定小数点数が、「第２所定ビットの固定小数点数」の一例にあたる。以下では、８ｂｉｔ浮動小数点数を用いた場合の表現可能割合を「８ｂｉｔ表現可能割合」といい、１６ｂｉｔ浮動小数点数を用いた場合の表現可能割合を「１６ｂｉｔ表現可能割合」と言う。
【０１２８】
演算データ型決定部１４１は、各演算についての演算データ型の取得要求の入力を演算データ型要求部１２２から受ける。次に、演算データ型決定部１４１は、演算データ型データベース１０６を確認して各演算の現在の演算データ型を取得する。そして、演算データ型決定部１４１は、既に８ｂｉｔ固定小数点数を演算データ型とした演算を特定する。演算データ型決定部１４１は、特定した既に８ｂｉｔ固定小数点数を演算データ型とした演算については８ｂｉｔ固定小数点数を演算データ型として演算データ型要求部１２２に通知する。
【０１２９】
これに対して、８ｂｉｔ固定小数点数以外を演算データ型とした演算について、演算データ型決定部１４１は、表現可能割合データベース１０７から最新のイテレーションから判定範囲内のイテレーションにおける８ｂｉｔ表現可能割合を取得する。
【０１３０】
例えば、図１２を参照して、その時点でイテレーションが１５０４回終了した場合で説明する。図１２は、実施例２に係る演算データ型の決定処理を説明するための図である。図１２のテーブル１７１は、表現可能割合データベース１０７を分かり易いように並べ直したテーブルである。
【０１３１】
例えば、判定範囲を４回のイテレーションとした場合、演算データ型決定部１４１は、図１２における、使用範囲７１１、７１３、７１５内の８ｂｉｔ表現可能割合を演算毎に取得する。ここでは、演算＃１〜＃３におけるこの時点での演算データ型は、３２ｂｉｔ浮動小数点数である。次に、演算データ型決定部１４１は、各演算の最新のイテレーションにおける８ｂｉｔ表現可能割合が割合閾値を超えたか否かを判定する。例えば、割合閾値をＴｆ１とした場合、演算データ型決定部１４１は、数式（３）を満たすか否かを判定する。
【０１３２】
閾値を超えた演算について、演算データ型決定部１４１は、演算データ型決定部１４１は、判定範囲内での８ｂｉｔ表現可能割合の変動が小さいか否かを判定する。具体的には、演算データ型決定部１４１は、数式（４）を用いて演算ｆについてのイテレーション間のゆらぎであるΔｆを算出する。
【０１３３】
次に、演算データ型決定部１４１は、算出した８ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する。例えば、ゆらぎ閾値をＴｆ２とした場合、演算データ型決定部１４１は、数式（５）を満たすか否かを判定する。
【０１３４】
８ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満の演算については、その演算の演算データ型を８ｂｉｔ固定小数点数と決定し、演算データ型要求部１２２に通知する。
【０１３５】
これに対して、８ｂｉｔ表現可能割合が割合閾値以下の演算及び８ｂｉｔ表現可能割合のゆらぎが予め決められたゆらぎ閾値以上の演算について、演算データ型決定部１４１は、既に１６ｂｉｔ固定小数点数を演算データ型とした演算を特定する。演算データ型決定部１４１は、特定した既に１６ｂｉｔ固定小数点数を演算データ型とした演算については１６ｂｉｔ固定小数点数を演算データ型として演算データ型要求部１２２に通知する。
【０１３６】
これに対して、１６ｂｉｔ固定小数点数以外を演算データ型とした演算について、演算データ型決定部１４１は、表現可能割合データベース１０７から最新のイテレーションから判定範囲内のイテレーションにおける１６ｂｉｔ表現可能割合を取得する。この場合、１６ｂｉｔ固定小数点数以外を演算データ型とした演算とは、演算データ型として３２ｂｉｔ浮動小数点数が用いられた演算である。
【０１３７】
例えば、演算データ型決定部１４１は、図１２における、使用範囲７１２、７１４、７１６内の１６ｂｉｔ表現可能割合を演算毎に取得する。次に、演算データ型決定部１４１は、各演算の最新のイテレーションにおける１６ｂｉｔ表現可能割合が割合閾値を超えたか否かを判定する。例えば、割合閾値をＴｆ１とした場合、演算データ型決定部１４１は、数式（３）を満たすか否かを判定する。
【０１３８】
閾値を超えた演算について、演算データ型決定部１４１は、演算データ型決定部１４１は、判定範囲内での１６ｂｉｔ表現可能割合の変動が小さいか否かを判定する。具体的には、演算データ型決定部１４１は、数式（４）を用いて演算ｆについてのイテレーション間のゆらぎであるΔｆを算出する。
【０１３９】
次に、演算データ型決定部１４１は、算出した１６ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する。例えば、ゆらぎ閾値をＴｆ２とした場合、演算データ型決定部１４１は、数式（５）を満たすか否かを判定する。１６ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満の演算については、その演算の演算データ型を１６ｂｉｔ固定小数点数と決定し、演算データ型要求部１２２に通知する。
【０１４０】
これに対して、１６ｂｉｔ表現可能割合が割合閾値以下の演算及び１６ｂｉｔ表現可能割合のゆらぎが予め決められたゆらぎ閾値以上の演算について、演算データ型決定部１４１は、その演算の演算データ型を３２ｂｉｔ浮動小数点数と決定する。そして、演算データ型決定部１４１は、その演算の演算データ型として３２ｂｉｔ浮動小数点数を用いることを演算データ型要求部１２２に通知する。
【０１４１】
ここで、本実施例では、演算データ型決定部１４１は、演算データ型を８ｂｉｔ固定小数点や１６ｂｉｔ固定小数点に設定した演算に関して、８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合の変動を確認する。この処理が可能になるのは、以下の理由による。演算時には演算部１０３は、８ｂｉｔ固定小数点や１６ｂｉｔ固定小数点で演算を行う場合にも、演算内部でより大きな演算精度の中間データを用いて演算を行い、出力を８ｂｉｔ固定小数点や１６ｂｉｔ固定小数点の精度とする。そして、データベース更新部１４２は、８ｂｉｔ固定小数点や１６ｂｉｔ固定小数点の精度に変更する前の演算結果である中間データを用いて８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合を算出する。そのため、演算データ型決定部１４１は、８ｂｉｔ固定小数点や１６ｂｉｔ固定小数点を用いた演算の演算結果についても、８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合の変動を判定することができる。
【０１４２】
例えば、図１２において割合閾値を８０％とし、ゆらぎ閾値を１０％とした場合の演算データ型決定部１４１による演算データ型決定処理について説明する。演算データ型決定部１４１は、イテレーションＩＤがｉｔ１５０４のイテレーションでの演算＃１の８ｂｉｔ表現可能割合は４６．５％で割合閾値以下であり、１６ｂｉｔ表現可能割合は９９．２％で割合閾値より大きいと判定する。そこで、演算データ型決定部１４１は、演算＃１の演算データ型としては８ｂｉｔ固定小数点数を用いないと決定する。さらに、演算データ型決定部１４１は、使用範囲７１２の１６ｂｉｔ表現可能割合のゆらぎを求めて、その求めた値がゆらぎ閾値未満と判定する。そこで、演算データ型決定部１４１は、演算＃１の演算データ型を１６ｂｉｔ固定小数点数と決定する。
【０１４３】
また、演算データ型決定部１４１は、イテレーションＩＤがｉｔ１５０４のイテレーションでの演算＃２の８ｂｉｔ表現可能割合は９７．２％で割合閾値より大きいと判定する。次に、演算データ型決定部１４１は、使用範囲７１３の８ｂｉｔ表現可能割合のゆらぎを求めて、その求めた値がゆらぎ閾値未満と判定する。これにより、演算データ型決定部１４１は、演算＃２の演算データ型を８ｂｉｔ固定小数点数と決定する。
【０１４４】
また、演算データ型決定部１４１は、イテレーションＩＤがｉｔ１５０４のイテレーションでの演算＃３の８ｂｉｔ表現可能割合は９６．９％であり割合閾値より大きく、１６ｂｉｔ表現可能割合は９９．２％で割合閾値より大きいと判定する。そこで、演算データ型決定部１４１は、使用範囲７１５の８ｂｉｔ表現可能割合のゆらぎを求めて、その求めた値がゆらぎ閾値以上と判定する。次に、演算データ型決定部１４１は、使用範囲７１６の１６ｂｉｔ表現可能割合のゆらぎを求めて、これもゆらぎ閾値以上と判定する。この場合、演算データ型決定部１４１は、演算＃３の演算データ型としては８ｂｉｔ固定小数点数及び１６ｂｉｔ固定小数点数を用いないと決定する。そこで、演算データ型決定部１４１は、演算＃３の演算データ型を３２ｂｉｔ浮動小数点数と決定定する。
【０１４５】
次に、図１３を参照して、実施例２に係る演算データ型決定処理の詳細な流れについて説明する。図１３は、実施例２に係る演算データ型決定処理のフローチャートである。
【０１４６】
演算データ型判定部１０４は、演算データ型データベース１０６及び表現可能割合データベース１０７の初期化を行う（ステップＳ３０１）。
【０１４７】
データ読込制御部１２４は、データベースの初期化完了の通知をデータベース更新指示部１２３から受ける。また、データ読込制御部１２４は、学習データの取得要求を演算指示部１２１から受ける。そして、データ読込制御部１２４は、学習データの読込要求を学習データ読込部１０５へ出力する。学習データ読込部１０５は、学習データの読込要求を受けて、学習データ記憶部２００から指定された学習データを読み込む（ステップＳ３０２）。その後、学習データ読込部１０５は、読み込んだ学習データをデータ読込制御部１２４へ出力する。データ読込制御部１２４は、取得した学習データを演算指示部１２１へ出力する。
【０１４８】
演算指示部１２１は、ユーザアプリケーション１０１から入力された深層学習の実行指示から実行するイテレーションにおける次の演算を選択する（ステップＳ３０３）。
【０１４９】
そして、演算指示部１２１は、選択した演算で使用する演算データ型の取得要求を演算データ型決定部１４１へ出力する。演算データ型決定部１４１は、取得要求を受けると、選択された演算の使用範囲内のイテレーションでの８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合を表現可能割合データベース１０７から取得する（ステップＳ３０４）。ただし、イテレーションが進んでおらず、使用範囲内のイテレーションがそろっていない場合、演算データ型決定部１４１は、表現可能割合の取得をエラーと判定する。
【０１５０】
次に、演算データ型決定部１４１は、取得した８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合を数式（４）に用いて８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合のゆらぎを算出する（ステップＳ３０５）。ただし、表現可能割合の取得がエラーの場合、演算データ型決定部１４１は、表現可能割合のゆらぎを算出せずに未算出とする。
【０１５１】
次に、演算データ型決定部１４１は、選択された演算が既に８ｂｉｔ固定小数点数で実行されたか否かを判定する（ステップＳ３０６）。既に８ｂｉｔ固定小数点で演算が実行された場合（ステップＳ３０６：肯定）、演算データ型決定部１４１は、選択された演算で用いる演算データ型を８ｂｉｔ固定小数点数のまま維持して、ステップＳ３１０へ進む。
【０１５２】
これに対して、未だ８ｂｉｔ固定小数点数で演算が実行されていない場合（ステップＳ３０６：否定）、演算データ型決定部１４１は、８ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する（ステップＳ３０７）。
【０１５３】
８ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満の場合（ステップＳ３０７：肯定）、演算データ型決定部１４１は、最新の８ｂｉｔ表現可能割合が割合閾値より大きいか否かを判定する（ステップＳ３０８）。
【０１５４】
最新の８ｂｉｔ表現可能割合が割合閾値より大きい場合（ステップＳ３０８：肯定）、演算データ型決定部１４１は、演算データ型を８ｂｉｔ固定小数点数に決定する。その後、演算データ型決定部１４１は、選択された演算の演算データ型として８ｂｉｔ固定小数点数を使用することを演算指示部１２１に通知し、演算データ型を８ｂｉｔ固定小数点数に変更させる。（ステップＳ３０９）。
【０１５５】
演算指示部１２１は、８ｂｉｔ固定小数点数を用いて選択した演算を演算部１０３に実行させる（ステップＳ３１０）。
【０１５６】
一方、８ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満でない場合（ステップＳ３０７：否定）又は最新の８ｂｉｔ表現可能割合が割合閾値以下の場合（ステップＳ３０８：否定）、演算データ型決定部１４１は、以下の処理を行う。ここで、８ｂｉｔ表現可能割合のゆらぎが未算出の場合も、演算データ型決定部１４１は、ゆらぎがゆらぎ閾値未満でない場合と判定する。演算データ型決定部１４１は、選択された演算が既に１６ｂｉｔ固定小数点数で実行されたか否かを判定する（ステップＳ３１１）。既に１６ｂｉｔ固定小数点で演算が実行された場合（ステップＳ３１１：肯定）、演算データ型決定部１４１は、選択された演算で用いる演算データ型を１６ｂｉｔ固定小数点数のまま維持して、ステップＳ３１５へ進む。
【０１５７】
これに対して、未だ１６ｂｉｔ固定小数点数で演算が実行されていない場合（ステップＳ３１１：否定）、演算データ型決定部１４１は、１６ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する（ステップＳ３１２）。
【０１５８】
１６ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満の場合（ステップＳ３１２：肯定）、演算データ型決定部１４１は、最新の１６ｂｉｔ表現可能割合が割合閾値より大きいか否かを判定する（ステップＳ３１３）。
【０１５９】
最新の１６ｂｉｔ表現可能割合が割合閾値より大きい場合（ステップＳ３１３：肯定）、演算データ型決定部１４１は、演算データ型を１６ｂｉｔ固定小数点数に決定する。その後、演算データ型決定部１４１は、選択された演算の演算データ型として１６ｂｉｔ固定小数点数を使用することを演算指示部１２１に通知し、演算データ型を１６ｂｉｔ固定小数点数に変更させる（ステップＳ３１４）。
【０１６０】
演算指示部１２１は、１６ｂｉｔ固定小数点数を用いて選択した演算を演算部１０３に実行させる（ステップＳ３１５）。
【０１６１】
一方、１６ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満でない場合（ステップＳ３１２：否定）又は最新の１６ｂｉｔ表現可能割合が割合閾値以下の場合（ステップＳ３１３：否定）、演算データ型決定部１４１は、以下の処理を行う。ここで、１６ｂｉｔ表現可能割合のゆらぎが未算出の場合も、演算データ型決定部１４１は、ゆらぎがゆらぎ閾値未満でない場合と判定する。演算データ型決定部１４１は、選択された演算の演算データ型を３２ｂｉｔ浮動小数点数で維持することを決定する。この場合、本実施例では演算データ型決定部１４１は、演算データ型の変更の指示を演算指示部１２１への通知は行わない。ただし、演算データ型決定部１４１は、選択された演算の演算データ型として３２ｂｉｔ浮動小数点数を使用することを演算指示部１２１に通知してもよい。演算指示部１２１は、３２ｂｉｔ浮動小数点数を用いて選択した演算を演算部１０３に実行させる（ステップＳ３１６）。
【０１６２】
その後、演算データ型要求部１２２は、選択された演算の演算結果を演算部１０３から取得する。そして、演算データ型要求部１２２は、取得した演算結果をデータベース更新部１４２へ出力するとともに表現可能割合データベース１０７の更新を指示する。データベース更新部１４２は、入力された演算結果に含まれるテンソル要素数を用いて８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合を計算する（ステップＳ３１７）。
【０１６３】
次に、データベース更新部１４２は、算出した８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合を表現可能割合データベース１０７に保存する（ステップＳ３１８）。
【０１６４】
演算指示部１２１は、演算部１０３からイテレーションの完了通知を取得したか否かにより、１つのイテレーション中の全ての演算処理が完了したか否かを判定する（ステップＳ３１９）。実行していない演算処理が存在する場合（ステップＳ３１９：否定）、演算指示部１２１は、ステップＳ３０３に戻る。
【０１６５】
これに対して、１つのイテレーション中の全ての演算処理が完了した場合（ステップＳ３１９：肯定）、演算指示部１２１は、深層学習が完了したか否かを判定する（ステップＳ３２０）。深層学習が完了していない場合（ステップＳ３２０：否定）、演算指示部１２１は、ステップＳ３０２へ戻る。
【０１６６】
これに対して、深層学習が完了した場合（ステップＳ３２０：肯定）、演算指示部１２１は、深層学習の実行完了をユーザアプリケーション１０１へ通知する。そして、演算指示部１２１は、演算データ型の切り替えを伴う深層学習の実行を終了する。
【０１６７】
以上に説明したように、本実施例に係る情報処理装置は、演算結果に含まれる要素数の８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合での表現可能割合を求め、求めた８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合に応じて演算データ型を切り替える。このように、８ｂｉｔ固定小数点数又は１６ｂｉｔ固定小数点数で十分に表現可能となったタイミングで演算データ型が自動的に切り替わるため、操作者が試行錯誤して演算データ型のタイミングを指定しなくてよい。そのため、本実施例に係る情報処理装置は、容易に深層学習や機械学習の学習効率を向上させることができる。また、表現可能な要素数を基に演算データ型の切り替えを行うため、事前学習が不十分なことで生じる演算精度不足による学習の停滞も軽減することができる。
【０１６８】
なお、本実施例に係る情報処理装置は、８ｂｉｔ固定小数点数及び１６ｂｉｔ固定小数点への自動切り替えと、全ての演算の３２ｂｉｔ浮動小数点数での実行とを選択できる構成としてもよい。８ｂｉｔ固定小数点数及び１６ｂｉｔ固定小数点への自動切り替えが指定された場合、情報処理装置は、上述した処理と同様の処理を実行する。これに対して、全ての演算の３２ｂｉｔ浮動小数点数での実行が指定された場合、情報処理装置は、８ｂｉｔ固定小数点数への演算データ型の切り替えを行わずに、深層学習が完了するまで全ての演算を３２ｂｉｔ浮動小数点数で実行する。
【実施例３】
【０１６９】
図１４は、実施例３に係る情報処理装置のブロック図である。本実施例に係る情報処理装置１は、演算データ型データベース１０６を有さないことが実施例１及び２と異なる。
【０１７０】
本実施例に係る情報処理装置１は、以前の演算データ型を参照せずにイテレーション毎に演算データ型を判定することが実施例１及び２と異なる。すなわち、本実施例に係る情報処理装置１では、８ｂｉｔ固定小数点数を演算データ型とした演算が、１６ｂｉｔ固定小数点数や３２ｂｉｔ浮動小数点数を演算データ型として使用する状態に戻る場合がある。また、１６ｂｉｔ固定小数点数を演算データ型とした演算が、３２ｂｉｔ浮動小数点数を演算データ型として使用する状態に戻る場合がある。
【０１７１】
以下の説明では、実施例２と同様に８ｂｉｔ固定小数点数及び１６ｂｉｔ固定小数点数を用いる場合を例に説明するが、実施例３の情報処理装置１は、実施例１と同様の８ｂｉｔ固定小数点数を固定小数点数として用いる場合も動作可能である。以下の説明では、演算データ型の決定処理を主に説明し、実施例２と同様の各部の機能については説明を省略する。
【０１７２】
本実施例に係る表現可能割合データベース１０７は、図１０に示すフォーマットと同様のフォーマットを有する。すなわち、本実施例に係る表現可能割合データベース１０７は、各イテレーションの演算毎に、演算結果に含まれるテンソル要素数の８ｂｉｔ固定小数点数での表現可能割合及び１６ｂｉｔ固定小数点数での表現可能割合が登録される。
【０１７３】
実行制御部１０２は、深層学習の実行指示をユーザアプリケーション１０１から受けると、表現可能割合データベース１０７の初期化を演算データ型判定部１０４に指示する。この場合、演算データ型データベース１０６は存在しないので、演算データ型データベース１０６の初期化は行われない。
【０１７４】
演算データ型判定部１０４は、表現可能割合データベース１０７の初期化の指示を受けて、表現可能割合データベース１０７に登録済みのデータを消去して初期化する。
【０１７５】
演算データ型決定部１４１は、各演算についての演算データ型の取得要求の入力を演算データ型要求部１２２から受ける。次に、演算データ型決定部１４１は、演算データ型データベース１０６を確認して各演算の現在の演算データ型を取得する。そして、演算データ型決定部１４１は、判定範囲内のイテレーションにおける８ｂｉｔ表現可能割合を表現可能割合データベース１０７から取得する。
【０１７６】
次に、演算データ型決定部１４１は、各演算の最新のイテレーションにおける８ｂｉｔ表現可能割合が割合閾値を超えたか否かを判定する。例えば、割合閾値をＴｆ１とした場合、演算データ型決定部１４１は、数式（３）を満たすか否かを判定する。
【０１７７】
閾値を超えた演算について、演算データ型決定部１４１は、演算データ型決定部１４１は、判定範囲内での８ｂｉｔ表現可能割合の変動が小さいか否かを判定する。具体的には、演算データ型決定部１４１は、数式（４）を用いて演算ｆについてのイテレーション間のゆらぎであるΔｆを算出する。
【０１７８】
次に、演算データ型決定部１４１は、算出した８ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する。例えば、ゆらぎ閾値をＴｆ２とした場合、演算データ型決定部１４１は、数式（５）を満たすか否かを判定する。
【０１７９】
演算データ型決定部１４１は、８ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満の演算については、その演算の演算データ型を８ｂｉｔ固定小数点数と決定し、演算データ型要求部１２２に通知する。
【０１８０】
一方、８ｂｉｔ表現可能割合が割合閾値以下の演算及び８ｂｉｔ表現可能割合のゆらぎが予め決められたゆらぎ閾値以上の演算について、演算データ型決定部１４１は、判定範囲内のイテレーションにおける１６ｂｉｔ表現可能割合を取得する。
【０１８１】
次に、演算データ型決定部１４１は、各演算の最新のイテレーションにおける１６ｂｉｔ表現可能割合が割合閾値を超えたか否かを判定する。例えば、割合閾値をＴｆ１とした場合、演算データ型決定部１４１は、数式（３）を満たすか否かを判定する。
【０１８２】
閾値を超えた演算について、演算データ型決定部１４１は、判定範囲内での１６ｂｉｔ表現可能割合の変動が小さいか否かを判定する。具体的には、演算データ型決定部１４１は、数式（４）を用いて演算ｆについてのイテレーション間のゆらぎであるΔｆを算出する。
【０１８３】
次に、演算データ型決定部１４１は、算出した１６ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する。例えば、ゆらぎ閾値をＴｆ２とした場合、演算データ型決定部１４１は、数式（５）を満たすか否かを判定する。演算データ型決定部１４１は、１６ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満の演算については、その演算の演算データ型を１６ｂｉｔ固定小数点数と決定し、演算データ型要求部１２２に通知する。
【０１８４】
これに対して、１６ｂｉｔ表現可能割合が割合閾値以下の演算及び１６ｂｉｔ表現可能割合のゆらぎが予め決められたゆらぎ閾値以上の演算について、演算データ型決定部１４１は、その演算の演算データ型を３２ｂｉｔ浮動小数点数と決定する。そして、演算データ型決定部１４１は、その演算の演算データ型として３２ｂｉｔ浮動小数点数を用いることを演算データ型要求部１２２に通知する。
【０１８５】
ここで、図１５を参照して、本実施例における演算データ型の遷移について説明する。図１５は、演算データ型の遷移を説明するための図である。図１５のテーブル１７２は、表現可能割合データベース１０７を分かり易いように並べ直したテーブルである。ここでは、割合閾値を８０％とし、ゆらぎ閾値を１０％とした場合の演算データ型決定部１４１による演算データ型決定処理について説明する。
【０１８６】
まず、演算＃１における演算データ型の遷移について説明する。イテレーションＩＤがｉｔ１５０５のイテレーションの段階で、演算＃１の８ｂｉｔ表現可能割合が割合閾値以下であるので、演算データ型決定部１４１は、演算＃１の演算データ型として８ｂｉｔ固定小数点数は使用しない。一方、使用範囲７２１においてイテレーションＩＤがｉｔ１５０５のイテレーションでの１６ｂｉｔ表現可能割合が割合閾値を超えており、１６ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満である。そこで、演算データ型決定部１４１は、１６ｂｉｔ固定小数点数を演算＃１の演算データ型とする。そのため、イテレーションＩＤがｉｔ１５０６のイテレーションでは、演算＃１の演算データ型として１６ｂｉｔ固定小数点数が用いられることになり、割合７２２は、１６ｂｉｔ固定小数点数を用いて算出される。
【０１８７】
その後、イテレーションＩＤがｉｔ１５０７のイテレーションの段階で、８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合のいずれも割合閾値以下となる。また、使用範囲７２３における１６ｂｉｔ表現可能割合のゆらぎもゆらぎ閾値以上となる。そこで、演算データ型決定部１４１は、３２ｂｉｔ浮動小数点数を演算＃１の演算データ型とする。これにより、イテレーションＩＤがｉｔ１５０８のイテレーション以降では、演算データ型の変更が無ければ、３２ｂｔｉ浮動小数点数が演算＃１の演算データ型として用いられる。
【０１８８】
次に、演算＃２における演算データ型の遷移について説明する。イテレーションＩＤがｉｔ１５０４のイテレーションの段階で、使用範囲７２４のように、８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合のいずれも割合閾値を超えており、各ゆらぎはゆらぎ閾値未満である。そこで、演算データ型決定部１４１は、８ｂｉｔ固定小数点数を演算＃２の演算データ型とする。これにより、イテレーションＩＤがｉｔ１５０５のイテレーション以降の範囲７２５のイテレーションでは、演算データ型の変更が無ければ、８ｂｔｉ固定小数点数が演算＃２の演算データ型として用いられる。
【０１８９】
次に、演算＃３における演算データ型の遷移について説明する。イテレーションＩＤがｉｔ１５０４のイテレーションの段階で、使用範囲７２６のように、８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合のいずれも割合閾値を超えており、各ゆらぎはゆらぎ閾値未満である。そこで、演算データ型決定部１４１は、８ｂｉｔ固定小数点数を演算＃２の演算データ型とする。これにより、イテレーションＩＤがｉｔ１５０５のイテレーションの割合７２７は、８ｂｔｉ固定小数点数を用いて算出される。
【０１９０】
しかし、イテレーションＩＤがｉｔ１５０６のイテレーションの段階で、使用範囲７２８では、イテレーションＩＤがｉｔ１５０６のイテレーションの８ｂｉｔ使用可能割合が割合閾値以下となり、８ｂｉｔ使用可能割合のゆらぎもゆらぎ閾値以下となる。そこで、演算データ型決定部１４１は、演算＃３の演算データ型として８ｂｉｔ固定小数点数は使用しない。一方、使用範囲７２９においてイテレーションＩＤがｉｔ１５０６のイテレーションでの１６ｂｉｔ表現可能割合が割合閾値より大きく、１６ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満である。そこで、演算データ型決定部１４１は、１６ｂｉｔ固定小数点数を演算＃３の演算データ型とする。これにより、イテレーションＩＤがｉｔ１５０７のイテレーション以降の範囲７３０のイテレーションでは、演算データ型の変更が無ければ、１６ｂｔｉ固定小数点数が演算＃３の演算データ型として用いられる。
【０１９１】
次に、図１６を参照して、実施例３に係る情報処理装置１による演算データ型決定処理の全体的な流れの概要について説明する。図１６は、実施例３に係る情報処理装置による演算データ型決定処理のシーケンス図である。
【０１９２】
ユーザアプリケーション１０１は、深層学習の実行指示を実行制御部１０２に出力する（ステップＳ４０１）。
【０１９３】
実行制御部１０２は、深層学習の実行指示をユーザアプリケーション１０１から受けると、表現可能割合データベース１０７の初期化を演算データ型判定部１０４に指示する（ステップＳ４０２）。
【０１９４】
演算データ型判定部１０４は、表現可能割合データベース１０７の初期化の指示を受けて、表現可能割合データベース１０７に登録済みのデータを消去して初期化する（ステップＳ４０３）。
【０１９５】
その後、演算データ型判定部１０４は、表現可能割合データベース１０７の初期化完了を実行制御部１０２に通知する（ステップＳ４０４）。
【０１９６】
実行制御部１０２は、表現可能割合データベース１０７の初期化完了の応答を受信すると、学習に使用する学習データの読み込みを学習データ読込部１０５に指示する（ステップＳ４０５）。
【０１９７】
学習データ読込部１０５は、学習データの読み込み指示を受けて、指定された学習データを学習データ記憶部２００から読み込む（ステップＳ４０６）。
【０１９８】
その後、学習データ読込部１０５は、読み込んだ学習データを実行制御部１０２へ送信する（ステップＳ４０７）。
【０１９９】
実行制御部１０２は、学習データを学習データ読込部１０５から取得する。次に、実行制御部１０２は、次のイテレーションの各演算で使用する演算データ型の取得要求を演算データ型判定部１０４へ出力する（ステップＳ４０８）。
【０２００】
演算データ型判定部１０４は、演算データ型の取得要求の入力を受けて、表現可能割合データベース１０７を用いて各演算で使用する演算データ型を決定する（ステップＳ４０９）。
【０２０１】
そして、演算データ型判定部１０４は、決定した各演算で使用する演算データ型の通知を実行制御部１０２へ出力する（ステップＳ４１０）。
【０２０２】
実行制御部１０２は、各演算で用いる演算データ型を取得する。そして、実行制御部１０２は、取得した学習データを演算部１０３へ出力し、さらに各演算で用いる演算データ型を演算部１０３に通知して演算を実行させる（ステップＳ４１１）。
【０２０３】
その後、実行制御部１０２は、演算結果の入力を演算部１０３から受ける（ステップＳ４１２）。
【０２０４】
次に、実行制御部１０２は、取得した演算結果を演算データ型判定部１０４へ出力して表現可能割合データベース１０７の更新を指示する（ステップＳ４１３）。
【０２０５】
演算データ型判定部１０４は、演算結果に含まれるテンソル要素数を用いて表現可能割合を算出し、算出した表現可能割合を登録して表現可能割合データベース１０７を更新する（ステップＳ４１４）。
【０２０６】
その後、演算データ型判定部１０４は、表現可能割合データベース１０７の更新完了の通知を実行制御部１０２へ出力する（ステップＳ４１５）。
【０２０７】
実行制御部１０２は、演算データ型データベース１０６の更新完了の通知の入力を実行制御部１０２から受ける。実行制御部１０２、演算部１０３、演算データ型判定部１０４及び学習データ読込部１０５は、１回のイテレーションに含まれる演算全てが完了するまで、ステップＳ１１１〜Ｓ１２１を繰り返す。さらに、実行制御部１０２、演算部１０３、演算データ型判定部１０４及び学習データ読込部１０５は、深層学習が完了するまで、ステップＳ１０８〜Ｓ１２１を繰り返す。その後、実行制御部１０２は、深層学習の完了をユーザアプリケーション１０１に通知する（ステップＳ４１６）。
【０２０８】
次に、図１７を参照して、実施例３に係る演算データ型決定処理の詳細な流れについて説明する。図１７は、実施例３に係る演算データ型決定処理のフローチャートである。
【０２０９】
演算データ型判定部１０４は、表現可能割合データベース１０７を初期化する（ステップＳ５０１）。
【０２１０】
データ読込制御部１２４は、データベースの初期化完了の通知をデータベース更新指示部１２３から受ける。また、データ読込制御部１２４は、学習データの取得要求を演算指示部１２１から受ける。そして、データ読込制御部１２４は、学習データの読込要求を学習データ読込部１０５へ出力する。学習データ読込部１０５は、学習データの読込要求を受けて、学習データ記憶部２００から指定された学習データを読み込む（ステップＳ５０２）。その後、学習データ読込部１０５は、読み込んだ学習データをデータ読込制御部１２４へ出力する。データ読込制御部１２４は、取得した学習データを演算指示部１２１へ出力する。
【０２１１】
演算指示部１２１は、ユーザアプリケーション１０１から入力された深層学習の実行指示から実行するイテレーションにおける次の演算を選択する（ステップＳ５０３）。
【０２１２】
そして、演算指示部１２１は、選択した演算で使用する演算データ型の取得要求を演算データ型決定部１４１へ出力する。演算データ型決定部１４１は、取得要求を受けると、選択された演算の使用範囲内のイテレーションでの８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合を表現可能割合データベース１０７から取得する（ステップＳ５０４）。ただし、イテレーションが進んでおらず、使用範囲内のイテレーションがそろっていない場合、演算データ型決定部１４１は、表現可能割合の取得をエラーと判定する。
【０２１３】
次に、演算データ型決定部１４１は、取得した８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合を数式（４）に用いて８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合のゆらぎを算出する（ステップＳ５０５）。ただし、表現可能割合の取得がエラーの場合、演算データ型決定部１４１は、表現可能割合のゆらぎを算出せずに未算出とする。
【０２１４】
次に、演算データ型決定部１４１は、８ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する（ステップＳ５０６）。
【０２１５】
８ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満の場合（ステップＳ５０６：肯定）、演算データ型決定部１４１は、最新の８ｂｉｔ表現可能割合が割合閾値より大きいか否かを判定する（ステップＳ５０７）。
【０２１６】
最新の８ｂｉｔ表現可能割合が割合閾値より大きい場合（ステップＳ５０７：肯定）、演算データ型決定部１４１は、演算データ型を８ｂｉｔ固定小数点数に決定する（ステップＳ５０８）。
【０２１７】
その後、演算データ型決定部１４１は、選択された演算の演算データ型として８ｂｉｔ固定小数点数を使用することを演算指示部１２１に通知する。演算指示部１２１は、８ｂｉｔ固定小数点数を用いて選択した演算を演算部１０３に実行させる（ステップＳ５０９）。
【０２１８】
一方、８ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満でない場合（ステップＳ５０６：否定）又は最新の８ｂｉｔ表現可能割合が割合閾値以下の場合（ステップＳ５０７：否定）、演算データ型決定部１４１は、以下の処理を行う。ここで、８ｂｉｔ表現可能割合のゆらぎが未算出の場合も、演算データ型決定部１４１は、ゆらぎがゆらぎ閾値未満でない場合と判定する。演算データ型決定部１４１は、１６ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満か否かを判定する（ステップＳ５１０）。
【０２１９】
１６ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満の場合（ステップＳ５１０：肯定）、演算データ型決定部１４１は、最新の１６ｂｉｔ表現可能割合が割合閾値より大きいか否かを判定する（ステップＳ５１１）。
【０２２０】
最新の１６ｂｉｔ表現可能割合が割合閾値より大きい場合（ステップＳ５１１：肯定）、演算データ型決定部１４１は、演算データ型を１６ｂｉｔ固定小数点数に決定する（ステップＳ５１２）。
【０２２１】
その後、演算データ型決定部１４１は、選択された演算の演算データ型として１６ｂｉｔ固定小数点数を使用することを演算指示部１２１に通知する。演算指示部１２１は、１６ｂｉｔ固定小数点数を用いて選択した演算を演算部１０３に実行させる（ステップＳ５１３）。
【０２２２】
一方、１６ｂｉｔ表現可能割合のゆらぎがゆらぎ閾値未満でない場合（ステップＳ５１０：否定）又は最新の１６ｂｉｔ表現可能割合が割合閾値以下の場合（ステップＳ５１１：否定）、演算データ型決定部１４１は、以下の処理を行う。演算データ型決定部１４１は、選択された演算の演算データ型を３２ｂｉｔ浮動小数点数と決定する（ステップＳ５１４）。ここで、１６ｂｉｔ表現可能割合のゆらぎが未算出の場合も、演算データ型決定部１４１は、ゆらぎがゆらぎ閾値未満でない場合と判定する。
【０２２３】
そして、演算データ型決定部１４１は、選択された演算の演算データ型として３２ｂｉｔ浮動小数点数を使用することを演算指示部１２１に通知する。演算指示部１２１は、３２ｂｉｔ浮動小数点数を用いて選択した演算を演算部１０３に実行させる（ステップＳ５１５）。
【０２２４】
その後、演算データ型要求部１２２は、選択された演算の演算結果を演算部１０３から取得する。そして、演算データ型要求部１２２は、取得した演算結果をデータベース更新部１４２へ出力するとともに表現可能割合データベース１０７の更新を指示する。データベース更新部１４２は、入力された演算結果に含まれるテンソル要素数を用いて８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合を計算する（ステップＳ５１６）。
【０２２５】
次に、データベース更新部１４２は、算出した８ｂｉｔ表現可能割合及び１６ｂｉｔ表現可能割合を表現可能割合データベース１０７に保存する（ステップＳ５１７）。
【０２２６】
演算指示部１２１は、演算部１０３からイテレーションの完了通知を取得したか否かにより、１つのイテレーション中の全ての演算処理が完了したか否かを判定する（ステップＳ５１８）。実行していない演算処理が存在する場合（ステップＳ５１８：否定）、演算指示部１２１は、ステップＳ５０３に戻る。
【０２２７】
これに対して、１つのイテレーション中の全ての演算処理が完了した場合（ステップＳ５１８：肯定）、演算指示部１２１は、深層学習が完了したか否かを判定する（ステップＳ５１９）。深層学習が完了していない場合（ステップＳ５１９：否定）、演算指示部１２１は、ステップＳ５０２へ戻る。
【０２２８】
これに対して、学習が完了した場合（ステップＳ５１９：肯定）、演算指示部１２１は、深層学習の実行完了をユーザアプリケーション１０１へ通知する。そして、演算指示部１２１は、演算データ型の切り替えを伴う深層学習の実行を終了する。
【０２２９】
以上に説明したように、本実施例に係る情報処理装置は、以前の演算データ型を参照せずにイテレーション毎に演算データ型を決定する。これにより、８ｂｉｔ固定小数点や１６ｂｉｔ固定小数点に演算データ型を切替えた後に、演算精度不足によって学習が進まなくなる状態の発生を軽減することができ、学習精度を向上させることができる。
【０２３０】
なお、本実施例に係る情報処理装置においても、８ｂｉｔ固定小数点数及び１６ｂｉｔ固定小数点への自動切り替えと、全ての演算の３２ｂｉｔ浮動小数点数での実行とを選択できる構成としてもよい。８ｂｉｔ固定小数点数及び１６ｂｉｔ固定小数点への自動切り替えが指定された場合、情報処理装置は、上述した処理と同様の処理を実行する。これに対して、全ての演算の３２ｂｉｔ浮動小数点数での実行が指定された場合、情報処理装置は、８ｂｉｔ固定小数点数への演算データ型の切り替えを行わずに、深層学習が完了するまで全ての演算を３２ｂｉｔ浮動小数点数で実行する。
【符号の説明】
【０２３１】
１  情報処理装置
１１  ＣＰＵ
１２  深層学習用プロセッサ
１３  メモリ
１４  ストレージ
１５  ネットワークインタフェース
１００  深層学習フレームワーク
１０１  ユーザアプリケーション
１０２  実行制御部
１０３  演算部
１０４  演算データ型判定部
１０５  学習データ読込部
１０６  演算データ型データベース
１０７  表現可能割合データベース
１２１  演算指示部
１２２  演算データ型要求部
１２３  データベース更新指示部
１２４  データ読込制御部
１４１  演算データ型決定部
１４２  データベース更新部
２００  学習データ記憶部
【図１】
2020135814.tif 000010
【図２】
2020135814.tif 000011
【図３】
2020135814.tif 000012
【図４】
2020135814.tif 000013
【図５】
2020135814.tif 000014
【図６】
2020135814.tif 000015
【図７】
2020135814.tif 000016
【図８】
2020135814.tif 000017
【図９】
2020135814.tif 000018
【図１０】
2020135814.tif 000019
【図１１】
2020135814.tif 000020
【図１２】
2020135814.tif 000021
【図１３】
2020135814.tif 000022
【図１４】
2020135814.tif 000023
【図１５】
2020135814.tif 000024
【図１６】
2020135814.tif 000025
【図１７】
2020135814.tif 000026