强化学习——值函数近似(八)

值函数近似(value funtion approximation)

为了减少存储参数,应对无穷多状态或者动作,以及增强泛化能力(面对没有访问过的状态,也能得出状态值),可以使用函数去拟合这些值代替用表格形式存储参数。

1 函数拟合状态值

1.1 目标函数(object funtion)

为了使函数 v ^ ( s , w ) \hat v(s,w) v^(s,w)能够找到最优的参数 w w w去拟合状态值,先设计出目标函数 J ( w ) = E [ 1 2 ( v π ( S ) − v ^ ( S , w ) ) 2 ] J(w) = E[\frac{1}{2}(v_\pi(S) - \hat v(S,w))^2] J(w)=E[21(vπ(S)v^(S,w))2],并使其最小。

1.2 SGD 进行优化参数

为了使目标函数最小,用 SGD 方法更新参数
w t + 1 = w t − α t ∇ w J ( w ) = w t − α t E [ ∇ w 1 2 ( v π ( S ) − v ^ ( S , w ) ) 2 ] = w t + α t E [ ( v π ( S ) − v ^ ( S , w ) ) ∇ w v ^ ( S , w ) ] = w t + α t ( v π ( s t ) − v ^ ( s t , w t ) ) ∇ w v ^ ( s t , w t ) (因为 S G D ) = w t + α t ( r t + 1 + γ v ^ ( s t + 1 , w t ) − v ^ ( s t , w t ) ) ∇ w v ^ ( s t , w t ) (因为 v π ( s ) 无法得到,用 T D 中的估计值代替) \begin{align} w_{t+1} &= w_t - \alpha_t \nabla_w J(w)\\ &= w_t - \alpha_t E[\nabla_w \frac{1}{2}(v_\pi(S) - \hat v(S,w))^2]\\ &= w_t + \alpha_t E[(v_\pi(S) - \hat v(S,w))\nabla_w \hat v(S,w)]\\ &= w_t + \alpha_t (v_\pi(s_t) - \hat v(s_t,w_t))\nabla_w \hat v(s_t,w_t)& (因为 SGD)\\ &= w_t + \alpha_t (r_{t+1} + \gamma \hat v(s_{t+1},w_t) - \hat v(s_t,w_t))\nabla_w \hat v(s_t,w_t)& (因为v_\pi(s)无法得到,用TD中的估计值代替)\\ \end{align} wt+1=wtαtwJ(w)=wtαtE[w21(vπ(S)v^(S,w))2]=wt+αtE[(vπ(S)v^(S,w))wv^(S,w)]=wt+αt(vπ(st)v^(st,wt))wv^(st,wt)=wt+αt(rt+1+γv^(st+1,wt)v^(st,wt))wv^(st,wt)(因为SGD(因为vπ(s)无法得到,用TD中的估计值代替)

1.3 值函数选择

值函数相对参数可以选择线性也可以是非线性的。
线性的例如:
v ^ ( s , w ) = [ s s 2 1 ] [ a b c ] \hat v(s,w) = \begin{bmatrix} s&s^2&1 \end{bmatrix} \begin{bmatrix} a\\ b\\ c \end{bmatrix} v^(s,w)=[ss21] abc
其中矩阵 [ s s 2 1 ] \begin{bmatrix}s&s^2&1\end{bmatrix} [ss21]称为特征向量有很多种取法。

2 函数拟合动作值

道理同上

2.1 Sarsa 结合函数拟合

将 Q-table 的更新,换成值函数参数更新 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} = w_t + \alpha_t (r_{t+1} + \gamma \hat q(s_{t+1},a_{t+1},w_t) - \hat q(s_t,a_t,w_t))\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)

2.2 Q-learning 结合函数拟合

将 Q-table 的更新,换成值函数参数更新 w t + 1 = w t + α t ( r t + 1 + γ max ⁡ a q ^ ( s t + 1 , a , w t ) − q ^ ( s t , a t , w t ) ) ∇ w q ^ ( s t , a t , w t ) w_{t+1} = w_t + \alpha_t (r_{t+1} + \gamma \max_a \hat q(s_{t+1},a,w_t) - \hat q(s_t,a_t,w_t))\nabla_w \hat q(s_t,a_t,w_t) wt+1=wt+αt(rt+1+γmaxaq^(st+1,a,wt)q^(st,at,wt))wq^(st,at,wt)

3 DQN(Deep Q Network)

原理于2.2节相同,将 q ^ \hat q q^的函数形式改成非线性的神经网络,但是为了能够更好利用深度学习的计算工具进行几个方面的改进。

3.1 两个函数(two Network)

目标函数 J ( w ) = E [ ( R t + 1 + γ m a x a Q ( S t + 1 , a , w T ) − Q ( S t , A t , w ) ) 2 ] J(w) = E[\big(R_{t+1} + \gamma max_a Q(S_{t+1},a,w_T) - Q(S_t, A_t, w)\big)^2] J(w)=E[(Rt+1+γmaxaQ(St+1,a,wT)Q(St,At,w))2],因为 m a x a Q ( S t + 1 , a , w T ) max_a Q(S_{t+1},a,w_T) maxaQ(St+1,a,wT)的导数难求,所以将其分为两个不同网络分别是 target Network: Q ( S t + 1 , a , w T ) Q(S_{t+1},a,w_T) Q(St+1,a,wT) 和 main Network: Q ( S t , A t , w ) Q(S_t, A_t, w) Q(St,At,w)。当进行反向求梯度时保持 target network 不变,只更新 main network,更新一定次数后再将 main network 参数赋值给 target network。在实际网络设计中把 R t + 1 + γ m a x a Q ( S t + 1 , a , w T ) R_{t+1} + \gamma max_a Q(S_{t+1},a,w_T) Rt+1+γmaxaQ(St+1,a,wT)称为目标值 y T y_T yT Q ( S t , A t , w ) Q(S_t, A_t, w) Q(St,At,w)称为当前值,损失函数就是 l = y T − Q ( S t , A t , w ) l = y_T - Q(S_t, A_t, w) l=yTQ(St,At,w)

3.2 经验回放(experience replay)

在通过 π b \pi_b πb生成经验 { s t , a t , r t + 1 , s t + 1 } \{s_t,a_t,r_{t+1},s_{t+1}\} {st,at,rt+1,st+1}(experience buffer)后,随机选取小批量的数据就称为经验回放。这一步是非常关键的,因为目标函数是关于状态动作组合(s,a)的期望,而在没有先验知识的情况下,状态动作组合应该满足均匀分布,如果按照 episode 生成的顺序进行选取就无法满足该要求。
同时这个技巧也可以使 experience 反复利用,提高利用效率。

4 代码链接

(GitHub)[https://github.com/wizard-lhx/rl-lesson-code]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值