强化学习的数学基础3---Q-Learning

Q-Learning基础

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

基础知识

在之前的笔记关于Policy Gradient和PPO方法中,需要学习的是某个策略 π \pi π。给定出一个策略网络 π \pi π,然后令计算机通过不断地训练策略网络,来实现智能。训练的过程中,更新迭代的也是策略网络的参数。

而Q-Learning中,不是直接训练策略网络 π ​ \pi​ π,而是给学习一个Crtic,该Critic用于评估Agent做出的每个选择的评估值。

Q-Learning的核心在于一个Q-Function: Q π ( s t , a ) Q^{\pi}(s_t,a ) Qπ(st,a)。该函数的意义是,在状态 s t s_t st下,如果选择了行动 a a a,该函数会得到的返回值,其中 π \pi π表示某种策略或者说是Actor。注意, s t s_t st状态下选择行动 a a a,是由 Q Q Q函数决定的,此时如果让策略 π \pi π来选择行动,则不一定是行动 a a a。在选择 a a a之后,此时再令 π \pi π自己玩下去,知道游戏终结,返回结果作为 Q Q Q的值。

再给出一个评估函数 V π ( s ) V^{\pi}(s) Vπ(s),该函数作用是评定某个Actor π \pi π在状态 s s s下的分数,分数越高说明对 π \pi π越有利。评估的方式一般有两个:

  • Monte-Carlo方式:让 π \pi π一直与环境进行互动,每次互动都会有相应的结果,直到最后会有一个结果总和 G G G。之后,令 V π ( s ) V^{\pi}(s) Vπ(s) G G G进行比较产生误差,利用误差进行修正 V V V的神经网络。但是,这个方法要求必须玩到游戏结束才能进行网络训练,有些时间太长的游戏不太适合这个方式。而且,这个方式的Variance比较大,因为游戏和状态选择本省就有较大的随机性。
  • Temporal-difference方式:在游戏流程 ⋯   , s t , a t , r t , s t + 1 , ⋯ \cdots,s_t,a_t,r_t,s_{t+1},\cdots ,st,at,rt,st+1,中,有核心公式 V π ( s t ) = V π ( s t + 1 ) + r t V^{\pi}(s_t)=V^{\pi}(s_{t+1})+r_t Vπ(st)=Vπ(st+1)+rt,其中 r t r_t rt表示在 s t s_t st状态采取行动 a t a_t at后得到的回报。那么利用上述公式,可以直接训练评估网络。但是,这个方式的缺点在于 V π V^{\pi} Vπ评估不一定是准确的。

实际中,TD方式比较常用。

Q π ( s , a ) Q^{\pi}(s,a) Qπ(s,a)网络有两种输入和输出方式:

  • 把状态 s s s作为输入,输出每个 a a a的值。这种方式比较适合离散有限个 a a a的情况
  • 把状态 s s s和采取的 a a a作为输入,输出一个标量值,作为 s s s状态下采取 a a a行动的评估值。适合无限连续状态的情景

使用Q-Learning做RL的基本步骤:

  1. π \pi π与环境互动。

  2. 通过MC或者TD的方式,学习出 Q π ( s , a ) Q^{\pi}(s,a) Qπ(s,a)

  3. 找到一个更好的 π ′ \pi^{'} π,并令 π = π ′ \pi=\pi{'} π=π。之后继续步骤1

补充,更新 π ′ \pi^{'} π的公式:
π ′ = a r g   m a x a Q π ( s , a ) \pi^{'}=\mathop{arg\ max}_a Q^{\pi}(s,a) π=arg maxaQπ(s,a)
有两点需要注意:

  • π ′ \pi^{'} π没有提取任何参数,它由 Q Q Q决定
  • 这种方式不适合连续的action

Exploration策略

ϵ − G r e e d y \epsilon-Greedy ϵGreedy策略:
a c t i o n = { a r g   m a x a Q π ( s , a ) , 1 − ϵ r a n d o m   a c t i o n , ϵ action=\begin{cases} \mathop{arg\ max}_a Q^{\pi}(s,a), & 1-\epsilon\\ random\ action, & \epsilon \\ \end{cases} action={arg maxaQπ(s,a),random action,1ϵϵ
其中 ϵ ∈ ( 0 , 1 ) \epsilon \in(0,1) ϵ(0,1),是一个概率。

Boltzmann Exploration策略:
P ( a ∣ s ) = exp ⁡ ( Q ( s , a ) ) ∑ a exp ⁡ ( Q ( s , a ) ) P(a|s)=\frac{\exp{(Q(s,a))}}{\sum_a\exp {(Q(s,a))}} P(as)=aexp(Q(s,a))exp(Q(s,a))
选择策略时,是借助概率进行的。

Replay Buffer策略

每次都把数据存储到一固定buffer中,训练的时候,从buffer中随机选取一个批次进行训练。如果buffer满了,则用新的数据更替就的数据。

Q-Learning一般性的算法

  • 初始化Q-function Q Q Q ,目标Q-function Q ^ = Q \hat{Q}=Q Q^=Q
  • 不断进行迭代:
    • 对于一次迭代中的每一步,进行如下操作:
      • 对于一次迭代中的某个状态 s t s_t st,根据 Q Q Q选择 a t a_t at,这是依赖于Exploration(见下文)策略的选择
      • 获取这一步的奖励 r t ​ r_t​ rt,并到达下一个状态 s t + 1 ​ s_{t+1}​ st+1
      • ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)存储到一个buffer中(Replay buffer策略见下文)
      • 从buffer中,选取一个批次的 ( s i , a i , r i , s i + 1 ) (s_i,a_i,r_i,s_{i+1}) (si,ai,ri,si+1)
      • 目标函数 y = r i + m a x a Q ^ ( s i + 1 , a ) ​ y=r_i+\mathop{max}_a \hat{Q}(s_{i+1},a)​ y=ri+maxaQ^(si+1,a)
      • 更新 Q Q Q的参数,使得 Q ( s i , a i ) Q(s_i,a_i) Q(si,ai)接近 y y y
      • 每进行 C C C步,更新 Q ^ = Q \hat {Q}=Q Q^=Q

Q-Learning训练的常用技巧

Double Q-Learning Network

实际的游戏中,一般Q-Value都是被高估了。Double DQN就是为了尽量减少这种情况。DDQN的方法是有两个函数 Q Q Q Q ′ Q^{'} Q
Q ( s t , a t ) = r t + Q ′ ( s t + 1 , a r g   m a x a Q ( s t + 1 , a ) ) Q(s_t,a_t)=r_t+Q^{'}\left(s_{t+1},\mathop{arg\ max}_aQ(s_t+1,a)\right) Q(st,at)=rt+Q(st+1,arg maxaQ(st+1,a))
实际操作中,会有两个Q-Network,一个是选择行动的 Q Q Q网络,另一个是Target Network Q ′ Q^{'} Q。其中 Q Q Q是需要更新参数的网络。

Noisy Network

在每一次与环境开始互动的时候,对神经网络添加噪声。之后用这个神经网络与环境互动,并更新参数,一直反复进行。

你可能感兴趣的:(机器学习数学基础)