(57)【要約】【課題】深層学習等による演算を精度よく実行するとともに回路規模と消費電力を削減できるようにする。【解決手段】演算処理装置は、浮動小数点数データに対する命令実行後の前記浮動小数点数データ中のビットの分布についての統計情報を取得する取得回路と、前記浮動小数点数データを固定小数点数データに変換する変換回路と、を備える。【選択図】図３３
2019148896.tif 000002
【特許請求の範囲】
【請求項１】
浮動小数点数データに対する命令実行後の前記浮動小数点数データ中のビットの分布についての統計情報を取得する取得回路と、
前記浮動小数点数データを固定小数点数データに変換する変換回路と、を備える演算処理装置。
【請求項２】
前記取得回路は、前記浮動小数点数データ中のビットの分布のうちの特定部分の取得を指定するための指定部を有し、前記指定部で指定された特定部分を抽出する請求項１に記載の演算処理装置。
【請求項３】
前記取得回路は、前記浮動小数点数データ中の指数部の数値で指定されるビット位置を取得し、前記ビット位置示すフラグビットを積算する請求項１または２に記載の演算処理装置。
【請求項４】
前記取得回路は、０、正負の無限大の値、正規化浮動小数点数で表現できない値、および数値以外の値の少なくとも１つを検出し、前記統計情報に含める請求項１から３のいずれか１項に記載の演算処理装置。
【請求項５】
メモリと、
前記メモリに結合する演算処理装置と、を備え、
前記演算処理装置は、
浮動小数点数データに対する命令実行後の前記浮動小数点数データ中のビットの分布についての統計情報を取得する取得回路と、
前記浮動小数点数データを固定小数点数データに変換する変換回路と、を有する情報処理装置。
【請求項６】
前記演算処理装置は、前記メモリに記憶された命令にしたがって、
前記統計情報を取得し、前記統計情報が所定の条件を充足するときに、前記変換回路に前記浮動小数点数データを固定小数点数データに変換させる請求項５に記載の情報処理装置。
【請求項７】
前記所定の条件は、前記浮動小数点データを固定小数点データで処理したときのオーバーフロー率が第１の条件を充足し、かつ、アンダーフロー率が第２の条件を充足するために要するビット範囲が第３の条件を充足することである請求項６に記載の情報処理装置。
【請求項８】
前記演算処理装置は、前記オーバーフロー率が前記第１の条件を充足するときのビット範囲の最上位ビット位置が所定の限界を超える場合、または前記アンダーフロー率が前記第２の条件を充足するときのビット範囲の最下位ビット位置が所定の限界を超える場合には、前記変換回路が前記浮動小数点数データを固定小数点数データに変換することを制限する請求項７に記載の情報処理装置。
【請求項９】
前記演算処理装置は、前記メモリに記憶された命令にしたがって、
前記統計情報を取得し、前記統計情報が所定の第４条件を充足するときに、前記変換回路に前記浮動小数点数データを第１のビット幅の固定小数点数データに変換させ、前記統計情報が前記所定の第４条件を充足しないときに、前記変換回路に前記浮動小数点数データを第２のビット幅の固定小数点数データに変換させる請求項５に記載の情報処理装置。
【請求項１０】
前記メモリには深層学習のための命令列が記憶され、
前記演算処理装置は、前記深層学習の開始時には、前記深層学習で処理するデータを浮
動小数点数で演算する請求項５から９のいずれか１項に記載の情報処理装置。
【請求項１１】
コンピュータが、
浮動小数点数データに対する命令実行後の前記浮動小数点数データ中のビットの分布についての統計情報を取得し、前記統計情報が所定の条件を充足するときに前記浮動小数点数データを固定小数点数データに変換する情報処理方法。
【請求項１２】
コンピュータに、
浮動小数点数データに対する命令実行後の前記浮動小数点数データ中のビットの分布についての統計情報を取得し、前記統計情報が所定の条件を充足するときに前記浮動小数点数データを固定小数点数データに変換することを実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、この演算処理装置を含む情報処理装置、情報処理方法、およびプログラムに関する。
【背景技術】
【０００２】
今日、人工知能を用いた機械学習のうち、特に深層学習（ＤＬ：Deep Learning）への
ニーズが高まっている。深層学習は、多層ニューラルネットワーク（ＤＮＮ：Deep Neural Network）を用いた機械学習の手法ということができる。図１は、ニューラルネットワ
ークの構成を例示する図である。ニューラルネットワークは、神経細胞（ニューロン）をコンピュータ上にモデル化したものである。神経細胞は、細胞体と、他の細胞体から入力される信号を受ける樹状突起と、他の細胞体に信号を出力する軸索とを有する。また、信号を出力する軸索の末端と信号を受ける樹状突起との間にはシナプスと呼ばれる信号の伝達構造が形成されている。ニューラルネットワークでは、神経細胞間でのシナプスを介した情報伝達がモデル化されている。
【０００３】
さらに、ニューラルネットワークが多層化された多層ニューラルネットワークでは、深層学習が実行される。そして、深層学習が実行される多層ニューラルネットワークの認識性能を高めるため、多層ニューラルネットワークが大規模化される傾向にある。例えば、多層ニューラルネットワークで処理されるパラメータ数は、数百万から１億数千万にも及ぶ。多層ニューラルネットワークが人の脳に近づくためには、究極的に、パラメータ数は１千数百億にも及ぶと考えられる。したがって、今後、深層学習における学習データは増加し、多層ニューラルネットワークにおける計算負荷、メモリ負荷が増大することが予想される。そのため、増え続ける学習データに対して、認識性能と学習効率の改善が望まれている。認識性能と学習効率を改善し、負荷を軽減するため、多層ニューラルネットワークが軽量化されることが望ましい。
【０００４】
ところで、深層学習においては、乗算、積和演算、ベクトル乗算を含む様々な演算が実行される。ただし、深層学習では、個々の演算精度への要求は、通常の演算処理ほど厳密ではない。例えば、通常の演算処理等では、プログラマは極力桁あふれを発生させないようにコンピュータプログラムを開発する。一方、深層学習では、大きな値がある程度飽和することは許容される。深層学習では、複数の入力データを畳み込み演算するときの係数（重み）の調整が主な処理となり、入力データのうち、極端なデータは重視されないことが多いからである。また、大量のデータを繰り返し用いて係数を調整するため、一度飽和された値も、学習の進行に合わせて桁調整を行なうことで、飽和されずに係数の調整に反映できるようになるためである。
そこで、このような深層学習の特性を考慮し、深層学習用の演算処理装置のチップ面積の削減、電力効率の向上等を図るため、浮動小数点数を用いないで、固定小数点数による演算を用いることが考えられる。浮動小数点数演算よりも固定小数点演算の方が回路構成を簡素にできるからである。
【０００５】
図２にデータ表現に用いるビットの構成を例示する。３２ビット浮動小数点数、１６ビット固定小数点数、８ビット固定小数点数のように、深層学習で処理するデータ（重みとパラメータ）のデータ表現に用いるビット幅を縮小することで、多層ニューラルネットワークで扱うデータ量を削減できる。扱うデータ量が削減されることで、深層学習の処理量が削減され、学習時間が短縮されることが期待できる。
【０００６】
しかしながら、固定小数点数は、取りうる値のダイナミックレンジが狭いので、浮動小
数点数より演算精度が劣化する場合がある。図３に、３２ビット浮動小数点数、１６ビット固定小数点数、８ビット固定小数点数による処理と、推論の精度の関係をモデル化して例示する。図では、「固定小数点数」が「整数」と記述されている。固定小数点数が整数に限定される訳ではない。固定小数点数は２進整数とも理解できるので、本明細書中では、固定小数点数を整数という場合がある。図のように、ビット幅を削減すると演算精度が低下することが予測される。演算精度が低下すると、深層学習がうまく実施できない場合もあり得る。すなわち、深層学習では、フォーワッド方向およびバックワード方向に積和演算が多数回繰り返され、演算結果が固定小数点数のダイナミックレンジを超えてしまうこともあるからである。そこで、演算精度を改善する技術により、ビット幅を削減することに起因する上記課題を克服することが望まれる。このため、固定小数点数を拡張した技術が提案されている。
【０００７】
例えば、Mixed Fixed Pointによる処理では、プログラム全体として統一した小数点位
置を使うのではなく、変数ごとに適した小数点位置（Ｑフォーマット）が用いられる。Ｑフォーマットとして、例えば、Ｑ３．１２フォーマットは、符号ビット１桁、整数部３桁、小数点以下１２桁の１６ビットデータを定義する。Mixed Fixed Pointでは、変数ごと
に、小数点位置、つまり、整数部の桁数と小数点以下の桁数が異なるものとして処理される。
【０００８】
他の例として、Dynamic Fixed Point (動的固定小数点数)による処理では、実行中に変数の値域が取得され、一定のタイミングで小数点位置が見直される。したがって、Mixed Fixed Point演算、およびDynamic Fixed Point演算は、浮動小数点演算よりも処理が簡単な固定小数点演算に、浮動小数点演算の側面を加えたものと言える。
【０００９】
さらに、Mixed Fixed Point演算、Dynamic Fixed Point演算による処理を実行するためのプログラム向けの機能を有するDigital Signal Processor（ＤＳＰ）も提案されている。例えば、ブロック・シフト指定付きの演算命令を実行するＤＳＰがある。ブロック・シフト指定付きの演算命令は、変数のビット幅より大きいビット幅で演算を実行し、演算結果から値をシフトして切り出して変数用のレジスタに格納する。この命令では、演算結果から値を切り出すときのシフト量 S (例えば、-128〜127)が即値/汎用レジスタで指定可
能である。例えば、ＤＳＰがResult = Saturate (((in1 (演算子) in2) >> S), 16)とい
う命令を実行すると、演算結果を S ビットシフトし、下位16bit を残し、上位ビットを
飽和処理する。S ≧0 の場合には、ＤＳＰは、演算結果を算術右シフトし、すなわち、符号ビットを埋め込んで右シフトし、下位ビットを削除する。一方、S < 0 の場合は、ＤＳＰは、演算結果を算術左シフト、すなわち、符号ビットを維持して左シフトし、補数での下位ビットを削除する。
【００１０】
ブロック・カウント・リーディング・サイン（ＢＣＬＳ）出力を実行するＤＳＰも提案されている。ＢＣＬＳ出力は、ＤＳＰが演算結果の count leading sign を取って、結果をレジスタに書き込む機能である。ここで、count leading signとは、正数最上位のビット１の位置（負数で最上位のビット０の位置）をいう。例えば、ＤＳＰが、max (block_count_leading_sign(in1 (演算子) in2) -1)を実行すると、変数in1 と変数in2の演算子による演算結果から、正数最上位のビット１の位置（負数で最上位のビット０の位置）がレジスタに記録される。
【００１１】
図４は、深層学習において、単精度浮動小数点数（Single Precision Floating Point
）、半精度浮動小数点数（Half Precision Floating Point）、固定小数点数（Fixed point）、Dynamic Fixed Point数を適用した場合の認識エラー率を例示する（非特許文献１
参照）。なお、図４で、第１行目のデータ（Goodfellow et al.(2013)）は、他の論文の
評価結果である。また、図４の表で、Propは、認識（フォーワッド方向）および学習（バ
ックワード方向）おけるデータ伝搬時のビット幅を示す。また、Up.は、重み係数アップ
デート時のビット幅を示す。さらに、ＰＩ  ＭＮＩＳＴ、ＭＮＩＳＴ、ＣＩＦＡＲ−１０、およびＳＶＨＮは、深層学習に用いられたデータセットを示す。
【００１２】
なお、非特許文献１によるDynamic Fixed Point数による処理では、演算または変数の
代入ごとに、オーバーフローの有無を記録し、オーバーフロー率（全演算回数に対するオーバーフローした演算の回数、全代入回数に対するオーバーフローした代入回数等）が算出される。そして、この処理では、所定の期間ごとに、各変数の小数点位置を以下の手順１、２で変更する。
（手順１）オーバーフロー率が規定値（ｒｍａｘ）より大きい場合、小数点位置を１つ下げる。
（手順２）オーバーフロー率の２倍の値が規定値（ｒｍａｘ）以下の場合、小数点位置を１つ上げる。
【００１３】
図４に例示されるように、従来技術による処理では、単精度浮動小数点数、半精度浮動小数点数、固定小数点数、およびDynamic Fixed Point数による結果においても、認識エ
ラー率は大きく増加していない。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開平６−９６０４８号公報
【特許文献２】特開平７−８４９７５号公報
【非特許文献】
【００１５】
【非特許文献１】Courbariaux et al.， "TRAINING DEEP NEURAL NETWORKS WITH LOW PRECISION MULTIPLICATIONS" Accepted as a workshop contribution at ICLR 2015, International Conference on Learning Representations(ICLR)，2015年9月23日
【発明の概要】
【発明が解決しようとする課題】
【００１６】
上述のように、従来技術のDynamic Fixed Point数による処理結果においても、認識エ
ラー率が大きく増加しない。しかしながら、上記従来の技術においては、オーバーフロー率を基に小数点位置を1ビットずつ調整するため学習結果の精度が劣化する。例えば、ｋ
個のデータの学習ごとに小数点位置を調整する場合、小数点位置が適正位置からn ビットずれている場合、小数点位置が適切な位置に調整されるまでに、(n * k)回の学習が進む
。その結果、小数点位置が適正な位置になるまでに、飽和するデータやアンダーフローするデータが増え、学習が収束しない、あるいは、学習結果の精度劣化につながるおそれがある。
１つの側面では本発明の目的は、深層学習等による演算を精度よく実行するとともに回路規模と消費電力を削減できるようにすることである。
【課題を解決するための手段】
【００１７】
開示の技術の一側面は、演算処理装置によって例示される。本演算処理装置は、浮動小数点数データに対する命令実行後の前記浮動小数点数データ中のビットの分布についての統計情報を取得する取得回路と、前記浮動小数点数データを固定小数点数データに変換する変換回路と、を備える。
【発明の効果】
【００１８】
本演算処理装置によれば、深層学習等による演算を精度よく実行するとともに回路規模と消費電力を削減できる。
【図面の簡単な説明】
【００１９】
【図１】ニューラルネットワークの構成を例示する図である。
【図２】データ表現に用いるビットの構成を例示する図である。
【図３】３２ビット浮動小数点数、１６ビット固定小数点数、８ビット固定小数点数による処理と、推論の精度の関係をモデル化して例示する図である。
【図４】深層学習における認識エラー率を例示する図である。
【図５】比較例に係る深層学習の手順を例示する図である。
【図６】各層の処理の詳細を例示する図である。
【図７】比較例の情報処理装置による学習処理のフローチャートを例示する図である。
【図８】非符号となる最上位ビット位置の分布データを例示する図である。
【図９】プロセッサの構成を例示する図である。
【図１０】プロセッサの回路ブロックを例示する図である。
【図１１】ベクトルユニットの詳細を例示する図である。
【図１２】スカラユニットの構成を例示する図である。
【図１３】非符号最上位ビット位置を検出する統計情報取得部の真理値表を例示する図である。
【図１４】非符号となる最上位ビット位置を取得する統計情報取得部のハードウェア回路の構成を例示する図である。
【図１５】非符号最下位ビット位置を検出する統計情報取得部の真理値表を例示する図である。
【図１６】非符号となる最下位ビット位置を取得する統計情報取得部のハードウェア回路の構成を例示する図である。
【図１７】統計情報集約部の処理を例示する図である。
【図１８】統計情報集約部のハードウェア回路の構成を例示する図である。
【図１９】統計情報集約部の処理を例示する図である。
【図２０】統計情報集約部のハードウェア回路の構成を例示する図である。
【図２１】統計情報集約部の具体的な構成例である。
【図２２】統計情報格納部のハードウェア回路の構成を例示する図である。
【図２３】統計情報格納部のハードウェア回路の構成を例示する図である。
【図２４】命令フォーマットを例示する図である。
【図２５】命令フォーマットを例示する図である。
【図２６】情報処理装置が深層学習を実行する場合の各層の処理の詳細を例示する図である。
【図２７】情報処理装置による学習処理のフローチャートを例示する図である。
【図２８】深層学習等の処理中の演算で用いられる変数に格納される数値の２進数での桁数の分布を例示する図である。
【図２９】深層学習等の処理中の演算で用いられる変数に格納される数値の２進数での桁数の分布を例示する図である。
【図３０】深層学習等の処理中の演算で用いられる変数に格納される数値の２進数での桁数の分布を例示する図である。
【図３１】学習回数に対する正答率の変化を描いた図である。
【図３２】浮動小数点数の変数値の分布を例示する図である。
【図３３】実施形態２の情報処理装置の構成を例示する図である。
【図３４】実施形態２の統計情報取得部の構成を例示する図である。
【図３５】浮動小数点数データ用の統計情報取得部の詳細構成を例示する図である。
【図３６】ＦＰ３２統計情報生成部の構成を例示する図である。
【図３７】アプリケーションプログラムの処理を例示する図である。
【図３８】演算時の型合わせの詳細を例示する図である。
【図３９】データ型更新処理の詳細を例示する図である。
【図４０】データ型更新処理の変形を例示する図である。
【図４１】固定小数点数から浮動小数点数に変換する処理を例示する図である。
【図４２】浮動小数点数から固定小数点数に変換する処理を例示する図である。
【図４３】8bit→16bit符号拡張命令（vext8to16）による処理例である。
【図４４】飽和演算命令（vsat8）による処理例である。
【図４５】ＬｅＮｅｔでの処理例である。
【図４６】正答率の比較結果の例である。
【図４７】学習回数に対するデータ型の変動の履歴である。
【図４８】学習回数に対するデータ型の変動の履歴である。
【図４９】学習回数に対するデータ型の変動の履歴である。
【図５０】学習回数に対するデータ型の変動の履歴である。
【図５１】基準値を決定する処理を例示する図である。
【図５２】浮動小数点数データの分布に偏りが存在する例である。
【図５３】固定小数点数データから浮動小数点数データへの変換を抑止する処理を例示する図である。
【図５４】情報処理装置の変形を例示する図である。
【発明を実施するための形態】
【００２０】
以下、図面を参照して、一実施形態に係る情報処理装置について説明する。以下の実施形態の構成は例示であり、本情報処理装置は実施形態の構成には限定されない。
［比較例］
【００２１】
図５から図７を参照して、比較例に係る情報処理装置での深層学習について説明する。図５は、比較例に係る深層学習の手順を例示する図である。比較例の情報処理装置は、コンピュータプログラムにしたがって深層学習を実行する。比較例の情報処理装置は、Dynamic Fixed Point数の処理を実行可能なプロセッサを有している。
【００２２】
図５のように、比較例の深層学習は、１層目の畳み込み層(Conv_1)とプーリング層(Pool_1)、２層目の畳み込み層(Conv_2)とプーリング層(Pool_2)、全結合層１(fc1)、および
全結合層２(fc2)の処理により実行される。深層学習は、ミニバッチと呼ばれる処理の単
位に区切られて実行される。ここで、ミニバッチとは、学習の対象となる入力データの集合｛（Ｉｎｉ，Ｔｉ），ｉ＝１〜Ｎ｝をいう。また、ミニバッチは、このような個々の入力データの組（Ｎ個のデータ）で実行される学習の処理単位のことをいう。ここで、Ｉｎｉは、入力データ（ベクトル）、Ｔｉは正解データ（ベクトル）である。比較例の情報処理装置は、以下のように、深層学習中の所定数(ｋ回)のミニバッチごとに、各層の各変数の統計情報（例えば、各変数のオーバーフロー回数）を取得してコンピュータプログラム中の変数に蓄積し、深層学習に用いる変数の固定小数点位置を自動調整する。
【００２３】
比較例の情報処理装置は、例えば、浮動小数点数による試行(ミニバッチ1回など)や、
ユーザ指定により各変数の初期小数点位置を決定し、学習を開始する（Ｓ１）。そして、情報処理装置は、k回のミニバッチを学習中に、各層の各変数のオーバーフローの回数を
統計情報として保存する（Ｓ２）。このとき、情報処理装置は、学習を実行するプログラム中の各変数に対する演算、代入等がなされる毎に、オーバーフローの有無を判定し、回数を計数し、回数を保持するカウンタ変数に代入する。
【００２４】
ミニバッチを学習中に変数にオーバーフローが発生した場合は、変数に対する飽和処理を行ない、学習を続行する（Ｓ３）。ここで、飽和処理とは、正の数がオーバーフローした際には正の最大値に、負の数がオーバーフローした際は負の最小値にクリップする処理である。
【００２５】
そして、情報処理装置は、k組のデータに対するミニバッチ終了後（ｋ回の学習終了後
）、カウンタ変数に蓄積した統計情報から、例えば、オーバーフロー率を求め、オーバーフロー率を基に、固定小数点数の小数点位置を調整する（Ｓ４）。そして、情報処理装置は、Ｓ２の処理に戻り、学習を進める。
【００２６】
図６は、図５における各層の処理の詳細を例示する図である。図では、１層目の畳み込み層(Conv_1)、プーリング層(Pool_1)、および全結合層２(fc2)が例示されている。この
例では、１層目の畳み込み層(Conv_1)において、入力データini=(x0,...,xn)と、重み(Wij)との間で、畳み込み演算が実行され、z0,...,zj,...等が計算される。また、z0,...,zj,...等に対して、活性化関数が演算され、u0,...,uj,...等が計算される。情報処理装置
は、この１層目の畳み込み層(Conv_1)での変数z0,...,zj,...のオーバーフロー回数をカ
ウンタ変数Conv_1_zに蓄積する。また、情報処理装置は、この１層目の畳み込み層(Conv_1)での変数u0,...,uj,...等でのオーバーフロー回数をカウンタ変数Conv_1_uに蓄積する
。例えば、カウンタ変数Conv_1_uが配列の場合、カウンタ変数Conv_1_u（１）には、変数u0,...,uj,...のうち、オーバーフローした変数の個数が累積される。また、カウンタ変
数Conv_1_u（２）には、変数u0,...,uj,...のうち、２倍するとオーバーフローする変数
の個数が累積される。
【００２７】
１層目の畳み込み層(Conv_1)での演算結果は、１層目のプーリング層(Pool_1)から、さらに上位層へ伝播される。このとき、情報処理装置は、２層目以上の層でも同様の演算と、オーバーフロー回数の蓄積を実行する。情報処理装置は、以上のような演算を上位層においても実行して演算結果をさらに上位層へ伝播させる。そして、情報処理装置は、最終的には、全結合層２(fc2)において、得られた演算結果と、正解データTiとの差分値から
エラーδ0(7),...,δj(7),...を算出する。そして、情報処理装置は、エラーδ0(7),...,δj(7),...を基に、逆方向の伝播を実行する。その結果、情報処理装置は、下位の階層（例えば、結合層１(fc1)）の出力でのエラーδ0(6),...,δj(6),...δn(6)と重みの変数Wijの次回の重みへの差分値ΔWijを算出する。また、差分値ΔWijを用いて重みWijを更新する。このとき、情報処理装置は、エラーδ0(6),...,δj(6),...,δn(6)でのオーバーフロー回数をカウンタ変数fc2_δに蓄積する。また、情報処理装置は、差分値ΔWijでのオー
バーフロー回数をカウンタ変数fc2_ΔWに蓄積する。また、情報処理装置は、重みの変数Wijでのオーバーフロー回数をカウンタ変数fc2_Wに蓄積する。また、2倍するとオーバーフローする変数の個数もそれぞれ蓄積する。
【００２８】
そして、情報処理装置は、全結合層１(fc1)から１層目の畳み込み層(Conv_1)まで、エ
ラーを逆方法に伝播させながら、重みの差分を計算し、重みを更新する。情報処理装置は、以上のような順伝播と逆伝播をｋ組の入力データを用いて、ｋ回繰り返す。情報処理装置は、このようなｋ回のミニバッチによる学習終了後、各変数に対応するカウンタ変数のオーバーフロー回数を基に、各変数の固定小数点位置を更新する。
【００２９】
図７に、比較例の情報処理装置による学習処理のフローチャートを例示する。この処理では、情報処理装置は、初期小数点位置を決定する（Ｃ１）。そして、情報処理装置は、回数kを値０で初期化する。そして、情報処理装置は学習終了の条件が充足されたか否か
を判定する（Ｃ３）。学習が終了するのは、全結合層(fc2)でのエラーが基準値以下とな
るか、または、学習回数が規定の最大値に達した場合である。
【００３０】
学習終了の条件が充足されない場合、情報処理装置は、次のミニバッチを実行し、変数ｋをカウントアップする（Ｃ４）。そして、情報処理装置は、統計情報としてオーバーフロー回数を各カウンタ変数に蓄積する（Ｃ５）。すなわち、情報処理装置は、各層において、オーバーフローした変数の個数、２倍するとオーバーフローする変数の個数を累積す
る。
【００３１】
そして、情報処理装置は、回数ｋが更新間隔に達したか否かを判定する（Ｃ６）。回数ｋが更新間隔に達していない場合、情報処理装置は、Ｃ３の処理に戻る。一方、回数ｋが更新間隔に達した場合、情報処理装置は、変数のオーバーフロー回数にしたがって、小数点位置を更新する。例えば、情報処理装置は、非特許文献１と同様、オーバーフロー回数を演算の実行回数で除算したオーバーフロー率を求めればよい。そして、オーバーフロー率が規定値を超えた場合に、情報処理装置は、該当する変数の小数点位置を１つ下げ、整数部を１ビット拡張すればよい。また、オーバーフロー率の２倍の値が規定値以下の場合、情報処理装置は、小数点位置を１つ上げ、整数部を１ビット削減すればよい。そして、情報処理装置１は、Ｃ３の処理に戻る。
【００３２】
しかし、以上の処理は、各層の演算ごとにオーバーフロー回数を累積し、オーバーフロー率が既定値を越えた場合、および、オーバーフロー率の２倍の値が既定値未満となった場合に固定小数点位置を１ビットずらす処理である。この処理は、オーバーフロー回数あるいはオーバーフロー率に基づく固定小数点位置の更新処理である。情報処理装置は、オーバーフロー回数あるいはオーバーフロー率からは、適正な小数点位置がどこであるかを判断することが困難である。
【００３３】
したがって、比較例の処理は、固定小数点位置の更新時、小数点位置を１つ下げる、あるいは上げる等の処理で、適正な位置を試行し、その結果からさらに判断を重ねていくという手順となる。このため、情報処理装置が適正な小数点位置を決定するまでに、小数点位置が複数回更新されることになる。例えば、上記のように、情報処理装置がｋ回のミニバッチごとにオーバーフロー率を判定し、１ビットずつ小数点位置を更新する場合には、小数点位置をNビットずらすために、N*k回（*は乗算）分のミニバッチが実行される。こ
のため、小数点位置が不適切な状態で学習処理が繰り返される。つまり、学習中に、望ましくないレベルで固定小数点数データの飽和、あるいは、アンダーフローが発生し、学習結果の精度劣化につながり、収束が遅くなる恐れがある。
【００３４】
また、比較例の情報処理装置は、単にオーバーフロー回数を取得し、蓄積する処理を深層学習のプログラム中で実行するため、学習時間が増大する可能性がある。つまり、情報処理装置は、適正な小数点位置を決定するための情報をプログラムに提供する機能がないため、プログラムにオーバーフロー回数を累積するコードが組み込まれ、処理時間が増加する恐れがある。
［実施形態１］
【００３５】
以下、図８から図２５により、実施形態１に係る情報処理装置１、情報処理装置１が実行する情報処理方法、および情報処理装置１で実行されるプログラムについて説明する。本実施形態は、一例であり、情報処理装置１は、本実施形態の構成に限定される訳ではない。
【００３６】
＜統計情報＞
本実施形態では、情報処理装置１のプロセッサが統計情報を取得することで、統計情報取得のためのプログラム中のオーバーヘッドが削減される。ここで、プロセッサが取得する統計情報は、例えば、以下のいずれか、または、これらの組み合わせをいう。情報処理装置１が実行するアプリケーションプログラムは、プロセッサから統計情報を取得することで、小数点位置を最適化する。アプリケーションプログラムの処理にしたがってプロセッサは、Dynamic Fixed Point演算のための命令を実行する。
（１）非符号となる最上位ビット位置の分布
【００３７】
図８に、非符号となる最上位ビット位置の分布データを例示する。図８は演算の途中結果が40bitで、固定小数点数の桁あわせのために14bit右シフトされるデータに対する例である。非符号となる最上位ビット位置とは、正数に対しては、ビットが１となっている最上位のビット位置をいう。また、負数に対しては、ビット０となっている最上位のビット位置をいう。非符号となる最上位ビット位置は、例えば、ビットの並びを最上位ビットであるbit[39]から最下位ビットであるbit[0]としたとき、符号ビットbit[39]と異なるbit[k]のうち、インデックスkが最大のものをいう。非符号となる最上位ビット位置の分布が
得られると、絶対値としての値の分布範囲が把握可能となる。
【００３８】
図８で、縦軸は、非符号となる最上位ビット位置の出現個数であり、横軸は最上位のビットの位置 Count Leading Sign（ＣＬＳ）である。図８では、ビット０の右側に小数点
があると仮定する。本実施形態では、情報処理装置１のプロセッサの演算回路および演算回路内のレジスタは、命令のオペランドで指定されるレジスタのビット数（例えば、１６ビット）以上のビット幅（例えば、４０ビット）を有する。ただし、情報処理装置１のプロセッサの演算回路および演算回路内のレジスタのビット幅が４０ビットに限定される訳ではない。また、演算結果は、例えば、１６ビットのレジスタ等、演算回路よりも少ないビット幅のレジスタ（命令のオペランドで指定されるレジスタ）に格納される。その結果、演算結果は（例えば、４０ビット）、オペランドで指定されるシフト量でシフトし、ビット0未満に該当するビットは所定の丸め処理がなされ、オペランドで指定されるレジス
タのビット幅を越えるデータ（ビット１５を越えるデータ）は、飽和処理される。
【００３９】
また、図８の横軸に付与された数値は、固定小数点で表現可能な数値を示す。例えば、情報処理装置１がこの固定小数点数を−２ビットだけシフト（右方向に２ビットシフト）すると、最上位ビットが１４の位置にシフトし、飽和される領域が２ビット拡張され、アンダーフローが発生して0となる領域が２ビット減少する。すなわち、情報処理装置１が
小数点位置を２ビット左にシフトすると、飽和される領域が２ビット拡張され、アンダーフローが発生する領域が２ビット減少する。また、例えば、情報処理装置がこの固定小数点数を２ビットだけ正方向にシフト（左方向に２ビットシフト）すると、最上位ビットが１８の位置にシフトし、飽和される領域が２ビット減少し、アンダーフローが発生する領域が２ビット拡張される。すなわち、情報処理装置１が小数点位置を２ビット右にシフトすると、飽和される領域が２ビット減少し、アンダーフローが発生する領域が２ビット拡張される。
【００４０】
情報処理装置１は、学習実行中に、非符号となる最上位のビット位置の分布を得ることで、Dynamic Fixed Point演算における適正なシフト量、つまり、適切な固定小数点位置
を直ちに決定できる。例えば、情報処理装置１は、飽和されるデータが指定の割合以下になるように固定小数点位置を決定すればよい。つまり、一例としては、情報処理装置１は、データのアンダーフローが所定の程度となることよりもデータの飽和が所定の程度となること優先して、固定小数点位置を決定できる。
【００４１】
非符号となる最上位ビット位置の分布は、情報処理装置１のプロセッサ１０（図９参照）内の所定のレジスタ（統計情報レジスタともいう）内に積算される。プロセッサ１０は、当該統計情報レジスタからの分布データの読み出し、書き込み、統計情報レジスタのクリア等の命令を実行する。したがって、統計情報レジスタには、前回のクリア命令の実行から現在までに命令実行の対象となった１以上の固定小数点数についての分布データが蓄積される。蓄積された分布データは、読み出し命令によってメモリに読み出される。なお、プロセッサ１０は、クリア命令に代えて、統計情報レジスタへのロード命令の実行を可能とし、値０を統計情報レジスタにロードできるようにしてもよい。
（２）非符号となる最下位ビット位置の分布
【００４２】
非符号となる最下位ビット位置の分布とは、ビットが符号と異なる値となる最下位のビット位置をいう。例えば、ビットの並びを最上位ビットであるbit[39]から最下位ビット
であるbit[0]までの並びとしたとき、符号ビットbit[39]と異なるbit[k]のうち、インデ
ックスkが最小のものをいう。また、非符号となる最下位ビット位置の分布では、有効な
データが含まれる最下位ビットが把握される。
（３）非符号となる最上位ビット位置の最大値
【００４３】
非符号となる最上位ビット位置の最大値は、前回クリア命令が実行されたときから現在に至るまでに、命令実行の対象となった１以上の固定小数点数について符号ビットの値と異なる値となる最上位のビット位置のうちの最大値である。情報処理装置１は、非符号となる最上位のビット位置の最大値をDynamic Fixed Point演算における適正なシフト量、
つまり、適切な小数点位置の決定に利用できる。
【００４４】
プロセッサ１０は、上記統計情報レジスタからの上記最大値の読み出し、統計情報レジスタのクリア等の命令を実行する。したがって、統計情報レジスタには、前回のクリア命令の実行から現在までの最大値が蓄積され、読み出し命令によって最大値がメモリに読み出される。
（４）非符号となる最下位ビット位置の最小値
【００４５】
非符号となる最下位ビット位置の最小値は、前回クリア命令が実行されたときから現在に至るまでの１以上の固定小数点数について符号と異なる値となる最下位のビット位置のうちの最小値である。情報処理装置１は、非符号となる最下位ビット位置の最小値をDynamic Fixed Point演算における適正なシフト量、つまり、適切な小数点位置の決定に利用
できる。
【００４６】
プロセッサ１０は、統計情報レジスタからの上記最小値の読み出し、クリア等の命令を実行する。したがって、統計情報レジスタには、前回のクリア命令の実行から現在までの上記最小値が蓄積され、読み出し命令によってメモリに読み出される。
【００４７】
＜構成＞
図９に、情報処理装置１のプロセッサ１０の構成を例示する。図９では、プロセッサ１０とともに、命令用メモリ（ＩＲＡＭ）２１およびデータ用メモリ（ＤＲＡＭ）２２も例示されている。プロセッサ１０は、single instruction multiple data（ＳＩＭＤ）型の演算処理装置である。
【００４８】
プロセッサ１０は、プログラムカウンタ（ＰＣ）１１１およびデコーダ（Decoder）１
１２を含む制御ユニット１１、レジスタファイル１２、ベクトル演算用の演算器１３１、スカラ演算用の演算器（Arithmetic Logic Unit（ＡＬＵ））１４１、およびベクトル演
算用の演算器１３１の結果を加算するアキュムレータ１３２を有している。また、プロセッサ１０は、ベクトル演算用の演算器１３１、スカラ演算用の演算器１４１、アキュムレータ１３２等の演算結果、および、データ用メモリ２２からの読み出し結果を選択する複数のセレクタ１０１を有している。なお、図では、複数のセレクタを総称してセレクタ１０１と呼ぶ。また、複数のベクトル演算用の演算器を総称して演算器１３１と呼ぶ。
【００４９】
さらに、プロセッサ１０は、セレクタ１０１によって選択されたデータからの統計情報を取得する統計情報取得部１０２、統計情報取得部１０２によって取得された統計情報を格納する統計情報格納部１０５を有している。統計情報取得部１０２と統計情報格納部１０５は、固定小数点数データに対する命令実行後の固定小数点数データ中のビットの分布についての統計情報を取得する取得回路の一例である。なお、図では、複数の統計情報取得部を総称して統計情報取得部１０２と呼ぶ。
【００５０】
さらに、プロセッサ１０は、セレクタ１０１によって選択されたデータの固定小数点位置を変更するデータ変換部１０３を有している。また、図では、複数のデータ変換部を総称してデータ変換部１０３と呼ぶ。
【００５１】
図のように、プログラムカウンタ１１１の指す命令用メモリ２１のアドレスから、命令がフェッチされ、デコーダ１１２がフェッチされた命令をデコードする。なお、図では、命令のフェッチを実行する命令フェッチの制御部が省略されている。
【００５２】
デコーダ１１２が命令をデコードすると、デコード結果に応じて、プロセッサ１０の各部が制御される。例えば、デコードの結果がベクトル演算命令であった場合、レジスタファイル１２のベクタレジスタのデータがベクトル演算用の演算器１３１に入力され、ベクトル演算が実行される。ベクトル演算用の演算器１３１の演算結果は、セレクタ１０１を介して統計情報取得部１０２およびデータ変換部１０３に供給される。また、ベクトル演算用の演算器１３１の演算結果は、アキュムレータ１３２に入力され、ベクトル演算用の演算器１３１の演算結果が例えば、カスケードに加算される。アキュムレータ１３２の演算結果は、セレクタ１０１を介して、統計情報取得部１０２およびデータ変換部１０３に供給される。
【００５３】
また、例えば、デコードの結果、命令がスカラ演算命令であった場合には、レジスタファイル１２のスカラ・レジスタのデータがスカラ演算用の演算器１４１に入力される。演算器１４１の演算結果は、アキュムレータ１３２の演算結果と同様、セレクタ１０１を介して統計情報取得部１０２およびデータ変換部１０３に供給される。
【００５４】
さらに、例えば、デコードの結果、命令がロード命令であった場合には、データ用メモリ２２からデータが読み出され、セレクタ１０１を介して、統計情報取得部１０２およびデータ変換部１０３に供給される。データ変換部１０３でデータ変換された結果は、レジスタファイル１２のレジスタに格納される。
【００５５】
また、デコードの結果、命令がDynamic Fixed Point演算を実行する命令であった場合
、デコーダ１１２は、シフト量がデータ変換部１０３に供給されるように指示する。シフト量は、例えば、命令のオペランド（即値）、オペランドで指定されたレジスタ、オペランドで指定されたアドレス・レジスタの示すアドレスのデータ用メモリ２２等から取得され、データ変換部１０３に供給される。図９の処理は、デコーダが命令から、固定小数点数データの小数点位置の指定（シフト量）を取得することの一例である。
【００５６】
データ変換部１０３は、ベクトル演算の結果、スカラ演算の結果、アキュムレータ１３２の演算結果、あるいは、データ用メモリ２２からの読み出し結果等で得られる固定小数点数データを、指定されたシフト量Sだけシフトする。また、データ変換部１０３は、シ
フトとともに、上位ビットの飽和処理および下位ビットの丸めを実行する。データ変換部１０３は、例えば入力を４０ビットの演算結果とし、下位Sビットを小数部として丸めを
行な丸め処理部と、算術シフトを実行するシフタと飽和処理を行なう飽和処理部を有する。
【００５７】
丸め処理部は、下位S bitを小数部として丸めを行なう。Sが負の場合には、丸め処理部は、何も行なわない。丸めとしては、最近接丸め、0への丸め、正の無限大への丸め、負
の無限大への丸め、乱数丸めなどが例示される。データ変換部１０３が固定小数点数データをシフトするときのシフト量は、例えば、図９に例示されるように、デコーダが命令から取得するシフト量である。
【００５８】
シフト部は、Sが正の場合はS bit算術右シフト、Sが負の場合は、算術左シフト、すな
わち、-S bit算術左シフトを行なう。飽和部は、シフト結果が 2E15-1（正の最大値）以
上の場合は 2E15、-2E15（負の最小値）以下の場合は -2E15、それ以外は入力の下位16bitを出力する。ここで、2E15は、２の１５乗を表す。
【００５９】
そして、データ変換部１０３は、左シフト時上位ビットの符号を維持し、符号ビット以外を飽和処理、すなわち、上位ビット廃棄し、下位ビットに０を埋め込む。また、データ変換部１０３は、右シフト時、上位ビット（符号ビットより下位のビット）に符号ビットを埋め込む。そして、データ変換部１０３は、上記のように丸め、シフト、飽和処理によって得られるデータを、レジスタファイル１２のレジスタ等と同一のビット幅（例えば、１６ビットのレジスタ）で出力する。データ変換部は固定小数点数データの小数点位置を更新する更新回路の一例である。
【００６０】
したがって、プロセッサ１０で実行されるコンピュータプログラムがDynamic Fixed Point演算を実行する命令のオペランドにシフト量を指定することで、プロセッサ１０は、
プログラム実行中に、固定小数点数の小数点位置を指定されたシフト量だけ更新する。
【００６１】
また、デコードの結果、命令が統計情報取得を指示する命令（統計情報取得機能付き命令という）である場合、統計情報取得部１０２において、統計情報が取得され統計情報格納部１０５に格納される。ここで、統計情報は、上記で述べたように、（１）非符号となる最上位ビット位置の分布、（２）非符号となる最下位ビット位置の分布、（３）非符号となる最上位ビット位置の最大値、（４）非符号となる最下位ビット位置の最小値、またはこれらの組み合わせである。
【００６２】
図１０に、図９のプロセッサ１０の回路ブロックを例示する。プロセッサ１０は、制御ユニット１１、レジスタファイル１２、ベクトルユニット１３、スカラユニット１４を含む。制御ユニット１１は、プログラムカウンタ１１１とデコーダ１１２を含む。レジスタファイルは、ベクトルレジスタファイル、ベクトル演算用アキュムレータレジスタ（Vector ACC）、スカラレジスタファイル、スカラ演算用アキュムレータレジスタ（ACC）を含
む。ベクトルユニット１３は、ベクトル演算用の演算器１３１、統計情報取得部１０２、データ変換部１０３を含む。スカラユニット１４は、スカラ演算用の演算器１４１、統計情報取得部１０２、データ変換部１０３を含む。
【００６３】
また、図１０の構成例では、複数の統計情報取得部１０２からの統計情報を集約する統計情報集約部１０４が追加されている。また、統計情報格納部１０５はレジスタファイル１２の一部となっている。また、命令用メモリ２１は、メモリインターフェース（Memory
I/F）を介して制御ユニット１１に接続される。また、データ用メモリ２２は、メモリインターフェース（Memory I/F）を介してベクトルユニット１３およびスカラユニット１４に接続される。
【００６４】
図１１にベクトルユニット１３の詳細を例示する。図では、統計情報集約部１０４も例示されている。ベクトルユニット１３は、ベクトル・レジスタVector Reg0、Vector Reg1のデータをベクトル演算用の演算器１３１−１で演算する。ベクトル演算用の演算器１３１−１の演算結果は、積和演算用のアキュムレータ１３２と、ベクトル演算用の演算器１３１−２に入力される。
【００６５】
積和演算用のアキュムレータ１３２は、ベクトル演算用の演算器１３１−１の演算結果をスカラ加算し、スカラ演算用アキュムレータレジスタ（ACC）に格納する。ベクトル演
算用の演算器１３１−２は、命令によって指定される演算モードに従って、ベクトル演算用の演算器１３１−１の演算結果、あるいは、ベクトル演算用アキュムレータレジスタ（
Vector ACC）のデータ、あるいは、それらを加算した結果を出力する。
【００６６】
セレクタ１０１は、ベクトル演算用の演算器１３１−２の出力結果と、データ用メモリ２２からの読み出し結果（Read Data 0,…, Read Data 0）のいずれかを選択し、統計情
報取得部１０２およびデータ変換部１０３に入力する。統計情報取得部１０２で取得された統計情報は、統計情報集約部１０４に入力される。また、データ変換部１０３でデータ変換されたデータは、図示しないセレクタを介して、データ用メモリ２２（Write Data0,…, Write Data n）にストアされるか、ベクトルレジスタ（Vector Reg2）に保持される
。
【００６７】
図１２にスカラユニット１４の構成を例示する。スカラユニット１４は、即値（Immediate）オペランドで得られるデータとスカラ・レジスタScalar Reg1からのデータの一方を選択するセレクタ１４２と、セレクタ１４２の選択結果とスカラ・レジスタScalar Reg0
のデータを演算するスカラ用の演算器１４１を有する。スカラ用の演算器１４１の演算結果は、メモリインターフェース（Memory I/F）を介してデータ用メモリ２２のアドレス（例えば、Addr）にストアされる。また、スカラ用の演算器１４１の演算結果は、セレクタ１０１を介して、統計情報取得部１０２およびデータ変換部１０３に入力される。
【００６８】
セレクタ１０１は、スカラ用の演算器１４１の演算結果、スカラ・レジスタScalar Reg2のデータ、スカラ演算用アキュムレータレジスタ（ACC）のデータ、およびメモリインターフェース（Memory I/F）を介して読み出されたデータ（Read Data）の１つを選択する
。セレクタ１０１は、選択したデータを、統計情報取得部１０２およびデータ変換部１０３に入力する。統計情報取得部１０２は、セレクタ１０１から入力されたデータから統計情報を取得し、統計情報集約部１０４に入力する。
【００６９】
以下、統計情報取得部１０２のうち、非符号となる最上位ビット位置を取得するものを統計情報取得部１０２Ａと呼ぶことにする。また、統計情報取得部１０２のうち、非符号となる最下位ビット位置を取得するものを統計情報取得部１０２Ｂと呼ぶことにする。また、統計情報集約部１０４のうち、統計情報取得部１０２によって取得されてビット位置を計数してビット位置に対するビットの分布を取得するものを統計情報集約部１０４Ａと呼ぶことにする。また、統計情報集約部１０４のうち、ビット位置の最大値と最小値を取得するための前段階として統計情報取得部１０２によって取得されてビット位置を論理和演算するものを統計情報集約部１０４Ｂと呼ぶことにする。
【００７０】
図１３に非符号最上位ビット位置を検出する統計情報取得部１０２Ａの真理値表を例示する。図１３のように、統計情報取得部１０２Ａは、正数に対しては、ビットin[38]から下位ビット方向にビットをサーチして、最初に１になったビット位置を１に他のビット０に設定した２進数のビットパターンを出力する。また、統計情報取得部１０２Ａは、負数に対しては、in[38]から下位ビット方向にビットをサーチして、最初に０になったビット位置を１に他のビット０に設定した２進数のビットパターンを出力する。また、入力データが全ビット0、または、全ビット1の場合は、統計情報取得部１０２Ａは、39bit目に1を、38bit以下に0を出力する。
【００７１】
図１４に、非符号となる最上位ビット位置を取得する統計情報取得部１０２Ａのハードウェア回路の構成を例示する。この回路では、符号ビットin[39]と他のビット（in[38]からin[0]）との排他論理和（EXOR）が実行される。そうすると、符号ビットin[39]と同じ
値を有するビットによる排他論理和値は０となり、符号ビットin[39]と異なる値を有するビットによる排他論理和値は１となる。
【００７２】
今、仮にin[38]がin[39]と異なる値であった場合、排他論理和によって出力データのou
t[38]は１となる。一方、出力データのout[37]には、in[39]とin[37]の排他論理和値がANDゲートを介して入力される。このANDゲートの一方の入力には、in[39]とin[38]の排他論理和値を反転したビット値が入力されるため、in[39]とin[38]とが不一致の場合、in[39]とin[37]の排他論理和値によらず、ANDゲートの出力は０となる。
【００７３】
以下、同様に、out[i](iは37以下)が出力されるANDゲートの論理否定付き入力は、in[39]とin[j](jはi+1以上、38以下)の排他的論理和が全て0の場合に0となり、in[39]とin[i](iは３７以下)の排他論理和値が１になると、out[i]には１が設定される。そのビット位
置（i）より下位のビットでは、out[i]が出力されるANDゲートの論理否定付き入力が1と
なるため、out[i]には０が設定される。したがって、図１４の回路によって、非符号となる最上位ビット位置に１が設定され、他のビットが０に設定された出力データout(40bit)が取得される。図１３、図１４の非符号となる最上位ビット位置を取得する統計情報取得部１０２Ａは、命令実行後の固定小数点数データ中の符号ビットと一致しない最上位のビットの位置を取得する回路の一例である。また、非符号となる最上位ビット位置に１が設定され、他のビットが０に設定された出力データout(40bit)は、符号ビットと一致しない最上位のビットの位置を真値（１）で示すビット列の一例である。
【００７４】
図１５に非符号となる最下位ビット位置を検出する統計情報取得部１０２Ｂの真理値表を例示する。図１５のように、統計情報取得部１０２Ｂは、正数に対しては、in[0]から
上位ビット方向にビットをサーチして、最初に１になったビット位置を１に他のビット０に設定した２進数のビットパターンを出力する。また、統計情報取得部１０２Ｂは、負数に対しては、in[0]から上位ビット方向にビットをサーチして、最初に０になったビット
位置を１に他のビット０に設定した２進数のビットパターンを出力する。また、また、入力データが全ビット0、または、全ビット1の場合には、統計情報取得部１０２Ｂは、39bit目に1を、38bit以下に0を出力する。
【００７５】
図１６に、非符号となる最下位ビット位置を取得する統計情報取得部１０２Ｂのハードウェア回路の構成を例示する。符号ビットin[39]が０の場合には、統計情報取得部１０２Ｂは、最下位ビットin[0]から上位側に向かって、ビットが１であるビット位置を探索す
ればよい。一方、符号ビットin[39]が1の場合には、データは補数となっているので、統
計情報取得部１０２Ｂは、最下位ビットin[0]から上位側に向かって、ビットが０である
ビット位置を探索すればよい。
【００７６】
すなわち、この回路では、符号ビットin[39]と他のビット（in[0]からin[38]）との排
他論理和（EXOR）が実行される。そうすると、符号ビットin[39]と同じ値を有するビットによる排他論理和値は０となり、符号ビットin[39]と異なる値を有するビットによる排他論理和値は１となる。
【００７７】
今、仮にin[0]がin[39]と異なる値であった場合、排他論理和によって出力データのout[0]は１となる。一方、出力データのout[1]には、in[39]とin[1]の排他論理和値がANDゲ
ートを介して入力される。このANDゲートの一方の入力には、in[39]とin[0]の排他論理和値を反転したビット値が入力される。このため、in[39]とin[0]の排他論理和値が１の場
合、in[39]とin[1]の排他論理和値によらず、ANDゲートの出力は０となる。
【００７８】
以下、同様に、out[i](iは1以上)が出力されるANDゲートの論理否定付き入力は、in[39]とin[j](jは0以上、i-1以下)の排他的論理和が全て0の場合に0となり、in[39]とin[i](iは１以上)の排他論理和値が１になると、out[i]には１が設定される。また、そのビット
より上位の出力データout[i]には０が設定される。したがって、図１６の回路によって、非符号となる最下位ビット位置に１が設定され、他のビットが０の出力データout(40bit)が取得される。図１５、図１６の非符号となる最下位ビット位置を取得する統計情報取得
部１０２Ｂは、符号ビットと一致しない最下位のビットの位置を取得する回路の一例である。また、非符号となる最下位ビット位置に１が設定され、他のビットが０に設定された出力データout(40bit)は、符号ビットと一致しない最下位のビットの位置を真値（１）で示すビット列の一例である。
【００７９】
図１７は、統計情報取得部１０２が取得したデータからビットの分布を取得する統計情報集約部１０４Ａの処理を例示する図である。図では、４０ビットのデータが８個並列に処理されるＳＩＭＤデータからビットの分布を取得する処理が例示される。図１７では、ハードウェア回路である統計情報集約部１０４Ａの処理が、擬似コードで記述されている。
【００８０】
すなわち、入力データは、８（行）×４０（ビット）の配列データで例示されている。また、各行の４０ビットの入力データは、非符号となる最上位ビット位置（図１４の統計情報取得部１０２Ａの出力）または非符号となる最下位ビット位置（図１６の統計情報取得部１０２Ｂの出力）である。この処理では、４０ビットの出力データoutについて、ま
ず、全ビットがクリアされる。次に、入力データの配列in[j][i]の各列ｉの要素の値が、すべての行（ｊ＝０から７）に対して加算される。したがって、図１３、図１５とは異なり、図１７の擬似コードでは、出力データ（配列要素）out[j]は、log2(SIMDデータ数)ビット(図１７の例では３ビット)の整数である。なお、図１７では、ＳＩＭＤデータ数（並列処理されるデータ数）は８であると想定したが、ＳＩＭＤデータ数が８に限定される訳ではない。
【００８１】
図１８に、統計情報取得部１０２が取得したデータからビットの分布を取得する統計情報集約部１０４Ａのハードウェア回路の構成を例示する。統計情報取得部１０２が取得したデータ（ここでは、統計取得０から統計取得（ＳＩＭＤデータ数−１））がbit population count演算によって、8個の統計情報のiビット目(i=0から39)における1の個数がそれぞれカウントされる。入力データは、統計情報取得部１０２Ａ（図１３、図１４）によって取得された非符号となる最上位ビット位置である。したがって、統計情報集約部１０４Ａは、統計情報取得部１０２Ａによって取得された非符号となるSIMDデータ個数分の最上位ビット位置に対して、各ビットの’1’の発生回数をカウントすることで最上位ビット
位置の発生回数を計数する。統計情報集約部１０４Ａは、計数結果を出力データout0からout39にそれぞれ格納する。
【００８２】
また、入力データは、統計情報取得部１０２Ｂ（図１５、図１６）による非符号となる最下位ビット位置とすることもできる。統計情報集約部１０４Ａは、統計情報取得部１０２Ｂによって取得されたSIMDデータ個数分の非符号となる最下位ビット位置に対して、各ビットの’1’の発生回数をカウントすることで最下位ビット位置の発生回数を計数する
。統計情報集約部１０４Ａは、計数結果を出力データout0からout39にそれぞれ格納する
。すなわち、統計情報集約部１０４Ａは、非符号となる最上位ビット位置または非符号となる最下位ビット位置のいずれをも処理可能である。
【００８３】
また、図１８でセレクタ（ＳＥＬ）は、bit population count演算器（Σ）と、スカラユニット１４から取得されるデータを選択する。セレクタ（ＳＥＬ）に選択されたデータが、出力データout0からout39に出力される。したがって、統計情報取得部１０２がスカ
ラユニット１４で取得したデータは、一回のスカラユニット１４の演算においては、加算されることなくそのまま出力データout0からout39に出力される。out0からout39は、統計情報格納部１０５に引き渡すデータである。図１７、図１８の統計情報集約部１０４Ａは符号ビットと一致しない最上位のビットの位置を複数の固定小数点数データに対して累積して計数する回路の一例である。図１７、図１８の統計情報集約部１０４Ａは符号ビットと一致しない最下位のビットの位置を複数の固定小数点数データに対して累積して計数す
る回路の一例でもある。
【００８４】
図１９は、統計情報取得部１０２が取得したデータからビット位置の最大値と最小値を取得する前提として、論理和演算によってビット位置を集約する統計情報集約部１０４Ｂの処理を例示する図である。図１９においても、図１７と同様、４０ビットのデータが８個並列に処理されるＳＩＭＤデータを処理が例示される。図１９では、ハードウェア回路である統計情報集約部１０４Ｂの処理が、擬似コードで記述されている。
【００８５】
この処理では、４０ビットの出力データout[i](i=0,…,39)には、入力データの配列in[j][i]の各列をすべての行（j=0,…,7）について論理和演算（ＯＲ演算）した結果が入力
される。したがって、図１９の擬似コードでは、図１７とは異なり、出力データ（配列要素）out[i](i=0,…,39)はビット列である。以上の処理の結果、出力データout[i](i=0,…,39)では、out[38]から下位ビット方向に向かって最初に１となるビット位置が最大ビッ
ト位置である。また、out[0]から上位ビット方向に向かって最初に１となるビット位置が最小ビット位置である。
【００８６】
図２０に、統計情報取得部１０２が取得したデータからビット位置の最大値と最小値を取得する前提として、論理和演算によってビット位置を集約する統計情報集約部１０４Ｂのハードウェア回路の構成を例示する。統計情報取得部１０２が取得したデータ（ここでは、統計取得０から統計取得ＳＩＭＤデータ数−１）がＯＲゲート（４０ビット）によってＯＲ演算される。また、図２０でセレクタ（ＳＥＬ）は、論理和演算（ＯＲ）と、スカラユニット１４から取得されるデータを選択する。セレクタ（ＳＥＬ）されたデータが、出力データoutに出力される。したがって、統計情報取得部１０２がスカラユニット１４
で取得したデータは、一回の演算においては、論理和演算されることなくそのまま出力データoutに出力される。outは、統計情報格納部１０５に引き渡すデータである。
【００８７】
論理和演算によってビット位置を集約する統計情報集約部１０４Ｂは、符号ビットと一致しない最上位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積する回路の一例である。論理和演算によってビット位置を集約する統計情報集約部１０４Ｂは、符号ビットと一致しない最下位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積する回路の一例でもある。
【００８８】
図２１は、統計情報集約部１０４の具体的な構成例であり、統計情報の格納先がデコーダ１１２からのインデックスで指定される回路の構成例である。図では、例えば、sr[j][i](j=0,…,k, i=0,…,39)の領域が確保され、indexによって、レジスタファイルの行jが
指定される。
【００８９】
プロセッサ１０は、書き込み命令によってセレクタSELを介して、indexによって指定されるレジスタファイルの行jの1つあるいは複数のレジスタに初期値を書き込む。ただし、プロセッサ１０はデコーダ１１２からの制御信号により、indexによって指定されるレジ
スタファイルの行jをリセットしても良い。そして、プロセッサ１０は、in39からin0の統計情報を加算器で蓄積し、indexによって指定されるレジスタファイルの行jに格納する。また、プロセッサ１０は、デコーダ１１２からの制御信号により、indexによって指定さ
れるレジスタファイルの行jから統計情報を読み出す。また、プロセッサ１０は、indexによって指定されるレジスタファイルの行jのいずれかの1つあるいは複数の値を読み出し、読み出し命令で指定されたデータ用メモリに保存する、あるいは、読み出し命令で指定された汎用レジスタに格納する。
【００９０】
図２２は、図１９、図２０で例示した統計情報集約部１０４Ｂによって論理和演算され
たビット位置の統計情報を蓄積するとともに蓄積された統計情報のビット位置の最大値を読み出す統計情報格納部１０５Ｃのハードウェア回路の構成を例示する図である。統計情報格納部１０５Ｃは、統計情報集約部１０４Ｂによって論理和演算されたビット位置の統計情報を蓄積するレジスタ（sr）を有している。プロセッサ１０は、書き込み命令（write）によってセレクタ（ＳＥＬ）を介してレジスタ（sr）に初期値を書き込み可能である
。ただし、プロセッサ１０は、リセット信号によってレジスタ（sr）をリセットできるようにしてもよい。
【００９１】
また、統計情報格納部１０５Ｃは、統計情報集約部１０４Ｂの論理和演算結果（in）と、すでにレジスタ（sr）に蓄積された統計情報の論理和演算を実行し、セレクタ（ＳＥＬ）を介してレジスタ（sr）に論理和演算の結果を蓄積する。
【００９２】
また、プロセッサ１０は、読み出し命令によってレジスタ（sr）の値を読み出し、読み出し命令で指定されたデータ用メモリあるいは読み出し命令で指定された汎用レジスタに保存する。また、統計情報格納部１０５Ｃは、Priority Encoder(MSB優先)を有してもよ
い。Priority Encoder(MSB優先)は、レジスタ（sr）に蓄積されたビット列中の最上位の
ビット１の位置（−１から３８）を２進数で出力する。例えば、入力データinとして全ビット０が入力されると、Priority Encoder(MSB優先)は、”111111”（−１）を出力する
。また、入力データinとしてin0=1、他のビットがすべて０のデータが入力されると、Priority Encoder(MSB優先)は、”000000”（０）を出力する。また、入力データinとしてin0=x（0または1）、in1=1、他のビットがすべて０のデータが入力されると、Priority Encoder(MSB優先)は、”000001”（１）を出力する。同様に、入力データinとしてin0〜in37がx（0または1）、in38=1のデータが入力されると、Priority Encoder(MSB優先)は、”100110”（３８）を出力する。プロセッサ１０は、Priority Encoder(MSB優先)を介して、
統計情報集約部１０４Ｂによって論理和演算されたビット位置の統計情報からビット位置の最大値を２進数値で取得できる。図１９、図２０の論理和演算によってビット位置を集約する統計情報集約部１０４Ｂ（図１９、図２０）と統計情報格納部１０５Ｃの組み合わせは、符号ビットと一致しない最上位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積し、累積したビット列中の最上位の真値の位置を取得する回路の一例である。
【００９３】
図２３は、図１９、図２０で例示した統計情報集約部１０４Ｂによって論理和演算されたビット位置の統計情報を蓄積するとともに蓄積された統計情報のビット位置の最小値を読み出す統計情報格納部１０５Ｄのハードウェア回路の構成を例示する図である。統計情報格納部１０５Ｄは、統計情報格納部１０５ＣのPriority Encoder(MSB優先)に代えてPriority Encoder(LSB優先)を有している。Priority Encoder(LSB優先)以外の統計情報格納
部１０５Ｄの構成は、統計情報格納部１０５Ｃと同様であるから説明を省略する。
【００９４】
Priority Encoder(MSB優先)は、レジスタ（sr）に蓄積されたビット列中の最下位のビ
ット１の位置（−１から３８）を２進数で出力する。例えば、入力データinとして全ビット０が入力されると、Priority Encoder(LSB優先)は、”111111”（−１）を出力する。
また、入力データinとしてin0=1、他のビットがx（0または1）のデータが入力されると、Priority Encoder(LSB優先)は、”000000”（０）を出力する。また、入力データinとし
てin0=0、in1=1、他のビット（in2からin38）がx（0または1）のデータが入力されると、Priority Encoder(LSB優先)は、”000001”（１）を出力する。同様に、入力データinと
してin0〜in37が0、in38=1のデータが入力されると、Priority Encoder(LSB優先)は、”100110”（３８）を出力する。プロセッサ１０は、Priority Encoder(LSB優先)を介して、統計情報集約部１０４Ｂによって論理和演算されたビット位置の統計情報からビット位置の最小値を２進数値で取得できる。論理和演算によってビット位置を集約する統計情報集約部１０４Ｂ（図１９、図２０）と統計情報格納部１０５Ｄ（図２３）の組み合わせは、
符号ビットと一致しない最下位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積し、累積したビット列中の最下位の真値の位置を取得する回路の一例である。
【００９５】
図２４に実施形態１における統計情報取得を指示する命令の命令フォーマットを例示する。図２４のように、既存の命令フォーマットを拡張し、統計情報を取得するか否かを指定するビットを追加するようにしてもよい。図２４の例にしたがって、例えば、全命令について統計情報取得機能を追加してもよい。図のように、ＦＬＧ＝１は、統計情報の取得を指定する。一方、ＦＬＧ＝０は、統計情報の取得を指定せず、従来と同じ命令を示す。
【００９６】
図２５に命令フォーマットの変形を例示する。図２５のように、命令フォーマットを拡張し、統計情報を格納するレジスタ・インデックスを指定するようにしてもよい。図でIDXは、レジスタ・インデックス（図２１等のindex）を示す。ただし、IDXがレジスタ・イ
ンデックスで指定可能な値以外の値の場合には、プロセッサ１０は統計情報を取得しない。図２５の命令フォーマットをデコードし、レジスタ・インデックスIDXを取得する図９
のデコーダ１１２は、統計情報の格納先の指定を取得するデコーダの一例である。
【００９７】
情報処理装置１が以上のような統計情報取得機能付き命令を実行するため、統計情報取得機能付き命令を専用サブルーチンで実行するようにすればよい。コンパイラは、専用サブルーチンをコンパイルするときに、統計情報取得機能付き命令を実行形式に組み込めばよい。また、専用サブルーチンは、アセンブリ言語で作成され、統計上取得機能付き命令の実行が指定されるようにしてもよい。情報処理装置１が深層学習を実行するためのコンピュータプログラムにおいて、以上のような専用サブルーチンが呼び出されるようにすればよい。
【００９８】
＜実行手順＞
図２６に、本実施形態の情報処理装置１が深層学習を実行する場合の各層の処理の詳細を例示する。図２６の処理を実行する情報処理装置１は１以上の層での演算により深層学習を実行する情報処理装置の一例である。図では、１層目の畳み込み層(Conv_1)、プーリング層(Pool_1)、および全結合層２(fc2)が例示されている。この例でも、比較例の図６
と同様、１層目の畳み込み層(Conv_1)において、入力データini=(x0,...,xn)と、重み(Wij)との間で、畳み込み演算が実行され、ｚ０，．．．，ｚｊ，．．．等が計算される。また、z0,...,zj,...等に対して、活性化関数が演算され、u0,...,uj,...等が計算される。情報処理装置１は、この１層目の畳み込み層(Conv_1)での変数z0,...,zj,...等での統計
情報を内部の統計情報レジスタまたはレジスタ・インデックスで指定される統計情報レジスタファイルに蓄積する。なお、統計情報レジスタあるいはレジスタファイルが不足する場合は、各層の演算終了後に統計情報をメモリに退避し、次回の演算開始前に統計情報を復帰させる。また、情報処理装置１は、同様に、この１層目の畳み込み層(Conv_1)での変数u0,...,uj,...等での統計情報を内部のレジスタまたはレジスタ・インデックスで指定
される統計情報レジスタファイルに蓄積する。本実施形態の統計情報は、比較例のようなオーバーフロー回数とは異なり、上記で説明した（１）非符号となる最上位ビット位置の分布、（２）非符号となる最下位ビット位置の分布、（３）非符号となる最上位ビット位置の最大値、（４）非符号となる最下位ビット位置の最小値、または、これらのいずれか２以上の組み合わせである。
【００９９】
１層目の畳み込み層(Conv_1)での演算結果は、１層目のプーリング層(Pool_1)から、さらに上位層へ伝播される。このとき、情報処理装置１は、２層目以上の層でも同様の演算と、統計情報の蓄積を実行する。そして、情報処理装置１は、全結合層２(fc2)において
、得られた演算結果と、正解データTiとの差分値からエラーの変数δ０（７），．．．，δｊ（７），．．．を算出する。そして、情報処理装置１は、エラーの変数δ０（７），
．．．，δｊ（７），．．．を基に、逆方向の伝播処理を実行する。すなわち、情報処理装置１は、下位の階層（例えば、結合層１(fc1)）の出力でのエラーの変数δ０（６），
．．．，δｊ（６），．．．δｎ（６）と重みの変数Wijの次の重みへの差分値ΔWijを算出する。このとき、情報処理装置１は、エラー変数δ０（７），．．．，δｊ（７），．．．およびエラーの変数δ０（６），．．．，δｊ（６），．．．，δｎ（６）での統計情報を１層目の畳み込み層(Conv_1)と同様に蓄積する。また、情報処理装置１は、差分値ΔWijでの統計情報も蓄積する。また、情報処理装置１は、重みの変数Wijでの統計情報を蓄積する。
【０１００】
そして、情報処理装置１は、全結合層１(fc1)から１層目の畳み込み層(Conv_1)まで、
エラーを逆方法に伝播させながら、重みの差分を計算する。情報処理装置１は、以上のような順伝播と逆伝播をｋ組の入力データを用いて、ｋ回繰り返す。情報処理装置１は、このようなｋ回のミニバッチ終了後、各変数の統計情報を基に、各変数の固定小数点位置を更新する。
【０１０１】
図２７に、本実施形態の情報処理装置１による学習処理のフローチャートを例示する。この処理では、情報処理装置１は、初期小数点位置を決定する（ＷＥ１）。情報処理装置１は、過去の実験値、実績値、あるいは、ユーザ指定により各変数の初期小数点位置を決定すればよい。
【０１０２】
そして、情報処理装置１は、回数kを0に初期化する。また、情報処理装置１は、プログラム内の統計情報を格納する変数を初期化する（ＷＥ２）。そして、情報処理装置１は学習終了の条件が充足されたか否かを判定する（ＷＥ３）。学習が終了するのは、全結合層(fc2)でのエラーが基準値以下となるか、または、学習回数が規定の最大値に達した場合
である。
【０１０３】
学習終了の条件が充足されない場合、情報処理装置１は、次のミニバッチを実行する。このとき、情報処理装置１は、各レイヤの各変数の統計情報を統計情報レジスタあるいは統計情報レジスタファイルに累積する。統計情報を累積は、上記で説明したように、プロセッサ１０のハードウェアで実行される。そして、情報処理装置１は、変数ｋをカウントアップする（ＷＥ４）。
【０１０４】
そして、情報処理装置１は、回数ｋが更新間隔に達したか否かを判定する（ＷＥ５）。回数ｋが更新間隔に達していない場合、情報処理装置１は、ＷＥ３の処理に戻る。一方、回数ｋが更新間隔に達した場合、情報処理装置１は、各種の統計情報が蓄積された統計情報を統計情報レジスタあるいは統計情報レジスタファイルあるいは統計情報をメモリに退避した領域から統計情報を読み出す。そして、情報処理装置１は、読み出された統計情報を基に各レイヤの各変数の小数点位置を更新する（ＷＥ６）。
【０１０５】
このとき、情報処理装置１は、例えば、飽和するデータとアンダーフローするデータの全体のデータ数に対する比率が目標条件を充足するように、小数点位置を決定すればよい。また、情報処理装置１は、飽和するデータの全体のデータに対する比率とアンダーフローするデータの全体のデータに対する比率の両方が目標条件を充足することが困難である場合、一方を優先してもよい。また、情報処理装置１は、飽和が発生しない上限のビット位置と、有効なデータが存在する下限のビット位置の平均を、固定小数点数で表現可能な範囲の中央を位置づけて、小数点位置を設定してもよい。さらに、情報処理装置１は、回数kを0に初期化し、さらに統計情報を格納するレジスタをリセットする。そして、情報処理装置１は、ＷＥ３の処理に戻る。
【０１０６】
ＷＥ４で各レイヤの各変数の統計情報を累積することと、ＷＥ６で各種の統計情報が蓄
積されたレジスタあるいはレジスタファイルから統計情報を読み出すことは、１以上の層の少なくとも１つの層において前記演算の命令を含む命令実行時の固定小数点数データ中のビットの分布についての統計情報を取得することの一例である。また、ＷＥ６で、読み出された統計情報を基に各レイヤの各変数の小数点位置を更新することは、ビットの分布についての統計情報に基づいて固定小数点数データの小数点位置を更新することの一例である。
【０１０７】
＜実施形態１の効果＞
情報処理装置１は、深層学習のミニバッチ実行時、各レイヤの各変数の統計情報をレジスタあるいはレジスタファイルに累積する。そして、情報処理装置１は、蓄積された統計情報を基に各レイヤの各変数の小数点位置を更新することができる。すなわち、プロセッサ１０が、ビット分布の統計上情報を取得する。ここで、統計情報は、命令実行時の（１）非符号となる最上位ビット位置の分布、（２）非符号となる最下位ビット位置の分布、（３）非符号となる最上位ビット位置の最大値、（４）非符号となる最下位ビット位置の最小値、またはこれらの組み合わせ等である。したがって、情報処理装置１が深層学習実行時に、データの統計情報取得のための深層学習プログラム中のオーバーヘッドがなくなるため、実用的な時間で動的固定小数点演算を実現可能となる。
【０１０８】
すなわち、本実施形態では、情報処理装置１のプロセッサ１０が統計情報取得機能付き命令を実行するとともに、演算結果をビットシフトし、丸め・飽和を行なってレジスタに格納する命令を実行する。したがって、情報処理装置１はビット分布を示す統計情報を取得するオーバーヘッドを少なくできる。また、ビット分布を示す統計情報から直ちに適正なビットシフト、すなわち、小数点位置を決定できる。つまり、情報処理装置１のように、小数点位置を１ビットずつずらして適正な小数点位置を試行し、次の演算で結果を確認するという手順ではなく、ビット分布を示す統計情報から、直ちに小数点位置を決定できる。したがって、情報処理装置１は、比較例のような小数点位置が不適切な状態で学習処理が繰り返される恐れがすくない。また、情報処理装置１は、学習結果の精度劣化につながり、深層学習の収束が遅くなる恐れが少ない。
【０１０９】
また、プロセッサ１０は、統計情報取得部１０２Ａによって命令実行後の固定小数点数データ中の符号ビットと一致しない最上位のビットの位置を取得できる。また、プロセッサ１０は、統計情報集約部１０４Ａによって符号ビットと一致しない最上位のビットの位置を複数の固定小数点数データに対して累積して計数することができる。また、プロセッサ１０は、符号ビットと一致しない最上位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積する。そして、プロセッサ１０は、累積したビット列中の最上位の真値の位置を取得することができる。
【０１１０】
また、プロセッサ１０は、統計情報取得部１０２Ｂによって命令実行後の固定小数点数データ中の符号ビットと一致しない最下位のビットの位置を取得できる。また、プロセッサ１０は、統計情報集約部１０４Ａによって符号ビットと一致しない最下位のビットの位置を複数の固定小数点数データに対して累積して計数することができる。また、プロセッサ１０は、符号ビットと一致しない最下位のビットの位置を真値で示すビット列を複数の固定小数点数データについて論理和演算によって累積する。そして、プロセッサ１０は、累積したビット列中の最下位の真値の位置を取得することができる。以上のような構成により、プロセッサ１０は、上記統計情報を取得できる。
［実施形態２］
【０１１１】
以下、図２８から図５４を参照し、実施形態２に係る情報処理装置１Ａについて説明する。上記実施形態１では、統計情報取得部１０２（１０２Ａ、１０２Ｂ）により統計情報を取得し、オーバーフロー回数等が所定の限度となるように固定小数点数データの小数点
位置を調整することで、固定小数点数データで深層学習を効率良く実行できるプロセッサ１０について説明した。
【０１１２】
しかし、実施形態１の構成では、以下のような課題が想定される。第１の課題としては、例えば、学習するネットワークの構成によっては学習が安定しないことがある。学習が安定しない理由は、学習によっては、固定小数点数では精度が確保できない変数が存在しているためと推定される。例えば、Ｑｎ．ｍフォーマットでは、符号ビット（１ビット）・整数部（ｎビット）・小数部（ｍビット）のｎ＋ｍ＋１ビットのビット列で記述される。符号ビットを除く最上位ビットの重みは２ｎ−１であり、最下位ビットの重みは２−ｍである。したがって、表現可能な値の範囲は、−（２ｎ−１）から２ｎ−２−ｍである。
【０１１３】
図２８から図３０は、深層学習等の処理中の演算で用いられる変数に格納される数値の２進数での桁数の分布を例示する図である。図２８は、例えば、深層学習の全結合層(fc
層)で重みを更新するための変数（ΔＷ）におけるデータの桁数（ビット数）の分布例で
ある。この例では、学習回数は１００００回であり、桁数は３３桁で分布している。
【０１１４】
図２９は、畳み込み層(Conv層)から出力されるデータを保持する変数における桁数（ビット数）の分布を例示する図である。この例でも、学習回数は１００００回であるが、桁数は１３桁の範囲で分布し、１６ビット固定小数点数で表現可能である。図２９と図２８を比較すると、変数の種類、あるいは、処理の種類に依存して、固定小数点数でも表現可能な変数が存在することが分かる。
【０１１５】
図３０も、全結合層(fc層)で重みを更新するための変数（ΔＷ）における桁数（ビット数）の分布を例示する図である。この例では、学習回数は１０００回であり、桁数は１３桁の範囲で分布し、１６ビット固定小数点数で表現可能である。図３０と図２８を比較すると、同一の変数であっても、学習の段階、例えば、学習の初期段階と初期段階より後の段階とを区切ることで、区切られた段階ごとに固定小数点数でも表現可能な変数が存在することが分かる。以上のように、処理の種類、あるいは処理の段階に応じて、固定小数点数で表現可能な変数と、固定小数点数では十分な精度が確保できない変数が存在していることが分かる。
【０１１６】
第２の課題としては、例えば、初期小数点位置によっては学習が破綻することが想定される。したがって、学習処理では、初期値を決定するための事前学習が実施され、事前学習の手間が発生することがある。図３１は、学習回数に対する正答率の変化を描いた図である。図では、学習を実行するプログラムの中の変数を浮動小数点数（float）、８ビッ
ト固定小数点数（DL-INT8）、１６ビット固定小数点数（DL-INT16）の３種類で使い分け
、それぞれのプログラムの結果が示されている。また、事前学習を実行したもの（ini=pre）と、事前学習を実行せず、８ビット固定小数点数でＱ５．２フォーマットを採用した
もの（ini=Q5.2）と、１６ビット固定小数点数でＱ８．７フォーマット（ini=Q8.7）を採用したものが例示されている。図のように、事前学習を実行しないで、Ｑ５．２フォーマットを採用したプログラムでは、正答率が向上せず、学習が破綻する結果となっている。
【０１１７】
そこで、以下の実施形態２では、実施形態１のプロセッサ１０の構成に加えて、さらに、固定小数点数データでは十分な精度が確保できない変数への対応、および、初期小数点位置を決定するための事前学習による手間を低減するための対応が実施される。より具体的には、実施形態２のプロセッサ１０Ａは、浮動小数点数（例えば、３２ビット浮動小数点数（以下、ＦＰ３２））での学習時に統計取得を行なう。そして、プロセッサ１０Ａを含む情報処理装置１Ａは、統計情報に基づいて浮動小数点数(ＦＰ３２)を固定小数点数に切り替える。
【０１１８】
その結果、上記第１の課題「固定小数点数では精度が確保できない変数が存在すること」に対して、情報処理装置１Ａは、浮動小数点数を用いることで精度を確保し、学習を安定させる。上記第２の課題である「初期小数点位置決定のための事前学習による手間」に対して、情報処理装置１Ａは、初期の学習段階においては、浮動小数点数を利用し、一定期間後に固定小数点数に切り替えることで事前学習を不要とする。以上のように、第１の課題および第２の課題への対処以外の実施形態２の構成要素および作用は、実施形態１の構成要素および作用と同一である。そこで、実施形態２の構成要素のうち、実施形態１と同一の構成要素については、実施形態１の構成要素が採用されるものとし、同一の符号を付してその説明を省略する。
【０１１９】
＜実施形態２で追加される統計情報＞
図３２は、浮動小数点数の変数値の分布を例示する図である。図で横軸は、数値の範囲であり、例えば、４０ビットで、小数点以上１２ビット小数点以下２７ビットの場合を例示する。また、図の縦軸は、横軸のそれぞれの数値において浮動小数点数の最上位桁（最上位ビット）が発生した回数である。以下の実施形態では、統計情報としては、２進数での最上位ビットの分布を求める。
【０１２０】
また、最上位桁d_ofは、浮動小数点数を固定小数点数に変換するときの最上位桁となる位置である。したがって、実施形態２のプロセッサ１０Ａが浮動小数点数を固定小数点数に変換すると、最上位桁d_ofを越える数値は、オーバーフローし、飽和されることになる。最上位桁d_ofは、固定小数点数の最上位桁と呼ぶことができる。
【０１２１】
また、最下位桁d_ufは、浮動小数点数を固定小数点数に変換したときの最下位桁となる位置である。したがって、実施形態２のプロセッサ１０Ａが浮動小数点数を固定小数点数に変換すると、最下位桁d_uf未満の数値は、アンダーフローし、固定小数点数としては０となる。最下位桁d_ufは、固定小数点数の最下位桁と呼ぶことができる。そしてwidthは
、最下位桁d_ufから最上位桁d_ofまでの数値の範囲を固定小数点数で表現するためのビット幅であり、width = d_of - d_uf + 1で計算される。
【０１２２】
実施形態２では、プロセッサ１０Ａは、ビット幅widthが所定の基準値を超える場合に
は、変数のデータ型を浮動小数点数とする。この場合には、プロセッサ１０Ａは、変数値のダイナミックレンジが大きく、広い範囲で値が分布する場合でも精度よく演算を実行できる。一方、プロセッサ１０Ａは、ビット幅widthが所定の基準値を超えない場合には、
変数のデータ型を固定小数点数とする。この場合には、プロセッサ１０Ａは、変数値のダイナミックレンジが狭く、限定された範囲で値が分布する場合には、固定小数点数で精度よく演算を実行できる。このような処理によって、プロセッサ１０Ａを有する情報処理装置１Ａは、上記課題１の「固定小数点数では精度が確保できない変数が存在すること」に対応し、演算精度を向上させる。
【０１２３】
また、プロセッサ１０Ａが学習等の処理の初期段階で、学習のパラメータおよび重みをすべて浮動小数点数で表現すると、課題２の「初期小数点位置決定のための事前学習による手間」を省くことが可能となる。そして、プロセッサ１０Ａは学習等の処理の進行とともに、ビット幅widthが所定の基準値を超えるか否かを判定し、ビット幅widthが所定の基準値に収まる場合には、浮動小数点数を固定小数点数に変換すればよい。このような処理によって、プロセッサ１０Ａを有する情報処理装置１Ａは、事前学習による手間を省くとともに、取得した統計情報に応じて、固定小数点数を利用可能な場合に、演算の負荷を低減し、浮動小数点数演算に伴う消費電力等の増加を抑制できる。
【０１２４】
ここで、最上位桁d_ofは、例えば、オーバーフロー率（飽和される領域のデータ数／全体のデータ数）＜基準値rofとなる範囲とすればよい。つまり、プロセッサ１０Ａは、オ
ーバーフロー率が基準値rof未満となるように、最上位桁d_ofを決定すればよい。オーバ
ーフロー率が基準値rof未満となる条件は、浮動小数点データを固定小数点データで処理
したときのオーバーフロー率が第１の条件を充足することの一例である。
【０１２５】
また、最下位桁d_ufは、例えば、アンダーフロー率（アンダーフローが発生する領域のデータ数／全体のデータ数）＜基準値rufとなる範囲とすればよい。つまり、プロセッサ
１０Ａは、アンダーフロー率が基準値ruf未満となるように、最下位桁d_ufを決定すれば
よい。アンダーフロー率が基準値ruf未満となる条件は、アンダーフロー率が第２の条件
を充足することの一例である。したがって、オーバーフロー率が基準値rof未満となるよ
うに、最上位桁d_ofを決定し、アンダーフロー率が基準値ruf未満となるように、最下位
桁d_ufを決定することによって得られる最下位桁d_ufから最上位桁d_ofの範囲（width）
は、オーバーフロー率が第１の条件を充足し、アンダーフロー率が第２の条件を充足するために要するビット範囲の一例ということができる。
【０１２６】
また、オーバーフロー率に対する基準値rofとアンダーフロー率に対する基準値rufは、ユーザ入力値とすればよい。ユーザ入力値は、経験値、実験値である。例えば、情報処理装置１Ａがオーバーフロー率に対する基準値rofとアンダーフロー率に対する基準値rufを複数変化させて学習を実行しておき、望ましいオーバーフロー率に対する基準値rofとア
ンダーフロー率に対する基準値rufを決定しておいてもよい（後述の変形例２）。
【０１２７】
＜構成＞
図３３に、実施形態２の情報処理装置１Ａの構成を例示する。情報処理装置１Ａは、実施形態の情報処理装置１のプロセッサ１０に代えて、プロセッサ１０を有する。また、情報処理装置１Ａは、実施形態の情報処理装置１と同様、メモリインターフェース（Memory
I/F）を介してプロセッサ１０Ａに結合する命令用メモリ（ＩＲＡＭ）２１、およびメモリインターフェース（Memory I/F）を介してプロセッサ１０Ａに結合するデータ用メモリ（ＤＲＡＭ）２２を有する。このうち、命令用メモリ２１およびデータ用メモリ２２の構成は、実施形態１のプロセッサ１０と同様であるので、その説明を省略する。なお、命令用メモリ２１は、メモリの一例である。プロセッサ１０Ａは、メモリに結合する演算処理装置の一例である。命令用メモリ２１には、情報処理装置１Ａが実行する深層学習等のアプリケーションプログラムの命令列がローディングされる。
【０１２８】
プロセッサ１０Ａは、制御ユニット１１、レジスタファイル１２、ベクトルユニット１３Ａ、スカラユニット１４を含む。このうち、制御ユニット１１、レジスタファイル１２、およびスカラユニット１４の構成は実施形態１のプロセッサ１０と同様であるので、その説明を省略する。
【０１２９】
ベクトルユニット１３Ａは、ベクトル演算用の固定小数点数演算器１３Ｂ、ベクトル演算用の浮動小数点数演算器１３Ｃ、および浮動小数点数と固定小数点数との間のデータ形式を変換するFloat/Int変換器１３Ｄ、統計情報取得部１０６（図には「統計取得」とし
て省略）、データ変換部１０３およびセレクタ１０７の組を複数組有している。ここで、複数組は、例えば、８組であるが、ベクトルユニット１３Ａ内の演算器の組数が８組に限定される訳ではない。また、図では、一例として、１組の固定小数点数演算器１３Ｂ、浮動小数点数演算器１３Ｃ、およびFloat/Int変換器１３Ｄに符号が付されている。ベクト
ルユニット１３Ａは、複数組の演算器によって、演算を並列に実行する。このうち、データ変換部１０３の構成は、実施形態１と同様であるので、その説明を省略する。
【０１３０】
ベクトル演算用の固定小数点数演算器１３Ｂは、複数組用意され、並列に固定小数点数演算、例えば加算を実行する。ベクトル演算用の浮動小数点数演算器１３Ｃは、複数組用意され、並列に浮動小数点数演算、例えば加算を実行する。Float/Int変換器１３Ｄは、
浮動小数点数データから固定小数点数データへの変換を実行する第１の変換回路と、固定小数点数データから浮動小数点数データへの変換を実行する第２の変換回路を含む。Float/Int変換器１３Ｄは、浮動小数点数データを固定小数点数データに変換する変換回路の
一例である。
【０１３１】
浮動小数点データから固定小数点数データへの変換を実行する第１の変換回路は、一般的なものである。第１の変換回路は、入力される浮動小数点数データから仮数部分を抽出回路と、仮数部分のビット列を指数部分の数値だけシフトするシフト回路とを有する。すなわち、第１の変換回路は、入力される浮動小数点数データから仮数部分を抽出し、指数部分で指定される数値だけ仮数部分をシフトして出力する。
【０１３２】
固定小数点数データから浮動小数点数データへの変換を実行する第２の変換回路は、固定小数点数データの符号と異なる最上位ビットの位置（非符号となる最上位ビット位置）を検出する回路と、非符号となる最上位ビットより下位のビット列から、浮動小数点数の仮数部に対応するビット幅だけビット列を抽出する抽出回路と、非符号となる最上位ビット位置を小数点位置から１桁目にシフトするシフト量を検出する検出回路と、検出したシフト量に１２７を加えてＩＥＥＥ７５４形式の浮動小数点数形式の指数部を生成する生成回路とを含む。
【０１３３】
非符号となる最上位ビット位置を検出する回路は、例えば、実施形態１の非符号となる最上位ビット位置を取得する統計情報取得部１０２Ａ（図１４）と同様である。浮動小数点数の仮数部に対応するビット幅だけビット列を抽出する抽出回路は、入力された固定小数点数データと、仮数部のビット列に対応するビット１の並び（非符号となる最上位ビットより下位の部分で仮数部のビット分だけ１を並べたビット列）とのＡＮＤ演算を実行するＡＮＤゲートと、ＡＮＤゲートの出力を仮数部のビット位置にシフトして設定するシフト回路を含む。ただし、浮動小数点数は、小数点以上が１桁である正規化された形式（仮数部＝１．ＮＮＮＮ・・・、指数部＝ＭＭＭ・・・）の形式で記述され、かつ、小数点以上の１桁目は仮数部では省略される。
【０１３４】
シフト量を検出する検出回路は、ＡＮＤゲートの出力を仮数部のビット位置にシフトするシフト回路のシフト量を検知すればよい。ＩＥＥＥ７５４形式の浮動小数点数形式の指数部を生成する生成回路は、検出されたシフト量に１２７を加算する加算器と、加算器の出力を浮動小数点数の指数部にシフトして設定するシフト回路を含む。以上の構成により、第２の変換回路は、固定小数点数から、仮数部が１．ＮＮＮＮ・・・、指数部がシフト量＋１２７となる浮動小数点数を生成する。ただし、上述のように、仮数部には、小数点以下のＮＮＮＮ・・・だけが保持される。
【０１３５】
図３４は、実施形態２の統計情報取得部１０６の構成を例示する図である。図では、統計情報取得部１０６とともに、制御ユニット１１、ベクトル演算用の固定小数点数演算器１３Ｂ、ベクトル演算用の浮動小数点数演算器１３Ｃ、および統計情報集約部１０４も記載されている。図のように、実施形態２の統計情報取得部１０６は、固定小数点数データ用の統計情報取得部１０２と、浮動小数点数データ用の統計情報取得部１０２Ｆと、統計情報選択部１０２Ｓを含む。固定小数点数データ用の統計情報取得部１０２は、実施形態１の統計情報取得部１０２と同様であるので、その説明を省略する。浮動小数点数データ用の統計情報取得部１０２Ｆは、浮動小数点データの符号を除外した数値に対応する最上位桁（２進数）位置を取得する回路である。浮動小数点数データ用の統計情報取得部１０２Ｆの詳細構成例は、図３５および図３６にしたがって後述する。
【０１３６】
統計情報選択部１０２Ｓは、デコーダ１１２からの指令にしたがって、固定小数点数データ用の統計情報取得部１０２からの出力信号と、浮動小数点数データ用の統計情報取得
部１０２Ｆからの出力信号のうち、いずれか一方を選択し、統計情報集約部１０４に出力する。したがって、例えば、１６ビット固定小数点数データに対する演算がベクトル演算用の固定小数点数演算器１３Ｂで実行された場合には、固定小数点数データ用の統計情報取得部１０２が実施形態１と同様の構成および作用で統計情報を取得する。そして、固定小数点数データ用の統計情報取得部１０２は、取得した統計情報を統計情報選択部１０２Ｓから統計情報集約部１０４に出力する。また、例えば、３２ビット浮動小数点数データに対する演算がベクトル演算用の浮動小数点数演算器１３Ｃで実行された場合には、浮動小数点数データ用の統計情報取得部１０２Ｆが統計情報を取得し、統計情報選択部１０２Ｓから統計情報集約部１０４に出力する。統計情報選択部１０２Ｓは、制御ユニット１１のデコーダ１１２からの制御信号にしたがって、固定小数点数データ用の統計情報取得部１０２からの出力信号と浮動小数点数データ用の統計情報取得部１０２Ｆからの出力信号を切り替える。
【０１３７】
図３５は、浮動小数点数データ用の統計情報取得部１０２Ｆの詳細構成を例示する図である。統計情報取得部１０２Ｆは、浮動小数点数データ中のビットの分布についての統計情報を取得する取得回路の一例である。
【０１３８】
統計情報取得部１０２Ｆは、統計範囲指定レジスタ２Ｆ１と、減算器２Ｆ２と、特殊値検出部２Ｆ３と、ＦＰ３２統計情報生成部２Ｆ４とを有する。実施形態２では、浮動小数点数として、ＩＥＥＥ７５４で規定された形式の浮動小数点数データを想定する。ＩＥＥＥ７５４で規定された形式の浮動小数点数では、指数部には、実際の値に１２７を加えた値が設定されている。また、実施形態２では、浮動小数点数データの統計情報としては、４０ビットを想定する。しかしながら、実際の浮動小数点数データの値の分布は、４０ビットの範囲に収まらない場合がある。そこで、実施形態２では、統計情報取得部１０２Ｆは、浮動小数点数の値の分布のうち、統計情報として取得する部分（下記シフト量Ｘから４０ビット分）の指定を受け付け、指定された部分の統計情報を取得する。
【０１３９】
統計範囲指定レジスタ２Ｆ１には、統計情報取得範囲のシフト量Ｘと１２７の和が設定される。統計情報取得範囲のシフト量Ｘは、統計情報取得範囲の最下位側の桁を指定する値である。統計情報取得範囲のシフト量Ｘは、例えば、浮動小数点数データの統計情報取得を指令する取得命令のオペランドとして指定される。統計範囲指定レジスタ２Ｆ１は、浮動小数点数データ中のビットの分布のうちの特定部分の取得を指定するための指定部の一例である。
【０１４０】
減算器２Ｆ２は、統計情報を取得する対象である浮動小数点数データの指数部（ｅ）から統計範囲指定レジスタ２Ｆ１の値（Ｘ＋１２７）を減算する。この結果、浮動小数点数データ中の指数部分から、ＩＥＥＥ７５４で規定された加算値（１２７）と、シフト量Ｘが減算される。減算器２Ｆ２は、減算結果をＦＰ３２統計情報生成部２Ｆ４に入力する。このとき、減算器２Ｆ２および浮動小数点数データの指数部（例えば、８ビット）は、１ビットゼロ拡張された値をＦＰ３２統計情報生成部２Ｆ４に入力する。ＩＥＥＥ７５４で規定されている指数部は８ビットの符号なし整数であり、統計範囲指定レジスタの値も８ビットの符号なし整数のため、減算結果の符号を正しく判定するために、1ビット拡張し
ている。
【０１４１】
特殊値検出部２Ｆ３は、浮動小数点数０、非正規化数（指数部＝０であって、かつ、仮数部が０以外の値となる数）、Not A Number(ＮＡＮ)、＋−無限大の値を検出する。ここで、浮動小数点数０、非正規化数、ＮＡＮ、および＋−無限大の値は、いずれも、ＩＥＥＥ７５４で規定されている。なお、特殊値検出部２Ｆ３は、浮動小数点数０、非正規化数、ＮＡＮ、および＋−無限大の値の少なくとも１つを検出するようにしてもよい。
【０１４２】
ＩＥＥＥ７５４では、指数部は、例えば、８ビット正数であり、１から２５４の値が使用される。上述のように、この値は、１２７のオフセットを加算した値であり、１から２５４の値によって、指数の−１２６から＋１２７を表している。一方、ＩＥＥＥ７５４では、指数部が０と２５５の場合には、特別な意味を表している。また、上述のように、浮動小数点数データの仮数部は、小数点以上の値は１に固定され、かつ、実際の仮数部には小数点以下の値が設定される。すなわち、小数点以上の値１は暗黙の値として、実際のデータには記述されない。小数点以上の値が１に固定された浮動小数点数は正規化数ということができる。特殊値検出部２Ｆ３は、このような浮動小数点数データから以下の特殊値を検出する。
【０１４３】
浮動小数点数０は、指数部＝０かつ仮数部＝０の場合である。非正規化数は、指数部＝０、かつ、仮数部が０以外の値となる数である。非正規化数は、正規化可能な数値より小さな数値を意味する。＋−無限大の値は、指数部＝２５５で化数部＝０によって定義される。ＮＡＮは、指数部＝２５５で、仮数部が０でない値によって定義される。特殊値検出部２Ｆ３は、これらの値を検出すると、所定の信号（ビット）に１に設定して、ＦＰ３２統計情報生成部２Ｆ４に入力する。以上のような特殊値検出部２Ｆ３の回路構成は、ＡＮＤゲート、ＯＲゲートおよびインバータ（ＮＯＴ）を含む組み合わせ論理回路により実現可能である。
【０１４４】
図３６に、ＦＰ３２統計情報生成部２Ｆ４の構成を例示する。ＦＰ３２統計情報生成部２Ｆ４は、ＮＯＲゲート２Ｆ４１と、デコーダ２Ｆ４２と、ＡＮＤゲート２Ｆ４３と、ＯＲゲート２Ｆ４４、２Ｆ４５を有する。今、ＦＰ３２統計情報生成部２Ｆ４の出力をout[0]からout[39](２０から２３９の各桁に対応)で表す。ＦＰ３２統計情報生成部２Ｆ４は
、特殊値以外の統計情報である最上位桁の分布をout[1]からout[36]に出力する。正規化
数では、小数点以上は１に固定されるので、浮動小数点数データの最上桁の分布は、指数部の値の分布そのものである。
【０１４５】
そこで、デコーダ２Ｆ４２が図３５の減算器２Ｆ２からの減算結果（浮動小数点数の指数部からＸ＋１２７を減算した結果）をデコードして該当するビットに１を出力し、ＡＮＤゲート２Ｆ４３を介して、out[36:1]に出力する。ただし、デコーダ２Ｆ４２は、減算
器２Ｆ２からの減算結果が負の場合には、最下位ビット（２０）に１を出力する。また、デコーダ２Ｆ４２は、減算器２Ｆ２からの減算結果が３７より大きい場合には、ビット３７（２３７）に１を出力する。すなわち、図３６において、デコーダ２Ｆ４２は、減算器２Ｆ２からの減算結果を最下位ビット（２０）からビット３７（２３７）の３８ビットにデコードして出力する。以上のデコーダ２Ｆ４２による処理は、浮動小数点数データ中の指数部の数値で指定されるビット位置を取得することの一例と言える。
【０１４６】
ＡＮＤ２Ｆ４３ゲートの他方（デコーダ２Ｆ４２から入力以外）の入力には、０の検出信号またはＮＡＮの検出信号（値１）がＮＯＲゲート２Ｆ４１を介して入力される。したがって、図３５の特殊値検出部２Ｆ３が浮動小数点数０またはＮＡＮを検出した場合には、out[36:1]に統計情報が出力されない。図３５の特殊値検出部２Ｆ３が浮動小数点数０
を検出した場合には、検出信号（値１）がそのままout[39]に出力される。また、特殊値
検出部２Ｆ３がＮＡＮを検出した場合には、検出信号（値１）がそのままout[38]に出力
される。また、out[37]には、ＯＲゲート２Ｆ４４によって、＋−無限大の検出値（値１
）またはデコーダ２Ｆ４２でデコードされたビット３７が出力される。また、out[0]には、非正規化数の検出値またはデコーダ２Ｆ４２でデコードされたビット０が出力される。
【０１４７】
以上の通り、ＦＰ３２統計情報生成部２Ｆ４は、浮動小数点数０に対して、out[39]を
１に、他のビットを０にして出力する。また、ＦＰ３２統計情報生成部２Ｆ４は、ＮＡＮに対して、out[38]を１に、他のビットを０にして出力する。さらに、ＦＰ３２統計情報
生成部２Ｆ４は、減算器２Ｆ２からの減算結果が３７を越える場合には、out[37]を１に
、他のビットを０にして出力する。したがって、ＦＰ３２統計情報生成部２Ｆ４は、統計情報として用意した値の範囲（例えば、３７ビット）を超える数値を統計情報の最上位の桁に反映できる。
【０１４８】
さらにまた、ＦＰ３２統計情報生成部２Ｆ４は、減算器２Ｆ２からの減算結果が０未満の場合または非正規化数が検出された場合には、out[0]を１に、他のビットを０にして出力する。したがって、ＦＰ３２統計情報生成部２Ｆ４は、正規化できない小さな値である非正規化数を統計情報に反映できる。さらに、ＦＰ３２統計情報生成部２Ｆ４は、減算器２Ｆ２からの減算結果が０から３７の値ｋ場合に、out[k]を１に、他のビットを０にして出力する。以上から、out[0]からout[39]の各ビットは、浮動小数点数データ中の指数部
の数値で指定されるビット位置を示すフラグビットの一例ということができる。out[0]からout[39]は、図３３に示すように、統計情報集約部１０４に入力され、実施形態１と同
様に積算される。
【０１４９】
＜処理フロー＞
図３７に、情報処理装置１Ａがプロセッサ１０Ａにより実行するアプリケーションプログラムの処理を例示する。アプリケーションプログラムは、情報処理装置１Ａの命令用メモリ２１を含む主記憶装置にローディングされる。そして、ローディングされたアプリケーションプログラム中の各命令は、命令用メモリ２１のキャッシュから制御ユニット１１に取得され、デコーダ１１２によりデコードされ、スカラユニット１４およびベクトルユニット１３Ａによって実行される。したがって、プロセッサ１０Ａによる処理は、メモリに記憶された命令にしたがって実行する処理の一例と言える。
【０１５０】
アプリケーションプログラムの処理のうち、ベクトル積和演算、ベクトル加算等の処理は、ベクトルユニット１３Ａによって実行され、その他の処理、例えば、判定、分岐、スカラ演算等は、スカラユニット１４によって実行される。実施形態２の処理では、実施形態１の情報処理装置１とは異なり、情報処理装置１Ａは、初期小数点位置を決定する必要がない。初期段階では、すべてのパラメータと重みが浮動小数点数データの変数で処理されるためである。図３７の処理で、学習の初期段階ですべてのパラメータと重みが浮動小数点数データの変数で処理されるので、図３７の処理は、深層学習の開始時には、前記深層学習で処理するデータを浮動小数点数で演算することの一例と言える。
【０１５１】
そして、情報処理装置１Ａは、回数kを0に初期化する。また、情報処理装置１Ａは、プログラム内の統計情報を格納する変数を初期化する（ＷＥ１２）。そして、情報処理装置１Ａは学習終了の条件が充足されたか否かを判定する（ＷＥ１３）。学習が終了するのは、全結合層(fc2)でのエラーが基準値以下となるか、または、学習回数が規定の最大値に
達した場合である。
【０１５２】
学習終了の条件が充足されない場合、情報処理装置１Ａは、次のミニバッチを実行する。このとき、情報処理装置１Ａは、各レイヤの各変数の統計情報を統計情報レジスタあるいは統計情報レジスタファイルに累積する。統計情報を累積は、実施形態１と同様に、プロセッサ１０Ａのハードウェア（統計情報取得部１０６、統計情報取得部１０２、統計情報取得部１０２Ｆおよび統計情報集約部１０４）で実行される。プロセッサ１０Ａは、浮動小数点数データについては、統計情報取得部１０２Ｆにより、統計情報を取得する。そして、情報処理装置１Ａは、変数ｋをカウントアップする（ＷＥ１４）。
【０１５３】
そして、情報処理装置１Ａは、回数ｋが更新間隔に達したか否かを判定する（ＷＥ１５）。回数ｋが更新間隔に達していない場合、情報処理装置１Ａは、ＷＥ１３の処理に戻る。一方、回数ｋが更新間隔に達した場合、情報処理装置１Ａは、統計情報を統計情報レジ
スタあるいは統計情報レジスタファイル、あるいはデータ用メモリ２２の統計情報を退避した領域から読み出す。そして、情報処理装置１Ａは、各種統計情報から各レイヤの各変数のデータ型および小数点位置を更新する処理を実行する（ＷＥ１６）。すなわち、情報処理装置１Ａは、読み出された統計情報を基に、各レイヤの浮動小数点数データの変数のうち、固定小数点数データに変更可能なものがあるか否かを判定し、変更可能な変数を固定小数点数データに変更する。また、情報処理装置１Ａは、すでに固定小数点数データに変更された変数が存在する場合には、読み出された統計情報を基に各レイヤの各変数の小数点位置を更新する。そして、情報処理装置１は、ＷＥ１３の処理に戻る。ＷＥ１６の処理は、統計情報を取得することの一例を含むと言える。
【０１５４】
図３８は、バッチ学習の処理（図３７のＷＥ１４）で実行される演算時の型合わせの詳細を例示する図である。情報処理装置１Ａで実行されるアプリケーションプログラムは、深層学習の各レイヤにおいて、データ型を合わせてから演算を行なう。
【０１５５】
より具体的には、アプリケーションプログラムは、レイヤごとに、当該レイヤへの入力パラメータにfloat型があるか否かを判定する（ＷＥ１４１）。そして、当該レイヤへの
入力パラメータにfloat型がある場合には（ＷＥ１４１でＹＥＳ）、アプリケーションプ
ログラムは、演算をfloat型で実行する（ＷＥ１４２）。また、当該レイヤへの入力パラ
メータにfloat型がない場合（ＷＥ１４１でＮＯ）、アプリケーションプログラムは、当
該レイヤへの入力パラメータに１６ビット固定小数点数があるか否かを判定する（ＷＥ１４３）。そして、当該レイヤへの入力パラメータに１６ビット固定小数点数がある場合には（ＷＥ１４３でＹＥＳ）、アプリケーションプログラムは、演算を１６ビット固定小数点数で実行する（ＷＥ１４４）。さらに、当該レイヤへの入力パラメータに１６ビット固定小数点数がない場合には（ＷＥ１４３でＮＯ）、アプリケーションプログラムは、演算を８ビット固定小数点数で実行する（ＷＥ１４５）。そして、アプリケーションプログラムは、演算後、演算結果を出力変数のデータ型に合わせる（ＷＥ１４６）。
【０１５６】
なお、図３８は、レイヤごとにデータ型を合わせて演算する処理を例示したが、すべての演算について、演算ごと、あるいは代入ごとに型を合わせるようにしてもよい。例えば、演算を指示する２項演算子が適用される２つの変数のいずれか一方がfloat型の場合、
アプリケーションプログラムは、float型で演算を実行し、演算結果を代入先の変数のデ
ータ型に合わせて代入すればよい。また、例えば、演算を指示する２項演算子が適用される２つの変数がいずれもfloat型でなく、いずれか一方が１６ビット固定小数点数で他方
が８ビット固定小数点数の場合、１６ビット固定小数点数で演算を実行し、演算結果を代入先の変数のデータ型に合わせればよい。
【０１５７】
図３９は、各種統計データから各レイヤの各変数のデータ型および小数点位置を更新する処理（図３７のＷＥ１６）のうちのデータ型更新処理の詳細を例示する図である。この処理では、情報処理装置１Ａのプロセッサ１０Ａは、最上位桁d_ofと最下位桁d_ufからビット幅width=d_of - d_ufを計算する（ＷＥ１６１）。ここで、最上位桁d_ofは、第１の
条件、例えば、オーバーフロー率（飽和される領域のデータ数／全体のデータ数）＜基準値rofとなるように、決定される。また、最下位桁d_ufは、第２の条件、例えば、アンダ
ーフロー率（アンダーフローが発生する領域のデータ数／全体のデータ数）＜基準値ruf
となるように決定される。
【０１５８】
そして、ビット幅widthが基準値Wfloatより大きいか否かを判定する（ＷＥ１６２）。
ビット幅widthが基準値Wfloatより大きい場合、プロセッサ１０Ａは、変数のデータ型を
浮動小数点数データ（float型）とする。なお、元々変数のデータ型が浮動小数点数デー
タ（float型）である場合には、プロセッサ１０Ａは、浮動小数点数データ（float型）のデータ型を維持する（ＷＥ１６３）。
【０１５９】
一方、ビット幅widthが基準値Wfloat以内の場合、プロセッサ１０Ａは、変数のデータ
型を固定小数点数データとする（ＷＥ１６５）。プロセッサ１０Ａは、各レイヤの各変数に対して、図３９の処理を実行する。ビット幅widthが基準値Wfloat以内の場合は、統計
情報が所定の条件を充足するときの一例である。ＷＥ１６５の処理は、変換回路に前記浮動小数点数データを固定小数点数データに変換させることの一例と言える。ビット幅widthが基準値Wfloat以内の場合は、ビット範囲が第３の条件を充足することの一例である。
【０１６０】
図４０は、データ型更新処理の変形を例示する図である。図４０では、図３９に対して、ビット幅widthが基準値Wfloat以内の場合の処理が細分化されている。すなわち、ビッ
ト幅widthが基準値Wfloat以内の場合、プロセッサ１０Ａは、ビット幅widthが基準値Wfixed_8bitより大きいか否かを判定する（ＷＥ１６４）。基準値Wfixed_8bitは、８ビット固定小数点数で処理可能な範囲のビット数である。そして、ビット幅widthが基準値Wfixed_8bitより大きい場合、プロセッサ１０Ａは、変数のデータ型を１６ビット固定小数点数データとする（ＷＥ１６５Ａ）。一方、ビット幅widthが基準値Wfixed_8bit以内の場合、プロセッサ１０Ａは、変数のデータ型を８ビット固定小数点数データとする（ＷＥ１６５Ｂ）。ビット幅widthが基準値Wfixed_8bitより大きい場合が、統計情報が所定の第４条件を充足するときの一例であり、１６ビット固定小数点数データが第１のビット幅の固定小数点数データの一例である。また、ビット幅widthが基準値Wfixed_8bit以内の場合が、統計情報が前記所定の第４条件を充足しないときの一例であり、８ビット固定小数点数データが第２のビット幅の固定小数点数データの一例である。
【０１６１】
図４１は、情報処理装置１Ａのプロセッサ１０Ａがプログラムにしたがって固定小数点数から浮動小数点数に変換する処理を例示する図である。この処理例は、変数ｖ０がＱｎ．ｍフォーマット（整数部ｎビット、小数部ｍビット）の固定小数点数であり、浮動小数点数の変数ｖ３に型変換して代入する例である。また、プログラムは、プロセッサ１０Ａの命令に対応するアセンブリ言語で記述されている。
【０１６２】
プロセッサ１０Ａは、まず、１６ビット固定小数点数の変数ｖ０を１６ビット整数から浮動小数点数への変換命令（vi16tof）を用いて浮動小数点数の変数ｖ１に変換する（Ｓ
１６５１）。この処理によって、Float/Int変換器１３Ｄが変数Ｖ０の値を処理し、固定
小数点数の変数ｖ０は、ＩＥＥＥ７５４形式（仮数部の小数点以上の桁が１桁で、かつ、省略されたもの）に変換される。ただし、この変換では、Ｑｎ．ｍの小数点位置は考慮されていない。次にプロセッサ１０Ａは、Ｑｎ．ｍフォーマット（整数部ｍビット、小数部ｎビット）の小数点位置を設定するため、つまり、浮動小数点位置を最下位桁の右側からｍビット分ずらすために、浮動小数点数の変数Ｖ１に浮動小数点数の変数Ｖ２＝２−ｍを乗算し、浮動小数点数Ｖ３とする（Ｓ１６５２）。なお、プロセッサ１０Ａは、Ｓ１６５２で乗算したＶ２＝２−ｍを所定のレジスタに格納しておき、後の処理で、Ｑｎ．ｍフォーマットに戻すときに使用すればよい。なお、ここでは１６ビット固定小数点数を浮動小数点数に変換する方法を例示しているが、８ビット固定小数点数を浮動小数点数に変換する場合も同様である。
【０１６３】
図４２は、情報処理装置１Ａのプロセッサ１０Ａがプログラムにしたがって浮動小数点数から固定小数点数に変換する処理を例示する図である。この処理例は、変数ｖ０が固定小数点数であり、Ｑｎ．ｍフォーマットの固定小数点数の変数ｖ３に型変換して代入する例である。
【０１６４】
プロセッサ１０Ａは、まず、Ｑｎ．ｍフォーマットに変換するときの小数点位置に対応する値２ｍを変数Ｖ１に保持し、変数ｖ０と変数Ｖ１を乗算し、浮動小数点数の変数Ｖ２とする（Ｓ１６３１）。これにより、浮動小数点の位置をｍビット分ずらす。そして、プ
ロセッサ１０Ａは、変数Ｖ２をvftoi１６命令によって１６ビット整数に変換する（Ｓ１
６３２）。この処理によって、Float/Int変換器１３Ｄが浮動小数点数の変数Ｖ２の値を
処理し、ＩＥＥＥ７５４形式の浮動小数点数であるＶ２は、固定小数点数（２進整数）に変換される。なお、vftoi16命令は、変換する値が１６ビット整数の最大値より大きい場
合は１６ビット整数の最大値へ、１６ビット整数の最小値より小さい場合は１６ビット整数の最小値に変換する。なお、プロセッサ１０Ａは、Ｓ１６３１で乗算した値Ｖ１＝２ｍを所定のレジスタに格納しておき、後の処理で、Ｑｎ．ｍフォーマットから浮動小数点数に戻すときに使用すればよい。なお、ここでは浮動小数点数を１６ビット固定小数点数に変換する方法を例示しているが、浮動小数点数を８ビット固定小数点数に変換する場合も同様である。
【０１６５】
図４３は、８ビット固定小数点数の変数ｖ０を１６ビット固定小数点数の変数ｖ１へ変換するための8bit→16bit符号拡張命令（vext8to16）による処理例である。また、図４４は、１６ビット固定小数点数の変数ｖ０を８ビット固定小数点数の変数ｖ１へ変換するための飽和演算命令（vsat8）による処理例である。
【０１６６】
＜実施形態２の効果＞
図４５は、逆誤差伝搬を採用した畳み込みニューラルネットワークとして知られているＬｅＮｅｔでの処理例である。図のように、３２ビット浮動小数点数を用いた処理と実施形態２による処理で、認識精度の差異はほとんどない。
【０１６７】
図４６は、実施形態２による処理と、浮動小数点数による処理（float）と、事前学習
を行った１６ビット固定小数点数による処理例（DL-INT16(ini=pre）と、事前学習なしでの８ビット固定小数点数による処理例（DL-INT8(ini=Q5.2）での正答率の比較結果の例である。ここで、実施形態２による処理では、オーバーフロー率の基準値rof=0.01%、アン
ダーフロー率の基準値ruf=1%に設定した処理例と、オーバーフロー率の基準値rof=0.01%
、アンダーフロー率の基準値ruf=5%に設定した処理例が示されている。また、事前学習では、１０００回の学習が実行されている。図のように、実施形態２による２つの処理例での正答率は、浮動小数点数による処理（float）および事前学習を行った１６ビット固定
小数点数による処理例（DL-INT16(ini=pre)とほとんど遜色がない。
【０１６８】
図４７は、深層学習の畳み込み層からの出力データを保持する変数の学習回数に対するデータ型の変動の履歴である。図で横軸は、学習回数Ｎである。また、図で横軸は、データ型の種類、すなわち、浮動小数点数（ＦＰ３２）、１６ビット固定小数点数（16bit fixed）および８ビット固定小数点数（8bit fixed）として演算された状態を例示している
。この例での畳み込み層からの出力データに関しては、変数のデータ型は１６ビット固定小数点数のまま維持され、型の変動は見られない。
【０１６９】
図４８は、深層学習の全結合層(fc層) の重みの更新量を保持する変数の学習回数に対
するデータ型の変動の履歴である。図で上下方向の線は、浮動小数点数(FP32)と１６ビット固定小数点数(16bitfixed)の間で変数のデータ型が変動することを示している。
【０１７０】
図４９は、深層学習の畳み込み層（conv4_2）におけるエラーを保持する変数の学習回
数に対するデータ型の変動の履歴である。図で色が濃くなっている箇所は、データ型の変動が多い箇所を示している。図４９の例では、学習の後半に浮動小数点数（ＦＰ３２）と１６ビット固定小数点数(16bitfixed)の間で変数のデータ型が変動することを示している。
【０１７１】
図５０は、深層学習の畳み込み層（conv5_1）における重みを保持する変数の学習回数
に対するデータ型の変動の履歴である。図５０の例は、学習の途中で８ビット固定小数点
数(fixed(8))から１６ビット固定小数点数（fixed(16)）に変数のデータ型が遷移するこ
とを示している。
＜実施形態２の効果＞
【０１７２】
以上述べたように、実施形態２のプロセッサ１０Ａは、浮動小数点数データの値の分布である統計情報を取得する統計情報取得部１０２Ｆを有する。また、実施形態２の情報処理装置１Ａは、浮動小数点データから固定小数点データに変換し、固定小数点データを浮動小数点データに変換するFloat/Int変換器１３Ｄを有する。したがって、プロセッサ１
０Ａは、プロセッサ１０Ａで処理を実行するアプリケーションプログラムに対して、浮動小数点数データについての統計情報を提供するとともに、提供した統計情報にしたがって、浮動小数点データから固定小数点データに変換する手段を提供することができる。その結果、プロセッサ１０Ａは、例えば、学習等の処理の初期段階では、浮動小数点数データによる演算を実行し、統計情報が所定の条件を充足したときに、固定小数点データで演算を実行できる。したがって、プロセッサ１０Ａは、およびプロセッサ１０Ａを含む情報処理装置１Ａは、固定小数点数データでは十分な精度が確保できない変数を含む処理においても、固定小数点数データでは十分な精度を確保できる変数だけを固定小数点データとして、処理を実行できる。
【０１７３】
また、実施形態２の統計情報取得部１０２Ｆは、統計範囲指定レジスタ２Ｆ１に指定された範囲（例えば、ユーザ指定のビットＸから４０ビット分）で浮動小数点数データの値の分布である統計情報を取得する。したがって、統計情報取得部１０２Ｆは、限定されたビット幅で、的確な統計情報の取得を可能にする。
【０１７４】
また、実施形態２の統計情報取得部１０２Ｆは、デコーダ２Ｆ４２により浮動小数点数データ中の指数部の数値で指定されるビット位置の情報を取得するので、正規化された浮動小数点数の値の分布を適切に取得できる。また、プロセッサ１０Ａは、統計情報取得部１０２Ｆで取得したビット位置の情報を統計情報集約部１０４によって積算し、浮動小数点数データの値の分布を取得できる。
【０１７５】
また、実施形態２の統計情報取得部１０２Ｆは、特殊値検出部２Ｆ３によって、０、正負の無限大の値、正規化浮動小数点数で表現できない値（非正規化数）、および数値以外の値（ＮＡＮ）を検出し、前記統計情報に含める。したがって、実施形態２のプロセッサ１０Ａは、特殊値を含む統計情報を取得し、浮動小数点数から固定小数点数への変換の可否の判断材料を提供できる。例えば、非正規化数は、正規化された浮動小数点数として表現できない小さな値であるが、図３６のout[0]に計数することで、精度よく統計情報が取得される。また、例えば、統計範囲指定レジスタの指定値が減算された指数部の値が３７を越える場合には、デコーダ２Ｆ４２の処理によって、out[37]に計数される。また、＋
−無限大の値もout[37]に計数される。したがって、統計情報取得部１０２Ｅで処理でき
ない大きな範囲の値も、正確に統計情報に反映される。
【０１７６】
また、実施形態２の情報処理装置１Ａは、プロセッサ１０Ａから取得した統計情報が図３９のＷＥ１６２あるいは図４０のＷＥ１６２で例示される所定の条件を充足するときに、浮動小数点数データを固定小数点数データに変換する。したがって、情報処理装置１Ａは、固定小数点数データでは十分な精度が確保できない変数を含む処理においても、固定小数点数データで十分な精度を確保できる変数だけを固定小数点データとして、処理を実行できる。
【０１７７】
そして、上記所定の条件は、オーバーフロー率（飽和される領域のデータ数／全体のデータ数）＜基準値rofとなる範囲の最上位桁の値d_ofと、アンダーフロー率（アンダーフ
ローが発生する領域のデータ数／全体のデータ数）＜基準値rufとなる範囲の最下位桁d_u
fによって判定される。すなわち、ビット幅width=d_of − ruf +1が固定小数点データで
精度よく表現できる場合に、情報処理装置１Ａは、浮動小数点数を固定小数点数に変換する。したがって、情報処理装置１Ａは、精度よく固定小数点データで処理できるか否かに基づき、浮動小数点数から固定小数点数への変換の可否を判断できる。また、情報処理装置１Ａは、学習等の処理におけるオーバーフロー率およびアンダーフロー率を適切な範囲に制御できる。
【０１７８】
また、上記実施形態２では、学習処理の初期段階では、深層学習のパラメータおよび重みを浮動小数点数として処理を実行し、統計情報によりビット幅widthが基準値Wfloat以
内となる場合に、浮動小数点数を固定小数点数に変換するので、事前学習によって重みの初期値を決定しなくても学習の破綻を回避できる。また、浮動小数点数の演算によるプロセッサ１０Ａの負荷を低減できる。
【０１７９】
＜変形例１＞
上記実施形態２では、ビット幅widthを判定するための基準値Wfloat、Wfixed_8bit等はユーザが指定することを想定した。また、オーバーフロー率（飽和される領域のデータ数／全体のデータ数）の基準値rof、およびアンダーフロー率（アンダーフローが発生する
領域のデータ数／全体のデータ数）の基準値rufについても、ユーザが指定することを想
定した。しかし、情報処理装置１Ａは、これらの基準値Wfloat、Wfixed_8bit、rof、およびrufを変動させつつ深層学習等を実行し、認識精度を評価した結果から、これらの基準
値を決定してもよい。
【０１８０】
図５１に、基準値Wfloat、Wfixed_8bit、rof、およびrufを決定する処理を例示する。
図でＴ１の処理は、基準値Wfloatを値１６から１２の範囲で、１ずつ変更する繰り返しの制御処理である。また、Ｔ２の処理は、基準値Wfixed_8bitを値８から５の範囲で、１ず
つ変更する繰り返しの制御処理である。さらに、Ｔ３の処理は、基準値rofを値０．１か
ら0.0001の範囲で、1/2.0倍ずつ変更する繰り返しの制御処理である。さらにまた、Ｔ４
の処理は、基準値rufを値０．１から0.0001の範囲で、1/2.0倍ずつ変更する繰り返しの制御処理である。そして、情報処理装置１Ａは、これらの繰り返しの制御とともに、深層学習を実行する（Ｔ５）。深層学習では、情報処理装置１Ａは、実施形態２にしたがって統計情報を取得し、浮動小数点数データから固定小数点数データへの可否を判断し、所定の条件（ＷＥ１６２）が充足される場合に、浮動小数点数データを固定小数点数データに変換する。
【０１８１】
そして、情報処理装置１Ａは、認識精度の評価を実行する（Ｔ６）。そして、すべての繰り返しの制御（Ｔ１からＴ４）が終了した後、情報処理装置１Ａは、認識精度最良の基準値Wfloat、Wfixed_8bit、rof、およびrufを採用すればよい（Ｔ７）。このような処理
により、情報処理装置１Ａは、当該学習処理に適した基準値Wfloat、Wfixed_8bit、rof、およびrufを採用できる。
【０１８２】
＜変形例２＞
上記実施形態では、ビット幅widthが基準値Wfloat以内となる場合に、情報処理装置１
Ａは、浮動小数点数データを固定小数点数データに変換する。しかし、仮にビット幅widthが基準値Wfloat未満となる場合でも、浮動小数点数データを固定小数点数データに変換
することが適切でない場合が想定される。
【０１８３】
図５２は、浮動小数点数データの分布に偏りが存在する例である。例えば、図５２の左下側に例示するように、浮動小数点数データの分布が上位桁に偏る場合がある。すなわち、オーバーフロー率（飽和される領域のデータ数／全体のデータ数）＜基準値rofとなる
範囲の最上位桁d_ofが所定の上限を越える場合（最上位桁d_ofが大きすぎる場合）には、
固定小数点数データによる演算でオーバーフロー率を抑制することは困難である。
【０１８４】
また、例えば、図５２の右下側に例示するように、浮動小数点数データの分布が下位桁に偏る場合がある。すなわち、アンダーフロー率（アンダーフローが発生する領域のデータ数／全体のデータ数）＜基準値rufとなる範囲の最下位桁d_ufが所定の下限を越える場
合（最下位桁d_ufが小さすぎる場合）には、固定小数点数データによる演算でアンダーフロー率を抑制することは困難である。そこで、情報処理装置１Ａが実行するプログラムは、最上位桁の値d_ofが所定の限界を越える場合、または最下位桁d_ufが所定の限界を越える場合には、固定小数点数データから浮動小数点数データへの変換を実行しないようにすればよい。
【０１８５】
図５３に、固定小数点数データから浮動小数点数データへの変換を抑止する処理を例示する。図でＷＥ１６１Ａの判定以外は、図３９と同様である。すなわち、情報処理装置１Ａは、最上位桁の値d_ofが所定の上限に達した場合、または最下位桁d_ufが所定の下限に達した場合には（Ｓ１６１ＡでＹＥＳ）、データ型を浮動小数点数（Float型）で維持し
、固定小数点数データから浮動小数点数データへの変換を実行しない（Ｓ１６３）。このような処理によって、情報処理装置１Ａは、ビット幅widthが基準値Wfloat未満となる場
合でも、浮動小数点数データを固定小数点数データに変換することが不適切な場合を除外できる。すなわち、情報処理装置１Ａは、オーバーフロー率あるいはアンダーフロー率が増加することを抑制できる。最上位桁の値d_ofが所定の上限に達した場合は、オーバーフロー率が第１の条件を充足するときのビット範囲の最上位ビット位置が所定の限界を超える場合の一例と言える。また、最下位桁d_ufが所定の下限に達した場合は、アンダーフロー率が第２の条件を充足するときのビット範囲の最下位ビット位置が所定の限界を超える場合の一例と言える。したがって、ＷＥ１６１ＡでＹＥＳの場合に、固定小数点数データから浮動小数点数データへの変換を実行しないことは、変換回路が前記浮動小数点数データを固定小数点数データに変換することを制限することの一例と言える。
【０１８６】
以上のように、情報処理装置１Ａは、オーバーフロー率＜基準値rofとなる範囲の最上
位桁の値d_ofが所定の限界を越えるか、または、アンダーフロー率＜基準値rufとなる範
囲の最下位桁d_ufが所定の限界を越える状態を検出する。そして、これらの状態が検知された場合、情報処理装置１Ａは、浮動小数点数データによる演算を行い、浮動小数点数データから固定小数点数データへの変換を抑止する。したがって、仮に、ビット幅width=d_of − ruf +1に基づくと固定小数点データで精度よく表現できると判断できる場合でも、浮動小数点数データの値に偏りがある場合には、浮動小数点数データから固定小数点数データへの変換を抑制し、演算精度を維持できる。
【０１８７】
＜変形例３＞
上記実施形態１、２では、情報処理装置１はプロセッサ１０を有し、情報処理装置１Ａはプロセッサ１０Ａを有し、単一のプロセッサ１０、１０Ａを想定して構成および処理を説明した。しかし、実施形態１、２が単一のプロセッサ１０、１０Ａに限定される訳ではない。
【０１８８】
図５４は、情報処理装置１Ａの変形例である情報処理装置１Ｂの構成を例示する。情報処理装置１Ｂは、Ｈｏｓｔ  ＣＰＵ５０２と、制御ＣＰＵ５０３と、複数の処理部１０Ａ−１から１０Ａ−Ｎを有している。図では、処理部１０Ａ−１〜１０Ａ−ＮはProcessor Element（ＰＥ）と記述されている。制御ＣＰＵ５０３と、各処理部１０Ａ−１〜１０Ａ
−Ｎとはバス３４で接続される。さらに、図５４では、バス３４に、バスインターフェース３６、メモリメモリインターフェースを介して接続される命令用メモリ２１およびデータ用メモリ２２が記載されている。ここで、処理部１０Ａ−１〜１０Ａ−Ｎは、例えば、実施形態２のプロセッサ１０Ａと同様の構成である。
【０１８９】
図５４の構成では、処理部１０Ａ−１〜１０Ａ−Ｎがそれぞれ学習処理（図３７の処理の全体）を実行してもよい。また、制御ＣＰＵ５０３が統計情報の取得、浮動小数点数データから固定小数点数データへの可否の判断、および浮動小数点数データから固定小数点数データへの変換を実行し、処理部１０Ａ−１〜１０Ａ−Ｎが深層学習の各層の演算を実行してもよい。
【０１９０】
《コンピュータが読み取り可能な記録媒体》
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【０１９１】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスク、ＲＯＭ（リードオンリーメモリ）等がある。さらに、ＳＳＤ（Solid State Drive）は、コンピュータ等から取り外し可能な記録媒体としても、コンピュータ
等に固定された記録媒体としても利用可能である。
【符号の説明】
【０１９２】
１、１Ａ、１Ｂ    情報処理装置
１０、１０Ａ    プロセッサ
１１    制御ユニット
１２    レジスタファイル
１３、１３Ａ  ベクトルユニット
１３Ｂ  ベクトル演算用の整数演算器
１３Ｃ  ベクトル演算用の浮動小数点数演算器
１３Ｄ  float/Int変換器
１４    スカラユニット
２１    命令用メモリ
２２    データ用メモリ
１０１    セレクタ
１０２    統計情報取得部
１０３    データ変換部
１０４    統計情報集約部
１０５    統計情報格納部
１１１    プログラムカウンタ
１１２    デコーダ
１３１    ベクトル演算用の演算器
１３２    積和演算用のアキュムレータ
１４１    スカラ用の演算器
【図１】
2019148896.tif 000003
【図２】
2019148896.tif 000004
【図３】
2019148896.tif 000005
【図４】
2019148896.tif 000006
【図５】
2019148896.tif 000007
【図６】
2019148896.tif 000008
【図７】
2019148896.tif 000009
【図８】
2019148896.tif 000010
【図９】
2019148896.tif 000011
【図１０】
2019148896.tif 000012
【図１１】
2019148896.tif 000013
【図１２】
2019148896.tif 000014
【図１３】
2019148896.tif 000015
【図１４】
2019148896.tif 000016
【図１５】
2019148896.tif 000017
【図１６】
2019148896.tif 000018
【図１７】
2019148896.tif 000019
【図１８】
2019148896.tif 000020
【図１９】
2019148896.tif 000021
【図２０】
2019148896.tif 000022
【図２１】
2019148896.tif 000023
【図２２】
2019148896.tif 000024
【図２３】
2019148896.tif 000025
【図２４】
2019148896.tif 000026
【図２５】
2019148896.tif 000027
【図２６】
2019148896.tif 000028
【図２７】
2019148896.tif 000029
【図２８】
2019148896.tif 000030
【図２９】
2019148896.tif 000031
【図３０】
2019148896.tif 000032
【図３１】
2019148896.tif 000033
【図３２】
2019148896.tif 000034
【図３３】
2019148896.tif 000035
【図３４】
2019148896.tif 000036
【図３５】
2019148896.tif 000037
【図３６】
2019148896.tif 000038
【図３７】
2019148896.tif 000039
【図３８】
2019148896.tif 000040
【図３９】
2019148896.tif 000041
【図４０】
2019148896.tif 000042
【図４１】
2019148896.tif 000043
【図４２】
2019148896.tif 000044
【図４３】
2019148896.tif 000045
【図４４】
2019148896.tif 000046
【図４５】
2019148896.tif 000047
【図４６】
2019148896.tif 000048
【図４７】
2019148896.tif 000049
【図４８】
2019148896.tif 000050
【図４９】
2019148896.tif 000051
【図５０】
2019148896.tif 000052
【図５１】
2019148896.tif 000053
【図５２】
2019148896.tif 000054
【図５３】
2019148896.tif 000055
【図５４】
2019148896.tif 000056