值函数近似(value funtion approximation)
为了减少存储参数,应对无穷多状态或者动作,以及增强泛化能力(面对没有访问过的状态,也能得出状态值),可以使用函数去拟合这些值代替用表格形式存储参数。
1 函数拟合状态值
1.1 目标函数(object funtion)
为了使函数v^(s,w)能够找到最优的参数w去拟合状态值,先设计出目标函数J(w)=E[21(vπ(S)−v^(S,w))2],并使其最小。
1.2 SGD 进行优化参数
为了使目标函数最小,用 SGD 方法更新参数
1.3 值函数选择
值函数相对参数可以选择线性也可以是非线性的。
线性的例如:
v^(s,w)=[ss21]⎣⎢⎡abc⎦⎥⎤
其中矩阵[ss21]称为特征向量有很多种取法。
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)
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)
3 DQN(Deep Q Network)
原理于2.2节相同,将q^的函数形式改成非线性的神经网络,但是为了能够更好利用深度学习的计算工具进行几个方面的改进。
3.1 两个函数(two Network)
目标函数J(w)=E[(Rt+1+γmaxaQ(St+1,a,wT)−Q(St,At,w))2],因为maxaQ(St+1,a,wT)的导数难求,所以将其分为两个不同网络分别是 target Network:Q(St+1,a,wT) 和 main Network:Q(St,At,w)。当进行反向求梯度时保持 target network 不变,只更新 main network,更新一定次数后再将 main network 参数赋值给 target network。在实际网络设计中把Rt+1+γmaxaQ(St+1,a,wT)称为目标值yT,Q(St,At,w)称为当前值,损失函数就是l=yT−Q(St,At,w)
3.2 经验回放(experience replay)
在通过πb生成经验{st,at,rt+1,st+1}(experience buffer)后,随机选取小批量的数据就称为经验回放。这一步是非常关键的,因为目标函数是关于状态动作组合(s,a)的期望,而在没有先验知识的情况下,状态动作组合应该满足均匀分布,如果按照 episode 生成的顺序进行选取就无法满足该要求。
同时这个技巧也可以使 experience 反复利用,提高利用效率。