1、回顾
是t时刻的奖励,Return
依赖于从t时刻开始所有的动作A和状态S,动作A和状态S都是随机变量,动作A的随机性来自于policy函数
,动作是根据policy函数随机抽样得到的,状态S的随机性来自于状态转移函数p,新的状态是根据状态转移函数p随机抽样得到的。
的值可以反映未来奖励的总和,对
求未来t+1时刻开始所有的动作和状态的期望从而排除掉随机性,得到的函数为action value function,动作价值函数
,它与
和
以及
有关。
可以反映出当前状态
下做动作
的好坏程度
对关于
求最大化从而消除
的影响,得到optimal action-value function,最优动作价值函数
,它可以反映出不管用什么样的策略函数,要是agent在当前状态
下做出动作
,回报
的期望最大是
,它告诉我们基于当前状态
做出动作
的好坏程度,所以可以指导agent做决策。
2、Deep Q-Network(DQN)
2.1 DQN简介
使用神经网络Q(s,a;w)来拟合函数。该神经网络的参数是w,输入是状态s,输出是对所有动作的打分。
例如,超级玛丽游戏中,可以把屏幕画面作为输入,用卷积网络将输入映射成一个特征向量,再通过全连接层将特征映射成输出向量(即对动作的打分),从结果可知,此时Mario应该向上跳。
此时,可以用DQN来操作agent玩游戏。当前观测到状态,DQN以
为输入对所有动作打分,选出分数最高的动作
,agent做出
这个动作后,环境用状态转移函数来随机生成状态
,同时环境也会告知当前动作对应的
(奖励是强化学习当中的监督信号,DQN靠奖励来训练),有了新的状态
,DQN再对所有动作打分,agent选择分数最高的动作
,如此一直重复这样的过程一直到游戏结束。
2.2 DQN训练——Temporal Difference(TD) Learning
先举例理解。
想要开车从纽约到亚特兰大。模型Q(w)可以预测出行的时间开销。
假设一开始模型预测为1000分钟。
此时如何训练模型Q呢?首先,出发前用模型做一次预测q=Q(w),模型预测的结果为q=1000;到亚特兰大之后可以知道实际的时间开销y,y=860。于是可以求得损失Loss,从而用梯度下降法更新模型参数w。这个方法比较naive,只有完成一次旅途才能对模型进行一次更新。
此时问题来了,假如不完成旅行,走到中途就不继续前行,这种情况下能不能对模型进行更新呢?
答案是:可以。
从纽约去往亚特兰大会途径华盛顿。
出发时,模型预测从纽约到亚特兰大会花1000;到达华盛顿时,发现实际已经消耗300(真实观测);此时模型再次预测从华盛顿到亚特兰大会花600。
此时,新的估计TD target y=300+600=900比一开始的估计1000更可靠,1000-900为TD error。可以把TD target y与模型最开始的估计计算损失,并采用梯度下降法更新模型参数w。
回归到使用TD算法来训练模型。
在深度强化学习中有如下公式:
式子中,式子左边是DQN在t时刻的估计,即未来奖励总和的期望;是真实观测到的奖励;式子右边第二项是DQN在t+1时刻的估计。
简单理解上述公式的来历(并非严格证明)。
已知:
可以得到:
那么:
于是:
其中: 是对
的预测值(相当于从纽约到亚特兰大所预测的时间),
是对
的预测值(相当于从华盛顿到亚特兰大所预测的时间)。
进一步:
所以,整体思路:在t时刻,模型预测值为;在t+1时刻,观测到了真实的奖励
,观测到了状态
,DQN可以预测在当前状态下最优动作
带来的回报,即求Q关于a的最大化;此时
就是TD target。于是可以得到损失函数,从而通过梯度下降法进行参数更新。
3. TD算法总结
TD算法迭代一次完成:
1. 观察当前状态和已经执行的动作
;
2. 使用DQN进行一次预测:,其中输入是当前状态,输出是动作
的打分;
3. 通过反向传播对DQN求导:;
4. (agent已经做出动作)环境更新状态得到,并给出奖励
;
5. 计算TD target:
6. 通过梯度下降法更新模型参数w:
参考:北大王树森视频