今日は前々から話題にしていたDQN[1]の話です。
日本語の内容ですら難しくて理解できないので、ずっと強化学習から逃げ続けていたのですが、やっと一歩目を踏み込むことができました。
今日の記事は、論文の解説というよりは、間違っていたらどんどんツッコミを入れて欲しいという感じです。
論文も約6年半前のものですし、すでにネット上に分かりやすい記事が無数にアップされてる上、ほとんどのAI系の人は内容を知っていると思うので…
一応、この論文を読んだだけでは、基礎的な強化学習の内容を理解したことにはならないと思うので、今後も強化学習の勉強をして抑えていきたいです。
ずっと勘違いしていたこと
自分は、DQNのことを入力に対し、行動を出力するものだと思っていたのですが、「行動の価値」を評価する関数のことがDQNだと知りました。
Q学習(Q-Leaning)というものは、20世紀からある古の学習法なんですね。学習っていう名前が付くのでここがDeepな部分かと思っていました。
Deep Q-Learning ではQ学習で使用する式を誤差に設定し、うまいことQ-Networkを学習できるようにした、というのが一番のキモなんだと思います。 あとは、experience replayや、ε-greedyなどのテクニックの組み合わせが噛み合った感じでしょうか。
強化学習用語(ざっくり)
こういう新しい概念を勉強したときは、文字に起こすと自分の理解レベルを確認できるはずなので、書き起こしてみました。 (間違っていたらすみません。いつでも修正します。)
だいたいの言葉の定義は[2]からざっくり拾っています。
- 方策: ある状態のときどの行動を選ぶか、というルールのようなもの
- 報酬: ゲームならスコア。より多くの報酬を得られるような学習を行う
- 累積報酬: 未来の報酬を考慮した報酬の総和。未来の報酬には
1.0
未満の係数が累乗で掛けられ、時間が離れているほど影響が減る - 行動価値関数(action value function): 選択する行動がどれだけ報酬を得られるかを計算するための関数
- 状態価値関数(state value function): 今の状態がどれだけ報酬に近いかを計算するための関数
- マルコフ決定過程(MDP): 現在の状態と、その行動で確定するシステムの総称
- ベルマン方程式(Bellman equation): MDPに対して使用可能
- TD: temporal-difference(=時間差学習/時間的差分学習)
- ε-greedy法: 一様乱数εにより、エージェントがランダムな行動を起こすようにする
- Sarsa: Q学習とは別の強化学習の学習アルゴリズム。方策オン
- 価値反復法(value iteration): 最適な行動を取り続けたさいの報酬を計算
- Q学習: 方策オフ。Sarsa との違いは、ε-greedyの選択とは関係なしに常に報酬が最大になるような行動を選択(したことにする?)。結局Qって何のQなんだ?
- experience replay: 学習の安定化のため、DQNのインプット/アウトプットをメモリに蓄積しておき、学習時にそれを再利用するテクニック。これ自体は1997年に提案されている
やっぱり書き起こすと怪しい部分が露呈しますね…まだまだ気付いてない勘違いとか多そう。
実装することで、修正できる知識も多いと思うので、一旦実装までやって肌感を知りたいと思います。
まとめはこちら↓。今の方法だと編集や検索に難があるので方法を変えるかも。
明日は何もしません。ちょっと目を休めたいのでTwitterにも現れないと思います。
参考文献
- [1] Minh et al., "Playing Atari with Deep Reinforcement Learning", 2015.
- [2] 滝口直樹、『つくりながら学ぶ!深層強化学習PyTorchによる実践プログラミング』, 2018.
今まで支援していただいた方
- うぇるち さん (HP, note)
- threecourse さん (blog)
- H. NOMATA さん
- 俵 さん
- あるふぁ さん
- ざぶろう さん
- じんべえざめ さん
- watarumon さん (blog)
- カレーちゃん さん (blog, note, Youtube)
- himako さん (HP)
- あららぼ さん (blog(game), blog(tech))
- すみやき さん (blog)
- しちや さん
名前あまり公開されたくない…などの要望があればTwitter等から連絡を頂ければ対応します! 並びは支援して頂いた順番です。