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

值函数近似(value funtion approximation)

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

1 函数拟合状态值

1.1 目标函数(object funtion)

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

1.2 SGD 进行优化参数

为了使目标函数最小,用 SGD 方法更新参数

1.3 值函数选择

值函数相对参数可以选择线性也可以是非线性的。
线性的例如:

v^(s,w)=[ss21][abc]\hat v(s,w) = \begin{bmatrix} s&s^2&1 \end{bmatrix} \begin{bmatrix} a\\ b\\ c \end{bmatrix}

其中矩阵[ss21]\begin{bmatrix}s&s^2&1\end{bmatrix}称为特征向量有很多种取法。

2 函数拟合动作值

道理同上

2.1 Sarsa 结合函数拟合

将 Q-table 的更新,换成值函数参数更新wt+1=wt+αt(rt+1+γq^(st+1,at+1,wt)q^(st,at,wt))wq^(st,at,wt)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)

2.2 Q-learning 结合函数拟合

将 Q-table 的更新,换成值函数参数更新wt+1=wt+αt(rt+1+γmaxaq^(st+1,a,wt)q^(st,at,wt))wq^(st,at,wt)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)

3 DQN(Deep Q Network)

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

3.1 两个函数(two Network)

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

3.2 经验回放(experience replay)

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