news 2026/7/18 3:42:08

【RL】从公式推导到电机控制:深入浅出理解 Policy Gradient 与 Sim-to-Real

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【RL】从公式推导到电机控制:深入浅出理解 Policy Gradient 与 Sim-to-Real

【RL】从公式推导到电机控制:深入浅出理解 Policy Gradient 与 Sim-to-Real

摘要:通过legged_gym训练四足机器人时,常常会遇到 Policy Gradient(策略梯度)的核心公式。本文不堆砌晦涩的术语,而是从数学推导出发,直观地解释这个梯度是如何一步步转化为控制电机转动的指令,并探讨为什么理论完美的策略在 Sim-to-Real 环节往往需要“域随机化”来救场。


1. 引言:由于什么我们在优化U ( θ ) U(\theta)U(θ)

在强化学习(RL)的世界里,我们训练的智能体(比如一只 Unitree A1 机器狗)拥有一个大脑——策略网络(Policy Network),其参数由θ \thetaθ表示。

当我们看着训练曲线(Reward Curve)不断上升时,本质上我们是在优化一个核心指标:U ( θ ) U(\theta)U(θ)

1.1U ( θ ) U(\theta)U(θ)的物理含义

U ( θ ) U(\theta)U(θ)代表的是期望回报 (Expected Return)。简单来说,它是衡量这只机器狗在当前智力水平(参数θ \thetaθ)下,平均能拿多少分。

数学定义如下:
U ( θ ) = E τ ∼ P θ ( τ ) [ R ( τ ) ] U(\theta) = E_{\tau \sim P_\theta(\tau)} [R(\tau)]U(θ)=EτPθ(τ)[R(τ)]

其中:

  • τ \tauτ(Trajectory):代表机器人的一次完整尝试(从开机到摔倒或结束的一连串状态s ss和动作a aa的序列)。
  • R ( τ ) R(\tau)R(τ):这一次尝试获得的总分数(走得远加分,摔倒扣分,力矩过大扣分)。
  • P θ ( τ ) P_\theta(\tau)Pθ(τ):在当前策略下,出现这条轨迹的概率。

我们的终极目标:找到一组参数θ \thetaθ,让U ( θ ) U(\theta)U(θ)最大化。


2. 数学魔法:Policy Gradient 推导 (Log-Derivative Trick)

为了最大化U ( θ ) U(\theta)U(θ),我们需要求它的梯度∇ θ U ( θ ) \nabla_\theta U(\theta)θU(θ),告诉参数该往哪个方向更新。这里用到了经典的似然比技巧 (Likelihood Ratio Trick)

第一步:将期望展开为积分

期望本质上是加权平均,我们可以将其写成积分形式。假设奖励函数R ( τ ) R(\tau)R(τ)只由环境决定,与θ \thetaθ无关,我们将梯度算子∇ θ \nabla_\thetaθ移进积分号内部:

∇ θ U ( θ ) = ∫ ∇ θ P θ ( τ ) R ( τ ) d τ \nabla_\theta U(\theta) = \int \nabla_\theta P_\theta(\tau) R(\tau) d\tauθU(θ)=θPθ(τ)R(τ)dτ

第二步:Log-Derivative Trick(灵魂一步)

利用微积分中的恒等式( log ⁡ x ) ′ = 1 x (\log x)' = \frac{1}{x}(logx)=x1,我们可以反推出∇ x = x ⋅ ∇ log ⁡ x \nabla x = x \cdot \nabla \log xx=xlogx
P θ ( τ ) P_\theta(\tau)Pθ(τ)看作x xx,代入上式:

∇ θ P θ ( τ ) = P θ ( τ ) ∇ θ log ⁡ P θ ( τ ) \nabla_\theta P_\theta(\tau) = P_\theta(\tau) \nabla_\theta \log P_\theta(\tau)θPθ(τ)=Pθ(τ)θlogPθ(τ)

现在,我们把这个结果代回第一步的积分中:

∇ θ U ( θ ) = ∫ P θ ( τ ) ∇ θ log ⁡ P θ ( τ ) R ( τ ) d τ \nabla_\theta U(\theta) = \int \color{red}{P_\theta(\tau) \nabla_\theta \log P_\theta(\tau)} R(\tau) d\tauθU(θ)=Pθ(τ)θlogPθ(τ)R(τ)dτ

第三步:变回期望形式

观察上式,发现积分里又出现了P θ ( τ ) P_\theta(\tau)Pθ(τ)。这意味着我们可以把积分重新写回期望的形式:

∇ θ U ( θ ) = E τ ∼ P θ ( τ ) [ ∇ θ log ⁡ P θ ( τ ) R ( τ ) ] \nabla_\theta U(\theta) = E_{\tau \sim P_\theta(\tau)} [\nabla_\theta \log P_\theta(\tau) R(\tau)]θU(θ)=EτPθ(τ)[θlogPθ(τ)R(τ)]

第四步:消掉环境模型(Model-Free 的关键)

一条轨迹的概率P θ ( τ ) P_\theta(\tau)Pθ(τ)由三部分组成:初始状态概率、环境转移概率(物理引擎)、策略网络概率。
当我们对θ \thetaθ求梯度时,所有与θ \thetaθ无关的环境物理规律(比如牛顿定律、摩擦系数)全部变成了 0

最终,我们得到了那个著名的梯度公式:

∇ θ U ( θ ) ≈ 1 N ∑ i = 1 N ( ∑ t ∇ θ log ⁡ π θ ( a t ∣ s t ) ) R ( τ ( i ) ) \nabla_\theta U(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \left( \sum_{t} \nabla_\theta \log \pi_\theta(a_t|s_t) \right) R(\tau^{(i)})θU(θ)N1i=1N(tθlogπθ(atst))R(τ(i))

为什么这个公式很牛?
它告诉我们:不需要知道环境的物理模型(Model-Free)。无论机器人结构多复杂,只要能通过仿真器采样出来,就可以训练!


3. 物理直觉:梯度是如何控制电机的?

把公式放到四足机器人项目中,每一个符号都有了物理含义。在legged_gym等框架中,策略π θ \pi_\thetaπθ通常输出的是动作分布的均值。

我们可以把梯度更新公式简化理解为:

参数更新 ∝ ∇ θ log ⁡ π ( a ∣ s ) ⏟ 调整方向 ⋅ R ( τ ) ⏟ 调整幅度 \text{参数更新} \propto \underbrace{\nabla_\theta \log \pi(a|s)}_{\text{调整方向}} \cdot \underbrace{R(\tau)}_{\text{调整幅度}}参数更新调整方向θlogπ(as)调整幅度R(τ)

场景 A:成功的尝试(R ( τ ) > 0 R(\tau) > 0R(τ)>0且很大)

  • 现象:机器狗这一步迈得很稳,没有摔倒,且速度达标。
  • 数学:奖励R RR为正,梯度方向与∇ log ⁡ π \nabla \log \pilogπ相同。
  • 效果:更新神经网络权重,增加在当前状态下输出该关节角度的概率密度。
  • 潜台词:“刚才那个姿势很帅,下次遇到这种情况还这么走!”

场景 B:失败的尝试(R ( τ ) < 0 R(\tau) < 0R(τ)<0

  • 现象:机器狗腿软了或者劈叉了。
  • 数学:奖励R RR为负,梯度方向反转。
  • 效果:更新神经网络权重,抑制产生该动作的概率。
  • 潜台词:“刚才那个电机力矩给大了,导致翻车,下次收敛一点。”

4. 现实的挑战:Sim-to-Real 为何会失效?

理论上很完美,但在 Isaac Gym 或 MuJoCo 里训练好的“满分策略”,直接部署到真机(如 A1, ANYmal)上经常会表现得像个刚学步的婴儿,甚至直接抽搐。

这是因为我们计算梯度的分布P s i m P_{sim}Psim和真实世界的分布P r e a l P_{real}Preal存在Distribution Shift(分布偏移)

4.1 核心差异点

  1. 执行器动力学 (Actuator Dynamics)
    • Sim: 假设电机是理想的,指令一下,扭矩瞬间到达。
    • Real: 真实的电机(如宇树 8010)有带宽限制摩擦死区滞后。如果策略要求电机以 50Hz 剧烈抖动,真机根本响应不过来。
  2. 延迟 (Latency)
    • Real: 从 IMU 读取 -> C++ 驱动解析 -> 网络推理 -> 串口下发,整个链路存在几十毫秒的延迟。
  3. 接触模型
    • 仿真里的地面通常是刚体,而真实地面可能是软的、滑的。

4.2 解决方案:域随机化 (Domain Randomization)

既然我们无法让P s i m P_{sim}Psim完美逼近P r e a l P_{real}Preal强化学习的思路是:让P s i m P_{sim}Psim变得超级宽,宽到把P r e a l P_{real}Preal包进去。

legged_gymconfig中,我们通常会进行以下操作:

  • 随机化摩擦力:范围 0.5 ~ 1.5。
  • 随机化质量:给狗身加减 1-2kg 的负载。
  • 随机化外力:训练时不断推挤机器人。
  • 随机化延迟:模拟 10ms ~ 30ms 的控制回路延迟。

原理:如果你的神经网络能在摩擦力既大又小、身体既重又轻、延迟既长又短的“地狱模式”模拟中都能站稳,那么它在那个“唯一且确定”的真实物理世界中,大概率也能站稳。


5. 总结

Policy Gradient 的本质,就是通过大量的试错(Rollout),利用概率论的技巧,将“好的行为”概率推高,将“坏的行为”概率压低。

理解了这个公式,就理解了为什么我们需要大规模并行仿真(Isaac Gym),以及为什么Domain Randomization是 Sim-to-Real 的必经之路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/18 20:33:42

Solidity入门(11)-智能合约设计模式2

文章目录5. 代理模式5.1 为什么需要代理模式5.2 代理模式架构5.3 存储布局兼容性6. 工厂模式6.1 为什么需要工厂模式6.2 基础工厂实现6.3 Clone工厂模式&#xff08;EIP-1167&#xff09;7. 紧急停止模式7.1 为什么需要紧急停止7.2 OpenZeppelin的Pausable实现7.3 最佳实践8. 模…

作者头像 李华
网站建设 2026/7/16 10:26:52

叨鱼官网下载和安装教程(附安装包,图文版)

叨鱼是一款多功能游戏辅助软件。它就像为游戏玩家量身打造的贴身助手&#xff0c;既能守护游戏账号的安全&#xff0c;又能方便管理多个游戏账号&#xff0c;还能让玩家及时获取游戏资讯、兑换福利&#xff0c;同时和其他玩家交流互动&#xff0c;覆盖了游戏体验中的多个核心需…

作者头像 李华
网站建设 2026/7/18 9:06:17

Claude Code深度解析:5分钟掌握终端AI编程助手的核心能力

Claude Code深度解析&#xff1a;5分钟掌握终端AI编程助手的核心能力 【免费下载链接】claude-code Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining comp…

作者头像 李华
网站建设 2026/7/18 18:43:55

Spyder多语言开发:打破编程语言壁垒的一站式解决方案

Spyder多语言开发&#xff1a;打破编程语言壁垒的一站式解决方案 【免费下载链接】spyder Official repository for Spyder - The Scientific Python Development Environment 项目地址: https://gitcode.com/gh_mirrors/sp/spyder 还在为不同编程项目需要切换多个开发环…

作者头像 李华