On-policyとOff-policy
個人的に定義が曖昧な気がして,嫌だったので自分なりの解釈をまとめておく.
Off-policy
一般的にOff-policyは学習の過程で方策πの評価と更新を行わない. Off-policyの手法としてはQ-Learningなどが挙げられる.
On-policy
On-policyはOff-policyの逆で,学習の過程で方策πの評価と更新を同時に行う.
On-policyの手法としては動的計画法やSarsa,方策勾配法が挙げられる.
- 動的計画法 (DP: Dynamic programming):
- 状態行動列を用いて価値関数Qを更新した後,更新された価値関数Qを用いて方策πを更新する. 更新された方策πに基づいて行動を選択する.
- Sarsa:
- 状態行動列を用いて価値関数Qを更新し,任意の方策πに基づいて行動を選択する. 価値関数Qの更新の際には任意の方策πが用いられる.
動的計画法と方策勾配法はわかりやすい.動的計画法は更新されたQをもとに各状態が観測された時に取るべき行動がそれぞれ選択されるし, 方策勾配法も価値関数Qが最大となるように方策πを更新する.でもここで疑問.Sarsaって方策の評価と更新行ってるの?
実際にSarsaを実装してみたり,他の人のソースコードを見てみると,
行動選択の関数はグリーディ法やソフトマックス法,ボルツマン選択などであることが多い.
方策更新してないじゃん(そもそも自分の方策の更新の定義が間違っているのか?).
解釈
On-policyとOff-policyの違いは価値関数Qと"実際の"方策πが独立しているかどうかの違い.
Sarsaは方策を直接更新しない.だからQ-LearningなどのOff-policyの手法との違いはなんだ?と感じてしまっていた.
ここで,QlearningとSarsaの違いについてみてみる.
QLearningもSarsaも方策にはグリーディ法やソフトマックス法,ボルツマン選択などが使用される.この点については同じ.
一方で価値関数Qの更新の時はどうだろう.
QLearningでは,グリーディ選択により決まった行動により得られた価値を利用するのに対して,Sarsaでは,実際に次の状態で選択した行動により得られた価値を利用する.
Sarsaは価値関数Qを更新する時に実際に選択された方策πにより得られる値を使用している. つまり使用する方策(グリーディ法やソフトマックス法,ボルツマン選択など)を決定するが,実際の行動選択した時の結果に依存して価値関数Qが決まる. だから間接的に価値関数Qが方策πの影響を受けることになるので,Off-policyではなくOn-policyと言える.
このことからOn-Policyの場合はタスクに応じて価値関数Qの値が大きく異なることになり,方策の再利用が難しい.