TD学习如何训练DQN?(一)_

Value-Based Reinforcement Learning : 价值学习

2. 价值学习2.1 Deep Q-Network DQN

其实就是用一个神经网络来近似 (Q*) 函数。

agent 的目标是打赢游戏,如果用强化学习的语言来讲,就是在游戏结束的时候拿到的奖励总和 Rewards 越大越好。

a. Q-star Function

问题:假设知道了 (Q^*(s,a)) 函数,哪个是最好的动作?

显然,最好的动作是(a^* = mathop{argmax}limits_{a}Q^*(s,a)) ,

(Q^*(s,a))可以给每个动作打分,就像一个先知,能告诉你每个动作带来的平均回报,选平均回报最高的那个动作。

但事实是,每个人都无法预测未来,我们并不知道(Q^*(s,a))。而价值学习就在于学习出一个函数来近似(Q^*(s,a)) 作决策。

b. Example

对于不同的案例,DQN 的结构会不一样。

如果是玩超级玛丽

c. 用 DQN 打游戏

DQN 的具体执行过程如下:

分步解释:

2.2 TD 学习

如何训练 DQN ?最常使用的是 Temporal Difference Learning。TD学习的原理可以用下面这个例子来展示:

a. 案例分析

要开车从纽约到亚特兰大,有一个模型(Q(w))预测出开车出行的开销是1000分钟。这个预测可能不准,需要更多的人提供数据来训练模型使得预测更准。

问题:需要怎样的数据?如何更新模型。

缺点:这种算法比较 naive,因为要完成整个旅程才能完成对模型做一次更新。

那么问题来了:假如不完成整个旅行,能否完成对模型的更新?

可以用 TD 的思想来考虑这件事情。比如我们中途路过 DC 不走了,没去亚特兰大,可以用 TD 算法完成对模型的更新,即

b. 算法原理

换个角度来想,TD 的过程就是这样子的:

模型预测 NYC -> Atlanta = 1000, DC -> Atlanta = 600,两者差为400,也就是NYC -> DC = 400,但实际只花了300分钟预计时间与真实时间之间的差就是TD error:(delta = 400-300 = 100)。

TD 算法目标在于让 TD error 尽量接近 0 。

即我们用部分的真实 修改 部分的预测,而使得整体的预测更加接近真实。我们可以通过反复校准 可知的这部分真实 来接近我们的理想情况。

c. 用于 DQN(1) 公式引入

上述例子中有这样一个公式:$T_{NYCrightarrow ATL} approx T_{NYCrightarrow DC} + T_{DCrightarrow ATL} $

想要用 TD 算法,就必须要用类似这样的公式,等式左边有一项,右边有两项,其中有一项是真实观测到的。

而在此之前,在深度强化学习中也有一个这样的公式:(Q(s_t,a_t;w)=r_t+gamma cdot Q(s_{t+1},a_{t+1};w))。

公式解释:

左边是 DQN 在 t 时刻做的估计,这是未来奖励总和的期望,相当于 NYC 到 ATL 的预估总时间。右边 (r_t)是真实观测到的奖励,相当于 NYC 到 DC 。(Q(s_{t+1},a_{t+1};w)) 是 DQN 在 t+1 时刻做的估计,相当于 DC 到 ATL 的预估时间。(2) 公式推导

为什么会有一个这样的公式?

回顾 Discounted return:(U_t=R_t+gamma R_{t+1}+gamma^2 R_{t+2}+gamma^3 R_{t+3}+cdots)

提出 (gamma) 就得到$ = R_t + gamma(R_{t+1}+ gamma R_{t+2}+ gamma^2 R_{t+3}+cdots) $

后面这些项就可以写成(U_{t+1}),即 (=R_t+gamma U_{t+1})

这样就得到:(U_t = R_t + gamma cdot U_{t+1})

直观上讲,这就是相邻两个折扣算法的数学关系。

(3) 应用过程

现在要把 TD 算法用到 DQN 上

有了 prediction 和 TD target ,就可以更新 DQN 的模型参数了。

2.3 总结

价值学习(本讲是DQN)基于最优动作价值函数 Q-star :

(Q^*(s_t,a_t) = mathbb{E}[U_t|S_t=s_t,A_t=a_t])

对 (U_t) 求期望,能对每个动作打分,反映每个动作好坏程度,用这个函数来控制agent。

DQN 就是用一个神经网络(Q(s,a;w))来近似$Q^*(s,a) $

神经网络参数是 w ,输入是 agent 的状态 s输出是对所有可能动作 $ a in A$ 的打分

TD 算法过程

观测当前状态 $S_t = s_t $ 和已经执行的动作 (A_t = a_t)

用 DQN 做一次计算,输入是状态 (s_t),输出是对动作 (a_t) 的打分

记作(q_t),(q_t = Q(s_t,a_t;w))

反向传播对 DQN 求导:(d_t = frac{partial Q(s_t,a_t;w)}{partial w} |_{ w=w_t})

由于执行了动作 (a_t),环境会更新状态为 (s_{t+1}),并给出奖励(r_t)。

求出TD target:(y_t = r_t + gamma cdot mathop{max}limits_{a} Q(s_{t+1},a_t;w))

做一次梯度下降更新参数 w , (w_{t+1} = w_t – alpha cdot (q_t-y_t) cdot d_t)

更新迭代…

x. 参考教程

© 版权声明
THE END
喜欢就支持一下吧
点赞53赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容