强化学习的数学基础4---Q-Learning进阶

版权声明:所有的博客都是个人笔记,交流可以留言。未经允许,谢绝转载。。。 https://blog.csdn.net/qq_35976351/article/details/89068876

笔记整理自李宏毅老师的公开课

Asynchronous Advantage Actor-Critic (A3C)

回顾Policy Gradient的梯度参数:
R ˉ θ 1 N n = 1 N t = 1 T n ( t = t T n r t t r t n b ) log p θ ( a t n s t n ) \nabla \bar{R}_{\theta}\approx \frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T_n}\left(\sum_{t^{'}=t}^{T_n}r^{t^{'}-t_{r^{n}_{t^{'}}}}-b\right)\nabla\log{p_{\theta}(a_{t}^{n}|s_{t}^{n})}

如果令 G t n = t = t T n r t t r t n G_{t}^{n}=\sum_{t^{'}=t}^{T_n}r^{t^{'}-t_{r^{n}_{t^{'}}}} G t n G_t^{n} 是Actor跟环境互动而来的,那么 G G 则会使不稳定的。因为数值本身具有随机性,而且环境也有随机性。不过,如果我们sample足够多的次数,那么均值会比较稳定。

其实,本质上来说,有下面的公式成立:
E [ G t n ] = Q π θ ( s t n , a t n ) E\left[G_{t}^{n}\right]=Q^{\pi_{\theta}}(s_t^{n},a_t^{n})
那么问题转换成了求解 Q π θ ( s t n , a t n ) Q^{\pi_{\theta}}(s_t^{n},a_t^{n}) ;同时, b b 可以用 V π θ ( s t n ) V^{\pi_{\theta}}(s_t^{n}) 进行表示。但是,这样做的缺点在于,我们需要估计 Q π Q^\pi V π V^\pi 这两个神经网络,这样的训练量大,而且结果不稳定。引入一个代换法则:
Q π ( s t n , a t n ) = E [ r t n + V π ( s t + 1 n ) ] Q^\pi\left(s_t^n,a_t^n\right)=E\left[r_t^n+V^\pi\left(s_{t+1}^n\right)\right]
实际使用时,可以去掉期望值,原作者的Paper实验这样做的效果比较好。
Q π ( s t n , a t n ) = r t n + V π ( s t + 1 n ) Q^\pi\left(s_t^n,a_t^n\right)=r_t^n+V^\pi\left(s_{t+1}^n\right)
可以这么理解, Q Q​ 的意思是为了表示 s t s_t​ 状态下,采取行动 a t a_t​ 后会获得的所有的奖励总和,那么和自然,这个公式可以表示成当前这一步行动的奖励 r t r_t​ 累加上下一个状态的奖励 V V​ r r​ 是个随机值,由环境等的因素共同决定,这也是这个模型的缺点,由随机值的影响。

那么,最终的梯度可以表示为:
R ˉ θ 1 N n = 1 N t = 1 T n ( r t n + V π ( s t + 1 n ) V π ( s t n ) ) log p θ ( a t n s t n ) \nabla \bar{R}_{\theta}\approx \frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T_n}\left(r_t^n+V^\pi(s^n_{t+1})-V^\pi(s^n_t)\right)\nabla\log{p_{\theta}(a_{t}^{n}|s_{t}^{n})}
训练时候的 Q Q V V 网络可以共享前面几层的参数,只是在最后输出的时候,变换到不同的网络层中。训练的时候,可以使用输出参数的交叉熵作为 π ( s ) \pi(s) 的参数,那么交叉熵越大,说明越需要进行Exploration。

A3C是同时开多个环境进行产生数据,并不断更新。

Pathwise Derivative Policy Gradient

在之前的 Q π Q^\pi 网络中,我们输入一个游戏状态 s s 和一个行动 a a ,时候会得到一个 Q π ( s , a ) Q^\pi(s,a) 作为输出。而该方法的特别之处在于,专门产生一个Actor π \pi 网络用于生成行动 a a ,这样,一个网络的输出就会作为另一个网络的输入。训练的时候,需要先训练 Q π Q^\pi 网络,之后固定住该网络,再去训练 π \pi 网络。

那么,Actor网络的梯度是:
θ π = θ π + η θ π Q π ( s , a ) \theta^{\pi^{'}}=\theta^\pi+\eta\nabla_{\theta^\pi}Q^\pi(s,a)

给出一般性的算法:

  • 初始化Q-function Q Q ,target Q-function Q ^ = Q \hat{Q}=Q ,actor π \pi ,target actor π ^ = π \hat{\pi}=\pi
  • 在每个episode中:
    • 对于每一步
      • 给定一个状态 s t s_t ,基于 π \pi 采取行动 a t a_t ,注意这里需要Exploration
      • 获得一个奖励 r t r_t ,并到达一个新的状态 s t + 1 s_{t+1}
      • ( s i , a i , r i , s i + 1 ) (s_i,a_i,r_i,s_{i+1}) 存储到buffer
      • buffer中随机获取一个批次的 ( s i , a i . r i , s i + 1 ) (s_i,a_i.r_i,s_{i+1})
      • 目标函数 y = r i + Q ^ ( s i + 1 , π ^ ( s i + 1 ) ) y=r_i+\hat{Q}(s_{i+1},\hat{\pi}(s_{i+1}))
      • 更新 Q Q 的参数,使得 Q ( s i , a i ) Q(s_i,a_i) 接近 y y
      • 更新 π \pi 的参数去最大化 Q ( s i , π ( s i ) ) Q(s_i,\pi(s_i))
      • 每C步执行更新 Q ^ = Q \hat{Q}=Q π ^ = π \hat{\pi}=\pi

猜你喜欢

转载自blog.csdn.net/qq_35976351/article/details/89068876