强化学习(RL)入门

强化学习(RL)

李科浇老师B站传送门:https://www.bilibili.com/video/BV1yv411i7xd/?p=19&share_source=copy_web&vd_source=6c0b5103bdba5888cb3a09dd65da3516

image-20230301193712090

基于价值的value-based,每一步都会赋予价值,势必会到达价值最高处,属于确定性策略

基于策略的policy-based,基于策略,每一步都会去尝试,属于随机性策略

image-20230301195319808

image-20230301195405123

基于价值

状态转移和序列决策

  • 如果我们知道在当前状态s下,做出行为a后,会变成状态s+1的概率,那这个概率函数就是已知的,也就是基于模型的,这样可以用动态规划计算出奖励最大的

  • 但是实际上这个概率函数是不知道的,也就是无模型的,那就不断去尝试

    • 采用价值函数Q,也就是在状态s下执行动作a可以获得最大奖励Q,Q的价值等于当前动作之后的所有奖励合集,但当前的动作对未来影响可能随着时间的推移而越来愈小,所以假设未来收益总为Gt,未来每一步的收益为Rt+n,就会得到Gt=Rt+1 + γRt+2 + γ²Rt+3…,那就会产生一个表格,动作和状态的Q表格

      状态/动作动作1动作2动作3动作4
      状态1Q11Q12Q13Q14
      状态2Q21Q22Q23Q24
      状态3Q31Q32Q33Q34
    • Gt=Rt+1 + γRt+2 + γ²Rt+3…变形下就是Gt=Rt+1 +γGt+1,这也就是TD时序差分,公式转换也就是

      image-20230310200318707

      这个算法用到了St、At、Rt+1、St+1、At+1,也就是Sarsa算法,也就是用下一步Q值不断更新我这一步Q值,每次只更新一点点(目标值减去当前值就是需要更新的,但是加上系数也就是每次缓慢更新)

      相关python代码

          # 根据输入观察值,采样输出的动作值,带探索
          def sample(self, obs):
              if np.random.uniform(0, 1) < (1.0 - self.epsilon):  # 根据table的Q值选动作
                  action = self.predict(obs)
              else:
                  action = np.random.choice(self.act_n)  # 有一定概率随机探索选取一个动作
              return action
      
          # 根据输入观察值,预测输出的动作值
          def predict(self, obs):
              Q_list = self.Q[obs, :]  # 构建Q表格
              maxQ = np.max(Q_list)  # 找出状态对应最大价值的动作
              action_list = np.where(Q_list == maxQ)[0]  # maxQ可能对应多个action
              action = np.random.choice(action_list)  # 在同一maxQ的action list中随机挑选一个action
              return action
      
          # 学习方法,也就是更新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]
              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
      
    • 上文讲解的是on-policy的saras算法,还有一种是off-policy的Q-learning算法,用到了St、At、Rt+1、St+1,没有用到At+1,Q-learning也会像saras那样根据一定概率选择下一动作,但是和saras不同之处:它会选择最大价值的action,而saras的下一步(next_action)还是会具有随机性,代码上区别如下:

      next_action = agent.sample(next_obs)  # Sarsa 根据算法选择next_action
      target_Q = reward + self.gamma * self.Q[next_obs,next_action]  # Sarsa
      
      target_Q = reward + self.gamma * np.max(self.Q[next_obs, :])  # Q-learning
      
    • 目前的saras和q-learing都是构建的Q表格实现,当状态过多时,表格就不足够支持,最好可以构建一个函数拟合,这里引入神经网络,将table转换NN(neural network),让NN逼近任意连续函数。DQN≈Q-learning+神经网络

      image-20230311154423626

      • DQN创新点——经验回放,将每一条经验(st、at、rt+1、st+1)
      • DQN创新点——固定Q目标

      image-20230402154435877

基于策略

  • 不同于基于价值

    • 基于价值的是根据状态和动作计算Q值,然后间接求出action;基于策略比较暴力,直接根据给定状态输入到策略网络推算出action
    • 基于价值先优化Q的网络,优化到最优后,直接argmaxQ推算出action,但其实这种最优后已经将参数固化,所以在输入同一状态会输出同一action,称为确定性策略;基于策略是输入状态到NN后得出每个action的概率,如下图,再根据其概率值进行随机采样动作
      image-20230402171041292
  • 一次训练过程,会产生状态和动作的轨迹集合,称为┏={s1,a1,s2,a2,s3,a3…st,at},所以产生一个特定轨迹的概率为Pθ(┏)=p(s1)Πθ(a1|s1)p(s2|s1,a1)Πθ(a2|s2)…,用总回报*轨迹概率求和得出期望值,也就是下图内容

image-20230402172430715

  • 再次对比下价值和策略的网络优化目标,基于价值是希望Q预测和Qtarget的loss越来越小,而基于策略是希望得出的期望越来越大(梯度上升);因此要去更新policyNN,可以用N条轨迹以及每条轨迹的reward,计算梯度,使得θ=θ+α * ▽Rθ

    image-20230402173609765

    ▽Rθ值可以约等于如下公式,N表示每一轮,Tn表示每一步,Gt表示每一步对未来的总收益

    image-20230402175419331

  • 对比一下蒙特卡洛(MC)和时序差分(TD),MD是回合结束更新,TD是单步更新(每次action后产生新state)

    • REINFORCE采用的是MC,每一次会产生这样一个序列(s1,a1,G1),所以对于每一次的action,Loss=-Gt * at * logΠ(a|s,θ),其中at为实际执行的动作,Π(a|s,θ)为神经网络预测的动作概率
    • Actor-Critic采用的是TD

不管是基于价值或者是基于策略目前的阐述都是在离散动作,下面将提及连续动作算法DDPG(Deep Deterministic Policy Gradient,也是基于策略的),其实离散到连续主要是网络的输出

  • DDPG是DQN的扩展版本,在DQN基础上增加了策略网络,这样的结构称为Actor-Critic结构,策略网络是actor,Q网络为critic

    image-20230402200105605

  • DDPQ的4张网络

    image-20230402201342439

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

友培

数据皆开源!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值