[[機械学習]] *概要 [#u3c52899] -ロボットって教科学習っぽい *目次 [#p36907b9] #contents *疑問 [#o1687c96] -禁じ手ってどう学ばせるの? *参考 [#vc119e8c] -[[OXゲームAI>http://yamaimo.hatenablog.jp/entry/2015/10/18/200000]] -[[やまいもさんの強化学習について学んでみた>http://yamaimo.hatenablog.jp/entry/2015/10/15/200000]] *用語定義 [#o73a33ad] // 備忘録: 集合mathcal, 整数実数などmathbb, ベクトルmathbf // $\mathop{\mbox{argmax}}$ -$t$回目に状態$s_t$にいる時に行動$a_t$を行って、状態$s_{t+1}$になると報酬$r_{t+1}$がもらえる。 -表現がconfusingすぎる |数式|用語| |$r_t \in \mathbb{R}$ |t回目に、エージェントが実際に得る報酬の''確率変数''。これは状態$s$, 状態$s'$, 行動$a$の3次元の自由度がある。実際には、以下の$\mathcal{P}, \mathcal{R}$の確率-報酬、状態が確定する。| |$\mathcal{P}_{s, s'}^{a} \in \mathbb{R}$ |状態$s$から状態$s'$に行動$a$で移動する、確率。確定値。これは環境がそうなっている。| |$\mathcal{R}_{s, s'}^{a} \in \mathbb{R}$ |状態$s$から状態$s'$に行動$a$で移動した時の、報酬。確定値。これは人が設計する| |$\mathcal{R}_t = \sum_{i=t+1}^{\inf} \gamma^{i-t-1} r_{i}$ |収益。t回目に行動$a_t$を選択した時に、最終的に得られる報酬の和の''確率変数''。| |$\pi_t(s, a) : \mathcal{S} \times \mathcal{A} \rightarrow [0, 1]$, $\sum_{a} \pi_t(s, a) = 1$ |t回目に、状態$s$で行動$a$を取る確率| |$Q_t(s, a) : \mathcal{S} \times \mathcal{A} \rightarrow \mathbb{R}$ |状態$s$で行動$a$を取った時に得られる報酬の期待値| |$\mathbf{Q}_{s, a}^\pi = E[R_t ; s_t, a_t] \in \mathbb{R}^{\mathcal{S} \times \mathcal{A}}$ |状態$s$で行動$a$取ったあと、方策$\pi$で遷移した時の収益の期待値| |$\mathbf{V}_s^\pi = E[R_t ; s_t] = \sum_{a \in \mathcal{A}(s)} \pi(s, a) Q^\pi_{s, a} \in \mathbb{R}^{\mathcal{S}}$ |状態$s$から方策$\pi$で遷移した時の収益の期待値| -グリーディ --$\pi(s, a)$が確率ではない=状態$s$に対する最適な行動$a$が一意に決まる *分類 [#z4e0912b] -[[まとめ>http://yamaimo.hatenablog.jp/entry/2015/10/15/200000]] -状態モデルがわかっている場合 --Bellman方程式に関して、動的計画法を行う --グリーディ、すなわち方策$\pi(s, a)=\pi(s)$としても問題ないことが証明できるらしい。 ++方策反復 ++価値反復(細かく更新できる) -状態モデルがわからない場合(モンテカルロ) --ES(開始点探査)を前提する場合 ---モンテカルロ-ES(方策$\pi(s, a)$はグリーディ) --ESを前提しない場合 ---方策オン型モンテカルロ制御(方策は$\epsilon$グリーディ) ---方策オフ型モンテカルロ制御(推定方策$\pi(s, a)$はグリーディ、挙動方策$\pi'(s, a)$は$\epsilon$グリーディ) -状態モデルがわからない場合(TD法) --方策オン型制御: Sarsa法 --方策オフ型制御: Q-learning --nステップ先まで見ることで、TD法とモンテカルロ法の間を取る方法: TD(λ)法というのがある(Sarsa(λ)や、Q(λ)) ---WatkinsのQ(λ)については、あまり適格度トレースの恩恵を受けること出来ないみたいで、学習速度はQ学習からあまり改善されないらしい。一方、PengのQ(λ)はSarsa(λ)法と同程度の性能は出るものの、実装が複雑らしい *疑問 [#pe43ccea] -$\mathcal{R}^{a}_{ss'}$ はなんで期待値なの?$r_{t+1}$って確率変数ではなく、確定しないのでは?([[これ>http://yamaimo.hatenablog.jp/entry/2015/09/03/200000]])→確率変数です --[[ここ>http://yamaimo.hatenablog.jp/entry/2015/08/19/200000]]でも、報酬は期待値として表現されてはいない --n本椀バンディットを想定すると、「状態Sで、i番目のバンディットを試して、状態Sになった時に得られる報酬」は、エージェントから見るとスロットはランダムなので、$r_{t+1}$は確率変数である。(n本椀バンディットでは、状態は1個しかない。これをSと表している。) -「方策が決定論的だと、探査が行われない状態行動対が出てきてしまうことが考えられる。そこで、知識利用と探査をバランス良く行うために、工夫が必要になってくる。」の意味は? -終端状態についてはどうするの? --[[ただし、s′が終端状態の場合、Qs′,a′は0とする。>http://yamaimo.hatenablog.jp/entry/2015/10/16/200000]] -終端条件とは --そもそも状態モデルがわかっている学習系(モンテカルロ, Sarsa, Q-learning)は、終端条件を明示的に与えているはずなので問題ない。 --動的計画法系は?→仮説:終端条件にはアクションがない -なんでモンテカルロには割引率があったりなかったりするの? --そもそも割引率は無限回足しあわせの発散を含む目的だったから。 -[[このモンテカルロ法>http://yamaimo.hatenablog.jp/entry/2015/09/30/200000]]、Tの幅が一定ではないように見えるけど大丈夫?? --なんか短いものも入ってくる、と考えると、「勝手に最近のものを重視するように重み付けされている」と解釈することもできそう *ポリシーの作り方 [#sf64da2b] -$\pi_t(s, a): \mathcal{S} \times \mathcal{A} \rightarrow [0, 1]$は、$Q_t(s, a): \mathcal{S} \times \mathcal{A} \rightarrow \mathbb{R}$によって恣意的に決める --グリーディ: $Q_t(s, a)$が最も高い行動$a$のみ選ぶ --$\epsilon$グリーディ: $Q_t(s, a)$が最も高い行動$a$のみ選ぶ --soft max: $Q_t(s, a)$を温度で重み付けした確率で選ぶ *勉強 [#ee1f86c5] -開始点探索の前提 --決定論的方策の学習で、状態行動対作成のためにそれ自身を使ってしまうと、ループしたりして出てこない状態が現れる --なので、状態行動対作成の時だけ、ソフトを使う必要がある。 *Tips [#k62f72d2] -Q学習の方は推定方策と挙動方策が分かれているので、理論的には解析がしやすいらしい。そういった意味で、Q学習は重要とのこと。 *2人対戦ゲーム [#peb4fce3] -エージェントを2体作る必要がある(prev_stateを持つ必要があるので) -報酬は、最後決まった時の報酬、''と!''その一つ前の手を相手に-1をかけて報酬を与える -状態観測は、自分がやった行動の結果…''ではなく!''相手の手が終わった後の状態 *DQN [#h4f9a452] -リプレイバッファはステップごとだから、相手のも自分のもの突っ込める。 --そもそも時間的連続な教科学習へのアンチテーゼみたいなところあるので、別に連続していなくてもいいはず。 *chainerRL [#hddc0e3b] -envの抽象クラスがあった スーパーパラメータを振って、どれくらい学習速度が変わるのかの実験をしてみたいです…と言う人が多そうですが、僕は別にぶっちゃけどっっっっでもいいです。主に興味があるのは、別に手法に対しての優位性・スーパーパラメータへのロバストネスをどのように評価するのでしょうか?ということです。WGANの論文でそんなのを見た記憶があるけれど…。 lossとかaverage Qとかってどういう指標になるのでしょうか?あんまり何か見てても嬉しいことがないように思うのですが。 リプレイバッファに行動を貯めていないように見えるんですが、これでいいんですか? 2人対戦ゲームで、今回の実装のように「勝った時に+1, 負けた最後の手に-1」とするのは一般的でしょうか?少なくとも、負けた最後の手は報酬0と報酬-1が混在してよくなさそうです。どのように実装するのが普通でしょうか? 今回は禁止手がないゲームを実装しました。一方、禁止手があるゲームでは、ルール違反に対して-1の報酬を与えるなどの実装方法が考えられます。しかし、ルール違反を制限しながら強化学習することができれば、無駄にルールを学ぶ必要がなくなるので、学習が高速化すると思います。どのように実装すればよいのでしょうか? 途中から学習をやり直す方法ってどうすればよいでしょうか?ステップ数も一緒にsaveしなければならないと思います。 また、今回は状態離散1次元、出力離散3次元でした。今後は、状態が多次元、出力が連続、描画あり、学習中ハイパーパラメータ調整などを行いたいです。 複数プロセッサやGPGPUってどうやって設定するのでしょうか? |