David Silver Reinforcement Learning
李宏毅教授强化学习
Value-based 与 Policy-based的区别在上一篇文章有介绍,而Q-learning 是 value-based 的方法。在这种方法中我们不是要训练一个 policy,而是要训练一个critic网络。critic 并不直接采取行为,只是对现有的 actor π \pi π,评价它的好坏。
Q Q Q即为 Q ( s , a ) Q(s,a) Q(s,a)就是在某一时刻的 s ( s ∈ S ) s(s\in S) s(s∈S)状态下,采取动作 a ( a ∈ A ) a (a\in A) a(a∈A)动作能够获得收益的期望,环境会根据agent的动作反馈相应的回报reward r r r。算法的主要思想就是将State与Action构建成一张Q-table来存储 Q Q Q值,然后根据 Q Q Q值来选取能够获得最大的收益的动作。
critic 给出了一个 value function V π ( s ) V^\pi(s) Vπ(s),代表在遇到游戏的某个 state 后,采取策略为 π \pi π的actor一直玩到游戏结束,所能得到的 reward 之和。
计算 V π ( s ) V^\pi(s) Vπ(s)有两种方式
Q π ( s , a ) Q^{\pi}(s, a) Qπ(s,a)的输入是一对 ( s , a ) (s, a) (s,a),然后输出一个cumulated reward的期望值。如果action可以穷举,则可以使用下图右边的写法;否则,使用左边的写法。
Q-learning的基本学习步骤是:
更好的 π ′ \pi' π′的定义是:面对所有 state s s s时,使用 π ′ \pi' π′得到的value一定比使用策略 π \pi π得到的大,即 V π ′ ( s ) ≥ V π ( s ) V^{\pi'}(s)\geq V^{\pi}(s) Vπ′(s)≥Vπ(s)
更新Q Function的公式:
Q ( s t , a t ) = Q ( s t , a t ) + a ( R t + 1 + λ m a x a ′ Q ( s t + 1 , a ′ ) − Q ( s t , a t ) ) Q(s_t, a_t)=Q(s_t, a_t)+a(R_{t+1}+\lambda max_{a'}Q(s_{t+1}, a')-Q(s_t, a_t)) Q(st,at)=Q(st,at)+a(Rt+1+λmaxa′Q(st+1,a′)−Q(st,at))
其中
Q-function的训练,参考了TD的方法,即 Q π ( s t , a t ) = Q π ( s t + 1 , π ( s t + 1 ) ) + r t Q^{\pi}(s_{t}, a_{t})=Q^{\pi}(s_{t+1},\pi(s_{t+1}))+r_{t} Qπ(st,at)=Qπ(st+1,π(st+1))+rt。但由于在训练的过程中, s t + 1 s_{t+1} st+1和 π ( s t + 1 ) \pi(s_{t+1}) π(st+1)是不断变化的,训练会比较困难。
所以:
对于Q Function,它是policy的基础,这会导致actor每次都会选择具有更大Q值的行动action,对于收集数据而言是一个弊端,因为有可能有一个概率比较小的action其实具有更大的reward,我们可以采用以下方法解决:
在采取action的时候,actor会有 1 − ϵ 1-\epsilon 1−ϵ的概率选择使得Q值最大的 a a a,随着训练时间变长, ϵ \epsilon ϵ的值逐渐减小,在后期actor选择最大Q值对应的 a a a才会变大。
流程:
因为buffer里有采取不同policy的actor的exp,所以导致这个训练过程变成off-policy的。但是因为我们只用一个exp训练,并不是整个trajectory,所以off-policy也没关系。
这样的好处有:
由于Q值总是基于使得Q最大的action得出的,因此会趋向于被高估,于是引入double DQN:
我们使用两个 Q Q Q function,一个用来选择行动action,另外一个用来计算Q值,通常会选择target network来作为另外一个用于计算 Q Q Q值的 Q ′ Q' Q′ function.
Dueling DQN做得唯一一件事就是改变了network的架构 。
其中:
通常,在计算 A ( s , a ) A(s,a) A(s,a)时,使用单个行动对应的Advantage Value减去在该状态下采取所有行动所获得的Advantage Value的平均值,因此,对于一个状态下的所有action,具有零和特征。(normalise 在和 V ( s ) V(s) V(s)相加之间进行) 。同时,如果只需要通过改变 V ( s ) V(s) V(s)的值就能改变某个状态下所有的 Q Q Q
之前在buffer中sample数据去训练network的时候,是无差别地sample每一笔数据,就是说没有偏向于sample哪些数据。
这样做的不足是:有时候因为sample到的某一笔训练数据质量不好,造成 Q ( s t , a t ) Q(s_t,a_t) Q(st,at)估测的值和 r t + Q ( s t + 1 , a t + 1 ) r_t + Q(s_{t+1},a_{t+1}) rt+Q(st+1,at+1)的差距比较大(即TD error)。如果接下去还是无差别地sample每一笔数据,就会导致这些TD error比较大的情况没有得到更多更好的训练,就会导致Q network 在有些情况估值不准确。
使用Prioritized Reply后,对于那些会造成TD error的情况,就会倾向于sample更多相关的数据来训练network,使得network克服这个TD error。
MC是计算的在 s t s_t st之后直到episode结束的所有reward,TD是计算 s t s_t st到 s t + 1 s_{t+1} st+1的reward。
Multi-step这个方法结合了MC和TD各自的特点,将TD改为计算 s t s_t st到 s t + n s_{t+n} st+n,即由原来跳到下一个状态,改为跳到之后 n n n个状态。
这个技术是为了改进exploration的。之前的exploration(epsilon greedy)是在action上做noise。而Noisy Net是在Q-function的参数上做noise。
在action上加noise,即epsilon-greedy,就算给出同一个state s s s,也会做出不同的action a a a,可能是按照Q-function的结果,也可能是以random得到的结果。这不符合实际的情况,因为实际上我们希望给出同一个state,都会做出同样的action。
而在Q-function的参数上加noise,因为在这个方法规定了只在一个episode开始前添加noise,不会在episode中途再增加noise,所以在episode中遇到同一个state都会做出同样的action。比如在一个episode中,遇到状态都采取 a 1 a_1 a1的action,在另一个episode遇到状态都采取 a 2 a_2 a2的action。
使用同一policy的actor在同一个state采取同一个action,得到的cumulated reward是不同的,因为后续state具有随机性。它会呈现一个特定distribution,而Q-value就是这些分布取mean的结果。
缺点:即便mean相同,但是可能实际的分布是完全不同的。然而因为Q-function只输出Q-value,所以看不到实际的分布。
解决方法:可以输出Q值的分布,当具有相同的均值时,选择具有较小方差(风险)的那一个,从而降低不稳定
比如下图右侧是Distributional Q-function,三种颜色代表三种action。同一颜色不同柱子代表在同一state下采取同一action产生的reward落在分布里的几率,具体来说,在绿色柱子里,5个柱子的X轴代表5种不同reward,Y轴代表在某一state采取某一action得到的reward落在此处的几率。