强化学习中的Actor-Critic算法与倒立摆控制 1. 从倒立摆问题理解强化学习控制在控制理论中倒立摆问题一直被视为经典的控制难题。想象一下你要用手指平衡一根直立的木棍——这需要根据木棍的倾斜角度和速度实时调整手指的移动方向和力度。Acrobot问题可以看作是这个经典问题的升级版系统由两个相连的连杆组成我们需要通过控制两个连杆之间的关节扭矩让自由端摆动到目标高度。这个看似简单的机械系统实际上包含了强化学习中的几个核心挑战状态空间连续两个连杆的角度和角速度都是连续值动作空间离散但影响连续虽然只有三个离散动作-1,0,1扭矩但每个动作都会对连续状态产生复杂影响延迟奖励只有在自由端达到目标高度时才会获得正奖励之前的每一步都是负奖励2. Acrobot系统详解2.1 系统动力学建模Acrobot系统可以用拉格朗日力学来描述。设m₁,m₂两个连杆的质量l₁,l₂连杆长度θ₁,θ₂绝对角度和相对角度τ施加的扭矩我们的控制输入系统的动力学方程可以表示为M(θ)θ̈ C(θ,θ̇)θ̇ G(θ) [0; τ]其中M是惯性矩阵C包含科里奥利力项G是重力项。这个非线性方程表明即使简单的双连杆系统其动力学已经相当复杂。2.2 观测空间解析观测空间包含6个维度cos(θ₁)和sin(θ₁)第一连杆角度的三角函数表示cos(θ₂)和sin(θ₂)相对角度的三角函数表示θ₁̇和θ₂̇两个连杆的角速度使用三角函数而非直接角度值有两个好处角度周期性cos(θ2π)cosθ避免了角度跳变问题数值稳定性保持在[-1,1]范围内有利于神经网络训练2.3 奖励函数设计奖励函数看似简单未达目标每步-1达到目标0但设计精妙稀疏奖励只有终止状态有非负奖励时间惩罚鼓励尽快完成任务阈值设计-cosθ₁-cos(θ₁θ₂)1.0的终止条件对应自由端达到水平线以上3. Actor-Critic算法原理3.1 策略梯度与值函数的结合传统策略梯度方法如REINFORCE有三个主要问题高方差基于蒙特卡洛的回报估计方差大低效需要完整回合后才能更新无基准没有比较基准来判断动作好坏Actor-Critic通过引入Critic网络解决了这些问题Actor策略网络学习策略π(a|s)负责生成动作Critic值函数网络估计V(s)或Q(s,a)提供基准3.2 优势函数与TD误差关键创新是使用优势函数A(s,a)Q(s,a)-V(s)来评估动作好坏。在实践中我们常用TD误差δ作为优势函数的估计δ r γV(s) - V(s)这个TD误差同时用于更新Critic最小化δ²更新Actor∇J ≈ E[∇logπ(a|s) * δ]3.3 算法流程详解交互采样用当前策略π与环境交互收集(s,a,r,s)样本存储到经验回放缓冲区可选Critic更新计算TD目标y r γV(s)最小化(V(s)-y)²Actor更新计算策略梯度∇J ∇logπ(a|s) * δ沿梯度方向更新策略参数4. 网络架构与实现细节4.1 共享特征提取器我们的实现使用共享的前馈层self.fc1 nn.Linear(input_dim, 128) self.fc2 nn.Linear(128, 128)然后分支出两个头self.actor nn.Linear(128, output_dim) # 策略头 self.critic nn.Linear(128, 1) # 值函数头这种设计有三个优点参数效率共享低层特征训练稳定性策略和价值函数共享特征表示收敛速度特征表示同时受两个目标监督4.2 动作选择机制动作选择包含两个关键步骤策略网络输出动作概率分布action_prob F.softmax(self.actor(x), dim1)按概率采样动作c torch.distributions.Categorical(action_prob) action c.sample()这种设计既保持了探索性通过采样又能逐渐收敛到确定性策略随着训练概率分布会趋于尖锐。4.3 损失函数设计总损失包含两部分策略损失Actorlog_prob torch.log(action_prob.gather(1, actions)) actor_loss -(log_prob * td_delta.detach()).mean()值函数损失Criticcritic_loss F.mse_loss(state_value, td_target).mean()最终损失是加权和loss actor_loss critic_loss * 0.5这个0.5的权重是超参数用于平衡两个损失的量级。5. 训练技巧与调优5.1 学习率设置Actor和Critic通常需要不同的学习率Critic学习率可以稍大如1e-3因为值函数学习通常更容易Actor学习率应该较小如5e-4避免策略变化过快在实践中可以使用Adam优化器自动调整。5.2 折扣因子γ的选择γ控制未来奖励的重要性γ接近1考虑长期回报但可能导致训练不稳定γ较小注重即时奖励训练稳定但可能短视对于Acrobotγ0.99是一个合理的起点。5.3 经验回放 vs 在线更新原始实现使用在线更新每回合更新优点简单直接缺点样本效率低序列相关性强改进方案可以引入经验回放缓冲区多步TD目标并行环境采样6. 实际训练观察6.1 典型训练曲线在300回合训练中我们通常会观察到三个阶段探索期0-50回合奖励维持在-500左右智能体随机探索学习期50-200回合奖励快速提升策略开始形成收敛期200回合奖励趋于稳定策略微调6.2 常见问题与解决策略停滞现象奖励长时间不提升解决增加探索率或调整学习率训练不稳定现象奖励剧烈波动解决减小学习率增大批次大小过早收敛现象策略陷入局部最优解决增加熵正则项鼓励探索7. 算法扩展与改进7.1 优势Actor-Critic (A2C)在基础AC上引入n步回报δ rₜ γrₜ₊₁ ... γⁿV(sₜ₊ₙ) - V(sₜ)平衡了MC和TD的优点。7.2 异步优势Actor-Critic (A3C)通过并行多个环境增加样本多样性加速训练过程提高探索效率7.3 信任域方法 (TRPO/PPO)解决AC训练不稳定的问题限制策略更新幅度保证单调改进更稳定的超参数敏感性8. 应用场景延伸虽然我们以Acrobot为例但Actor-Critic适用于许多控制问题机器人控制连续动作空间游戏AI星际争霸、DOTA等自动驾驶转向、油门控制金融交易投资组合管理在实际工业应用中通常需要考虑部分可观测性延迟奖励安全约束实时性要求9. 实操建议对于初学者实现第一个Actor-Critic模型建议从小环境开始如CartPole使用简单网络结构2-3层MLP监控训练过程奖励曲线、策略变化逐步增加复杂度如Acrobot善用可视化工具渲染环境、参数直方图调试时可以关注梯度大小避免消失/爆炸策略熵保持适度探索值函数估计误差