理解DQN算法

Q-Learning算法

Q-Learning的算法如下:

对于Q-Learning,首先就是要确定如何存储Q值,最简单的想法就是用矩阵,一个s一个a对应一个Q值,所以可以把Q值想象为一个很大的表格,横列代表s,纵列代表a,里面的数字代表Q值.

维度灾难

在上面的分析中,我们使用表格来表示Q(s,a),但是这个在现实的很多问题上是几乎不可行的,因为状态实在是太多。使用表格的方式根本存不下。

怎么办呢?就是用一个函数来表示Q(s,a)。即

Q(s,a) = f(s,a)

f 可以是任意类型的函数,比如线性函数:

Q(s,a) = w_1s + w_2a + b 其中w_1,w_2,b是函数f的参数。

通过函数表示,我们就可以无所谓s到底是多大的维度,反正最后都通过矩阵运算降维输出为单值的Q。

如果我们就用w来统一表示函数f的参数,那么就有

Q(s,a) = f(s,a,w)

高维输入低维输出表示

对应一个高维状态输入,一个低维动作输出。那么怎么来表示这个函数f呢?

其实就是Q(s) \approx f(s,w),只把状态s作为输入,但是输出的时候输出每一个动作的Q值,也就是输出一个向量[Q(s,a_1),Q(s,a_2),Q(s,a_3),...,Q(s,a_n)],记住这里输出是一个值,只不过是包含了所有动作的Q值的向量而已。这样我们就只要输入状态s,而且还同时可以得到所有的动作Q值,也将更方便的进行Q-Learning中动作的选择与Q值更新。

神经网络化Q值

我们用一个深度神经网络来表示这个函数f。

以DQN为例,输入是经过处理的4个连续的84x84图像,然后经过两个卷积层,两个全连接层,最后输出包含每一个动作Q值的向量。

对于这个网络的结构,针对不同的问题可以有不同的设置。

总之,用神经网络来表示Q值非常简单,Q值也就是变成用Q网络(Q-Network)来表示。接下来就到了很多人都会困惑的问题,那就是

Q网络的loss

神经网络的训练是最优化一个损失函数loss function。因此,我们需要有样本,然后通过反向传播使用梯度下降的方法来更新神经网络的参数。

所以,我们利用Q-Learning算法为Q网络提供有标签的样本。

Q-Learning算法中,Q值的更新依靠的是利用Reward和Q计算出来的目标Q值:

R_{t+1}+\lambda \max _aQ(S_{t+1},a)

因此,我们把目标Q值作为标签,Q网络训练的损失函数就是:

上面公式是s^`,a^` 即下一个状态和动作。这里用了David Silver的表示方式,看起来比较清晰。

DQN训练

这里分析NIPS 2013提出的DQN。

具体的算法主要涉及到Experience Replay,也就是经验池的技巧,就是如何存储样本及采样问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值