深層強化学習1　強化学習概論

[Aidemy](https://aidemy.net/)　2020/11/21
#はじめに
　こんにちは、んがょぺです！バリバリの文系ですが、AIの可能性に興味を持ったのがきっかけで、AI特化型スクール「Aidemy」に通い、勉強しています。ここで得られた知識を皆さんと共有したいと思い、Qiitaでまとめています。以前のまとめ記事も多くの方に読んでいただけてとても嬉しいです。ありがとうございます！
　今回は、深層強化学習の一つ目の投稿になります。どうぞよろしくお願いします。

＊本記事は「Aidemy」での学習内容を「自分の言葉で」まとめたものになります。表現の間違いや勘違いを含む可能性があります。ご了承ください。

今回学ぶこと
・（復習）強化学習について
・強化学習の手法
・DQN

#（復習）強化学習について
・__強化学習__は機械学習の一手法である。
・強化学習の構成要素としては次のようなものがある。行動する主体である__エージェント__、行動の対象である__環境__、環境に対する働きかけを__行動__、それにより変化する環境の各要素が__状態__である。また、行動により即時に得られる評価のことを__報酬__、最終的に合計でどれぐらいの報酬を得られたのかを示すのが__収益__である。
・強化学習の目的は、この__収益の総和を最大化すること__である。
・強化学習のモデルとしては、エージェントの行動選択の__方策__について、__「現在の環境の状態を入力」__、__「行動を出力」__として表現する。そしてこの行動は、__より高い報酬が得られるようなものを選択する__。
・この「より高い報酬」について、報酬の内容が全て既知だったら、その中から最も報酬が高いものを選べば良いが、実際にはこれが事前に与えられているケースは少ない。このような時は__「探索」__を行うことで選択したことのない行動も行って情報を収集することが必要である。これにより情報を集めたら、その中から最も報酬が高いと推測した行動を選択すると良い。これを__「利用」__という。

#強化学習の方策
##(復習)greedy手法
・上記で示した探索と利用をどのように行っていくかという__方策__について、その問題に即した方策をとることが重要になってくる。
・例えば報酬の期待値が全て既知である場合は、期待値の最も大きい行動のみを選択するという__「greedy手法」__を選択するのが最も良い方策となる。
・しかし先述の通り、一般的には報酬が全て既知であるケースは少ないため、このような時は、得られる報酬が少ないと分かっていても別の行動を選択する必要がある。この方策の一つに__「ε-greedy手法」__がある。これは__確率εで探索を行い__、__1-εで利用を行う__というものである。__試行回数に基づいてεの値を小さくする__ことで、利用の割合が増えていくため、効率よく探索できるようになる。

##ボルツマン選択
・ε-greedy手法は__ある程度確率的に行動を選択する__方策であった。これと同じようなものとして__「ボルツマン選択」__という方策がある。
・ボルツマン選択は選択確率が以下の__ボルツマン分布__に従うためこのように呼ばれる。

![スクリーンショット 2020-11-18 11.58.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/42d9cf56-fa77-b8a0-2219-a64bea756b2b.png)

・この式のうち__「T」__は__温度関数__と呼ばれるもので、__「時間経過とともに0に収束する関数」__のことである。この時、__T→無限の極限__で全ての行動を__同じ確率で選択__し、__T→0の極限__で__報酬の期待値が最大のものを選びやすくなる__というものである。
・つまり、__初めのうちはTが大きいため行動選択がランダム__であるが、時間経過により__Tが0に近づくとgreedy手法のように選択する__ようになる。

##DQN
・__DQN__とは、Q学習の__Q関数を深層学習で表したもの__である。__Q関数__とは__「行動価値関数」__のことであり、__Q学習__はこれを推定する強化学習のアルゴリズムである。
・__行動価値関数__は__「状態sと行動a」__を入力として、__最適方策を行った時の報酬の期待値__を計算する関数である。行われることとしては、試しに__ある行動を行って得られた行動価値__と、__一つ先の状態で可能な行動を行って得られた行動価値__を__合算__して、今の行動価値との__差__をとって、少しだけ（学習率を調整して）関数を更新する、ということ行われる。
・実際には状態sと行動aは全ての組み合わせについて__テーブル関数__で表されるが、問題によってはこの__組み合わせの量が膨大になる__という恐れがある。
・このような場合に、DQNで、このQ関数を深層学習によって関数近似することで解決できる。

・__DQNの特徴__としては、以下のようなものがある。詳しくは次のChapterでみる。
　・__Experience Replay__:__データの時系列をシャッフル__して時系列の相関に対処する
　・__Target Network__:正解との誤差を計算し、モデルが正解に近くなるように調整する。データからランダムにバッチを作成し、__バッチ学習を行う__。
　・__CNN__:__畳み込み__によって画像にフィルタをかけ変換する。
　・__clipping__:報酬について、負なら__-1__、正なら__+1__、なしなら__0__とする。

##Experience Replay
・例えばゲームをプレイしているエージェントが得られる入力には、__時系列の性質がある__。時系列の入力には__強い相関がある__ため、学習に時系列の入力をそのまま使うと、__学習結果に偏りが生じ、収束性が悪くなる__。これを解決するのが、__Experience Replay__と呼ばれるものである。これは、__状態や行動、報酬__を入力として、全て、あるいは一定個数記録しておき、そこから__ランダムに呼び出して学習させる__手法である。

![スクリーンショット 2020-11-18 12.44.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/0a9070c2-b623-3322-edfe-2f72c15dec03.png)

#まとめ
・強化学習では__収益の総和を最大化する__ために、__探索__と__利用__が行われる。これをどのように行なっていくか、というのが__方策__である。
・この方策について、報酬の期待値がわかっている状態の時に有効なのが__「greedy手法」__である。これは、__最も期待値の高い行動のみを選択する__というものである。
・報酬の期待値が全て既知でない場合にも対応したものが__「ε-greedy手法」__である。この方策は確率εで探索を、1-εで利用を行うというものである。
・同様の方策として、__ボルツマン選択__というものがある。時間経過で値が0に収束していく__温度関数T__を使ったボルツマン分布に従って選択されるため、最初はランダムに行動が選ばれるが、時間経過につれて最も期待値の高い行動を選択するようになる。
・__DQN__は__Q関数（行動価値関数）__を__深層学習__で表したものである。行動価値関数は状態sと行動aを入力として報酬の期待値を算出するのであるが、sとaは全ての組み合わせをテーブル関数で表すと量が膨大になってしまうため、この手法が使われる。
・DQNの特徴の一つに__「Experience Replay」__というものがある。これは、入力データの__時系列の性質を除去する__ために、状態、行動、報酬について、__ランダムに取り出す__ということを行う。

今回は異常です。ここまで読んでいただきありがとうございました。