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