强化学习(RL)入门

文章目录

  • 强化学习(RL)
    • 基于价值
    • 基于策略

强化学习(RL)

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

强化学习(RL)入门_第1张图片

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

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

强化学习(RL)入门_第2张图片

强化学习(RL)入门_第3张图片

基于价值

状态转移和序列决策

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

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

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

      状态/动作 动作1 动作2 动作3 动作4
      状态1 Q11 Q12 Q13 Q14
      状态2 Q21 Q22 Q23 Q24
      状态3 Q31 Q32 Q33 Q34
    • Gt=Rt+1 + γRt+2 + γ²Rt+3…变形下就是Gt=Rt+1 +γGt+1,这也就是TD时序差分,公式转换也就是

      强化学习(RL)入门_第4张图片

      这个算法用到了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+神经网络

      强化学习(RL)入门_第5张图片

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

      强化学习(RL)入门_第6张图片

基于策略

  • 不同于基于价值

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

强化学习(RL)入门_第8张图片

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

    强化学习(RL)入门_第9张图片

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

    强化学习(RL)入门_第10张图片

  • 对比一下蒙特卡洛(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

    强化学习(RL)入门_第11张图片

  • DDPQ的4张网络

    强化学习(RL)入门_第12张图片

你可能感兴趣的:(大数据——数据挖掘,算法,RL,强化学习,深度学习)