Skip to content

深度强化学习

引入

强化学习的难点

  • 奖励延迟
  • Agent 的操作会影响它接收到的后续数据

概述

  • 基于策略 (学习 Actor)
  • 基于值函数 (学习 Critic)
  • Actor + Critic

基于策略的方法

几个版本

Version核心思想问题改进奖励
V0只看即时奖励无法处理延迟奖励引入长期奖励
V1看总回报 Gt未来奖励权重一样引入折扣Gt=n=tNrn
V2折扣回报所有动作都可能被增强引入 baselineGt=n=tNγntrn
V3相对奖励(Advantage)更稳定、更合理接近现代 RLGt=n=tNγntrnb

策略梯度

策略梯度(Policy Gradient):

  1. Initialize actor network parameters θ0
  2. For training iteration i=1 to T
    • Using actor θi1 to interact
    • Obtain data s1,a1,s2,a2,,sN,aN
    • Compute A1,A2,,AN
    • Compute loss L
    • θiθi1ηL

On-policy vs Off-policy

  • On-policy(同轨策略):用于生成采样数据序列的策略(actor for interacting)和用于实际决策的待评估和改进的策略(actor to train)是相同的
  • Off-policy(离轨策略)→ Proximal Policy Optimization(PPO,近端策略优化):训练的 actor 必须知道它与和环境互动的 actor 不同的地方。

训练

需要放大 Actor 的输出熵,或者在参数熵添加噪声。

actor 需要在数据收集过程中具有随机性,动作是从输出分布中采样的主要原因。

b 可以依赖状态,通常由一个网络估计出来,是一个 NN 的输出,令 Aθ(st,at)=Rb 为优势函数。意义是假设在某一状态 st 执行某一个动作 at 相对于其他可能的动作的优势。(评论员)

Actor-Critic

Policy Gradient

θRθ1Nn=1Nt=1Tn(Gtnb)θlogpθ(atn|stn)

Gtn 通过和环境交互获得,不稳定。

有足够的样本,近似 G 的期望。

Q-Learning

  • 状态值函数 Vπ(s)
    • When using actor π, the cumulated reward expects to be obtained after visiting state s
  • 状态-动作值函数 Qπ(s,a)
    • When using actor π, the cumulated reward expects to be obtained after taking a at state s
Version核心思想问题改进奖励 / Advantage
V3.5Monte-Carlo Advantage Actor-Critic必须等 episode 结束;Gt 方差仍然很大用 Critic 学习状态价值At=GtVθ(st)
V4TD Advantage / A2CMonte-Carlo 更新慢、噪声大用一步 TD bootstrap 估计未来At=rt+γVθ(st+1)Vθ(st)

Advantage Actor-Critic

上面的 V4。

基于价值的方法

Critic

  • Critic 评估一个 actor π 有多好
  • 状态价值函数 Vπ(s)
    • 在状态 s 下,当采取 actor π 进行交互,期望最终获得的累积奖励

估计 Vπ(s)

  • 蒙特卡罗(MC)方法
    • critic 观测 actor π 玩整局游戏
  • 时序差分方法
    • 有些应用的 episode 太长,所以延迟到一个 episode 结束再学习是效率太低。

Q-Learning

给定 Qπ(s,a),找到一个新 actor ππ "更好":

  • "更好":Vπ(s)Vπ(s),对所有的状态 s
  • π(s)=argmaxaQπ(s,a)
  • π 没有额外的参数。它取决于 Q
  • 不适合连续动作 a(稍后解决)

DQN

  • 利用 DQN,Q(s,a;w) 近似 Q(s,a)(最优动作价值函数)
  • DQN 通过 at=argmaxaQ(st,a;w) 选择动作
  • 我们试图学习参数 w

改进——目标网络

Q 更新 N 次之后再复制给 Target Q

  • Online 网络输出:Q(st,at;w)
  • Target 网络输出:yt=rt+γmaxaQ^(st+1,a;w)
  • 计算 loss:L=(Qy)2

探索

  • Epsilon Greedy:argmax / 随机
  • Boltzmann Exploration:softmax

经验回放 Replay Buffer

π 和环境交互放入缓存区。

在每次迭代:

  1. 对于每一个批量进行采样
  2. 更新 Q-function

Double DQN

解决 Q 值被高估的问题:

Q(st,at)rt+Q(st+1,argmaxaQ(st+1,a))

Dueling DQN

Q 拆成了 VA,解决没意义的选择上无效探索。

Double DQNDueling DQN
解决问题Q值高估状态价值学习效率低
核心思想动作选择与评估分离Q拆成V+A
改哪里target计算网络结构
是否改变Q定义是(分解Q)
主要收益更稳定更高效

优先级经验回放

让 TD 误差越大的数据被抽样的概率越高。

Multi-step TD

N 步用真实奖励,后面再 bootstrap。