以下に、図面を参照しながら、本発明に係る学習装置および学習方法の実施形態を詳細に説明する。また、以下の実施形態によって本発明が限定されるものではなく、以下の実施形態における構成要素には、当業者が容易に想到できるもの、実質的に同一のもの、およびいわゆる均等の範囲のものが含まれる。さらに、以下の実施形態の要旨を逸脱しない範囲で構成要素の種々の省略、置換、変更および組み合わせを行うことができる。
[第1の実施形態]
(GBDTのロジックについて)
高性能な機械学習のアルゴリズムとしてのDLにおいて、識別器は様々なハードロジックによる実装が試みられ、GPU(Graphics Processing Unit)での処理と比較して電力効率が高いことが分かっている。ただし、DLのうち特にCNNの場合には、GPUのアーキテクチャが非常にマッチするため、速度的には、ロジック実装したFPGA(Field-Programmable Gate Array)の方がGPUに比べて、識別が速いというわけではない。それに対して、GBDTのような決定木系のアルゴリズムについて、FPGAによるハードロジックの実装が試行され、GPUよりも高速な結果が報告されている。これは、後述するように、決定木系のアルゴリズムはそのデータ配列の特徴上、GPUのアーキテクチャに適さないためである。
また、学習に関しては、識別よりも世の中の検討は遅れており、DLにおいてもほとんど現状報告がなく、決定木系では報告は少ない状況である。その中でもGBDTの学習は、現状どこからもまだ報告がなく、現在では未開拓の分野であると考えられる。精度のよい識別モデルを得るためには、学習時に特徴量の選択および設計、ならびに学習アルゴリズムのハイパーパラメータの選択を行うため、莫大な試行回数が必要となり、特に大量の学習データがある場合には、学習処理のスピードの高さは現実的に最終的なモデルの精度について非常に大きく作用する。さらに、ロボティクス、HFT(High Frequency Trading)、およびRTB(Real-Time Bidding)のように環境変化への追従のリアルタイム性が求められる分野に関しては、スピードの速さが性能へと直結する。そのため、精度の高いGBDTにおいて、高速な学習処理が出来た場合には、結果的にそれを利用したシステムの性能を大きく向上させることができると考えられる。
(GBDTのFPGAに対する親和性)
決定木またはGBDTが、なぜGPUでは速くならないか、および、なぜFPGAだと速くなるかについて、GBDTのFPGAに対する親和性の観点から述べる。
まず、GBDTがブースティングを用いたアルゴリズムであることの観点から述べる。決定木の中でも、アンサンブル学習を用いたRandom Forest(RF)の場合は、木の間に依存関係がないため、GPUでも並列化しやすいが、GBDTはブースティングを用いて、多数の木を連結する方法であり、一個前の木の結果が出ないと、次の木の学習を開始することができない。そのため、処理としてシリアルな処理であり、一本ずつの木をいかに速く学習するかがキーとなる。これに対して、RFでは、一本あたりは遅くても、並列に多数の木の学習を速くすることで、全体の学習を速くするという選択肢をとり得る。そのため、GPUを用いた場合にも次に述べるDRAM(Dynamic Random Access Memory)のアクセスレイテンシの問題をある程度隠蔽することが可能であると考えられる。
次に、GPUデバイスのRAM(Random Access Memory)へのアクセス速度の限界(特にランダムアクセス)の観点から述べる。FPGAに内蔵のSRAM(Static Random Access Memory)は、FPGA内のRAMのバス幅を非常に大きくできるため、ミドルレンジのFPGAである、例えば、Xilinx社のXC7k325Tを用いた場合でも、以下の様に、400[GB/sec]に及ぶ。なお、内蔵RAMの容量は16[Mb]である。
BRAM 445個 × 36bit × 100MHz × 2ポート = 445*36*2*100*10^6/10^9 = 400GB/sec
また、ハイエンドのFPGAである、Xilinx社のVU9Pを用いた場合、864[GB/sec]である。なお、内蔵RAMの容量は270[Mb]である。
URAM 960個 × 36bit × 100MHz × 2ポート = 960*36*2*100*10^6/10^9 = 864GB/sec
これらの値は、クロック周波数を100[MHz]とした場合であるが、実際には、回路構成を工夫すると、200~500[MHz]程度での動作が考えられ、限界の帯域は数倍となる。これに対して、CPU(Central Processing Unit)に接続されているRAMは現世代では、DDR4(Double-Data-Rate4)であるが、下記のようにDIMM(Dual Inline Memory Module)1枚での帯域は25.6[GB/sec]に留まる。4枚のインタリーブ構成(256ビット幅)にしたとしても、100[GB/sec]程度である。DDR4のチップ規格がDDR4-3200(バス幅64ビット、DIMM1枚)の場合、以下のようになる。
1600MHz × 2(DDR) × 64 = 1600*10^6*2*64/10^9 = 25.6GB/sec
GPUに搭載されているGDDR5(Graphics Double-Data-Rate5)では、DDR4の帯域よりも4倍程度大きくなっているが、それでも、最大で400[GB/sec]程度である。
このように、FPGA内のRAMと、GPUおよびCPUでの外部メモリとは、帯域に大きな差がある。さらに、ここまでは、アドレスに対してシーケンシャルなアクセスの場合に関して述べてきたが、これ以上に大きく効いてくるのが、ランダムアクセス時のアクセスの時間である。FPGA内蔵のRAMはSRAMであるため、シーケンシャルアクセスでもランダムアクセスでもアクセスレイテンシは1クロックであるが、DDR4およびGDDR5は、DRAMであり、センスアンプの都合上、異なるカラムにアクセスした場合には、レイテンシが大きくなる。例えば、DDR4のRAMにおいて、代表的なCASレイテンシ(Column Address Strobe latency)は16クロックであり、簡単には、シーケンシャルアクセスと比較して、1/16しかスループットが出ない計算となる。
CNNの場合には、隣接した画素のデータを処理していくので、ランダムアクセスのレイテンシは大きく問題とならないが、決定木の場合には、分岐を続けていくと、枝ごとに元のデータのアドレスがどんどんと不連続になり、基本的にランダムアクセスとなる。そのため、データをDRAMに置いた場合、そのスループットがボトルネックとなり、速度が大きく劣化する。GPUにはそのような場合の性能劣化を抑えるために、キャッシュが存在するが、基本的に決定木はデータを総なめしていくアルゴリズムなので、データアクセスに局所性がなくキャッシュの効果が非常に効きにくい。なお、GPUの構造では、GPUには、演算コア(SM)毎に割り振られたSRAMからなるシェアードメモリが存在し、これを使うと高速な処理が可能である場合があるが、1個のSMあたり16~48[kB]と少量であり、かつ、SM間をまたぐアクセスの場合には、大きなレイテンシが発生する。現在の高価で大規模なGPUである、Nvidia K80の場合のシェアードメモリの容量の試算を以下に示す。
K80 = 2 × 13 SMX = 26 SMX = 4992 CUDAコア
26 × 48 × 8 = 9Mb
このように、数十万円する大規模なGPUでもシェアードメモリはたった9[Mb]しか存在せず、容量が少な過ぎる。さらに、GPUの場合は、上述のように、処理を行うSMは他のSMのシェアードメモリには直接アクセスできないことに起因し、決定木の学習に利用する場合には、高速なコーディングが困難という制約も存在する。
以上のように、データがFPGA上のSRAMに載るという前提で、FPGAはGPUに比べてGBDTの学習アルゴリズムを高速に実装可能であると考えられる。
(GBDTのアルゴリズム)
図1は、決定木モデルの一例を示す図である。以下、式(1)~式(22)および図1を参照してGBDTの基本論理を説明する。
GBDTは、教師あり学習の一手法であり、教師あり学習は以下の式(1)に示すように、学習データに対するフィッティングの良さを表すロス関数L(θ)と、学習したモデルの複雑さを表す正則化項Ω(θ)とからなる目的関数obj(θ)を何らかの尺度で最適化する処理である。正則化項Ω(θ)は、モデル(決定木)が複雑になり過ぎることを防ぐ、すなわち、汎化性能を高める役割を有する。
式(1)の第1項のロス関数は、例えば、以下の式(2)に示すように、サンプルデータ(学習データ)ごとに誤差関数lより計算されるロスを足し合わせたものである。ここでnはサンプルデータ数、iはサンプル番号、yはラベル、モデルのy(ハット)は予測値である。
ここで、誤差関数lは、例えば、以下の式(3)および式(4)に示すような二乗誤差関数またはロジスティックロス関数等が用いられる。
また式(1)の第2項の正則化項Ω(θ)は、例えば、以下の式(5)に示すようなパラメータθの二乗ノルム等が用いられる。ここで、λは正則化の重みを表すハイパーパラメータである。
ここで、GBDTの場合について考える。まず、GBDTのi番目のサンプルデータx
iに対する予測値は、以下の式(6)のように表現できる。
ここで、Kは決定木の総数、kは決定木の番号、f
k()はk番目の決定木の出力、x
iは入力されるサンプルデータの特徴量である。これより、GBDTもRF等と同じく、各決定木の出力を足し合わせたものを最終的な出力としていることがわかる。また、パラメータθは、θ={f
1,f
2,・・・,f
K}である。以上より、GBDTの目的関数は以下の式(7)のように表される。
上記の目的関数について学習を行うが、決定木モデルではニューラルネット等の学習で用いられるSGD(Stochastic Gradient Descent:確率的勾配降下法)等の手法は使えない。そこでAdditive Training(ブースティング)を用いて学習を行う。Additive Trainingでは、あるラウンド(学習回数、決定木モデル数)tにおける予測値を以下の式(8)のように表現する。
式(8)より、あるラウンドtにおいて、決定木(の出力)f
t(x
i)を求める必要があることが分かる。逆に、あるラウンドtでは他のラウンドについて考える必要はない。そこで、以下では、ラウンドtについて考える。ラウンドtでの目的関数は以下の式(9)のように表される。
ここで、ラウンドtにおける目的関数のテーラー展開(二次の項までで打ち切り)は以下の式(10)のようになる。
ここで、式(10)において、勾配情報g
i、h
iは以下の式(11)で表されるものである。
式(10)において定数項を無視すると、ラウンドtでの目的関数は、以下の式(12)のようになる。
この式(12)により、ラウンドtでの目的関数は、誤差関数を1ラウンド前の予測値で1階微分および2階微分したもの、および正則化項で表されるので、1階微分および2階微分が求まる誤差関数ならば適用が可能なことが分かる。
ここで、決定木モデルについて考える。図1に決定木モデルの例を示す。決定木モデルは、ノードとリーフとから構成され、ノードではある分岐条件を元に入力を次のノードまたはリーフへ入力し、リーフにはリーフウェイトがあり、これが入力に対する出力となる。例えば、図1では、「リーフ2」のリーフウェイトW2が「-1」であることを示している。
また、決定木モデルは以下の式(13)に示すように定式化される。
式(13)において、wはリーフウェイト、qは木の構造を表す。つまり、入力(サンプルデータx)は木の構造qによりいずれかのリーフに割り当てられ、そのリーフのリーフウェイトが出力されることになる。
ここで、決定木モデルの複雑さを以下の式(14)のように定義する。
式(14)において、第1項はリーフの数による複雑さを、第2項はリーフウェイトの二乗ノルムである。また、γは正則化項の重要度を制御するハイパーパラメータである。以上より、ラウンドtでの目的関数について、以下の式(15)のように整理する。
ただし、式(15)において、I
j、G
j、H
jは、以下の式(16)のように表される。
式(15)より、あるラウンドtでの目的関数はリーフウェイトwに関する二次関数であり、一般に二次関数の最小値、およびその時の条件は、以下の式(17)で表される。
つまり、あるラウンドtの決定木の構造qが決まったときに、その目的関数およびリーフウェイトは以下の式(18)のようになる。
ここまでで、あるラウンドで決定木の構造が決まったときのリーフウェイトの算出が可能となった。以降は、決定木の構造の学習手順について述べる。
決定木の構造の学習方法の1つに貪欲法(Greedy Algorithm)がある。貪欲法では、木構造を深さ0からスタートし、各ノードで分岐スコア(Gain)を計算し分岐するか否かを判断して決定木の構造を学習するアルゴリズムである。分岐スコアは以下の式(19)で求められる。
ここで、GL、HLは左ノードに分岐したサンプルの勾配情報の和、GR、HRは右ノードに分岐したサンプルの勾配情報の和、γは正則化項である。式(19)の[]内の第1項は左ノードに分岐したサンプルデータのスコア(目的関数)、第2項は右ノードに分岐したサンプルデータのスコア、第3項は分岐しない場合のスコアであり、分岐による目的関数の改善度合いを表している。
上述の式(19)に示す分岐スコアは、ある特徴量のあるしきい値で分岐した時の良さを表すが、これ単体ではどのような条件が最適か判断できない。そこで、貪欲法では、全ての特徴量の全てのしきい値候補で分岐スコアを求め、分岐スコアが最大となる条件を探すものである。貪欲法は上述のように、アルゴリズムとしては非常にシンプルであるが、全ての特徴量の全てのしきい値候補で分岐スコアを求めるため計算コストが高い。そこで後述するXGBoost等のライブラリでは、性能を維持しつつ、計算コストを低減する工夫がなされている。
(XGBoostについて)
以下、GBDTのライブラリとして周知なXGBoostについて述べる。XGBoostの学習アルゴリズムでは、しきい値候補の削減、および欠損値の扱いの2点について工夫がされている。
まず、しきい値候補の削減について説明する。上述した貪欲法は計算コストが高いという課題があった。XGBoostでは、Weighted Quantile Sketchという方法でしきい値候補数を削減している。これは、分岐スコア(Gain)の計算では、左右に別れるサンプルデータの勾配情報の和が重要であり、勾配情報の和が一定割合変化するしきい値のみを探索候補とするものである。具体的にはサンプルの二次勾配であるhを用いている。特徴量の次元をfとすると、特徴量およびサンプルデータの二次勾配hの集合を、以下の式(20)のように表現する。
また、ランク関数r
fを以下の式(21)のように定義する。
ここで、zはしきい値候補である。式(21)に示すランク関数r
fは、あるしきい値候補より小さいサンプルデータの二次勾配の和が全サンプルデータの二次勾配の和に占める割合を意味している。最終的には、次元fで示される特徴量について、あるしきい値候補の集合{s
f1,s
f2,・・・,s
fl}を求める必要があり、これは以下の式(22)で求める。
ここでεはしきい値候補の削減度合いを決めるパラメータであり、おおよそ1/ε個のしきい値候補が得られる。
Weighted Quantile Sketchは、決定木の最初のノードで(全サンプルデータに対して一括で)行うグローバルと、ノードごとに(当該ノードに割り当てられたサンプルについて毎回)行うローカルの2パターンが考えられる。汎化性能の面ではローカルの方がよいという結果が出ているので、XGBoostではローカルを採用している。
次に、欠損値の扱いについて説明する。入力されるサンプルデータの欠損値の扱いはGBDTおよび決定木に限らず、機械学習分野において一般的に有効な手法はない。欠損値を、平均値、中央値、もしくは協調フィルタ等で補完する方法、または欠損値が多い特徴量を除外する方法等があるが、性能の面で多くのケースで成功するわけではない。しかし、構造化データは欠損値を含むことが多く、実用上は何らかの対応が求められる。
XGBoostは、欠損値を含むサンプルデータを直接扱えるように学習アルゴリズムが工夫されている。これは、ノードの分岐スコアを求める際に、欠損値のデータを全て左右どちらかのノードに割り当てた時のスコアを求める方法である。また、上述のWeighted Quantile Sketchを行う場合は、欠損値を含むサンプルデータを除外した集合に対してしきい値候補を求めるものとすればよい。
(LightGBMについて)
次に、GBDTのライブラリであるLightGBMについて述べる。LightGBMは前処理にbinningと呼ばれる特徴量の量子化を採用し、分岐スコアの計算にGPUを利用した高速なアルゴリズムを採用している。LightGBMはXGBoostと比較して性能は同程度で学習速度が数倍速く、近年利用者が増えてきている。
まず、特徴量の量子化について説明する。分岐スコアは、データセットが大規模であれば大量のしきい値候補に対して計算が必要である。LightGBMは、学習の前処理として、特徴量を量子化することでしきい値候補数を削減している。また、量子化することでXGBoostのようにノードごとにしきい値候補の値および数が変わることがなく、GPUを利用する場合に必須の処理となっている。
特徴量の量子化についてはbinningという名前で様々な研究がなされており、LightGBMでは、特徴量をk個のビンに分割しており、しきい値候補はk個だけとなる。kは255、63、15等であり、データセットによって性能または学習速度は異なる。
また、特徴量を量子化したことで分岐スコアの計算が簡易になる。具体的には、しきい値候補が単に量子化された値になる。そのため、各特徴量について一次勾配および二次勾配のヒストグラムを作成し、各ビン(量子化された値)について分岐スコアを求めればよいことになる。これを特徴量ヒストグラムと呼んでいる。
次に、GPUを利用した分岐スコアの計算について説明する。分岐スコアの計算自体は特徴量が量子化されているため最大でも256パターンであるが、サンプルデータ数はデータセットによっては数万件を超えるため、ヒストグラム作成が学習時間に対して支配的となる。上述で述べたように、分岐スコアの計算では、特徴量ヒストグラムを求める必要がある。GPUを利用した場合、複数のスレッドが同一のヒストグラムを更新する必要があるが、このとき同一のビンを更新する可能性がある。そのため、アトミック演算を使用する必要があり、同一のビンを更新する割合が高いとパフォーマンスが低下する。そこで、LightGBMでは、ヒストグラムの作成の際に、一次勾配および二次勾配のどちらのヒストグラムから値を更新するかをスレッドごとに分けており、これによって同一のビンを更新する頻度を下げている。
(学習識別装置の構成)
図2は、実施形態に係る学習識別装置のモジュール構成の一例を示す図である。図3は、ポインタメモリの構成の一例を示す図である。図4は、ラーニングモジュールのモジュール構成の一例を示す図である。図2~図4を参照しながら、本実施形態に係る学習識別装置1のモジュール構成について説明する。
図2に示すように、本実施形態に係る学習識別装置1は、CPU10と、ラーニングモジュール20と、データメモリ30と、モデルメモリ40と、クラシフィケーションモジュール50と、を備えている。このうち、ラーニングモジュール20、データメモリ30、モデルメモリ40およびクラシフィケーションモジュール50は、FPGAにより構成されている。CPU10と、当該FPGAとはバスを介してデータ通信可能となっている。なお、学習識別装置1は、図2に示す各構成要素だけではなく、他の構成要素、例えば、CPU10のワークエリアとなるRAM、CPU10が実行するプログラム等を記憶したROM(Read Only Memory)、各種データ(プログラム等)を記憶した補助記憶装置、および外部装置と通信を行う通信I/F等を備えているものとしてもよい。
CPU10は、全体でGBDTの学習を制御する演算装置である。CPU10は、制御部11を有する。制御部11は、ラーニングモジュール20、データメモリ30、モデルメモリ40およびクラシフィケーションモジュール50の各モジュールを制御する。制御部11は、CPU10で実行されるプログラムによって実現される。
ラーニングモジュール20は、決定木を構成するノード毎の最適な特徴量の番号(以下、「特徴量番号」と称する場合がある)、およびしきい値を算出し、当該ノードがリーフの場合は、リーフウェイトを算出し、モデルメモリ40に書き込むハードウェアモジュールである。また、図4に示すように、ラーニングモジュール20は、ゲイン算出モジュール21_1、21_2、・・・、21_n(ゲイン算出部)と、最適条件導出モジュール22と、を備えている。ここで、nは、少なくともサンプルデータ(学習データ、識別データ双方含む)の特徴量の数以上の数である。なお、ゲイン算出モジュール21_1、21_2、・・・、21_nについて、任意のゲイン算出モジュールを示す場合、または総称する場合、単に「ゲイン算出モジュール21」と称するものとする。
ゲイン算出モジュール21は、入力されるサンプルデータに含まれる特徴量のうち対応する特徴量について、各しきい値における分岐スコアを、上述の式(19)を用いて算出するモジュールである。ここで、サンプルデータのうち学習データには、特徴量の他、ラベル(真の値)が含まれ、サンプルデータのうち識別データには、特徴量が含まれるが、ラベルは含まれていない。また、各ゲイン算出モジュール21は、一度(1クロック)で入力されたすべての特徴量について、それぞれにそのヒストグラムを演算・格納するメモリを有し、全特徴量を並列に演算する。そのヒストグラムの結果より、各特徴量のゲインを並列に算出する。これによって、一度に、または同時に全特徴量に対する処理が可能となるので、学習処理の速度を飛躍的に向上させることが可能となる。このように、並列に全部の特徴量を読み出し、処理していく方法をフィーチャパラレル(Feature Parallel)と呼ぶ。なお、この方法を実現するためには、データメモリは一度(1クロック)ですべての特徴量を読み出すことができる必要がある。そのため、通常の32ビットや256ビット幅のデータ幅を持つメモリでは実現できない。また、ソフトウエアでは、通常CPUの一度に扱えるデータのビット数は64ビットにとどまり、特徴量数が100、各特徴量のビット数が8ビットだとしても8000ビットが必要となるのに対して、全く対応できない。そのため、従来は、メモリのアドレス毎(例えば、CPUが扱える64ビット幅)に別の特徴量を格納しておき、特徴量すべてでは、複数のアドレスにまたがって保存される方法が取られていた。それに対して、本方法では、メモリの1アドレスにすべての特徴量を格納し、1アクセスで全特徴量を読み出す点が新規の技術内容である。
上述のように、GBDTでは決定木の学習についての並列化はできない。そのため、いかに一本ずつの決定木を速く学習するかが、学習処理の速度に関して支配的となる。一方、アンサンブルな学習を行うRFでは、決定木の間の依存関係は学習時にないので、決定木ごとの学習処理の並列化は容易であるが、一般的にGBDTに対して精度が劣る。上述のように、RFよりも精度の高いGBDTの学習について、上述のようなフィーチャパラレル(Feature Parallel)を適用することで、決定木の学習処理の速度を向上させることができる。
ゲイン算出モジュール21は、算出した分岐スコアを最適条件導出モジュール22へ出力する。
最適条件導出モジュール22は、各ゲイン算出モジュール21により出力された各特徴量に対応する各分岐スコアを入力し、分岐スコアが最大となる特徴量の番号(特徴量番号)およびしきい値を導出するモジュールである。最適条件導出モジュール22は、導出した特徴量番号およびしきい値を、対応するノードの分岐条件データ(ノードのデータの一例)として、モデルメモリ40へ書き込む。
データメモリ30は、各種データを格納するSRAMである。データメモリ30は、ポインタメモリ31と、フィーチャメモリ32と、ステートメモリ33と、を備えている。
ポインタメモリ31は、フィーチャメモリ32で格納されているサンプルデータの格納先アドレスを記憶するメモリである。ポインタメモリ31は、図3に示すように、バンクA(バンク領域)と、バンクB(バンク領域)とを有する。なお、バンクAおよびバンクBの2バンクに分割して、サンプルデータの格納先アドレスを記憶する動作の詳細については、図5~図13で後述する。なお、ポインタメモリ31は、3つ以上のバンクを有することを制限するものではない。
フィーチャメモリ32は、サンプルデータ(学習データ、識別データを含む)を格納するメモリである。
ステートメモリ33は、ステート情報(上述のw、g、h)およびラベル情報を記憶するメモリである。
モデルメモリ40は、決定木のノード毎の分岐条件データ(特徴量番号、しきい値)、そのノードがリーフであるか否かを示すリーフフラグ(フラグ情報、ノードのデータの一例)、および、そのノードがリーフである場合におけるリーフウェイトを記憶するSRAMである。
クラシフィケーションモジュール50は、ノードごと、決定木ごとにサンプルデータを振り分けるハードウェアモジュールである。また、クラシフィケーションモジュール50は、ステート情報(w,g,h)を計算して、ステートメモリ33に書き込む。
なお、クラシフィケーションモジュール50は、上述のように学習処理におけるサンプルデータ(学習データ)の識別(分岐)だけでなく、サンプルデータ(識別データ)に対する識別処理においても、同一のモジュール構成で、当該識別データに対する識別を行うことが可能である。また、識別処理時にも、一括して特徴量をすべて読み込むことにより、クラシフィケーションモジュール50による処理をパイプライン化することができ、クロックごとに1つのサンプルデータの識別をすることまで処理の高速化が可能となる。一方、上述のように一括で読み込むことができない場合、どこの特徴量が必要になるかは、各ノードに分岐してみないとわからないため、毎回該当する特徴量のアドレスにアクセスする形態ではパイプライン化ができないことになる。
また、上述のクラシフィケーションモジュール50を複数備えるものとし、複数の識別データを分割(データパラレル(Data Parallel))して、各クラシフィケーションモジュール50に分配してそれぞれに識別処理をさせることによって、識別処理を高速化させることもできる。
(学習識別装置の学習処理)
以下、図5~図13を参照しながら、学習識別装置1の学習処理について具体的に説明する。
<初期化>
図5は、実施形態に係る学習識別装置の初期化時のモジュールの動作を示す図である。図5に示すように、まず、制御部11は、ポインタメモリ31を初期化する。例えば、図5に示すように、制御部11は、ポインタメモリ31のバンクAに対して、サンプルデータ(学習データ)のフィーチャメモリ32におけるアドレスを、学習データの数だけ順番に(例えば、アドレスの低い方から順に)書き込む。
なお、学習データのすべてを利用(すべてのアドレスを書き込み)することに限定されるものではなく、いわゆるデータサブサンプリングによって、所定の乱数に従った確率に基づいてランダムに選択した学習データを用いる(当該選択した学習データのアドレスを書き込む)ものとしてもよい。例えば、データサブサンプリングが0.5の場合、乱数に従った半分の確率で学習データの全アドレスのうち、半分のアドレスがポインタメモリ31(ここではバンクA)に書き込まれるものとしてもよい。乱数の発生には、LFSR(Linear Feedback Shift Register:線形帰還シフトレジスタ)により作成された擬似乱数が使用可能である。
また、学習に使用する学習データのうちすべての特徴量を使用することに限定されるものではなく、いわゆるフィーチャサブサンプルによって、上述と同様の乱数に従った確率に基づいてランダムに選択(例えば、半分を選択)した特徴量のみを使用するものとしてもよい。この場合、例えば、フィーチャサブサンプルにより選択された特徴量以外の特徴量のデータとしては、フィーチャメモリ32から定数が出力されるものとすればよい。これによって、未知のデータ(識別データ)に対する汎化性能が向上するという効果がある。
<デプス0・ノード0の分岐条件データの決定>
図6は、実施形態に係る学習識別装置のデプス0、ノード0のノードパラメータを決定する場合のモジュールの動作を示す図である。なお、決定木の一番上の階層を「デプス0」、そこから下の階層を順に「デプス1」、「デプス2」、・・・と称するものとし、特定の階層の一番左のノードを「ノード0」、そこから右のノードを順に「ノード1」、「ノード2」、・・・と称するものとする。
図6に示すように、まず、制御部11は、ラーニングモジュール20へ開始アドレスおよび終了アドレスを送信し、トリガによりラーニングモジュール20による処理を開始させる。ラーニングモジュール20は、開始アドレスおよび終了アドレスに基づいて、ポインタメモリ31(バンクA)から対象とする学習データのアドレスを指定し、当該アドレスによって、フィーチャメモリ32から学習データ(特徴量)を読み出し、ステートメモリ33からステート情報(w,g,h)を読み出す。
この場合、上述したように、ラーニングモジュール20の各ゲイン算出モジュール21は、対応する特徴量のヒストグラムを計算し、それぞれ自身のSRAMに格納し、その結果に基づいて各しきい値における分岐スコアを算出する。そして、ラーニングモジュール20の最適条件導出モジュール22は、各ゲイン算出モジュール21により出力された各特徴量に対応する各分岐スコアを入力し、分岐スコアが最大となる特徴量の番号(特徴量番号)およびしきい値を導出する。そして、最適条件導出モジュール22は、導出した特徴量番号およびしきい値を、対応するノード(デプス0、ノード0)の分岐条件データとして、モデルメモリ40へ書き込む。この際、最適条件導出モジュール22は、ノード(デプス0、ノード0)からさらに分岐されることを示すためにリーフフラグを「0」として、当該ノードのデータ(分岐条件データの一部としてもよい)をモデルメモリ40へ書き込む。
以上の動作について、ラーニングモジュール20は、バンクAに書き込まれた学習データのアドレスを順に指定し、当該アドレスによって、フィーチャメモリ32から各学習データを読み出して行う。
<デプス0・ノード0でのデータ分岐処理>
図7は、実施形態に係る学習識別装置のデプス0、ノード0の分岐時のモジュールの動作を示す図である。
図7に示すように、制御部11は、クラシフィケーションモジュール50へ開始アドレスおよび終了アドレスを送信し、トリガによりクラシフィケーションモジュール50による処理を開始させる。クラシフィケーションモジュール50は、開始アドレスおよび終了アドレスに基づいて、ポインタメモリ31(バンクA)から対象とする学習データのアドレスを指定し、当該アドレスによって、フィーチャメモリ32から学習データ(特徴量)を読み出す。また、クラシフィケーションモジュール50は、モデルメモリ40から対応するノード(デプス0、ノード0)の分岐条件データ(特徴量番号、しきい値)を読み出す。そして、クラシフィケーションモジュール50は、分岐条件データに従って、読み出したサンプルデータを、ノード(デプス0、ノード0)の左側に分岐させるか、右側に分岐させるかを判定し、その判定結果により、当該学習データのフィーチャメモリ32におけるアドレスを、ポインタメモリ31の読み出しバンク(ここではバンクA)(読み出し用のバンク領域)と異なる他方のバンク(書き込みバンク)(ここではバンクB)(書き込み用のバンク領域)に書き込む。
この際、クラシフィケーションモジュール50は、当該ノードの左側に分岐すると判定した場合、当該学習データのアドレスを、図7に示すように、バンクBのアドレスの低い方から順に書き込み、当該ノードの右側に分岐すると判定した場合、当該学習データのアドレスを、バンクBのアドレスの高い方から順に書き込む。これによって、書き込みバンク(バンクB)では、ノードの左側に分岐した学習データのアドレスは、アドレスの低い方に、ノードの右側に分岐した学習データのアドレスは、アドレスの高い方にきれいに分けて書き込むことができる。なお、書き込みバンクにおいて、ノードの左側に分岐した学習データのアドレスは、アドレスの高い方に、ノードの右側に分岐した学習データのアドレスは、アドレスの低い方に分けて書き込むものとしてもよい。
このように、ポインタメモリ31では、上述のように、バンクAおよびバンクBの2つが構成されており、交互に読み書きすることによって、FPGA内のSRAMの容量が限られている中、効率的にメモリを使用することが可能となる。単純には、フィーチャメモリ32およびステートメモリ33を、それぞれ2バンク構成する方法もあるが、一般的に、サンプルデータよりも、フィーチャメモリ32でのアドレスを示すデータの方が小さいので、本実施形態のように、ポインタメモリ31を準備しておき、間接的にアドレスを指定する方法の方が、メモリの使用量を削減することが可能となる。
以上の動作について、クラシフィケーションモジュール50は、全学習データに対して分岐処理を行う。ただし、分岐処理が終了した後、ノード(デプス0、ノード0)の左側と右側とに同数の学習データが分けられるわけではないので、クラシフィケーションモジュール50は、左側に分岐した学習データのアドレスと、右側に分岐した学習データのアドレスとの境界に対応する書き込みバンク(バンクB)におけるアドレス(中間アドレス)を、制御部11に返す。当該中間アドレスは、次の分岐処理の際に使用される。
<デプス1・ノード0の分岐条件データの決定>
図8は、実施形態に係る学習識別装置のデプス1、ノード0のノードパラメータを決定する場合のモジュールの動作を示す図である。基本的には、図6に示した、デプス0・ノード0の分岐条件データの決定の処理と同様であるが、対象とするノードの階層が変わる(デプス0からデプス1になる)ので、ポインタメモリ31のバンクAおよびバンクBの役割が反転する。具体的には、バンクBが読み出しバンクとなり、バンクAが書き込みバンク(図9参照)となる。
図8に示すように、制御部11は、デプス0での処理でクラシフィケーションモジュール50から受け取った中間アドレスに基づいて、ラーニングモジュール20へ開始アドレスおよび終了アドレスを送信し、トリガによりラーニングモジュール20による処理を開始させる。ラーニングモジュール20は、開始アドレスおよび終了アドレスに基づいて、ポインタメモリ31(バンクB)から対象とする学習データのアドレスを指定し、当該アドレスによって、フィーチャメモリ32から学習データ(特徴量)を読み出し、ステートメモリ33からステート情報(w,g,h)を読み出す。具体的には、ラーニングモジュール20は、図8に示すように、バンクBの左側(アドレスが低い方)から中間アドレスまで順にアドレスを指定していく。
この場合、上述したように、ラーニングモジュール20の各ゲイン算出モジュール21は、読み出した学習データの各特徴量をそれぞれ自身のSRAMに格納して、各しきい値における分岐スコアを算出する。そして、ラーニングモジュール20の最適条件導出モジュール22は、各ゲイン算出モジュール21により出力された各特徴量に対応する各分岐スコアを入力し、分岐スコアが最大となる特徴量の番号(特徴量番号)およびしきい値を導出する。そして、最適条件導出モジュール22は、導出した特徴量番号およびしきい値を、対応するノード(デプス1、ノード0)の分岐条件データとして、モデルメモリ40へ書き込む。この際、最適条件導出モジュール22は、ノード(デプス1、ノード0)からさらに分岐されることを示すためにリーフフラグを「0」として、当該ノードのデータ(分岐条件データの一部としてもよい)をモデルメモリ40へ書き込む。
以上の動作について、ラーニングモジュール20は、バンクBの左側(アドレスが低い方)から中間アドレスまで順に指定し、当該アドレスによって、フィーチャメモリ32から各学習データを読み出して行う。
<デプス1・ノード0でのデータ分岐処理>
図9は、実施形態に係る学習識別装置のデプス1、ノード0の分岐時のモジュールの動作を示す図である。
図9に示すように、制御部11は、デプス0での処理でクラシフィケーションモジュール50から受け取った中間アドレスに基づいて、クラシフィケーションモジュール50へ開始アドレスおよび終了アドレスを送信し、トリガによりクラシフィケーションモジュール50による処理を開始させる。クラシフィケーションモジュール50は、開始アドレスおよび終了アドレスに基づいて、ポインタメモリ31(バンクB)の左側から対象とする学習データのアドレスを指定し、当該アドレスによって、フィーチャメモリ32から学習データ(特徴量)を読み出す。また、クラシフィケーションモジュール50は、モデルメモリ40から対応するノード(デプス1、ノード0)の分岐条件データ(特徴量番号、しきい値)を読み出す。そして、クラシフィケーションモジュール50は、分岐条件データに従って、読み出したサンプルデータを、ノード(デプス1、ノード0)の左側に分岐させるか、右側に分岐させるかを判定し、その判定結果により、当該学習データのフィーチャメモリ32におけるアドレスを、ポインタメモリ31の読み出しバンク(ここではバンクB)(読み出し用のバンク領域)と異なる他方のバンク(書き込みバンク)(ここではバンクA)(書き込み用のバンク領域)に書き込む。
この際、クラシフィケーションモジュール50は、当該ノードの左側に分岐すると判定した場合、当該学習データのアドレスを、図9に示すように、バンクAのアドレスの低い方(受信した開始アドレス)から順に書き込み、当該ノードの右側に分岐すると判定した場合、当該学習データのアドレスを、バンクAのアドレスの高い方(受信した終了アドレスであって前回の中間アドレス)から順に書き込む。これによって、書き込みバンク(バンクA)では、ノードの左側に分岐した学習データのアドレスは、アドレスの低い方に、ノードの右側に分岐した学習データのアドレスは、アドレスの高い方にきれいに分けて書き込むことができる。なお、書き込みバンクにおいて、ノードの左側に分岐した学習データのアドレスは、アドレスの高い方に、ノードの右側に分岐した学習データのアドレスは、アドレスの低い方に分けて書き込むものとしてもよい。
以上の動作について、クラシフィケーションモジュール50は、全学習データのうちバンクBの中間アドレスよりも左側に書き込まれたアドレスで指定される学習データに対して分岐処理を行う。ただし、分岐処理が終了した後、ノード(デプス1、ノード0)の左側と右側とに同数の学習データが分けられるわけではないので、クラシフィケーションモジュール50は、左側に分岐した学習データのアドレスと、右側に分岐した学習データのアドレスとの中間に対応する書き込みバンク(バンクA)におけるアドレス(中間アドレス)を、制御部11に返す。当該中間アドレスは、次の分岐処理の際に使用される。
<デプス1・ノード1の分岐条件データの決定>
図10は、実施形態に係る学習識別装置のデプス1、ノード1のノードパラメータを決定する場合のモジュールの動作を示す図である。なお、図8の場合と同様に、デプス1・ノード0のノードと同じ階層なので、バンクBが読み出しバンクとなり、バンクAが書き込みバンク(図11参照)となる。
図10に示すように、制御部11は、デプス0での処理でクラシフィケーションモジュール50から受け取った中間アドレスに基づいて、ラーニングモジュール20へ開始アドレスおよび終了アドレスを送信し、トリガによりラーニングモジュール20による処理を開始させる。ラーニングモジュール20は、開始アドレスおよび終了アドレスに基づいて、ポインタメモリ31(バンクB)から対象とする学習データのアドレスを指定し、当該アドレスによって、フィーチャメモリ32から学習データ(特徴量)を読み出し、ステートメモリ33からステート情報(w,g,h)を読み出す。具体的には、ラーニングモジュール20は、図10に示すように、バンクBの右側(アドレスが高い方)から中間アドレスまで順にアドレスを指定していく。
この場合、上述したように、ラーニングモジュール20の各ゲイン算出モジュール21は、読み出した学習データの各特徴量をそれぞれ自身のSRAMに格納して、各しきい値における分岐スコアを算出する。そして、ラーニングモジュール20の最適条件導出モジュール22は、各ゲイン算出モジュール21により出力された各特徴量に対応する各分岐スコアを入力し、分岐スコアが最大となる特徴量の番号(特徴量番号)およびしきい値を導出する。そして、最適条件導出モジュール22は、導出した特徴量番号およびしきい値を、対応するノード(デプス1、ノード1)の分岐条件データとして、モデルメモリ40へ書き込む。この際、最適条件導出モジュール22は、ノード(デプス1、ノード1)からさらに分岐されることを示すためにリーフフラグを「0」として、当該ノードのデータ(分岐条件データの一部としてもよい)をモデルメモリ40へ書き込む。
以上の動作について、ラーニングモジュール20は、バンクBの右側(アドレスが高い方)から中間アドレスまで順に指定し、当該アドレスによって、フィーチャメモリ32から各学習データを読み出して行う。
<デプス1・ノード1でのデータ分岐処理>
図11は、実施形態に係る学習識別装置のデプス1、ノード1の分岐時のモジュールの動作を示す図である。
図11に示すように、制御部11は、デプス0での処理でクラシフィケーションモジュール50から受け取った中間アドレスに基づいて、クラシフィケーションモジュール50へ開始アドレスおよび終了アドレスを送信し、トリガによりクラシフィケーションモジュール50による処理を開始させる。クラシフィケーションモジュール50は、開始アドレスおよび終了アドレスに基づいて、ポインタメモリ31(バンクB)の右側から対象とする学習データのアドレスを指定し、当該アドレスによって、フィーチャメモリ32から学習データ(特徴量)を読み出す。また、クラシフィケーションモジュール50は、モデルメモリ40から対応するノード(デプス1、ノード1)の分岐条件データ(特徴量番号、しきい値)を読み出す。そして、クラシフィケーションモジュール50は、分岐条件データに従って、読み出したサンプルデータを、ノード(デプス1、ノード1)の左側に分岐させるか、右側に分岐させるかを判定し、その判定結果により、当該学習データのフィーチャメモリ32におけるアドレスを、ポインタメモリ31の読み出しバンク(ここではバンクB)(読み出し用のバンク領域)と異なる他方のバンク(書き込みバンク)(ここではバンクA)(書き込み用のバンク領域)に書き込む。
この際、クラシフィケーションモジュール50は、当該ノードの左側に分岐すると判定した場合、当該学習データのアドレスを、図11に示すように、バンクAのアドレスの低い方(受信した開始アドレスであって前回の中間アドレス)から順に書き込み、当該ノードの右側に分岐すると判定した場合、当該学習データのアドレスを、バンクAのアドレスの高い方(受信した終了アドレス)から順に書き込む。これによって、書き込みバンク(バンクA)では、ノードの左側に分岐した学習データのアドレスは、アドレスの低い方に、ノードの右側に分岐した学習データのアドレスは、アドレスの高い方にきれいに分けて書き込むことができる。なお、書き込みバンクにおいて、ノードの左側に分岐した学習データのアドレスは、アドレスの高い方に、ノードの右側に分岐した学習データのアドレスは、アドレスの低い方に分けて書き込むものとしてもよい。この場合、図9における動作も合わせる必要がある。
以上の動作について、クラシフィケーションモジュール50は、全学習データのうちバンクBの中間アドレスよりも右側に書き込まれたアドレスで指定される学習データに対して分岐処理を行う。ただし、分岐処理が終了した後、ノード(デプス1、ノード1)の左側と右側とに同数の学習データが分けられるわけではないので、クラシフィケーションモジュール50は、左側に分岐した学習データのアドレスと、右側に分岐した学習データのアドレスとの中間に対応する書き込みバンク(バンクA)におけるアドレス(中間アドレス)を、制御部11に返す。当該中間アドレスは、次の分岐処理の際に使用される。
<デプス1・ノード1の分岐条件データの決定時に分岐しない場合>
図12は、実施形態に係る学習識別装置のデプス1、ノード1のノードパラメータを決定の結果、分岐しない場合のモジュールの動作を示す図である。なお、図8の場合と同様に、デプス1・ノード0のノードと同じ階層なので、バンクBが読み出しバンクとなる。
図12に示すように、制御部11は、デプス0での処理でクラシフィケーションモジュール50から受け取った中間アドレスに基づいて、ラーニングモジュール20へ開始アドレスおよび終了アドレスを送信し、トリガによりラーニングモジュール20による処理を開始させる。ラーニングモジュール20は、開始アドレスおよび終了アドレスに基づいて、ポインタメモリ31(バンクB)から対象とする学習データのアドレスを指定し、当該アドレスによって、フィーチャメモリ32から学習データ(特徴量)を読み出し、ステートメモリ33からステート情報(w,g,h)を読み出す。具体的には、ラーニングモジュール20は、図12に示すように、バンクBの右側(アドレスが高い方)から中間アドレスまで順にアドレスを指定していく。
ラーニングモジュール20は、算出した分岐スコア等から、これ以上ノード(デプス1、ノード1)から分岐しないと判断した場合、リーフフラグを「1」として、当該ノードのデータ(分岐条件データの一部としてもよい)をモデルメモリ40に書き込むと共に、制御部11にも当該ノードのリーフフラグが「1」であることを送信する。これによって、ノード(デプス1、ノード1)から下の階層には分岐しないことが認識される。さらに、ラーニングモジュール20は、ノード(デプス1、ノード1)のリーフフラグが「1」である場合、特徴量番号およびしきい値の代わりに、リーフウェイト(w)(分岐条件データの一部としてもよい)をモデルメモリ40に書き込む。これにより、モデルメモリ40の容量を別々に持つよりも小さくすることができる。
以上の図6~図12で示した処理を、階層(デプス)毎に進めていくと、全体の決定木が完成する(決定木が学習される)。
<決定木の学習が完了した場合>
図13は、実施形態に係る学習識別装置において決定木の学習が完了した場合に全サンプルデータのステート情報を更新するときのモジュールの動作を示す図である。
GBDTを構成する1つの決定木の学習が完了した場合、次の決定木へのブースティング(ここではグラディエントブースティング)の際に使用するため、各学習データの誤差関数に対応する一次勾配g、二次勾配h、および各学習データに対するリーフウェイトwを算出する必要がある。図13に示すように、制御部11は、トリガによりクラシフィケーションモジュール50による上述の計算を開始させる。クラシフィケーションモジュール50は、全学習データに対して、全デプス(階層)のノードに対する分岐判定の処理を行い、各学習データに対応するリーフウェイトを算出する。そして、クラシフィケーションモジュール50は、算出したリーフウェイトに対して、ラベル情報を基に、ステート情報(w、g、h)を算出し、元のステートメモリ33のアドレスに書き戻す。このように、更新されたステート情報を利用して、次の決定木の学習が行われる。
以上のように、本実施形態に係る学習識別装置1において、ラーニングモジュール20は、入力されたサンプルデータの各特徴量を読み込むためのメモリ(例えば、SRAM)をそれぞれ備えている。これによって、1アクセスでサンプルデータの全特徴量を読み出すことができ、各ゲイン算出モジュール21により、一度に全特徴量に対する処理が可能となるので、決定木の学習処理の速度を飛躍的に向上させることが可能となる。
また、本実施形態に係る学習識別装置1において、ポインタメモリ31では、バンクAおよびバンクBの2つが構成されており、交互に読み書きするものとしている。これによって、効率的にメモリを使用することが可能となる。単純には、フィーチャメモリ32およびステートメモリ33を、それぞれ2バンク構成する方法もあるが、一般的に、サンプルデータよりも、フィーチャメモリ32でのアドレスを示すデータの方が小さいので、本実施形態のように、ポインタメモリ31を準備しておき、間接的にアドレスを指定する方法の方が、メモリ容量を節約することが可能となる。また、クラシフィケーションモジュール50は、ノードの左側に分岐すると判定した場合、学習データのアドレスを、2つのバンクのうち書き込みバンクのアドレスの低い方から順に書き込み、当該ノードの右側に分岐すると判定した場合、当該学習データのアドレスを、書き込みバンクのアドレスの高い方から順に書き込む。これによって、書き込みバンクでは、ノードの左側に分岐した学習データのアドレスは、アドレスの低い方に、ノードの右側に分岐した学習データのアドレスは、アドレスの高い方にきれいに分けて書き込むことができる。
(変形例)
図14は、変形例に係る学習識別装置のモデルメモリの構成の一例を示す図である。図14を参照しながら、本変形例に係る学習識別装置1におけるモデルメモリ40において、決定木のデプス(階層)毎にメモリが備えられた構成について説明する。
図14に示すように、本変形例に係る学習識別装置1のモデルメモリ40は、学習された決定木のモデルデータについてデプス(階層)毎にデータ(具体的には分岐条件データ)を格納するためのデプス0用メモリ41_1、デプス1用メモリ41_2、・・・、デプス(m-1)用メモリ41_mを有する。ここで、mは、少なくとも決定木のモデルのデプス(階層)数以上の数である。すなわち、モデルメモリ40は、学習された決定木のモデルデータについてデプス(階層)毎にデータ(デプス0ノードデータ、デプス1ノードデータ、・・・、デプス(m-1)ノードデータ)を同時に取り出すための独立したポートを有する、ということになる。これによって、クラシフィケーションモジュール50は、決定木における最初のノードでの分岐結果に基づき、次のノードに対応するデータ(分岐条件データ)を読み出すことを、全デプス(階層)で並列に行い、途中にメモリを介さずに、1つのサンプルデータ(識別データ)に対して、1クロックで同時に各デプス(階層)での分岐処理を実行(パイプライン処理)することが可能となる。これによって、クラシフィケーションモジュール50における識別処理は、サンプルデータ数分だけの時間だけで済むことになり、識別処理の速度を飛躍的に向上させることができる。これに対して、従来の技術では、ノード毎に新しいメモリ領域にサンプルデータをコピーしていくため、メモリの読み書きの時間だけ速度に影響し、(サンプルデータ数×デプス(階層)数)の識別処理の時間となるので、上述のように本変形例に係る識別処理の方が大幅に優位となる。
図15は、変形例に係る学習識別装置のクラシフィケーションモジュールの構成の一例を示す図である。図15に示すように、クラシフィケーションモジュール50は、ノード0判別器51_1、ノード1判別器51_2、ノード2判別器51_3、・・・を有する。フィーチャメモリ32からは、1クロックに1つのサンプルデータが特徴量として供給される。図15に示すように、特徴量は、まずノード0判別器51_1に入力され、ノード0判別器51_1は、対応するモデルメモリ40のデプス0用メモリ41_1からそのノードのデータ(デプス0ノードデータ)(右に行くか、左に行くかの条件、および使用する特徴量番号)を受け取る。ノード0判別器51_1では、その条件に従い、対応するサンプルデータが右に行くか左に行くかが判別される。なお、ここではデプス用メモリ(デプス0用メモリ41_1、デプス1用メモリ41_2、デプス2用メモリ41_3、・・・)はそれぞれレイテンシが1クロックあるとしている。ノード0判別器51_1の結果により、次のデプス1用メモリ41_2の内、何番目のノードに行くかがアドレス指定され、対応するノードのデータ(デプス1ノードデータ)が抽出され、ノード1判別器51_2に入力される。
デプス0用メモリ41_1のレイテンシは1クロックであるため、同じように特徴量も1クロックの遅延を入れて、ノード1判別器51_2に入力される。また、同じクロックで次のサンプルデータの特徴量がノード0判別器51_1に入力されている。このようにして、パイプライン処理で識別を行うことにより、デプス毎にメモリが同時に出力されている前提で、1つの決定木全体として、1クロックで1つのサンプルデータを識別することが可能である。なお、デプス0用メモリ41_1は、デプス0ではノードは1つしかないので、1つのアドレスのみでよく、デプス1用メモリ41_2は、デプス1ではノードは2つあるので、2つのアドレスが必要であり、同じように、デプス2用メモリ41_3は、4つのアドレスが必要であり、デプス3用メモリ(図示せず)は、8つのアドレスが必要となる。なお、このクラシフィケーションモジュール50は木全体の識別を行うものであるが、ノードの学習時には、ノード0判別器51_1のみを用いて学習を行うことで同じ回路を流用して、回路規模を小さくすることができる。
[第2の実施形態]
第2の実施形態に係る学習識別装置について、第1の実施形態に係る学習識別装置1と相違する点を中心に説明する。第1の実施形態では、サンプルデータが記憶されるデータメモリ30を1つとして、GBDTによる学習処理および識別処理について説明した。本実施形態では、複数のサンプルデータを並列で処理するデータパラレルを実現するために、データメモリを複数に分割して学習処理を行う動作について説明する。
(データパラレルについて)
図16は、データパラレルを適用した学習識別装置のモジュール構成の一例を示す図である。図16を参照しながら、データパラレルを実現する構成の例である学習識別装置1aの構成について説明する。
サンプルデータ(学習データまたは識別データ)に対するデータパラレルを実現するためには、まず、図16に示すように、サンプルデータを分割して保持するために2つのデータメモリ30a、30bに分割することが考えられる。図16のデータメモリ30bでは図示していないが、データメモリ30aと同様に、データメモリ30bも、ポインタメモリ31と、フィーチャメモリ32と、ステートメモリ33とを含む。ただし、単にサンプルデータを保持するメモリを分割しても、分割されたサンプルデータを並列に処理(学習処理、識別処理等)を行う機構が必要である。図16に示す例では、識別処理を行うモジュールを、分割されたデータメモリと同数だけ配置された構成を示す。すなわち、学習識別装置1aは、2つのデータメモリ30a、30bのそれぞれに格納されたサンプルデータについて並列で識別処理を行うために、クラシフィケーションモジュール50a、50bを有する。個別のモジュールに着目した場合、フィーチャパラレルで処理されるものとすると、上述のようなデータパラレルにするために、構成の変更はほとんどないので実装も容易である。
また、学習処理、すなわち、ラーニングモジュール20での処理を高速化するためのデータパラレルとしては、サンプルデータを分割して保持するために2つのデータメモリ30a、30bに分割すると共に、上述したように、学習処理の過程で算出される特徴量および勾配情報(上述の式(11)参照)についてのヒストグラム(以下、「勾配ヒストグラム」と称する場合がある)を保持するメモリが、データメモリの分割数に比例して増大するので、回路規模が増大するという問題がある。
(勾配ヒストグラムを用いた分岐スコアの算出方法)
ここで、まず、ラーニングモジュール20における分岐スコアの算出方法について説明する。ここで、サンプルデータ(ここでは学習データ)の特徴量は、あるビット幅に量子化されていることを前提とする。例えば、特徴量が8ビット(256パターンの値)で、特徴量の次元が100である場合、ラーニングモジュール20は、256×100=25600パターンの分岐スコアを算出することになる。この場合のしきい値の候補は、256個である。
ある分岐条件(1つの特徴量に対する1つのしきい値)に対応する分岐スコアを算出するには、現在のノードにある学習データから、しきい値以上の特徴量を有する学習データの勾配情報の和(上述の式(19)のG
R、H
Rに相当)と、当該しきい値未満の学習データの勾配情報の和(上述の式(19)のG
L、H
Lに相当)を求める必要がある。ここで、下記の(表1)に示すように、学習データが4つ、特徴量が1次元で値が3パターン、勾配情報が一次勾配gである場合において具体的に説明する。
(表1)に示すように、特徴量が0、1、2の3パターンあるので、しきい値についても0、1、2となり、各しきい値での勾配情報の和は、以下の(表2)に示す値となり、この3パターンの各しきい値に対応する分岐スコアが算出される。
特定のしきい値に対して、勾配情報の和を求めるためには、現在のノードのすべての学習データを参照する必要がある。これをすべてのしきい値について毎回行うものとすると、非常に処理時間がかかることになる。例えば、特徴量が8ビット(256パターン)の場合、しきい値についても256パターンあるので、(現在のノードにある学習データ数×256)回だけ勾配情報の和を求める必要がある。これでは非常に処理時間がかかるので、予め、特徴量の各値における勾配情報の和(勾配ヒストグラム)、および勾配情報の総和を求めておき、勾配ヒストグラムの累積和をとることによって分岐スコアの算出処理を簡略化するものとする。
サンプルデータが上述の(表1)で示したものである場合、特徴量の各値における勾配情報の和(勾配ヒストグラム)は、以下の(表3)に示す値となる。
また、特徴量の各値における勾配情報の総和は、0.1+0.2+0.1-0.3=0.1となる。ここで、勾配ヒストグラムの累積和を求めることによって、勾配情報の和G
Lが求まり、勾配情報の総和から勾配情報の和G
Lを引くと勾配情報のG
Rが求まり、各しきい値に対する勾配情報の和G
L、G
Rは、以下の(表4)に示す値となる。
この方法であれば、現在のノードの学習データはそれぞれ1回参照すればよく、その後は、しきい値の数だけ勾配ヒストグラムを参照すれば、すべての分岐条件に対して分岐スコアを求めることができる。特徴量が8ビット(256パターン)の場合、(現在のノードにある学習データ数+256)回の処理で済むことになる。なお、上述の場合は、特徴量が1次元の場合であるが、特徴量が2次元以上でも、特徴量の次元ごとに勾配ヒストグラムを求めれば、同様の処理を並列で算出することが可能である。以下、第1の実施形態でフィーチャパラレルで学習を行うラーニングモジュール20の構成として示した図4に基づいてさらに詳細な構成を示した図17に示すラーニングモジュール20により、勾配ヒストグラムを算出して分岐条件データを求めるための構成および動作を説明し、さらに、データパラレルの構成とした場合の構成および動作について説明する。
(勾配ヒストグラムを用いて分岐条件データを求めるラーニングモジュールの構成例)
図17は、ラーニングモジュールの詳細なモジュール構成の一例を示す図である。図17を参照しながら、上述の図4が示す構成をさらに詳細に示したラーニングモジュール20の構成および動作について説明する。
図17に示すラーニングモジュール20は、ゲイン算出モジュール21_1、21_2、・・・、21_nと、最適条件導出モジュール22と、を備えている。ここで、nは、少なくともサンプルデータ(ここでは、学習データ)の特徴量の種類以上の数である。なお、ゲイン算出モジュール21_1、21_2、・・・、21_nについて、任意のゲイン算出モジュールを示す場合、または総称する場合、単に「ゲイン算出モジュール21」と称するものとする。
ゲイン算出モジュール21_1~21_1nは、それぞれ、入力されるサンプルデータに含まれる特徴量のうち対応する特徴量について、各しきい値における分岐スコアを、上述の式(19)を用いて算出するモジュールである。ゲイン算出モジュール21_1は、勾配ヒストグラム算出モジュール61_1と、累積勾配算出モジュール62_1と、算出モジュール63_1と、を含む。
勾配ヒストグラム算出モジュール61_1は、入力したサンプルデータの特徴量の各値をヒストグラムのビンとして、当該サンプルデータに対応する勾配情報の値を積算することによって勾配ヒストグラムを算出するモジュールである。
累積勾配算出モジュール62_1は、特徴量に対する各しきい値について、勾配ヒストグラムの累積和を求めることにより、勾配情報の和(GL、GR、HL、HR)を算出するモジュールである。
算出モジュール63_1は、累積勾配算出モジュール62_1により算出された勾配情報の和を用いて、上述の式(19)を用いて、各しきい値における分岐スコアを算出するモジュールである。
また、ゲイン算出モジュール21_2も、同様に、勾配ヒストグラム算出モジュール61_2と、累積勾配算出モジュール62_2と、算出モジュール63_2と、を含み、以下、ゲイン算出モジュール21_nについても同様である。なお、勾配ヒストグラム算出モジュール61_1、61_2、・・・、61_nについて、任意の勾配ヒストグラム算出モジュールを示す場合、または総称する場合、単に「勾配ヒストグラム算出モジュール61」と称するものとする。また、累積勾配算出モジュール62_1、62_2、・・・、62_nについて、任意の累積勾配算出モジュールを示す場合、または総称する場合、単に「累積勾配算出モジュール62」と称するものとする。また、算出モジュール63_1、63_2、・・・、63_nについて、任意の算出モジュールを示す場合、または総称する場合、単に「算出モジュール63」と称するものとする。
最適条件導出モジュール22は、各ゲイン算出モジュール21により出力された各特徴量および各しきい値に対応する各分岐スコアを入力し、分岐スコアが最大となる特徴量の番号(特徴量番号)およびしきい値を導出するモジュールである。最適条件導出モジュール22は、導出した特徴量番号およびしきい値を、対応するノードの分岐条件データ(ノードのデータの一例)として、モデルメモリ40へ書き込む。
<勾配ヒストグラム算出モジュールの構成および動作>
図18は、ラーニングモジュールの勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。図18を参照しながら、ラーニングモジュール20における勾配ヒストグラム算出モジュール61の構成および動作について説明する。なお、図18では、特徴量が1次元であるものとし、勾配情報として一次勾配gおよび二次勾配hがある場合について説明するが、単に、勾配情報g、勾配情報hと称する場合がある。
図18に示すように、勾配ヒストグラム算出モジュール61は、データカウンタ201と、加算器202と、ディレイ203と、勾配ヒストグラムメモリ204と、総和格納メモリ205と、加算器206と、ディレイ207と、勾配ヒストグラムメモリ208と、総和格納メモリ209と、を有する。
データカウンタ201は、データメモリ30から学習処理の対象となるサンプルデータ(特徴量)、および対応する勾配情報g、hを読み出すためのアドレスを出力する。
加算器202は、勾配ヒストグラムメモリ204から読み出した、加算された勾配情報gと、データメモリ30から新たに読み出した勾配情報gとを加算する。
ディレイ203は、加算器202により加算された勾配情報gを勾配ヒストグラムメモリ204に書き込むタイミングを合わせるために、データメモリ30から読み出された特徴量を遅延して出力する。
勾配ヒストグラムメモリ204は、特徴量の値をアドレスとして、加算された勾配情報gを格納していき、最終的に、特徴量の値(ビン)ごとの勾配ヒストグラムを格納するメモリである。
総和格納メモリ205は、データメモリ30から読み出した勾配情報gの総和を格納するメモリである。
加算器206は、勾配ヒストグラムメモリ208から読み出した、加算された勾配情報hと、データメモリ30から新たに読み出した勾配情報hとを加算する。
ディレイ207は、加算器206により加算された勾配情報hを勾配ヒストグラムメモリ208に書き込むタイミングを合わせるために、データメモリ30から読み出された特徴量を遅延して出力する。
勾配ヒストグラムメモリ208は、特徴量の値をアドレスとして、加算された勾配情報hを格納していき、最終的に、特徴量の値(ビン)ごとの勾配ヒストグラムを格納するメモリである。
総和格納メモリ209は、データメモリ30から読み出した勾配情報hの総和を格納するメモリである。
以下、勾配ヒストグラム算出モジュール61の勾配ヒストグラムの算出動作の流れを簡潔に説明する。まず、勾配ヒストグラム算出モジュール61は、データカウンタ201から出力されるアドレスを用いて、データメモリ30に記憶されている、現在のノードの1つの学習データ(特徴量、勾配情報)を読み出す。そして、加算器202は、データメモリ30から読み出した特徴量をアドレスとして、勾配ヒストグラムメモリ204から勾配情報g(加算された勾配情報g)を読み出す。そして、加算器202は、勾配ヒストグラムメモリ204から読み出した勾配情報g(加算された勾配情報g)と、データメモリ30から読み出した勾配情報gとを加算し、データメモリ30から読み出された特徴量をアドレスとして、勾配ヒストグラムメモリ204へ加算した勾配情報gを書き込む(更新する)。総和格納メモリ205は、データメモリ30から勾配情報gを読み出す度に加算して勾配情報gの総和を格納する。なお、加算器206、ディレイ207、勾配ヒストグラムメモリ208および総和格納メモリ209による勾配情報hに対する処理も、上述と同様である。以上の動作を、現在のノードのすべての学習データについて繰り返す。
<累積勾配算出モジュールの構成および動作>
図19は、ラーニングモジュールの累積勾配算出モジュールのモジュール構成の一例を示す図である。図19を参照しながら、ラーニングモジュール20における累積勾配算出モジュール62の構成および動作について説明する。なお、図19では、特徴量が1次元であるものとし、勾配情報として一次勾配gおよび二次勾配hがある場合について説明する。
図19に示すように、累積勾配算出モジュール62は、しきい値カウンタ210と、アキュムレータ211と、ディレイ212と、差分器213と、アキュムレータ214と、ディレイ215と、差分器216と、を有する。
しきい値カウンタ210は、勾配ヒストグラムメモリ204、208から特徴量の値ごとに加算された勾配情報(g、h)、すなわち、特徴量の各値の勾配ヒストグラムを読み出すためのアドレスとなるしきい値を出力する。
アキュムレータ211は、しきい値カウンタ210から出力されたしきい値(アドレス)に対応した勾配情報gについての勾配ヒストグラムを勾配ヒストグラムメモリ204から読み出して、現在格納している勾配ヒストグラムの累積和に対して、さらに累積して、新たな勾配ヒストグラムの累積和として保持する。
ディレイ212は、アキュムレータ211から読み出した勾配情報gについての勾配ヒストグラムの累積和を、差分器213から勾配情報gの和GRが出力されるタイミングと合せるために遅延させて、勾配情報gの和GL(累積和の一例)として出力する。
差分器213は、総和格納メモリ205から読み出した勾配情報gの総和から、アキュムレータ211から読み出した勾配情報gについての勾配ヒストグラムの累積和(すなわち、勾配情報gの和GL)を引いて、勾配情報gの和GR(累積和の一例)を算出する。
アキュムレータ214は、しきい値カウンタ210から出力されたしきい値(アドレス)に対応した勾配情報hについての勾配ヒストグラムを勾配ヒストグラムメモリ208から読み出して、現在格納している勾配ヒストグラムの累積和に対して、さらに累積して、新たな勾配ヒストグラムの累積和として保持する。
ディレイ215は、アキュムレータ214から読み出した勾配情報hについての勾配ヒストグラムの累積和を、差分器216から勾配情報hの和HRが出力されるタイミングと合せるために遅延させて、勾配情報hの和HL(累積和の一例)として出力する。
差分器216は、総和格納メモリ209から読み出した勾配情報hの総和から、アキュムレータ214から読み出した勾配情報hについての勾配ヒストグラムの累積和(すなわち、勾配情報hの和HL)を引いて、勾配情報hの和HR(累積和の一例)を算出する。
以下、累積勾配算出モジュール62の勾配情報の和(GL、GR、HL、HR)の算出動作の流れを簡潔に説明する。なお、累積勾配算出モジュール62による算出処理は、勾配ヒストグラム算出モジュール61における勾配情報の勾配ヒストグラムの算出・格納処理の動作終了後に開始される。すなわち、勾配ヒストグラム算出モジュール61による算出処理の終了後は、勾配ヒストグラムメモリ204、208には、それぞれ、現在のノードのすべての学習データから算出された勾配情報g、hについての勾配ヒストグラムが保持してある。
まず、累積勾配算出モジュール62は、しきい値カウンタ210から出力されるアドレスとしてのしきい値を用いて、勾配ヒストグラムメモリ204に記憶されている勾配情報gの勾配ヒストグラムを読み出す。そして、アキュムレータ211は、しきい値カウンタ210から出力されたしきい値に対応した勾配情報gについての勾配ヒストグラムを勾配ヒストグラムメモリ204から読み出して、現在格納している勾配ヒストグラムの累積和に対して、さらに累積して、新たな勾配ヒストグラムの累積和として保持する。そして、差分器213は、総和格納メモリ205から読み出した勾配情報gの総和から、アキュムレータ211から読み出した勾配情報gについての勾配ヒストグラムの累積和(すなわち、勾配情報gの和GL)を引いて、勾配情報gの和GRを算出して、算出モジュール63へ出力する。また、ディレイ212は、アキュムレータ211から読み出した勾配情報gについての勾配ヒストグラムの累積和(すなわち、勾配情報gの和GL)を、差分器213の出力に合せて、算出モジュール63へ出力する。なお、アキュムレータ214、ディレイ215および差分器216におる勾配情報hに対する処理(勾配情報hの和HL、HRの算出処理)も、上述と同様である。以上の動作を、すべてのしきい値について繰り返すが、この場合、しきい値カウンタ210がしきい値を順にカウントアップさせながら一巡して出力することによって実現される。
<データパラレルにした場合の勾配ヒストグラム算出モジュール>
図20は、データパラレルにした場合の勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。図20を参照しながら、データパラレルにした場合の勾配ヒストグラム算出モジュール61の構成および動作について説明する。なお、図20では、データパラレルの分割数を2とし、特徴量が1次元であるものとし、勾配情報として一次勾配gのみを考えた場合について説明する。
図20に示すように、分割数が2の場合のデータパラレルとするために、図18に示すデータメモリ30の代わりに、分割したメモリであるデータメモリ30a、30bが構成され、勾配ヒストグラム算出モジュール61の代わりに、勾配ヒストグラム算出モジュール61a、61bが構成される。
図20に示すように、勾配ヒストグラム算出モジュール61aは、データカウンタ201aと、加算器202aと、ディレイ203aと、勾配ヒストグラムメモリ204aと、総和格納メモリ205aと、を有する。また、勾配ヒストグラム算出モジュール61bは、データカウンタ201bと、加算器202bと、ディレイ203bと、勾配ヒストグラムメモリ204bと、総和格納メモリ205bと、を有する。データカウンタ201a、201b、加算器202a、202b、ディレイ203a、203b、勾配ヒストグラムメモリ204a、204b、および、総和格納メモリ205a、205bの機能は、図18で説明した各機能と同様である。
データパラレルを簡易に構成する場合、図20に示すように、データメモリ30と共に、勾配ヒストグラム算出モジュール61も分割数と同数だけ配置する構成が考えられる。この場合、勾配ヒストグラムメモリの数は、特徴量次元×分割数となる。図20に示す例では、特徴量は一次元、分割数は2としているので、勾配ヒストグラムメモリ204a、204bの2つとなる。さらに、勾配情報として一次勾配gおよび二次勾配h用のそれぞれの勾配ヒストグラムメモリを考えた場合、必要となる勾配ヒストグラムメモリの全容量は、1つのメモリの容量(ビン数×ビット幅)×2(一次勾配g、二次勾配h)×特徴量次元×分割数となる。大規模なデータセットでは、特徴量が数百~数千次元ある場合も珍しくなく、そのうえ、分割数を増やすと大量のメモリの数が必要となり、メモリの容量がボトルネックとなり、回路の規模が増大してしまう。例えば、特徴量が8ビット(256パターン)で2000次元であり、勾配情報が一次勾配gおよび二次勾配hの2つとし、勾配ヒストグラムのビット幅が12ビットの場合、12[ビット]×256=3072[ビット]なので、1つの勾配ヒストグラムメモリのメモリ容量は3072ビットを満たせるものが必要になる。メモリは、通常、2のべき乗で用意されるので、この場合、メモリ容量は4096ビット(4kビット)となる。したがって、1分割(分割なし)の場合の勾配ヒストグラムメモリの全容量は、以下のようになる。
4[kビット]×2(一次勾配g、二次勾配h)×2000[次元]=16[Mビット]
すなわち、1分割(分割なし)あたり16Mビットのメモリ容量が必要になり、分割した場合は、(分割数×16Mビット)のメモリ容量が必要となる。
例えば、ハイエンドなFPGAであるxilinx社のvirtex UltrScale+のVU9Pというチップの場合について考える。勾配ヒストグラムメモリに用いることができるのは分散RAMおよびブロックRAMという回路である。VU9Pでは、分散RAMが最大で36.1Mビット、ブロックRAMが最大で75.9Mビットである。そのため、勾配ヒストグラムメモリに分散RAMを用いた場合は2分割が限界であり、ブロックRAMを用いた場合は4分割が限界となる。また、分散RAMおよびブロックRAMは、勾配ヒストグラムの保持以外にも使う必要があるため、分割数の上限は上述の数よりも低くなる。以上のことより、特徴量および勾配情報のセットが並列に入力される場合において、図17~図20で説明したラーニングモジュール20の構成と比較して、より小規模な回路で勾配ヒストグラムを算出および格納することが可能な構成が必要である。以下、本実施形態に係るラーニングモジュールの構成および動作を、図21~図26で説明する。
(第2の実施形態に係るラーニングモジュールの構成)
図21は、第2の実施形態に係る学習識別装置のラーニングモジュールのモジュール構成の一例を示す図である。図21を参照しながら、本実施形態に係る学習識別装置(学習装置の一例)のラーニングモジュール20aの構成および動作について説明する。なお、図21では、データパラレルの分割数を2とし、特徴量が1次元であるものとして説明する。
図21に示すように、本実施形態に係るラーニングモジュール20aは、勾配ヒストグラム算出モジュール71と、累積勾配算出モジュール72と、算出モジュール73と、最適条件導出モジュール22と、を備えている。
勾配ヒストグラム算出モジュール71は、入力したサンプルデータの特徴量の各値をヒストグラムのビンとして、当該サンプルデータに対応する勾配情報の値を積算することによって勾配ヒストグラムを算出するモジュールである。勾配ヒストグラム算出モジュール71は、勾配出力モジュール301a、301bと、加算モジュール302と、アキュムレータモジュール303と、総和格納メモリ304と、を有する。
勾配出力モジュール301a、301bは、特徴量の各値に対応した出力ポートを有し、データメモリ30a、30bから、特徴量および勾配情報を入力し、入力した特徴量の値に対応した出力ポートから当該勾配情報を出力するモジュールである。
加算モジュール302は、特徴量の値(ビン)ごとに対応する勾配情報を加算して出力するモジュールである。
アキュムレータモジュール303は、特徴量の値(ビン)ごとに、加算モジュール302から入力した加算された勾配情報を、現在保持している加算された勾配情報に加算し、最終的に、ビンごとに勾配情報の勾配ヒストグラムを保持するモジュールである。
総和格納メモリ304は、加算モジュール302により算出された勾配情報の総和を格納するメモリである。
累積勾配算出モジュール72は、特徴量に対する各しきい値について、勾配ヒストグラムの累積和を求めることにより、勾配情報の和(GL、GR、HL、HR)を算出するモジュールである。
算出モジュール73は、累積勾配算出モジュール72により算出された勾配情報の和を用いて、上述の式(19)を用いて、各しきい値における分岐スコアを算出するモジュールである。
最適条件導出モジュール22は、算出モジュール73により出力された各特徴量(図21では1つの特徴量)および各しきい値に対応する各分岐スコアを入力し、分岐スコアが最大となる特徴量の番号(特徴量番号)およびしきい値を導出するモジュールである。最適条件導出モジュール22は、導出した特徴量番号およびしきい値を、対応するノードの分岐条件データ(ノードのデータの一例)として、モデルメモリ40へ書き込む。
また、図21に示すように、分割数が2の場合のデータパラレルとするために、メモリがデータメモリ30a、30bの2つのメモリに分割され、勾配ヒストグラム算出モジュール71のうち、前段において勾配出力モジュール301a、301bの2つのモジュールに分割されている。図21では、分割された物理的な単位を、「分割1」および「分割2」と表記している。
<勾配ヒストグラム算出モジュールの構成および動作>
図22は、第2の実施形態のラーニングモジュールの勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。図22を参照しながら、本実施形態に係るラーニングモジュール20aにおける勾配ヒストグラム算出モジュール71の構成および動作について説明する。なお、図21では、データパラレルの分割数を2とし、特徴量が1次元であるものとし、勾配情報として1つ(例えば、一次勾配g)のみを考えた場合について説明する。
図22に示すように、勾配ヒストグラム算出モジュール71は、図22で説明した構成に加え、データカウンタ311a、311bを有する。
データカウンタ311aは、データメモリ30aから学習処理の対象となるサンプルデータ(特徴量)、および対応する勾配情報を読み出すためのアドレスを出力する。
勾配出力モジュール301aは、図22に示すように、比較器312_1、312_2、・・・、312_Nと、マルチプレクサ313_1、313_2、・・・、313_Nと、を有する。ここで、Nは、特徴量が取り得る値の数であって、勾配ヒストグラムにおけるビンの数である。なお、比較器312_1、312_2、・・・、312_Nについて、任意の比較器を示す場合、または総称する場合、単に「比較器312」と称するものとする。また、マルチプレクサ313_1、313_2、・・・、313_Nについて、任意のマルチプレクサを示す場合、または総称する場合、単に「マルチプレクサ313」と称するものとする。
比較器312は、データメモリ30aから読み出した特徴量と、特定のビンの特徴量の値とを入力し、双方を比較して一致した場合、一致した旨(例えば、電圧レベルのオン出力)を、マルチプレクサ313へ出力する。例えば、比較器312_1は、データメモリ30aから読み出した特徴量が、ビン1の特徴量の値と一致した場合、一致した旨をマルチプレクサ313_1へ出力する。
マルチプレクサ313は、比較器312がデータメモリ30aから読み出した特徴量(学習データ)に対応する勾配情報と、0とを入力し、比較器312から出力された比較結果に応じて、入力した勾配情報または0を出力する。例えば、マルチプレクサ313_1は、比較器312_1がデータメモリ30aから読み出した特徴量に対応する勾配情報と、0とを入力し、比較器312_1から出力された比較結果が一致を示す場合、入力した勾配情報をビン1に対応する勾配情報として出力し、比較結果が不一致を示す場合、0を出力する。すなわち、データメモリ30aから読み出された特徴量の値に対応するマルチプレクサ313から、当該特徴量に対応する勾配情報が出力され、それ以外のマルチプレクサ313から0が出力される仕組みである。
なお、データメモリ30b、データカウンタ311b、および勾配出力モジュール301bの機能は、それぞれ上述のデータメモリ30a、データカウンタ311a、および勾配出力モジュール301aと同様である。
加算モジュール302は、特徴量の値、すなわちビンごとにマルチプレクサ313から入力した勾配情報を加算して、アキュムレータモジュール303へ出力する。加算モジュール302は、加算器321_1、321_2、・・・、321_Nと、加算器322と、を有する。
加算器321_1、321_2、・・・、321_Nは、それぞれビン1、2、・・・、Nごとにマルチプレクサ313から入力した勾配情報を加算して、加算した勾配情報をアキュムレータモジュール303へ出力する。例えば、加算器321_1は、勾配出力モジュール301aにおけるビン1に対応するマルチプレクサ313_1からの出力である勾配情報と、勾配出力モジュール301bにおけるビン1に対応するマルチプレクサ313_1からの出力である勾配情報と、を加算して、アキュムレータモジュール303(この場合、後述するビン1アキュムレータ331_1)へ出力する。
加算器322は、勾配出力モジュール301aおよび勾配出力モジュール301bが、それぞれデータメモリ30a、30bから読み出した勾配情報をそれぞれ入力して加算し、加算した勾配情報を総和格納メモリ304へ出力する。
アキュムレータモジュール303は、特徴量の値(ビン)ごとに、加算モジュール302から入力した加算された勾配情報を、現在保持している加算された勾配情報に加算し、最終的に、ビンごとに勾配情報の勾配ヒストグラムを保持する。アキュムレータモジュール303は、ビン1アキュムレータ331_1と、ビン2アキュムレータ331_2と、・・・、ビンNアキュムレータ331_Nと、を有する。
ビン1アキュムレータ331_1、ビン2アキュムレータ331_2、・・・、ビンNアキュムレータ331_Nは、それぞれビン1、2、・・・、Nごとに、加算器321_1、321_2、・・・、321_Nからそれぞれ入力した加算された勾配情報を、現在保持している加算された勾配情報に加算する。例えば、ビン1アキュムレータ331_1は、加算器321_1から入力した加算された勾配情報を、現在保持している加算された勾配情報に加算し、ビン1の勾配情報の勾配ヒストグラムを保持する。
総和格納メモリ304は、加算器322から出力された加算された勾配情報を、現在保持している加算された勾配情報に加算する。すなわち、総和格納メモリ304は、すべての学習データに対応する勾配情報の総和が格納される。
以下、本実施形態に係る勾配ヒストグラム算出モジュール71の勾配ヒストグラムの算出動作の流れを簡潔に説明する。データカウンタ311a(311b)は、データメモリ30aから学習処理の対象となるサンプルデータ(特徴量)、および対応する勾配情報を読み出すためのアドレスを出力する。勾配出力モジュール301a(301b)の比較器312は、データメモリ30a(30b)から読み出した特徴量と、特定のビンの特徴量の値とを入力し、双方を比較して一致した場合、一致した旨を、マルチプレクサ313へ出力する。マルチプレクサ313は、比較器312がデータメモリ30a(30b)から読み出した特徴量(学習データ)に対応する勾配情報と、0とを入力し、比較器312から出力された比較結果に応じて、入力した勾配情報または0を出力する。加算モジュール302の加算器321_1、321_2、・・・、321_Nは、それぞれビン1、2、・・・、Nごとにマルチプレクサ313から入力した勾配情報を加算して、加算した勾配情報をアキュムレータモジュール303へ出力する。アキュムレータモジュール303のビン1アキュムレータ331_1、ビン2アキュムレータ331_2、・・・、ビンNアキュムレータ331_Nは、それぞれビン1、2、・・・、Nごとに、加算器321_1、321_2、・・・、321_Nからそれぞれ入力した加算された勾配情報を、現在保持している加算された勾配情報に加算して、最終的に、ビンごとに勾配情報の勾配ヒストグラムを保持する。以上の動作を、現在のノードのすべての学習データについて繰り返す。
以上のような、本実施形態に係る勾配ヒストグラム算出モジュール71の構成では、図20で示した構成のように勾配ヒストグラムをメモリに格納するのではなく、特徴量のビンごとに対応したレジスタ(アキュムレータ)に格納するものとしている。図22に示す勾配ヒストグラム算出モジュール71の構成では、特徴量のビン数×特徴量次元(図22では次元を1としている)の数のレジスタがあれば実現することが可能である。すなわち、勾配ヒストグラムを格納するために必要となる全容量は、ビン数×ビット幅×2(一次勾配g、二次勾配h)×特徴量次元となり、分割数に依存しない。したがって、図20で示した構成の場合と比較して、勾配ヒストグラムを格納するための回路容量を大幅に削減することができる。また、本実施形態に係る勾配ヒストグラム算出モジュール71の構成では、回路規模は分割数に依存しないので、他のモジュールの回路規模が許せる限り、データパラレルの分割数を増加させることができ、学習処理の速度を向上させることが可能となる。
例えば、特徴量が8ビット(256パターン)で2000次元であり、勾配情報が一次勾配gおよび二次勾配hの2つとした場合、必要となるレジスタの数は、以下のようになる。
256(ビン数)×2(一次勾配g、二次勾配h)×2000[次元]=1024000[個]
ここで、上述のVU9Pというチップの場合、最大レジスタ数は2364000[個]なので、本実施形態に係る勾配ヒストグラム算出モジュール71の構成で、勾配ヒストグラムの保持に必要なレジスタ数は、当該最大レジスタ数の半分程度に収めることができる。
図23は、第2の実施形態のラーニングモジュールにおいて分割数を3とした場合の勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。図23を参照しながら、データパラレルの分割数を3とした場合の勾配ヒストグラム算出モジュール71の構成の一例について説明する。なお、図23では、特徴量が1次元であるものとし、勾配情報として1つ(例えば、一次勾配g)のみを考えた場合について説明する。
例えば、図23では、加算モジュール302は、加算器321_1_1、・・・、321_N_1と、加算器321_1_2、・・・、321_N_2と、加算器322_1、322_2と、を有する。図23に示す勾配ヒストグラム算出モジュール71のように、加算モジュール302は、段階的に勾配情報を統合(加算)するものとすればよい。例えば、ビン1について、加算器321_1_1は、「分割1」から出力された勾配情報と、「分割2」から出力された勾配情報とを加算して、加算器321_1_2へ出力する。そして、加算器321_1_2は、加算器321_1_1から出力された加算値と、「分割3」から出力された勾配情報と、を加算して、アキュムレータモジュール303のビン1アキュムレータ331_1へ出力する。
<累積勾配算出モジュールの構成および動作>
図24は、第2の実施形態のラーニングモジュールの累積勾配算出モジュールのモジュール構成の一例を示す図である。図24を参照しながら、本実施形態に係るラーニングモジュール20aにおける累積勾配算出モジュール72の構成および動作について説明する。なお、図24では、データパラレルの分割数を1とし、特徴量が1次元であるものとし、勾配情報として2つ(例えば、一次勾配g、二次勾配h)を考えた場合について説明する。
図19に示す累積勾配算出モジュール62では、しきい値カウンタ210の出力(しきい値)をアドレスとして、勾配ヒストグラムメモリ204(208)にアクセスしていた。図24では、勾配ヒストグラムは、ビンごとにレジスタ(アキュムレータ)に保持されているので、マルチプレクサを介してすべてのビンからしきい値カウンタのしきい値に対応した値のみを取り出している。
図24に示すように、累積勾配算出モジュール72は、しきい値カウンタ340と、アキュムレータ341と、ディレイ342と、差分器343と、アキュムレータ344と、ディレイ345と、差分器346と、マルチプレクサ347、348と、を有する。また、図24では、一次勾配gに対応するアキュムレータモジュール303および総和格納メモリ304を、それぞれアキュムレータモジュール303gおよび総和格納メモリ304gとしている。また、二次勾配hに対応するアキュムレータモジュール303および総和格納メモリ304を、それぞれアキュムレータモジュール303hおよび総和格納メモリ304hとしている。
しきい値カウンタ340は、アキュムレータモジュール303g、303hから、特徴量の値(ビン)ごとに加算された勾配情報(g、h)、すなわち、特徴量の各ビンの勾配ヒストグラムを読み出すためのしきい値を出力する。
マルチプレクサ347は、しきい値カウンタ340からのしきい値と、アキュムレータモジュール303gの各アキュムレータ(ビン1アキュムレータ331_1、ビン2アキュムレータ331_2、・・・、ビンNアキュムレータ331_N)の格納値(勾配ヒストグラム)を入力する。そして、マルチプレクサ347は、入力した各ビンの勾配ヒストグラムのうち、しきい値カウンタ340からのしきい値に対応するビンに対応する勾配ヒストグラムを、アキュムレータ341へ出力する。
マルチプレクサ348は、しきい値カウンタ340からのしきい値と、アキュムレータモジュール303hの各アキュムレータ(ビン1アキュムレータ331_1、ビン2アキュムレータ331_2、・・・、ビンNアキュムレータ331_N)の格納値(勾配ヒストグラム)を入力する。そして、マルチプレクサ348は、入力した各ビンの勾配ヒストグラムのうち、しきい値カウンタ340からのしきい値に対応するビンに対応する勾配ヒストグラムを、アキュムレータ344へ出力する。
アキュムレータ341は、しきい値カウンタ340から出力されたしきい値に対応する勾配情報gについての勾配ヒストグラムをマルチプレクサ347から入力して、現在格納している勾配ヒストグラムの累積和に対して、さらに累積して、新たな勾配ヒストグラムの累積和として保持する。
ディレイ342は、アキュムレータ341から読み出した勾配情報gについての勾配ヒストグラムの累積和を、差分器343から勾配情報gの和GRが出力されるタイミングと合せるために遅延させて、勾配情報gの和GLとして出力する。
差分器343は、総和格納メモリ304gから読み出した勾配情報gの総和から、アキュムレータ341から読み出した勾配情報gについての勾配ヒストグラムの累積和(すなわち、勾配情報gの和GL)を引いて、勾配情報gの和GRを算出する。
アキュムレータ344は、しきい値カウンタ340から出力されたしきい値に対応する勾配情報hについての勾配ヒストグラムをマルチプレクサ348から入力して、現在格納している勾配ヒストグラムの累積和に対して、さらに累積して、新たな勾配ヒストグラムの累積和として保持する。
ディレイ345は、アキュムレータ344から読み出した勾配情報hについての勾配ヒストグラムの累積和を、差分器346から勾配情報hの和HRが出力されるタイミングと合せるために遅延させて、勾配情報hの和HLとして出力する。
差分器346は、総和格納メモリ304hから読み出した勾配情報hの総和から、アキュムレータ344から読み出した勾配情報hについての勾配ヒストグラムの累積和(すなわち、勾配情報hの和HL)を引いて、勾配情報hの和HRを算出する。
以下、累積勾配算出モジュール72の勾配情報の和(GL、GR、HL、HR)の算出動作の流れを簡潔に説明するなお、累積勾配算出モジュール72による算出処理は、勾配ヒストグラム算出モジュール71における勾配情報の勾配ヒストグラムの算出・格納処理の動作終了後に開始される。すなわち、勾配ヒストグラム算出モジュール71による算出処理の終了後は、アキュムレータモジュール303g、303hには、それぞれ、現在のノードのすべての学習データから算出された勾配情報g、hについての勾配ヒストグラムが保持してある。
まず、マルチプレクサ347は、しきい値カウンタ340からのしきい値と、アキュムレータモジュール303gの各アキュムレータ(ビン1アキュムレータ331_1、ビン2アキュムレータ331_2、・・・、ビンNアキュムレータ331_N)の格納値(勾配ヒストグラム)を入力する。そして、マルチプレクサ347は、入力した各ビンの勾配ヒストグラムのうち、しきい値カウンタ340からのしきい値に対応するビンに対応する勾配ヒストグラムを、アキュムレータ341へ出力する。そして、アキュムレータ341は、しきい値カウンタ340から出力されたしきい値に対応する勾配情報gについての勾配ヒストグラムをマルチプレクサ347から入力して、現在格納している勾配ヒストグラムの累積和に対して、さらに累積して、新たな勾配ヒストグラムの累積和として保持する。また、ディレイ342は、アキュムレータ341から読み出した勾配情報gについての勾配ヒストグラムの累積和を、差分器343から勾配情報gの和GRが出力されるタイミングと合せるために遅延させて、勾配情報gの和GLとして、算出モジュール73へ出力する。そして。差分器343は、総和格納メモリ304gから読み出した勾配情報gの総和から、アキュムレータ341から読み出した勾配情報gについての勾配ヒストグラムの累積和(すなわち、勾配情報gの和GL)を引いて、勾配情報gの和GRを算出して、算出モジュール73へ出力する。なお、マルチプレクサ348、アキュムレータ344、ディレイ345および差分器346におる勾配情報hに対する処理(勾配情報hの和HL、HRの算出処理)も、上述と同様である。以上の動作を、すべてのしきい値について繰り返すが、この場合、しきい値カウンタ340がしきい値を順にカウントアップさせながら一巡して出力することによって実現される。
このように、予め、勾配ヒストグラム算出モジュール71による勾配情報の勾配ヒストグラムの算出・格納処理の動作を行ったうえで、累積勾配算出モジュール72および算出モジュール73の処理を行うものとしている。これによって、ラーニングモジュール20aによる分岐スコア(ゲイン)の算出処理を高速化することができる。
<次元数が2の場合のラーニングモジュールの構成>
図25は、第2の実施形態に係る学習識別装置において特徴量の種類を2とした場合のラーニングモジュールのモジュール構成の一例を示す図である。図26は、第2の実施形態のラーニングモジュールにおいて特徴量の種類を2とした場合の勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。図25および図26を参照しながら、本実施形態に係る学習識別装置(学習装置の一例)のラーニングモジュール20bの構成および動作について説明する。なお、図25では、データパラレルの分割数を2とし、特徴量が2次元であるものとして説明する。
図25に示すように、ラーニングモジュール20bは、勾配ヒストグラム算出モジュール71と、累積勾配算出モジュール72_1、72_2と、算出モジュール73_1、73_2と、最適条件導出モジュール22と、を備えている。勾配ヒストグラム算出モジュール71は、勾配出力モジュール301a_1、301a_2、301b_1、301b_2と、加算モジュール302_1、302_2と、アキュムレータモジュール303_1、303_2と、総和格納メモリ304_1、304_2と、を有する。図26に示すように、勾配ヒストグラム算出モジュール71は、図25に示した構成に加え、データカウンタ311a、311bを有する。
また、図26に示すように、勾配出力モジュール301a_1、301a_2、301b_1、301b_2は、それぞれ、比較器312_1、312_2、・・・、312_Nと、マルチプレクサ313_1、313_2、・・・、313_Nと、を有する。加算モジュール302_1、302_2は、それぞれ、加算器321_1、321_2、・・・、321_Nと、加算器322と、を有する。アキュムレータモジュール303_1、303_2は、それぞれ、ビン1アキュムレータ331_1と、ビン2アキュムレータ331_2と、・・・、ビンNアキュムレータ331_Nと、を有する。
図25および図26に示す構成のうち、勾配出力モジュール301a_1、301b_1、加算モジュール302_1、アキュムレータモジュール303_1、総和格納メモリ304_1、累積勾配算出モジュール72_1、および算出モジュール73_1は、「特徴量1」に対応する処理のために用いられる。一方、勾配出力モジュール301a_2、301b_2、加算モジュール302_2、アキュムレータモジュール303_2、総和格納メモリ304_2、累積勾配算出モジュール72_2、および算出モジュール73_2は、「特徴量2」に対応する処理のために用いられる。各モジュールの動作は、図22および図24で説明した動作と同様である。
上述したように、勾配ヒストグラムを格納するために必要となる容量は、ビン数×ビット幅×2(一次勾配g、二次勾配h)×特徴量次元であるので、特徴量の次元数だけ、アキュムレータモジュール303(図25では、アキュムレータモジュール303_1、303_2)が必要となる。しかし、当該容量は、分割数に依存しないので、図25および図26に示す例では、分割数が2の場合であるが、分割数が3以上となっても、特徴量の次元が2である限り、アキュムレータモジュール303は2つであればよい。
以上のように、本実施形態に係る学習識別装置のラーニングモジュール20a(20b)では、勾配ヒストグラム算出モジュール71は、図20で示した構成のように勾配ヒストグラムをメモリに格納するのではなく、特徴量のビンごとに対応したレジスタ(アキュムレータ)に格納するものとしている。この勾配ヒストグラム算出モジュール71の構成では、特徴量のビン数×特徴量次元の数のレジスタがあれば実現することが可能である。すなわち、勾配ヒストグラムを格納するために必要となる全容量は、ビン数×ビット幅×2(一次勾配g、二次勾配h)×特徴量次元となり、分割数に依存しない。したがって、図20で示した構成の場合と比較して、並列に入力される特徴量および勾配情報について作成された勾配ヒストグラムの情報を保持するメモリ(アキュムレータ、レジスタ)の回路規模を大幅に削減することができる。また、本実施形態に係る勾配ヒストグラム算出モジュール71の構成では、回路規模は分割数に依存しないので、他のモジュールの回路規模が許せる限り、データパラレルの分割数を増加させることができ、学習処理の速度を向上させることが可能となる。
[第3の実施形態]
第3の実施形態に係る学習識別装置について、第2の実施形態に係る学習識別装置と相違する点を中心に説明する。本実施形態では、GBDTによる学習処理においてノードの学習データを分割して並列に学習を行う場合(すなわち、データパラレルで学習を行う場合)に、当該学習データのアドレス計算を実現するコントロールモジュールのハードロジック構成について説明する。
(学習識別装置の構成)
図27は、第3の実施形態に係る学習識別装置のモジュール構成の一例を示す図である。図28は、次の学習対象となるノードでの学習データのアドレス算出について説明する図である。図27および図28を参照しながら、本実施形態に係る学習識別装置1b(学習装置の一例)のモジュール構成について説明する。本実施形態に係る学習識別装置は、データパラレルでの学習データのアドレス計算を行うものであるが、まず、下記のアドレス管理部12によるアドレスの算出動作について説明するため、図27に示す学習識別装置1bでは、データパラレルではない構成として説明する。
図28に示すように、本実施形態に係る学習識別装置1bは、コントロールモジュール15と、ラーニングモジュール20と、データメモリ30と、モデルメモリ40と、クラシフィケーションモジュール50と、を備えている。このうち、ラーニングモジュール20、データメモリ30、モデルメモリ40およびクラシフィケーションモジュール50は、例えば、FPGAにより構成されている。コントロールモジュール15と、当該FPGAとはバスを介してデータ通信可能となっている。なお、学習識別装置1bは、図27に示す各構成要素だけではなく、他の構成要素、例えば、各種データ(プログラム等)を記憶した補助記憶装置、および外部装置と通信を行う通信I/F等を備えているものとしてもよい。また、ラーニングモジュール20、データメモリ30、モデルメモリ40およびクラシフィケーションモジュール50の構成および動作は、第1の実施形態および第2の実施形態で上述した通りである。
コントロールモジュール15は、全体でGBDTの学習を制御する演算モジュールである。コントロールモジュール15は、CPU10と、アドレス管理部12(管理部)と、を備えている。CPU10は、制御部11を有する。
制御部11は、ラーニングモジュール20、データメモリ30、モデルメモリ40およびクラシフィケーションモジュール50の各モジュールを制御する。制御部11は、CPU10で実行されるプログラムによって実現される。
アドレス管理部12は、制御部11からノードアドレス(後述するように、各デプスでのノードを識別する番号)、および、バンクAまたはバンクBを指定する選択信号を受信し、さらに、識別処理を終了したクラシフィケーションモジュール50から中間アドレスを受信し、次のノードの学習を行うための開始アドレスおよび終了アドレスを算出するハードロジックのモジュールである。アドレス管理部12の具体的なアドレスの算出動作について、図28を参照しながら説明する。
GBDTの学習処理は、上述したようにノード単位で行われる。ノードの学習が終わると、次のノードの学習で使う学習データを判断するため、クラシフィケーションモジュール50での学習データの分岐により、ポインタメモリの更新が行われ、上述した中間アドレスが算出される。そして、次のノードの学習で、ポインタメモリ31で格納された学習データのアドレスのうちどこからどこまでを学習に使用するかを認識するために、現在のノード(第1ノード)の開始アドレス、終了アドレス(第1アドレス)、および中間アドレス(第2アドレス)から算出して、記憶しておく必要があり、その役割を担うモジュールがアドレス管理部12である。
ここでのGBDTは2分木を対象としているため、アドレス管理部12は、1つのノードの学習後に左右2つに分岐するノードにそれぞれ分岐された学習データに対応するポインタメモリ31上のアドレスを算出する。すなわち、アドレス管理部12は、現在のノードの開始アドレス、終了アドレス、および中間アドレスから、次の2つのノード(第2ノード)に対応する2つの開始アドレス(第3アドレス)および2つの終了アドレス(第3アドレス)を算出する。このアドレス管理部12によるアドレスの算出動作を、図28に示す。図28に示すstart_address、end_address、およびmid_addressは、それぞれ現在のノードの開始アドレス、終了アドレス、および中間アドレスを示す。これらの3つのアドレスから、下記の式(23)により、次の2つのノードの開始アドレスであるstart_address_1、start_address_2、および2つの終了アドレスであるend_address_1、end_address_2を算出する。
アドレス管理部12によるアドレスの算出処理自体は、上記のように簡易であり、PicoBlazeおよびMicroBlazeのようなソフトプロセッサで算出することも可能である。しかし、データパラレルで学習する場合、分割ごとにアドレスの算出が必要になる。例えば、学習データを100分割した場合、ノードごとに100回のアドレスの算出処理が必要になる。ソフトプロセッサでアドレス算出する場合、数クロックから数十クロックが必要であり、データパラレルで学習する場合、このアドレス算出に必要なクロック数がボトルネックとなる。また、ハードロジックでもアドレス管理部が1つの場合は、学習データを100分割した場合、100回分のアドレス算出を直接に行う必要がある。そこで、本実施形態では、アドレスの算出機能をハードロジックで実装し、後述するように、分割ごとにハードロジックで構成されたアドレス管理部12を備えることにより、アドレス算出処理の高速化を図る。アドレス管理部12の具体的なハードロジックの構成は、図29~図32で後述する。
<アドレス管理部の構成>
図29は、第3の実施形態のアドレス管理部のモジュール構成の一例を示す図である。図30は、第3の実施形態のアドレス算出部121のモジュール構成の一例を示す図である。図31は、ノードアドレスについて説明する図である。図32は、第3の実施形態のアドレス記憶部の構成の一例を示す図である。図29~図32を参照しながら、アドレス管理部12の構成について説明する。
アドレス管理部12は、アドレス算出部121と、アドレス格納先制御部122と、アドレス記憶部123と、出力選択器124と、を備えている。
アドレス算出部121は、制御部11から受信した現在のノード(ノードnとする)のノードアドレス(ノードアドレスnとする)、クラシフィケーションモジュール50から受信した現在のノードの学習後に定まる中間アドレス、ならびに、ノードnの開始アドレスおよび終了アドレスから、上述の式(23)を用いて、次の2つのノードに対応する2つの開始アドレスおよび2つの終了アドレスを算出する。具体的には、アドレス算出部121は、ノード2nの開始アドレスおよび終了アドレス、ならびに、ノード2(n+1)の開始アドレスおよび終了アドレスを算出する。そして、アドレス算出部121は、算出した各アドレス、および、そのアドレスの格納先を示す格納アドレス(ノードアドレス2n、2(n+1))を、アドレス格納先制御部122へ送る。
アドレス算出部121は、具体的には、図30に示すように、乗算器131と、加算器132と、加算器133と、を備えている。
乗算器131は、入力したノードアドレスnに2を乗じたノードアドレス2nを出力する演算回路である。加算器132は、乗算器131により算出されたノードアドレス2nに1を加算してノードアドレス2n+1を出力する演算回路である。加算器133は、入力した中間アドレスに1を加算したアドレスを、ノード2(n+1)の開始アドレスとして出力する演算回路である。
また、アドレス算出部121は、入力したノードnの開始アドレスを、ノード2nの開始アドレスとして出力する。また、アドレス算出部121は、入力した中間アドレスを、ノード2nの終了アドレスとして出力する。また、アドレス算出部121は、入力したノードnの終了アドレスを、ノード2(n+1)の終了アドレスとして出力する。以上のアドレス算出部121の構成および動作によって、上述の式(23)に基づく演算が実現される。
アドレス格納先制御部122は、アドレス算出部121により算出された各アドレスを、制御部11から受信した選択信号で指定されるバンク(バンクAまたはバンクB)に対応するアドレス記憶部123の各記憶部(バンクA用開始アドレス記憶部123A_STおよびバンクA用終了アドレス記憶部123A_ED、または、バンクB用開始アドレス記憶部123B_STおよびバンクB用終了アドレス記憶部123B_ED)における格納アドレスで示される記憶領域に格納するモジュールである。例えば、選択信号がバンクAを示し、格納アドレスがノードアドレス0、1を示す場合、アドレス格納先制御部122は、次のノードであるノード0の開始アドレスおよび終了アドレスを、バンクA用開始アドレス記憶部123A_STおよびバンクA用終了アドレス記憶部123A_EDにおけるノードアドレス0で示されるそれぞれの記憶領域に格納する。また、アドレス格納先制御部122は、次のノードであるノード1の開始アドレスおよび終了アドレスを、バンクA用開始アドレス記憶部123A_STおよびバンクA用終了アドレス記憶部123A_EDにおけるノードアドレス1で示されるそれぞれの記憶領域に格納する。
アドレス記憶部123は、アドレス算出部121により算出された次の2つのノードに対応する2つの開始アドレスおよび2つの終了アドレスを格納するメモリである。アドレス記憶部123は、バンクA用開始アドレス記憶部123A_STと、バンクB用開始アドレス記憶部123B_STと、バンクA用終了アドレス記憶部123A_EDと、バンクB用終了アドレス記憶部123B_EDと、を備えている。
バンクA用開始アドレス記憶部123A_STは、バンクAを参照するアドレスとして、次のノードに対応する開始アドレスを記憶する。バンクB用開始アドレス記憶部123B_STは、バンクBを参照するアドレスとして、次のノードに対応する開始アドレスを記憶する。バンクA用終了アドレス記憶部123A_EDは、バンクAを参照するアドレスとして、次のノードに対応する終了アドレスを記憶する。バンクB用終了アドレス記憶部123B_EDは、バンクBを参照するアドレスとして、次のノードに対応する終了アドレスを記憶する。
例えば、バンクA用開始アドレス記憶部123A_STの構成を、図32に示す。バンクA用開始アドレス記憶部123A_STは、ノードアドレスと呼称するアドレスにより特定される各記憶領域により構成されている。図32に示す例では、バンクA用開始アドレス記憶部123A_STを構成する各記憶領域は、ノードアドレス0、1、・・・、Nによってそれぞれ特定される。なお、バンクB用開始アドレス記憶部123B_ST、バンクA用終了アドレス記憶部123A_ED、およびバンクB用終了アドレス記憶部123B_EDについても、図32に示す構成と同様である。
ここで、ノードアドレスについて、図31を用いて説明する。図31に示す決定木において、第1の実施形態で上述したように、一番上の階層を「デプス0」、そこから下の階層を順に「デプス1」、「デプス2」、・・・と称するものとし、特定の階層の一番左のノードを「ノード0」、そこから右のノードを順に「ノード1」、「ノード2」、・・・と称する。ここで、決定木における特定の階層のノードを指し示すためのアドレスがノードアドレスとなる。例えば、ノードアドレス1というのは、特定の階層における左から2番目のノード、すなわちノード1を示すアドレスということになる。また、現在のノードのノードアドレスがnだとすると、次のノードのノードアドレスは、2nおよび2n+1となり、これは、上述したようにアドレス算出部121によって算出される。
出力選択器124は、アドレス記憶部123に含まれる4つの記憶部から、制御部11から受信した選択信号およびノードアドレスで特定される記憶部の記憶領域から、次のノードに対応する開始アドレスおよび終了アドレスを読み出して、ラーニングモジュール20へ出力するモジュールである。例えば、出力選択器124は、制御部11から受信した選択信号がバンクBを示し、制御部11からノードアドレス2を受信した場合、バンクB用開始アドレス記憶部123B_STのノードアドレス2で特定される記憶領域から開始アドレスを読み出し、バンクB用終了アドレス記憶部123B_EDのノードアドレス2で特定される記憶領域から終了アドレスを読み出して、出力する。
(アドレス管理部によるアドレス管理)
以下、図33~図37を参照しながら、アドレス管理部12のアドレス管理について具体的に説明する。
<デプス0・ノード0の学習前>
図33は、第3の実施形態に係る学習識別装置のデプス0、ノード0の学習前におけるアドレス記憶部の状態を示す図である。
図33に示すように、デプス0、ノード0の学習前、すなわち初期状態では、例えば、
バンクA用開始アドレス記憶部123A_STのノードアドレス0に、デプス0、ノード0(決定木の頂点のノード)に対応するバンクAでの開始アドレス(0)が格納されている。そして、バンクA用終了アドレス記憶部123A_EDのノードアドレス0に、デプス0、ノード0に対応するバンクAでの終了アドレス(max_address)が格納されている。ここで、max_addressは、実質的に学習データの総数を表す値となる。また、図33の初期状態では、バンクB用開始アドレス記憶部123B_STおよびバンクB用終了アドレス記憶部123B_EDには、それぞれ開始アドレスおよび終了アドレスは共に書き込まれていない。
図33~図37において、「X」が記載された記憶領域は、不定値が書き込まれているものとする。なお、別途、初期状態にするための初期化ステップとして、なんらかの初期値を格納しておくものとしてもよい。また、図33~図37において、斜線ハッチングが施された記憶領域は、書き込まれた記憶領域であることを示し、点ハッチングが施された記憶領域は、読み出される記憶領域であることを示す。
<デプス0・ノード0の学習後>
図34は、第3の実施形態に係る学習識別装置のデプス0、ノード0の学習後におけるアドレス記憶部の状態を示す図である。
デプス0、ノード0の学習時には、バンクAが読み出しバンクであり、バンクBが書き込みバンクとなる。出力選択器124は、制御部11から受信したバンクAを示す選択信号、およびノードアドレス0で特定される記憶領域、すなわち、バンクA用開始アドレス記憶部123A_STおよびバンクA用終了アドレス記憶部123A_EDそれぞれのノードアドレス0から開始アドレス(0)および終了アドレス(max_address)を読み出して、ラーニングモジュール20へ出力する。
ラーニングモジュール20は、開始アドレスおよび終了アドレスに基づいて、バンクAから対象とする学習データのアドレスを読み出し、当該アドレスによって、フィーチャメモリ32から学習データ(特徴量)を読み出して学習を行う。ラーニングモジュール20は、学習によって導出した特徴量番号およびしきい値を、デプス0、ノード0の分岐条件データとして、モデルメモリ40へ書き込む。
クラシフィケーションモジュール50は、同じ開始アドレスおよび終了アドレスをアドレス管理部12から受信し、当該開始アドレスおよび終了アドレスに基づいて、バンクAから対象とする学習データのアドレスを読み出し、当該アドレスによって、フィーチャメモリ32から学習データ(特徴量)を読み出す。また、クラシフィケーションモジュール50は、モデルメモリ40からデプス0、ノード0の分岐条件データ(特徴量番号、しきい値)を読み出す。そして、クラシフィケーションモジュール50は、分岐条件データに従って、読み出したサンプルデータを、デプス0、ノード0の左側に分岐させるか、右側に分岐させるかを判定し、その判定結果により、当該学習データのフィーチャメモリ32におけるアドレスを、ポインタメモリ31の書き込みバンクであるバンクBに書き込む。この際、クラシフィケーションモジュール50は、当該ノードの左側に分岐すると判定した場合、当該学習データのアドレスを、バンクBのアドレスの低い方(開始アドレス(0))から順に書き込み、当該ノードの右側に分岐すると判定した場合、当該学習データのアドレスを、バンクBのアドレスの高い方(終了アドレス(max_address))から順に書き込む。そして、クラシフィケーションモジュール50は、左側に分岐した学習データのアドレスと、右側に分岐した学習データのアドレスとの境界に対応するバンクBにおけるアドレス(中間アドレス)を、アドレス管理部12に返す。当該中間アドレスは、次の分岐処理の際に使用される。
そして、アドレス算出部121は、制御部11から受信した現在のノード(デプス0、ノード0)のノードアドレス0、クラシフィケーションモジュール50から受信した中間アドレス、ならびに、現在のノードの開始アドレスおよび終了アドレスから、上述の式(23)を用いて、次の2つのノードに対応する2つの開始アドレスおよび2つの終了アドレスを算出する。具体的には、アドレス算出部121は、デプス1、ノード0の開始アドレスおよび終了アドレス、ならびに、デプス1、ノード1の開始アドレスおよび終了アドレスを算出する。そして、アドレス算出部121は、算出した各アドレス、および、そのアドレスの格納先を示す格納アドレス(ノードアドレス0、1)を、アドレス格納先制御部122へ送る。
アドレス格納先制御部122は、アドレス算出部121により算出された各アドレスを、制御部11から受信した選択信号で指定されるバンクBに対応するバンクB用開始アドレス記憶部123B_STおよびバンクB用終了アドレス記憶部123B_EDにおける格納アドレス(ノードアドレス0、1)で示される記憶領域に格納する。具体的には、アドレス格納先制御部122は、バンクB用開始アドレス記憶部123B_STのノードアドレス0に、デプス1、ノード0に対応するバンクBでの開始アドレス(0)を格納し、バンクB用終了アドレス記憶部123B_EDのノードアドレス0に、デプス1、ノード0に対応するバンクBでの終了アドレス(mid_address_0_0)を格納する。ここで、「mid_address_a_b」は、デプスa、ノードbにおける中間アドレスを示す。さらに、アドレス格納先制御部122は、バンクB用開始アドレス記憶部123B_STのノードアドレス1に、デプス1、ノード1に対応するバンクBでの開始アドレス(mid_address_0_0+1)を格納し、バンクB用終了アドレス記憶部123B_EDのノードアドレス1に、デプス1、ノード1に対応するバンクBでの終了アドレス(max_address)を格納する。
<デプス1・ノード0の学習後>
図35は、第3の実施形態に係る学習識別装置のデプス1、ノード0の学習後におけるアドレス記憶部の状態を示す図である。
デプス1、ノード0の学習時には、バンクBが読み出しバンクであり、バンクAが書き込みバンクとなる。出力選択器124は、制御部11から受信したバンクBを示す選択信号、およびノードアドレス0で特定される記憶領域、すなわち、バンクB用開始アドレス記憶部123B_STおよびバンクB用終了アドレス記憶部123B_EDそれぞれのノードアドレス0から開始アドレス(0)および終了アドレス(mid_address_0_0)を読み出して、ラーニングモジュール20へ出力する。
ラーニングモジュール20は、開始アドレスおよび終了アドレスに基づいて、バンクBから対象とする学習データのアドレスを読み出し、当該アドレスによって、フィーチャメモリ32から学習データ(特徴量)を読み出して学習を行う。ラーニングモジュール20は、学習によって導出した特徴量番号およびしきい値を、デプス1、ノード0の分岐条件データとして、モデルメモリ40へ書き込む。
クラシフィケーションモジュール50は、同じ開始アドレスおよび終了アドレスをアドレス管理部12から受信し、当該開始アドレスおよび終了アドレスに基づいて、バンクBから対象とする学習データのアドレスを読み出し、当該アドレスによって、フィーチャメモリ32から学習データ(特徴量)を読み出す。また、クラシフィケーションモジュール50は、モデルメモリ40からデプス1、ノード0の分岐条件データ(特徴量番号、しきい値)を読み出す。そして、クラシフィケーションモジュール50は、分岐条件データに従って、読み出したサンプルデータを、デプス1、ノード0の左側に分岐させるか、右側に分岐させるかを判定し、その判定結果により、当該学習データのフィーチャメモリ32におけるアドレスを、ポインタメモリ31の書き込みバンクであるバンクAに書き込む。この際、クラシフィケーションモジュール50は、当該ノードの左側に分岐すると判定した場合、当該学習データのアドレスを、バンクAのアドレスの低い方(開始アドレス(0))から順に書き込み、当該ノードの右側に分岐すると判定した場合、当該学習データのアドレスを、バンクAのアドレスの高い方(終了アドレス(mid_address_0_0))から順に書き込む。そして、クラシフィケーションモジュール50は、左側に分岐した学習データのアドレスと、右側に分岐した学習データのアドレスとの境界に対応するバンクAにおけるアドレス(中間アドレス)を、アドレス管理部12に返す。当該中間アドレスは、次の分岐処理の際に使用される。
そして、アドレス算出部121は、制御部11から受信した現在のノード(デプス1、ノード0)のノードアドレス0、クラシフィケーションモジュール50から受信した中間アドレス、ならびに、現在のノードの開始アドレスおよび終了アドレスから、上述の式(23)を用いて、次の2つのノードに対応する2つの開始アドレスおよび2つの終了アドレスを算出する。具体的には、アドレス算出部121は、デプス2、ノード0の開始アドレスおよび終了アドレス、ならびに、デプス2、ノード1の開始アドレスおよび終了アドレスを算出する。そして、アドレス算出部121は、算出した各アドレス、および、そのアドレスの格納先を示す格納アドレス(ノードアドレス0、1)を、アドレス格納先制御部122へ送る。
アドレス格納先制御部122は、アドレス算出部121により算出された各アドレスを、制御部11から受信した選択信号で指定されるバンクAに対応するバンクA用開始アドレス記憶部123A_STおよびバンクA用終了アドレス記憶部123A_EDにおける格納アドレス(ノードアドレス0、1)で示される記憶領域に格納する。具体的には、アドレス格納先制御部122は、バンクA用開始アドレス記憶部123A_STのノードアドレス0に、デプス2、ノード0に対応するバンクAでの開始アドレス(0)を格納し、バンクA用終了アドレス記憶部123A_EDのノードアドレス0に、デプス2、ノード0に対応するバンクAでの終了アドレス(mid_address_1_0)を格納する。さらに、アドレス格納先制御部122は、バンクA用開始アドレス記憶部123A_STのノードアドレス1に、デプス2、ノード1に対応するバンクAでの開始アドレス(mid_address_1_0+1)を格納し、バンクA用終了アドレス記憶部123A_EDのノードアドレス1に、デプス2、ノード1に対応するバンクAでの終了アドレス(mid_address_0_0)を格納する。
<デプス1・ノード1の学習後>
図36は、第3の実施形態に係る学習識別装置のデプス1、ノード1の学習後におけるアドレス記憶部の状態を示す図である。
デプス1、ノード1の学習時には、バンクBが読み出しバンクであり、バンクAが書き込みバンクとなる。出力選択器124は、制御部11から受信したバンクBを示す選択信号、およびノードアドレス1で特定される記憶領域、すなわち、バンクB用開始アドレス記憶部123B_STおよびバンクB用終了アドレス記憶部123B_EDそれぞれのノードアドレス1から開始アドレス(mid_address_0_0+1)および終了アドレス(max_address)を読み出して、ラーニングモジュール20へ出力する。
ラーニングモジュール20は、開始アドレスおよび終了アドレスに基づいて、バンクBから対象とする学習データのアドレスを読み出し、当該アドレスによって、フィーチャメモリ32から学習データ(特徴量)を読み出して学習を行う。ラーニングモジュール20は、学習によって導出した特徴量番号およびしきい値を、デプス1、ノード1の分岐条件データとして、モデルメモリ40へ書き込む。
クラシフィケーションモジュール50は、同じ開始アドレスおよび終了アドレスをアドレス管理部12から受信し、当該開始アドレスおよび終了アドレスに基づいて、バンクBから対象とする学習データのアドレスを読み出し、当該アドレスによって、フィーチャメモリ32から学習データ(特徴量)を読み出す。また、クラシフィケーションモジュール50は、モデルメモリ40からデプス1、ノード1の分岐条件データ(特徴量番号、しきい値)を読み出す。そして、クラシフィケーションモジュール50は、分岐条件データに従って、読み出したサンプルデータを、デプス1、ノード1の左側に分岐させるか、右側に分岐させるかを判定し、その判定結果により、当該学習データのフィーチャメモリ32におけるアドレスを、ポインタメモリ31の書き込みバンクであるバンクAに書き込む。この際、クラシフィケーションモジュール50は、当該ノードの左側に分岐すると判定した場合、当該学習データのアドレスを、バンクAのアドレスの低い方(開始アドレス(mid_address0_0+1))から順に書き込み、当該ノードの右側に分岐すると判定した場合、当該学習データのアドレスを、バンクAのアドレスの高い方(終了アドレス(max_address))から順に書き込む。そして、クラシフィケーションモジュール50は、左側に分岐した学習データのアドレスと、右側に分岐した学習データのアドレスとの境界に対応するバンクAにおけるアドレス(中間アドレス)を、アドレス管理部12に返す。当該中間アドレスは、次の分岐処理の際に使用される。
そして、アドレス算出部121は、制御部11から受信した現在のノード(デプス1、ノード1)のノードアドレス1、クラシフィケーションモジュール50から受信した中間アドレス、ならびに、現在のノードの開始アドレスおよび終了アドレスから、上述の式(23)を用いて、次の2つのノードに対応する2つの開始アドレスおよび2つの終了アドレスを算出する。具体的には、アドレス算出部121は、デプス2、ノード2の開始アドレスおよび終了アドレス、ならびに、デプス2、ノード3の開始アドレスおよび終了アドレスを算出する。そして、アドレス算出部121は、算出した各アドレス、および、そのアドレスの格納先を示す格納アドレス(ノードアドレス2、3)を、アドレス格納先制御部122へ送る。
アドレス格納先制御部122は、アドレス算出部121により算出された各アドレスを、制御部11から受信した選択信号で指定されるバンクAに対応するバンクA用開始アドレス記憶部123A_STおよびバンクA用終了アドレス記憶部123A_EDにおける格納アドレス(ノードアドレス2、3)で示される記憶領域に格納する。具体的には、アドレス格納先制御部122は、バンクA用開始アドレス記憶部123A_STのノードアドレス2に、デプス2、ノード2に対応するバンクAでの開始アドレス(mid_address_0_0+1)を格納し、バンクA用終了アドレス記憶部123A_EDのノードアドレス2に、デプス2、ノード2に対応するバンクAでの終了アドレス(mid_address_1_1)を格納する。さらに、アドレス格納先制御部122は、バンクA用開始アドレス記憶部123A_STのノードアドレス3に、デプス2、ノード3に対応するバンクAでの開始アドレス(mid_address_1_1+1)を格納し、バンクA用終了アドレス記憶部123A_EDのノードアドレス3に、デプス2、ノード3に対応するバンクAでの終了アドレス(max_address)を格納する。
<デプス2・ノード0の学習後>
図37は、第3の実施形態に係る学習識別装置のデプス2、ノード0の学習後におけるアドレス記憶部の状態を示す図である。
デプス2、ノード0の学習時には、バンクAが読み出しバンクであり、バンクBが書き込みバンクとなる。出力選択器124は、制御部11から受信したバンクAを示す選択信号、およびノードアドレス0で特定される記憶領域、すなわち、バンクA用開始アドレス記憶部123A_STおよびバンクA用終了アドレス記憶部123A_EDそれぞれのノードアドレス0から開始アドレス(0)および終了アドレス(mid_adress_1_0)を読み出して、ラーニングモジュール20へ出力する。
ラーニングモジュール20は、開始アドレスおよび終了アドレスに基づいて、バンクAから対象とする学習データのアドレスを読み出し、当該アドレスによって、フィーチャメモリ32から学習データ(特徴量)を読み出して学習を行う。ラーニングモジュール20は、学習によって導出した特徴量番号およびしきい値を、デプス2、ノード0の分岐条件データとして、モデルメモリ40へ書き込む。
クラシフィケーションモジュール50は、同じ開始アドレスおよび終了アドレスをアドレス管理部12から受信し、当該開始アドレスおよび終了アドレスに基づいて、バンクAから対象とする学習データのアドレスを読み出し、当該アドレスによって、フィーチャメモリ32から学習データ(特徴量)を読み出す。また、クラシフィケーションモジュール50は、モデルメモリ40からデプス2、ノード0の分岐条件データ(特徴量番号、しきい値)を読み出す。そして、クラシフィケーションモジュール50は、分岐条件データに従って、読み出したサンプルデータを、デプス2、ノード0の左側に分岐させるか、右側に分岐させるかを判定し、その判定結果により、当該学習データのフィーチャメモリ32におけるアドレスを、ポインタメモリ31の書き込みバンクであるバンクBに書き込む。この際、クラシフィケーションモジュール50は、当該ノードの左側に分岐すると判定した場合、当該学習データのアドレスを、バンクBのアドレスの低い方(開始アドレス(0))から順に書き込み、当該ノードの右側に分岐すると判定した場合、当該学習データのアドレスを、バンクBのアドレスの高い方(終了アドレス(mid_address_1_0))から順に書き込む。そして、クラシフィケーションモジュール50は、左側に分岐した学習データのアドレスと、右側に分岐した学習データのアドレスとの境界に対応するバンクBにおけるアドレス(中間アドレス)を、アドレス管理部12に返す。当該中間アドレスは、次の分岐処理の際に使用される。
そして、アドレス算出部121は、制御部11から受信した現在のノード(デプス2、ノード0)のノードアドレス0、クラシフィケーションモジュール50から受信した中間アドレス、ならびに、現在のノードの開始アドレスおよび終了アドレスから、上述の式(23)を用いて、次の2つのノードに対応する2つの開始アドレスおよび2つの終了アドレスを算出する。具体的には、アドレス算出部121は、デプス3、ノード0の開始アドレスおよび終了アドレス、ならびに、デプス3、ノード1の開始アドレスおよび終了アドレスを算出する。そして、アドレス算出部121は、算出した各アドレス、および、そのアドレスの格納先を示す格納アドレス(ノードアドレス0、1)を、アドレス格納先制御部122へ送る。
アドレス格納先制御部122は、アドレス算出部121により算出された各アドレスを、制御部11から受信した選択信号で指定されるバンクBに対応するバンクB用開始アドレス記憶部123B_STおよびバンクB用終了アドレス記憶部123B_EDにおける格納アドレス(ノードアドレス0、1)で示される記憶領域に格納する。具体的には、アドレス格納先制御部122は、バンクB用開始アドレス記憶部123B_STのノードアドレス0に、デプス3、ノード0に対応するバンクBでの開始アドレス(0)を格納し、バンクB用終了アドレス記憶部123A_EDのノードアドレス0に、デプス3、ノード0に対応するバンクBでの終了アドレス(mid_address_2_0)を格納する。さらに、アドレス格納先制御部122は、バンクB用開始アドレス記憶部123B_STのノードアドレス1に、デプス3、ノード1に対応するバンクBでの開始アドレス(mid_address_2_0+1)を格納し、バンクB用終了アドレス記憶部123B_EDのノードアドレス1に、デプス3、ノード1に対応するバンクBでの終了アドレス(mid_address_1_0)を格納する。
以上の図34~図37の流れに従って処理を繰り返す。
(データパラレルでの学習識別装置の構成)
図38は、第3の実施形態に係る学習識別装置のデータパラレルを実現するモジュール構成の一例を示す図である。図38を参照しながら、データパラレルを実現する本実施形態に係る学習識別装置1c(学習装置の一例)のモジュール構成について説明する。なお、図38に示す構成は、データパラレルの分割数を2であるものとして説明するが、分割数はこれに限定されるものではない。
サンプルデータ(学習データまたは識別データ)に対するデータパラレルを実現するためには、図38に示すように、サンプルデータを分割して保持するために2つのデータメモリ30a、30b(データ記憶部)に分割する。図38のデータメモリ30bでは図示していないが、データメモリ30aと同様に、データメモリ30bも、ポインタメモリ31と、フィーチャメモリ32と、ステートメモリ33とを含む。ただし、単にサンプルデータを保持するメモリを分割しても、分割されたサンプルデータを並列に処理(学習処理、識別処理等)を行う機構が必要である。図38に示す例では、識別処理を行うモジュールを、分割されたデータメモリと同数だけ配置された構成を示す。すなわち、学習識別装置1cは、2つのデータメモリ30a、30bのそれぞれに格納されたサンプルデータについて並列で識別処理を行うために、クラシフィケーションモジュール50a、50b(識別部)を有する。
また、データパラレルを実現する場合、上述したように、分割ごとにハードロジックで構成されたアドレス管理部12を備えている。具体的には、図38に示すように、データパラレルを実現する学習識別装置1cは、分割ごとに対応するアドレス管理部12であるアドレス管理部12a、12b(管理部)を備えたコントロールモジュール15aを備えている。コントロールモジュール15aは、制御部11を備えたCPU10と、アドレス管理部12a、12bと、を備えている。
アドレス管理部12aは、データメモリ30aおよびクラシフィケーションモジュール50aに対応しており、データメモリ30aのポインタメモリ31でのバンクA、Bに対するアドレスの管理を行う。アドレス管理部12bは、データメモリ30bおよびクラシフィケーションモジュール50bに対応しており、データメモリ30bのポインタメモリ31でのバンクA、Bに対するアドレスの管理を行う。なお、分割数が3以上でも、同様に分割ごとにアドレス管理部12が備えられるものとすればよい。
(データパラレルでのアドレス管理部の機能を簡潔に説明する構成)
図39は、第3の実施形態に係る学習識別装置においてデータパラレルを実現する場合のアドレス管理部の機能を説明するための構成を示す図である。図39を参照しながら、データパラレルでのアドレス管理部12の機能を簡潔に示す構成について説明する。図39においては、より一般化して説明するために、分割数をNであるものとして説明する。
図39に示すように、分割数Nを実現する学習識別装置のコントロールモジュール15bは、制御部11と、アドレス管理部12_1、12_2、・・・、12_Nと、を備えている。また、学習部100_1は、1番目の分割に対応するデータメモリ30、クラシフィケーションモジュール50、および、ラーニングモジュール20のデータメモリ30を対象とする学習機能を有するモジュールとして総括的に示すものである。アドレス管理部12_1は、学習部100_1に対して、バンクへのアドレスの読み書きのための開始アドレスおよび終了アドレスを算出して送る。そして、アドレス管理部12_1は、学習部100_1のクラシフィケーションモジュール50により算出された中間アドレスを受け取って、次のノードの開始アドレスおよび終了アドレスを算出する。
同様に、アドレス管理部12_2、・・・、12_Nは、それぞれ学習部100_2、・・・、100_Nに対して、上述のアドレス管理部12_1の学習部100_1に対して提供する機能と同様の機能をそれぞれ提供する。
以上のように、本実施形態では、GBDTによるノードの学習データについてデータパラレルにより学習、すなわち、学習データを分割して並列に学習を行う場合に、分割数分だけアドレス管理部12を備えるものとし、各データメモリ30に格納された学習データに対する学習および識別に使用するアドレス管理を、対応するアドレス管理部12が行うものとしている。これによって、アドレス算出に必要はクロック数が、分割数が1の場合と同じとなり、大幅に学習データのアドレスの計算の高速化が実現される。例えば、分割数が100の場合、アドレスの計算をシーケンシャルに行う場合に比べて、アドレスの計算に必要な時間は1/100となる。
[第4の実施形態]
第4の実施形態に係る学習識別装置について、第2の実施形態に係る学習識別装置と相違する点を中心に説明する。本実施形態では、データパラレルの分割ごとにモデルメモリを分割し、かつ、認識性能を表す指標値を算出する処理も分割ごとに行う構成について説明する。
(学習識別装置の全体構成)
図40は、第4の実施形態に係る学習識別装置のデータパラレルを適用したモジュール構成の一例を示す図である。図40を参照しながら、本実施形態に係る学習識別装置1d(学習装置の一例)のモジュール構成について説明する。なお、図40に示す構成は、データパラレルの分割数を2であるものとして説明するが、分割数はこれに限定されるものではない。
サンプルデータ(学習データまたは識別データ)に対するデータパラレルを実現するためには、まず、上述の図16に示した学習識別装置1aと同様に、図40に示すように、サンプルデータを分割して保持するために2つのデータメモリ30a、30b(データ記憶部)に分割する。図40のデータメモリ30bでは図示していないが、データメモリ30aと同様に、データメモリ30bも、ポインタメモリ31と、フィーチャメモリ32と、ステートメモリ33とを含む。ただし、単にサンプルデータを保持するメモリを分割しても、分割されたサンプルデータを並列に処理(学習処理、識別処理等)を行う機構が必要である。図40に示す例では、識別処理を行うモジュールを、分割されたデータメモリと同数だけ配置された構成を示す。すなわち、学習識別装置1dは、2つのデータメモリ30a、30bのそれぞれに格納されたサンプルデータについて並列で識別処理を行うために、クラシフィケーションモジュール50a、50b(識別部)を有する。
さらに、学習識別装置1dは、クラシフィケーションモジュール50a、50bがそれぞれ独立してノードデータの読み出しができるように、データパラレルの分割数と同じ2つのモデルメモリ40a、40b(モデル記憶部)を有する。この場合、クラシフィケーションモジュール50a、50bが識別処理、および後述するサンプルウェイトの更新処理に使用する決定木(モデル)のノードデータはそれぞれ同一である必要がある。したがって、ラーニングモジュール20は、学習処理で求めた同じノードデータを、モデルメモリ40a、40bそれぞれに書き込むものとする。なお、図40に示すように、学習識別装置1dが有するラーニングモジュール20は、上述した図21に示すラーニングモジュール20a、または図25に示すラーニングモジュール20bであってもよい。
また、本実施形態に係る学習識別装置1dのクラシフィケーションモジュール50a、50bは、ラーニングモジュール20により学習された決定木(モデル)の認識性能を示す指標値であるAUC(Area Under the Curve)を算出して、制御部11へ送信する。すなわち、クラシフィケーションモジュール50aは、データメモリ30aに記憶されている分割に係る学習データに対応するサンプルウェイト(後述)等からAUCを算出して、制御部11へ送信する。クラシフィケーションモジュール50bは、データメモリ30bに記憶されている分割に係る学習データに対応するサンプルウェイト(後述)等からAUCを算出して、制御部11へ送信する。AUCを算出するためのクラシフィケーションモジュール50a、50bの具体的な構成については、後述する。
(学習識別装置におけるAUC算出部の構成)
図41は、データパラレルにおいてAUC算出部を1つとした場合の構成を示す図である。図42は、データパラレルにおいて分割ごとにAUC算出部を有する構成を示す図である。図41および図42を参照しながら、データパラレルにおけるAUC算出部についての構成について説明する。
クラシフィケーションモジュール50a、50bは、ラーニングモジュール20による決定木の学習が終わるたびに、学習データごとの勾配情報およびサンプルウェイトの更新を行う。ここで、サンプルウェイトとは、これまで学習した各決定木において該当する学習データが分岐した結果、分岐先のリーフのリーフウェイトの総和である。また、クラシフィケーションモジュール50a、50bは、更新したサンプルウェイトを用いて、現在までに学習した決定木における認識性能の指標値であるAUCを算出する。クラシフィケーションモジュール50a、50bにより算出されたAUCは、例えば、アーリーストッピングを行うために用いられる。ここで、アーリーストッピングとは、評価用データ(識別データ)の認識性能の向上が止まった段階で学習処理を中断する手法であり、機械学習の分野で一般的に用いられる手法である。このように、アーリーストッピングにより学習処理を中断することによって、不要な学習処理の継続を抑制すると共に、過学習が進む前に学習処理を中断させることができる。なお、クラシフィケーションモジュール50a、50bが算出する決定木に対する認識性能の指標値としては、AUCに限定されるものではなく、その他の認識性能の指標値を算出するものとしてもよい。以下、本実施形態では、決定木の認識性能の指標値としてAUCが算出されるものとして説明する。
データパラレルの構成では、上述のように、学習データを分割することによって学習処理が高速化する。学習された決定木の認識性能の指標値であるAUCの算出処理では、原則として、すべての学習データのサンプルウェイトとラベルとを比較する必要があり、かつ、学習データの数に比例して処理時間が長くなるため、データパラレル時の処理の高速化のボトルネックとなり得る。ラベルとは、各学習データに定義された正解データを示す。
ここで、図41に、データパラレルにおいて、すべての学習データのサンプルウェイトを用いてAUCを算出する1つのAUC算出部81を備えた構成を示す。図41に示す学習部100_1は、1番目の分割に対応するデータメモリ30a、クラシフィケーションモジュール50a、および、ラーニングモジュール20のデータメモリ30aを対象とする学習機能を有するモジュールとして総括的に示したものである。また、学習部100_2は、2番目の分割に対応するデータメモリ30b、クラシフィケーションモジュール50b、および、ラーニングモジュール20のデータメモリ30bを対象とする学習機能を有するモジュールとして総括的に示したものである。AUC算出部81は、学習部100_1、100_2から各分割に係る学習データ、すなわちすべての学習データのサンプルウェイトを受け取り、AUCを算出する。図41に示す構成の場合、データパラレルにより学習データを分割して並列に学習を行うことにより学習の処理時間を短縮させるものの、AUCについてはすべての学習データのサンプルウェイトを用いて算出されるので、学習データの数に比例して当該算出の処理時間も長くなる。
そこで、本実施形態に係る学習識別装置1dでは、分割ごとにAUC算出部を備えるものとする。図42に示す例は、分割数が2である場合の構成であり、学習部100_1、100_2それぞれに対応するAUC算出部81a、81b(性能算出部)が設けられている。これによって、AUC算出部81a、81bは、分割されたそれぞれの学習データのサンプルウェイトを用いて並列にAUCを算出するので、全体でAUCを算出する必要がなく、AUCの算出処理を高速化することができる。次に、図43を参照しながら、学習識別装置1dにおいて、AUC算出部81a、81bを備えた具体的な構成について説明する。
図43は、第4の実施形態に係る学習識別装置における要部の構成を示す図である。図43に示すように、クラシフィケーションモジュール50aは、上述したAUC算出部81aと、サンプルウェイト更新部82aと、勾配情報更新部83aと、を有する。クラシフィケーションモジュール50bは、上述したAUC算出部81bと、サンプルウェイト更新部82bと、勾配情報更新部83bと、を有する。また、制御部11は、判定部13を有する。
サンプルウェイト更新部82aは、ラーニングモジュール20による決定木1つの学習が終了するたびに、データメモリ30aに格納された分割に係る学習データごとのサンプルウェイトを更新するモジュールである。具体的には、サンプルウェイト更新部82aは、以下の式(24)を用いて、分割に係る学習データごとのサンプルウェイトを更新する。
この式(24)は、上述の式(8)の第4式と同一の式である。この式(24)が示すように、i番目の学習データのサンプルウェイトは、これまで学習された各決定木で分岐したリーフのリーフウェイトの総和である。式(24)の右辺の第1項がこれまでのサンプルウェイトであり、第2項が対象となる学習データの現在学習した決定木でのリーフウェイトである。学習された各決定木での分岐は、上述の図15で示したクラシフィケーションモジュール50の構成および動作と同様に行われる。すなわち、サンプルウェイト更新部82aは、データメモリ30aから特徴量を読み取り、決定木のノードごとにモデルメモリ40aから読み取ったノードデータと比較する。サンプルウェイト更新部82aは、比較した結果、学習データが当該ノードの下位のどちらのノードに分岐するかに従って、分岐したノードのノードデータをモデルメモリ40aから読み出す。このため、サンプルウェイト更新部82aは、学習データ1つあたり、決定木の深さ分の回数だけモデルメモリ40aからノードデータを読み取る必要がある。サンプルウェイト更新部82aは、算出したサンプルウェイトで、データメモリ30aに記憶されている元のサンプルウェイトを更新する。
勾配情報更新部83aは、サンプルウェイト更新部82aにより更新されたサンプルウェイトを用いて、上述の式(11)により、勾配情報(一次勾配g
i、二次勾配h
i)を算出して更新するモジュールである。式(11)におけるlは任意のロス関数であり、例えば、交差エントロピー誤差関数である場合、勾配情報は、以下の式(25)で算出可能である。
式(25)におけるpiは、式(24)の右辺の第1項をシグモイド関数を用いて0-1に正規化した値である。勾配情報更新部83aは、算出した勾配情報で、データメモリ30aに記憶されている元の勾配情報を更新する。
AUC算出部81aは、データメモリ30aから読み出した学習データのラベルと、サンプルウェイト更新部82aにより算出されたサンプルウェイトとを用いて、AUCを算出するモジュールである。AUC算出部81aは、算出したAUCを、制御部11の判定部13へ出力する。
サンプルウェイト更新部82bは、ラーニングモジュール20による決定木1つの学習が終了するたびに、データメモリ30bに格納された分割に係る学習データごとのサンプルウェイトを更新するモジュールである。サンプルウェイト更新部82bによる具体的なサンプルウェイトの算出方法は、上述したサンプルウェイト更新部82aの処理と同様である。
勾配情報更新部83bは、サンプルウェイト更新部82bにより更新されたサンプルウェイトを用いて、上述の式(11)により、勾配情報(一次勾配gi、二次勾配hi)を算出して更新するモジュールである。勾配情報更新部83bによる具体的な勾配情報の算出方法は、上述したサンプルウェイト更新部82bの処理と同様である。
AUC算出部81bは、データメモリ30bから読み出した学習データのラベルと、サンプルウェイト更新部82bにより算出されたサンプルウェイトとを用いて、AUCを算出するモジュールである。AUC算出部81bは、算出したAUCを、制御部11の判定部13へ出力する。
ここで、すべての学習データを用いて算出したAUCと、各分割に係る学習データを用いてAUC算出部81a、81bによりそれぞれ算出されたAUCとが等しいとは限らない。AUCを算出する学習データの集合が変われば一般にAUCは異なる値になる。ただし、上述したアーリーストッピングによる学習処理の中断のための指標値としてAUCを用いる場合、AUCが向上したかどうかが分かればよいので、全学習データを用いたい厳密なAUCを算出する必要はない。
判定部13は、AUC算出部81a、81bにより算出されたそれぞれのAUCに基づいて、ラーニングモジュール20による決定木の学習処理に対して、アーリーストッピングを行うか否かを判定するモジュールである。例えば、判定部13は、AUC算出部81a、81bにより算出されたそれぞれのAUCのいずれか、または、双方のAUCの平均値もしくは合計値等が、所定値より大きい値で安定したと判断した場合、アーリーストッピングを行うものと判定する。AUCが安定したか否かの判断基準としては、例えば、所定のラウンド数だけ所定値より大きい状態が続いた場合、判定部13は、アーリーストッピングを行うものと判定してもよい。アーリーストッピングの具体的に方法としては、例えば、制御部11による新たに決定木の学習を行う場合のポインタメモリ31に対する初期化の停止、および、ラーニングモジュール20およびクラシフィケーションモジュール50a、50bに対するトリガの出力の停止を行うものとすればよい。
なお、制御部11は判定部13を有するものとしたが、判定部13を有さないものとしてもよい。この場合、AUC算出部81a、81bにより算出されたAUCは、例えば、外部に出力される等の構成であってもよい。また、制御部11が判定部13を有する代わりに、クラシフィケーションモジュール50a、50bそれぞれが判定部13に相当するモジュールを有し、当該モジュールがアーリーストッピングを行うか否かを判定した場合、その判定結果を制御部11へ送信するという構成であってもよい。
また、AUC算出部81a、81b、サンプルウェイト更新部82a、82b、または勾配情報更新部83a、83bのうちいずれもがハードウェアモジュールで構成されることに限定されるものではない。
また、例えば、サンプルウェイト更新部82a、82b、および勾配情報更新部83a、83bは、クラシフィケーションモジュール50a、50b内に独立したモジュールとして存在していることに限定されるものではない。すなわち、クラシフィケーションモジュール50a、50b全体として、サンプルウェイト更新部82a、82b、および勾配情報更新部83a、83bの機能を備えている構成であってもよい。
(分割ごとにAUC算出部を有することによる効果)
図44は、AUC算出部が1つの場合と分割ごとに備えられる場合との処理時間の比較結果の一例を示す図である。図44を参照しながら、AUC算出部が1つの場合と、分割ごとにAUC算出部を有する場合とにおけるAUCの算出の処理時間の比較結果について説明する。
例えば、分割数が2で学習データがデータメモリ30a、30bに均等に分割されているものとする。この場合、図44(b)に示すようにAUC算出部を分割ごとに有する場合、すなわち、AUCの算出を分割ごとに行う場合は、図44(a)に示すようにAUC算出部が1つである場合、すなわち、AUCの算出をすべての学習データについて一度に行う場合と比較して、AUCの算出時間を削減することができ、高速化を図ることができる。
ここで、すべての学習データを用いて算出したAUCと、分割ごとの学習データを用いてそれぞれ算出されたAUCとは、必ずしも等しいとは限らない。すなわち、AUCの算出の対象となる学習データの集合が変われば、一般にAUCは異なる値になる。しかし、アーリーストッピングの指標としてAUCを用いる場合、AUCが向上したか否かが判断できればよいので、全学習データを用いて厳密なAUCを算出する必要はない。上述のように、判定部13が、AUC算出部81a、81bにより算出されたそれぞれのAUCのいずれか、または、双方のAUCの平均値もしくは合計値等に基づいて、アーリーストッピングを行うか否かを判定できればよい。このように、アーリーストッピングにより学習処理を中断することによって、不要な学習処理の継続を抑制すると共に、過学習が進む前に学習処理を中断させることができる。
なお、上述のように、本実施形態に係る学習識別装置1dでは、データパラレルの分割数が2であることに限定されるものではなく、3以上でも構わない。この場合、分割ごとにAUC算出部を有するものとすればよく、AUCの算出処理の処理時間を、AUC算出部が1つの場合と比較して、分割数分の1の処理時間に削減することができる。
(分割ごとにモデルメモリを有することによる効果)
図45は、モデルメモリが1つの場合と分割ごとに備えられる場合との処理時間の比較結果の一例を示す図である。図45を参照しながら、モデルメモリが1つの場合と、分割ごとにモデルメモリを有する場合とにおけるモデルメモリにアクセスする処理の処理時間の比較結果について説明する。
上述のように、サンプルウェイト更新部82a、82bは、学習データに対応するサンプルウェイトの更新処理の際に、モデルメモリ40a、40bからノードデータを参照する。ここで、仮に、学習データを複数に分割したデータパラレルの状態で、モデルメモリが1つのみの場合、サンプルウェイトの更新処理の際に、分割ごとにモデルメモリにアクセスすることができず、互いに待ち時間が発生する。例えば、分割数が3の場合で、モデルメモリが1つ(モデルメモリ40)である場合、分割ごとに独立してモデルメモリ40にアクセスすることができず、図45(a)に示すように、直列に(逐次的に)アクセスする必要がある。
一方、上述の図40に示す学習識別装置1dのように、分割ごとにモデルメモリ(モデルメモリ40a、40b)を有する場合、サンプルウェイトの更新処理の際に、分割ごとに並列してモデルメモリにアクセスすることができる。例えば、分割数が3の場合で、モデルメモリが分割ごとに備えられている場合(モデルメモリ40a~40c)、図45(b)に示すように、分割ごとに並列して各モデルメモリ(モデルメモリ40a~40c)にアクセスすることができるので、高速化を実現することできる。このように、分割ごとにモデルメモリを備える構成とすることによって、学習処理の処理時間を高速化することができる。
[第5の実施形態]
第5の実施形態に係る学習識別装置について、第2の実施形態に係る学習識別装置と相違する点を中心に説明する。本実施形態では、ラーニングモジュールが少なくとも2以上の勾配ヒストグラムメモリを有することにより、各ノードの学習処理を並列に行う構成について説明する。
上述の第2の実施形態で説明した通り、勾配ヒストグラム算出モジュール61(61a、61b)の動作完了後、累積勾配算出モジュール62が動作する。このとき、1つのラーニングモジュール20に入力される学習データの数が、ヒストグラムのビン数よりも十分に大きい場合には、(勾配ヒストグラム算出モジュールの所要処理クロック数)>>(累積勾配算出モジュールの所要処理クロック数)となるため、データパラレルとする動作に問題はない。しかしながら、決定木のデプスが深い部分の学習の場合、および、全体の学習データの数が少ない場合等、1つのノードあたりの学習データの数が少ない場合には、相対的に累積勾配算出モジュール62での演算時間が大きな部分を占めてくるという問題がある。また、データパラレルの分割数を大きくし並列化が進むほど、1つのラーニングモジュールに割り当てられる学習データの数が減ってしまうため、この問題は深刻となり、単純にデータパラレルの方法ではこの問題は解決できない。本実施形態では、この問題を解決するために、ラーニングモジュール内部の設計を工夫するものとし、具体的には、勾配ヒストグラム算出モジュールを2つ以上備えるものとし、同じデプスの1つ目のノードの累積勾配算出モジュールによる演算(以下、「累積勾配算出処理」と称する場合がある)が行われている間に、次のノードの勾配ヒストグラム算出モジュールによる演算(以下、「勾配ヒストグラム算出処理」と称する場合がある)が並列行われるようにする。また、複数の勾配ヒストグラム算出モジュールにおける処理は順番に切り替えるものとし、後段の累積勾配算出モジュールは、複数の勾配ヒストグラム算出モジュールからの出力を切り替えて入力するものとする。以上の動作を実現するための構成および当該動作について、以下に詳述する。
(ラーニングモジュールの構成および動作)
図46は、第5の実施形態の勾配ヒストグラム算出モジュールのモジュール構成の一例を示す図である。図46を参照しながら、本実施形態に係る学習識別装置のラーニングモジュールが有する勾配ヒストグラム算出モジュール61a、61bの構成および動作について説明する。なお、図46に示すように、ラーニングモジュールは、2つの勾配ヒストグラム算出モジュールを有するものとし、特徴量が1次元であるものとし、そして、勾配情報として一次勾配gのみを考えた場合について説明する。また、本実施形態ではデータパラレルによる分割が行われていないものとして説明する。また、図46に示す勾配ヒストグラム算出モジュール61a、61b、および、後述の図47に示す累積勾配算出モジュール62および算出モジュール63を含むラーニングモジュールを「ラーニングモジュール20c」と称するものとする。
図46に示すように、データパラレルにより分割されていないので、本実施形態に係る学習識別装置は、1つのデータメモリ30(データ記憶部)を有し、ラーニングモジュール20cは、このデータメモリ30にアクセスする勾配ヒストグラム算出モジュール61a、61bを有する。なお、勾配ヒストグラム算出モジュール61a、61bの構成は、上述の図20に示す勾配ヒストグラム算出モジュール61a、61bの構成と同様である。
また、勾配ヒストグラム算出モジュール61a、61bは、1つのデータメモリ30にアクセスし、当該データメモリ30は、学習時におけるラーニングモジュール20cによる一方のポートを介してのアクセス処理中に、識別時におけるクラシフィケーションモジュール50による他方のポートを介してのアクセス処理が可能となっているものとする。したがって、学習時にラーニングモジュール20cからデータメモリ30にアクセスできるポートは1つなので、勾配ヒストグラム算出モジュール61aまたは勾配ヒストグラム算出モジュール61bのいずれかがデータメモリ30にアクセスすることができる。
図47は、第5の実施形態の累積勾配算出モジュールおよび算出モジュールのモジュール構成の一例を示す図である。図47を参照しながら、本実施形態に係る学習識別装置のラーニングモジュールが有する累積勾配算出モジュール62および算出モジュール63の構成および動作について説明する。
図47に示すように、ラーニングモジュール20cは、さらに、累積勾配算出モジュール62(累積勾配算出部)と、算出モジュール63と、を有する。
累積勾配算出モジュール62は、本実施形態では勾配情報として一次勾配gのみを想定しているので、上述の図19に示した累積勾配算出モジュール62の構成のうち、二次勾配に対応するアキュムレータ214、ディレイ215および差分器216については図示されていない。すなわち、本実施形態では、累積勾配算出モジュール62は、しきい値カウンタ210と、アキュムレータ211と、ディレイ212と、差分器213と、を有する。なお、しきい値カウンタ210、アキュムレータ211、ディレイ212および差分器213の動作は、図19で上述した動作と同様である。累積勾配算出モジュール62は、上述のように、複数の勾配ヒストグラム算出モジュール(図47では勾配ヒストグラム算出モジュール61a、61b)からの出力を切り替えて入力する。すなわち、累積勾配算出モジュール62は、勾配ヒストグラムメモリ204a(ヒストグラム記憶部、第1のヒストグラム記憶部、第2のヒストグラム記憶部)および総和格納メモリ205aと、勾配ヒストグラムメモリ204b(ヒストグラム記憶部、第1のヒストグラム記憶部、第2のヒストグラム記憶部)および総和格納メモリ205bと、に切り替えてアクセスする。この際、勾配ヒストグラム算出モジュール61a、61bのうちいずれの出力を累積勾配算出モジュール62に入力させるかを切り替えるスイッチングモジュールが介在するものとしてもよい。
なお、算出モジュール63の動作についても、図19に示す算出モジュール63の動作と同様である。
(決定木の学習処理)
図48は、第5の実施形態に係る学習識別装置での学習および識別の処理のタイミングチャートの一例を示す図である。図48を参照しながら、本実施形態における決定木の学習処理時に、クラシフィケーションモジュール50の識別と、ラーニングモジュール20cによる学習との並列処理のタイミングチャートについて説明する。
図48(a)は、従来の並列処理を行わない場合の学習と識別とを交互にシーケンシャルに実行する場合のタイミングチャートを示している。図48(a)に示すタイミングチャートでは、各デプスにおいて、特定のノードの学習および識別が終了した後に、次のノードの学習および識別が行われる動作となっている。
一方、図48(b)は、本実施形態に係る学習識別装置において、学習と識別とを並列に実行する場合のタイミングチャートを示している。図48(b)に示すタイミングチャートでは、勾配ヒストグラム算出モジュール61a、61bによる勾配ヒストグラム算出処理、累積勾配算出モジュール62による累積勾配算出処理、および、クラシフィケーションモジュール50による識別処理の相互の実行タイミングの関係が示されている。
図48(b)に示すように、並列処理が可能となるのは、デプス1以降のデプスに対応するノードである。例えば、デプス0のノードはノード0のみであるので、学習と識別との並列処理を行うことはできない。なお、図48(b)における学習の処理に含まれる勾配ヒストグラム算出処理を示すチャートの近傍に付されている番号は、勾配ヒストグラム算出モジュール61a、61bを識別する番号である。すなわち、「(1)」は、勾配ヒストグラム算出モジュール61aによる勾配ヒストグラム算出処理を示し、「(2)」は、勾配ヒストグラム算出モジュール61bによる勾配ヒストグラム算出処理を示す。また、学習の処理に含まれる累積勾配算出処理を示すチャートの近傍に付されている番号「(1)」は、累積勾配算出モジュール62による累積勾配算出処理を示す。
デプス1においては、ノード0についての勾配ヒストグラム算出モジュール61aによる勾配ヒストグラム算出処理の終了後、勾配ヒストグラムメモリ204aに記憶された、加算された勾配情報を用いて、ノード0についての累積勾配算出モジュール62による累積勾配算出処理が開始される。このとき、勾配ヒストグラム算出モジュール61aによるデータメモリ30へのアクセス処理は終了しているので、勾配ヒストグラム算出モジュール61bがデータメモリ30へアクセスすることによるノード1についての勾配ヒストグラム算出処理が、ノード0についての累積勾配算出モジュール62による累積勾配算出処理と並列に実行される。また、ノード1についての勾配ヒストグラム算出モジュール61bによる勾配ヒストグラム算出処理が、ノード0についての累積勾配算出モジュール62による累積勾配算出処理よりも早く終了した場合、累積勾配算出モジュール62は1つであるので、ノード1についての累積勾配算出処理は、ノード0についての累積勾配算出モジュール62による累積勾配算出処理が終了するまで待機する必要がある。ノード0についての累積勾配算出処理の終了後、ノード0についてのクラシフィケーションモジュール50による識別処理の実行と並列して、ノード1についての累積勾配算出モジュール62による累積勾配算出処理をすることが可能である。
デプス2以降においても、デプス1と同様の動作であり、勾配ヒストグラム算出モジュール61aおよび勾配ヒストグラム算出モジュール61bが交互に勾配ヒストグラム算出処理を実行し、ラーニングモジュール20による学習(勾配ヒストグラム算出処理および累積勾配算出処理を含む)とクラシフィケーションモジュール50による識別との並列処理が可能であり、さらに、特定のノードについての累積勾配算出モジュール62による累積勾配算出処理の実行と並列して、次のノードについての勾配ヒストグラム算出モジュール61aまたは勾配ヒストグラム算出モジュール61bによる勾配ヒストグラム算出処理の実行が可能となる。さらに、データメモリ30には学習用のポートおよび識別用のポートがあるので、例えば、ノード0のクラシフィケーションモジュール50による識別処理の実行と並列して、ノード2についての勾配ヒストグラム算出モジュール61aによる勾配ヒストグラム算出処理を開始することが可能である。
以上のような動作によって、図48(a)に示す並列処理を行わない場合と比較して、処理速度を向上させることができ、決定木の学習処理を高速化することができる。
なお、本実施形態に係るラーニングモジュール20cでは、2つの勾配ヒストグラム算出モジュール(61a、61b)を有するものとしたが、これに限定されるものではなく、勾配ヒストグラムメモリおよび総和格納メモリを2セット(すなわち、勾配ヒストグラムメモリ204a、204bおよび総和格納メモリ205a、205b)を備えていればよく、勾配ヒストグラム算出モジュールの他の演算回路は1つものを流用して構成するものとしてもよい。これによって、図46に示す2つの勾配ヒストグラム算出モジュール(61a、61b)を有する構成よりも、回路規模を縮小させることができる。
また、図46に示す構成の例では、勾配ヒストグラム算出モジュール61a、61bの2つを備えるものとしたが、これに限定されるものではなく、3つ以上の勾配ヒストグラム算出モジュールを備えるものとしてもよい。
(変形例1)
本変形例では、2つ以上の勾配ヒストグラム算出モジュールに加え、勾配ヒストグラム算出モジュールと同数の累積勾配算出モジュールを備えた場合の構成および動作について説明する。
<ラーニングモジュールの構成および動作>
図49は、第5の実施形態の変形例1に係る学習識別装置のラーニングモジュールのモジュール構成の一例を示す図である。図49を参照しながら、本変形例に係る学習識別装置のラーニングモジュール20dの構成および動作について説明する。なお、図49に示すように、ラーニングモジュール20dは、2つの勾配ヒストグラム算出モジュールと、2つの累積勾配算出モジュールとを有するものとし、特徴量が1次元であるものとし、そして、勾配情報として一次勾配gのみを考えた場合について説明する。
図49に示すように、データパラレルにより分割されていないので、本変形例に係る学習識別装置は、1つのデータメモリ30(データ記憶部)を有し、ラーニングモジュール20dは、このデータメモリ30にアクセスする勾配ヒストグラム算出モジュール61a、61bと、累積勾配算出モジュール62a、62b(累積勾配算出部、第1の累積勾配算出部、第2の累積勾配算出部)と、算出モジュール63と、を有する。なお、勾配ヒストグラム算出モジュール61a、61bの構成および動作は、図46で上述した通りである。
累積勾配算出モジュール62aは、上述の図47に示す累積勾配算出モジュール62と同様に、しきい値カウンタ210と、アキュムレータ211と、ディレイ212と、差分器213と、を有する。なお、しきい値カウンタ210、アキュムレータ211、ディレイ212および差分器213の動作は、図19で上述した動作と同様である。ただし、累積勾配算出モジュール62aのしきい値カウンタ210は、勾配ヒストグラム算出モジュール61aの勾配ヒストグラムメモリ204a(ヒストグラム記憶部、第1のヒストグラム記憶部、第2のヒストグラム記憶部)から特徴量の値ごとに加算された勾配情報(g)、すなわち、特徴量の各値の勾配ヒストグラムを読み出すためのアドレスとなるしきい値を出力する。また、累積勾配算出モジュール62aのアキュムレータ211は、しきい値カウンタ210から出力されたしきい値(アドレス)に対応した勾配情報gについての勾配ヒストグラムを、勾配ヒストグラム算出モジュール61aの勾配ヒストグラムメモリ204aから読み出して、現在格納している勾配ヒストグラムの累積和に対して、さらに累積して、新たな勾配ヒストグラムの累積和として保持する。
累積勾配算出モジュール62bは、上述の図47に示す累積勾配算出モジュール62と同様に、しきい値カウンタ210と、アキュムレータ211と、ディレイ212と、差分器213と、を有する。なお、しきい値カウンタ210、アキュムレータ211、ディレイ212および差分器213の動作は、図19で上述した動作と同様である。ただし、累積勾配算出モジュール62bのしきい値カウンタ210は、勾配ヒストグラム算出モジュール61bの勾配ヒストグラムメモリ204b(ヒストグラム記憶部、第1のヒストグラム記憶部、第2のヒストグラム記憶部)から特徴量の値ごとに加算された勾配情報(g)、すなわち、特徴量の各値の勾配ヒストグラムを読み出すためのアドレスとなるしきい値を出力する。また、累積勾配算出モジュール62bのアキュムレータ211は、しきい値カウンタ210から出力されたしきい値(アドレス)に対応した勾配情報gについての勾配ヒストグラムを、勾配ヒストグラム算出モジュール61bの勾配ヒストグラムメモリ204bから読み出して、現在格納している勾配ヒストグラムの累積和に対して、さらに累積して、新たな勾配ヒストグラムの累積和として保持する。
算出モジュール63は、累積勾配算出モジュール62a、62bにより算出された勾配情報の和を用いて、上述の式(19)を用いて、各しきい値における分岐スコアを算出するモジュールである。この場合、算出モジュール63は、累積勾配算出モジュール62a、62bからの出力を切り替えて入力する。なお、累積勾配算出モジュール62a、62bのうちいずれの出力を算出モジュール63に入力させるかを切り替えるスイッチングモジュールが介在するものとしてもよい。
<決定木の学習処理>
図50は、第5の実施形態の変形例1に係る学習識別装置での学習および識別の処理のタイミングチャートの一例を示す図である。図50を参照しながら、本変形例における決定木の学習処理時に、クラシフィケーションモジュール50の識別と、ラーニングモジュール20dによる学習との並列処理のタイミングチャートについて説明する。
図50(a)は、従来の並列処理を行わない場合の学習と識別とを交互にシーケンシャルに実行する場合のタイミングチャートを示している。図50(a)に示すタイミングチャートでは、各デプスにおいて、特定のノードの学習および識別が終了した後に、次のノードの学習および識別が行われる動作となっている。
一方、図50(b)は、本実施形態に係る学習識別装置において、学習と識別とを並列に実行する場合のタイミングチャートを示している。図50(b)に示すタイミングチャートでは、勾配ヒストグラム算出モジュール61a、61bによる勾配ヒストグラム算出処理、累積勾配算出モジュール62a、62bによる累積勾配算出処理、および、クラシフィケーションモジュール50による識別処理の相互の実行タイミングの関係が示されている。
図50(b)に示すように、並列処理が可能となるのは、デプス1以降のデプスに対応するノードである。例えば、デプス0のノードはノード0のみであるので、学習と識別との並列処理を行うことはできない。なお、図50(b)における学習の処理に含まれる勾配ヒストグラム算出処理を示すチャートの近傍に付されている番号は、勾配ヒストグラム算出モジュール61a、61bを識別する番号である。すなわち、「(1)」は、勾配ヒストグラム算出モジュール61aによる勾配ヒストグラム算出処理を示し、「(2)」は、勾配ヒストグラム算出モジュール61bによる勾配ヒストグラム算出処理を示す。また、学習の処理に含まれる累積勾配算出処理を示すチャートの近傍に付されている番号は、累積勾配算出モジュール62a、62bを識別する番号である。すなわち、「(1)」は、累積勾配算出モジュール62aによる累積勾配算出処理を示し、「(2)」は、累積勾配算出モジュール62bによる累積勾配算出処理を示す。
デプス1においては、ノード0についての勾配ヒストグラム算出モジュール61aによる勾配ヒストグラム算出処理の終了後、勾配ヒストグラムメモリ204aに記憶された、加算された勾配情報を用いて、ノード0についての累積勾配算出モジュール62aによる累積勾配算出処理が開始される。このとき、勾配ヒストグラム算出モジュール61aによるデータメモリ30へのアクセス処理は終了しているので、勾配ヒストグラム算出モジュール61bがデータメモリ30へアクセスすることによるノード1についての勾配ヒストグラム算出処理が、ノード0についての累積勾配算出モジュール62aによる累積勾配算出処理と並列に実行される。さらに、上述の第5の実施形態とは異なり、ノード1についての勾配ヒストグラム算出モジュール61bによる勾配ヒストグラム算出処理が、ノード0についての累積勾配算出モジュール62aによる累積勾配算出処理よりも早く終了した場合でも、ノード1についての勾配ヒストグラム算出処理の終了後、続けて、累積勾配算出モジュール62bによる累積勾配算出処理を開始することができる。ノード0についてのクラシフィケーションモジュール50による識別処理の実行と並列して、ノード1についての累積勾配算出モジュール62bによる累積勾配算出処理を実行することが可能である。
デプス2以降においても、デプス1と同様の動作であり、勾配ヒストグラム算出モジュール61aと累積勾配算出モジュール62aとによる学習処理、および、勾配ヒストグラム算出モジュール61bと累積勾配算出モジュール62bとによる学習処理は、勾配ヒストグラム算出モジュール61aによる勾配ヒストグラム算出処理と、勾配ヒストグラム算出モジュール61bによる勾配ヒストグラム算出処理とが重ならない限りにおいて、並列に実行することが可能である。例えば、累積勾配算出モジュール62aによる累積勾配算出処理と、累積勾配算出モジュール62bによる累積勾配算出処理とは、それぞれ異なる勾配ヒストグラムメモリ(204a、204b)を参照するので、並列して実行することが可能である。すなわち、累積勾配算出モジュール62bによる累積勾配算出処理は、累積勾配算出モジュール62aによる累積勾配算出処理の終了を待たずに、開始することができる。また、ラーニングモジュール20による学習(勾配ヒストグラム算出処理および累積勾配算出処理を含む)とクラシフィケーションモジュール50による識別との並列処理が可能である。さらに、データメモリ30には学習用のポートおよび識別用のポートがあるので、例えば、ノード0のクラシフィケーションモジュール50による識別処理の実行と並列して、ノード2についての勾配ヒストグラム算出モジュール61aによる勾配ヒストグラム算出処理を開始することが可能である。ただし、ノード0についての累積勾配算出モジュール62aによる累積処理算出処理、および、ノード2についての勾配ヒストグラム算出モジュール61aによる勾配ヒストグラム算出処理は、双方勾配ヒストグラムメモリ204aに対してアクセスする。したがって、ノード2についての勾配ヒストグラム算出モジュール61aによる勾配ヒストグラム算出処理は、ノード0についての累積勾配算出モジュール62aによる累積処理算出処理が終了するまで待機する必要がある。
以上のように、図50(a)に示す並列処理を行わない場合と比較して、処理速度を向上させることができ、決定木の学習処理を高速化することができる。さらに、上述の第5の実施形態の図46および図47に示した構成と比較して、本変形例では、勾配ヒストグラム算出モジュールと同数の累積勾配算出モジュールを有し、勾配ヒストグラム算出モジュールによる処理の終了後、当該勾配ヒストグラム算出モジュールに対応する累積勾配算出モジュールによる処理を開始することができるため、第5の実施形態に係る構成よりもさらに学習処理を高速化することができる。
なお、本変形例に係るラーニングモジュール20dでは、2つの勾配ヒストグラム算出モジュール(61a、61b)を有するものとしたが、これに限定されるものではなく、勾配ヒストグラムメモリおよび総和格納メモリを2セット(すなわち、勾配ヒストグラムメモリ204a、204bおよび総和格納メモリ205a、205b)を備えていればよく、勾配ヒストグラム算出モジュールの他の演算回路は1つものを流用して構成するものとしてもよい。これによって、図49に示す2つの勾配ヒストグラム算出モジュール(61a、61b)を有する構成よりも、回路規模を縮小させることができる。
また、図49に示す構成の例では、2つの勾配ヒストグラム算出モジュール(61a、61b)に対応して2つの累積勾配算出モジュール(62a、62b)をそれぞれ備えるものとしたが、これに限定されるものではない。すなわち、3つ以上の勾配ヒストグラム算出モジュールを備えた場合、それぞれの勾配ヒストグラム算出モジュールに対応して同数の累積勾配算出モジュールを備えるものとしてもよい。
(変形例2)
本変形例では、上述の変形例1に示した2つの勾配ヒストグラム算出モジュール(61a、61b)と、2つの累積勾配算出モジュール(62a、62b)とを有する構成に加え、さらに3つ目の累積勾配算出モジュールを備えた場合の構成および動作について説明する。
<ラーニングモジュールの構成および動作>
図51は、第5の実施形態の変形例2に係る学習識別装置のラーニングモジュールのモジュール構成の一例を示す図である。図51を参照しながら、本変形例に係る学習識別装置のラーニングモジュール20eの構成および動作について説明する。なお、図51に示すように、ラーニングモジュール20eは、3つの勾配ヒストグラム算出モジュールと、2つの累積勾配算出モジュールとを有するものとし、特徴量が1次元であるものとし、そして、勾配情報として一次勾配gのみを考えた場合について説明する。
図51に示すように、データパラレルにより分割されていないので、本変形例に係る学習識別装置は、1つのデータメモリ30(データ記憶部)を有し、ラーニングモジュール20eは、このデータメモリ30にアクセスする勾配ヒストグラム算出モジュール61a、61b、61cと、累積勾配算出モジュール62a、62b(累積勾配算出部、第1の累積勾配算出部、第2の累積勾配算出部)と、算出モジュール63と、を有する。なお、勾配ヒストグラム算出モジュール61a、61bの構成および動作は、図46で上述した通りであり、勾配ヒストグラム算出モジュール61cの構成および動作も同様である。なお、勾配ヒストグラム算出モジュール61cが備える勾配ヒストグラムメモリを、ここでは「勾配ヒストグラムメモリ204c」と呼称し、勾配ヒストグラム算出モジュール61cが備える総和格納メモリを、ここでは、「総和格納メモリ205c」と呼称するものとする。
また、勾配ヒストグラム算出モジュール61a~61cは、1つのデータメモリ30にアクセスし、当該データメモリ30は、学習時におけるラーニングモジュール20eによる一方のポートを介してのアクセス処理中に、識別時におけるクラシフィケーションモジュール50による他方のポートを介してのアクセス処理が可能となっているものとする。したがって、学習時にラーニングモジュール20eからデータメモリ30にアクセスできるポートは1つなので、勾配ヒストグラム算出モジュール61a~61cのいずれかがデータメモリ30にアクセスすることができる。
累積勾配算出モジュール62a、62bは、上述の図47に示す累積勾配算出モジュール62と同様に、それぞれ、しきい値カウンタ210と、アキュムレータ211と、ディレイ212と、差分器213と、を有する。なお、しきい値カウンタ210、アキュムレータ211、ディレイ212および差分器213の動作は、図19で上述した動作と同様である。ただし、累積勾配算出モジュール62a、62bは、勾配ヒストグラム算出処理を終了した勾配ヒストグラム算出モジュール61a~61cのうちいずれかからの出力を入力し、すなわち、勾配ヒストグラム算出モジュール61a~61cがそれぞれ有する勾配ヒストグラムメモリ204a~204c(ヒストグラム記憶部)のいずれかにアクセスする。したがって、勾配ヒストグラム算出モジュール61a~61cのうちいずれの出力を累積勾配算出モジュール62a、62bに入力させるかを切り替えるスイッチングモジュールが介在するものとしてもよい。
なお、算出モジュール63の動作については、図49に示す算出モジュール63の動作と同様である。
<決定木の学習処理>
図52は、第5の実施形態の変形例2に係る学習識別装置での学習および識別の処理のタイミングチャートの一例を示す図である。図52を参照しながら、本変形例における決定木の学習処理時に、クラシフィケーションモジュール50の識別と、ラーニングモジュール20eによる学習との並列処理のタイミングチャートについて説明する。
図52(a)は、従来の並列処理を行わない場合の学習と識別とを交互にシーケンシャルに実行する場合のタイミングチャートを示している。図52(a)に示すタイミングチャートでは、各デプスにおいて、特定のノードの学習および識別が終了した後に、次のノードの学習および識別が行われる動作となっている。
一方、図52(b)は、本実施形態に係る学習識別装置において、学習と識別とを並列に実行する場合のタイミングチャートを示している。図52(b)に示すタイミングチャートでは、勾配ヒストグラム算出モジュール61a~61aによる勾配ヒストグラム算出処理、累積勾配算出モジュール62a、62bによる累積勾配算出処理、および、クラシフィケーションモジュール50による識別処理の相互の実行タイミングの関係が示されている。
図52(b)に示すように、並列処理が可能となるのは、デプス1以降のデプスに対応するノードである。例えば、デプス0のノードはノード0のみであるので、学習と識別との並列処理を行うことはできない。なお、図52(b)における学習の処理に含まれる勾配ヒストグラム算出処理を示すチャートの近傍に付されている番号は、勾配ヒストグラム算出モジュール61a~61cを識別する番号である。すなわち、「(1)」は、勾配ヒストグラム算出モジュール61aによる勾配ヒストグラム算出処理を示し、「(2)」は、勾配ヒストグラム算出モジュール61bによる勾配ヒストグラム算出処理を示し、「(3)」は、勾配ヒストグラム算出モジュール61cによる勾配ヒストグラム算出処理を示す。また、学習の処理に含まれる累積勾配算出処理を示すチャートの近傍に付されている番号は、累積勾配算出モジュール62a、62bを識別する番号である。すなわち、「(1)」は、累積勾配算出モジュール62aによる累積勾配算出処理を示し、「(2)」は、累積勾配算出モジュール62bによる累積勾配算出処理を示す。
デプス1においては、ノード0についての勾配ヒストグラム算出モジュール61aによる勾配ヒストグラム算出処理の終了後、勾配ヒストグラムメモリ204aに記憶された、加算された勾配情報を用いて、ノード0についての累積勾配算出モジュール62aによる累積勾配算出処理が開始される。このとき、勾配ヒストグラム算出モジュール61aによるデータメモリ30へのアクセス処理は終了しているので、勾配ヒストグラム算出モジュール61bがデータメモリ30へアクセスすることによるノード1についての勾配ヒストグラム算出処理が、ノード0についての累積勾配算出モジュール62aによる累積勾配算出処理と並列に実行される。さらに、上述の第5の実施形態とは異なり、ノード1についての勾配ヒストグラム算出モジュール61bによる勾配ヒストグラム算出処理が、ノード0についての累積勾配算出モジュール62aによる累積勾配算出処理よりも早く終了した場合でも、ノード1についての勾配ヒストグラム算出処理の終了後、続けて、累積勾配算出モジュール62bによる累積勾配算出処理を開始することができる。ノード0についてのクラシフィケーションモジュール50による識別処理の実行と並列して、ノード1についての累積勾配算出モジュール62bによる累積勾配算出処理を実行することが可能である。なお、図52に示す例では、デプス1では、2つのノード(ノード0、1)についての処理のみなので、勾配ヒストグラム算出モジュール61cによる処理は行われていない。
デプス2以降においても、デプス1と同様の動作であり、ラーニングモジュール20eによる学習処理においては、勾配ヒストグラム算出モジュール61aによる勾配ヒストグラム算出処理と、勾配ヒストグラム算出モジュール61bによる勾配ヒストグラム算出処理と、勾配ヒストグラム算出モジュール61cによる勾配ヒストグラム算出処理とが重ならない限りにおいて、並列に実行することが可能である。例えば、ノード0についての累積勾配算出モジュール62aによる累積勾配算出処理と、ノード1についての累積勾配算出モジュール62bによる累積勾配算出処理とは、それぞれ異なる勾配ヒストグラムメモリ(204a、204b)を参照するので、並列して実行することが可能である。また、ノード2についての勾配ヒストグラム算出モジュール61cによる勾配ヒストグラム算出処理は勾配ヒストグラムメモリ204cにアクセスし、ノード0についての累積勾配算出モジュール62aによる累積勾配算出処理は勾配ヒストグラムメモリ204aにアクセスする。したがって、ノード2についての勾配ヒストグラム算出モジュール61cによる勾配ヒストグラム算出処理は、ノード0についての累積勾配算出モジュール62aによる累積勾配算出処理の終了を待たずに、開始することができる。ただし、ノード0についての累積勾配算出モジュール62aによる累積処理算出処理、および、ノード2についての累積勾配算出モジュール62aによる累積勾配算出処理は、同一モジュールによる処理である。したがって、ノード2についての累積勾配算出モジュール62aによる累積勾配算出処理は、ノード0についての累積勾配算出モジュール62aによる累積処理算出処理が終了するまで待機する必要がある。
以上のように、図52(a)に示す並列処理を行わない場合と比較して、処理速度を向上させることができ、決定木の学習処理を高速化することができる。さらに、上述の第5の実施形態の変形例1の図49に示した構成と比較して、本変形例では、勾配ヒストグラム算出モジュールさらに1つ多く有することで、上述のように、ノード2についての勾配ヒストグラム算出モジュール61cによる勾配ヒストグラム算出処理は、ノード0についての累積勾配算出モジュール62aによる累積勾配算出処理の終了を待たずに、開始することができるため、変形例1に係る構成よりもさらに学習処理を高速化することができる。
なお、本変形例に係るラーニングモジュール20eでは、3つの勾配ヒストグラム算出モジュール(61a~61c)を有するものとしたが、これに限定されるものではなく、勾配ヒストグラムメモリおよび総和格納メモリを3セット(すなわち、勾配ヒストグラムメモリ204a~204cおよび総和格納メモリ205a~205c)を備えていればよく、勾配ヒストグラム算出モジュールの他の演算回路は1つものを流用して構成するものとしてもよい。これによって、図51に示す3つの勾配ヒストグラム算出モジュール(61a~61c)を有する構成よりも、回路規模を縮小させることができる。
また、図51に示す構成の例では、3つの勾配ヒストグラム算出モジュール(61a、~61c)および2つの累積勾配算出モジュール(62a、62b)をそれぞれ備えるものとしたが、これに限定されるものではない。すなわち、4つ以上の勾配ヒストグラム算出モジュールを備えてもよく、3つ以上の累積勾配算出モジュールを備えるものとしてもよい。
なお、上述の第5の実施形態および変形例1、2では、各デプスにおいて、ノード0、1、・・・というようにノードの順番で処理を行うものとしているがこれに限定されるものではない。すなわち、各デプスで、学習データの数が近いノードの順番で処理を行うものとしてもよい。例えば、ある特定のデプスでの学習および識別の処理が終了した段階で、次のデプスの各ノードについて学習データの数が多い順(または、少ない順)にソートして、隣接するノードの学習データの数が近くなるようにし、学習データの多い(または少ない)ノードから順番に学習処理を行うものとしてもよい。これによって、各処理の待ち時間を減少させることができ、さらに学習処理を高速化することができる。
また、上述の第5の実施形態および変形例1、2では、データパラレルによる分割が行われていない場合を例に説明したが、これに限定されるものではなく、ラーニングモジュール(20c~20e)、データメモリ30(データ記憶部)、およびクラシフィケーションモジュール50をそれぞれ複数有するものとし、データパラレルの分割数を2以上として構成とするものとしてもよい。また、データパラレルの場合、上述の第4の実施形態のようにモデルメモリ40についても分割した構成としてもよい。