现实中强化学习面临的状态空间往往是连续的,存在无穷多个状态。这种情况下,就不能再使用表格对价值函数进行存储,采用价值函数近似(Value Function Approximation)的方式进行逼近
在连续的状态和动作空间中,可以用函数来表示近似计算:
其中函数通常是一个参数为
的函数,比如神经网络
衡量这个状态价值函数,有两种不同的做法:
MC-based
的方法和TD-based
的方法:
方法:
MC-based
的方法问题:
方差很大。本身具有随机性,累积奖励可以看成是一个随机变量
方法:
动作价值函数的输入是状态、动作对。表示在某一个状态采取某一个动作,都是用演员,得到的累计奖励期望值
Q函数的两种写法:
方法:
Q函数
和某一个策略Q函数
以及新的更好的策略证明:为什么用决定出来的
一定比
好
由1、2式可得:
综合3、4可得:
即证毕,对于估计某一个策略的Q-function
,接下来就可以找到另外一个策略比原来的策略还要更好
在学习Q-function
的时候,会用到TD
的概念。那怎么用TD?在状态,采取动作
以后,得到奖励
,然后跳到状态
。根据这个
Q-function
:
但是实际上这样的一个输入并不好学习,因为假设这是一个回归问题,是网络的输出,
是目标,实际上目标是可变的。在做反向传播的时候,
的参数会被更新,并会把两个更新的结果加在一起,这样会导致训练变得不太稳定
所以可以把其中一个Q网络
,通常是会把右边这个Q网络
固定住。在训练的时候只更新左边的Q网络
的参数,而右边的Q网络的参数会被固定住。因为右边的**Q网络
负责产生目标,所以叫目标网络**
。因为目标网络是固定的,所以得到的目标的值也是固定的。只调左边网络的参数,它就变成是一个回归问题。希望模型的输出的值跟目标越接近越好,可以最小化它的
均方误差(mean square error)
在实现的时候,把目标网络固定,只调模型输出的网络。在把输出的网络更新几次以后,再去用更新的网络替换目标网络
这个问题其实就是
探索-利用窘境(Exploration-Exploitation dilemma)
问题
当使用Q函数
时,策略完全取决于Q函数
。在采取动作的时候,会采取Q值最大的动作。这样可能会一直采取相同的动作,所以需要探索机制,避免一直采取相同的动作
定义:
有1-ε的概率会按照Q函数
决定动作,主要根据Q函数
决定动作,比较少随机决定动作:
通常ε会随时间递减。随着训练次数的增多可以减少探索
对象:
定义:
对象:
思想:构建一个回访缓冲区
(replay buffer)
,会将策略与环境互动收集的数据(状态-动作-奖励...)放到缓冲区中。循环迭代训练Q函数时,会从数据缓冲区随机挑一个批量(batch)出来更新Q函数。
迭代地去训练这个Q-function
,在每次迭代里面,从这个buffer里面随机挑一个batch出来,根据这把经验去更新Q-function
,就跟TD learning要有一个目标网络是一样的
特点:
异策略(off-policy)
DQN使用深度卷积神经网络近似拟合状态动作值函数,其网络结构如上图所示。DQN模型的输入是距离当前时刻最近的4帧图像,该输入经过3个卷积层和2个全连接层的非线性变化后,最终在输出层输出每个动作对应的
Q值
算法:
Q函数
和探索机制
: