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