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