深度强化学习
Neil Zhu,简书ID Not_GOD,University AI 创始人 & Chief Scientist,致力于推进世界人工智能化进程。制定并实施 UAI 中长期增长战略和目标,带领团队快速成长为人工智能领域最专业的力量。
作为行业领导者,他和UAI一起在2014年创建了TASA(中国最早的人工智能社团), DL Center(深度学习知识中心全球价值网络),AI growth(行业智库培训)等,为中国的人工智能人才建设输送了大量的血液和养分。此外,他还参与或者举办过各类国际性的人工智能峰会和活动,产生了巨大的影响力,书写了60万字的人工智能精品技术内容,生产翻译了全球第一本深度学习入门书《神经网络与深度学习》,生产的内容被大量的专业垂直公众号和媒体转载与连载。曾经受邀为国内顶尖大学制定人工智能学习规划和教授人工智能前沿课程,均受学生和老师好评。
David Silver,Google DeepMind
slide
lecture
强化学习观点:人工智能=强化学习
强化学习是一种人工智能的通用框架:
- RL 是针对一个拥有行动能力的 agent 而言的
- 每个行动影响了 agent 的未来状态
- 使用标量值回报信号来度量成功
一言以蔽之:选择行动来最大化未来回报。我们最终的目标是寻求得到可以解决所有人类层级的任务的单一的 agent,这也是智能 agent 的本质。
agent 和环境
RL 结构- 在每个时间步 t,agent:
- 接受状态 st
- 接受标量回报 rt
- 执行行动 at
- 环境:
- 接受行动 at
- 产生状态 st
- 产生标量回报 rt
强化学习的例子
这里给出一些强化学习适用的场景:
- 控制物理系统:行走、飞行、驾驶、游泳、……
- 与用户进行交互:客户维护 retain customers、个性化频道 personalise channel、用户体验优化 optimise user experience、……
- 解决物流问题:规划 scheduling、带宽分配 bandwidth allocation、电梯控制、认知无线电 cognitive radio、电力优化 power optimisation、……
- 玩游戏:棋类、扑克、围棋、Atari 游戏、……
- 学习序列化算法:注意力 attention、记忆 memory、条件计算 conditional computation、激活 activation、……
策略 policy 和估值 value 函数
- 策略 π 是给定状态下选择行动的行为函数:
a=π(s) - 估值函数 Qπ(s, a) 是从状态 s 开始在策略 π 下采取行动 a 的期望全回报:
Qπ(s, a) = E[rt+1+γrt+2+γ2rt+3+...|s, a]
说白了,估值就是评估在状态 s 时采取行动 a 的好坏。
强化学习的几个方向
- 基于策略的 RL
- 直接搜索最优策略 π*
- 目标就是得到最大未来回报的策略
- 基于值的 RL
- 估计最优值函数 Q*(s, a)
- 在任何策略下可获得的最大值
- 基于模型的 RL
- 构建一个环境的迁移模型
- 使用该模型进行规划(通过查找规则)
深度强化学习
- 自然的,有这样的一个问题,我们能不能将深度学习用在强化学习上?
- 使用深层网络来表示估值函数/策略/模型
- 端对端的方式优化估值函数/策略/模型
- 这样就可以使用随机梯度下降来实现函数的优化
贝尔曼 Bellman 方程
- 估值函数可以递归展开:
Qπ(s, a)
= E[rt+1 + γrt+2 + γ2 rt+3 + ... | s, a]
= Es' [r + γQπ(s', a') | s, a] - 最有值函数 Q*(s, a) 可以递归展开为:
Q∗(s, a) = Es'[r + γ maxa' Q∗(s', a') | s, a] -
估值迭代算法可以解贝尔曼方程:
Qi+1(s, a) = Es' [r + γ maxa' Qi(s', a') | s, a]
深度 Q-学习
- 通过权重 w 的深层 Q-网络来表示估值函数:Q(s, a, w) ≈ Qπ(s, a)
- 定义 Q值的均方误差 MSE 作为目标函数:
- 目标 T=r + γ maxa'Q(s', a', w)
- L(w) = E[(T-Q(s,a,w))2]
- 所以得到下面的 Q-学习的梯度:
∂L(w)/∂w = E[(T-Q(s,a,w)) ∂Q(s,a,w)/∂w] - 使用 ∂L(w)/∂w 对目标函数使用 SGD 进行端对端优化
深度强化学习的稳定性问题
使用神经网络进行简易的 Q-学习会震荡或者发散,原因如下:
- 数据是序列化的
- 时间连续的样本是相关的,不是独立的分布
- Q-值微小的变动会剧烈地影响策略
- 策略可能会震荡
- 数据分布会从一个极端摇摆到另一个极端
- 回报和 Q-值的值范围未知
- 简易的 Q-学习的梯度在反向传播的时候会非常不稳定
深度 Q-网络 DQN
DQN 给出了基于值的深度强化学习一个稳定的解
- 使用经验回放
- 打破数据之间的关联,将我们拉回独立同分布的配置下
- 从所有过去的策略中进行学习
- 固定目标 Q-网络
- 避免了震荡
- 将 Q-网络和目标之间的关联打破
- 剪切回报或者规范化网络到一个可行的范围内
- 健壮的梯度
稳定深度强化学习 1:经验回放
为了移除关联,从 agent 自身的经验中构建数据集合:
- 根据 ���ε-贪婪策略选择行动 at
- 将迁移 (st, at, rt+1, st+1)存入经验内存 D 中
- 从 D 中采样随机 minibatch 的迁移 (s, a, r, s')
- 优化Q-网络和Q-学习之间的 MSE:
L(w) = Es,a,r,s'∼D�[(r + γ maxa'Q(s', a', w) − Q(s, a, w))2]
稳定深度强化学习 2:固定目标 Q-网络
为了避免震荡,固定在 Q-学习目标中使用的参数
- 使用老的固定的参数 w-计算 Q-学习目标:
r + γ maxa'Q(s', a', w-) - 优化 Q-网络和 Q-学习目标间的 MSE
L(w) = Es,a,r,s'∼D�[(r + γ maxa'Q(s', a', w-) − Q(s, a, w))] - 周期性地更新固定参数:w- ← w
稳定深度强化学习 3:回报/值范围
- DQN 剪切回报在 [-1, +1] 范围内
- 保证 Q-值不会变得太大
- 确保梯度有良好的条件 well-conditioned
- 不能够区分小的或者大的回报
使用强化学习来玩 Atari 游戏
这确实是一个很自然的应用。
Atari 游戏
DQN 用在 Atari 游戏中
- 从像素 s 中端对端学习值 Q(s, a)
- 输入状态 s 就是来自过去 4 帧的原始像素的栈
- 输出是对应于 18 个的手柄或者按钮位置的 Q(s, a)
- 回报则在那个步骤根据分值进行改变
DQN 在 Atari 游戏中的结果
resultsDemo 省略
DQN 起到多大作用
DQN improvements规范化 DQN
- 规范化 DQN 使用真实(非剪切)的回报信号
- 网络输出一个在稳定范围内的标量值,
U(s, a,w) ∈ [−1, +1] - 输出被重新规范值范围并被转化成 Q-值,
Q(s, a,w, σ, π) = σU(s, a,w) + π - π, σ 会调整成确保 U(s, a,w) ∈ [−1, +1]
- 网络参数 w 被调整来确保 Q-值是一个常量
σ1U(s, a,w1) + π1 = σ2U(s, a,w2) + π2
Demo 省略(规范化的 DQN 在 PacMan 中的表现)
Gorila(GOogle ReInforcement Learning Architecture)
Gorila 架构- 并行行动:产生新的交互
- 分布式回放记忆:保存上面产生的交互
- 并行学习:从回放的交互中进行梯度计算
- 分布式神经网络:用上面产生的梯度来更新网络
稳定深度强化学习 4:并行更新
Vanilla DQN 在并行时表现得不稳定。我们使用下面的方式克服这个问题:
- 丢弃陈旧的(stale)梯度
- 丢弃利群点梯度 g > µ + kσ
- AdaGrad 优化技术
Gorila 结果
使用 100 并行行动器和学习器
- Gorila 显著地超过了 Vanilla DQN 的性能:49 个 Atari 游戏中的 41 个游戏中
- Gorila 达到了 2 倍与 Vanilla DQN 的分数:49 个 Atari 游戏中的 22 个游戏中
- Gorila 达到同样的性能却比 Vanilla DQN 快 10 倍:49 个 Atari 游戏中的 38 个游戏中
Gorila DQN 在 Atari 中的结果:
Paste_Image.png连续行动的确定性策略梯度
- 使用权重为 u 的深度网络 a = π(s, u) 表示确定性策略
- 定义目标函数为全部折扣回报
J(u) = E[r1 + γr2 + γ2 r3 + ...] - 端对端通过 SGD 来优化目标函数
∂J(u)/∂u = Es[(∂Qπ(s, a)/∂a) (∂π(s, u)/∂u)] - 在提高 Q 最大的方向更新策略
- 即通过行动器 actor 来反向传播评价(critic)
确定性 Actor-Critic 模型
使用两个网络:actor 和 critic
- critic 通过 Q-学习来估计当前策略的值
∂L(w)/∂w = E[(��r + γQ(s', π(s'), w) − Q(s, a,w)) ∂Q(s, a,w)/∂w] - actor 按照提高 Q 的方向更新策略
∂J(u)/∂u = Es[∂Q(s, a, w)/∂a ∂π(s, u)/∂u]
确定性深度 Actor-Critic
- 简易的 actor-critic 使用神经网络会震荡或者发散
- DDAC 给出了一个稳定解决方案
- 对 actor 和 critic 都使用经验回放
- 使用目标 Q-网络来避免震荡
∂L(w)/∂w = Es,a,r,s'∼D [��(r + γQ(s', π(s'), w−) − Q(s, a, w)) ∂Q(s, a, w)/∂w]
∂J(u)/∂u = Es,a,r,s'∼D [∂Q(s, a, w)/∂a ∂π(s, u)/∂u]
DDAC 进行连续行动控制
- 从原始像素 s 进行控制策略的端对端学习
- 输入状态 s 是最近 4 个帧的原始像素的栈
- 两个分隔开的卷积网络用于 Q 和 π
- 物理行为在 MuJoCo 中模拟
��
DDAC demo 略
基于模型的强化学习
其目标是学习一个环境转移模型:
p(r, s'| s, a)
使用转移模型进行规划
- 例如,通过转移模型来查找最优的行动
�
深度模型
- 使用深度网络来表示转移模型 p(r, s'| s, a)
- 定义目标函数衡量模型的好坏
- 比如,重构下一状态的比特数目 (Gregor et al.)
- 通过 SGD 来优化目标函数
DARN Demo 略
基于模型的强化学习的挑战
复合错误:
- 转移模型转移路径符合的错误
- 长的状态转移路径的结尾,回报可能完全错误
- 基于模型的强化学习在 Atari 中失效
深度估值/策略网络可以隐式地进行规划
- 网络每层执行任意一步计算
- n层网络可以向前看 n 步
- 到底是否需要转移模型呢?
深度学习应用在围棋中
Monte-Carlo 搜索
- Monte-Carlo 搜索(MCTS)模拟未来的转移路径
- 构建很大的拥有数百万位置的查找搜素树
- 目前最好的 19 X 19 的围棋程序就是使用 MCTS 技术 (Gelly et al.)
卷积网络
- 12-层卷积网络用来训练预测专家走法
- 原始卷积网络(只看一个位置,不含搜索)
- 等价于拥有 105 位置的搜索树 MoGo 的性能 (Maddison et al.)
结论
- 强化学习给出了一种通用的人工智能框架
- 强化学习问题可以通过端对端深度学习技术来解决
- 单一的 agent 现在已经能解决很多具有挑战性的任务
- 强化学习+深度学习=人工智能
问题?
“The only stupid question is the one you never ask.” - Richard Sutton