TensorFlow深度学习实战(29)——强化学习(Reinforcement learning,RL)

TensorFlow深度学习实战(29)------强化学习

    • [0. 前言](#0. 前言)
    • [1. 引入强化学习](#1. 引入强化学习)
    • [1. 强化学习基础](#1. 强化学习基础)
      • [1.1 基本概念](#1.1 基本概念)
      • [1.2 马尔科夫决策过程](#1.2 马尔科夫决策过程)
      • [1.3 目标函数](#1.3 目标函数)
      • [1.4 智能体学习过程](#1.4 智能体学习过程)
    • [3. 深度强化学习算法](#3. 深度强化学习算法)
      • [3.1 智能体在未经训练时如何选择动作](#3.1 智能体在未经训练时如何选择动作)
      • [3.2 智能体如何平衡探索与利用](#3.2 智能体如何平衡探索与利用)
      • [3.3 如何处理高度相关的输入状态空间](#3.3 如何处理高度相关的输入状态空间)
      • [3.4 如何处理移动目标问题](#3.4 如何处理移动目标问题)
    • [4. 强化学习应用](#4. 强化学习应用)
    • 小结
    • 系列链接

0. 前言

强化学习 (Reinforcement learning, RL) 与监督学习和无监督学习模型不同,强化学习智能体从零开始(即没有先验信息),通过多次试错实现学习目标,在这个过程中,唯一的输入就是来自环境的反馈。研究表明,在强化学习领域中持续的竞争可能是智能体进化的一个原因,RL 在通用人工智能 (Artificial General IntelligenceAGI) 中发挥重要作用,本节将介绍 RL 算法的基本概念与应用,并深入探讨不同的 RL 算法。

1. 引入强化学习

可以将强化学习智能体的学习过程类比于孩子学习走路的过程,两者都涉及:

  • 试错:孩子尝试各种方法,失败许多次,最终才能真正学会走路。强化学习智能体进行多个回合的尝试,才能逐渐获得可靠的成功
  • 目标:孩子学习的目标是走路, RL智能体的目标是解决目标问题
  • 与环境的互动:反馈均来自环境

我们知道,在训练宠物的过程中,最佳策略是奖励宠物的良好行为,并在它做出坏行为时进行惩罚,强化学习智能体也以类似的方式学习。强化学习 (Reinforcement learning, RL) 是一种学习范式,智能体对应于模型 (程序),可以执行一组动作 a a a,这会引起环境状态 s s s 的变化,进而智能体从环境中获得奖励或惩罚。

强化学习可以定义为一种计算方法,旨在通过与环境的互动,在一些理想化条件下进行目标导向的学习和决策。智能体可以感知环境的状态,并在环境上执行特定的、明确定义的动作。这会产生两个结果:首先,环境状态发生变化;其次,(在理想条件下)生成奖励。以上循环持续进行,理论上智能体随着时间的推移学习如何获得更高的奖励。

与监督学习不同,智能体并不会接收到任何训练样本,智能体并不知道正确的动作是什么。与无监督学习不同,智能体的目标不是在输入中找到某种固有的结构(学习可能会发现一些结构,但这不是目标);相反,它的唯一目标是最大化长期奖励并减少惩罚。

1. 强化学习基础

1.1 基本概念

强化学习 (Reinforcement learning, RL) 是机器学习中的一个重要领域,其核心思想在于最大化智能体在相应环境中得到的累计奖励,重点研究智能体应该如何在给定环境状态下执行动作来最大化累积奖励,从而学习能够令智能体完成目标任务的最佳策略。智能体 (agent) 在每个时刻可以与环境 (environment) 交互,交互过程如下所示:

每次交互,都可以得到一个具有多维特征的观察 (observation),根据观察可以得到状态 (state),智能体根据状态选择相应的动作 (action),环境会对 agent 的不同动作给予不同奖励 (reward),从状态到动作的映射函数称为策略 (policy)。通过重复执行此过程,就可以得到令累计奖励最大化的最佳策略。

具体而言:

  • 状态 S S S:状态是可以定义环境中所有可能状态表示的集合,可以是连续的或离散的
  • 动作 A ( S ) A(S) A(S):动作是智能体在特定状态下可以执行的所有可能动作的集合,可能的动作集合 A A A 取决于当前状态 S S S,执行动作后可能会导致状态的变化,动作也可以是离散的或连续的
  • 奖励 R ( S , A , S ′ ) R(S,A,S') R(S,A,S′):奖励是环境根据智能体执行的动作返回的标量值。其中, S S S 是当前状态, S ′ S' S′ 是执行动作 A A A 后的环境状态。奖励由目标决定,如果动作使智能体接近目标,智能体将获得更高的奖励,否则将获得较低(甚至负)的奖励,奖励的定义取决于具体问题
  • 策略 π ( S ) \pi(S) π(S):策略定义了每个状态与在该状态下采取的动作之间的映射。策略可以是确定性的,即对于每个状态都有一个明确定义的策略。策略也可以是随机的,即某些动作以一定概率执行。策略可以实现为简单的查找表,也可以是依赖于当前状态的函数。策略是强化学习智能体的核心,强化学习基本上是智能体学习策略的算法
  • 回报 G t G_t Gt:从当前时间开始的所有未来奖励的折扣总和,数学上定义为:
    G t = ∑ k = 0 ∞ γ k R t + k + 1 G_t=\sum_{k=0}^{\infty}\gamma^kR_{t+k+1} Gt=k=0∑∞γkRt+k+1
    其中 R t R_t Rt 是时刻 t t t 的奖励, γ \gamma γ 是折扣因子,其值介于 01 之间,折扣因子决定了未来奖励在决定策略时的重要性。如果折扣因子接近于零,智能体会更重视即时奖励,而高折扣因子意味着智能体会着眼于未来,可能会放弃即时奖励以获得更高的未来奖励,就像在棋局中,可能会牺牲一个棋子来为后续几步中将对手将死做铺垫
  • 值函数 V ( S ) V(S) V(S):定义了一个状态在长期过程中的"好坏"。可以将其理解为智能体从状态 S S S 开始,预计在一段时间内能够累计的总奖励。可以将其看作长期的好处,而不是即时、短暂的好处。就像在棋局中,有时为了在几步后赢得比赛而丢弃一个棋子,智能体也应该尽量最大化值函数
  • 通常,值是通过状态-值函数 V π ( S ) V_\pi(S) Vπ(S) 或动作-值函数 Q π ( S , A ) Q_\pi(S,A) Qπ(S,A) 定义的,其中 π \pi π 是智能体的策略。状态-值函数是从状态 S S S 开始,遵循策略 π \pi π 的期望回报:
    V π ( S ) = E π [ G t ∣ S t = s ] V_\pi(S)=E_\pi[G_t|S_t=s] Vπ(S)=Eπ[Gt∣St=s]
    其中, E E E 是期望值, S t = s S_t=s St=s 是时刻 t t t 的状态。动作-值函数是从状态 S S S 开始,采取动作 A = a A=a A=a 并遵循策略 π \pi π 的期望回报:
    Q π ( S , A ) = E π [ G t ∣ S t = s , A t = a ] Q_\pi(S,A)=E_\pi[G_t|S_t=s,A_t=a] Qπ(S,A)=Eπ[Gt∣St=s,At=a]
  • 环境模型:一个可选元素,模拟环境的行为,包含环境的物理特性,环境模型通过转移概率来定义到下一个状态的转换。我们也可以采用无模型的强化学习,定义 RL 过程时不需要转移概率

例如,在象棋对战中,计算机是一个已经学习或正在学习如何下棋的智能体,游戏的规则设置构成环境,移动棋子(执行动作)后,棋盘中棋子的位置(状态)发生了变化,游戏结束时,智能体根据游戏结果获得奖励,智能体的目标是最大化奖励。

在智能体 (agent1) 与人类进行游戏过程中,它可以进行的游戏是有限的(取决于人类水平),这可能会成为智能体的学习瓶颈。但是,如果 agent1 (正在学习如何游戏的智能体)可以与 agent2 对战(另一个正在学习的智能体或者一个已经能够出色进行游戏的棋类软件),从理论上讲,这些智能体就可以无限制的相互博弈,从而最大限度地提高智能体学习玩好游戏的机会。这样,通过在多次游戏上互相博弈,智能体有可能学习如何很好地解决游戏中的不同场景/状态。

1.2 马尔科夫决策过程

智能体从环境初始状态开始,根据策略模型采样某一动作,环境在动作的影响下,会从原状态改变为新状态,同时给予智能体奖励。以上过程不断重复直到达到游戏的终止状态,这个过程也称为轨迹 (trajectory),一个过程称为一个回合 (episode)。环境的当前状态通常取决于多个历史状态,计算非常复杂,为了简化计算流程,我们通常假设当前时间戳上的状态仅仅受上一状态的影响,这种性质称为马尔科夫性 (Markov Property),具有马尔科夫性的序列称为马尔科夫过程 (Markov Process)。

也就是说,如果 S t + 1 S_{t+1} St+1 是时刻 t + 1 t+1 t+1 时的环境状态,那么它是时刻 t t t 的状态 S t S_t St、时刻 t t t 采取的动作 A t A_t At 和时刻 t t t 收到的相应奖励 R t R_t Rt 的函数,而不需要先前的历史。如果假设 P ( S t + 1 ∣ S t ) P(S_{t+1}|S_t) P(St+1∣St) 是转移概率,那么马尔可夫性质可以表示为:
P ( S t + 1 ∣ S t ) = P ( S t + 1 ∣ S 1 , S 2 , ⋯   , S t ) P(S_{t+1}|S_t)=P(S_{t+1}|S_1,S_2,\cdots,S_t) P(St+1∣St)=P(St+1∣S1,S2,⋯,St)

如果我们将执行的动作也考虑进状态转移概率,同样应用马尔科夫假设,当前状态只与上一状态和上一状态上执行的动作相关,则我们把状态和动作的有序序列叫做马尔科夫决策过程 (Markov Decision Process, MDP)。当智能体只能观察到环境的部分状态时,称为部分可观察马尔可夫决策过程 (Partially Observable Markov Decision Process , POMDP)。

1.3 目标函数

智能体每次在与环境进行交互时,都会得到一个奖励,一次交互轨迹的累计奖励称为总回报 (return),但在某些环境中的奖励是十分稀疏的,例如在棋牌类游戏中,前面的动作奖励均为 0,只有游戏结束时才有表示输赢的奖励。为了权衡近期奖励与长期奖励,引入折扣率来令奖励随时间衰减。

由于环境状态转移和策略具有一定的随机性,即使使用同样的策略模型作用域同一环境,也可能产生截然不同的轨迹序列,因此强化学习的目标是最大化期望回报。

1.4 智能体学习过程

通常,智能体的学习过程如下:

  1. 最初,智能体在给定状态下采取随机动作
  2. 智能体将它在游戏中的各种状态下所采取的动作存储在内存中
  3. 然后,智能体将各种状态下的动作结果与奖励相关联
  4. 在进行多次游戏之后,智能体可以通过重播其经验将一个状态中的动作与潜在奖励相关联

3. 深度强化学习算法

深度强化学习 (Deep Reinforcement Learning, DRL) 的基本思想是使用深度神经网络来近似策略函数或值函数,这些算法可以根据它们近似的不同函数(策略函数或值函数)分为两类:

  • 基于值 (Value-based) 的方法:在这类方法中,算法采取最大化值函数的动作。智能体学习预测给定状态或动作的好坏,例如,深度Q网络是一个基于值的方法。以迷宫机器人为例,假设每个状态的值是从当前机器人所处块到目标所需的步数的负值,那么在每个时间步中,智能体将选择一个能够将其带到具有最佳值的状态的动作,如下图所示。因此,从具有 -6 的值的状态开始,机器人会依次移动到 -5-4-3-2-1,最终值为 0 时达到目标:
  • 基于策略 (Policy-based) 的方法:在这类方法中,算法预测最优策略(即最大化期望回报的策略),而不维护值函数的估计。目标是找到最优策略,而不是最优动作。例如,策略梯度是一种基于策略的方法。在这类方法中,近似策略函数,使我们能够将每个状态映射到对应的最佳动作。基于策略的方法相对于基于值的方法的优势在于,可以将其应用于连续的动作空间

除了近似策略或值的算法外,为了使强化学习能够有效工作,还需要解决以下问题。

3.1 智能体在未经训练时如何选择动作

当智能体开始学习时,它并不知道确定选择动作的最佳方式,也不知道哪个动作可以提供最佳的Q值。我们借鉴自然的经验,像蜜蜂和蚂蚁一样,智能体在探索新动作和利用已学动作之间取得平衡。最初,当智能体开始时,并不知道在所有可能的动作中哪个更好,因此它会随机选择,但随着学习的进行,它开始利用已学习的策略,这称为探索与利用的平衡。通过探索,智能体收集更多信息,随后利用收集到的信息做出最佳决策。

3.2 智能体如何平衡探索与利用

有多种策略可以用于平衡探索与利用,最常用的一种策略是 ε-greedy (ε-贪婪)策略,智能体不断探索,并根据 ε 的值(范围为 [0,1]),在每一步以概率 ε 选择一个随机动作,以概率 1−ε 选择一个最大化值函数的动作。通常随着训练的进行,ε 的值逐渐减小。使用 Python 实现ε-贪婪策略:

python 复制代码
if np.random.rand() <= epsilon:
    a = random.randrange(action_size)
else:
    a = np.argmax(model.predict(s))

其中,模型是深度神经网络,用于近似值/策略函数,a 是从大小为 action_size 的动作空间中选择的动作,s 是状态。另一种进行探索的方法是使用噪声,包括高斯 (Gaussian) 噪声和 Ornstein-Uhlenbeck 噪声。

3.3 如何处理高度相关的输入状态空间

强化学习模型的输入是环境的当前状态,每个动作都会导致环境的一些变化,然而,通常两个连续状态之间的相关性非常高。如果网络基于序列状态进行学习,连续输入之间的高相关性会导致遗忘问题,为了减轻遗忘问题的影响,David IseleAkansel Cosgun 在提出了经验回放 (experience replay) 方法。

简单来说,学习算法首先将 MDP 元组------状态、动作、奖励和下一个状态 < S , A , R , S ′ > <S, A, R, S'> <S,A,R,S′>------存储在一个缓冲池/内存中。当缓冲池足够大时,就随机选择一个批次训练智能体,缓冲池不断地通过添加新经验和删除旧经验进行更新。使用经验回放具有以下优势:

  • 允许相同的经验在多次权重更新过程中重复使用,从而提高数据效率
  • 随机选择经验批次消除了提供给网络进行训练的连续状态之间的相关性
  • 经验回放还可以防止可能出现的不必要的反馈循环,这些循环可能导致网络陷入局部最优解或不收敛

优先经验回放 (Prioritized Experience Replay, PER) 是经验回放的一种改进。其核心思想在于,并非所有的经验(或者说尝试)都是同等重要的,有些经验能够提供更有效的信息。因此,与随机选择经验相比,将更高的优先级分配给具有更有效信息的经验,能够提高训练的效率。可以对预测值与目标值之间差异较大的经验给予优先级,因为在这些情况下,智能体可以获得更多的学习信息。

3.4 如何处理移动目标问题

与监督学习不同,在强化学习中的目标值并不是事先已知的。在移动目标的情况下,智能体试图最大化预期回报,但随着智能体的学习,最大值会不断变化。实质上,这就像试图抓住一只蝴蝶,当每次接近时,它都会移动到一个新位置。移动目标的主要原因是使用相同的网络来估计动作和目标值,这可能导致学习中的震荡。
DeepMind 团队提出了一个解决方案,使智能体拥有短期固定的目标,而不是一个移动目标。智能体维护两个网络,这两个网络在结构上完全相同,一个叫做局部网络,用于每一步估计当前的动作,另一个叫做目标网络,用于获取目标值。两个网络各自维护一组权重,在每个时间步,局部网络的学习方向是使其估计值与目标值接近。经过一定数量的时间步后,更新目标网络的权重。更新可以是硬更新 (hard update),即在 N N N 个时间步后将局部网络的权重完全复制到目标网络,也可以是软更新 (soft update),即目标网络的权重慢慢(以比例因子 τ ∈ [ 0 , 1 ] \tau\in[0,1] τ∈[0,1] )向局部网络的权重靠拢。

4. 强化学习应用

目前,深度强化学习 (Deep Reinforcement Learning, DRL) 已经在各种任务中取得了成功,特别是在游戏和机器人领域:

  • AlphaGo Zero:由 GoogleDeepMind 团队开发,AlphaGo Zero 从一个完全空白的起点开始,使用一个神经网络来近似(行棋)动作的概率和值,神经网络以原始的棋盘表示作为输入,使用由神经网络指导的蒙特卡洛树搜索来选择动作。强化学习算法在训练循环中融入了前瞻性搜索,使用一个包含 40 层的残差卷积神经网络训练了 40 天,在训练过程中进行了大约 2900 万局
  • 人工智能控制的滑翔机:微软开发了一种控制系统,能够在多种自动驾驶硬件平台上运行,如 PixhawkRaspberry Pi 3。该系统通过自动发现并利用自然产生的气流,可以在不适用发动机的情况下让滑翔机保持在空中。控制器通过检测并利用这些气流,帮助滑翔机独立运行,而无需发动机或人工干预。系统使用部分可观察的马尔可夫决策过程,采用贝叶斯强化学习,并使用蒙特卡洛树搜索来寻找最佳动作,将整个系统分为两个层次的规划器,一个基于经验做出决策的高层次规划器和一个使用贝叶斯强化学习实时检测和获取气流的低层次规划器
  • 运动行为:DeepMind 为智能体提供了丰富多样的环境,这些环境具有不同难度级别的挑战,智能体需要面对逐渐增加难度的挑战,使智能体能够学习到复杂的运动技能,而无需进行任何奖励设计(即设计特殊的奖励函数)
  • 使用强化学习进行数据中心冷却:数据中心是现代互联网的核心,凭借其大型服务器和网络设备,促进了数据存储、数据传输以及互联网信息处理。数据中心约占全球能源消耗的 1.5%,如果不采取措施,能源消耗只会增加,DeepMindGoogle Research 合作,采用强化学习模型将数据中心的能源消耗减少了 40%。利用从数据中心传感器收集的历史数据,训练了一个深度神经网络,以预测未来的能源效率并提出最佳动作方案
  • 控制核聚变等离子体:使用强化学习控制核聚变等离子体

这些应用表明,DRL 智能体能够在没有任何隐式知识的情况下学习,在许多专业任务中表现出色,甚至表现出超越人类的能力。

小结

近年来,强化学习取得了重要进展。在本节中,我们重点介绍了经典的强化学习算法,从强化学习领域的重要概念、挑战以及解决方案开始,接着,深入探讨了两类重要的深度强化学习算法,基于值的算法和基于策略的算法。

系列链接

TensorFlow深度学习实战(1)------神经网络与模型训练过程详解
TensorFlow深度学习实战(2)------使用TensorFlow构建神经网络
TensorFlow深度学习实战(3)------深度学习中常用激活函数详解
TensorFlow深度学习实战(4)------正则化技术详解
TensorFlow深度学习实战(5)------神经网络性能优化技术详解
TensorFlow深度学习实战(6)------回归分析详解
TensorFlow深度学习实战(7)------分类任务详解
TensorFlow深度学习实战(8)------卷积神经网络
TensorFlow深度学习实战(9)------构建VGG模型实现图像分类
TensorFlow深度学习实战(10)------迁移学习详解
TensorFlow深度学习实战(11)------风格迁移详解
TensorFlow深度学习实战(12)------词嵌入技术详解
TensorFlow深度学习实战(13)------神经嵌入详解
TensorFlow深度学习实战(14)------循环神经网络详解
TensorFlow深度学习实战(15)------编码器-解码器架构
TensorFlow深度学习实战(16)------注意力机制详解
TensorFlow深度学习实战(17)------主成分分析详解
TensorFlow深度学习实战(18)------K-means 聚类详解
TensorFlow深度学习实战(19)------受限玻尔兹曼机
TensorFlow深度学习实战(20)------自组织映射详解
TensorFlow深度学习实战(21)------Transformer架构详解与实现
TensorFlow深度学习实战(22)------从零开始实现Transformer机器翻译
TensorFlow深度学习实战(23)------自编码器详解与实现
TensorFlow深度学习实战(24)------卷积自编码器详解与实现
TensorFlow深度学习实战(25)------变分自编码器详解与实现
TensorFlow深度学习实战(26)------生成对抗网络详解与实现
TensorFlow深度学习实战(27)------CycleGAN详解与实现
TensorFlow深度学习实战(28)------扩散模型(Diffusion Model)