糞糞糞ネット弁慶

読んだ論文についてメモを書きます.趣味の話は http://repose.hatenablog.com

データマイニングコンペティションサイト Kaggle にも Deep Learning ブームがきてるかと思ったのでまとめる

概要

最近話題の Deep Learning,NIPS や ICML,CVPR といった世界の話だろうと思っていたら Kaggle で Deep learning が去年一件,今年に入って更に一件優勝していたのでまとめる.

Kaggle

Kaggle: Your Home for Data Science
おなじみのデータマイニングコンペティションサイト.データと目的関数が与えられた上で最も高いスコアを出したチームに賞金が出る.
最近では KDD Cuphttp://www.kaggle.com/c/challenges-in-representation-learning-the-black-box-learning-challenge:title=ICML2013 workshop competition],や RecSys2013 CompetitionレストランレビューサイトYelpのRecruiting Competitionホスティングしている.

Deep Learning

一つの巨大なニューラルネットワークを使って特徴量抽出から識別までやってしまうという最近の学習法.
岡野原さんのニューラルネットの逆襲 | Preferred Researchを読めば全て判る.
上記エントリー後の動きでは,

と最近は華やかなニュースが多い.ちなみに Andrew Ng 先生はおなじみ Latent Dirichlet Allocation(LDA) の論文にも名を連ねている.

Kaggle の定番

Q&A With Guocong Song, 3rd Prize, Job Salary Prediction Competition | No Free Hunch
Kaggleのこれまでの手法は次の二段階に分かれていた.

  • Feature Engineering : 与えられたデータからいかにして有効な特徴量を抽出・構築するか
  • Model Engineering : Random Forest や Grandient Boosted Trees,Logistic Regression,SVM といった複数のモデルを組み合わせていかにスコアを改善するか

Deep Learning での優勝者インタビュー

Deep Learning が優勝したのは化合物の活性予測のコンペと,求人情報を用いた仕事の給料予測のコンペ.両方とも Google に買収された Hinton 先生のところの PhD が関わっている. job salary prediction にいたっては PhD 一人.
それぞれインタビュー記事
Deep Learning How I Did It: Merck 1st place interview | No Free Hunch
Q&A With Job Salary Prediction First Prize Winner Vlad Mnih | No Free Hunch
を抜粋する.

Merck Molecular Activity Challenge

化合物の活性予測のインタビューでは

Kaggle の皆に最新の機械学習手法であるニューラルネット最新の技術を使ったニューラルネットのヤバさを見せつけにきた.
We wanted to show the Kaggle community the effectiveness of neural networks that use the latest techniques from the academic machine learning community
今回の目的は Deep Learning の強さを見せつける事なので, Feature Engineering,特徴量づくりをほぼやらず,必要最低限の前処理しかしてない.
Since our goal was to demonstrate the power of our models, we did no feature engineering and only minimal preprocessing.
我々 Deep Learning 屋は特徴量を工夫するよりも,特徴量を可能な限りデータから学習していたい.こういう傾向って Kaggle にいる特徴量作りに長けた人々を相手にした時に不利になるかもしれないけど,今回は上手くいったわ.
Whenever possible, we prefer to learn features rather than engineer them. This preference probably gives us a disadvantage relative to other Kaggle competitors who have more practice doing effective feature engineering. In this case, however, it worked out well.

Deep Learning How I Did It: Merck 1st place interview | No Free Hunch

とかいう感じで特徴量作りに心血を注いできたデータサイエンティスト憤死という内容になっている.

Job Salary Prediction

求人からの給料予測でも同様である.これは,求人票のテキストやらなんやらから仕事の給料を予測するコンペだったが

ステミングした単語をただ突っ込んだ.カテゴリとかは 1-of-K表現にして使った.
I used separate bags of words for the job title, description, and the raw location.
色々他の特徴量とか前処理試したけど大して変わらなかった.
I did experiment with a number of alternative features and encodings but I did not get any noticeable improvements.
学習の段階では GPU で実装した Deep Neural Netを3つ組み合わせて使った.他の学習器は使ってない.
For the supervised learning part, I used deep neural networks implemented on a GPU. I did not combine neural networks with any other learning methods.
シンプルかつ強力なモデルを使って目的関数を直接最適化する事が一番重要なのだと分かった.
My most important insight was to simply train a powerful and flexible model by directly optimizing the loss function used to determine winner.
他の参加者はそれぞれ別に作った複雑なモデルを組合せていたが,それじゃ正しい目的関数を最適化していない.
Some competitors used complicated ensembles of many disparate models, most of which were not optimizing the correct objective.
そういう人は(自分がそうしたよりもはるかに)リーダーボード(モデルを投稿してスコアが表示されるページ)の結果に頼らざるをえなくなってしまう.
These people needed to use leaderboard and validation error feedback much more heavily than I did.
驚いたのは,色々特徴量をよくしようとやってみてもほとんどモデルが改善しなかった事だ.
I was somewhat surprised by how little improvement I got from my attempts to engineer better features.
例えば,今回ただの単語で突っ込んだものを2-gramで入れたりとか,土地の情報や土地の階層性なんかを入れてみても全然モデルが改善しなかった.
For example, I didn't get any improvement from using bigrams or from adding information derived from the normalized location or location tree.
掲示板を見た感じ,他の参加者はこれらの情報を入れてモデルの精度が改善していたみたいなので,ニューラルネットがこういった特徴を自動的に学習していたんじゃないかと私は考えている.
Since other competitors have reported noticeable gains in performance from using these features on the competition forum, I suspect that the deep nets I trained were able to learn some of these features automatically.

Q&A With Job Salary Prediction First Prize Winner Vlad Mnih | No Free Hunch

この優勝者の学生,よく見るとMerck Molecular Activity Challengeで使われたニューラルネットでも用いられていたGoogle Code Archive - Long-term storage for Google Code Project Hosting.を書いていた.

じゃあこれらにあやかって Deep Learning を使えばすぐに Kaggle で優勝連発できるのか

非常に難しいと考える.その理由は二つ.

Deep Learning に必要な Deep Naural Net を簡単に扱うライブラリが存在しない

岡野原さんが上のエントリで書いていたように,libsvmのようにデータ食わせればすぐに結果が出てくるライブラリというのはまだ存在しない.CUDA実装のものはあるが動かすのが非常に難しいと評判である(参考: http://pub.ne.jp/akisato/?entry_id=4673867).
実装の方針としては,隠れ層を一つしか持たないニューラルネットを段階的に学習させつつ,dropoutなどを挟めば原理上どうにかなるのではないかと考えられる.

ノウハウがほとんど無い

しかし,最も大きいのはこれだと考えられる.SVMと違い,調整すべきハイパーパラメータがニューラルネットで非常に多くなる.例えば,最終的に10層のニューラルネットが構成されるとして,各層のユニット数はそれぞれどれぐらいにするのが最適なのか,上のインタビューを読んでもその辺りは触れられていない.
Deep Learning がまだ発展途上なため,ノウハウを持っている人・組織・研究室が非常に限られている.当然,日本語文献でその辺を探そうとしても目ぼしいものが見当たらないのが現状.
なので,一朝一夕に Deep Learning 使えば無双できるようになるとは思えない.

まとめ

  • Deep Learning は 2013年に入ってからますます話題
  • Hinton 先生のところの学生がコンペで無双
  • まだツールやノウハウが市中に出回ってないので参加者全員DNN使いになるのは当分先