深度学习、强化学习:Natural Actor Critic Methods for Deep Reinforcement
作者:禅与计算机程序设计艺术
1.简介
1992年,一个名叫雷·西蒙森()的人工智能研究者和计算机科学教授,提出了基于模型的强化学习(Model-Based Reinforcement Learning)方法。在这之后,不断涌现出的基于神经网络的强化学习算法纷纷问世,如Q-learning、Deep Q-Network(DQN)。但是,这些算法仍然存在着一些局限性:
- 限制能力,只能解决一些简单的任务;
- 不稳定性,随着环境的变化,模型可能发生错误;
- 计算复杂度高,对硬件要求高。
在本文中,作者将介绍一种新的基于Actor-Critic(基础)框架的深度强化学习算法——NAF(Neural Actor-Critic)算法。该算法利用神经网络建模两个相互作用的代理人——智能体(actor)和评论者(critic),让智能体根据评估值给予动作,并通过与环境的交互来训练其策略模型。因此,它克服了上述三个缺点,可以直接解决复杂多变的任务,并且它的计算效率很高,不需要占用过多的资源。
作者认为,这一算法的关键点在于引入actor-critic框架,将智能体的动作值评估函数、当前状态和奖励作为输入,然后由actor产生动作,而critic提供评估值作为actor对动作的反馈,从而提升智能体的性能。同时,作者还提出了一种改进的算法设计,通过参数共享的方式实现了在多个智能体之间进行参数共享,减少了算法的计算量,同时也确保了算法的稳定性。
本文首先对强化学习的基本知识进行介绍,包括强化学习任务定义、状态、动作、奖励、策略、价值函数等。然后,介绍Actor-Critic架构及其优点,以及NAF算法。最后,详细描述NAF算法的具体结构、原理、特点及应用。
本文不是一篇简单的技术博客,而是一个具有开阔视野和探索精神的高水平论文。希望读者在阅读完毕后能够自行加工、实践、创新,并且期待能与更多同行共同进步。祝大家阅读愉快!
2.相关研究
2000年,麻省理工学院计算机科学系的乔伊斯·安德鲁·弗里德曼(George A. Gregor)等人提出了Q-Learning算法。这是一种基于值的迭代算法,可以求解最优的控制策略。它通过直接最大化目标值得到的,所以计算复杂度低。与此同时,基于模型的强化学习算法,如强化学习中的TD(0)、SARSA等,则更接近现实世界。然而,它们都是非端到端(end-to-end)的方法,需要手动设计策略,学习策略与环境之间的映射关系。
1993年,卡内基梅隆大学的柯克兰(Kirk Lanczos)、谢尔盖·戴明(Suresh Damiani)、哈依·普莱姆(Hugh Palm)、李·萨提亚(Li Sa TA)、埃里克·帕克(Eric Pascal)等人首次提出了深度Q-Network(DQN)算法。它可以解决连续动作空间的问题,同时采用了目标更新策略,减少了偏差。但是,它存在很多局限性:难以收敛、快速震荡、容易陷入局部最优、局部最小值等。
在2017年,DeepMind团队提出了新的无模型的Actor-Critic算法——Proximal Policy Optimization (PPO),它在离线RL任务中取得了出色的表现。但它没有考虑到连续动作空间问题,且仍然受限于增强学习的局限性。
1983年,雷·西蒙森等人提出了基于模型的强化学习方法,称之为TD-Learning。其基于贝叶斯学习的策略评估阶段,可以求得一个确定性的策略,通过不断试错,逐渐学会策略,获得最优的控制策略。然而,其价值函数的表示形式很有限,无法处理连续动作空间。
2016年,深度强化学习领域迎来了一场新的挑战——连续动作空间问题。伯克利的克里斯托弗·科斯等人提出了Deep Deterministic Policy Gradient(DDPG)算法,采用了最新的DQN的思想,可以有效地解决连续动�力空间问题。DDPG不像DQN那样有很好的方差校正效果,并且需要对环境进行复杂的仿真。
2018年,Facebook AI的李宏毅等人提出了新的无模型的Actor-Critic算法——NAF(Neural Actor-Critic)。它克服了DQN的一些缺点,使用Actor-Critic架构,使得智能体能够自己学习策略,适用于任意复杂的强化学习环境。
3.AI 概念
强化学习任务定义
强化学习的任务一般定义如下:给定一个环境状态 s ,智能体 agent 在给定的一个策略 π 下选择一个动作 a 。根据环境的反馈信息 r 和下一时刻环境状态 s’ ,agent 根据奖赏函数 R(s,a,s’) 更新策略,使得选择动作 a 的期望回报 r(s,a,s’) 大于之前选择相同动作时的期望回报。也就是说,agent 通过不断试错、修正错误,来提升自己学到的策略,获得最大化的累计奖赏。
状态 State
状态是环境给智能体带来的信息。在强化学习中,通常有三种类型的状态:
- 观测状态 Observation state:智能体接收到的环境信息,例如当前图像帧、当前位置、当前奖励等。
- 可观测状态 Observable state:智能体感知到的环境信息,例如智能体位置、颜色、形状等。
- 隐变量 Hidden state:智能体内部信息,例如策略参数、网络权重等。
动作 Action
动作是智能体用来影响环境的行为,是在状态空间的一个向量或标量。在强化学习中,动作可分为两类:
- 决策动作 Decision action:智能体根据策略选取的动作,例如执行预先设定的轨迹、判断并执行最佳的手段等。
- 执行动作 Execution action:智能体实际完成的动作,例如前进、转身、击打等。
奖励 Reward
奖励是当智能体执行某个动作后,环境给予的奖励信号。在强化学习中,奖励可以分为以下几类:
- 即时奖励 Instant reward:当执行动作时立刻获得的奖励,通常是被动获取的。例如,在游戏中,奖励通常是游戏结束时得到的金币。
- 次级奖励 Secondary reward:当执行动作时,由于环境的变化而获得的奖励,比如移动到目标位置奖励 +1 或遭遇危险惩罚 -1。
- 折扣奖励 Discounted reward:环境给智能体的总的奖励,包括即时奖励和次级奖励,折扣奖励使得智能体认为长远来说,比短期获得的奖励要更重要。
- 终止奖励 Terminal reward:当智能体的任务完成或者达到了预先设定的目标时,获得的奖励。
回合制与一步制
在强化学习中,智能体通常在一个回合内执行若干个动作,称为一次episode。在一次episode中,智能体可以收到多次奖励。而在一步制中,智能体只需执行一步即可得到奖励,整个过程就视为一次episode。
策略 Policy
策略是指智能体对于不同状态下的动作的选择概率分布。在强化学习中,策略可分为两种类型:
- 确定性策略 Deterministic policy:即每个状态只有唯一的最优动作,通常是最大化奖励的动作。
- 随机策略 Stochastic policy:即智能体在不同的状态下可能选择不同的动作,每一个动作的概率也是不一样的。
价值函数 Value function
价值函数 V(s) 是指智能体在状态 s 下的期望累计奖励。它衡量的是在给定策略π情况下,智能体从状态 s 起始,执行任意动作 a 后,获得的期望回报。给定一组策略π,V函数是找到一个映射,把每个状态s映射成一个对应的值。在强化学习中,价值函数可以有多种方式,例如基于期望奖励的回报函数,基于时间的价值函数,基于平滑的价值函数。
环境 Environment
环境是智能体与外界的交互作用,是智能体所面对的真实世界。它包括物理世界、外部世界、智能体自身,并随着智能体的行动而改变。环境往往是随机的、复杂的、不可预测的,其对智能体的影响是永远持续不断的。
模型 Model
环境模型是一个关于环境的假设模型,由系统的动态特性及外界输入及噪声的影响而生成。通过对环境的建模,可以为智能体设计一个仿真环境,用于模拟智能体与真实环境的交互过程。
4. Actor-Critic 架构及其优点
Actor-Critic 是一个可以同时做决定和评估的框架,借鉴了深度学习的价值网络和策略网络的思想。其优点如下:
- 解决了深度学习中的回合偏移问题,避免了曾经出现的样本偏置现象。在强化学习中,样本的顺序并不能完全决定当前的策略和奖励,因为智能体可能会在试错过程中产生偏差。因此,回合偏移问题一直困扰着强化学习的研究者们。Actor-Critic 方法通过为智能体提供对状态动作价值函数的评估,帮助智能体更好地训练策略模型。
- 提供了全面的回报估计,除了动作的奖励,还有状态的价值估计。基于状态的价值估计,可以为智能体提供更准确的未来奖励预测。
- 透明性与可解释性,Actor-Critic 可以提供智能体学习到的决策逻辑,从而达到更好的模型解释性。
5. NAF 算法原理与操作步骤
算法结构
NAF(Neural Actor-Critic)算法由两个相互独立的网络组成,分别是Actor和Critic。前者是一个动作选取网络,负责输出动作的分布;后者是一个状态评估网络,负责输出状态的价值。具体结构如下图所示:
]
- Actor网络:输入状态信息,输出动作概率分布,动作参数 θ ∥ = φ θ ( s ) + u , θ∥=φθ(s)+u, θ∥=φθ(s)+u, 其中u是神经元,是一个非线性层。其中,θ∥表示θ的偏置项,φθ(s)表示状态s对应的特征项。
- Critic网络:输入状态信息,输出状态的评估值,值函数 V ( s ) = E [ R ( s , a , s ′ ) ] + γ V ( s ′ ) V(s) = E[R(s,a,s′)]+γV(s′) V(s)=E[R(s,a,s′)]+γV(s′), 其中R(s,a,s′)表示在状态s下执行动作a后在状态s′的奖励。
以上就是NAF算法的整体结构。
核心算法
- 参数更新:对于一条轨迹τ=(s0,a0,r1,s1,…,sk,ak,rk+1), Actor网络利用动作参数θ∥、评估参数φθ和记忆参数μ,学习出一条可信的轨迹传播到Critic网络。也就是说,Actor网络最大化下面的损失函数:
a(s,a)=logπθ∥(s,a)+(1−δ) log 𝜆(s,a)+𝔼[V(st+1)-Q(st,at,st+1)], st+1∼D, a ∈ A(s)
其中,δ是折扣因子,A(s)表示状态s下可执行的动作集合,πθ∥(s,a)是状态s下执行动作a的概率分布,𝜆(s,a)是状态s下执行动作a的预期价值,V(st+1)是状态st+1的真实价值,Q(st,at,st+1)是状态st下执行动作at的价值。目标是使得Actor网络在轨迹上的损失函数尽可能小。
对于一条轨迹τ=(s0,a0,r1,s1,…,sk,ak,rk+1),Critic网络的目标是学习到状态价值函数V(s),其中,V(s) = E[R(s,a,s′)]+γV(s′)是基于状态s的价值函数。根据给定的状态序列(s0,a0,s1,…,sk-1),Critic网络学习出在状态si上收益的期望,基于这一估计,可以计算状态价值函数。目标是使得Critic网络学习到的价值函数尽可能接近真实的价值函数。
2. 训练策略:为了生成更好的动作,智能体需要不断修改策略。策略梯度法是强化学习中最常用的策略更新方法之一。在策略梯度法中,智能体维护一个策略估计θ∥’,它是一个函数,输入状态s,输出在状态s下采取动作的概率分布。其目标函数是:
J ( θ ∥ ′ ) = − ∑ [ l o g π θ ∥ ( s t , a t ) + α ( G t − Q ( s t , a t ) ) 2 ] , s t ∈ S , a t ∈ A ( s t ) , t = 0 , . . . , T . J(θ∥')=-∑[logπθ∥(st,at)+α(Gt−Q(st,at))²], st∈S, at∈A(st), t=0,...,T. J(θ∥′)=−∑[logπθ∥(st,at)+α(Gt−Q(st,at))2],st∈S,at∈A(st),t=0,...,T.
其中,α(Gt−Q(st,at))²是方差项,它使得更新频率较低的状态动作对更新频率较高的状态动作有更大的贡献度。Gt是状态s的真实的累计奖励。梯度更新规则如下:
θ ∥ ′ ( t + 1 ) = θ ∥ ( t ) + α ∇ J ( θ ∥ ′ ) . θ∥'(t+1)=θ∥(t)+α∇J(θ∥'). θ∥′(t+1)=θ∥(t)+α∇J(θ∥′).
这里,α表示学习速率,取值范围在(0,1]之间。 α是一个超参数。
值函数的梯度估计使用梯度上升算法。在梯度上升算法中,智能体维护一个状态价值函数估计φθ’,它是一个函数,输入状态s,输出在状态s下获得的期望奖励。其目标函数是:
J ( φ θ ′ ) = E [ ( G t − V ( s t ) ) 2 ] . J(φθ')=E[(Gt−V(st))²]. J(φθ′)=E[(Gt−V(st))2].
其中,Gt是状态s的真实的累计奖励。梯度更新规则如下:
φ θ ′ ( t + 1 ) = φ θ ( t ) + α ∇ J ( φ θ ′ ) , t = 0 , . . . , T . φθ'(t+1)=φθ(t)+α∇J(φθ'), t=0,...,T. φθ′(t+1)=φθ(t)+α∇J(φθ′),t=0,...,T.
此处,α表示学习速率,取值范围在(0,1]之间。 这两个网络是Actor-Critic架构中的两个独立网络,它们可以并行训练。
操作步骤
- 初始化:设定网络的参数θ∥’、φθ’、μ等初始值,把环境初始化为初始状态s0。
- 执行策略更新:根据当前策略θ∥和当前状态s0,执行一步动作a0,进入下一状态s1,并得到奖励r1。
- 获取记忆:对于一条轨迹 τ = ( s 0 , a 0 , r 1 , s 1 , … , s k , a k , r k + 1 ) τ=(s0,a0,r1,s1,…,sk,ak,rk+1) τ=(s0,a0,r1,s1,…,sk,ak,rk+1),记忆 η = [ ( φ θ ( s t ) , m ) ( s t ∈ t a u ) ] η=[(φθ(st),m)(st∈tau)] η=[(φθ(st),m)(st∈tau)]; 将状态s0和动作a0的信息记录在η中。
- 估计状态价值:根据η,估计在状态s1的状态价值函数V(s1) = E[R(s1,a1,s2)]+γV(s2);基于当前状态s1和动作a1,执行动作a2,并得到奖励r2。
- 更新记忆:对于一条轨迹 τ = ( s 0 , a 0 , r 1 , s 1 , … , s k , a k , r k + 1 ) τ=(s0,a0,r1,s1,…,sk,ak,rk+1) τ=(s0,a0,r1,s1,…,sk,ak,rk+1),更新记忆 η = [ ( φ θ ( s t ) , m ′ ) ( s t ∈ t a u ) ] η=[(φθ(st),m')(st∈tau)] η=[(φθ(st),m′)(st∈tau)],其中 m ′ = γ m + ( 1 − γ ) e ( − λ θ ∥ ( s k , a k ) ) m'=γm+(1−γ)e^(-λθ∥(sk,ak)) m′=γm+(1−γ)e(−λθ∥(sk,ak)), λ是参数,它控制了记忆的衰减速度。
- 策略梯度估计:用Φ=(φθ’,θ∥’)表示NAF网络,用θ∥’表示Actor网络的策略估计,用φθ’表示Critic网络的状态价值估计。根据当前的策略θ∥’,用 δ θ = δ θ ( s ) ∗ e ( ∑ ( θ ∥ ( t ) − θ ∥ ( t + 1 ) ) ∗ ( t + 1 ) ) δθ=δθ(s)*e^(∑(θ∥(t)-θ∥(t+1))*(t+1)) δθ=δθ(s)∗e(∑(θ∥(t)−θ∥(t+1))∗(t+1))更新策略参数θ∥’;用δφ=δφ(s)e^(∑(φθ(t)-φθ(t+1))(t+1))更新状态价值函数φθ’。
- 重复第4步至第6步直至结束。
6. 附录
6.1 常见问题与解答
为什么要引入Actor-Critic架构?
- 为了更好的学习复杂的环境和任务。
- 基于最大化期望回报的模型。
- 从统计角度衡量学习效果。
如何理解“actor”和“critic”的作用?
- actor根据当前策略π,在当前状态s下采取动作a,actor可以看做是基于策略的随机游走(random walk)。
- critic提供actor关于状态价值V(s)的信息,使得actor能更好地估计状态价值和动作价值。
NAF算法的优势有哪些?
- 更好的状态表达能力。
- 不需要专门设计网络结构,利用神经网络自动学习强化学习任务的表示。
- 更高效的计算。
如何理解“方差参数”?
- σ控制状态-动作价值函数Q(st,at,st+1)的变动幅度,越小方差越大。
- 增加方差参数可以降低状态的依赖性,减少稀疏性。
Proximal Policy Optimization (PPO)算法与NAF算法的区别是什么?
- 相同点:均使用神经网络来学习策略和状态价值函数,都采用策略梯度方法来更新策略。
- 不同点:NAF算法用公式公式(10)来更新策略,而PPO算法用公式公式(7)来更新策略。
ization (PPO)算法与NAF算法的区别是什么? - 相同点:均使用神经网络来学习策略和状态价值函数,都采用策略梯度方法来更新策略。
- 不同点:NAF算法用公式公式(10)来更新策略,而PPO算法用公式公式(7)来更新策略。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
