強化学習がよく分からないので、根性入れてCourseraで勉強してみました。
一応、最後までいけたのまとめました。
動機
仕事でロボットをやっていてRT-1が気になってました。RT-1を少し調べてみたら、Vanilla BCと言うのが出てきて、どうもこれが強化学習/模倣学習のベースラインっぽい。BCがBehavioral Cloningの略だとわかったところで、あまりにも基措知識がなさ過ぎるのでどこかで勉強しないといけないなと感じてました。
JDLAのE資格でDQNまではなんなとなく勉強していたのでDQNからBCまでの間を埋めるような教材を探していてら、Courseraの強化学習のコースを見つけました。ちょっと様子を見てみたらコースで使う教科書がこの前翻訳された Reinforcement Learning: An introduction (Second Edition) by Richard S. Sutton and Andrew G. Barto じゃんと気がつき、やるなら今しかないと、早速本を買ってやってみました。
本の紹介
まずCourseraを始める前に読んでおいた方が良い本を2冊紹介します。この2つの本もReinforcement Learning: An introductionを参考にしているようなので、Courseraの内容の理解がはかどります。どちらもPythonで動くコードがあるので、一度手を動かしてみることをお勧めします。
機械学習スタートアップシリーズ Pythonで学ぶ強化学習 [改訂第2版] 入門から実践まで
https://www.amazon.co.jp/dp/4065172519/
比較的コンパクトにいろんな事がまとまっていて良い本です。手法の説明だけで無く善し悪しも書いてあって、良く参考にしています。今から買う人は改訂版を買ってください。
ゼロから作るDeep Learning ❹ ―強化学習編 単行本(ソフトカバー)
https://www.amazon.co.jp/dp/4873119758/
ゼロから作るシリーズをやっている人は、こっちもお勧め。コードが詳しめになっているのと、DQNの説明が詳しいのがうれしい。コードの説明はこっちの方が詳しいので、Python苦手な人はこっちの方が良いかも。
強化学習(第2版)
https://www.amazon.co.jp/dp/4627826621/
Coureraのコースで使う教科書です。原書はダウンロードできるので、英語に自信がある人は購入しなくてい良いでしょうが、普通はあった方が良いですね。教科書のここみろとか、指示があるのでずっと手元に置いておきましょう。
Courseraの強化学習コース
先生はこのお二人です。お二人は人生のパートナーとのこと。 時々二人の寸劇が入るのですが、女性の先生はノリノリなんだけど、男性の先生は真面目すぎてニヤニヤしてしまいます。
Reinforcement Learning Specializationコースなので全部で4つのコースがあります。教科書を順番に前からやっていくので、順番にやらないと意味が無いです。
Fundamentals of Reinforcement Learning
バンディット問題から始まって、基本的なポリシーイテレーションやバリューイレテーションを学びます。上に紹介した本を読んでおけば特に問題は無いかと。
教科書にこういう説明が出てきて、理解度を測るクイズと、Pythonでのコーディングがあります。Pythonのコーディングは、ほぼ穴埋めで、何を更新するか、その値はどこから持ってくるのか、最大値なのか期待値なのか・・等に気をつけてやれば大丈夫です。
Sample-based Learning Methods
ここからサンプルベースのモンテカルロ法が出てきます。モンテカルロは比較的詳しく説明されていると思いますが、その派生形は違いだけが説明されます。
ここでもこういうのをやります。
Prediction and Control with Function Approximation
ニューラルネットワークや、タイルを使ったコーディングテクニックがでてきます。ここは面白かったです。教科書ではよくわからなかったモデルの意味なども動画で良くわかるようになりました。タイルを使ったコーディングがいまいち他のところで見たことないんだけど、やっぱりDeep Learningに駆逐されているのかなとも思いました。ちょっとだけガウス分布を使って推論する話題があって、これだ!と思いましたが、あまり突っ込んでは説明されてませんでした。残念。
プログラミングの課題は、「全部いっしょじゃないですか~」って言いたくなるくらい同じような事をします。NNの計算とかSotmaxとか入るけど、結局は、更新する値をどこから持ってきて、どういう計算して、どのタイミングで更新するかだけ。
A Complete Reinforcement Learning System (Capstone)
最後はちょっと先の話をしながら、プログラミングをするんですが、だんだん用意されている単体テストが雑になってきて、はまると間違っている場所がわからなくなります。ここで始めてフォーラムを見ましたが、間違い見つけるのに2日かかったとか、辛い意見が多かったです。
あまりやりきった感も無く、もうちょっとなんとかならなかったのかなと思いました。
まとめ
始める前は、DQNからBCまでの間を埋めたかったのが、終わってみればDQNまで行かなかったので、当初の目的は達成できず。でも強化学習の用語や考え方は自信つきました。
学ぶ内容くらい始める前に確認しろとも思うんですが、勉強にあんまり効率を求めるの違うと思うので、楽しく最後までできて良かったです。わかりやすい翻訳をしてくださった方にも感謝です。
次は、強化学習の本から、Couseraでやらなかったところを拾っていきたい。