如何从数学推导到电机控制,全面掌握Policy Gradient与Sim-to-Real的深层理解?
摘要:【强化学习笔记】从数学推导到电机控制:深入理解 Policy Gradient 与 Sim-to-Real 前言: 最近在研究基于 legged_gym 的四足机器人控制。在啃代码和论文的过程中,Policy Gradient(策略梯度)是
【强化学习笔记】从数学推导到电机控制:深入理解 Policy Gradient 与 Sim-to-Real
前言:
最近在研究基于 legged_gym 的四足机器人控制。在啃代码和论文的过程中,Policy Gradient(策略梯度)是一个绕不开的核心概念。
面对一堆 \(\nabla\) 和 \(\log\) 符号,我不禁思考:这些抽象的数学公式,到底是如何变成控制电机输出扭矩的指令的?
本文将从最基础的目标函数出发,推导策略梯度公式,并结合 Sim-to-Real(仿真到真机)的工程难点,记录我的理解。
1. 核心目标:我们在优化什么?
在强化学习(RL)中,我们的机器狗(Agent)拥有一个策略网络(Policy Network),参数为 \(\theta\)。我们的终极目标是找到一组参数,使得机器人在环境中的期望回报(Expected Return)最大化。
我们将这个目标函数记为 \(U(\theta)\):
\[U(\theta) = E_{\tau \sim P_\theta(\tau)} [R(\tau)]
\]
这里的符号含义如下:
\(\tau\) (Trajectory):轨迹。代表机器人从开机到结束的一连串状态 \(s\) 和动作 \(a\) 的序列。
\(R(\tau)\):回报。这条轨迹获得的总分数(例如:走得远+10分,摔倒-100分,电机发热-5分)。
\(P_\theta(\tau)\):概率。在当前策略 \(\pi_\theta\) 下,走出这条特定轨迹的概率。
简单来说,\(U(\theta)\) 就是机器人目前的“平均考试成绩”。我们要做的,就是通过梯度上升,把这个分数提上去。
2. 数学推导:Log-Derivative Trick
为了提升 \(U(\theta)\),我们需要求它的梯度 \(\nabla_\theta U(\theta)\)。这里的核心难点在于:我们无法直接对环境(物理世界)求导。但是,利用似然比技巧(Likelihood Ratio Trick),我们可以巧妙地绕过环境模型。
2.1 展开为积分
期望本质上是加权平均。我们将 \(U(\theta)\) 写成积分形式:
\[\nabla_\theta U(\theta) = \nabla_\theta \int P_\theta(\tau) R(\tau) d\tau
\]
假设奖励函数 \(R(\tau)\) 是由环境给出的客观反馈,与 \(\theta\) 无关,我们可以把梯度算子移进去:
\[= \int \nabla_\theta P_\theta(\tau) R(\tau) d\tau
\]
2.2 引入 Log 技巧
利用微积分恒等式 \((\log x)' = \frac{1}{x} \Rightarrow \nabla x = x \cdot \nabla \log x\),我们可以将 \(\nabla_\theta P_\theta(\tau)\) 替换为:
\[\nabla_\theta P_\theta(\tau) = P_\theta(\tau) \nabla_\theta \log P_\theta(\tau)
\]
代回原式:
\[\nabla_\theta U(\theta) = \int \color{red}{P_\theta(\tau) \nabla_\theta \log P_\theta(\tau)} R(\tau) d\tau
\]
2.3 变回期望,消掉环境
现在积分里又出现了 \(P_\theta(\tau)\),这正是期望的定义。同时,将轨迹概率 \(P_\theta(\tau)\) 展开后,所有与策略参数 \(\theta\) 无关的环境转移概率(Dynamics)在求导时都变成了 0。
最终,我们得到经典的策略梯度公式:
\[\nabla_\theta U(\theta) = E_{\tau \sim P_\theta(\tau)} \left[ \sum_{t} \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot R(\tau) \right]
\]
Note: 这个公式的强大之处在于 Model-Free。它不需要知道机器人腿有多重、地面摩擦系数是多少,只要能采样(Rollout),就能训练。
3. 物理直觉:梯度如何影响电机?
公式中的 \(\nabla_\theta \log \pi_\theta(a_t|s_t)\) 实际上是在调整策略网络输出分布的均值(对于高斯策略)。
