强化学习笔记


入门课程网址:https://aistudio.baidu.com/aistudio/education/lessonvideo/981570

一、基本框架

Environment-Agent-Policy。
其中Agent为与环境交互的主体,例如机器人,Agent的定义核心为

  • 根据环境和状态可以执行的动作表。
  • 根据policy决定执行什么样的动作,因此policy(algorithm)理论上是agent的一部分。

二、算法分类

在这里插入图片描述

2.1 按效果划分

  • value-based: 每个状态都有一个reward
    • 确定性策略
    • Q-learning、DQN、Sarsa
    • 进一步分为on-policy和off-policy
  • policy-based: 只有终点有reward,学习一个策略函数 π ( a t ∣ s t ) \pi(a_t|s_t) π(atst)
    • 随机性策略,随机性更强
    • policy-gradient

三、工具资源

3.1强化学习算法库

在这里插入图片描述

3.2强化学习环境库

**gym: ** 核心环境为environment,提供三种接口

  • reset(): 初始化环境
  • steep(action)->
    • obs: 对环境的一次观察
    • reward: 奖励
    • done: 是否需要重绘环境
    • info: 调试信心
  • render(): 重绘环境的一帧图像
    在这里插入图片描述

四、基于表格学习的算法

在这里插入图片描述

强化学习通过时序差分的方式训练Agent, 时序强化也是强化的体现。

算法描述

  • 马尔科夫决策过程四元组(S,A,P,R)
    • State: 状态空间
    • Action: 动作空间
    • Probability: 环境状态转移概率 p ( s t + 1 , r t ∣ s , a ) p(s_{t+1}, r_t|s,a) p(st+1,rts,a)
    • Reward: 奖励 r ( s t , a t ) r(s_t, a_t) r(st,at)

4.1 sarsa(state-action-reward-state’-action’)

  • 学习特定的state下,特定action的价值Q,最终建立和优化一个Q表格,以state为行,action为列,根据与环境交互得到的reward来更新Q表格,更新公式为
    Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ Q ( S t + 1 , A t + 1 ) − Q ( S t , A t ) ] Q\left(S_{t}, A_{t}\right) \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha\left[R_{t+1}+\gamma Q\left(S_{t+1}, A_{t+1}\right)-Q\left(S_{t}, A_{t}\right)\right] Q(St,At)Q(St,At)+α[Rt+1+γQ(St+1,At+1)Q(St,At)]
  • sarsa使用on-policy策略,下一步动作的选择会影响当前Q值的更新,因此训练出来的最终路径距离悬崖较远。下一节中的Q-learning使用off-policy策略,使用next_obs的最佳reward作为更新参考,不受next-action的影响。
    Sarsa在训练中为了更好的探索环境,采用ε-greedy方式来训练,有一定概率随机选择动作输出,而不是完全按照Q值选择动作。
        # 学习方法,也就是更新Q-table的方法
        def learn(self, obs, action, reward, next_obs, next_action, done):
            """ on-policy
                obs: 交互前的obs, s_t
                action: 本次交互选择的action, a_t
                reward: 本次动作获得的奖励r
                next_obs: 本次交互后的obs, s_t+1
                next_action: 根据当前Q表格, 针对next_obs会选择的动作, a_t+1
                done: episode是否结束
            """
            predict_Q = self.Q[obs, action]  # Q表:状态为行,状态对应的动作为列
            if done:
                target_Q = reward # 没有下一个状态了
            else:
                target_Q = reward + self.gamma * self.Q[next_obs, next_action] # Sarsa
            self.Q[obs, action] += self.lr * (target_Q - predict_Q) # 修正q
    
    

4.1 Q-learing

Q表示(state-action)pair的价值,Q来源的单词在原始论文中没有介绍,大家猜测可能为quantity或quality。
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ max ⁡ a Q ( S t + 1 , a ) − Q ( S t , A t ) ] Q\left(S_{t}, A_{t}\right) \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha\left[R_{t+1}+\gamma \max _{a} Q\left(S_{t+1}, a\right)-Q\left(S_{t}, A_{t}\right)\right] Q(St,At)Q(St,At)+α[Rt+1+γamaxQ(St+1,a)Q(St,At)]
Q-learning的学习方法和sarsa相似,采用ε-greedy方式来训练,不同之处在于Q-learning的更新采用off-policy策略,即不需要下一步的action产生反馈,而是直接使用当前action产生的state和reward更新Q-table。

def learn(self, obs, action, reward, next_obs, done):
    """ off-policy
        obs: 交互前的obs, s_t
        action: 本次交互选择的action, a_t
        reward: 本次动作获得的奖励r
        next_obs: 本次交互后的obs, s_t+1
        done: episode是否结束
    """
    predict_Q = self.Q[obs, action]
    if done:
        target_Q = reward # 没有下一个状态了
    else:
        target_Q = reward + self.gamma * np.max(self.Q[next_obs, :]) # Q-learning
    # 软更新:使用学习率,每次更新一点点
    # self.Q[obs, action] += self.lr * (target_Q - predict_Q) # 修正q
    # 硬更新:这里可以直接更新Q表,收敛更快(一定会收敛)
    self.Q[obs, action] = target_Q

五、DQN

  • 使用函数 f Q f_Q fQ来近似Q-table, 在传统Q-learning中,table可以看做特殊的函数映射。DQN使用神经网络来学习这个函数。
    • 可以使用有限参数存储更多的Q值
    • 具有更好的泛化性

5.1 经验回放

用于解决序列决策的样本的关联,提高样本利用率。

  • 每个样本sample(s, a, s_nxt, r)
  • 使用一个样本池replayMemory,每次用样本池中随机(不删除的)采样一个batch样本,而不是用完就丢。

5.2 固定Q目标

由于Q的更新公式中含有递归,即为了更新当前Q, 需要获取targetQ ,而这两个值都需要从 f Q f_Q fQ中获取,由于神经网络在不断变化,会导致训练不稳定。

  • 使用两个孪生的Q网络,其中一个作为targetQ的网络,另一个作为实时更新的Q网络。训练过程中定期将Q的参数值同步到targetQ。
  • Loss函数: L = M S E ( Q ( s a m p l e ) − Q t a r g e t ( s a m p l e ) ) L=MSE(Q^{(sample) }- Q_{target}^{(sample)}) L=MSE(Q(sample)Qtarget(sample))

在这里插入图片描述

六、策略梯度方法与DQN对比

  • 前面的方法都是value-based方法
    • 其解决问题的思路为:训练Q网络-找到当前状态下Q最大的action-输出action
    • 训练过程主要是学习 f Q f_Q fQ
    • 当输入状态s相同时,输出的action一定相同。
    • 目标函数: L = M S E ( Q θ ( s a m p l e ) − Q t a r g e t ( s a m p l e ) ) L=MSE(Q_{\theta}^{(sample) }- Q_{target}^{(sample)}) L=MSE(Qθ(sample)Qtarget(sample))
    • 训练输入样本为一个step。(时序差分)
    • 神经网络结构:
      • 输入:环境状态
      • 输出:各action的Q值
      • 作用:代替Q-table,通过预测Q值间接决定行为序列
  • 策略梯度为policy-based方法
    • 解决问题的思路为通过模型和输入的状态,直接预测输出action。
    • 训练目标为学习映射函数 π θ ( a t ∣ s t ) \pi_{\theta}(a_t|s_t) πθ(atst)
    • 目标函数最大化期望回报,(实际上最最大化探索的所有序列中期望回报较高的序列的概率)
      R ˉ θ = ∑ τ R ( τ ) p θ ( τ ) ≈ 1 N ∑ n = 1 N R ( τ ) \bar{R}_{\theta}=\sum_{\tau} R(\tau) p_{\theta}(\tau) \approx \frac{1}{N} \sum_{n=1}^{N} R(\tau) Rˉθ=τR(τ)pθ(τ)N1n=1NR(τ)这里的 p θ ( τ ) p_{\theta}(\tau) pθ(τ)是每个episode发生的概率:
      p θ ( τ ) = p ( s 1 ) π θ ( a 1 ∣ s 1 ) p ( s 2 ∣ s 1 , a 1 ) π θ ( a 1 ∣ s 1 ) p ( s 2 ∣ s 1 , a 1 ) p_{\theta}(\tau)=p\left(s_{1}\right) \pi_{\theta}\left(a_{1} \mid s_{1}\right) p\left(s_{2} \mid s_{1}, a_{1}\right) \pi_{\theta}\left(a_{1} \mid s_{1}\right) p\left(s_{2} \mid s_{1}, a_{1}\right) pθ(τ)=p(s1)πθ(a1s1)p(s2s1,a1)πθ(a1s1)p(s2s1,a1)
      但我们不知道环境转移的先验概率 p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t, a_t) p(st+1st,at),所以实际训练时,通过与环境交互采样,生成很多个episode样本数据,当样本数量足够大时,优化总体reward(R公式约等号右边)即可逼近真实reward。
    • 训练输入样本为完整的episode的(s1, a1,s2,a2 …)交互序列以及对应的未来期望reward。episode即从初始状态到结束状态。
    • 神经网络的结构:
      • 输入:环境状态
      • 输出:各action的概率分布
      • 作用:根绝环境直接预测行为概率分布,当环境固定时,相当于预测输出奖励最大的行为序列

6.1 策略梯度公式推导

  • 通过采样消除外层 p θ p_{\theta} pθ, 通过引入log消除内层 p θ p_{\theta} pθ中的环境转移概率
    在这里插入图片描述

6.2 对R标准化(添加baseline)

避免所有episode的reward都是正的,使得在训练过程中只有正向的概率上升,不易训练。可以在训练过程中维护一个R平均值作为baseline。

七、TD(时序查分) vs MC(蒙特卡洛)

  • MC and TD methods learn directly from episodes of experience without knowledge of MDP model. TD method can learn after every step, while MC method requires a full episode to update value evaluation.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值