深度强化学习——价值学习(2)

一、回顾一下几个重要的概念

1、强化学习中的两个随机性来源:一个来自于动作,一个来自于环境

1)动作a的随机性来源于policy函数Π

2)状态s的随机性来源于状态转移函数p

2、使用期望来消除未来的随机性,使得QΠ只依赖于当前的状态st和动作at,QΠ可以反应当前状态st下做动作at的好坏程度

3、我们想要进一步消除策略函数Π,可以对QΠ关于Π求最大化,得到Q*,他表示不管使用什么policy函数Π要使agent在当前状态st下做动作at,那么回报Ut的期望,最多就是Q*(st,at)不会更好

4、DQN就是用一个神经网络来近似Q*函数

Q*就像是一个先知一样,他虽然无法完全准确地预测未来,但是他能够告诉你一个平均值

但是实际上我们并没有Q*函数,所以价值学习的基本想法就是学习一个函数来近似Q*,虽然无法完全预测一个股票的价格,但是对于超级玛丽游戏来说玩个10000次差不多也就知道在当前状态下采用什么动作是最好的了

5、我们把DQN的神经网络记作Q(s,a;w),神经网络的参数是w,神经网络的输入是状态s,神经网络的输出是很多数值,这些数值是对所有可能的动作的打分,每个动作对应一个分数,我们通过奖励来学习这个神经网络,这个神经网络给动作的打分就会逐渐改进,打分会越来越准

如果是超级玛丽,可以把屏幕中的画面作为一个输入,用卷积层把图片变成特征向量,然后用几个全连接层把特征向量映射到一个输出的向量,这个输出的向量就是对动作的打分,向量每一个元素对应一个动作,在超级玛丽中就是左右上这几个动作,所以输出的向量就是3维的,第一个元素是DQN对向左这个动作的打分...

只要有了DQN,把DQN训练好,就可以通过DQN自动控制超级玛丽,可以打赢游戏

奖励就是强化学习中的监督信号,DQN要靠这些奖励来训练

不断重复以上过程直到游戏结束

如何训练DQN呢?

》常见的就是TD算法(Temporal Difference Learning) 

但是问题是我需要哪些数据呢,有了数据之后我又该如何更新模型参数呢?

α称为学习率或者步长

这种算法比较naive,必须完成整个旅途,我才能对模型进行一次更新

那么我只走一半的旅途,我有没有办法对模型进行更新呢?

》我们可以用TD算法来做这件事

300分钟是真实的观测,新的估计900分钟就是TD target,虽然这900分钟也是估计,但是他包含了一部分的真实观测,当我越接近Atlanta,TD target就越准确,越接近真实值,这样我到了DC,我算出TD target y=900,我就可以更新模型参数了,我假装y=900就是真实观测,把y作为target,损失函数就是1/2(1000-900)^2,这里最初的估计Q(w)和TD target y的差称为TD error,这里的TD error=q-y=1000-900=100

TD算法的目标就是让TD error/loss尽量接近0,也就是说估计值与实际值的差的函数要取最小值,所以TD算法要用梯度下降来向最小值逼近,进而减小TD error

这样,有了TD算法,即使不完成旅途也能更新参数,把TD算法用来学习DQN也是相同的道理,我不打完游戏,我就能更新DQN的参数

要使用TD算法必须等式左边有一项,右边有两项,右边的两项中有一项是真实观测到的,在深度强化学习中也有相似的公式:等式左边是DQN在t时刻做的估计,这是未来奖励总和的期望,相当于纽约到亚特兰大的总时间,右边第一项rt是真实观测到的奖励,相当于纽约到DC真实花费的时间,右边第二项是DQN在t+1时刻做出的估计,相当于从DC到亚特兰大的预计时间,γ∈(0,1),称为折扣率,这个等式反应了相邻两个回报之间的关系

 

 

右边这两项的加和更加接近真相,所以我们把他作为TD target

现在有了Prediction和TD target我们就可以更新DQN的参数了,w就是DQN的模型参数,做梯度下降的原因是为了让梯度下降减小

总结:

Q*:首先对回报Ut求期望,把除了st和at之外的随机变量全部用期望给去掉,然后再关于策略函数Π求一个最大化,就去掉了Π,得到的Q*函数就与Π没有关系了

一开始DQN模型的参数都是随机的,agent会根据DQN的指导,不断地尝试,有时获得正奖励,有时获得负奖励,强化学习就是通过奖励来更新模型参数,让模型越来越好,怎么样通过奖励来更新模型参数呢?

TD算法,TD是学习DQN最常用的算法,TD算法不断重复如下过程:

1、首先观测当前的状态st和已经执行的动作at

2、用DQN做一次计算,输入是状态st,at,输出是对动作at的打分,把输出记作qt

3、使用反向传播对DQN求导,得到梯度dt,tensorflow和pytorch都可以自动求梯度

4、由于agent已经执行了动作at,环境会更新状态st+1并给出奖励rt

5、有了状态st+1和奖励rt,我们就可以利用公式求出TD target ->yt

6、最后做一次梯度下降来更新模型参数w,梯度=预测值qt和TD target yt之间的差再乘以dt

这样就完成了一次TD target算法迭代,每当得到一个reward rt,就可以做一次这样的算法迭代,更新一次模型参数w

注:这里我们w自动朝梯度减小的方向移动,最终目的是得到最小值时候的w的值,使得我们的预测最准确 

猜你喜欢

转载自blog.csdn.net/Tandy12356_/article/details/130168692