当前位置: 首页 > news >正文

优势演员-评论家(Advantage Actor-Critic,A2C)算法详解与完成

优势演员-评论家(Advantage Actor-Critic,A2C)算法详解与实现

    • 0. 前言
    • 1. Advantage Actor-Critic (A2C) 算法原理
    • 2. A2C 算法流程
    • 3. 实现 A2C

0. 前言

在强化学习领域,演员-评论家 (Actor-Critic)方法融合策略优化与价值评估,是解决复杂决策问题的重要框架。基于这一基础,优势演员-评论家 (Advantage Actor-Critic, A2C) 算法通过三个关键创新实现了性能提升:采用回合制更新替代在线学习,引入优势函数精准评估行动价值,并使用均方误差优化价值网络。此外,算法通过策略熵正则项促进探索,有效防止策略过早收敛。本节将深入解析 A2C 的理论基础,详述其与演员-评论家和 REINFORCE算法的核心差异,并使用 Keras 实现 A2C

1. Advantage Actor-Critic (A2C) 算法原理

演员-评论家 (Actor-Critic)方法中,其目标在于让价值函数能够准确评估状态价值。训练价值网络还存在其他技术,一种简单的方法是在价值函数优化中采用均方误差 (mean square error, MSE),这与Q学习中的算法类似。新的价值梯度等于回报 (RtR_tRt) 与状态价值之间均方误差的偏导数:
∇V(θv)=∂(Rt−(s,θv))2∂θv\nabla V(\theta_v) = \frac {\partial(R_t- (s,\theta_v))^2}{\partial\theta_v}V(θv)=θv(RtV(s,θv))2
(Rt−(s,θv))→0(R_t- (s,\theta_v)) \rightarrow 0(RtV(s,θv))0 时,价值网络对给定状态回报的预测会越来越精确。我们将演员-评论员算法的这种变体称为优势演员-评论家 (Advantage Actor-Critic, A2C)。A2C 是异步优势演员-评论家 (Asynchronous Advantage Actor-Critic, A3C) 的单线程或同步版本。量值 (Rt−(s,θv))(R_t- (s,\theta_v))(RtV(s,θv))称为优势量。

2. A2C 算法流程

以下算法流程总结了 A2C 方法。A2C演员-评论家 (Actor-Critic)存在几点差异:演员-评论家采用在线学习方式,即基于每个经验样本进行训练;而 A2C 则与蒙特卡洛算法、REINFORCE 算法及带基线的 REINFORCE 算法类似,是在完成整个回合后才进行训练。演员-评论家从初始状态训练至终止状态,A2C 则从终止状态开始训练至初始状态。此外,A2C 的策略梯度和价值梯度不再使用 γt\gamma^tγt进行折现计算。
为增强智能体在训练过程中的探索能力,A3C 算法提出在梯度函数中引入策略函数加权熵值的梯度项 β∇θH(π(at∣st,θ))\beta\nabla_\theta H(\pi(a_t|s_t,\theta))βθH(π(atst,θ))。需要说明的是,熵是衡量事件信息量或不确定性的指标。

定义可微参数化目标策略网络π(at∣st,θ)\pi(a_t|s_t,\theta)π(atst,θ)与可微参数化价值网络V(st,θv)V(s_t,\theta_v)V(st,θv);设定折扣因子γ∈[0,1]\gamma∈[0,1]γ[0,1],性能梯度学习率α\alphaα,价值梯度学习率αv\alpha_vαv,以及熵权重β\betaβ;初始化策略网络参数θ0\theta_0θ0与价值网络参数θv0\theta_{v_0}θv0
重复执行
 依据策略 π(at∣st,θ)\pi(a_t|s_t,\theta)π(atst,θ)生成完整轨迹(s0a0r1s1,s1a1r2s2,...,st−1at−1rtst)(s_0a_0r_1s_1, s_1a_1r_2s_2, ..., s_{t-1}a_{t-1}r_ts_t)(s0a0r1s1,s1a1r2s2,...,st1at1rtst)
计算终止状态回报:Rt={0sT为终止状态V(sT,θv)对于非终止状态sT,从最终状态开始进行自举法估计R_t=\begin{cases}0 & s_T为终止状态\\ V(s_T,θ_v) & 对于非终止状态 s_T, 从最终状态开始进行自举法估计 \end{cases}Rt={0V(sT,θv)sT为终止状态对于非终止状态sT,从最终状态开始进行自举法估计
 从最后一步 t=T−1t=T-1t=T1反向遍历至初始状态t=0t=0t=0
计算累计回报:Rt=rt+γRtR_t = r_t + \gamma R_tRt=rt+γRt
计算价值梯度:∇V(θv)=∂(Rt−V(s,θv))2∂θv\nabla V(\theta _v) = \frac {\partial (R_t - V(s,\theta _v))²}{\partial \theta _v}V(θv)=θv(RtV(s,θv))2
累积价值梯度更新:θv=θv+αv∇V(θv)\theta _v = \theta _v + \alpha _v\nabla V(\theta _v)θv=θv+αvV(θv)
计算策略梯度:∇J(θ)=∇θlnπ(at∣st,θ)(Rt−V(s,θv))+β∇θH(π(at∣st,θ))\nabla J(\theta) = \nabla _\theta ln\pi(a_t|s_t,\theta)(R_t - V(s,\theta _v)) + \beta \nabla _\theta H(\pi(a_t|s_t,\theta))J(θ)=θl(atst,θ)(RtV(s,θv))+βθH(π(atst,θ))
执行梯度上升:θ=θ+α∇J(θ)\theta = \theta + \alpha \nabla J(\theta)θ=θ+αJ(θ)

3. 实现 A2C

接下来,使用 Keras 实现 A2CAgent 类。与两种 REINFORCE 方法不同,本算法从最终经验单元反向计算至初始状态。在每个经验单元处,目标函数网络 logp_model 和价值函数网络 value_model 分别通过调用 fit() 方法进行优化。需要注意的是,在对象实例化时,熵损失权重 beta 设置为 0.9 以启用熵损失函数,且 value_model 采用均方误差损失函数进行训练。

class A2CAgent(PolicyAgent):
def __init__(self,env):
super().__init__(env)
#beta of entropy used in A2C
self.beta = 0.9
#loss function of A2C value_model is mse
self.loss = 'mse'
def train_by_episode(self,last_value=0):
#implements A2C training from the last state
#to the first state
#discount factor
gamma = 0.95
r = last_value
#the memory is visited in reverse
for item in self.memory[::-1]:
[step,state,next_state,reward,done] = item
#compute the return
r = reward + gamma * r
item = [step,state,next_state,r,done]
#train pre step
#a2c reward has been discounted
self.train(item)
def train(self,item,gamma=1.0):
[step,state,next_state,reward,done] = item
#must save state for entropy computation
self.state = state
discount_factor = gamma ** step
#a2c: delta = discounted_reward - value
delta = reward - self.value(state)[0]
discounted_delta = delta * discount_factor
discounted_delta = np.reshape(discounted_delta,[-1,1])
verbose = 1 if done else 0
#train the logp model (implies training of actor model 
# as well) since they share exactly the same set of parameters
self.logp_model.fit(np.array(state),
discounted_delta,
batch_size=1,
epochs=1,
verbose=verbose)
#in A2C, the target value is the return (reward
# replaced by return in train_by_episode function)
discounted_delta = reward
discounted_delta = np.reshape(discounted_delta,[-1,1])
#train the value network (critic)
self.value_model.fit(np.array(state),
discounted_delta,
batch_size=1,
epochs=1,
verbose=verbose)
http://www.jsqmd.com/news/55699/

相关文章:

  • 2025年十大闭式冷却塔定制服务提供商排行榜,精选闭式冷却塔
  • 2025年哈尔滨中央空调销售公司排名:中央空调销售品牌推荐
  • HTML列表学习笔记
  • 2025年十大不锈钢压花板厂商排行榜,靠谱不锈钢压花板制造厂
  • 哈尔滨口碑好的家居设备专业公司TOP5权威推荐:甄选实力企业
  • 深入解析:2025-10-30日供应链安全日报:最新漏洞预警与投毒预警情报汇总
  • 光刻胶分类与特性:化学增幅i线光刻胶 CAR、金属氧化物光刻胶及EUV光刻胶前沿进展(续) - 详解
  • 2025年十大上海起重设备品牌排行榜,凯力起重设备质量可靠吗
  • 2025年度哈尔滨一站式家居设备定制服务排行榜,专业测评精选
  • NOIP2025 总结
  • 专业的的楼梯钢格板供应商推荐排行榜单?楼梯钢格板供应商 楼梯钢格板销售厂家 楼梯钢格板制造厂 楼梯钢格板生产商 楼梯钢格板厂商 楼梯钢格板企业 楼梯钢格板供货商
  • 正规的电厂钢格栅供应商推荐排行榜单?电厂钢格栅供应商 电厂钢格栅销售厂家 电厂钢格栅制造厂 电厂钢格栅生产商 电厂钢格栅厂商 电厂钢格栅企业 电厂钢格栅供货商
  • 可靠的工业铝型材供应厂家推荐排行榜?工业铝型材供应厂家 工业铝型材工厂 工业铝型材厂家 工业铝型材生产厂家 工业铝型材源头厂家 工业铝型材供应商
  • 2025年山东帽顶膜结构停车棚安装厂家推荐:学校/拉杆式膜结
  • 2025年哈尔滨家居设备服务公司排名:盛通MALL旗舰店的用
  • 专业的遮阳蓬品牌哪家靠谱?遮阳蓬品牌 遮阳蓬公司 遮阳蓬产品 遮阳蓬供应厂家 遮阳蓬工厂 遮阳蓬厂家 遮阳蓬生产厂家 遮阳蓬源头厂家
  • 《考研408数据结构》第七章(6.1~6.3图的概念、存储方式、深/广度遍历)复习笔记 - 教程
  • 国内AI独角兽公司推荐:探索智能科技前沿力量
  • 国内AI公司估值排行:行业技术实力与发展潜力观察
  • 正规的推拉雨棚品牌哪家靠谱?推拉雨棚品牌 推拉雨棚公司 推拉雨棚产品 推拉雨棚供应厂家 推拉雨棚工厂 推拉雨棚厂家 推拉雨棚生产厂家 推拉雨棚源头厂家
  • 靠谱的AI公司有哪些?行业深耕者实力盘点
  • 完整教程:人机交互的软件工程方法实验报告(黑龙江大学)
  • 国内AI公司推荐:智能获客与行业赋能的实力之选
  • 2025年口碑好的前置过滤器品牌哪家好?大白瓶前置过滤器 大胖瓶前置过滤器 小白瓶前置过滤器 大蓝瓶前置过滤器 双芯前置过滤器品牌推荐
  • 睡眠益生菌哪家好?五款热门产品深度解析
  • 上海AI创业公司排行榜:2025年创新技术与应用场景分析
  • 中国AI科技公司融资榜推荐:行业领军企业实力解析
  • 适合长期吃的助眠益生菌品牌推荐
  • 专业的电脑维修常见故障品牌推荐榜?电脑维修常见故障品牌 电脑维修常见故障公司 电脑维修常见故障服务 电脑维修常见故障上门 电脑维修常见故障服务商
  • BEHAVIOR-1K:面向日常活动的具身AI仿真基准