以下に、図1~図25を参照しながら、本発明に係る学習方法、プログラムおよび学習装置の実施形態を詳細に説明する。また、以下の実施形態によって本発明が限定されるものではなく、以下の実施形態における構成要素には、当業者が容易に想到できるもの、実質的に同一のもの、およびいわゆる均等の範囲のものが含まれる。さらに、以下の実施形態の要旨を逸脱しない範囲で構成要素の種々の省略、置換、変更および組み合わせを行うことができる。
(GBDTのロジックについて)
高性能な機械学習のアルゴリズムとしてのDLにおいて、識別器は様々なハードロジックによる実装が試みられ、GPU(Graphics Processing Unit)での処理と比較して電力効率が高いことが分かっている。ただし、DLのうち特にCNN(Convolutional Neural Network)の場合には、GPUのアーキテクチャが非常にマッチするため、速度的には、ロジック実装したFPGA(Field-Programmable Gate Array)の方がGPUに比べて、識別が速いというわけではない。それに対して、GBDT(Gradient Boosting Decision Tree:勾配ブースティング決定木)のような決定木系のアルゴリズムについて、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を用いた場合でも、以下の様に、3.2[TB/sec]に及ぶ。なお、内蔵RAMの容量は16[Mb]である。
BRAM 445個 × 36bit × 100MHz × 2ポート = 445*36*2*100*10^6/10^12 = 3.2TB/sec
また、ハイエンドのFPGAである、Xilinx社のVU9Pを用いた場合、6.9[TB/sec]である。なお、内蔵RAMの容量は270[Mb]である。
URAM 960個 × 36bit × 100MHz × 2ポート = 960*36*2*100*10^6/10^12 = 6.9TB/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枚)の場合、以下のようになる。
200MHz × 2(DDR) × 64 = 200*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のみを用いて学習を行うことで同じ回路を流用して、回路規模を小さくすることができる。
(各アルゴリズムによるスコアリングモデルの構築動作)
図16は、各アルゴリズムでスコアリングモデルを構築する動作を説明する図である。図17は、GBDTをスコアリングモデルに適用した場合の具体的な動作を説明する図である。例えば、金融機関等は、実務でも用いる信用スコアリングモデル等のスコアリングモデルについて公表しないため、具体的にどういった手法が多く使われているかは不明であるが、Logistic Regression、またはLogistic Regressionと決定木(Decision Tree)とを組み合わせたハイブリッドモデルが多いと考えられる。
以下、学習データとして、リース先企業の与信判断のための各種特徴量を含むデータを想定する。特徴量として、売上高等の数値変数の他、業種等のカテゴリを示す特徴量(カテゴリ特徴量)が含まれており、100種以上の特徴量が含まれる場合もあり得る。また、各リース先企業に対して、必ずしもすべての特徴量が取得できるわけではないので、欠損値を含んでいることもある。
本実施形態では、上述のようにGDBTを実行する構成を説明したが、スコアリングモデルを構築するためのアルゴリズム(機械学習手法)として、さらに、公知のRandom Forest(RF)、NN(Neural Network、ニューラルネットワーク)、およびベンチマークとしてのLogistic Regression(LR)を用いることを想定する。また、本実施形態に係る学習識別装置1は、上述の各アルゴリズムに基づく学習処理が可能であるものとする。ここでいう各アルゴリズムに基づく学習処理とは、各アルゴリズム単体による学習、および、いくつかのアルゴリズムのアンサンブル学習を含む。また、用いるサンプルデータのうち、例えば、6:3:1の割合で学習用、バリデーション用、および識別用のデータに分ける。学習用のデータ(学習データ)は、スコアリングモデルを構築するための学習に使用し、バリデーション用のデータ(バリデーションデータ)は、パラメータの最適化に用い、テスト用のデータ(識別データ)は、評価用に用いる。
また、各アルゴリズム(機械学習手法)には、ハイパーパラメータが複数存在する。最適なパラメータはデータセットによって異なるため、パラメータの最適化を行う必要がある。パラメータの探索の手法としては、いくつかの方法が知られているが、例えば、Bayesian Optimization(ベイズ最適化)を用いるものとする。
また、上述のような各種アルゴリズムを用いた学習において、リース契約後にデフォルト(債務不履行)したか否かを示すフラグをラベルとする教師データを学習データとする。また、アンサンブル学習には、Stacked Generalizationを用いるものとする。Stacked Generalizationは、異なる機械学習モデルを多層にしてアンサンブル学習を行う手法である。学習に使用する学習データをn-foldに分割(分割方法は後述する)し、各機械学習手法によって、out-of-foldデータに対する予測値を算出する。図16に示すように、こうして得られた予測値を1層目(レイヤ1)の出力として、次の層の特徴量として入力する。本実施形態では、図16に示すレイヤ構成で学習を行うものとする。すなわち、2層目(レイヤ2)の出力の平均値が、最終的な出力値となる。
次に、図17を参照しながら、GBDTをスコアリングモデルに適用した場合の動作例を説明する。各企業に対応する学習データについて、与信判断対象となる企業の資本金、売上等の情報(特徴量)を基に、多数の決定木を合わせて、デフォルト確率(所定期間においてデフォルトする確率)を予測していく。
図17に示すように、決定木の各ノードでは、学習で決定された分岐条件(特徴量番号、しきい値)に基づいて、各学習データが分岐される。例えば、「売上」と記載されたノードでは、「売上」という特徴量について、「10億円」というしきい値により左右に分岐されることを示す。最初の決定木では、「D社」の学習データのラベルが、D社がデフォルトしたことを示す「デフォルト」であるにも関わらず、非デフォルトに分類されているので、アンサンブル学習に基づき、このような適切に分類できなかった学習データを、別に生成された決定木により分類する。このような多数の決定木を合わせてデフォルト確率が予測される。
(スコアリングモデルの評価)
図18は、CAP曲線を説明する図である。図18を参照しながら、まず、学習データを用いた学習により生成されたスコアリングモデルを適用して得られる予測結果に対する評価として用いる、CAP(Cumulative Accuracy Profiles)曲線、および、AR(Accuracy Ratio)値について説明する。
CAP曲線は、図18に示すように、横軸に、学習データをデフォルト確率順に並べた場合の当該確率の上位x件の全体(N件)に占める割合x/Nとし、縦軸に、上位x件のうち実際にデフォルトした件数Nxの全体のデフォルト件数(Nd件)に占める割合Nx/Ndとしてプロットした線である。図18における、Bの曲線が典型的なCAP曲線の例である。また、モデルとしての精度がほとんどない場合はCのような直線が描かれ、モデルに基づく予測が完全に正解であればAのような形状の線が描かれる。
また、CAP曲線がBの曲線であるとした場合、AとCとで囲まれた部分の面積に対するBとCとで囲まれた部分の面積の割合がAR値となる。ここで、上述の各機械学習手法をアンサンブル学習を用いず、単体で学習を行いスコアリングモデルを生成した場合のAR値の結果例を、下記の(表1)に示す。
(表1)に示すように、他の機械学習手法と比較して、GBDTが著しく高いAR値(テストデータに対してAR値が0.619)を示して高精度となっている。これに対して、RFおよびNNは、既存のLRと比較してほとんど精度に差が出ない結果となる。(表1)が示す結果に基づくと、GBDTは、その他の機械学習手法と比較して、0.1程度上回っているため、スコアリングモデルの構築に適したアルゴリズムであると判断できる。
図19は、各アルゴリズムにおいて学習データの件数と精度との関係の一例を示す図である。図19を参照しながら、各アルゴリズム(機械学習方法)で学習データに基づくスコアリングモデルの生成を行った場合の、学習データの件数と、精度(AR値)との関係について説明する。
一般的に、機械学習によって生成されるモデルの精度は、学習データの件数が多いほど向上する。特に、ブースティングおよびNN(Neural Network)は、十分な精度を得るために大量の学習データが必要となることも多い。したがって、学習データの件数が少ない場合には、生成されるモデルの精度が低下し、異なる結果になる可能性がある。そこで、約9万件という大量の学習データを使用して、学習に使用する学習データの件数が精度にどのように影響を及ぼすかを、モデルの生成に使用する学習データの件数を変えて学習を行い、各アルゴリズム(GBDT、RF、LR、NN)について、当該件数とAR値との関係をプロットした結果を図19に示す。
図19に示すグラフでは、横軸が学習データの件数、縦軸がAR値を示す。いずれのアルゴリズムでも、学習データの件数が増えるほど、モデルの精度(AR値)が高くなる。学習データの件数が少ない場合も多い場合も、総じてGBDTにより生成されたモデルの精度が高い。特に、GDBTは、学習データの件数が1万件を超えたあたりから、他のアルゴリズムとの精度の差が顕著になっている。一方、学習データの件数が少ない場合には、GBDTとRFとの比較では、あまり精度に差がない。GBDTの優位性を活かすためには、一定以上の学習データの件数が必要であることが把握される。
次に、Stacked Generalizationを用いたアンサンブル学習、およびGDBT単体でそれぞれスコアリングモデルを生成した場合のAR値の結果例を、下記の(表2)に示す。
(表2)に示すように、アンサンブル学習の方がGBDT単体と比較して識別データにおけるAR値が0.011高く、アンサンブル学習の方が有効性が高いことが示されている。また、Stacked Generalizationでは、層数、および学習器の種類等がハイパーパラメータとなっており、このパラメータを変えることによって、アンサンブル学習としての多数のバリエーションが考えられる。上述の(表2)が示す結果はあくまでもその一例であるので、さらにモデルの精度を高めることができる可能性がある。
図20は、アンサンブル学習およびLRのCAP曲線の一例を示す図である。図21は、アンサンブル学習およびLRのCAP曲線の一例の一部を拡大した図である。図20および図21を参照しながら、従来の機械学習手法であるLRを、アンサンブル学習に置き換えることで得られる効果について説明する。
図20および図21において、仮に、デフォルト確率について上位10%の企業を謝絶した場合を考えると、横軸が0.1のとき、縦軸の値が、デフォルトした全企業のうち何%を謝絶できたかを示す値となる。図21に示すように、LRによりスコアリングモデルを生成した場合、横軸が0.1のときの縦軸の値は0.393なので、デフォルトした全企業のうち、39.3%を謝絶したことになる。逆に、残りの謝絶していない60.7%の企業がデフォルトすることになる。
一方、アンサンブル学習によりスコアリングモデルを生成した場合、デフォルトした全企業のうち、48%を謝絶できるため、謝絶していない企業のデフォルト率を低く抑えることが可能になる。定量的に比較すると、アンサンブル学習の方が従来の機械学習手法であるLRよりも、約14%デフォルトを少なく抑えることができる。
(学習データの特徴量の加工について)
ここでは、機械学習のモデルの生成の際によく用いられる特徴量の加工方法についてせ説明する。
一般的に、小さい数値は細かく、大きな数値は粗く捉える方がが、数値の挙動について適切に捉えることができるため、学習器に学習データを入力する前の前処理として、例えば、「売上」等の数値を示す特徴量に関しては、対数に変換する方法が用いられる。しがたって、本実施形態のスコアリングモデルにおいても、特定の特徴量について対数変換を行い、大きな値を粗く捉えるようにするものとしてもよい。このような対数変換を用いることによって、特定の学習データセットによる学習においては、スコアリングモデルのAR値が0.02ほど上昇することが確認された。
図22は、ワンホットエンコーディングを説明する図である。次に、図22を参照しながら、学習データに含まれる特徴量のうち、カテゴリを示す特徴量(カテゴリ特徴量)を、スコアリングモデルの学習に用いることができる数値形式に変換する処理について説明する。
GBDTでは、例えば、「業種」のようなカテゴリを示す特徴量はそのままでは学習処理に扱えないため、何らかの方法で数値に変換する必要がある。その変換方法として、ワンホットエンコーディングが有効である。ワンホットエンコーディングは、N種のカテゴリを示すカテゴリ特徴量がある場合に、N個のダミーの特徴量を設け、当該各特徴量にN種のカテゴリをそれぞれ対応付ける。そして、新しく設けた特徴量のうち、カテゴリに該当する特徴量の値を1とし、それ以外の特徴量の値を0とする。
例えば、図22(a)に示すように、学習データに含まれる特徴量に「カテゴリ変数」と称するカテゴリ特徴量が存在し、A、B、Cの3種のカテゴリを示す場合を考える。図22(a)において、レコード1~レコード7は、それぞれ学習データを示す。この場合、ワンホットエンコーディングを適用すると、3種のカテゴリを示すカテゴリ特徴量について、図22(b)に示すように、3個のダミーの特徴量である「カテゴリA」、「カテゴリB」、「カテゴリC」を設ける。そして、これらの特徴量のうち、元々のカテゴリ特徴量が示していたカテゴリに該当する特徴量の値を1として、それ以外の特著量の値を0とする。例えば、レコード3の場合、カテゴリ特徴量が示すカテゴリは「B」であるので、新しく設けた「カテゴリB」の値を1とし、他の「カテゴリA」および「カテゴリC」の値を0とする。このようなワンホットエンコーディングは、例えば、図24で後述する分割部12が実行するものとすればよい。
以上のような、ワンホットエンコーディングによりカテゴリ特徴量を、数値に変換した特徴量とすることで、学習処理に用いることが可能となる。この場合、特定の学習データセットによる学習においては、スコアリングモデルのAR値が0.07ほど上昇することが確認された。
(分割による学習データの件数を増やす構成および動作)
一般的には、ある1つの企業に対する融資またはリース契約等のための与信判断のための与信情報は、1件のレコードデータを学習データとして学習処理に用いられる。この場合、返済期間中にデフォルトが起きたか否かを示す情報を、ラベルとして学習データに付与する。また、上述したように、一般に機械学習によって生成されるスコアリングモデルの精度は、学習データの件数が多ければ多いほど精度が高まる。ただし、1つの企業の与信情報を示すレコードデータは1件であるため、そのままでは学習データの件数については限界がある。そこで、本実施形態では、学習データである各企業のレコードデータを、所定の期間に分割して、分割した期間ごとにデフォルトしたか否かを示すラベルを付与することによって、1つのレコードデータを、複数のレコードデータに分割して、学習データとしての件数を増加させる方法について考える。
図23は、実施形態に係る学習識別装置で用いる学習データの分割方法を説明する図である。図23を参照しながら、1つの企業の与信情報を示す1件のレコードデータ(学習データ)を分割する方法について説明する。
分割する学習データ(レコードデータ)として、図23に示すように、元データ500を想定する。元データ500は、特徴量として「企業固有番号」、「審査日」、「創立日」、「従業員数」、「売上」、「利益」、「契約期間」、「解約日」を含む。なお、各特徴量は一例であり、すべてを含む必要はなく、また、その他の特徴量を含むものとしてもよい。この元データ500を分割する期間として、ここでは年度ごとに分割することを想定する。返済までの期間を平均で5年間とした場合、1つのレコードデータが平均で5倍の量に増加することになる。また、ここでは、与信後5年間までについての分割を考えるものとする。したがって、例えば、6年目以降については分割しないものとする。これは、与信後、あまりに長い期間を考慮した場合、企業ごとに返済期間が異なるため、返済期間が長いものについて全ての期間について分割すると、そのレコードデータの重みが重くなった状態で学習されてしまい、生成されるスコアリングモデルの精度が低下すると考えらえるためである。また、例えば、3年で完済するレコードデータに関しては、分割できる最大の件数としては3個のレコードデータとなる。
以下、具体的な学習データの分割手順について説明する。
(1)まず、審査日(図23の元データ500の例では、2013年4月1日」)を基準として、年度別にレコードデータを分割する。
(2)分割したレコードデータに対して、その年度内にデフォルトしている場合には、デフォルトした旨のラベルを付与し、デフォルトしていない場合には、デフォルトしていない旨のラベルを付与する。また、分割したレコードデータの特徴量の値は、審査日において決定された値をそのまま踏襲している。すなわち、分割前後で、レコードデータの各特徴量の値は変わらないことになる。
(3)分割したレコードデータのうち、すでに契約が終わっている等によりリスクにさらされていないその契約終了の年度より後の年度のレコードデータは除去するものとする。
図23では、元データ500について、デフォルトの有無の確認の時期を、2017年7月とした場合に、分割した場合の例を示す。1年目については、元データ500における「企業固有番号」が2のレコードデータについては、「解約日」が2013年9月1日であり、デフォルトしていることが示されている。したがって、1年目の分割データ501の中の「企業固有番号」が2の分割したレコードデータには、ラベルである「デフォルト有無」に、デフォルトしたことを示す値として1が付与されている。元データ500における「企業固有番号」が3のレコードデータについては、デフォルトしていることが示されているものの、「解約日」が2014年9月1日(2年目)であるため、1年目ではデフォルトしていないことになる。したがって、1年目の分割データ501の中の「企業固有番号」が3の分割したレコードデータには、ラベルである「デフォルト有無」に、デフォルトしていないことを示す値として0が付与されている。
2年目については、元データ500における「企業固有番号」が2のレコードデータについては、1年目に既にデフォルトしているため、2年目の分割データ502の中には分割されたレコードデータは存在せず、それ以降の年度も同様である。元データ500における「企業固有番号」が3のレコードデータについては、「解約日」が2014年9月1日であり、2年目にデフォルトしていることが示されている。したがって、2年目の分割データ502の中の「企業固有番号」が3の分割したレコードデータには、ラベルである「デフォルト有無」に、デフォルトしたことを示す値として1が付与されている。
3年目については、元データ500における「企業固有番号」が3のレコードデータについては、2年目に既にデフォルトしているため、3年目の分割データ503の中には分割されたレコードデータは存在せず、それ以降の年度も同様である。
4年目については、元データ500における「企業固有番号」が4のレコードデータについては、契約期間が36か月(3年)であるため、4年目の分割データ504の中には分割されたレコードデータは存在せず、それ以降の年度も同様である。
5年目については、元データ500における「企業固有番号」が1のレコードデータについては、契約期間が60か月(5年)であるものの、元データ500についてのデフォルトの有無の確認時期が2017年7月としているため、この時期は契約期間中であり、5年目のデフォルトの有無が不確定であるため5年目の分割されたレコードデータは存在しないものとしている。
以上のような手順により、4件のレコードデータ(学習データ)を含む元データ500について分割された結果、分割データ501~504がそれぞれが含む学習データの合計として10件まで増加した結果となっている。このように、学習データを期間で分割して学習する場合、スコアリングモデルの出力結果は、この例では1年ごとに分割しているため、1年あたりのデフォルト確率を示す。
以上のように、学習データを最大現に分割して、学習データの件数を増加させることが可能となるので、スコアリングモデルの精度を向上させることができる。特定の学習データセットについて、このような方法で学習データの分割を行うことにより、分割しない場合と比較して、スコアリングモデルのAR値が0.2ほど上昇することが確認された。
図24は、実施形態に係る学習識別装置において学習データを分割するための機能ブロックの一例の動作を説明する図である。次に、図24を参照しながら、本実施形態に係る学習識別装置1において、学習データを分割するための機能ブロックの構成および動作について説明する。
図24に示すように、CPU10によるプログラムの実行により実現される機能部として、上述の図2に示した制御部11のほか、分割部12が実現される。分割部12は、記憶部80から読み出した学習データについて、上述のような方法により分割することによって、学習データの件数を増加させる機能部である。具体的には、分割部12は、分割の対象となる学習データについて、特定の時点を基準として、予め定められた所定期間(図23の例では、5年)内において、当該特定の時点から単位期間(図23の例では、1年)ごとに学習データを分割し、当該単位期間に特定の事象(図23の例では、デフォルト)が発生したか否かを示す値をラベルを、分割した学習データに付与する。この場合、分割部12は、分割後の学習データ(分割データ)の特徴量の値は、分割前の学習データの特徴量の値と一致させる。すなわち、学習データの分割時において決定されている特徴量の値は、分割後の学習データの特徴量としてそのまま継承され、付与されるラベルのみがそれぞれの学習データに応じて異なる値となる。また、特定の事象が発生した期間(例えば、図23の例では、契約終了日またはデフォルト日が含まれる期間)より後の期間に対応する分割データは除去する。このような、学習データの例として、上述の図23では、企業の与信情報を示す学習データについて説明したが、このようなデータに限定されるものではない。上述のように、特定の時点を基準として単位時間ごとに分割が可能であり、分割の前後で特徴量の値を継承することが可能であり、かつ、分割された各単位期間で特定の事象の発生の有無をラベルとして付与することができる学習データであれば、分割して学習データの件数を増加させることが可能である。
分割部12は、分割した学習データ(分割データ)を、データメモリ30(フィーチャメモリ32)に記憶させる。分割部12は、上述のように、CPU10がプログラムを実行することによって実現されるものとしているが、これに限定されるものではなく、ハードウェア回路によって実現されるものとしてもよい。
そして、ラーニングモジュール20は、データメモリ30に記憶された分割データを用いてGBDTによるスコアリングモデルの学習を行う。また、学習識別装置1は、上述のように、GBDTによる学習のみならず、他のアルゴリズム(RF、NN、LR等)に基づく学習処理が可能である。それぞれのアルゴリズムによる学習は、ラーニングモジュール20が担うものとしてもよく、ラーニングモジュール20とは異なる学習器が担うものとしてもよい。また、図2に示す学習識別装置1の構成では、ラーニングモジュール20およびクラシフィケーションモジュール50は、FPGAによって実現されるものとしているが、これに限定されるものではなく、CPU10がソフトウェア(プログラム)を実行することによって実現されるものとしてもよい。
記憶部80は、例えば、元データ500を記憶する機能部である。記憶部80は、例えば、HDD(Hard Disk Drive)、SSD(Solid State Drive)またはフラッシュメモリ等によって実現される。上述の図2に示したデータメモリ30またはモデルメモリ40は、記憶部80によって実現されるものとしてもよい。
図25は、実施形態に係る学習識別装置の学習方法の流れの一例を示すフローチャートである。図25を参照しながら、本実施形態に係る学習識別装置1において、学習データを分割してスコアリングモデル(信用スコアリングモデル)の学習を行う動作の流れを説明する。
<ステップS11>
学習識別装置1の分割部12は、記憶部80から、分割の対象となる学習データ(例えば、元データ500)を読み込む。分割部12は、分割の対象となる学習データについて、特定の時点を基準として、予め定められた所定期間(例えば、5年)内において、当該特定の時点から単位期間(例えば、1年)ごとに学習データを分割し、当該単位期間に特定の事象(例えば、デフォルト)が発生したか否かを示す値をラベルを、分割した学習データに付与する。この場合、分割部12は、分割後の学習データ(分割データ)の特徴量の値は、分割前の学習データの特徴量の値と一致させる。また、分割部12は、特定の事象が発生した期間(例えば、契約終了日またはデフォルト日が含まれる期間)より後の期間に対応する分割データは除去する(分割を行わない)。分割部12は、分割した学習データを、データメモリ30(フィーチャメモリ32)に記憶させる。そして、ステップS12へ移行する。
<ステップS12>
学習識別装置1のラーニングモジュール20およびクラシフィケーションモジュール50は、分割部12により分割され、データメモリ30に記憶された学習データを用いて、スコアリングモデルの学習(生成)を行う。この場合、スコアリングモデルの学習に用いるアルゴリズムは、GDBT、RF、NNまたはLRの単体を用いてもよく、これらのアルゴリズムのアンサンブル学習に基づいてもよい。以上によって、処理を終了する。
以上のように、本実施形態では、GDBT、RF、NNまたはLR等の各種アルゴリズムを用いたスコアリングモデルの学習において用いる学習データを、期間ごとに分割することによって学習データの件数を増加させて学習の用いるものとしている。具体的には、分割部12は、分割の対象となる学習データについて、特定の時点を基準として、予め定められた所定期間(図23の例では、5年)内において、当該特定の時点から単位期間(図23の例では、1年)ごとに学習データを分割し、当該期間に特定の事象(図23の例では、デフォルト)が発生したか否かを示す値をラベルを、分割した学習データに付与することによって、学習データの件数を増加させる。これによって、学習データを最大現に分割して、学習データの件数を増加させることが可能となるので、スコアリングモデルの精度(学習の精度)を向上させることができる。