(57)【要約】【課題】勾配ブースティングの分岐スコアを算出するための回路規模の増加を抑制することができる学習装置および学習方法を提供する。【解決手段】決定木の学習を行う学習装置において、学習データの特徴量の各値に対応する勾配情報の累積和を出力する勾配出力部と、前記累積和から、前記決定木のノードの分岐条件を決定するために用いる分岐スコアを除算回路を用いずに算出する分岐スコア算出部と、を備える。【選択図】図２９
2020027451.tif 000002
【特許請求の範囲】
【請求項１】
決定木の学習を行う学習装置において、
学習データの特徴量の各値に対応する勾配情報の累積和を出力する勾配出力部と、
前記累積和から、前記決定木のノードの分岐条件を決定するために用いる分岐スコアを除算回路を用いずに算出する分岐スコア算出部と、
を備えた学習装置。
【請求項２】
前記分岐スコア算出部は、前記分岐条件を決定するために用いる分岐したときの良さを示す指標値の対数を前記分岐スコアとして算出する請求項１に記載の学習装置。
【請求項３】
前記分岐スコア算出部は、
前記対数のグラフを、入力である前記累積和について複数の区間に分け、
前記区間ごとに線形補間をした直線上の前記勾配出力部が出力した累積和に対応する値を前記対数の近似値として算出し、該近似値を前記分岐スコアとする請求項２に記載の学習装置。
【請求項４】
前記分岐スコア算出部は、前記対数のグラフに対して線形補間をした直線の傾きが２のべき乗で表されるように前記区間を分ける請求項３に記載の学習装置。
【請求項５】
前記分岐スコア算出部は、前記対数のグラフに対して線形補間をした直線上の点が示す前記近似値を算出するために、前記傾きの乗算処理をビットシフト処理によって行う請求項４に記載の学習装置。
【請求項６】
前記分岐スコア算出部により算出された前記特徴量に対応する前記近似値の大小を比較することによって前記分岐条件を導出する導出部を、さらに備えた請求項３〜５のいずれか一項に記載の学習装置。
【請求項７】
前記分岐スコア算出部は、前記指標値であるＧａｉｎを下記の式（１）で算出する請求項２〜６のいずれか一項に記載の学習装置。
【数１】
2020027451.tif 000039
【請求項８】
前記決定木の学習は、勾配ブースティングにより行われる請求項１〜７のいずれか一項に記載の学習装置。
【請求項９】
前記決定木のノードが終端である場合、該決定木への入力に対する出力となるリーフウェイトを除算回路を用いて算出するリーフウェイト算出部を、さらに備えた請求項１〜８のいずれか一項に記載の学習装置。
【請求項１０】
決定木の学習を行う学習装置の学習方法であって、
学習データの特徴量の各値に対応する勾配情報の累積和を出力する勾配出力ステップと、
前記累積和から、前記決定木のノードの分岐条件を決定するために用いる分岐スコアを除算回路を用いずに算出する分岐スコア算出ステップと、
を有する学習方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、学習装置および学習方法に関する。
【背景技術】
【０００２】
近年、ＡＩ（Ａｒｔｉｆｉｃｉａｌ  Ｉｎｔｅｌｌｉｇｅｎｃｅ：人工知能）に関連して一般的にも知られるようになった機械学習を用いて、大量のデータを元に人間の機能を代替する試みが各分野において広がっている。この分野は未だ日ごとに大きく発展を続けているが、現状いくつかの課題がある。その内の代表的なものは、データから汎用的な知識を取り出す汎化性能を含む精度の限界、および、その大きな計算負荷による処理速度の限界である。また、よく知られている、高性能な機械学習のアルゴリズムとして、Ｄｅｅｐ  ｌｅａｒｎｉｎｇ（ＤＬ）（ディープラーニング、深層学習）、およびその中で周辺のみに入力ベクトルを限定したＣｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ（ＣＮＮ）等が存在する。これらの手法と比較して、現状では、勾配ブースティング（例えば、ＧＢＤＴ（Ｇｒａｄｉｅｎｔ  Ｂｏｏｓｔｉｎｇ  Ｄｅｃｉｓｉｏｎ  Ｔｒｅｅ：勾配ブースティング決定木））は、特徴量の抽出が難しいため画像、音声および言語等の入力データに対しては精度が劣るものの、それ以外の構造化したデータではより良い性能が出ることが知られている。現に、データサイエンティストのコンペティションであるＫａｇｇｌｅでは、ＧＢＤＴが最もスタンダードなアルゴリズムとなっている。実社会の機械学習により解決したい課題のうち７０％は、画像、音声および言語以外の構造化されたデータと言われており、ＧＢＤＴは実世界の問題を解くためには、重要なアルゴリズムであることは間違いない。さらに、近年、決定木を用いて、画像音声等のデータの特徴抽出を行う手法も提案され始めている。
【０００３】
勾配ブースティングは、ＣＣＮ等のディープラーニングに比べて学習処理が高速である。しかし、実用上必要な作業である特徴選択、ハイパーパラメータの調整、ならびに汎化性能の評価および性能向上を目的とした、複数のモデルを組み合わせることにより性能向上を図るモデルアンサンブルおよびスタッキング等の作業では数百回を超える学習も珍しくない。したがって、比較的高速な勾配ブースティングでも計算時間が課題となる。そのため、勾配ブースティングの学習処理の高速化を目的とした研究が近年多数報告されている。
【０００４】
勾配ブースティングの学習では、累積勾配を用いて各ノードにおける分岐スコアを演算する必要があるが、当該分岐スコアを演算するためには除算器および乗算器等が必要となり、回路規模が大きくなるという問題がある。特に、学習データの特徴量の次元数が増えてくると当該問題が顕著である。
【０００５】
上述の勾配ブースティングに関連して、決定木学習の高速化を目的として、学習処理をハードロジックで実装する技術が開示されている（非特許文献１参照）。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、非特許文献１に記載された技術では、分岐スコアの演算を実現するために除算器を用いており、サンプル数が多い場合には回路規模が大きくなるという問題が依然として存在する。
【０００７】
本発明は、上述の問題点に鑑みてなされたものであって、勾配ブースティングの分岐スコアを算出するための回路規模の増加を抑制することができる学習装置および学習方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するために、決定木の学習を行う学習装置において、学習データの特徴量の各値に対応する勾配情報の累積和を出力する勾配出力部と、前記累積和から、前記決定木のノードの分岐条件を決定するために用いる分岐スコアを除算回路を用いずに算出する分岐スコア算出部と、を備えたことを特徴とする。
【発明の効果】
【０００９】
本発明によれば、勾配ブースティングの分岐スコアを算出するための回路規模の増加を抑制することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、決定木モデルの一例を示す図である。
【図２】図２は、第１の実施形態に係る学習識別装置のモジュール構成の一例を示す図である。
【図３】図３は、ポインタメモリの構成の一例を示す図である。
【図４】図４は、ラーニングモジュールのモジュール構成の一例を示す図である。
【図５】図５は、第１の実施形態に係る学習識別装置の初期化時のモジュールの動作を示す図である。
【図６】図６は、第１の実施形態に係る学習識別装置のデプス０、ノード０のノードパラメータを決定する場合のモジュールの動作を示す図である。
【図７】図７は、第１の実施形態に係る学習識別装置のデプス０、ノード０の分岐時のモジュールの動作を示す図である。
【図８】図８は、第１の実施形態に係る学習識別装置のデプス１、ノード０のノードパラメータを決定する場合のモジュールの動作を示す図である。
【図９】図９は、第１の実施形態に係る学習識別装置のデプス１、ノード０の分岐時のモジュールの動作を示す図である。
【図１０】図１０は、第１の実施形態に係る学習識別装置のデプス１、ノード１のノードパラメータを決定する場合のモジュールの動作を示す図である。
【図１１】図１１は、第１の実施形態に係る学習識別装置のデプス１、ノード１の分岐時のモジュールの動作を示す図である。
【図１２】図１２は、第１の実施形態に係る学習識別装置のデプス１、ノード１のノードパラメータを決定の結果、分岐しない場合のモジュールの動作を示す図である。
【図１３】図１３は、第１の実施形態に係る学習識別装置において決定木の学習が完了した場合に全サンプルデータのステート情報を更新するときのモジュールの動作を示す図である。
【図１４】図１４は、第１の実施形態の変形例に係る学習識別装置のモデルメモリの構成の一例を示す図である。
【図１５】図１５は、第１実施形態の変形例に係る学習識別装置のクラシフィケーションモジュールの構成の一例を示す図である。
【図１６】図１６は、データパラレルを適用した学習識別装置のモジュール構成の一例を示す図である。
【図１７】図１７は、ラーニングモジュールの詳細なモジュール構成の一例を示す図である。
【図１８】図１８は、ラーニングモジュールの勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。
【図１９】図１９は、ラーニングモジュールの累積勾配算出モジュールのモジュール構成の一例を示す図である。
【図２０】図２０は、データパラレルにした場合の勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。
【図２１】図２１は、第２の実施形態に係る学習識別装置のラーニングモジュールのモジュール構成の一例を示す図である。
【図２２】図２２は、第２の実施形態のラーニングモジュールの勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。
【図２３】図２３は、第２の実施形態のラーニングモジュールにおいて分割数を３とした場合の勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。
【図２４】図２４は、第２の実施形態のラーニングモジュールの累積勾配算出モジュールのモジュール構成の一例を示す図である。
【図２５】図２５は、第２の実施形態に係る学習識別装置において特徴量の種類を２とした場合のラーニングモジュールのモジュール構成の一例を示す図である。
【図２６】図２６は、第２の実施形態のラーニングモジュールにおいて特徴量の種類を２とした場合の勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。
【図２７】図２７は、第３の実施形態のラーニングモジュールの算出モジュールのモジュール構成の概要の一例を示す図である。
【図２８】図２８は、算出モジュールを除算器を用いた構成で実現した場合の一例を示す図である。
【図２９】図２９は、第３の実施形態のラーニングモジュールの算出モジュールを除算器を用いない構成で実現した場合の一例を示す図である。
【図３０】図３０は、第３の実施形態のラーニングモジュールのリーフウェイト算出モジュールのモジュール構成の一例を示す図である。
【図３１】図３１は、第３の実施形態の算出モジュールの近似モジュールのモジュール構成の一例を示す図である。
【図３２】図３２は、対数曲線の線形補間を説明する図である。
【図３３】図３３は、第３の実施形態の近似モジュールの対数近似モジュールのモジュール構成の一例を説明する図である。
【図３４】図３４は、線形補間の基準値を説明する図である。
【図３５】図３５は、学習データについての対数近似の有無によるＡＵＣの比較結果を示すグラフである。
【図３６】図３６は、識別データについての対数近似の有無によるＡＵＣの比較結果を示すグラフである。
【発明を実施するための形態】
【００１１】
以下に、図１〜図３４を参照しながら、本発明に係る学習装置および学習方法の実施形態を詳細に説明する。また、以下の実施形態によって本発明が限定されるものではなく、以下の実施形態における構成要素には、当業者が容易に想到できるもの、実質的に同一のもの、およびいわゆる均等の範囲のものが含まれる。さらに、以下の実施形態の要旨を逸脱しない範囲で構成要素の種々の省略、置換、変更および組み合わせを行うことができる。
【００１２】
［第１の実施形態］
（ＧＢＤＴのロジックについて）
高性能な機械学習のアルゴリズムとしてのＤＬにおいて、識別器は様々なハードロジックによる実装が試みられ、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）での処理と比較して電力効率が高いことが分かっている。ただし、ＤＬのうち特にＣＮＮの場合には、ＧＰＵのアーキテクチャが非常にマッチするため、速度的には、ロジック実装したＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）の方がＧＰＵに比べて、識別が速いというわけではない。それに対して、ＧＢＤＴのような決定木系のアルゴリズムについて、ＦＰＧＡによるハードロジックの実装が試行され、ＧＰＵよりも高速な結果が報告されている。これは、後述するように、決定木系のアルゴリズムはそのデータ配列の特徴上、ＧＰＵのアーキテクチャに適さないためである。
【００１３】
また、学習に関しては、識別よりも世の中の検討は遅れており、ＤＬにおいてもほとんど現状報告がなく、決定木系では報告は少ない状況である。その中でもＧＢＤＴの学習は、現状どこからもまだ報告がなく、現在では未開拓の分野であると考えられる。精度のよい識別モデルを得るためには、学習時に特徴量の選択および設計、ならびに学習アルゴリズムのハイパーパラメータの選択を行うため、莫大な試行回数が必要となり、特に大量の学習データがある場合には、学習処理のスピードの高さは現実的に最終的なモデルの精度について非常に大きく作用する。さらに、ロボティクス、ＨＦＴ（Ｈｉｇｈ  Ｆｒｅｑｕｅｎｃｙ  Ｔｒａｄｉｎｇ)、およびＲＴＢ（Ｒｅａｌ−Ｔｉｍｅ  Ｂｉｄｄｉｎｇ）のように環境変化への追従のリアルタイム性が求められる分野に関しては、スピードの速さが性能へと直結する。そのため、精度の高いＧＢＤＴにおいて、高速な学習処理が出来た場合には、結果的にそれを利用したシステムの性能を大きく向上させることができると考えられる。
【００１４】
（ＧＢＤＴのＦＰＧＡに対する親和性）
決定木またはＧＢＤＴが、なぜＧＰＵでは速くならないか、および、なぜＦＰＧＡだと速くなるかについて、ＧＢＤＴのＦＰＧＡに対する親和性の観点から述べる。
【００１５】
まず、ＧＢＤＴがブースティングを用いたアルゴリズムであることの観点から述べる。決定木の中でも、アンサンブル学習を用いたＲａｎｄｏｍ  Ｆｏｒｅｓｔ（ＲＦ）の場合は、木の間に依存関係がないため、ＧＰＵでも並列化しやすいが、ＧＢＤＴはブースティングを用いて、多数の木を連結する方法であり、一個前の木の結果が出ないと、次の木の学習を開始することができない。そのため、処理としてシリアルな処理であり、一本ずつの木をいかに速く学習するかがキーとなる。これに対して、ＲＦでは、一本あたりは遅くても、並列に多数の木の学習を速くすることで、全体の学習を速くするという選択肢をとり得る。そのため、ＧＰＵを用いた場合にも次に述べるＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のアクセスレイテンシの問題をある程度隠蔽することが可能であると考えられる。
【００１６】
次に、ＧＰＵデバイスのＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）へのアクセス速度の限界（特にランダムアクセス)の観点から述べる。ＦＰＧＡに内蔵のＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）は、ＦＰＧＡ内のＲＡＭのバス幅を非常に大きくできるため、ミドルレンジのＦＰＧＡである、例えば、Ｘｉｌｉｎｘ社のＸＣ７ｋ３２５Ｔを用いた場合でも、以下の様に、３．２［ＴＢ／ｓｅｃ］に及ぶ。なお、内蔵ＲＡＭの容量は１６［Ｍｂ］である。
【００１７】
BRAM  445個  ×  36bit  ×  100MHz  ×  2ポート  =  445*36*2*100*10^6/10^12  =  3.2TB/sec
【００１８】
また、ハイエンドのＦＰＧＡである、Ｘｉｌｉｎｘ社のＶＵ９Ｐを用いた場合、６．９［ＴＢ／ｓｅｃ］である。なお、内蔵ＲＡＭの容量は２７０［Ｍｂ］である。
【００１９】
URAM  960個  ×  36bit  ×  100MHz  ×  2ポート  =  960*36*2*100*10^6/10^12  =  6.9TB/sec
【００２０】
これらの値は、クロック周波数を１００［ＭＨｚ］とした場合であるが、実際には、回路構成を工夫すると、２００〜５００［ＭＨｚ］程度での動作が考えられ、限界の帯域は数倍となる。これに対して、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に接続されているＲＡＭは現世代では、ＤＤＲ４（Ｄｏｕｂｌｅ−Ｄａｔａ−Ｒａｔｅ４）であるが、下記のようにＤＩＭＭ（Ｄｕａｌ  Ｉｎｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）１枚での帯域は２５．６［ＧＢ／ｓｅｃ］に留まる。４枚のインタリーブ構成（２５６ビット幅)にしたとしても、１００［ＧＢ／ｓｅｃ］程度である。ＤＤＲ４のチップ規格がＤＤＲ４−３２００（バス幅６４ビット、ＤＩＭＭ１枚）の場合、以下のようになる。
【００２１】
200MHz  ×  2(DDR)  ×  64  =  200*10^6*2*64/10^9  =  25.6GB/sec
【００２２】
ＧＰＵに搭載されているＧＤＤＲ５（Ｇｒａｐｈｉｃｓ  Ｄｏｕｂｌｅ−Ｄａｔａ−Ｒａｔｅ５)では、ＤＤＲ４の帯域よりも４倍程度大きくなっているが、それでも、最大で４００［ＧＢ／ｓｅｃ］程度である。
【００２３】
このように、ＦＰＧＡ内のＲＡＭと、ＧＰＵおよびＣＰＵでの外部メモリとは、帯域に大きな差がある。さらに、ここまでは、アドレスに対してシーケンシャルなアクセスの場合に関して述べてきたが、これ以上に大きく効いてくるのが、ランダムアクセス時のアクセスの時間である。ＦＰＧＡ内蔵のＲＡＭはＳＲＡＭであるため、シーケンシャルアクセスでもランダムアクセスでもアクセスレイテンシは１クロックであるが、ＤＤＲ４およびＧＤＤＲ５は、ＤＲＡＭであり、センスアンプの都合上、異なるカラムにアクセスした場合には、レイテンシが大きくなる。例えば、ＤＤＲ４のＲＡＭにおいて、代表的なＣＡＳレイテンシ（Ｃｏｌｕｍｎ  Ａｄｄｒｅｓｓ  Ｓｔｒｏｂｅ  ｌａｔｅｎｃｙ）は１６クロックであり、簡単には、シーケンシャルアクセスと比較して、１／１６しかスループットが出ない計算となる。
【００２４】
ＣＮＮの場合には、隣接した画素のデータを処理していくので、ランダムアクセスのレイテンシは大きく問題とならないが、決定木の場合には、分岐を続けていくと、枝ごとに元のデータのアドレスがどんどんと不連続になり、基本的にランダムアクセスとなる。そのため、データをＤＲＡＭに置いた場合、そのスループットがボトルネックとなり、速度が大きく劣化する。ＧＰＵにはそのような場合の性能劣化を抑えるために、キャッシュが存在するが、基本的に決定木はデータを総なめしていくアルゴリズムなので、データアクセスに局所性がなくキャッシュの効果が非常に効きにくい。なお、ＧＰＵの構造では、ＧＰＵには、演算コア（ＳＭ）毎に割り振られたＳＲＡＭからなるシェアードメモリが存在し、これを使うと高速な処理が可能である場合があるが、１個のＳＭあたり１６〜４８［ｋＢ］と少量であり、かつ、ＳＭ間をまたぐアクセスの場合には、大きなレイテンシが発生する。現在の高価で大規模なＧＰＵである、Ｎｖｉｄｉａ  Ｋ８０の場合のシェアードメモリの容量の試算を以下に示す。
【００２５】
K80  =  2  ×  13  SMX  =  26  SMX  =  4992  CUDAコア
26  ×  48  ×  8  =  9Mb
【００２６】
このように、数十万円する大規模なＧＰＵでもシェアードメモリはたった９［Ｍｂ］しか存在せず、容量が少な過ぎる。さらに、ＧＰＵの場合は、上述のように、処理を行うＳＭは他のＳＭのシェアードメモリには直接アクセスできないことに起因し、決定木の学習に利用する場合には、高速なコーディングが困難という制約も存在する。
【００２７】
以上のように、データがＦＰＧＡ上のＳＲＡＭに載るという前提で、ＦＰＧＡはＧＰＵに比べてＧＢＤＴの学習アルゴリズムを高速に実装可能であると考えられる。
【００２８】
（ＧＢＤＴのアルゴリズム）
図１は、決定木モデルの一例を示す図である。以下、式（１）〜式（２２）および図１を参照してＧＢＤＴの基本論理を説明する。
【００２９】
ＧＢＤＴは、教師あり学習の一手法であり、教師あり学習は以下の式（１）に示すように、学習データに対するフィッティングの良さを表すロス関数Ｌ（θ）と、学習したモデルの複雑さを表す正則化項Ω（θ）とからなる目的関数ｏｂｊ（θ）を何らかの尺度で最適化する処理である。正則化項Ω（θ）は、モデル（決定木）が複雑になり過ぎることを防ぐ、すなわち、汎化性能を高める役割を有する。
【数１】
2020027451.tif 000003
【００３０】
式（１）の第１項のロス関数は、例えば、以下の式（２）に示すように、サンプルデータ（学習データ）ごとに誤差関数ｌより計算されるロスを足し合わせたものである。ここでｎはサンプルデータ数、ｉはサンプル番号、ｙはラベル、モデルのｙ（ハット）は予測値である。
【数２】
2020027451.tif 000004
【００３１】
ここで、誤差関数ｌは、例えば、以下の式（３）および式（４）に示すような二乗誤差関数またはロジスティックロス関数等が用いられる。
【数３】
2020027451.tif 000005
【数４】
2020027451.tif 000006
【００３２】
また式（１）の第２項の正則化項Ω（θ）は、例えば、以下の式（５）に示すようなパラメータθの二乗ノルム等が用いられる。ここで、λは正則化の重みを表すハイパーパラメータである。
【数５】
2020027451.tif 000007
【００３３】
ここで、ＧＢＤＴの場合について考える。まず、ＧＢＤＴのｉ番目のサンプルデータｘｉに対する予測値は、以下の式（６）のように表現できる。
【数６】
2020027451.tif 000008
【００３４】
ここで、Ｋは決定木の総数、ｋは決定木の番号、ｆｋ（）はｋ番目の決定木の出力、ｘｉは入力されるサンプルデータの特徴量である。これより、ＧＢＤＴもＲＦ等と同じく、各決定木の出力を足し合わせたものを最終的な出力としていることがわかる。また、パラメータθは、θ＝｛ｆ１，ｆ２，・・・，ｆＫ｝である。以上より、ＧＢＤＴの目的関数は以下の式（７）のように表される。
【数７】
2020027451.tif 000009
【００３５】
上記の目的関数について学習を行うが、決定木モデルではニューラルネット等の学習で用いられるＳＧＤ（Ｓｔｏｃｈａｓｔｉｃ  Ｇｒａｄｉｅｎｔ  Ｄｅｓｃｅｎｔ：確率的勾配降下法）等の手法は使えない。そこでＡｄｄｉｔｉｖｅ  Ｔｒａｉｎｉｎｇ（ブースティング）を用いて学習を行う。Ａｄｄｉｔｉｖｅ  Ｔｒａｉｎｉｎｇでは、あるラウンド（学習回数、決定木モデル数）ｔにおける予測値を以下の式（８）のように表現する。
【数８】
2020027451.tif 000010
【００３６】
式（８）より、あるラウンドｔにおいて、決定木（の出力）ｆｔ（ｘｉ）を求める必要があることが分かる。逆に、あるラウンドｔでは他のラウンドについて考える必要はない。そこで、以下では、ラウンドｔについて考える。ラウンドｔでの目的関数は以下の式（９）のように表される。
【数９】
2020027451.tif 000011
【００３７】
ここで、ラウンドｔにおける目的関数のテーラー展開（二次の項までで打ち切り）は以下の式（１０）のようになる。
【数１０】
2020027451.tif 000012
【００３８】
ここで、式（１０）において、勾配情報ｇｉ、ｈｉは以下の式（１１）で表されるものである。
【数１１】
2020027451.tif 000013
【００３９】
式（１０）において定数項を無視すると、ラウンドｔでの目的関数は、以下の式（１２）のようになる。
【数１２】
2020027451.tif 000014
【００４０】
この式（１２）により、ラウンドｔでの目的関数は、誤差関数を１ラウンド前の予測値で１階微分および２階微分したもの、および正則化項で表されるので、１階微分および２階微分が求まる誤差関数ならば適用が可能なことが分かる。
【００４１】
ここで、決定木モデルについて考える。図１に決定木モデルの例を示す。決定木モデルは、ノードとリーフとから構成され、ノードではある分岐条件を元に入力を次のノードまたはリーフへ入力し、リーフにはリーフウェイトがあり、これが入力に対する出力となる。例えば、図１では、「リーフ２」のリーフウェイトＷ２が「−１」であることを示している。
【００４２】
また、決定木モデルは以下の式（１３）に示すように定式化される。
【数１３】
2020027451.tif 000015
【００４３】
式（１３）において、ｗはリーフウェイト、ｑは木の構造を表す。つまり、入力（サンプルデータｘ）は木の構造ｑによりいずれかのリーフに割り当てられ、そのリーフのリーフウェイトが出力されることになる。
【００４４】
ここで、決定木モデルの複雑さを以下の式（１４）のように定義する。
【数１４】
2020027451.tif 000016
【００４５】
式（１４）において、第１項はリーフの数による複雑さを、第２項はリーフウェイトの二乗ノルムである。また、γは正則化項の重要度を制御するハイパーパラメータである。以上より、ラウンドｔでの目的関数について、以下の式（１５）のように整理する。
【数１５】
2020027451.tif 000017
【００４６】
ただし、式（１５）において、Ｉｊ、Ｇｊ、Ｈｊは、以下の式（１６）のように表される。
【数１６】
2020027451.tif 000018
【００４７】
式（１５）より、あるラウンドｔでの目的関数はリーフウェイトｗに関する二次関数であり、一般に二次関数の最小値、およびその時の条件は、以下の式（１７）で表される。
【数１７】
2020027451.tif 000019
【００４８】
つまり、あるラウンドｔの決定木の構造ｑが決まったときに、その目的関数およびリーフウェイトは以下の式（１８）のようになる。
【数１８】
2020027451.tif 000020
【００４９】
ここまでで、あるラウンドで決定木の構造が決まったときのリーフウェイトの算出が可能となった。以降は、決定木の構造の学習手順について述べる。
【００５０】
決定木の構造の学習方法の１つに貪欲法（Ｇｒｅｅｄｙ  Ａｌｇｏｒｉｔｈｍ）がある。貪欲法では、木構造を深さ０からスタートし、各ノードで分岐スコア（Ｇａｉｎ）を計算し分岐するか否かを判断して決定木の構造を学習するアルゴリズムである。分岐スコアは以下の式（１９）で求められる。
【数１９】
2020027451.tif 000021
【００５１】
ここで、ＧＬ、ＨＬは左ノードに分岐したサンプルの勾配情報の和、ＧＲ、ＨＲは右ノードに分岐したサンプルの勾配情報の和、γは正則化項である。式（１９）の［］内の第１項は左ノードに分岐したサンプルデータのスコア（目的関数）、第２項は右ノードに分岐したサンプルデータのスコア、第３項は分岐しない場合のスコアであり、分岐による目的関数の改善度合いを表している。
【００５２】
上述の式（１９）に示す分岐スコアは、ある特徴量のあるしきい値で分岐した時の良さを表すが、これ単体ではどのような条件が最適か判断できない。そこで、貪欲法では、全ての特徴量の全てのしきい値候補で分岐スコアを求め、分岐スコアが最大となる条件を探すものである。貪欲法は上述のように、アルゴリズムとしては非常にシンプルであるが、全ての特徴量の全てのしきい値候補で分岐スコアを求めるため計算コストが高い。そこで後述するＸＧＢｏｏｓｔ等のライブラリでは、性能を維持しつつ、計算コストを低減する工夫がなされている。
【００５３】
（ＸＧＢｏｏｓｔについて）
以下、ＧＢＤＴのライブラリとして周知なＸＧＢｏｏｓｔについて述べる。ＸＧＢｏｏｓｔの学習アルゴリズムでは、しきい値候補の削減、および欠損値の扱いの２点について工夫がされている。
【００５４】
まず、しきい値候補の削減について説明する。上述した貪欲法は計算コストが高いという課題があった。ＸＧＢｏｏｓｔでは、Ｗｅｉｇｈｔｅｄ  Ｑｕａｎｔｉｌｅ  Ｓｋｅｔｃｈという方法でしきい値候補数を削減している。これは、分岐スコア（Ｇａｉｎ）の計算では、左右に別れるサンプルデータの勾配情報の和が重要であり、勾配情報の和が一定割合変化するしきい値のみを探索候補とするものである。具体的にはサンプルの二次勾配であるｈを用いている。特徴量の次元をｆとすると、特徴量およびサンプルデータの二次勾配ｈの集合を、以下の式（２０）のように表現する。
【数２０】
2020027451.tif 000022
【００５５】
また、ランク関数ｒｆを以下の式（２１）のように定義する。
【数２１】
2020027451.tif 000023
【００５６】
ここで、ｚはしきい値候補である。式（２１）に示すランク関数ｒｆは、あるしきい値候補より小さいサンプルデータの二次勾配の和が全サンプルデータの二次勾配の和に占める割合を意味している。最終的には、次元ｆで示される特徴量について、あるしきい値候補の集合｛ｓｆ１，ｓｆ２，・・・，ｓｆｌ｝を求める必要があり、これは以下の式（２２）で求める。
【数２２】
2020027451.tif 000024
【００５７】
ここでεはしきい値候補の削減度合いを決めるパラメータであり、おおよそ１／ε個のしきい値候補が得られる。
【００５８】
Ｗｅｉｇｈｔｅｄ  Ｑｕａｎｔｉｌｅ  Ｓｋｅｔｃｈは、決定木の最初のノードで（全サンプルデータに対して一括で）行うグローバルと、ノードごとに（当該ノードに割り当てられたサンプルについて毎回）行うローカルの２パターンが考えられる。汎化性能の面ではローカルの方がよいという結果が出ているので、ＸＧＢｏｏｓｔではローカルを採用している。
【００５９】
次に、欠損値の扱いについて説明する。入力されるサンプルデータの欠損値の扱いはＧＢＤＴおよび決定木に限らず、機械学習分野において一般的に有効な手法はない。欠損値を、平均値、中央値、もしくは協調フィルタ等で補完する方法、または欠損値が多い特徴量を除外する方法等があるが、性能の面で多くのケースで成功するわけではない。しかし、構造化データは欠損値を含むことが多く、実用上は何らかの対応が求められる。
【００６０】
ＸＧＢｏｏｓｔは、欠損値を含むサンプルデータを直接扱えるように学習アルゴリズムが工夫されている。これは、ノードの分岐スコアを求める際に、欠損値のデータを全て左右どちらかのノードに割り当てた時のスコアを求める方法である。また、上述のＷｅｉｇｈｔｅｄ  Ｑｕａｎｔｉｌｅ  Ｓｋｅｔｃｈを行う場合は、欠損値を含むサンプルデータを除外した集合に対してしきい値候補を求めるものとすればよい。
【００６１】
（ＬｉｇｈｔＧＢＭについて）
次に、ＧＢＤＴのライブラリであるＬｉｇｈｔＧＢＭについて述べる。ＬｉｇｈｔＧＢＭは前処理にｂｉｎｎｉｎｇと呼ばれる特徴量の量子化を採用し、分岐スコアの計算にＧＰＵを利用した高速なアルゴリズムを採用している。ＬｉｇｈｔＧＢＭはＸＧＢｏｏｓｔと比較して性能は同程度で学習速度が数倍速く、近年利用者が増えてきている。
【００６２】
まず、特徴量の量子化について説明する。分岐スコアは、データセットが大規模であれば大量のしきい値候補に対して計算が必要である。ＬｉｇｈｔＧＢＭは、学習の前処理として、特徴量を量子化することでしきい値候補数を削減している。また、量子化することでＸＧＢｏｏｓｔのようにノードごとにしきい値候補の値および数が変わることがなく、ＧＰＵを利用する場合に必須の処理となっている。
【００６３】
特徴量の量子化についてはｂｉｎｎｉｎｇという名前で様々な研究がなされており、ＬｉｇｈｔＧＢＭでは、特徴量をｋ個のビンに分割しており、しきい値候補はｋ個だけとなる。ｋは２５５、６３、１５等であり、データセットによって性能または学習速度は異なる。
【００６４】
また、特徴量を量子化したことで分岐スコアの計算が簡易になる。具体的には、しきい値候補が単に量子化された値になる。そのため、各特徴量について一次勾配および二次勾配のヒストグラムを作成し、各ビン（量子化された値）について分岐スコアを求めればよいことになる。これを特徴量ヒストグラムと呼んでいる。
【００６５】
次に、ＧＰＵを利用した分岐スコアの計算について説明する。分岐スコアの計算自体は特徴量が量子化されているため最大でも２５６パターンであるが、サンプルデータ数はデータセットによっては数万件を超えるため、ヒストグラム作成が学習時間に対して支配的となる。上述で述べたように、分岐スコアの計算では、特徴量ヒストグラムを求める必要がある。ＧＰＵを利用した場合、複数のスレッドが同一のヒストグラムを更新する必要があるが、このとき同一のビンを更新する可能性がある。そのため、アトミック演算を使用する必要があり、同一のビンを更新する割合が高いとパフォーマンスが低下する。そこで、ＬｉｇｈｔＧＢＭでは、ヒストグラムの作成の際に、一次勾配および二次勾配のどちらのヒストグラムから値を更新するかをスレッドごとに分けており、これによって同一のビンを更新する頻度を下げている。
【００６６】
（学習識別装置の構成）
図２は、実施形態に係る学習識別装置のモジュール構成の一例を示す図である。図３は、ポインタメモリの構成の一例を示す図である。図４は、ラーニングモジュールのモジュール構成の一例を示す図である。図２〜図４を参照しながら、本実施形態に係る学習識別装置１のモジュール構成について説明する。
【００６７】
図２に示すように、本実施形態に係る学習識別装置１は、ＣＰＵ１０と、ラーニングモジュール２０（学習部）と、データメモリ３０と、モデルメモリ４０と、クラシフィケーションモジュール５０（識別部）と、を備えている。このうち、ラーニングモジュール２０、データメモリ３０、モデルメモリ４０およびクラシフィケーションモジュール５０は、ＦＰＧＡにより構成されている。ＣＰＵ１０と、当該ＦＰＧＡとはバスを介してデータ通信可能となっている。なお、学習識別装置１は、図２に示す各構成要素だけではなく、他の構成要素、例えば、ＣＰＵ１０のワークエリアとなるＲＡＭ、ＣＰＵ１０が実行するプログラム等を記憶したＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、各種データ（プログラム等）を記憶した補助記憶装置、および外部装置と通信を行う通信Ｉ／Ｆ等を備えているものとしてもよい。
【００６８】
ＣＰＵ１０は、全体でＧＢＤＴの学習を制御する演算装置である。ＣＰＵ１０は、制御部１１を有する。制御部１１は、ラーニングモジュール２０、データメモリ３０、モデルメモリ４０およびクラシフィケーションモジュール５０の各モジュールを制御する。制御部１１は、ＣＰＵ１０で実行されるプログラムによって実現される。
【００６９】
ラーニングモジュール２０は、決定木を構成するノード毎の最適な特徴量の番号（以下、「特徴量番号」と称する場合がある）、およびしきい値を算出し、当該ノードがリーフの場合は、リーフウェイトを算出し、モデルメモリ４０に書き込むハードウェアモジュールである。また、図４に示すように、ラーニングモジュール２０は、ゲイン算出モジュール２１＿１、２１＿２、・・・、２１＿ｎ（ゲイン算出部）と、最適条件導出モジュール２２（導出部）と、を備えている。ここで、ｎは、少なくともサンプルデータ（学習データ、識別データ双方含む）の特徴量の数以上の数である。なお、ゲイン算出モジュール２１＿１、２１＿２、・・・、２１＿ｎについて、任意のゲイン算出モジュールを示す場合、または総称する場合、単に「ゲイン算出モジュール２１」と称するものとする。
【００７０】
ゲイン算出モジュール２１は、入力されるサンプルデータに含まれる特徴量のうち対応する特徴量について、各しきい値における分岐スコアを、上述の式（１９）を用いて算出するモジュールである。ここで、サンプルデータのうち学習データには、特徴量の他、ラベル（真の値）が含まれ、サンプルデータのうち識別データには、特徴量が含まれるが、ラベルは含まれていない。また、各ゲイン算出モジュール２１は、一度（１クロック）で入力されたすべての特徴量について、それぞれにそのヒストグラムを演算・格納するメモリを有し、全特徴量を並列に演算する。そのヒストグラムの結果より、各特徴量のゲインを並列に算出する。これによって、一度に、または同時に全特徴量に対する処理が可能となるので、学習処理の速度を飛躍的に向上させることが可能となる。このように、並列に全部の特徴量を読み出し、処理していく方法をフィーチャパラレル（Ｆｅａｔｕｒｅ  Ｐａｒａｌｌｅｌ）と呼ぶ。なお、この方法を実現するためには、データメモリは一度（１クロック）ですべての特徴量を読み出すことができる必要がある。そのため、通常の３２ビットや２５６ビット幅のデータ幅を持つメモリでは実現できない。また、ソフトウエアでは、通常ＣＰＵの一度に扱えるデータのビット数は６４ビットにとどまり、特徴量数が１００、各特徴量のビット数が８ビットだとしても８０００ビットが必要となるのに対して、全く対応できない。そのため、従来は、メモリのアドレス毎（例えば、ＣＰＵが扱える６４ビット幅）に別の特徴量を格納しておき、特徴量すべてでは、複数のアドレスにまたがって保存される方法が取られていた。それに対して、本方法では、メモリの１アドレスにすべての特徴量を格納し、１アクセスで全特徴量を読み出す点が新規の技術内容である。
【００７１】
上述のように、ＧＢＤＴでは決定木の学習についての並列化はできない。そのため、いかに一本ずつの決定木を速く学習するかが、学習処理の速度に関して支配的となる。一方、アンサンブルな学習を行うＲＦでは、決定木の間の依存関係は学習時にないので、決定木ごとの学習処理の並列化は容易であるが、一般的にＧＢＤＴに対して精度が劣る。上述のように、ＲＦよりも精度の高いＧＢＤＴの学習について、上述のようなフィーチャパラレル（Ｆｅａｔｕｒｅ  Ｐａｒａｌｌｅｌ）を適用することで、決定木の学習処理の速度を向上させることができる。
【００７２】
ゲイン算出モジュール２１は、算出した分岐スコアを最適条件導出モジュール２２へ出力する。
【００７３】
最適条件導出モジュール２２は、各ゲイン算出モジュール２１により出力された各特徴量に対応する各分岐スコアを入力し、分岐スコアが最大となる特徴量の番号（特徴量番号）およびしきい値を導出するモジュールである。最適条件導出モジュール２２は、導出した特徴量番号およびしきい値を、対応するノードの分岐条件データ（ノードのデータの一例）として、モデルメモリ４０へ書き込む。
【００７４】
データメモリ３０は、各種データを格納するＳＲＡＭである。データメモリ３０は、ポインタメモリ３１と、フィーチャメモリ３２と、ステートメモリ３３と、を備えている。
【００７５】
ポインタメモリ３１は、フィーチャメモリ３２で格納されているサンプルデータの格納先アドレスを記憶するメモリである。ポインタメモリ３１は、図３に示すように、バンクＡ（バンク領域）と、バンクＢ（バンク領域）とを有する。なお、バンクＡおよびバンクＢの２バンクに分割して、サンプルデータの格納先アドレスを記憶する動作の詳細については、図５〜図１３で後述する。なお、ポインタメモリ３１は、３つ以上のバンクを有することを制限するものではない。
【００７６】
フィーチャメモリ３２は、サンプルデータ（学習データ、識別データを含む）を格納するメモリである。
【００７７】
ステートメモリ３３は、ステート情報（上述のｗ、ｇ、ｈ）およびラベル情報を記憶するメモリである。
【００７８】
モデルメモリ４０は、決定木のノード毎の分岐条件データ（特徴量番号、しきい値）、そのノードがリーフであるか否かを示すリーフフラグ（フラグ情報、ノードのデータの一例）、および、そのノードがリーフである場合におけるリーフウェイトを記憶するＳＲＡＭである。
【００７９】
クラシフィケーションモジュール５０は、ノードごと、決定木ごとにサンプルデータを振り分けるハードウェアモジュールである。また、クラシフィケーションモジュール５０は、ステート情報（ｗ，ｇ，ｈ）を計算して、ステートメモリ３３に書き込む。
【００８０】
なお、クラシフィケーションモジュール５０は、上述のように学習処理におけるサンプルデータ（学習データ）の識別（分岐）だけでなく、サンプルデータ（識別データ）に対する識別処理においても、同一のモジュール構成で、当該識別データに対する識別を行うことが可能である。また、識別処理時にも、一括して特徴量をすべて読み込むことにより、クラシフィケーションモジュール５０による処理をパイプライン化することができ、クロックごとに１つのサンプルデータの識別をすることまで処理の高速化が可能となる。一方、上述のように一括で読み込むことができない場合、どこの特徴量が必要になるかは、各ノードに分岐してみないとわからないため、毎回該当する特徴量のアドレスにアクセスする形態ではパイプライン化ができないことになる。
【００８１】
また、上述のクラシフィケーションモジュール５０を複数備えるものとし、複数の識別データを分割（データパラレル（Ｄａｔａ  Ｐａｒａｌｌｅｌ））して、各クラシフィケーションモジュール５０に分配してそれぞれに識別処理をさせることによって、識別処理を高速化させることもできる。
【００８２】
（学習識別装置の学習処理）
以下、図５〜図１３を参照しながら、学習識別装置１の学習処理について具体的に説明する。
【００８３】
＜初期化＞
図５は、実施形態に係る学習識別装置の初期化時のモジュールの動作を示す図である。図５に示すように、まず、制御部１１は、ポインタメモリ３１を初期化する。例えば、図５に示すように、制御部１１は、ポインタメモリ３１のバンクＡに対して、サンプルデータ（学習データ）のフィーチャメモリ３２におけるアドレスを、学習データの数だけ順番に（例えば、アドレスの低い方から順に）書き込む。
【００８４】
なお、学習データのすべてを利用（すべてのアドレスを書き込み）することに限定されるものではなく、いわゆるデータサブサンプリングによって、所定の乱数に従った確率に基づいてランダムに選択した学習データを用いる（当該選択した学習データのアドレスを書き込む）ものとしてもよい。例えば、データサブサンプリングが０．５の場合、乱数に従った半分の確率で学習データの全アドレスのうち、半分のアドレスがポインタメモリ３１（ここではバンクＡ）に書き込まれるものとしてもよい。乱数の発生には、ＬＦＳＲ（Ｌｉｎｅａｒ  Ｆｅｅｄｂａｃｋ  Ｓｈｉｆｔ  Ｒｅｇｉｓｔｅｒ：線形帰還シフトレジスタ）により作成された擬似乱数が使用可能である。
【００８５】
また、学習に使用する学習データのうちすべての特徴量を使用することに限定されるものではなく、いわゆるフィーチャサブサンプルによって、上述と同様の乱数に従った確率に基づいてランダムに選択（例えば、半分を選択）した特徴量のみを使用するものとしてもよい。この場合、例えば、フィーチャサブサンプルにより選択された特徴量以外の特徴量のデータとしては、フィーチャメモリ３２から定数が出力されるものとすればよい。これによって、未知のデータ（識別データ）に対する汎化性能が向上するという効果がある。
【００８６】
＜デプス０・ノード０の分岐条件データの決定＞
図６は、実施形態に係る学習識別装置のデプス０、ノード０のノードパラメータを決定する場合のモジュールの動作を示す図である。なお、決定木の一番上の階層を「デプス０」、そこから下の階層を順に「デプス１」、「デプス２」、・・・と称するものとし、特定の階層の一番左のノードを「ノード０」、そこから右のノードを順に「ノード１」、「ノード２」、・・・と称するものとする。
【００８７】
図６に示すように、まず、制御部１１は、ラーニングモジュール２０へ開始アドレスおよび終了アドレスを送信し、トリガによりラーニングモジュール２０による処理を開始させる。ラーニングモジュール２０は、開始アドレスおよび終了アドレスに基づいて、ポインタメモリ３１（バンクＡ）から対象とする学習データのアドレスを指定し、当該アドレスによって、フィーチャメモリ３２から学習データ（特徴量）を読み出し、ステートメモリ３３からステート情報（ｗ，ｇ，ｈ）を読み出す。
【００８８】
この場合、上述したように、ラーニングモジュール２０の各ゲイン算出モジュール２１は、対応する特徴量のヒストグラムを計算し、それぞれ自身のＳＲＡＭに格納し、その結果に基づいて各しきい値における分岐スコアを算出する。そして、ラーニングモジュール２０の最適条件導出モジュール２２は、各ゲイン算出モジュール２１により出力された各特徴量に対応する各分岐スコアを入力し、分岐スコアが最大となる特徴量の番号（特徴量番号）およびしきい値を導出する。そして、最適条件導出モジュール２２は、導出した特徴量番号およびしきい値を、対応するノード（デプス０、ノード０）の分岐条件データとして、モデルメモリ４０へ書き込む。この際、最適条件導出モジュール２２は、ノード（デプス０、ノード０）からさらに分岐されることを示すためにリーフフラグを「０」として、当該ノードのデータ（分岐条件データの一部としてもよい）をモデルメモリ４０へ書き込む。
【００８９】
以上の動作について、ラーニングモジュール２０は、バンクＡに書き込まれた学習データのアドレスを順に指定し、当該アドレスによって、フィーチャメモリ３２から各学習データを読み出して行う。
【００９０】
＜デプス０・ノード０でのデータ分岐処理＞
図７は、実施形態に係る学習識別装置のデプス０、ノード０の分岐時のモジュールの動作を示す図である。
【００９１】
図７に示すように、制御部１１は、クラシフィケーションモジュール５０へ開始アドレスおよび終了アドレスを送信し、トリガによりクラシフィケーションモジュール５０による処理を開始させる。クラシフィケーションモジュール５０は、開始アドレスおよび終了アドレスに基づいて、ポインタメモリ３１（バンクＡ）から対象とする学習データのアドレスを指定し、当該アドレスによって、フィーチャメモリ３２から学習データ（特徴量）を読み出す。また、クラシフィケーションモジュール５０は、モデルメモリ４０から対応するノード（デプス０、ノード０）の分岐条件データ（特徴量番号、しきい値）を読み出す。そして、クラシフィケーションモジュール５０は、分岐条件データに従って、読み出したサンプルデータを、ノード（デプス０、ノード０）の左側に分岐させるか、右側に分岐させるかを判定し、その判定結果により、当該学習データのフィーチャメモリ３２におけるアドレスを、ポインタメモリ３１の読み出しバンク（ここではバンクＡ）（読み出し用のバンク領域）と異なる他方のバンク（書き込みバンク）（ここではバンクＢ）（書き込み用のバンク領域）に書き込む。
【００９２】
この際、クラシフィケーションモジュール５０は、当該ノードの左側に分岐すると判定した場合、当該学習データのアドレスを、図７に示すように、バンクＢのアドレスの低い方から順に書き込み、当該ノードの右側に分岐すると判定した場合、当該学習データのアドレスを、バンクＢのアドレスの高い方から順に書き込む。これによって、書き込みバンク（バンクＢ）では、ノードの左側に分岐した学習データのアドレスは、アドレスの低い方に、ノードの右側に分岐した学習データのアドレスは、アドレスの高い方にきれいに分けて書き込むことができる。なお、書き込みバンクにおいて、ノードの左側に分岐した学習データのアドレスは、アドレスの高い方に、ノードの右側に分岐した学習データのアドレスは、アドレスの低い方に分けて書き込むものとしてもよい。
【００９３】
このように、ポインタメモリ３１では、上述のように、バンクＡおよびバンクＢの２つが構成されており、交互に読み書きすることによって、ＦＰＧＡ内のＳＲＡＭの容量が限られている中、効率的にメモリを使用することが可能となる。単純には、フィーチャメモリ３２およびステートメモリ３３を、それぞれ２バンク構成する方法もあるが、一般的に、サンプルデータよりも、フィーチャメモリ３２でのアドレスを示すデータの方が小さいので、本実施形態のように、ポインタメモリ３１を準備しておき、間接的にアドレスを指定する方法の方が、メモリの使用量を削減することが可能となる。
【００９４】
以上の動作について、クラシフィケーションモジュール５０は、全学習データに対して分岐処理を行う。ただし、分岐処理が終了した後、ノード（デプス０、ノード０）の左側と右側とに同数の学習データが分けられるわけではないので、クラシフィケーションモジュール５０は、左側に分岐した学習データのアドレスと、右側に分岐した学習データのアドレスとの境界に対応する書き込みバンク（バンクＢ）におけるアドレス（中間アドレス）を、制御部１１に返す。当該中間アドレスは、次の分岐処理の際に使用される。
【００９５】
＜デプス１・ノード０の分岐条件データの決定＞
図８は、実施形態に係る学習識別装置のデプス１、ノード０のノードパラメータを決定する場合のモジュールの動作を示す図である。基本的には、図６に示した、デプス０・ノード０の分岐条件データの決定の処理と同様であるが、対象とするノードの階層が変わる（デプス０からデプス１になる）ので、ポインタメモリ３１のバンクＡおよびバンクＢの役割が反転する。具体的には、バンクＢが読み出しバンクとなり、バンクＡが書き込みバンク（図９参照）となる。
【００９６】
図８に示すように、制御部１１は、デプス０での処理でクラシフィケーションモジュール５０から受け取った中間アドレスに基づいて、ラーニングモジュール２０へ開始アドレスおよび終了アドレスを送信し、トリガによりラーニングモジュール２０による処理を開始させる。ラーニングモジュール２０は、開始アドレスおよび終了アドレスに基づいて、ポインタメモリ３１（バンクＢ）から対象とする学習データのアドレスを指定し、当該アドレスによって、フィーチャメモリ３２から学習データ（特徴量）を読み出し、ステートメモリ３３からステート情報（ｗ，ｇ，ｈ）を読み出す。具体的には、ラーニングモジュール２０は、図８に示すように、バンクＢの左側（アドレスが低い方）から中間アドレスまで順にアドレスを指定していく。
【００９７】
この場合、上述したように、ラーニングモジュール２０の各ゲイン算出モジュール２１は、読み出した学習データの各特徴量をそれぞれ自身のＳＲＡＭに格納して、各しきい値における分岐スコアを算出する。そして、ラーニングモジュール２０の最適条件導出モジュール２２は、各ゲイン算出モジュール２１により出力された各特徴量に対応する各分岐スコアを入力し、分岐スコアが最大となる特徴量の番号（特徴量番号）およびしきい値を導出する。そして、最適条件導出モジュール２２は、導出した特徴量番号およびしきい値を、対応するノード（デプス１、ノード０）の分岐条件データとして、モデルメモリ４０へ書き込む。この際、最適条件導出モジュール２２は、ノード（デプス１、ノード０）からさらに分岐されることを示すためにリーフフラグを「０」として、当該ノードのデータ（分岐条件データの一部としてもよい）をモデルメモリ４０へ書き込む。
【００９８】
以上の動作について、ラーニングモジュール２０は、バンクＢの左側（アドレスが低い方）から中間アドレスまで順に指定し、当該アドレスによって、フィーチャメモリ３２から各学習データを読み出して行う。
【００９９】
＜デプス１・ノード０でのデータ分岐処理＞
図９は、実施形態に係る学習識別装置のデプス１、ノード０の分岐時のモジュールの動作を示す図である。
【０１００】
図９に示すように、制御部１１は、デプス０での処理でクラシフィケーションモジュール５０から受け取った中間アドレスに基づいて、クラシフィケーションモジュール５０へ開始アドレスおよび終了アドレスを送信し、トリガによりクラシフィケーションモジュール５０による処理を開始させる。クラシフィケーションモジュール５０は、開始アドレスおよび終了アドレスに基づいて、ポインタメモリ３１（バンクＢ）の左側から対象とする学習データのアドレスを指定し、当該アドレスによって、フィーチャメモリ３２から学習データ（特徴量）を読み出す。また、クラシフィケーションモジュール５０は、モデルメモリ４０から対応するノード（デプス１、ノード０）の分岐条件データ（特徴量番号、しきい値）を読み出す。そして、クラシフィケーションモジュール５０は、分岐条件データに従って、読み出したサンプルデータを、ノード（デプス１、ノード０）の左側に分岐させるか、右側に分岐させるかを判定し、その判定結果により、当該学習データのフィーチャメモリ３２におけるアドレスを、ポインタメモリ３１の読み出しバンク（ここではバンクＢ）（読み出し用のバンク領域）と異なる他方のバンク（書き込みバンク）（ここではバンクＡ）（書き込み用のバンク領域）に書き込む。
【０１０１】
この際、クラシフィケーションモジュール５０は、当該ノードの左側に分岐すると判定した場合、当該学習データのアドレスを、図９に示すように、バンクＡのアドレスの低い方（受信した開始アドレス）から順に書き込み、当該ノードの右側に分岐すると判定した場合、当該学習データのアドレスを、バンクＡのアドレスの高い方（受信した終了アドレスであって前回の中間アドレス）から順に書き込む。これによって、書き込みバンク（バンクＡ）では、ノードの左側に分岐した学習データのアドレスは、アドレスの低い方に、ノードの右側に分岐した学習データのアドレスは、アドレスの高い方にきれいに分けて書き込むことができる。なお、書き込みバンクにおいて、ノードの左側に分岐した学習データのアドレスは、アドレスの高い方に、ノードの右側に分岐した学習データのアドレスは、アドレスの低い方に分けて書き込むものとしてもよい。
【０１０２】
以上の動作について、クラシフィケーションモジュール５０は、全学習データのうちバンクＢの中間アドレスよりも左側に書き込まれたアドレスで指定される学習データに対して分岐処理を行う。ただし、分岐処理が終了した後、ノード（デプス１、ノード０）の左側と右側とに同数の学習データが分けられるわけではないので、クラシフィケーションモジュール５０は、左側に分岐した学習データのアドレスと、右側に分岐した学習データのアドレスとの中間に対応する書き込みバンク（バンクＡ）におけるアドレス（中間アドレス）を、制御部１１に返す。当該中間アドレスは、次の分岐処理の際に使用される。
【０１０３】
＜デプス１・ノード１の分岐条件データの決定＞
図１０は、実施形態に係る学習識別装置のデプス１、ノード１のノードパラメータを決定する場合のモジュールの動作を示す図である。なお、図８の場合と同様に、デプス１・ノード０のノードと同じ階層なので、バンクＢが読み出しバンクとなり、バンクＡが書き込みバンク（図１１参照）となる。
【０１０４】
図１０に示すように、制御部１１は、デプス０での処理でクラシフィケーションモジュール５０から受け取った中間アドレスに基づいて、ラーニングモジュール２０へ開始アドレスおよび終了アドレスを送信し、トリガによりラーニングモジュール２０による処理を開始させる。ラーニングモジュール２０は、開始アドレスおよび終了アドレスに基づいて、ポインタメモリ３１（バンクＢ）から対象とする学習データのアドレスを指定し、当該アドレスによって、フィーチャメモリ３２から学習データ（特徴量）を読み出し、ステートメモリ３３からステート情報（ｗ，ｇ，ｈ）を読み出す。具体的には、ラーニングモジュール２０は、図１０に示すように、バンクＢの右側（アドレスが高い方）から中間アドレスまで順にアドレスを指定していく。
【０１０５】
この場合、上述したように、ラーニングモジュール２０の各ゲイン算出モジュール２１は、読み出した学習データの各特徴量をそれぞれ自身のＳＲＡＭに格納して、各しきい値における分岐スコアを算出する。そして、ラーニングモジュール２０の最適条件導出モジュール２２は、各ゲイン算出モジュール２１により出力された各特徴量に対応する各分岐スコアを入力し、分岐スコアが最大となる特徴量の番号（特徴量番号）およびしきい値を導出する。そして、最適条件導出モジュール２２は、導出した特徴量番号およびしきい値を、対応するノード（デプス１、ノード１）の分岐条件データとして、モデルメモリ４０へ書き込む。この際、最適条件導出モジュール２２は、ノード（デプス１、ノード１）からさらに分岐されることを示すためにリーフフラグを「０」として、当該ノードのデータ（分岐条件データの一部としてもよい）をモデルメモリ４０へ書き込む。
【０１０６】
以上の動作について、ラーニングモジュール２０は、バンクＢの右側（アドレスが高い方）から中間アドレスまで順に指定し、当該アドレスによって、フィーチャメモリ３２から各学習データを読み出して行う。
【０１０７】
＜デプス１・ノード１でのデータ分岐処理＞
図１１は、実施形態に係る学習識別装置のデプス１、ノード１の分岐時のモジュールの動作を示す図である。
【０１０８】
図１１に示すように、制御部１１は、デプス０での処理でクラシフィケーションモジュール５０から受け取った中間アドレスに基づいて、クラシフィケーションモジュール５０へ開始アドレスおよび終了アドレスを送信し、トリガによりクラシフィケーションモジュール５０による処理を開始させる。クラシフィケーションモジュール５０は、開始アドレスおよび終了アドレスに基づいて、ポインタメモリ３１（バンクＢ）の右側から対象とする学習データのアドレスを指定し、当該アドレスによって、フィーチャメモリ３２から学習データ（特徴量）を読み出す。また、クラシフィケーションモジュール５０は、モデルメモリ４０から対応するノード（デプス１、ノード１）の分岐条件データ（特徴量番号、しきい値）を読み出す。そして、クラシフィケーションモジュール５０は、分岐条件データに従って、読み出したサンプルデータを、ノード（デプス１、ノード１）の左側に分岐させるか、右側に分岐させるかを判定し、その判定結果により、当該学習データのフィーチャメモリ３２におけるアドレスを、ポインタメモリ３１の読み出しバンク（ここではバンクＢ）（読み出し用のバンク領域）と異なる他方のバンク（書き込みバンク）（ここではバンクＡ）（書き込み用のバンク領域）に書き込む。
【０１０９】
この際、クラシフィケーションモジュール５０は、当該ノードの左側に分岐すると判定した場合、当該学習データのアドレスを、図１１に示すように、バンクＡのアドレスの低い方（受信した開始アドレスであって前回の中間アドレス）から順に書き込み、当該ノードの右側に分岐すると判定した場合、当該学習データのアドレスを、バンクＡのアドレスの高い方（受信した終了アドレス）から順に書き込む。これによって、書き込みバンク（バンクＡ）では、ノードの左側に分岐した学習データのアドレスは、アドレスの低い方に、ノードの右側に分岐した学習データのアドレスは、アドレスの高い方にきれいに分けて書き込むことができる。なお、書き込みバンクにおいて、ノードの左側に分岐した学習データのアドレスは、アドレスの高い方に、ノードの右側に分岐した学習データのアドレスは、アドレスの低い方に分けて書き込むものとしてもよい。この場合、図９における動作も合わせる必要がある。
【０１１０】
以上の動作について、クラシフィケーションモジュール５０は、全学習データのうちバンクＢの中間アドレスよりも右側に書き込まれたアドレスで指定される学習データに対して分岐処理を行う。ただし、分岐処理が終了した後、ノード（デプス１、ノード１）の左側と右側とに同数の学習データが分けられるわけではないので、クラシフィケーションモジュール５０は、左側に分岐した学習データのアドレスと、右側に分岐した学習データのアドレスとの中間に対応する書き込みバンク（バンクＡ）におけるアドレス（中間アドレス）を、制御部１１に返す。当該中間アドレスは、次の分岐処理の際に使用される。
【０１１１】
＜デプス１・ノード１の分岐条件データの決定時に分岐しない場合＞
図１２は、実施形態に係る学習識別装置のデプス１、ノード１のノードパラメータを決定の結果、分岐しない場合のモジュールの動作を示す図である。なお、図８の場合と同様に、デプス１・ノード０のノードと同じ階層なので、バンクＢが読み出しバンクとなる。
【０１１２】
図１２に示すように、制御部１１は、デプス０での処理でクラシフィケーションモジュール５０から受け取った中間アドレスに基づいて、ラーニングモジュール２０へ開始アドレスおよび終了アドレスを送信し、トリガによりラーニングモジュール２０による処理を開始させる。ラーニングモジュール２０は、開始アドレスおよび終了アドレスに基づいて、ポインタメモリ３１（バンクＢ）から対象とする学習データのアドレスを指定し、当該アドレスによって、フィーチャメモリ３２から学習データ（特徴量）を読み出し、ステートメモリ３３からステート情報（ｗ，ｇ，ｈ）を読み出す。具体的には、ラーニングモジュール２０は、図１２に示すように、バンクＢの右側（アドレスが高い方）から中間アドレスまで順にアドレスを指定していく。
【０１１３】
ラーニングモジュール２０は、算出した分岐スコア等から、これ以上ノード（デプス１、ノード１）から分岐しないと判断した場合、リーフフラグを「１」として、当該ノードのデータ（分岐条件データの一部としてもよい）をモデルメモリ４０に書き込むと共に、制御部１１にも当該ノードのリーフフラグが「１」であることを送信する。これによって、ノード（デプス１、ノード１）から下の階層には分岐しないことが認識される。さらに、ラーニングモジュール２０は、ノード（デプス１、ノード１）のリーフフラグが「１」である場合、特徴量番号およびしきい値の代わりに、リーフウェイト（ｗ）（分岐条件データの一部としてもよい）をモデルメモリ４０に書き込む。これにより、モデルメモリ４０の容量を別々に持つよりも小さくすることができる。
【０１１４】
以上の図６〜図１２で示した処理を、階層（デプス）毎に進めていくと、全体の決定木が完成する（決定木が学習される）。
【０１１５】
＜決定木の学習が完了した場合＞
図１３は、実施形態に係る学習識別装置において決定木の学習が完了した場合に全サンプルデータのステート情報を更新するときのモジュールの動作を示す図である。
【０１１６】
ＧＢＤＴを構成する１つの決定木の学習が完了した場合、次の決定木へのブースティング（ここではグラディエントブースティング）の際に使用するため、各学習データの誤差関数に対応する一次勾配ｇ、二次勾配ｈ、および各学習データに対するリーフウェイトｗを算出する必要がある。図１３に示すように、制御部１１は、トリガによりクラシフィケーションモジュール５０による上述の計算を開始させる。クラシフィケーションモジュール５０は、全学習データに対して、全デプス（階層）のノードに対する分岐判定の処理を行い、各学習データに対応するリーフウェイトを算出する。そして、クラシフィケーションモジュール５０は、算出したリーフウェイトに対して、ラベル情報を基に、ステート情報（ｗ、ｇ、ｈ）を算出し、元のステートメモリ３３のアドレスに書き戻す。このように、更新されたステート情報を利用して、次の決定木の学習が行われる。
【０１１７】
以上のように、本実施形態に係る学習識別装置１において、ラーニングモジュール２０は、入力されたサンプルデータの各特徴量を読み込むためのメモリ（例えば、ＳＲＡＭ）をそれぞれ備えている。これによって、１アクセスでサンプルデータの全特徴量を読み出すことができ、各ゲイン算出モジュール２１により、一度に全特徴量に対する処理が可能となるので、決定木の学習処理の速度を飛躍的に向上させることが可能となる。
【０１１８】
また、本実施形態に係る学習識別装置１において、ポインタメモリ３１では、バンクＡおよびバンクＢの２つが構成されており、交互に読み書きするものとしている。これによって、効率的にメモリを使用することが可能となる。単純には、フィーチャメモリ３２およびステートメモリ３３を、それぞれ２バンク構成する方法もあるが、一般的に、サンプルデータよりも、フィーチャメモリ３２でのアドレスを示すデータの方が小さいので、本実施形態のように、ポインタメモリ３１を準備しておき、間接的にアドレスを指定する方法の方が、メモリ容量を節約することが可能となる。また、クラシフィケーションモジュール５０は、ノードの左側に分岐すると判定した場合、学習データのアドレスを、２つのバンクのうち書き込みバンクのアドレスの低い方から順に書き込み、当該ノードの右側に分岐すると判定した場合、当該学習データのアドレスを、書き込みバンクのアドレスの高い方から順に書き込む。これによって、書き込みバンクでは、ノードの左側に分岐した学習データのアドレスは、アドレスの低い方に、ノードの右側に分岐した学習データのアドレスは、アドレスの高い方にきれいに分けて書き込むことができる。
【０１１９】
（変形例）
図１４は、変形例に係る学習識別装置のモデルメモリの構成の一例を示す図である。図１４を参照しながら、本変形例に係る学習識別装置１におけるモデルメモリ４０において、決定木のデプス（階層）毎にメモリが備えられた構成について説明する。
【０１２０】
図１４に示すように、本変形例に係る学習識別装置１のモデルメモリ４０は、学習された決定木のモデルデータについてデプス（階層）毎にデータ（具体的には分岐条件データ）を格納するためのデプス０用メモリ４１＿１、デプス１用メモリ４１＿２、・・・、デプス（ｍ−１）用メモリ４１＿ｍを有する。ここで、ｍは、少なくとも決定木のモデルのデプス（階層）数以上の数である。すなわち、モデルメモリ４０は、学習された決定木のモデルデータについてデプス（階層）毎にデータ（デプス０ノードデータ、デプス１ノードデータ、・・・、デプス（ｍ−１）ノードデータ）を同時に取り出すための独立したポートを有する、ということになる。これによって、クラシフィケーションモジュール５０は、決定木における最初のノードでの分岐結果に基づき、次のノードに対応するデータ（分岐条件データ）を読み出すことを、全デプス（階層）で並列に行い、途中にメモリを介さずに、１つのサンプルデータ（識別データ）に対して、１クロックで同時に各デプス（階層）での分岐処理を実行（パイプライン処理）することが可能となる。これによって、クラシフィケーションモジュール５０における識別処理は、サンプルデータ数分だけの時間だけで済むことになり、識別処理の速度を飛躍的に向上させることができる。これに対して、従来の技術では、ノード毎に新しいメモリ領域にサンプルデータをコピーしていくため、メモリの読み書きの時間だけ速度に影響し、（サンプルデータ数×デプス（階層）数）の識別処理の時間となるので、上述のように本変形例に係る識別処理の方が大幅に優位となる。
【０１２１】
図１５は、変形例に係る学習識別装置のクラシフィケーションモジュールの構成の一例を示す図である。図１５に示すように、クラシフィケーションモジュール５０は、ノード０判別器５１＿１、ノード１判別器５１＿２、ノード２判別器５１＿３、・・・を有する。フィーチャメモリ３２からは、１クロックに１つのサンプルデータが特徴量として供給される。図１５に示すように、特徴量は、まずノード０判別器５１＿１に入力され、ノード０判別器５１＿１は、対応するモデルメモリ４０のデプス０用メモリ４１＿１からそのノードのデータ（デプス０ノードデータ）（右に行くか、左に行くかの条件、および使用する特徴量番号）を受け取る。ノード０判別器５１＿１では、その条件に従い、対応するサンプルデータが右に行くか左に行くかが判別される。なお、ここではデプス用メモリ（デプス０用メモリ４１＿１、デプス１用メモリ４１＿２、デプス２用メモリ４１＿３、・・・）はそれぞれレイテンシが１クロックあるとしている。ノード０判別器５１＿１の結果により、次のデプス１用メモリ４１＿２の内、何番目のノードに行くかがアドレス指定され、対応するノードのデータ（デプス１ノードデータ）が抽出され、ノード１判別器５１＿２に入力される。
【０１２２】
デプス０用メモリ４１＿１のレイテンシは１クロックであるため、同じように特徴量も１クロックの遅延を入れて、ノード１判別器５１＿２に入力される。また、同じクロックで次のサンプルデータの特徴量がノード０判別器５１＿１に入力されている。このようにして、パイプライン処理で識別を行うことにより、デプス毎にメモリが同時に出力されている前提で、１つの決定木全体として、１クロックで１つのサンプルデータを識別することが可能である。なお、デプス０用メモリ４１＿１は、デプス０ではノードは１つしかないので、１つのアドレスのみでよく、デプス１用メモリ４１＿２は、デプス１ではノードは２つあるので、２つのアドレスが必要であり、同じように、デプス２用メモリ４１＿３は、４つのアドレスが必要であり、デプス３用メモリ（図示せず）は、８つのアドレスが必要となる。なお、このクラシフィケーションモジュール５０は木全体の識別を行うものであるが、ノードの学習時には、ノード０判別器５１＿１のみを用いて学習を行うことで同じ回路を流用して、回路規模を小さくすることができる。
【０１２３】
［第２の実施形態］
第２の実施形態に係る学習識別装置について、第１の実施形態に係る学習識別装置１と相違する点を中心に説明する。第１の実施形態では、サンプルデータが記憶されるデータメモリ３０を１つとして、ＧＢＤＴによる学習処理および識別処理について説明した。本実施形態では、複数のサンプルデータを並列で処理するデータパラレルを実現するために、データメモリを複数に分割して学習処理を行う動作について説明する。
【０１２４】
（データパラレルについて）
図１６は、データパラレルを適用した学習識別装置のモジュール構成の一例を示す図である。図１６を参照しながら、データパラレルを実現する構成の例である学習識別装置１ａの構成について説明する。
【０１２５】
サンプルデータ（学習データまたは識別データ）に対するデータパラレルを実現するためには、まず、図１６に示すように、サンプルデータを分割して保持するために２つのデータメモリ３０ａ、３０ｂに分割することが考えられる。図１６のデータメモリ３０ｂでは図示していないが、データメモリ３０ａと同様に、データメモリ３０ｂも、ポインタメモリ３１と、フィーチャメモリ３２と、ステートメモリ３３とを含む。ただし、単にサンプルデータを保持するメモリを分割しても、分割されたサンプルデータを並列に処理（学習処理、識別処理等）を行う機構が必要である。図１６に示す例では、識別処理を行うモジュールを、分割されたデータメモリと同数だけ配置された構成を示す。すなわち、学習識別装置１ａは、２つのデータメモリ３０ａ、３０ｂのそれぞれに格納されたサンプルデータについて並列で識別処理を行うために、クラシフィケーションモジュール５０ａ、５０ｂを有する。個別のモジュールに着目した場合、フィーチャパラレルで処理されるものとすると、上述のようなデータパラレルにするために、構成の変更はほとんどないので実装も容易である。
【０１２６】
また、学習処理、すなわち、ラーニングモジュール２０での処理を高速化するためのデータパラレルとしては、サンプルデータを分割して保持するために２つのデータメモリ３０ａ、３０ｂに分割すると共に、上述したように、学習処理の過程で算出される特徴量および勾配情報（上述の式（１１）参照）についてのヒストグラム（以下、「勾配ヒストグラム」と称する場合がある）を保持するメモリが、データメモリの分割数に比例して増大するので、回路規模が増大するという問題がある。
【０１２７】
（勾配ヒストグラムを用いた分岐スコアの算出方法）
ここで、まず、ラーニングモジュール２０における分岐スコアの算出方法について説明する。ここで、サンプルデータ（ここでは学習データ）の特徴量は、あるビット幅に量子化されていることを前提とする。例えば、特徴量が８ビット（２５６パターンの値）で、特徴量の次元が１００である場合、ラーニングモジュール２０は、２５６×１００＝２５６００パターンの分岐スコアを算出することになる。この場合のしきい値の候補は、２５６個である。
【０１２８】
ある分岐条件（１つの特徴量に対する１つのしきい値）に対応する分岐スコアを算出するには、現在のノードにある学習データから、しきい値以上の特徴量を有する学習データの勾配情報の和（上述の式（１９）のＧＲ、ＨＲに相当）と、当該しきい値未満の学習データの勾配情報の和（上述の式（１９）のＧＬ、ＨＬに相当）を求める必要がある。ここで、下記の（表１）に示すように、学習データが４つ、特徴量が１次元で値が３パターン、勾配情報が一次勾配ｇである場合において具体的に説明する。
【表１】
2020027451.tif 000025
【０１２９】
（表１）に示すように、特徴量が０、１、２の３パターンあるので、しきい値についても０、１、２となり、各しきい値での勾配情報の和は、以下の（表２）に示す値となり、この３パターンの各しきい値に対応する分岐スコアが算出される。
【表２】
2020027451.tif 000026
【０１３０】
特定のしきい値に対して、勾配情報の和を求めるためには、現在のノードのすべての学習データを参照する必要がある。これをすべてのしきい値について毎回行うものとすると、非常に処理時間がかかることになる。例えば、特徴量が８ビット（２５６パターン）の場合、しきい値についても２５６パターンあるので、（現在のノードにある学習データ数×２５６）回だけ勾配情報の和を求める必要がある。これでは非常に処理時間がかかるので、予め、特徴量の各値における勾配情報の和（勾配ヒストグラム）、および勾配情報の総和を求めておき、勾配ヒストグラムの累積和をとることによって分岐スコアの算出処理を簡略化するものとする。
【０１３１】
サンプルデータが上述の（表１）で示したものである場合、特徴量の各値における勾配情報の和（勾配ヒストグラム）は、以下の（表３）に示す値となる。
【表３】
2020027451.tif 000027
【０１３２】
また、特徴量の各値における勾配情報の総和は、０．１＋０．２＋０．１−０．３＝０．１となる。ここで、勾配ヒストグラムの累積和を求めることによって、勾配情報の和ＧＬが求まり、勾配情報の総和から勾配情報の和ＧＬを引くと勾配情報のＧＲが求まり、各しきい値に対する勾配情報の和ＧＬ、ＧＲは、以下の（表４）に示す値となる。
【表４】
2020027451.tif 000028
【０１３３】
この方法であれば、現在のノードの学習データはそれぞれ１回参照すればよく、その後は、しきい値の数だけ勾配ヒストグラムを参照すれば、すべての分岐条件に対して分岐スコアを求めることができる。特徴量が８ビット（２５６パターン）の場合、（現在のノードにある学習データ数＋２５６）回の処理で済むことになる。なお、上述の場合は、特徴量が１次元の場合であるが、特徴量が２次元以上でも、特徴量の次元ごとに勾配ヒストグラムを求めれば、同様の処理を並列で算出することが可能である。以下、第１の実施形態でフィーチャパラレルで学習を行うラーニングモジュール２０の構成として示した図４に基づいてさらに詳細な構成を示した図１７に示すラーニングモジュール２０により、勾配ヒストグラムを算出して分岐条件データを求めるための構成および動作を説明し、さらに、データパラレルの構成とした場合の構成および動作について説明する。
【０１３４】
（勾配ヒストグラムを用いて分岐条件データを求めるラーニングモジュールの構成例）
図１７は、ラーニングモジュールの詳細なモジュール構成の一例を示す図である。図１７を参照しながら、上述の図４が示す構成をさらに詳細に示したラーニングモジュール２０の構成および動作について説明する。
【０１３５】
図１７に示すラーニングモジュール２０は、ゲイン算出モジュール２１＿１、２１＿２、・・・、２１＿ｎと、最適条件導出モジュール２２と、を備えている。ここで、ｎは、少なくともサンプルデータ（ここでは、学習データ）の特徴量の種類以上の数である。なお、ゲイン算出モジュール２１＿１、２１＿２、・・・、２１＿ｎについて、任意のゲイン算出モジュールを示す場合、または総称する場合、単に「ゲイン算出モジュール２１」と称するものとする。
【０１３６】
ゲイン算出モジュール２１＿１〜２１＿１ｎは、それぞれ、入力されるサンプルデータに含まれる特徴量のうち対応する特徴量について、各しきい値における分岐スコアを、上述の式（１９）を用いて算出するモジュールである。ゲイン算出モジュール２１＿１は、勾配ヒストグラム算出モジュール６１＿１と、累積勾配算出モジュール６２＿１と、算出モジュール６３＿１と、を含む。
【０１３７】
勾配ヒストグラム算出モジュール６１＿１は、入力したサンプルデータの特徴量の各値をヒストグラムのビンとして、当該サンプルデータに対応する勾配情報の値を積算することによって勾配ヒストグラムを算出するモジュールである。
【０１３８】
累積勾配算出モジュール６２＿１は、特徴量に対する各しきい値について、勾配ヒストグラムの累積和を求めることにより、勾配情報の和（ＧＬ、ＧＲ、ＨＬ、ＨＲ）を算出するモジュールである。
【０１３９】
算出モジュール６３＿１は、累積勾配算出モジュール６２＿１により算出された勾配情報の和を用いて、上述の式（１９）を用いて、各しきい値における分岐スコアを算出するモジュールである。
【０１４０】
また、ゲイン算出モジュール２１＿２も、同様に、勾配ヒストグラム算出モジュール６１＿２と、累積勾配算出モジュール６２＿２と、算出モジュール６３＿２と、を含み、以下、ゲイン算出モジュール２１＿ｎについても同様である。なお、勾配ヒストグラム算出モジュール６１＿１、６１＿２、・・・、６１＿ｎについて、任意の勾配ヒストグラム算出モジュールを示す場合、または総称する場合、単に「勾配ヒストグラム算出モジュール６１」と称するものとする。また、累積勾配算出モジュール６２＿１、６２＿２、・・・、６２＿ｎについて、任意の累積勾配算出モジュールを示す場合、または総称する場合、単に「累積勾配算出モジュール６２」と称するものとする。また、算出モジュール６３＿１、６３＿２、・・・、６３＿ｎについて、任意の算出モジュールを示す場合、または総称する場合、単に「算出モジュール６３」と称するものとする。
【０１４１】
最適条件導出モジュール２２は、各ゲイン算出モジュール２１により出力された各特徴量および各しきい値に対応する各分岐スコアを入力し、分岐スコアが最大となる特徴量の番号（特徴量番号）およびしきい値を導出するモジュールである。最適条件導出モジュール２２は、導出した特徴量番号およびしきい値を、対応するノードの分岐条件データ（ノードのデータの一例）として、モデルメモリ４０へ書き込む。
【０１４２】
＜勾配ヒストグラム算出モジュールの構成および動作＞
図１８は、ラーニングモジュールの勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。図１８を参照しながら、ラーニングモジュール２０における勾配ヒストグラム算出モジュール６１の構成および動作について説明する。なお、図１８では、特徴量が１次元であるものとし、勾配情報として一次勾配ｇおよび二次勾配ｈがある場合について説明するが、単に、勾配情報ｇ、勾配情報ｈと称する場合がある。
【０１４３】
図１８に示すように、勾配ヒストグラム算出モジュール６１は、データカウンタ２０１と、加算器２０２と、ディレイ２０３と、勾配ヒストグラムメモリ２０４と、総和格納メモリ２０５と、加算器２０６と、ディレイ２０７と、勾配ヒストグラムメモリ２０８と、総和格納メモリ２０９と、を有する。
【０１４４】
データカウンタ２０１は、データメモリ３０から学習処理の対象となるサンプルデータ（特徴量）、および対応する勾配情報ｇ、ｈを読み出すためのアドレスを出力する。
【０１４５】
加算器２０２は、勾配ヒストグラムメモリ２０４から読み出した、加算された勾配情報ｇと、データメモリ３０から新たに読み出した勾配情報ｇとを加算する。
【０１４６】
ディレイ２０３は、加算器２０２により加算された勾配情報ｇを勾配ヒストグラムメモリ２０４に書き込むタイミングを合わせるために、データメモリ３０から読み出された特徴量を遅延して出力する。
【０１４７】
勾配ヒストグラムメモリ２０４は、特徴量の値をアドレスとして、加算された勾配情報ｇを格納していき、最終的に、特徴量の値（ビン）ごとの勾配ヒストグラムを格納するメモリである。
【０１４８】
総和格納メモリ２０５は、データメモリ３０から読み出した勾配情報ｇの総和を格納するメモリである。
【０１４９】
加算器２０６は、勾配ヒストグラムメモリ２０８から読み出した、加算された勾配情報ｈと、データメモリ３０から新たに読み出した勾配情報ｈとを加算する。
【０１５０】
ディレイ２０７は、加算器２０６により加算された勾配情報ｈを勾配ヒストグラムメモリ２０８に書き込むタイミングを合わせるために、データメモリ３０から読み出された特徴量を遅延して出力する。
【０１５１】
勾配ヒストグラムメモリ２０８は、特徴量の値をアドレスとして、加算された勾配情報ｈを格納していき、最終的に、特徴量の値（ビン）ごとの勾配ヒストグラムを格納するメモリである。
【０１５２】
総和格納メモリ２０９は、データメモリ３０から読み出した勾配情報ｈの総和を格納するメモリである。
【０１５３】
以下、勾配ヒストグラム算出モジュール６１の勾配ヒストグラムの算出動作の流れを簡潔に説明する。まず、勾配ヒストグラム算出モジュール６１は、データカウンタ２０１から出力されるアドレスを用いて、データメモリ３０に記憶されている、現在のノードの１つの学習データ（特徴量、勾配情報）を読み出す。そして、加算器２０２は、データメモリ３０から読み出した特徴量をアドレスとして、勾配ヒストグラムメモリ２０４から勾配情報ｇ（加算された勾配情報ｇ）を読み出す。そして、加算器２０２は、勾配ヒストグラムメモリ２０４から読み出した勾配情報ｇ（加算された勾配情報ｇ）と、データメモリ３０から読み出した勾配情報ｇとを加算し、データメモリ３０から読み出された特徴量をアドレスとして、勾配ヒストグラムメモリ２０４へ加算した勾配情報ｇを書き込む（更新する）。総和格納メモリ２０５は、データメモリ３０から勾配情報ｇを読み出す度に加算して勾配情報ｇの総和を格納する。なお、加算器２０６、ディレイ２０７、勾配ヒストグラムメモリ２０８および総和格納メモリ２０９による勾配情報ｈに対する処理も、上述と同様である。以上の動作を、現在のノードのすべての学習データについて繰り返す。
【０１５４】
＜累積勾配算出モジュールの構成および動作＞
図１９は、ラーニングモジュールの累積勾配算出モジュールのモジュール構成の一例を示す図である。図１９を参照しながら、ラーニングモジュール２０における累積勾配算出モジュール６２の構成および動作について説明する。なお、図１９では、特徴量が１次元であるものとし、勾配情報として一次勾配ｇおよび二次勾配ｈがある場合について説明する。
【０１５５】
図１９に示すように、累積勾配算出モジュール６２は、しきい値カウンタ２１０と、アキュムレータ２１１と、ディレイ２１２と、差分器２１３と、アキュムレータ２１４と、ディレイ２１５と、差分器２１６と、を有する。
【０１５６】
しきい値カウンタ２１０は、勾配ヒストグラムメモリ２０４、２０８から特徴量の値ごとに加算された勾配情報（ｇ、ｈ）、すなわち、特徴量の各値の勾配ヒストグラムを読み出すためのアドレスとなるしきい値を出力する。
【０１５７】
アキュムレータ２１１は、しきい値カウンタ２１０から出力されたしきい値（アドレス）に対応した勾配情報ｇについての勾配ヒストグラムを勾配ヒストグラムメモリ２０４から読み出して、現在格納している勾配ヒストグラムの累積和に対して、さらに累積して、新たな勾配ヒストグラムの累積和として保持する。
【０１５８】
ディレイ２１２は、アキュムレータ２１１から読み出した勾配情報ｇについての勾配ヒストグラムの累積和を、差分器２１３から勾配情報ｇの和ＧＲが出力されるタイミングと合せるために遅延させて、勾配情報ｇの和ＧＬとして出力する。
【０１５９】
差分器２１３は、総和格納メモリ２０５から読み出した勾配情報ｇの総和から、アキュムレータ２１１から読み出した勾配情報ｇについての勾配ヒストグラムの累積和（すなわち、勾配情報ｇの和ＧＬ）を引いて、勾配情報ｇの和ＧＲを算出する。
【０１６０】
アキュムレータ２１４は、しきい値カウンタ２１０から出力されたしきい値（アドレス）に対応した勾配情報ｈについての勾配ヒストグラムを勾配ヒストグラムメモリ２０８から読み出して、現在格納している勾配ヒストグラムの累積和に対して、さらに累積して、新たな勾配ヒストグラムの累積和として保持する。
【０１６１】
ディレイ２１５は、アキュムレータ２１４から読み出した勾配情報ｈについての勾配ヒストグラムの累積和を、差分器２１６から勾配情報ｈの和ＨＲが出力されるタイミングと合せるために遅延させて、勾配情報ｈの和ＨＬとして出力する。
【０１６２】
差分器２１６は、総和格納メモリ２０９から読み出した勾配情報ｈの総和から、アキュムレータ２１４から読み出した勾配情報ｈについての勾配ヒストグラムの累積和（すなわち、勾配情報ｈの和ＨＬ）を引いて、勾配情報ｈの和ＨＲを算出する。
【０１６３】
以下、累積勾配算出モジュール６２の勾配情報の和（ＧＬ、ＧＲ、ＨＬ、ＨＲ）の算出動作の流れを簡潔に説明するなお、累積勾配算出モジュール６２による算出処理は、勾配ヒストグラム算出モジュール６１における勾配情報の勾配ヒストグラムの算出・格納処理の動作終了後に開始される。すなわち、勾配ヒストグラム算出モジュール６１による算出処理の終了後は、勾配ヒストグラムメモリ２０４、２０８には、それぞれ、現在のノードのすべての学習データから算出された勾配情報ｇ、ｈについての勾配ヒストグラムが保持してある。
【０１６４】
まず、累積勾配算出モジュール６２は、しきい値カウンタ２１０から出力されるアドレスとしてのしきい値を用いて、勾配ヒストグラムメモリ２０４に記憶されている勾配情報ｇの勾配ヒストグラムを読み出す。そして、アキュムレータ２１１は、しきい値カウンタ２１０から出力されたしきい値に対応した勾配情報ｇについての勾配ヒストグラムを勾配ヒストグラムメモリ２０４から読み出して、現在格納している勾配ヒストグラムの累積和に対して、さらに累積して、新たな勾配ヒストグラムの累積和として保持する。そして、差分器２１３は、総和格納メモリ２０５から読み出した勾配情報ｇの総和から、アキュムレータ２１１から読み出した勾配情報ｇについての勾配ヒストグラムの累積和（すなわち、勾配情報ｇの和ＧＬ）を引いて、勾配情報ｇの和ＧＲを算出して、算出モジュール６３へ出力する。また、ディレイ２１２は、アキュムレータ２１１から読み出した勾配情報ｇについての勾配ヒストグラムの累積和（すなわち、勾配情報ｇの和ＧＬ）を、差分器２１３の出力に合せて、算出モジュール６３へ出力する。なお、アキュムレータ２１４、ディレイ２１５および差分器２１６におる勾配情報ｈに対する処理（勾配情報ｈの和ＨＬ、ＨＲの算出処理）も、上述と同様である。以上の動作を、すべてのしきい値について繰り返すが、この場合、しきい値カウンタ２１０がしきい値を順にカウントアップさせながら一巡して出力することによって実現される。
【０１６５】
＜データパラレルにした場合の勾配ヒストグラム算出モジュール＞
図２０は、データパラレルにした場合の勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。図２０を参照しながら、データパラレルにした場合の勾配ヒストグラム算出モジュール６１の構成および動作について説明する。なお、図２０では、データパラレルの分割数を２とし、特徴量が１次元であるものとし、勾配情報として一次勾配ｇのみを考えた場合について説明する。
【０１６６】
図２０に示すように、分割数が２の場合のデータパラレルとするために、図１８に示すデータメモリ３０の代わりに、分割したメモリであるデータメモリ３０ａ、３０ｂが構成され、勾配ヒストグラム算出モジュール６１の代わりに、勾配ヒストグラム算出モジュール６１ａ、６１ｂが構成される。
【０１６７】
図２０に示すように、勾配ヒストグラム算出モジュール６１ａは、データカウンタ２０１ａと、加算器２０２ａと、ディレイ２０３ａと、勾配ヒストグラムメモリ２０４ａと、総和格納メモリ２０５ａと、を有する。また、勾配ヒストグラム算出モジュール６１ｂは、データカウンタ２０１ｂと、加算器２０２ｂと、ディレイ２０３ｂと、勾配ヒストグラムメモリ２０４ｂと、総和格納メモリ２０５ｂと、を有する。データカウンタ２０１ａ、２０１ｂ、加算器２０２ａ、２０２ｂ、ディレイ２０３ａ、２０３ｂ、勾配ヒストグラムメモリ２０４ａ、２０４ｂ、および、総和格納メモリ２０５ａ、２０５ｂの機能は、図１８で説明した各機能と同様である。
【０１６８】
データパラレルを簡易に構成する場合、図２０に示すように、データメモリ３０と共に、勾配ヒストグラム算出モジュール６１も分割数と同数だけ配置する構成が考えられる。この場合、勾配ヒストグラムメモリの数は、特徴量次元×分割数となる。図２０に示す例では、特徴量は一次元、分割数は２としているので、勾配ヒストグラムメモリ２０４ａ、２０４ｂの２つとなる。さらに、勾配情報として一次勾配ｇおよび二次勾配ｈ用のそれぞれの勾配ヒストグラムメモリを考えた場合、必要となる勾配ヒストグラムメモリの全容量は、１つのメモリの容量（ビン数×ビット幅）×２（一次勾配ｇ、二次勾配ｈ）×特徴量次元×分割数となる。大規模なデータセットでは、特徴量が数百〜数千次元ある場合も珍しくなく、そのうえ、分割数を増やすと大量のメモリの数が必要となり、メモリの容量がボトルネックとなり、回路の規模が増大してしまう。例えば、特徴量が８ビット（２５６パターン）で２０００次元であり、勾配情報が一次勾配ｇおよび二次勾配ｈの２つとし、勾配ヒストグラムのビット幅が１２ビットの場合、１２［ビット］×２５６＝３０７２［ビット］なので、１つの勾配ヒストグラムメモリのメモリ容量は３０７２ビットを満たせるものが必要になる。メモリは、通常、２のべき乗で用意されるので、この場合、メモリ容量は４０９６ビット（４ｋビット）となる。したがって、１分割（分割なし）の場合の勾配ヒストグラムメモリの全容量は、以下のようになる。
【０１６９】
４［ｋビット］×２（一次勾配ｇ、二次勾配ｈ）×２０００［次元］＝１６［Ｍビット］
【０１７０】
すなわち、１分割（分割なし）あたり１６Ｍビットのメモリ容量が必要になり、分割した場合は、（分割数×１６Ｍビット）のメモリ容量が必要となる。
【０１７１】
例えば、ハイエンドなＦＰＧＡであるｘｉｌｉｎｘ社のｖｉｒｔｅｘ  ＵｌｔｒＳｃａｌｅ＋のＶＵ９Ｐというチップの場合について考える。勾配ヒストグラムメモリに用いることができるのは分散ＲＡＭおよびブロックＲＡＭという回路である。ＶＵ９Ｐでは、分散ＲＡＭが最大で３６．１Ｍビット、ブロックＲＡＭが最大で７５．９Ｍビットである。そのため、勾配ヒストグラムメモリに分散ＲＡＭを用いた場合は２分割が限界であり、ブロックＲＡＭを用いた場合は４分割が限界となる。また、分散ＲＡＭおよびブロックＲＡＭは、勾配ヒストグラムの保持以外にも使う必要があるため、分割数の上限は上述の数よりも低くなる。以上のことより、特徴量および勾配情報のセットが並列に入力される場合において、図１７〜図２０で説明したラーニングモジュール２０の構成と比較して、より小規模な回路で勾配ヒストグラムを算出および格納することが可能な構成が必要である。以下、本実施形態に係るラーニングモジュールの構成および動作を、図２１〜図２６で説明する。
【０１７２】
（第２の実施形態に係るラーニングモジュールの構成）
図２１は、第２の実施形態に係る学習識別装置のラーニングモジュールのモジュール構成の一例を示す図である。図２１を参照しながら、本実施形態に係る学習識別装置（学習装置の一例）のラーニングモジュール２０ａの構成および動作について説明する。なお、図２１では、データパラレルの分割数を２とし、特徴量が１次元であるものとして説明する。
【０１７３】
図２１に示すように、本実施形態に係るラーニングモジュール２０ａは、勾配ヒストグラム算出モジュール７１と、累積勾配算出モジュール７２（累積勾配算出部）と、算出モジュール７３（スコア算出部）と、最適条件導出モジュール２２と、を備えている。
【０１７４】
勾配ヒストグラム算出モジュール７１は、入力したサンプルデータの特徴量の各値をヒストグラムのビンとして、当該サンプルデータに対応する勾配情報の値を積算することによって勾配ヒストグラムを算出するモジュールである。勾配ヒストグラム算出モジュール７１は、勾配出力モジュール３０１ａ、３０１ｂと、加算モジュール３０２と、アキュムレータモジュール３０３と、総和格納メモリ３０４と、を有する。
【０１７５】
勾配出力モジュール３０１ａ、３０１ｂは、特徴量の各値に対応した出力ポートを有し、データメモリ３０ａ、３０ｂから、特徴量および勾配情報を入力し、入力した特徴量の値に対応した出力ポートから当該勾配情報を出力するモジュールである。
【０１７６】
加算モジュール３０２は、特徴量の値（ビン）ごとに対応する勾配情報を加算して出力するモジュールである。
【０１７７】
アキュムレータモジュール３０３は、特徴量の値（ビン）ごとに、加算モジュール３０２から入力した加算された勾配情報を、現在保持している加算された勾配情報に加算し、最終的に、ビンごとに勾配情報の勾配ヒストグラムを保持するモジュールである。
【０１７８】
総和格納メモリ３０４は、加算モジュール３０２により算出された勾配情報の総和を格納するメモリである。
【０１７９】
累積勾配算出モジュール７２は、特徴量に対する各しきい値について、勾配ヒストグラムの累積和を求めることにより、勾配情報の和（ＧＬ、ＧＲ、ＨＬ、ＨＲ）を算出するモジュールである。
【０１８０】
算出モジュール７３は、累積勾配算出モジュール７２により算出された勾配情報の和を用いて、上述の式（１９）を用いて、各しきい値における分岐スコアを算出するモジュールである。
【０１８１】
最適条件導出モジュール２２は、算出モジュール７３により出力された各特徴量（図２１では１つの特徴量）および各しきい値に対応する各分岐スコアを入力し、分岐スコアが最大となる特徴量の番号（特徴量番号）およびしきい値を導出するモジュールである。最適条件導出モジュール２２は、導出した特徴量番号およびしきい値を、対応するノードの分岐条件データ（ノードのデータの一例）として、モデルメモリ４０へ書き込む。
【０１８２】
また、図２１に示すように、分割数が２の場合のデータパラレルとするために、メモリがデータメモリ３０ａ、３０ｂの２つのメモリに分割され、勾配ヒストグラム算出モジュール７１のうち、前段において勾配出力モジュール３０１ａ、３０１ｂの２つのモジュールに分割されている。図２１では、分割された物理的な単位を、「分割１」および「分割２」と表記している。
【０１８３】
＜勾配ヒストグラム算出モジュールの構成および動作＞
図２２は、第２の実施形態のラーニングモジュールの勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。図２２を参照しながら、本実施形態に係るラーニングモジュール２０ａにおける勾配ヒストグラム算出モジュール７１の構成および動作について説明する。なお、図２１では、データパラレルの分割数を２とし、特徴量が１次元であるものとし、勾配情報として１つ（例えば、一次勾配ｇ）のみを考えた場合について説明する。
【０１８４】
図２１に示すように、勾配ヒストグラム算出モジュール７１は、図２０で説明した構成に加え、データカウンタ３１１ａ、３１１ｂを有する。
【０１８５】
データカウンタ３１１ａは、データメモリ３０ａから学習処理の対象となるサンプルデータ（特徴量）、および対応する勾配情報を読み出すためのアドレスを出力する。
【０１８６】
勾配出力モジュール３０１ａは、図２２に示すように、比較器３１２＿１、３１２＿２、・・・、３１２＿Ｎと、マルチプレクサ３１３＿１、３１３＿２、・・・、３１３＿Ｎと、を有する。ここで、Ｎは、特徴量が取り得る値の数であって、勾配ヒストグラムにおけるビンの数である。なお、比較器３１２＿１、３１２＿２、・・・、３１２＿Ｎについて、任意の比較器を示す場合、または総称する場合、単に「比較器３１２」と称するものとする。また、マルチプレクサ３１３＿１、３１３＿２、・・・、３１３＿Ｎについて、任意のマルチプレクサを示す場合、または総称する場合、単に「マルチプレクサ３１３」と称するものとする。
【０１８７】
比較器３１２は、データメモリ３０ａから読み出した特徴量と、特定のビンの特徴量の値とを入力し、双方を比較して一致した場合、一致した旨（例えば、電圧レベルのオン出力）を、マルチプレクサ３１３へ出力する。例えば、比較器３１２＿１は、データメモリ３０ａから読み出した特徴量が、ビン１の特徴量の値と一致した場合、一致した旨をマルチプレクサ３１３＿１へ出力する。
【０１８８】
マルチプレクサ３１３は、比較器３１２がデータメモリ３０ａから読み出した特徴量（学習データ）に対応する勾配情報と、０とを入力し、比較器３１２から出力された比較結果に応じて、入力した勾配情報または０を出力する。例えば、マルチプレクサ３１３＿１は、比較器３１２＿１がデータメモリ３０ａから読み出した特徴量に対応する勾配情報と、０とを入力し、比較器３１２＿１から出力された比較結果が一致を示す場合、入力した勾配情報をビン１に対応する勾配情報として出力し、比較結果が不一致を示す場合、０を出力する。すなわち、データメモリ３０ａから読み出された特徴量の値に対応するマルチプレクサ３１３から、当該特徴量に対応する勾配情報が出力され、それ以外のマルチプレクサ３１３から０が出力される仕組みである。
【０１８９】
なお、データメモリ３０ｂ、データカウンタ３１１ｂ、および勾配出力モジュール３０１ｂの機能は、それぞれ上述のデータメモリ３０ａ、データカウンタ３１１ａ、および勾配出力モジュール３０１ａと同様である。
【０１９０】
加算モジュール３０２は、特徴量の値、すなわちビンごとにマルチプレクサ３１３から入力した勾配情報を加算して、アキュムレータモジュール３０３へ出力する。加算モジュール３０２は、加算器３２１＿１、３２１＿２、・・・、３２１＿Ｎと、加算器３２２と、を有する。
【０１９１】
加算器３２１＿１、３２１＿２、・・・、３２１＿Ｎは、それぞれビン１、２、・・・、Ｎごとにマルチプレクサ３１３から入力した勾配情報を加算して、加算した勾配情報をアキュムレータモジュール３０３へ出力する。例えば、加算器３２１＿１は、勾配出力モジュール３０１ａにおけるビン１に対応するマルチプレクサ３１３＿１からの出力である勾配情報と、勾配出力モジュール３０１ｂにおけるビン１に対応するマルチプレクサ３１３＿１からの出力である勾配情報と、を加算して、アキュムレータモジュール３０３（この場合、後述するビン１アキュムレータ３３１＿１）へ出力する。
【０１９２】
加算器３２２は、勾配出力モジュール３０１ａおよび勾配出力モジュール３０１ｂが、それぞれデータメモリ３０ａ、３０ｂから読み出した勾配情報をぞれぞれ入力して加算し、加算した勾配情報を総和格納メモリ３０４へ出力する。
【０１９３】
アキュムレータモジュール３０３は、特徴量の値（ビン）ごとに、加算モジュール３０２から入力した加算された勾配情報を、現在保持している加算された勾配情報に加算し、最終的に、ビンごとに勾配情報の勾配ヒストグラムを保持する。アキュムレータモジュール３０３は、ビン１アキュムレータ３３１＿１と、ビン２アキュムレータ３３１＿２と、・・・、ビンＮアキュムレータ３３１＿Ｎと、を有する。
【０１９４】
ビン１アキュムレータ３３１＿１、ビン２アキュムレータ３３１＿２、・・・、ビンＮアキュムレータ３３１＿Ｎは、それぞれビン１、２、・・・、Ｎごとに、加算器３２１＿１、３２１＿２、・・・、３２１＿Ｎからそれぞれ入力した加算された勾配情報を、現在保持している加算された勾配情報に加算する。例えば、ビン１アキュムレータ３３１＿１は、加算器３２１＿１から入力した加算された勾配情報を、現在保持している加算された勾配情報に加算し、ビン１の勾配情報の勾配ヒストグラムを保持する。
【０１９５】
総和格納メモリ３０４は、加算器３２２から出力された加算された勾配情報を、現在保持している加算された勾配情報に加算する。すなわち、総和格納メモリ３０４は、すべての学習データに対応する勾配情報の総和が格納される。
【０１９６】
以下、本実施形態に係る勾配ヒストグラム算出モジュール７１の勾配ヒストグラムの算出動作の流れを簡潔に説明する。データカウンタ３１１ａ（３１１ｂ）は、データメモリ３０ａから学習処理の対象となるサンプルデータ（特徴量）、および対応する勾配情報を読み出すためのアドレスを出力する。勾配出力モジュール３０１ａ（３０１ｂ）の比較器３１２は、データメモリ３０ａ（３０ｂ）から読み出した特徴量と、特定のビンの特徴量の値とを入力し、双方を比較して一致した場合、一致した旨を、マルチプレクサ３１３へ出力する。マルチプレクサ３１３は、比較器３１２がデータメモリ３０ａ（３０ｂ）から読み出した特徴量（学習データ）に対応する勾配情報と、０とを入力し、比較器３１２から出力された比較結果に応じて、入力した勾配情報または０を出力する。加算モジュール３０２の加算器３２１＿１、３２１＿２、・・・、３２１＿Ｎは、それぞれビン１、２、・・・、Ｎごとにマルチプレクサ３１３から入力した勾配情報を加算して、加算した勾配情報をアキュムレータモジュール３０３へ出力する。アキュムレータモジュール３０３のビン１アキュムレータ３３１＿１、ビン２アキュムレータ３３１＿２、・・・、ビンＮアキュムレータ３３１＿Ｎは、それぞれビン１、２、・・・、Ｎごとに、加算器３２１＿１、３２１＿２、・・・、３２１＿Ｎからそれぞれ入力した加算された勾配情報を、現在保持している加算された勾配情報に加算して、最終的に、ビンごとに勾配情報の勾配ヒストグラムを保持する。以上の動作を、現在のノードのすべての学習データについて繰り返す。
【０１９７】
以上のような、本実施形態に係る勾配ヒストグラム算出モジュール７１の構成では、従来の図２０で示した構成のように勾配ヒストグラムをメモリに格納するのではなく、特徴量のビンごとに対応したレジスタ（アキュムレータ）に格納するものとしている。図２２に示す勾配ヒストグラム算出モジュール７１の構成では、特徴量のビン数×特徴量次元（図２２では次元を１としている）の数のレジスタがあれば実現することが可能である。すなわち、勾配ヒストグラムを格納するために必要となる全容量は、ビン数×ビット幅×２（一次勾配ｇ、二次勾配ｈ）×特徴量次元となり、分割数に依存しない。したがって、従来の図２０で示した構成の場合と比較して、勾配ヒストグラムを格納するための回路容量を大幅に削減することができる。また、本実施形態に係る勾配ヒストグラム算出モジュール７１の構成では、回路規模は分割数に依存しないので、他のモジュールの回路規模が許せる限り、データパラレルの分割数を増加させることができ、学習処理の速度を向上させることが可能となる。
【０１９８】
例えば、特徴量が８ビット（２５６パターン）で２０００次元であり、勾配情報が一次勾配ｇおよび二次勾配ｈの２つとした場合、必要となるレジスタの数は、以下のようになる。
【０１９９】
２５６（ビン数）×２（一次勾配ｇ、二次勾配ｈ）×２０００［次元］＝１０２４０００［個］
【０２００】
ここで、上述のＶＵ９Ｐというチップの場合、最大レジスタ数は２３６４０００［個］なので、本実施形態に係る勾配ヒストグラム算出モジュール７１の構成で、勾配ヒストグラムの保持に必要なレジスタ数は、当該最大レジスタ数の半分程度に収めることができる。
【０２０１】
図２３は、第２の実施形態のラーニングモジュールにおいて分割数を３とした場合の勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。図２３を参照しながら、データパラレルの分割数を３とした場合の勾配ヒストグラム算出モジュール７１の構成の一例について説明する。なお、図２３では、特徴量が１次元であるものとし、勾配情報として１つ（例えば、一次勾配ｇ）のみを考えた場合について説明する。
【０２０２】
例えば、図２３では、加算モジュール３０２は、加算器３２１＿１＿１、・・・、３２１＿Ｎ＿１と、加算器３２１＿１＿２、・・・、３２１＿Ｎ＿２と、加算器３２２＿１、３２２＿２と、を有する。図２３に示す勾配ヒストグラム算出モジュール７１のように、加算モジュール３０２は、段階的に勾配情報を統合（加算）するものとすればよい。例えば、ビン１について、加算器３２１＿１＿１は、「分割１」から出力された勾配情報と、「分割２」から出力された勾配情報とを加算して、加算器３２１＿１＿２へ出力する。そして、加算器３２１＿１＿２は、加算器３２１＿１＿１から出力された加算値と、「分割３」から出力された勾配情報と、を加算して、アキュムレータモジュール３０３のビン１アキュムレータ３３１＿１へ出力する。
【０２０３】
＜累積勾配算出モジュールの構成および動作＞
図２４は、第２の実施形態のラーニングモジュールの累積勾配算出モジュールのモジュール構成の一例を示す図である。図２４を参照しながら、本実施形態に係るラーニングモジュール２０ａにおける累積勾配算出モジュール７２の構成および動作について説明する。なお、図２４では、データパラレルの分割数を１とし、特徴量が１次元であるものとし、勾配情報として２つ（例えば、一次勾配ｇ、二次勾配ｈ）を考えた場合について説明する。
【０２０４】
図１９に示す従来の累積勾配算出モジュール６２では、しきい値カウンタ２１０の出力（しきい値）をアドレスとして、勾配ヒストグラムメモリ２０４（２０８）にアクセスしていた。図２４では、勾配ヒストグラムは、ビンごとにレジスタ（アキュムレータ）に保持されているので、マルチプレクサを介してすべてのビンからしきい値カウンタのしきい値に対応した値のみを取り出している。
【０２０５】
図２４に示すように、累積勾配算出モジュール７２は、しきい値カウンタ３４０と、アキュムレータ３４１と、ディレイ３４２と、差分器３４３と、アキュムレータ３４４と、ディレイ３４５と、差分器３４６と、マルチプレクサ３４７、３４８と、を有する。また、図２４では、一次勾配ｇに対応するアキュムレータモジュール３０３および総和格納メモリ３０４を、それぞれアキュムレータモジュール３０３ｇおよび総和格納メモリ３０４ｇとしている。また、二次勾配ｈに対応するアキュムレータモジュール３０３および総和格納メモリ３０４を、それぞれアキュムレータモジュール３０３ｈおよび総和格納メモリ３０４ｈとしている。
【０２０６】
しきい値カウンタ３４０は、アキュムレータモジュール３０３ｇ、３０３ｈから、特徴量の値（ビン）ごとに加算された勾配情報（ｇ、ｈ）、すなわち、特徴量の各ビンの勾配ヒストグラムを読み出すためのしきい値を出力する。
【０２０７】
マルチプレクサ３４７は、しきい値カウンタ３４０からのしきい値と、アキュムレータモジュール３０３ｇの各アキュムレータ（ビン１アキュムレータ３３１＿１、ビン２アキュムレータ３３１＿２、・・・、ビンＮアキュムレータ３３１＿Ｎ）の格納値（勾配ヒストグラム）を入力する。そして、マルチプレクサ３４７は、入力した各ビンの勾配ヒストグラムのうち、しきい値カウンタ３４０からのしきい値に対応するビンに対応する勾配ヒストグラムを、アキュムレータ３４１へ出力する。
【０２０８】
マルチプレクサ３４８は、しきい値カウンタ３４０からのしきい値と、アキュムレータモジュール３０３ｈの各アキュムレータ（ビン１アキュムレータ３３１＿１、ビン２アキュムレータ３３１＿２、・・・、ビンＮアキュムレータ３３１＿Ｎ）の格納値（勾配ヒストグラム）を入力する。そして、マルチプレクサ３４８は、入力した各ビンの勾配ヒストグラムのうち、しきい値カウンタ３４０からのしきい値に対応するビンに対応する勾配ヒストグラムを、アキュムレータ３４４へ出力する。
【０２０９】
アキュムレータ３４１は、しきい値カウンタ３４０から出力されたしきい値に対応する勾配情報ｇについての勾配ヒストグラムをマルチプレクサ３４７から入力して、現在格納している勾配ヒストグラムの累積和に対して、さらに累積して、新たな勾配ヒストグラムの累積和として保持する。
【０２１０】
ディレイ３４２は、アキュムレータ３４１から読み出した勾配情報ｇについての勾配ヒストグラムの累積和を、差分器３４３から勾配情報ｇの和ＧＲが出力されるタイミングと合せるために遅延させて、勾配情報ｇの和ＧＬとして出力する。
【０２１１】
差分器３４３は、総和格納メモリ３０４ｇから読み出した勾配情報ｇの総和から、アキュムレータ３４１から読み出した勾配情報ｇについての勾配ヒストグラムの累積和（すなわち、勾配情報ｇの和ＧＬ）を引いて、勾配情報ｇの和ＧＲを算出する。
【０２１２】
アキュムレータ３４４は、しきい値カウンタ３４０から出力されたしきい値に対応する勾配情報ｈについての勾配ヒストグラムをマルチプレクサ３４８から入力して、現在格納している勾配ヒストグラムの累積和に対して、さらに累積して、新たな勾配ヒストグラムの累積和として保持する。
【０２１３】
ディレイ３４５は、アキュムレータ３４４から読み出した勾配情報ｈについての勾配ヒストグラムの累積和を、差分器３４６から勾配情報ｈの和ＨＲが出力されるタイミングと合せるために遅延させて、勾配情報ｈの和ＨＬとして出力する。
【０２１４】
差分器３４６は、総和格納メモリ３０４ｈから読み出した勾配情報ｈの総和から、アキュムレータ３４４から読み出した勾配情報ｈについての勾配ヒストグラムの累積和（すなわち、勾配情報ｈの和ＨＬ）を引いて、勾配情報ｈの和ＨＲを算出する。
【０２１５】
以下、累積勾配算出モジュール７２の勾配情報の和（ＧＬ、ＧＲ、ＨＬ、ＨＲ）の算出動作の流れを簡潔に説明するなお、累積勾配算出モジュール７２による算出処理は、勾配ヒストグラム算出モジュール７１における勾配情報の勾配ヒストグラムの算出・格納処理の動作終了後に開始される。すなわち、勾配ヒストグラム算出モジュール７１による算出処理の終了後は、アキュムレータモジュール３０３ｇ、３０３ｈには、それぞれ、現在のノードのすべての学習データから算出された勾配情報ｇ、ｈについての勾配ヒストグラムが保持してある。
【０２１６】
まず、マルチプレクサ３４７は、しきい値カウンタ３４０からのしきい値と、アキュムレータモジュール３０３ｇの各アキュムレータ（ビン１アキュムレータ３３１＿１、ビン２アキュムレータ３３１＿２、・・・、ビンＮアキュムレータ３３１＿Ｎ）の格納値（勾配ヒストグラム）を入力する。そして、マルチプレクサ３４７は、入力した各ビンの勾配ヒストグラムのうち、しきい値カウンタ３４０からのしきい値に対応するビンに対応する勾配ヒストグラムを、アキュムレータ３４１へ出力する。そして、アキュムレータ３４１は、しきい値カウンタ３４０から出力されたしきい値に対応する勾配情報ｇについての勾配ヒストグラムをマルチプレクサ３４７から入力して、現在格納している勾配ヒストグラムの累積和に対して、さらに累積して、新たな勾配ヒストグラムの累積和として保持する。また、ディレイ３４２は、アキュムレータ３４１から読み出した勾配情報ｇについての勾配ヒストグラムの累積和を、差分器３４３から勾配情報ｇの和ＧＲが出力されるタイミングと合せるために遅延させて、勾配情報ｇの和ＧＬとして、算出モジュール７３へ出力する。そして。差分器３４３は、総和格納メモリ３０４ｇから読み出した勾配情報ｇの総和から、アキュムレータ３４１から読み出した勾配情報ｇについての勾配ヒストグラムの累積和（すなわち、勾配情報ｇの和ＧＬ）を引いて、勾配情報ｇの和ＧＲを算出して、算出モジュール７３へ出力する。なお、マルチプレクサ３４８、アキュムレータ３４４、ディレイ３４５および差分器３４６におる勾配情報ｈに対する処理（勾配情報ｈの和ＨＬ、ＨＲの算出処理）も、上述と同様である。以上の動作を、すべてのしきい値について繰り返すが、この場合、しきい値カウンタ３４０がしきい値を順にカウントアップさせながら一巡して出力することによって実現される。
【０２１７】
このように、予め、勾配ヒストグラム算出モジュール７１による勾配情報の勾配ヒストグラムの算出・格納処理の動作を行ったうえで、累積勾配算出モジュール７２および算出モジュール７３の処理を行うものとしている。これによって、ラーニングモジュール２０ａによる分岐スコア（ゲイン）の算出処理を高速化することができる。
【０２１８】
＜次元数が２の場合のラーニングモジュールの構成＞
図２５は、第２の実施形態に係る学習識別装置において特徴量の種類を２とした場合のラーニングモジュールのモジュール構成の一例を示す図である。図２６は、第２の実施形態のラーニングモジュールにおいて特徴量の種類を２とした場合の勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。図２５および図２６を参照しながら、本実施形態に係る学習識別装置（学習装置の一例）のラーニングモジュール２０ｂの構成および動作について説明する。なお、図２５では、データパラレルの分割数を２とし、特徴量が２次元であるものとして説明する。
【０２１９】
図２５に示すように、ラーニングモジュール２０ｂは、勾配ヒストグラム算出モジュール７１と、累積勾配算出モジュール７２＿１、７２＿２と、算出モジュール７３＿１、７３＿２と、最適条件導出モジュール２２と、を備えている。勾配ヒストグラム算出モジュール７１は、勾配出力モジュール３０１ａ＿１、３０１ａ＿２、３０１ｂ＿１、３０１ｂ＿２と、加算モジュール３０２＿１、３０２＿２と、アキュムレータモジュール３０３＿１、３０３＿２と、総和格納メモリ３０４＿１、３０４＿２と、を有する。図２６に示すように、勾配ヒストグラム算出モジュール７１は、図２５に示した構成に加え、データカウンタ３１１ａ、３１１ｂを有する。
【０２２０】
また、図２６に示すように、勾配出力モジュール３０１ａ＿１、３０１ａ＿２、３０１ｂ＿１、３０１ｂ＿２は、それぞれ、比較器３１２＿１、３１２＿２、・・・、３１２＿Ｎと、マルチプレクサ３１３＿１、３１３＿２、・・・、３１３＿Ｎと、を有する。加算モジュール３０２＿１、３０２＿２は、それぞれ、加算器３２１＿１、３２１＿２、・・・、３２１＿Ｎと、加算器３２２と、を有する。アキュムレータモジュール３０３＿１、３０３＿２は、それぞれ、ビン１アキュムレータ３３１＿１と、ビン２アキュムレータ３３１＿２と、・・・、ビンＮアキュムレータ３３１＿Ｎと、を有する。
【０２２１】
図２５および図２６に示す構成のうち、勾配出力モジュール３０１ａ＿１、３０１ｂ＿１、加算モジュール３０２＿１、アキュムレータモジュール３０３＿１、総和格納メモリ３０４＿１、累積勾配算出モジュール７２＿１、および算出モジュール７３＿１は、「特徴量１」に対応する処理のために用いられる。一方、勾配出力モジュール３０１ａ＿２、３０１ｂ＿２、加算モジュール３０２＿２、アキュムレータモジュール３０３＿２、総和格納メモリ３０４＿２、累積勾配算出モジュール７２＿２、および算出モジュール７３＿２は、「特徴量２」に対応する処理のために用いられる。各モジュールの動作は、図２２および図２４で説明した動作と同様である。
【０２２２】
上述したように、勾配ヒストグラムを格納するために必要となる容量は、ビン数×ビット幅×２（一次勾配ｇ、二次勾配ｈ）×特徴量次元であるので、特徴量の次元数だけ、アキュムレータモジュール３０３（図２５では、アキュムレータモジュール３０３＿１、３０３＿２）が必要となる。しかし、当該容量は、分割数に依存しないので、図２５および図２６に示す例では、分割数が２の場合であるが、分割数が３以上となっても、特徴量の次元が２である限り、アキュムレータモジュール３０３は２つであればよい。
【０２２３】
以上のように、本実施形態に係る学習識別装置のラーニングモジュール２０ａ（２０ｂ）では、勾配ヒストグラム算出モジュール７１は、従来の図２０で示した構成のように勾配ヒストグラムをメモリに格納するのではなく、特徴量のビンごとに対応したレジスタ（アキュムレータ）に格納するものとしている。この勾配ヒストグラム算出モジュール７１の構成では、特徴量のビン数×特徴量次元の数のレジスタがあれば実現することが可能である。すなわち、勾配ヒストグラムを格納するために必要となる全容量は、ビン数×ビット幅×２（一次勾配ｇ、二次勾配ｈ）×特徴量次元となり、分割数に依存しない。したがって、従来の図２０で示した構成の場合と比較して、並列に入力される特徴量および勾配情報について作成された勾配ヒストグラムの情報を保持するメモリ（アキュムレータ、レジスタ）の回路規模を大幅に削減することができる。また、本実施形態に係る勾配ヒストグラム算出モジュール７１の構成では、回路規模は分割数に依存しないので、他のモジュールの回路規模が許せる限り、データパラレルの分割数を増加させることができ、学習処理の速度を向上させることが可能となる。
【０２２４】
［第３の実施形態］
第３の実施形態に係る学習識別装置について、第２の実施形態に係る学習識別装置と相違する点を中心に説明する。本実施形態では、累積勾配算出モジュール７２（勾配出力部の一例）によって算出された勾配情報の和（ＧＬ、ＧＲ、ＨＬ、ＨＲ）から分岐スコアを算出する算出モジュール７３の構成を具体的に説明する。
【０２２５】
（算出モジュールの構成）
図２７は、第３の実施形態のラーニングモジュールの算出モジュールのモジュール構成の概要の一例を示す図である。まず、図２７を参照しながら、本実施形態に係る学習識別装置のラーニングモジュール（ここでは、上述のラーニングモジュール２０ａであるものとする）の算出モジュール７３の構成の概要について説明する。
【０２２６】
算出モジュール７３（分岐スコア算出部）は、上述のように、累積勾配算出モジュール７２により算出された累積勾配、すなわち、勾配情報の和（ＧＬ、ＧＲ、ＨＬ、ＨＲ）を用いて、上述の式（１９）により、各しきい値における分岐スコアを算出するモジュールである。なお、式（１９）で算出される値は、本発明の「指標値」に対応する。図２７に示すように、算出モジュール７３は、左側分岐ゲイン算出モジュール３５１と、右側分岐ゲイン算出モジュール３５２と、加算器３５３と、減算器３５４と、を備えている。算出モジュール７３には、累積勾配算出モジュール７２から１クロックに１セットの勾配情報の和（ＧＬ、ＧＲ、ＨＬ、ＨＲ）（ある条件におけるＧＬ、ＧＲ、ＨＬ、ＨＲ）が入力される。分岐スコアは、ある条件（特徴量、しきい値）で学習データを分岐したときの良さを示す値である。
【０２２７】
左側分岐ゲイン算出モジュール３５１は、累積勾配算出モジュール７２から勾配情報の和（ＧＬ、ＨＬ）、および正則化項λから、式（１９）における［］内の第１項（以下、左側分岐ゲインと称する）を算出するモジュールである。
【０２２８】
右側分岐ゲイン算出モジュール３５２は、累積勾配算出モジュール７２から勾配情報の和（ＧＲ、ＨＲ）、および正則化項λから、式（１９）における［］内の第２項（以下、右側分岐ゲインと称する）を算出するモジュールである。
【０２２９】
加算器３５３は、左側分岐ゲイン算出モジュール３５１により算出された左側分岐ゲインと、右側分岐ゲイン算出モジュール３５２により算出された右側分岐ゲインとを加算する演算回路である。
【０２３０】
減算器３５４は、加算器３５３により算出された左側分岐ゲインと右側分岐ゲインとの和から、式（１９）における［］内の第３項（以下、分岐前ゲインという）を減算する演算回路である。この減算器３５４からの出力が、算出モジュール７３としての出力となり、後段の最適条件導出モジュール２２（導出部）へ入力される。後述するように、分岐スコアについては、各特徴量、各しきい値の分岐スコアの大小関係が把握できればよいので、式（１９）における１／２の乗算、および定数であるγを無視している。
【０２３１】
上述の算出モジュール７３の各演算回路による処理は、各特徴量、各しきい値のすべての条件において行われる。
【０２３２】
図２８は、算出モジュールを除算器を用いた構成で実現した場合の一例を示す図である。次に、図２８を参照しながら、算出モジュール７３の具体的な実装例として、除算器を用いて実装した例を算出モジュール７３＿ｄｖとして説明する。
【０２３３】
図２８に示すように、算出モジュール７３＿ｄｖは、左側分岐ゲイン算出モジュール３５１＿ｄｖと、右側分岐ゲイン算出モジュール３５２＿ｄｖと、加算器３５３と、減算器３５４と、分岐前ゲイン算出モジュール３５５＿ｄｖと、を備えている。なお、加算器３５３および減算器３５４の動作は、図２７で上述した通りである。
【０２３４】
左側分岐ゲイン算出モジュール３５１＿ｄｖは、図２７における左側分岐ゲイン算出モジュール３５１に対応するモジュールであり、二乗計算器３７１と、加算器３７２と、除算器３７３と、を備えている。
【０２３５】
二乗計算器３７１は、累積勾配算出モジュール７２から入力した勾配情報の和ＧＬを二乗、すなわち、和ＧＬと和ＧＬとを乗算する演算回路である。
【０２３６】
加算器３７２は、累積勾配算出モジュール７２から入力した勾配情報の和ＨＬと、正則化項λとの和を演算する演算回路である。
【０２３７】
除算器３７３は、二乗計算器３７１で演算された勾配情報の和ＧＬの二乗を、加算器３７２で演算された勾配情報の和ＨＬと正則化項λとの和で除する演算回路である。除算器３７３で演算された値、すなわち左側分岐ゲインは、加算器３５３へ出力される。
【０２３８】
右側分岐ゲイン算出モジュール３５２＿ｄｖは、図２７における右側分岐ゲイン算出モジュール３５２に対応するモジュールであり、二乗計算器３７４と、加算器３７５と、除算器３７６と、を備えている。
【０２３９】
二乗計算器３７４は、累積勾配算出モジュール７２から入力した勾配情報の和ＧＲを二乗、すなわち、和ＧＲと和ＧＲとを乗算する演算回路である。
【０２４０】
加算器３７５は、累積勾配算出モジュール７２から入力した勾配情報の和ＨＲと、正則化項λとの和を演算する演算回路である。
【０２４１】
除算器３７６は、二乗計算器３７４で演算された勾配情報の和ＧＲの二乗を、加算器３７５で演算された勾配情報の和ＨＲと正則化項λとの和で除する演算回路である。除算器３７６で演算された値、すなわち右側分岐ゲインは、加算器３５３へ出力される。
【０２４２】
分岐前ゲイン算出モジュール３５５＿ｄｖは、図２７における分岐前ゲインを算出するモジュールであり、二乗計算器３７７と、加算器３７８と、除算器３７９と、を備えている。
【０２４３】
二乗計算器３７７は、勾配ヒストグラム算出モジュール７１の総和格納メモリ３０４ｇから入力した勾配情報ｇの総和（実質的に、ＧＬ＋ＧＲ）を二乗、すなわち、当該総和と当該総和とを乗算する演算回路である。
【０２４４】
加算器３７８は、勾配ヒストグラム算出モジュール７１の総和格納メモリ３０４ｈから入力した勾配情報ｈの総和（実質的に、ＨＬ＋ＨＲ）と、正則化項λとの和を演算する演算回路である。
【０２４５】
除算器３７９は、二乗計算器３７７で演算された勾配情報ｇの総和（ＧＬ＋ＧＲ）の二乗を、加算器３７８で演算された勾配情報ｈの総和（ＨＬ＋ＨＲ）と正則化項λとの和で除する演算回路である。除算器３７９で演算された値、すなわち分岐前ゲインは、減算器３５４へ出力される。
【０２４６】
分岐前ゲインは、特徴量の次元には関係ないので、次元に関係なく、分岐前ゲイン算出モジュール３５５＿ｄｖは１つあればよい。一方、左側分岐ゲイン算出モジュール３５１＿ｄｖおよび右側分岐ゲイン算出モジュール３５２＿ｄｖは、それぞれ特徴量の次元数分だけ必要である。したがって、算出モジュール７３＿ｄｖに含まれる除算器は、（特徴量の次元数×２＋１）個必要となる。例えば、特徴量が１００次元である場合、２０１個の除算器が必要となる。上述のように除算器は、加算器および減算器等に比べると回路規模が大きいので特徴量の次元数が増えると共に、ラーニングモジュール２０ａ全体の回路規模も大きくなることになる。そこで、以下、分岐スコアを算出するための算出モジュール７３について、除算器を用いない本実施形態の回路構成について説明する。
【０２４７】
図２９は、第３の実施形態のラーニングモジュールの算出モジュールを除算器を用いない構成で実現した場合の一例を示す図である。図２９を参照しながら、本実施形態の除算器（除算回路）を用いない算出モジュール７３の構成について説明する。
【０２４８】
分岐スコアは、各ノードの分岐条件の算出に用いるので、値そのものは重要ではなく、各条件（特徴量、しきい値）での大小関係が把握されるものであればよい。そこで、本実施形態の算出モジュール７３は、各条件での分岐スコアの大小関係が大きく変わらない範囲で、除算器を用いず、近似手法を用いた演算回路で構成されている。ただし、リーフウェイトを算出するモジュール（後述する図３０に示すリーフウェイト算出モジュール７４）は、リーフウェイトの値そのものが重要であるため、上述のような近似手法を用いるのは好ましくないので、図３０で後述するように、近似手法を用いず、かつ、除算器を用いた演算精度の高い構成によって実現するものとする。上述の式（１９）に示した分岐スコアを算出する式中には、ａ２／ｂという形式の演算が３つ存在し、本実施形態の算出モジュール７３では、当該演算を近似により実現する。また、上述のように、分岐スコアについては、各特徴量、各しきい値の分岐スコアの大小関係が把握できればよいので、式（１９）における１／２の乗算、および定数であるγを無視する。
【０２４９】
図２９に示すように、算出モジュール７３は、左側分岐ゲイン算出モジュール３５１と、右側分岐ゲイン算出モジュール３５２と、加算器３５３と、減算器３５４と、分岐前ゲイン算出モジュール３５５と、を備えている。なお、加算器３５３および減算器３５４の動作は、図２７で上述した通りである。
【０２５０】
左側分岐ゲイン算出モジュール３５１は、加算器３６１と、近似モジュール３６２と、を備えている。
【０２５１】
加算器３６１は、累積勾配算出モジュール７２から入力した勾配情報の和ＨＬと、正則化項λとの和を演算する演算回路である。
【０２５２】
近似モジュール３６２は、累積勾配算出モジュール７２からの勾配情報の和ＧＬ、および、加算器３６１で算出された勾配情報の和ＨＬと正則化項λとの和を入力し、左側分岐ゲインを算出するモジュールである。ただし、具体的には、近似モジュール３６２は、左側分岐ゲインの対数の近似値を求める。近似モジュール３６２の構成および動作の詳細は、図３１〜図３３で後述する。
【０２５３】
右側分岐ゲイン算出モジュール３５２は、加算器３６３と、近似モジュール３６４と、を備えている。
【０２５４】
加算器３６３は、累積勾配算出モジュール７２から入力した勾配情報の和ＨＲと、正則化項λとの和を演算する演算回路である。
【０２５５】
近似モジュール３６４は、累積勾配算出モジュール７２からの勾配情報の和ＧＲ、および、加算器３６３で算出された勾配情報の和ＨＲと正則化項λとの和を入力し、右側分岐ゲインを算出するモジュールである。ただし、具体的には、近似モジュール３６４は、右側分岐ゲインの対数の近似値を求める。近似モジュール３６４の構成および動作の詳細は、図３１〜図３３で後述する。
【０２５６】
分岐前ゲイン算出モジュール３５５は、図２７における分岐前ゲインを算出するモジュールであり、加算器３６５と、近似モジュール３６６と、を備えている。
【０２５７】
加算器３６５は、勾配ヒストグラム算出モジュール７１の総和格納メモリ３０４ｈから入力した勾配情報ｈの総和（実質的に、ＨＬ＋ＨＲ）と、正則化項λとの和を演算する演算回路である。
【０２５８】
近似モジュール３６６は、勾配ヒストグラム算出モジュール７１の総和格納メモリ３０４ｇから入力した勾配情報ｇの総和（実質的に、ＧＬ＋ＧＲ）と、および、加算器３６５で算出された勾配情報ｈの総和（ＨＬ＋ＨＲ）と正則化項λとの和を入力し、分岐前ゲインを算出するモジュールである。ただし、具体的には、近似モジュール３６６は、分岐前ゲインの対数の近似値を求める。近似モジュール３６６の構成および動作の詳細は、図３１〜図３３で後述する。
【０２５９】
図３０は、第３の実施形態のラーニングモジュールのリーフウェイト算出モジュールのモジュール構成の一例を示す図である。ここで、図３０を参照しながら、本実施形態に係るリーフウェイト算出モジュール７４（リーフウェイト算出部）の構成および動作について説明する。なお、リーフウェイト算出モジュール７４は、図２１に示すラーニングモジュール２０ａに備えられているものとする。
【０２６０】
リーフウェイト算出モジュール７４は、勾配ヒストグラム算出モジュール７１の総和格納メモリ３０４ｇから入力した勾配情報ｇ（一次勾配）の総和（ＧＬ＋ＧＲ）、総和格納メモリ３０４ｈから入力した勾配情報ｈ（二次勾配）の総和（ＨＬ＋ＨＲ）、および正則化項λを用いて、上述の式（１８）により、リーフバリューを算出するモジュールである。図３０に示すように、リーフウェイト算出モジュール７４は、加算器３６７と、除算器３６８と、符号反転器３６９と、を備えている。
【０２６１】
加算器３６７は、勾配ヒストグラム算出モジュール７１の総和格納メモリ３０４ｈから入力した勾配情報ｈの総和（ＨＬ＋ＨＲ）と、正則化項λとの和を演算する演算回路である。
【０２６２】
除算器３６８は、勾配ヒストグラム算出モジュール７１の総和格納メモリ３０４ｇから入力した勾配情報ｇの総和（ＧＬ＋ＧＲ）を、加算器３６７で演算された勾配情報ｈの総和（ＨＬ＋ＨＲ）と正則化項λとの和を除する演算回路である。
【０２６３】
符号反転器３６９は、除算器３６８で演算された値の符号を反転させてリーフウェイトして求める演算回路である。
【０２６４】
リーフウェイトは、分岐スコアと異なり、値そのものが重要であるため、リーフウェイト算出モジュール７４は、近似手法を用いず、かつ、図３０に示すような除算器を用いた演算精度の高い回路構成によって実現されるので、数値精度の高いリーフウェイトを算出することができる。
【０２６５】
また、算出モジュール７３に関しては除算器を用いず、近似手法を用いた算出処理を行うので、リーフウェイト算出モジュール７４の回路規模よりも小さい回路規模で実現することが可能となる。
【０２６６】
（近似モジュールの構成）
図３１は、第３の実施形態の算出モジュールの近似モジュールのモジュール構成の一例を示す図である。図３２は、対数曲線の線形補間を説明する図である。図３１および図３２を参照しながら、図２９に示した左側分岐ゲイン算出モジュール３５１、右側分岐ゲイン算出モジュール３５２および分岐前ゲイン算出モジュール３５５それぞれにおける近似モジュール３６２、３６４、３６６の構成および動作について説明する。なお、以下では、このうち近似モジュール３６２の構成を例として説明するが、近似モジュール３６４、３６６についても構成は同様である。
【０２６７】
まず、上述の式（１９）に示す分岐スコア（Ｇａｉｎ）の対数を考える。分岐スコアの対数は、以下の式（２３）で求められる。
【数２３】
2020027451.tif 000029
【０２６８】
式（２３）が示すように、ａ２／ｂの形式の対数は、２×ｌｏｇ（ａ）−ｌｏｇ（ｂ）の形式となり、除算を用いずに演算が可能となる。また、２×ｌｏｇ（ａ）の演算についても、（ｌｏｇ（ａ）＋ｌｏｇ（ａ））という加算処理、またはｌｏｇ（ａ）の値のビットシフトにより実現可能である。そして、式（２３）が示すように、６つのｌｏｇ演算を行うことによって、分岐スコアの対数を求めることができる。ただし、分岐前ゲインについては、特徴量ごとに求める必要がないので、特徴量の次元×４＋２のｌｏｇ演算が必要となる。この対数の演算は、正確な値を計算する場合は回路規模が大きくなることもあるが、ｌｏｇ（ａ）の演算には、後述するように線形補間を用いた近似演算を用いる。これによって、対数演算前よりも規模の小さな演算回路により演算が可能となる。この場合における上述の式（２３）の演算（近似演算）を実現する近似モジュール３６２のモジュール構成について図３１を参照しながら説明する。
【０２６９】
図３１に示すように、近似モジュール３６２は、対数近似モジュール３８１と、ビットシフト３８２と、対数近似モジュール３８３と、ディレイ３８４と、減算器３８５と、を備えている。
【０２７０】
対数近似モジュール３８１は、勾配情報の和ＧＬの対数ｌｏｇ（ＧＬ）の近似値を算出するモジュールである。ここで、対数の近似値を求めるための線形補間について図３２を参照しながら説明する。上述の式（２３）における各対数は、底が２であるものとする。図３２に示すように、対数ｌｏｇ（ｘ）のグラフの入力ｘについて複数の区間に分け、各区間で直線による近似（線形補間）を行う。ここで、上述のように、分岐スコアについては、各特徴量、各しきい値の分岐スコアの大小関係が把握できればよく、分岐スコアの値そのもの、さらにはその対数の値そのものは重要ではないため、粗い近似（分割する区間を少なくした場合での線形補間による近似）を考える。図３２に示す例では、１〜２の区間、２〜４の区間、４〜８の区間、８〜１６の区間、１６以上の区間に分けている。この場合、対数ｌｏｇ（ｘ）は、底が２であるため、グラフ上の各区間の境界点の座標はそれぞれ（２０，０）、（２１，１）、（２２，２）、（２３，３）、（２４，４）となる。そして、１〜２の区間、２〜４の区間、４〜８の区間、８〜１６の区間をそれぞれ線形補間した各直線の傾きは、２０、２−１、２−２、２−３、すなわち、いずれも２のべき乗で表される。このため、図３３で後述するように、線形補間をした直線の傾きを乗じる演算は、ビットシフトにより実現することが可能となる。対数近似モジュール３８１の具体的な構成は、図３３で後述する。
【０２７１】
ビットシフト３８２は、対数近似モジュール３８１により算出された勾配情報の和ＧＬの対数ｌｏｇ（ＧＬ）（近似値）を２倍した値（２×ｌｏｇ（ＧＬ））を算出する演算回路である。具体的には、ビットシフト３８２によって２倍する乗算は、ビットをシフトする処理によって実現できる。
【０２７２】
対数近似モジュール３８３は、上述の加算器３６１により演算された勾配情報の和ＨＬと正則化項λとの和の対数ｌｏｇ（ＨＬ＋λ）の近似値を算出するモジュールである。なお、対数近似モジュール３８３による近似値の算出動作は、上述の対数近似モジュール３８１と同様である。
【０２７３】
ディレイ３８４は、ビットシフト３８２により演算された２×ｌｏｇ（ＧＬ）の減算器３８５への入力とタイミングを合わせるために、対数近似モジュール３８３により算出された対数ｌｏｇ（ＨＬ＋λ）を遅延して出力する演算回路である。
【０２７４】
減算器３８５は、ビットシフト３８２により演算された２×ｌｏｇ（ＧＬ）から、ディレイ３８４から出力された対数ｌｏｇ（ＨＬ＋λ）を減算する演算回路である。この減算器３８５からの出力が、近似モジュール３６２として出力である左側分岐ゲインの対数（近似値）となる。同様に、近似モジュール３６４の出力は、右側分岐ゲインの対数（近似値）であり、近似モジュール３６６の出力は、分岐前ゲインの対数（近似値）である。
【０２７５】
（対数近似モジュールの構成）
図３３は、第３の実施形態の近似モジュールの対数近似モジュールのモジュール構成の一例を説明する図である。図３４は、線形補間の基準値を説明する図である。図３３および図３４を参照しながら、図３１に示した対数近似モジュール３８１、３８３の構成および動作について説明する。なお、以下では、このうち対数近似モジュール３８１の構成を例として説明するが、対数近似モジュール３８３についても構成は同様である。
【０２７６】
対数近似モジュール３８１は、上述のように、勾配情報の和ＧＬの対数ｌｏｇ（ＧＬ）の近似値を算出するモジュールである。対数近似モジュール３８１は、区間判定モジュール３９０と、区間近似モジュール４００と、を有する。
【０２７７】
区間判定モジュール３９０は、対数ｌｏｇ（ＧＬ）の入力（ここではＧＬ）について分割した複数の区間のうち、実際に入力した勾配情報の和ＧＬがどの区間に属するかを判定するモジュールである。ここでは、分割される区間は、１〜２の区間、２〜４の区間、４〜８の区間、８以上の区間の４つの区間であるものとする。区間判定モジュール３９０は、定数出力器３９１ａ〜３９１ｃと、比較器３９２ａ〜３９２ｃと、比較結果出力器３９３と、区間出力器３９４と、を有する。
【０２７８】
定数出力器３９１ａは、１〜２の区間と、２〜４の区間との境界点のｘ座標である「２」を、比較器３９２ａへ出力する回路である。定数出力器３９１ｂは、２〜４の区間と、４〜８の区間との境界点のｘ座標である「４」を、比較器３９２ｂへ出力する回路である。定数出力器３９１ｃは、４〜８の区間と、８以上区間との境界点のｘ座標である「８」を、比較器３９２ｃへ出力する回路である。
【０２７９】
比較器３９２ａは、入力値（勾配情報の和ＧＬ）と、定数出力器３９１ａから出力された「２」とを比較して、「２」以上であるか否かを示す情報（例えば、０か１のビット情報）を出力する演算回路である。比較器３９２ｂは、入力値（勾配情報の和ＧＬ）と、定数出力器３９１ｂから出力された「４」とを比較して、「４」以上であるか否かを示す情報（例えば、０か１のビット情報）を出力する演算回路である。比較器３９２ｃは、入力値（勾配情報の和ＧＬ）と、定数出力器３９１ｃから出力された「８」とを比較して、「８」以上であるか否かを示す情報（例えば、０か１のビット情報）を出力する演算回路である。
【０２８０】
比較結果出力器３９３は、比較器３９２ａ〜３９２ｃそれぞれからの出力値を集約して各出力値を示す情報を出力する演算回路である。例えば、比較器３９２ａからの出力が「１」（２以上）であり、比較器３９２ｂからの出が「０」（４未満）であり、比較器３９２ｃからの出力が「０」（８未満）である場合、比較結果出力器３９３は、「００１」のようなビット情報を出力する。
【０２８１】
区間出力器３９４は、比較結果出力器３９３にから出力されたビット情報から、入力値（勾配情報の和ＧＬ）がどの区間に属するかを判定し、当該区間を示す情報を出力する演算回路である。例えば、比較器３９２ａ〜３９２ｃからの出力（すなわち、比較結果出力器３９３からの出力）と、各区間を示す情報との対応付けが、下記の（表５）に示す態様でなされているものとする。
【表５】
2020027451.tif 000030
【０２８２】
区間出力器３９４は、例えば、入力値（勾配情報の和ＧＬ）が「５」である場合、比較結果出力器３９３からの出力「０１１」から、入力値（勾配情報の和ＧＬ）が値「２」で示される区間（４〜８の区間）に属するものと判定し、当該区間を示す情報（例えば、「２」を示すビット情報）を出力する。区間出力器３９４からの出力情報は、後述する開始点出力器４０１、基準値出力器４０５および加算器４０６それぞれに入力される。
【０２８３】
区間近似モジュール４００は、区間判定モジュール３９０により判定された勾配情報の和ＧＬが属する区間に基づいて、勾配情報の和ＧＬの対数ｌｏｇ（ＧＬ）の近似値を算出するモジュールである。区間近似モジュール４００は、開始点出力器４０１と、減算器４０２と、シフト４０３ａ〜４０３ｄと、選択器４０４と、基準値出力器４０５と、加算器４０６と、を有する。
【０２８４】
開始点出力器４０１は、区間判定モジュール３９０（区間出力器３９４）からの出力が示す入力値（勾配情報の和ＧＬ）が属する区間の開始点を出力する演算回路である。例えば、区間判定モジュール３９０からの出力が「２」である場合、開始点出力器４０１は、４〜８の区間の開始点である「４」を出力する。
【０２８５】
減算器４０２は、入力値（勾配情報の和ＧＬ）から、開始点出力器４０１からの区間の開始点を減算する演算回路である。図３４に示す直線のグラフは、ある区間での線形補間のグラフを示しており、横軸ｘは、入力値（勾配情報の和ＧＬ）であり、縦軸ｙは、勾配情報の和ＧＬの対数ｌｏｇ（ＧＬ）（近似値）を示す。この図３４に示すグラフが示す区間は、開始点（開始位置）ｘ０から終了点（終了位置）ｘ１までの区間である。そして、開始点（開始位置）ｘ０での対数（近似値）がｙ０であり、終了点（終了位置）ｘ１での対数（近似値）がｙ１である。そして、ｘ＝入力値（勾配情報の和ＧＬ）である場合の対数ｌｏｇ（ｘ）の線形補間による近似値がｙであることを示している。図３４に示す例の場合、減算器４０２により、ｘ−ｘ０が算出されることになる。
【０２８６】
シフト４０３ａは、減算器４０２の出力値に対して１〜２の区間の線形補間のグラフの傾きを乗じる演算回路である。シフト４０３ｂは、減算器４０２の出力値に対して２〜４の区間の線形補間のグラフの傾きを乗じる演算回路である。シフト４０３ｃは、減算器４０２の出力値に対して４〜８の区間の線形補間のグラフの傾きを乗じる演算回路である。シフト４０３ｄは、減算器４０２の出力値に対して８以上の区間の線形補間のグラフの傾きを乗じる演算回路である。ただし、シフト４０３ｄは、８以上の区間の傾きとして、例えば、８〜１６の区間での線形補間のグラフの傾きを想定するものとすればよい。各区間における線形補間のグラフ（直線）の傾きは、上述のように２のべき乗で表されるので、シフト４０３ａ〜４０３ｄによる演算処理は、ビットシフトにより実現することができる。
【０２８７】
選択器４０４は、シフト４０３ａ〜４０３ｄそれぞれの出力値を入力し、このうち、区間出力器３９４から入力した入力値（勾配情報の和ＧＬ）が属する区間に対応する出力値を加算器４０６へ出力する演算回路である。例えば、区間出力器３９４からの出力が１〜２の区間である場合、選択器４０４は、シフト４０３ａからの出力値、すなわち、減算器４０２の出力値に対して１〜２の区間の線形補間のグラフの傾きを乗じた値を出力する。
【０２８８】
基準値出力器４０５は、区間出力器３９４から入力した入力値（勾配情報の和ＧＬ）が属する区間に対応する基準値を、加算器４０６へ出力する演算回路である。具体的には、当該区間が、図３４に示す線形補間のグラフに対応する区間である場合、ｙ０が、当該区間に対応する基準値となる。
【０２８９】
加算器４０６は、選択器４０４からの出力値と、基準値出力器４０５からの基準値とを加算する演算部である。図３４に示す線形補間のグラフを例にすると、加算器４０６は、ｘ−ｘ０の値に、当該グラフの傾きを乗じた値（すなわち、ｙ−ｙ０）に、基準値ｙ０を加算することによって対数ｌｏｇ（ｘ）の線形補間による近似値であるｙが算出されることになる。この加算器４０６からの出力が、対数近似モジュール３８１としての出力である勾配情報の和ＧＬの対数ｌｏｇ（ＧＬ）の近似値となる。
【０２９０】
以上のような、算出モジュール７３の構成、近似モジュール３６２、３６４、３６６の構成、および対数近似モジュール３８１、３８３の構成によって、分岐スコアの対数の近似値を求めることができる。したがって、最適条件導出モジュール２２は、算出モジュール７３から出力された分岐スコアの対数の近似値が最大となる特徴量の番号（特徴量番号）およびしきい値を導出する。
【０２９１】
なお、図３３においては、区間を４つに分割した場合の例を示しているが、これに限定されるものではなく、回路規模が許容される限りにおいて５以上の区間に分割して線形補間による近似を行うものとしてもよく、認識精度に問題がなければ、回路規模を小さくするために３以下の区間に分割するものとしてもよい。
【０２９２】
以上のように、本実施形態の算出モジュール７３は、累積勾配算出モジュール７２によって算出された勾配情報の和（ＧＬ、ＧＲ、ＨＬ、ＨＲ）から、上述の式（１９）で算出される分岐スコアそのものの代わりに、上述の式（２３）で示される分岐スコアの対数を算出するものとしている。さらに、分岐スコアの対数を算出する際には、厳密な対数の値ではなく、当該対数のグラフに対する線形補間により対数の近似値を求めている。これによって、最適条件導出モジュール２２は、各特徴量番号、各しきい値での分岐スコアそのものを比較する代わりに、分岐スコアの対数の近似値を用いることによって、同等の大小関係の比較処理を行うことができる。これによって、式（１９）で含まれる除算を行う除算器を含むことなく、回路構成を実現できるので、勾配ブースティングの分岐スコアを算出するための回路規模の増加を抑制することができる。
【０２９３】
また、対数については線形補間による近似値を求めるものとし、線形補間の対象となる各区間でのグラフ（直線）の傾きが２のべき乗で表されるように区間を分割するものとしている。これによって、線形補間をした直線の傾きを乗じる演算は、乗算そのものを行う演算回路ではなく、回路規模の小さいビットシフト処理を行う回路で実現することができる。
【０２９４】
また、上述の分岐スコアの対数の近似値を演算するための各種モジュールは、算出モジュール７３内に存在するものであり、特徴量の次元が複数の場合は、算出モジュール７３も特徴量ごとに配置されるので、当該各種モジュールも同様に算出モジュール７３ごとに配置される。したがって、特徴量の次元が複数であっても問題なく動作する。
【０２９５】
なお、算出モジュール７３は、上述の式（１９）で示される分岐スコアの対数を求め、かつその近似値を算出する動作を示したが、この場合、式（１９）で示される分岐スコアの対数を「分岐スコア」と捉えることもできるし、式（１９）で示される分岐スコアの対数の近似値を「分岐スコア」と捉えることもできる。
【０２９６】
また、本実施形態の算出モジュール７３は、累積勾配算出モジュール７２から出力された勾配情報の和（ＧＬ、ＧＲ、ＨＬ、ＨＲ）を入力して分岐スコア（正確には分岐スコアの対数の近似値）を算出するものとしたが、これに限定されるものではない。例えば、上述の図１９に示す累積勾配算出モジュール６２（勾配出力部の一例）からの勾配情報の和（ＧＬ、ＧＲ、ＨＬ、ＨＲ）を入力して分岐スコアを算出するものとしてもよい。
【０２９７】
また、本実施形態にの算出モジュール７３は、ラーニングモジュール２０ａに含まれるモジュールとして説明したが、上述の図２５に示す複数の特徴量に対応したラーニングモジュール２０ｂに含まれるモジュールであってもよいのは言うまでもない。
【実施例１】
【０２９８】
以下では、上述の第１の実施形態に係る学習識別装置１における学習処理の速度の予測結果を説明する。
【０２９９】
まずは、比較のためＧＢＤＴの代表的なライブラリである上述のＸＧＢｏｏｓｔ、およびＬｉｇｈｔＧＢＭの学習速度の評価を行った。２０１７年１２月時点では、ＬｉｇｈｔＧＢＭでＧＰＵを用いた場合が高速であり、これについて実測した。
【０３００】
ハードウェア構成のクロックから処理時間を算出した。今回実装したハードウェアのロジックでは、ラーニングモジュール２０による学習処理、クラシフィケーションモジュール５０による識別処理（ノード単位）、およびクラシフィケーションモジュール５０による識別処理（木単位）の３つが主な処理である。
【０３０１】
＜ラーニングモジュールの処理について＞
ここでは、サンプルデータの各特徴量から勾配ヒストグラムの作成および分岐スコアの算出が支配的である。サンプルデータの各特徴量からの勾配ヒストグラムの作成では、１デプス（階層）ごとに全サンプルデータを読む必要がある。木のデプスが浅い段階で学習が終了するサンプルデータもあるので、この見積りは最大値である。分岐スコアの計算は勾配ヒストグラムの全ビンを参照するのでビンの数（特徴量の次元）のクロックを要する。以上より、ラーニングモジュール２０の処理のクロック数Ｃｌｅａｒｎｉｎｇは以下の式（２４）で表される。
【数２４】
2020027451.tif 000031
【０３０２】
ここで、ｎｓａｍｐｌｅ＿ｔｒａｉｎは決定木の学習に使うサンプルデータ数であり、一般に全サンプルデータからサブサンプルされた集合である。また、ｍａｘｄｅｐｔｈは決定木の最大深さであり、ｎｆｅａｔｕｒｅはビンの数（特徴量の次元）であり、ｎｎｏｄｅはノード数である。
【０３０３】
＜クラシフィケーションモジュールの処理（ノード単位）について＞
ここでは、学習したノードの結果を使って、サンプルデータが左右どちらの下位のノードに割り当てられるかを処理している。深さごとに処理するサンプルデータの総数は変わらないので、クロック数ＣＣｌａｓｓｉｆｉｃａｔｉｏｎ＿ｎｏｄｅは以下の式（２５）で表される。実際は途中で学習が終了するノードがあるため、下記の見積は最大値である。
【数２５】
2020027451.tif 000032
【０３０４】
＜クラシフィケーションモジュールの処理（木単位）について＞
ここでは、決定木１つの学習が終了した後、次の決定木の学習のため、サンプルデータごとに勾配情報の更新を行う。そのため、学習した決定木を用いて、全サンプルデータについて予測を行う必要がある。木単位の処理では、深さ分だけ遅延が発生する。この場合、クロック数ＣＣｌａｓｓｉｆｉｃａｔｉｏｎ＿ｔｒｅｅは以下の式（２６）で表される。
【数２６】
2020027451.tif 000033
【０３０５】
ここで、全サンプルデータとは、サブサンプル前の全学習サンプルデータと、全バリデーションサンプルデータの総数である。
【０３０６】
以上より、決定木１つ分の学習処理にかかるクロック数Ｃｔｒｅｅ（最大値）は以下の式（２７）で表される。
【数２７】
2020027451.tif 000034
【０３０７】
ＧＢＤＴは多数の決定木から構成されるので、決定木の本数をｎｔｒｅｅとすると、ＧＢＤＴモデル全体のクロック数Ｃｇｂｄｔは以下の式（２８）で表される。
【数２８】
2020027451.tif 000035
【０３０８】
以上は、上述したフィーチャパラレル（Ｆｅａｔｕｒｅ  Ｐａｒａｌｌｅｌ）の場合の試算であり、このモジュールを並列に多数配置し、データで分割した場合のいわゆるデータパラレル（Ｄａｔａ  Ｐａｒａｌｌｅｌ）では、各モジュール毎に各ノードでのデータ数に偏りがない場合には、基本的にそのモジュール数倍の高速化が可能である。どの程度偏りが存在するかは、サンプルデータおよび各モジュールへのサンプルデータの分割の方法に依存するため、今後、本オーバーヘッドに関しては実データを用いて検討を行う。予測としては、本オーバーヘッドを考慮しても、効率で５０％以上は出るものと推測される。
【０３０９】
＜使用データについて＞
テスト用のサンプルデータとしては、約１０万件からランダムに学習データと識別データ（評価用データ）とを選択したものである。以下にデータセットの概要を示す。
【０３１０】
・クラス数          ：２
・特徴量次元        ：１２９
・学習データ数      ：６３４１５
・評価用データ数    ：３１７０７
【０３１１】
また、速度の測定条件を以下の（表６）に示す。ＦＰＧＡのクロック周波数は仮に１００［ＭＨｚ］での動作とした（実際にはそれ以上となる可能性が高い）。
【表６】
2020027451.tif 000036
【０３１２】
＜ハードウェアロジックの試算＞
上述した速度の計算式を用いた上述のアーキテクチャでの学習速度の試算を以下の（表７）に示す。ただし、本試算はすべてのサンプルデータが末端の枝まで行った場合の試算であり最悪値である。
【表７】
2020027451.tif 000037
【０３１３】
＜ＣＰＵ・ＧＰＵでの実測を含めた比較結果＞
ＣＰＵ・ＧＰＵでの実測結果を以下の（表８）に示す。なお、比較のため、ハードロジックの試算結果も含めて表示している。ここまでの試算はフィーチャパラレル（Ｆｅａｔｕｒｅ  Ｐａｒａｌｌｅｌ）のみであるため、参考として、データパラレル（Ｄａｔａ  Ｐａｒａｌｌｅｌ）も併用した場合の試算結果も追加した。
【表８】
2020027451.tif 000038
【０３１４】
本データに関しては、ＧＰＵを使用した場合にもＣＰＵよりも速度が落ちていることがわかる。ＬｉｇｈｔＧＢＭの開発元のマイクロソフト社はＧＰＵ使用の場合には、３倍から１０倍程度高速化するが、データに大きく依存するとしており、本データに関しては、ＧＰＵでの高速化がうまくいかなかったことがわかる。また、この結果はＧＢＤＴのアルゴリズムが、ＣＮＮほどＧＰＵの高速化が容易ではないことを示している。ＣＰＵでの結果では、最も基本的なライブラリであるＸＧＢｏｏｓｔと比較して、後発のＬｉｇｈｔＧＢＭでは１０倍程度高速となっている。なお、フィーチャパラレル（Ｆｅａｔｕｒｅ  Ｐａｒａｌｌｅｌ）のみのハードロジックでも、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）での最も速いＣＰＵ（ＬｉｇｈｔＧＢＭ）と比較して、２．３倍程度高速となっている。また、１５並列のデータパラレル（Ｄａｔａ  Ｐａｒａｌｌｅｌ）も使用した場合には、データパラレル（Ｄａｔａ  Ｐａｒａｌｌｅｌ）の効率を７５％とした場合でも、２５倍以上、ＡＷＳ  ｆ１．１６ｘｌａｒｇｅインスタンスを考えた場合で２４０並列の場合の効率を５０％とすると、２７５倍以上の速度となることが試算された。ただし、この試算はメモリ帯域が限界の場合の試算である。
【０３１５】
なお、消費電力に関してはＦＰＧＡでは数［Ｗ］と予測され、ＣＰＵおよびＧＰＵでの１００［Ｗ］以上であることを考えると、速度に加えて消費電力が２桁異なるため、電力効率では３桁以上の差となる可能性がある。
【実施例２】
【０３１６】
以下では、上述の第３の実施形態に係る学習識別装置において、例えば、図２８に示した除算器３７３を実現するための回路規模と、除算器３７３の代わりに図２９に示す近似モジュール３６２を用いた場合の回路規模とを比較した。また、ここでは、ザイリンクス社のハイエンドなＦＰＧＡであるｖｉｒｔｅｘ  ＵｌｔｒａＳｃａｌｅ＋のＶＵ９Ｐというチップを用いた場合について考える。
【０３１７】
一番リソースの少ない８ビットのｒａｄｉｘ２を用いた除算器３７３の場合、必要なＬＵＴ（ルックアップテーブル）およびＦＦ（フリップフロップ）の数は、以下のようになる。
【０３１８】
ＬＵＴ：６７［個］
ＦＦ  ：１３４［個］
【０３１９】
除算器の場合、入力に対して演算結果が出るまで時間がかかり、上述の場合８クロックかかる。高速化を図る第３の実施形態の算出モジュール７３においては、１クロックで１条件の分岐スコアの算出ができないと、処理速度の高速化にはつながらないため、１クロックで１条件の分岐スコアを算出するためには８個の除算器が必要になる。したがってこの場合の除算器の回路規模は以下のようになる。
【０３２０】
ＬＵＴ：６７×８＝５３６［個］
ＦＦ  ：１３４×８＝１０７２［個］
【０３２１】
一方、除算器３７３の代わりに近似モジュール３６２を用い、上述のような４区間に分割した場合を想定して回路を構成する場合であって、Ｖｉｖａｄｏ  ｓｙｓｔｅｍ  ｇｅｎｅｒａｔｏｒで実装した場合の回路規模は以下のようになる。
【０３２２】
（対数演算部分：対数近似モジュール３８１、３８３）
ＬＵＴ：５３［個］
ＦＦ  ：５４［個］
【０３２３】
（減算器３８５）
ＬＵＴ：５５［個］
ＦＦ  ：１４［個］
【０３２４】
（ビットシフト３８２）
ＬＵＴ：０［個］
ＬＵＴ：０［個］
【０３２５】
したがって、線形補間による近似を用いた場合の回路規模の合計は以下のようになる。
【０３２６】
ＬＵＴ：５３×２＋５５＝１６１［個］
ＦＦ  ：５４×２＋１４＝１２２［個］
【０３２７】
したがって、除算器３７３の場合と比較して、近似モジュール３６２を用いた場合では、ＬＵＴで約１／４、ＦＦで約１／９に回路規模を削減できることが確認された。また、上述の回路規模の比較は、回路規模の小さい除算器を想定したものであり、入力ビット数、または要求される除算の精度によっては、回路規模の大きな除算器が必要となるため、その場合の削減効果は大きくなる。
【実施例３】
【０３２８】
以下では、上述の第３の実施形態に係る学習識別装置において、除算器を用いた場合と対数近似モジュールを用いた場合とで精度を比較した。計算環境は、ＭＡＴＬＡＢのｆｉｘｅｄ  ｐｏｉｎｔ  ｄｅｓｉｇｎｅｒを用いてＧＢＤＴ学習の変数を固定小数点で演算するものとした。
【０３２９】
・データセット
ＵＣＩリポジトリのＨＩＧＧＳデータセットを用いた。ＨＩＧＧＳデータセットは、１１００万サンプル、特徴量が２８次元、２クラス判別のデータセットである。
【０３３０】
このデータセットはサンプル数が多いため、データ番号の下位１００００サンプルを利用するものとした。このうち５０００サンプルを学習データとして、残りの５０００サンプルを識別データ（評価用データ）として用いた。また、学習率を１、正則化項γを０、正則化項λを１、最大の木の深さを２、ブースティングでの木の数を１００、データサンプリングレートを１、フィーチャサブサンプリングレートを１とした。
【０３３１】
以上の条件で学習した場合の認識性能（識別性能）の結果を図３５および図３６に示す。認識性能は、２クラス分類の良さを表すのに一般的に用いられるＡＵＣ（Ａｒｅａ  Ｕｎｄｅｒ  ｔｈｅ  Ｃｕｒｖｅ）を用いた。ＡＵＣとは、ＲＯＣ（Ｒｅｃｅｉｖｅｒ  Ｏｐｅｒａｔｉｎｇ  Ｃｈａｒａｃｔｅｒｉｓｔｉｃ）曲線の形状が左上方向にシフトする場合のシフト具合を曲線の面積で表したグラフである。学習データを用いた場合のＡＵＣを図３５に示し、識別データを用いた場合のＡＵＣを図３６に示す。
【０３３２】
双方のＡＵＣが示すように、学習データおよび識別データ共に、対数近似を用いた場合でも、対数近似を用いない通常の場合の認識性能に対して低下することなく学習ができているという結果が得られた。これによって、認識性能を維持しつつ、分岐スコアを算出する回路規模を大幅に削減することができることが確認された。
【符号の説明】
【０３３３】
１、１ａ  学習識別装置
１０  ＣＰＵ
１１  制御部
２０、２０ａ、２０ｂ  ラーニングモジュール
２１、２１＿１、２１＿２  ゲイン算出モジュール
２２  最適条件導出モジュール
３０、３０ａ、３０ｂ  データメモリ
３１  ポインタメモリ
３２  フィーチャメモリ
３３  ステートメモリ
４０  モデルメモリ
４１＿１  デプス０用メモリ
４１＿２  デプス１用メモリ
４１＿３  デプス２用メモリ
５０、５０ａ、５０ｂ  クラシフィケーションモジュール
５１＿１  ノード０判別器
５１＿２  ノード１判別器
５１＿３  ノード２判別器
６１、６１＿１、６１＿２  勾配ヒストグラム算出モジュール
６１ａ、６１ｂ  勾配ヒストグラム算出モジュール
６２、６２＿１、６２＿２  累積勾配算出モジュール
６３、６３＿１、６３＿２  算出モジュール
７１  勾配ヒストグラム算出モジュール
７２、７２＿１、７２＿２  累積勾配算出モジュール
７３、７３＿１、７３＿２  算出モジュール
７３＿ｄｖ  算出モジュール
７４  リーフウェイト算出モジュール
２０１、２０１ａ、２０１ｂ  データカウンタ
２０２、２０２ａ、２０２ｂ  加算器
２０３、２０３ａ、２０３ｂ  ディレイ
２０４、２０４ａ、２０４ｂ  勾配ヒストグラムメモリ
２０５、２０５ａ、２０５ｂ  総和格納メモリ
２０６  加算器
２０７  ディレイ
２０８  勾配ヒストグラムメモリ
２０９  総和格納メモリ
２１０  しきい値カウンタ
２１１  アキュムレータ
２１２  ディレイ
２１３  差分器
２１４  アキュムレータ
２１５  ディレイ
２１６  差分器
３０１ａ、３０１ａ＿１、３０１ａ＿２  勾配出力モジュール
３０１ｂ、３０１ｂ＿１、３０１ｂ＿２  勾配出力モジュール
３０２、３０２＿１、３０２＿２  加算モジュール
３０３、３０３＿１、３０３＿２  アキュムレータモジュール
３０３ｇ、３０３ｈ  アキュムレータモジュール
３０４、３０４＿１、３０４＿２  総和格納メモリ
３０４ｇ、３０４ｈ  総和格納メモリ
３１１ａ、３１１ｂ  データカウンタ
３１２、３１２＿１、３１２＿２  比較器
３１３、３１３＿１、３１３＿２  マルチプレクサ
３２１＿１、３２１＿２  加算器
３２１＿１＿１、３２１＿１＿２  加算器
３２２、３２２＿１、３２２＿２  加算器
３３１＿１  ビン１アキュムレータ
３３１＿２  ビン２アキュムレータ
３４０  しきい値カウンタ
３４１  アキュムレータ
３４２  ディレイ
３４３  差分器
３４４  アキュムレータ
３４５  ディレイ
３４６  差分器
３４７、３４８  マルチプレクサ
３５１  左側分岐ゲイン算出モジュール
３５１＿ｄｖ  左側分岐ゲイン算出モジュール
３５２  右側分岐ゲイン算出モジュール
３５２＿ｄｖ  右側分岐ゲイン算出モジュール
３５３  加算器
３５４  減算器
３５５  分岐前ゲイン算出モジュール
３５５＿ｄｖ  分岐前ゲイン算出モジュール
３６１  加算器
３６２  近似モジュール
３６３  加算器
３６４  近似モジュール
３６５  加算器
３６６  近似モジュール
３６７  加算器
３６８  除算器
３６９  符号反転器
３７１  二乗計算器
３７２  加算器
３７３  除算器
３７４  二乗計算器
３７５  加算器
３７６  除算器
３７７  二乗計算器
３７８  加算器
３７９  除算器
３８１  対数近似モジュール
３８２  ビットシフト
３８３  対数近似モジュール
３８４  ディレイ
３８５  減算器
３９０  区間判定モジュール
３９１ａ〜３９１ｃ  定数出力器
３９２ａ〜３９２ｃ  比較器
３９３  比較結果出力器
３９４  区間出力器
４００  区間近似モジュール
４０１  開始点出力器
４０２  減算器
４０３ａ〜４０３ｄ  シフト
４０４  選択器
４０５  基準値出力器
４０６  加算器
【先行技術文献】
【非特許文献】
【０３３４】
【非特許文献１】Ｎａｒａｙａｎａｎ，  Ｒａｍａｎａｔｈａｎ，  ｅｔ  ａｌ．  “Ｉｎｔｅｒａｃｔｉｖｅ  ｐｒｅｓｅｎｔａｔｉｏｎ：  Ａｎ  ＦＰＧＡ  ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｏｆ  ｄｅｃｉｓｉｏｎ  ｔｒｅｅ  ｃｌａｓｓｉｆｉｃａｔｉｏｎ．”  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｄｅｓｉｇｎ，  ａｕｔｏｍａｔｉｏｎ  ａｎｄ  ｔｅｓｔ  ｉｎ  Ｅｕｒｏｐｅ．  ＥＤＡ  Ｃｏｎｓｏｒｔｉｕｍ，  ２００７．
【図１】
2020027451.tif 000040
【図２】
2020027451.tif 000041
【図３】
2020027451.tif 000042
【図４】
2020027451.tif 000043
【図５】
2020027451.tif 000044
【図６】
2020027451.tif 000045
【図７】
2020027451.tif 000046
【図８】
2020027451.tif 000047
【図９】
2020027451.tif 000048
【図１０】
2020027451.tif 000049
【図１１】
2020027451.tif 000050
【図１２】
2020027451.tif 000051
【図１３】
2020027451.tif 000052
【図１４】
2020027451.tif 000053
【図１５】
2020027451.tif 000054
【図１６】
2020027451.tif 000055
【図１７】
2020027451.tif 000056
【図１８】
2020027451.tif 000057
【図１９】
2020027451.tif 000058
【図２０】
2020027451.tif 000059
【図２１】
2020027451.tif 000060
【図２２】
2020027451.tif 000061
【図２３】
2020027451.tif 000062
【図２４】
2020027451.tif 000063
【図２５】
2020027451.tif 000064
【図２６】
2020027451.tif 000065
【図２７】
2020027451.tif 000066
【図２８】
2020027451.tif 000067
【図２９】
2020027451.tif 000068
【図３０】
2020027451.tif 000069
【図３１】
2020027451.tif 000070
【図３２】
2020027451.tif 000071
【図３３】
2020027451.tif 000072
【図３４】
2020027451.tif 000073
【図３５】
2020027451.tif 000074
【図３６】
2020027451.tif 000075