软Actor-Critic代理
软actor-批评家(SAC)算法是一种无模型、在线、非策略、actor-批评家强化学习方法。SAC算法计算一个最优的策略,使长期期望的回报和策略的熵最大化。政策熵是给定状态下政策不确定性的度量。更高的熵值促进更多的探索。最大化预期的累积长期回报和熵平衡以及对环境的开发和探索。
有关不同类型的强化学习代理的更多信息,请参见强化学习代理.
在Reinforcement Learning Toolbox™软件中,SAC代理的实现使用了两个q -值函数批评器,这防止了对值函数的过高估计。SAC算法的其他实现使用附加值函数批评家。
SAC特工可以在具有以下观察和行动空间的环境中进行训练。
观察太空 | 行动空间 |
---|---|
离散或连续 | 连续 |
SAC特工使用以下演员和评论家。
批评人士 | 演员 |
---|---|
核反应能量函数的批评者问(年代,一个),您可以使用 |
随机政策演员π(年代),您可以使用 |
在训练中,SAC特工:
在学习期间,定期更新演员和评论家的属性。
估计连续动作空间的高斯概率分布的均值和标准差,然后根据该分布随机选择动作。
更新熵权项,以平衡预期收益和策略的熵。
使用循环经验缓冲区存储过去的经验。代理使用从缓冲区中随机抽样的一小批经验来更新演员和评论家。
如果UseExplorationPolicy
代理的选项设置为假
用最大似然的动作sim卡
而且generatePolicyFunction
.因此,模拟的代理和生成的策略的行为是确定的。
如果UseExplorationPolicy
被设置为真正的
代理通过抽样其概率分布来选择其行为。因此,政策具有随机性,主体探索其观察空间。
此选项仅影响模拟和部署;这并不影响训练。
行动者和批评家函数逼近器
为了估计策略和价值函数,SAC代理维护以下函数逼近器。
随机的演员π(一个|年代;θ) -演员,有参数θ,输出执行每个连续动作的条件高斯概率的均值和标准差一个在国家年代.
一两个q值评论家问k(年代,一个;ϕk——批评者,每个人都有自己的标准ϕk,观察年代和行动一个作为输入和返回值函数的相应期望,其中包括长期奖励和熵。
有一两个目标是批评者问tk(年代,一个;ϕtk) -为了提高优化的稳定性,agent定期设置目标临界参数ϕtk到最新对应的临界参数值。目标批评者的数量与批评者的数量相匹配。
当你使用两个批评家时,问1(年代,一个;ϕ1),问2(年代,一个;ϕ2),每个批评家可以有不同的结构。当批评家具有相同的结构时,它们必须具有不同的初始参数值。
每一个评论家问k(年代,一个;ϕk)和相应的目标批评者问tk(年代,一个;ϕtk)必须具有相同的结构和参数化。
有关为函数近似创建参与者和批评者的更多信息,请参见创建政策和价值功能.
在训练过程中,代理调整参数值θ.训练后,参数保持其调优值,并将训练后的actor函数近似器存储在π(一个|年代).
行动的一代
SAC代理中的参与者生成平均值和标准偏差输出。为了选择一个动作,参与者首先从具有这些参数的高斯分布中随机选择一个无界动作。在训练过程中,SAC代理使用无界概率分布来计算给定观察结果的策略熵。
如果SAC代理的操作空间是有界的,则参与者通过应用生成有界的操作双曲正切而且扩展操作到无界动作。
代理创建
您可以在MATLAB中创建和训练SAC代理®命令行或使用强化学习设计有关使用强化学习设计,请参阅使用强化学习设计器创建代理.
在命令行中,您可以根据来自环境的观察和操作规范,创建带有默认参与者和批评家的SAC代理。为此,请执行以下步骤。
为您的环境创建观察规范。如果您已经有了一个环境接口对象,您可以使用
getObservationInfo
.为您的环境创建操作规范。如果您已经有了一个环境接口对象,您可以使用
getActionInfo
.如果需要,指定每个可学习层的神经元数量,或者是否使用循环神经网络。为此,使用创建代理初始化选项对象
rlAgentInitializationOptions
.如果需要,可以使用
rlSACAgentOptions
对象。方法创建代理
rlSACAgent
对象。
或者,您可以创建演员和评论家,并使用这些对象创建代理。在这种情况下,确保行动者和批评家的输入和输出维度与环境的相应动作和观察规范相匹配。
创建一个随机角色使用
rlContinuousGaussianActor
对象。对于SAC代理,为了适当地将平均值扩展到所需的动作范围,参与者网络必须不包含tanhLayer
而且scalingLayer
作为均值输出路径的最后两层。同样,为了保证标准差值的非负性,行动者网络中不能包含reluLayer
作为输出路径中的最后一层的标准差值。创建一个或两个批评使用
rlQValueFunction
对象。方法指定代理选项
rlSACAgentOptions
对象。方法创建代理
rlSACAgent
对象。
SAC代理不支持使用循环深度神经网络作为函数逼近器的参与者和批评者。
有关为函数近似创建参与者和批评者的更多信息,请参见创建政策和价值功能.
训练算法
SAC代理使用以下训练算法,其中它们定期更新参与者和批评家模型以及熵权。要配置训练算法,请使用rlSACAgentOptions
对象。在这里,K= 2是多少批评家和k是评论家指数。
初始化每个评论家问k(年代,一个;ϕk),参数值随机ϕk,并使用相同的随机参数值初始化每个目标批评家: .
初始化的演员π(年代;θ),参数值随机θ.
通过执行初始随机策略之后的一系列操作来执行热启动π(年代).对于每个操作,将经验存储在经验缓冲区中。要指定热身动作的数量,请使用
NumWarmStartSteps
选择。对于每个训练时间步骤:
对于目前的观测年代,选择行动一个中使用策略π(年代;θ).
执行动作一个.观察奖励R其次观察年代.
储存经验(年代,一个,R,年代)在经验缓冲区中。
随机抽样一小批米经验(年代我,一个我,R我,年代我)的经验缓冲。指定米,可以使用
MiniBatchSize
选择。每一个DC时间步长,更新每个批评家的参数,使损失最小化lk在所有抽样的经历中。指定DC,可以使用
CriticUpdateFrequency
选择。如果年代我是终端状态、价值功能的目标吗y我等于经验奖励吗R我.否则,值函数目标是的和R我,批评者未来回报折现的最小值,以及加权熵。
在这里:
一个“我有界动作是由行为人的无界输出派生出来的吗π(年代我).
γ方法指定的折扣因子是
DiscountFactor
选择。当行为人处于状态时,其有界输出的加权策略熵是多少年代.α是熵损失的权重,你用
EntropyLossWeight
选择。
每一个D一个时间步长,通过最小化以下目标函数来更新参与者参数。设置D一个,可以使用
PolicyUpdateFrequency
选择。每一个D一个时间步,也更新熵权通过最小化以下损失函数。
在这里,ℋ是目标熵,你用
EntropyWeightOptions。TargetEntropy
选择。每一个DT步骤,根据目标更新方法更新目标批评者。指定DT,可以使用
TargetUpdateFrequency
选择。有关更多信息,请参见目标更新方法.重复步骤4到8NG次,NG方法指定的渐变步骤数
NumGradientStepsPerUpdate
选择。
目标更新方法
SAC代理使用以下目标更新方法之一更新其目标批评者参数。
平滑——使用平滑因子在每个时间步更新目标临界参数τ.要指定平滑因子,请使用
TargetSmoothFactor
选择。周期-不平滑地定期更新目标临界参数(
TargetSmoothFactor = 1
).命令指定更新周期TargetUpdateFrequency
参数。周期平滑——通过平滑定期更新目标参数。
要配置目标更新方法,请创建rlSACAgentOptions
对象,并设置TargetUpdateFrequency
而且TargetSmoothFactor
参数说明如下表所示。
更新方法 | TargetUpdateFrequency |
TargetSmoothFactor |
---|---|---|
平滑(默认) | 1 | 小于1 |
周期 | 大于1 | 1 |
周期性的平滑 | 大于1 | 小于1 |
参考文献
[1] Haarnoja, Tuomas, Aurick Zhou, Kristian Hartikainen, George Tucker, Sehoon Ha, Jie Tan, Vikash Kumar,等。软actor - critical算法及其应用。预印本,2019年1月29日提交。https://arxiv.org/abs/1812.05905.