问:强化学习的目标是什么?
问:用什么办法实现最大化累计奖励?
问:最优动作价值函数是怎么获得的?
DQN(Deep Q-Network, DQN)的原理: 用神经网络 Q ( s , a ; w ) Q(s,a;w) Q(s,a;w) 来近似一个价值函数 Q ⋆ ( s , a ) Q^\star(s,a) Q⋆(s,a) 。
Q ⋆ ( s , a ) Q^\star(s,a) Q⋆(s,a) 相当于一个“先知”,他可以告诉我们“未来”的事情(注意,实际上它是告诉了价值函数的期望值)。假如我们有一个 Q ⋆ ( s , a ) Q^\star(s,a) Q⋆(s,a) 了,做决策我们就可以根据 Q ⋆ ( s , a ) Q^\star(s,a) Q⋆(s,a) 选择最佳的动作了,最佳的动作 a ⋆ = a r g m a x a Q ⋆ ( s , a ) a^\star=argmax_a Q^\star(s,a) a⋆=argmaxaQ⋆(s,a) 就是使价值函数 Q ⋆ ( s , a ) Q^\star(s,a) Q⋆(s,a) 值最大的那个动作 a ⋆ a^\star a⋆。
当DQN网络训练好以后,在状态 s t s_t st 时,DQN会知道向左会得到2000分,向右会得到1000分,向上会得到3000分,因此DQN就会选择得分最大的动作,即 Q ⋆ ( s t , a ) = Q ( s t , u p ) Q^\star(s_t,a) = Q(s_t,up) Q⋆(st,a)=Q(st,up)。
用 TD(Temporal Difference, TD)Learning 算法来训练DQN网络。
场景: 开车从纽约(NYC)去亚特兰大(Atlanta)。
现状: 构建了一个模型 Q ( w ) Q(w) Q(w) ,参数 w w w (注意参数 w w w 是未知的,需要学习),可以预测开车出行花费的时间。
步骤:
1)获取预测值: 出发前随机做一次预测(初始化预测),模型 Q ( w ) Q(w) Q(w) 的值 q = 1000 q=1000 q=1000 分钟(预测值)。
2)获取真实值: 到亚特兰大以后看一下手表,发现只用了 y = 860 y=860 y=860 分钟(真实值)。
3)构建损失函数,利用梯度下降法计算 w w w 的值:
3.1)损失函数公式: L = 1 2 ( 预测值 − 真实值 ) 2 = 1 2 ( q − y ) 2 L = \frac 1 2(预测值-真实值)^2=\frac 1 2(q-y)^2 L=21(预测值−真实值)2=21(q−y)2
3.2)梯度公式: G r a d i e n t = ∂ L ∂ w = ∂ L ∂ q ⋅ ∂ q ∂ w = ( q − y ) ⋅ ∂ Q ( w ) ∂ w Gradient=\frac{\partial L}{\partial w} = \frac{\partial L}{\partial q} \cdot \frac{\partial q}{\partial w} = (q-y) \cdot \frac{\partial Q(w)}{\partial w} Gradient=∂w∂L=∂q∂L⋅∂w∂q=(q−y)⋅∂w∂Q(w)
3.3)梯度下降法更新模型参数:
w t + 1 = w t − α ⋅ ∂ L ∂ w ∣ w = w t w_{t+1} = w_t - \alpha \cdot \frac{\partial L}{\partial w} | _{w=w_t} wt+1=wt−α⋅∂w∂L∣w=wt
梯度下降法减少了损失Loss,使预测值更接近真实值。
场景: 开车从纽约(NYC)去亚特兰大(Atlanta)。
步骤:
1)获取预测值: 出发前随机做一次预测(初始化预测),模型 Q ( w ) Q(w) Q(w) 的值 q = 1000 q=1000 q=1000 分钟(预测值)。
2)获取真实值: 现在已经从纽约到华盛顿了,看了一下手表,只花费了300分钟(真实值),同时预测从华盛顿到亚特兰大还有600分钟(预测值)。
于是,将300分钟(真实值)+600分钟(预测值)= 900分钟作为真实值(不完全真实,但也不完全虚假,起码有真实值的成分再里面),这个特殊的值叫做 TD target 。将 TD target 作为真实值计算损失函数,利用梯度下降法求解参数 w w w 。