CS224d(自然言語処理のための深層学習)はスタンフォード大のRichard Socherが2015年から教えている講義で、動画やスライドなどの講義資料と演習問題がウェブ上で無料で公開されています。
[CS224d: Deep Learning for Natural Language Processing]
(http://cs224d.stanford.edu/)
会社の勉強会で週1回半年程度かけて講義動画と演習を終えたため、勉強したことを簡単にまとめてみたいと思います。
なぜ今なのか?
深層学習(Deep Learning)は2000年代後半のRBMやauto-encoderなどの教師なし学習から流行が始まりましたが、それらを教師あり学習の事前学習に使うアプローチは徐々に衰退し、2010年代前半には画像認識のための畳み込みネットワークがImageNetコンテストのおかげで爆発的に有名になりました。詳しくありませんが音声認識の分野でも既存の複雑なシステムを深層学習が置き換える動きがあったようです。
一方で自然言語処理は離散的な記号やテキストデータを扱うため線形モデルなどのベースラインが強く、言語モデルのためのRNNもN-gramと組み合わせてやっと精度が出るようになったのがRNNLM(Mikolov 2012)でした。その後のLSTM系の改善や文字レベル言語モデルの発展などを経て、2016年のGoogle Brainの研究ではN-gramと組み合わせることなく最高精度を達成できるようになっています。Exploring the Limits of Language Modeling (Jozefowicz 2016)
現在も大規模なデータで学習するには訓練時間がかかりすぎるといった問題があるものの、応用面では機械翻訳やチャットボットの実用化の兆しが見えてきて、ツール面ではTensorFlowなどのフレームワークが充実してくることで、自然言語処理にもようやく深層学習が普及してくるなと確信が持てるようになりました。私が働く会社でもニューラルネットワークによる予測変換を搭載したキーボードアプリをリリースしていて、エンジニアが深層学習を使ってアプリを作れる時代が来ていると思います。スマホの文字入力アプリ「SwiftKey」、ニューラルネットワークで恐ろしいほど賢くなる
前置きが長くなりましたがそんなわけでスタンフォード大の講義資料を使って勉強したので目次を紹介したいと思います。
講義内容
- 自然言語処理と深層学習への入門
- 単語のベクトル表現:word2vecとGloVe
- 単語のベクトル表現:言語モデル、ソフトマックス、単層ネットワーク
- ニューラルネットワークと誤差逆伝播法:固有表現抽出
- ニューラルネットワークと誤差逆伝播法:さらなる詳細
- 実用的なアドバイス:勾配チェック、過学習、正則化、活性化関数
- TensorFlow入門
- リカレントニューラルネットワーク:言語モデル
- GRUとLSTM:機械翻訳
- リカーシブニューラルネットワーク:構文解析
- リカーシブニューラルネットワーク:評判分析
- 畳み込みニューラルネットワーク
- ゲスト講義:音声認識(Andrew Maas)
- ゲスト講義:機械翻訳(Thang Luong)
- ゲスト講義:Seq2Seqと大規模学習(Quoc Le)
- 未来の深層学習:Dynamic Memory Networks
なお勉強したのは2015年版でしたが、2016年からはTensorFlowの講義が入ったりしているみたいです。
実装してみた
この講義で学んだことの理解を確認するために、word2vec(Mikolov 2013)と NPLM(Bengio 2003)をPython 3.4とnumpyで実装し、Githubで公開しました。
DL4NLP: Deep Learning for Natural Language Processing
勉強目的のためTensorFlowやChainerなどのフレームワークは使わずにSGDなどのアルゴリズムを実装したためパフォーマンスは最適ではありませんが、コードは短くモジュール化されているので勉強用にコードを読むのにはちょういいかもしれません。個人的に最初のうちは自動微分に頼らず自分で紙とペンを使って微分してみる経験は必要なのではないかと思いました。