森を盛る
第5X回R勉強会@東京(#TokyoR)
“Deep Forest: Towards An Alternative to Deep Neural Networks”
1. Deep Forest論文を紹介します
2. {Laurae2} package を使ってみました
ランダムフォレスト
学習データのランダムサブセットで構築した様々な決定木の集合(=森)の
予測結果 を統合する
 分類 → 多数決 または 各クラスへの所属確率の平均
 回帰 → 平均
Deep Forest
https://arxiv.org/abs/1702.08835
深層学習の持つ表現学習能力を、
他の学習モデルに持たせることはできないか?
• 大量の訓練データが必要
• 小規模なデータだとうまくいかない
• ラベルづけのコストが高い
• 訓練時の計算コストが高い
• 貧乏人には辛い
• ハイパーパラメータ多すぎ
• パフォーマンスのためにはチューニングが重要だが...
http://deeplearning.net/tutorial/lenet.html
深層学習の持つ表現学習能力を、他の学習モデルに持たせることはできないか?
提案手法:gcForest (multi-Grained Cascade forest)
• 入力が高次元では、表現学習能力をさらに向上
• CNNの畳み込みフィルターみたいなmulti-grained scanning
• 小規模なデータに対する優れたパフォーマンス
• データに応じて,モデルの複雑さを適応的/自動的に決定できる
• ハイパーパラメタの数が少ない
• チューニングいらずの堅牢なパフォーマンス
• ドメインの異なるデータでも再調整が少なくてすむ
• 木モデルベースなのでニューラルネットに比べて解析が容易(多分)
ランダムフォレストで表現学習
Cascade Forest
• 種類の違うアンサンブル木をmixして多様性を増やす
• complete-random tree forest
• 各ノードをランダムな変数で分割する決定木
• random forest
• ランダムに変数の絞り込みを行ったサブセットで、各ノードをジニ係数最大となる変数で分割していく決
定木
• 論文中ではシンプルに2×2の設定
• 特徴量加工
• レベル間で受け渡される中間インプットは、各フォレストが生成したクラス分布+元の特徴ベクトル
• たとえば、10変数3クラスのデータ、4フォレスト: 次のレベルが受けとる特徴の数は 3×4 + 10 = 22
• カスケードレベルの自動決定
• カスケード全体のパフォーマンスをcross-validationで評価
→ CVエラーが向上しなくなったレベルで訓練終了
入力特徴量の工夫
Multi-Grained Scanning
• 変数同士の位置関係を考慮する場合のオプション
• 畳み込みフィルターみたいなinputの加工
• RNN
• 変数同士のシーケンシャルな関係(並び順)が重要
• たとえば音声・文章データ
• CNN
• 変数同士の空間的な位置関係が重要
• たとえば画像データ
Multi-GrainedScanning+CascadeForest=
multi-Grained Cascade forest (gcForest )
• Cascade Forest
• 種類の違うアンサンブル木をmixして
多様性を増やす
• 特徴量加工
• カスケードレベルの自動決定
• Multi-Grained Scanning
• 変数同士の位置関係を考慮する
場合のオプション
• 畳み込みフィルターみたいなinput
の加工
Q& A
Q. スタッキングとは違うの?
A. 違うよ。全然違うよ。
• By 著者(in related works)
• 表現学習を行うだけでなく、適切なモデル複雑度を自動的に決定したい
→DeepForest
• 深層学習を使わないところもポイント(らしい)
Summary of hyper-parameters and
default settings.
実験と結果
• 論文中に多数のベンチあり
• 何となくアンフェアな比較になっている気がする
• https://github.com/Laurae2/Laurae
• https://github.com/Microsoft/LightGBM/issues/331
Rで試してみる
• https://github.com/katokohaku/deepForest_test
• 工事中

Deep forest (preliminary ver.)