软行为者-批评(SAC)算法是一种无模型、在线、非政策的行为者-批评强化学习方法。SAC算法计算一个最优策略,使长期预期回报和策略的熵最大化。政策熵是给定状态下政策不确定性的度量。更高的熵值促进更多的探索。最大化预期的累积长期回报和熵平衡开发和探索环境。
有关不同类型的强化学习代理的更多信息,请参见强化学习代理.
在Reinforcement Learning Toolbox™软件中,SAC代理的实现使用了两个q值函数批评家,以防止高估价值函数。SAC算法的其他实现使用了附加价值函数评判。
SAC特工可以在具有以下观察和行动空间的环境中进行训练。
观察太空 | 行动空间 |
---|---|
离散或连续 | 连续 |
SAC特工使用以下演员和评论家的表述。
评论家 | 演员 |
---|---|
核反应能量函数评论家问(年代,一个),您可以使用 |
随机政策演员π(年代),您可以使用 |
在训练中,一名SAC特工:
在学习期间,定期更新演员和评论家的属性。
估计连续动作空间的高斯概率分布的均值和标准差,然后根据该分布随机选择动作。
更新熵权项,以平衡期望回报和策略的熵。
使用循环体验缓冲区存储过去的经验。代理使用从缓冲区中随机抽取的一小批经验来更新演员和评论家。
如果UseDeterministicExploitation
选项rlSACAgentOptions
被设置为真正的
动作的最大可能性总是用在sim卡
和generatePolicyFunction
.这将导致模拟的代理和生成的策略具有确定性的行为。
为了估计策略和价值函数,SAC代理维护以下函数近似器:
随机的演员π(年代|θ) -演员,有参数θ需要观察年代并返回动作概率密度函数。agent根据这个密度函数随机选择动作。
一两个q值批评家问k(年代,一个|ϕk) -评论家,每个都有参数ϕk,观察年代和行动一个作为输入并返回相应的期望值函数,其中包括长期回报和熵值。
有一两个批评的目标问tk(年代,一个|ϕtk)—为了提高优化的稳定性,agent定期设置目标批评家参数ϕtk以最新对应的批评家参数值为准。目标批评者的数量与批评者的数量相匹配。
当你使用两个评论家时,问1(年代,一个),问2(年代,一个),每个评论家可以有不同的结构。当评论器具有相同的结构时,它们的初始参数必须不同。
对于每一个评论家,问k(年代,一个),问tk(年代,一个)具有相同的结构和参数化。
当训练完成时,训练后的最优策略存储在actor中π(年代).
SAC代理中的行动者生成平均值和标准偏差输出。要选择一个动作,参与者首先从带有这些参数的高斯分布中随机选择一个无界动作。在训练过程中,SAC agent使用无界概率分布来计算给定观测的策略熵。
如果SAC代理的动作空间是有界的,则行动者通过应用生成有界动作双曲正切和扩展对无界操作的操作。
您可以根据环境中的观察和操作规范,创建具有默认参与者和批评者表示的SAC代理。为此,请执行以下步骤。
为您的环境创建观察规范。如果您已经有了一个环境接口对象,您可以使用以下方法获取这些规范getObservationInfo
.
为您的环境创建操作规范。如果您已经有了一个环境接口对象,您可以使用以下方法获取这些规范getActionInfo
.
如果需要,指定每个可学习层的神经元数量或是否使用递归神经网络。为此,使用以下方法创建代理初始化选项对象rlAgentInitializationOptions
.
如果需要,使用rlSACAgentOptions
对象。
使用rlSACAgent
对象。
或者,您可以创建参与者和批评者表示,并使用这些表示创建您的代理。在这种情况下,确保参与者和批评者表示的输入和输出维度与环境的相应操作和观察规范相匹配。
创建一个随机参与者使用rlStochasticActorRepresentation
对象。对于SAC代理,actor网络中不能包含一个tanhLayer
和scalingLayer
在平均输出路径中。
创建一个或两个批评家使用rlQValueRepresentation
对象。
指定代理选项rlSACAgentOptions
对象。
使用rlSACAgent
对象。
SAC代理不支持使用循环深度神经网络金宝app作为函数近似器的行动者和批评者。
有关为函数近似创建actor和批评者的更多信息,请参见创建策略和价值功能表示.
SAC agent使用以下训练算法,定期更新其actor和critic模型以及熵权。要配置训练算法,请使用rlSACAgentOptions
对象。在这里,K= 2是多少批评家和k是批评家索引。
初始化每个评论家问k(年代,一个),使用随机参数值ϕk,并用相同的随机参数值初始化每个目标批评家: .
初始化的演员π(年代),使用随机参数值θ.
按照初始的随机策略执行一系列操作来执行热启动π(年代).对于每一个动作,将经验储存在经验缓冲区中。要指定热身动作的数量,请使用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 |
Haarnoja, Tuomas, Aurick Zhou, Kristian Hartikainen, George Tucker, Sehoon Ha, Jie Tan, Vikash Kumar,等。软演员-评论家算法与应用预印本,2019年1月29日提交。https://arxiv.org/abs/1812.05905.