到目前为止,我们仅仅是考虑 state value estimation的问题,也就是我们希望
v ^ ≈ v π \hat{v}\approx v_{\pi} v^≈vπ
为了搜索最优策略,我们需要估计action values。
我们知道:
“TD learning” with “value function approximate”:
w t + 1 = w t + α t [ r t + 1 + γ v ^ ( s t + 1 , w t ) − v ^ ( s t , w t ) ] ∇ w v ^ ( s t , w t ) \color{red}{w_{t+1}=w_t+\alpha_t\left[r_{t+1}+\gamma\hat{v}(s_{t+1},w_t)-\hat{v}(s_t,w_t)\right]\nabla_w\hat{v}(s_t,w_t)} wt+1=wt+αt[rt+1+γv^(st+1,wt)−v^(st,wt)]∇wv^(st,wt)
那么:
“Sarsa算法” with “value function approximate”:
w t + 1 = w t + α t [ r t + 1 + γ q ^ ( s t + 1 , a t + 1 , w t ) − q ^ ( s t , a t , w t ) ] ∇ w q ^ ( s t , a t , w t ) \color{red}{w_{t+1}=w_t+\alpha_t\left[r_{t+1}+\gamma\hat{q}(s_{t+1},a_{t+1},w_t)-\hat{q}(s_t,a_t,w_t)\right]\nabla_w\hat{q}(s_t,a_t,w_t)} wt+1=wt+αt[rt+1+γq^(st+1,at+1,wt)−q^(st,at,wt)]∇wq^(st,at,wt)
这个上一节介绍的TD算法是一样的,只不过将 v ^ \hat{v} v^换成了 q ^ \hat{q} q^
为了寻找最优策略,我们将policy evaluation(上面算法做的事儿)和policy improvement结合。
下面给出Sarsa with function approximation的伪代码:
对每一个episode我们做如下的操作:
-
如果当前的这个状态 s t s_t st 还不是 target state,那我们做如下的操作,这个任务实际上就是对应我从一个状态出发,然后我要到目标状态找到一个好的路径过去就可以。所以第一步是要生成数据:
- 我在 s t s_t st 的时候我要根据这个 π t ( s t ) π_t(s_t) πt(st) 策略然后采用 action a t a_t at,然后和环境进行交互得到 r t + 1 , s t + 1 r_{t+1},s_{t+1} rt+1,st+1,之后在 s t + 1 s_{t+1} st+1 根据在 s t + 1 s_{t+1} st+1 的策略 π t ( s t + 1 ) π_t(s_{t+1}) πt(st+1) 采用 action a t + 1 a_{t+1} at+1。
- 然后根据这个数据下面我们来做value update:
w t + 1 = w t + α t [ r t + 1 + γ q ^ ( s t + 1 , a t + 1 , w t ) − q ^ ( s t , a t , w t ) ] ∇ w q ^ ( s t , a t , w t ) w_{t+1}\quad=\quad w_{t}\quad+\quad\alpha_{t}\left[r_{t+1}+\gamma\hat{q}(s_{t+1},a_{t+1},w_{t})-\hat{q}(s_t,a_t,w_t)\right]\nabla_w\hat{q}(s_t,a_t,w_t) wt+1=wt+αt[rt+1+γq^(st+1,at+1,wt)−q^(st,at,wt)]∇wq^(st,at,wt)
注意这儿我们并不是直接更新 q ^ ( s t + 1 , a t + 1 ) \hat{q}(s_{t+1},a_{t+1}) q^(st+1,at+1),不是要计算 q ^ ( s t + 1 , a t + 1 ) \hat{q}(s_{t+1},a_{t+1}) q^(st+1,at+1)应该等于什么,而是我们要更新它的这个权重参数 w w w,这是和之前tabular的Sarsa的一个唯一的区别。
-
有了这个之后我们就可以来做policy update,这个和之前的tabular的Sarsa是一模一样的。也就是说我会选择在 s t s_t st 所有action当中所对应的action value最大的那个action,然后我会给它一个比较大的概率,这里边的策略是ε-Greedy,其它的action会给一个比较小的一个概率。
- 值得注意的是在之前在tabular的情况下,其实我可以直接去索引就可以得到这个 q ^ ( s t + 1 , a t + 1 ) \hat{q}(s_{t+1},a_{t+1}) q^(st+1,at+1);
- 现在我需要去算一下,把这个s和所对应的这个a代到这个函数里边去算一下这个函数值 q ^ ( s t + 1 , a t + 1 ) \hat{q}(s_{t+1},a_{t+1}) q^(st+1,at+1) 然后再做比较;
参考资料:
【强化学习】强化学习数学基础:值函数近似
6. 值函数近似(Value Function Approximation)
第六讲 价值函数的近似法(Value Function Approximation)