3. 策略与值函数:策略梯度与值函数逼近的基本概念
好,咱们进入第三章。这一章我打算聊聊强化学习里两个最核心的概念——策略和值函数。说实话,这两个东西就像机器人的左腿和右腿,缺一个都走不稳。我在做力矩控制项目时,一开始只盯着策略看,结果发现收敛慢得让人抓狂。后来把值函数加进来,整个系统才真正跑起来。
你可能会问:策略和值函数到底有什么区别?简单说,策略是「怎么做」,值函数是「做得怎么样」。策略告诉机器人关节该输出多少力矩,值函数则评估这个力矩选得好不好。两者配合,才能让机器人学会稳定行走。
3.1 策略:从状态到动作的映射
策略,说白了就是一张地图。给定当前状态,策略输出一个动作。在力矩控制里,状态可能是关节角度、角速度,动作就是电机力矩指令。
策略分两种:确定性策略和随机性策略。
- 确定性策略:给定状态,输出唯一动作。比如「关节角度偏差5度时,输出2Nm力矩」。简单直接,但探索能力差。
- 随机性策略:输出动作的概率分布。比如「有80%概率输出2Nm,20%概率输出1.5Nm」。探索能力强,适合初期学习。
我个人习惯在项目初期用随机性策略,让机器人多试错。等训练稳定了,再切换到确定性策略,提高执行效率。
策略的数学表示
确定性策略:a = π(s)
随机性策略:a ~ π(a|s)
其中 s 是状态,a 是动作,π 是策略函数。
3.2 值函数:给状态和动作打分
值函数就是评估器。它回答一个问题:当前状态(或状态-动作对)到底有多好?
值函数主要有两种:
| 类型 | 符号 | 含义 | 典型用途 |
|---|---|---|---|
| 状态值函数 | V(s) | 从状态 s 开始,能获得的期望累计回报 | 评估当前局势好坏 |
| 动作值函数 | Q(s,a) | 在状态 s 执行动作 a 后,能获得的期望累计回报 | 评估具体动作的好坏 |
我记得有一次调试四足机器人,V(s) 显示当前状态很好,但机器人下一秒就摔了。后来发现是 Q(s,a) 没训练好,动作选择出了问题。所以实际项目中,我通常两个值函数都监控着。
3.3 策略梯度:直接优化策略
策略梯度方法,核心思想很直接:让好动作出现的概率变大,坏动作的概率变小。怎么衡量好坏?靠累计回报。
策略梯度的更新公式长这样:
∇J(θ) = E[ ∇log π(a|s,θ) * R(τ) ]
其中 θ 是策略参数,R(τ) 是整条轨迹的累计回报。这个公式的意思是:用梯度上升法,让策略参数朝着能获得更高回报的方向调整。
我在项目中遇到过一个问题:直接用整条轨迹的回报,方差特别大。后来改用优势函数代替,方差才降下来。这个技巧叫「策略梯度 with baseline」,后面会细讲。
实战小技巧
策略梯度方法对学习率很敏感。我建议从 1e-4 开始调,如果训练曲线震荡太厉害,就再降一个数量级。别问我怎么知道的——烧过好几块电机驱动板才总结出来的。
3.4 值函数逼近:用神经网络近似打分
真实的值函数是未知的,我们只能用函数去逼近它。早期用线性函数,现在主流是用神经网络。
值函数逼近的目标是让估计值尽量接近真实值。损失函数通常是均方误差:
L(φ) = E[ (V_target - V(s,φ))² ]
其中 V_target 是实际观测到的回报,V(s,φ) 是网络输出的估计值。
你想想看,如果值函数估计不准,策略梯度就会往错误方向更新。所以值函数逼近的质量,直接决定了整个算法的上限。
注意:值函数过估计问题
在 Q-learning 类算法中,值函数容易过估计——就是网络打分会偏高。我曾经因为这个原因,让机器人对着墙壁猛撞了半小时。解决办法是用双网络结构(Double DQN),或者用 Clipped Double Q-learning(TD3 的做法)。
3.5 策略与值函数的协同工作
策略和值函数不是孤立的。它们的关系就像驾驶员和导航仪:策略负责打方向盘(输出动作),值函数负责看地图(评估动作好坏)。
常见的协同方式有两种:
- Actor-Critic 架构:Actor 是策略网络,Critic 是值函数网络。Actor 根据 Critic 的评分调整策略,Critic 根据实际回报更新评分标准。两者交替训练,互相促进。
- 优势函数 A(s,a) = Q(s,a) - V(s):用动作值函数减去状态值函数,得到「这个动作比平均水平好多少」。策略梯度用优势函数代替原始回报,方差更小,收敛更快。
下面这张图展示了 Actor-Critic 的基本流程:
从这张图能看出来,Actor 和 Critic 是交替更新的。Critic 用 TD 误差评估当前策略的好坏,Actor 则根据 Critic 的评分调整策略参数。两者互相依赖,又互相促进。
3.6 策略梯度 vs 值函数方法:怎么选?
很多初学者会纠结:到底用策略梯度还是值函数方法?我个人的经验是:
| 场景 | 推荐方法 | 原因 |
|---|---|---|
| 动作空间连续(如力矩控制) | 策略梯度(PPO、SAC) | 值函数方法需要 max Q,连续空间不好求 |
| 动作空间离散(如开关控制) | 值函数方法(DQN) | 离散空间 max Q 容易算,收敛快 |
| 需要稳定收敛 | 策略梯度 + 值函数(Actor-Critic) | 两者互补,方差小 |
| 样本效率要求高 | 值函数方法(SAC、TD3) | 利用 off-policy 数据,样本利用率高 |
嗯,这里要注意:力矩控制属于连续动作空间,所以我个人更倾向用策略梯度类方法。但纯策略梯度方差大,必须配合值函数做 baseline。说白了,Actor-Critic 架构才是工程实践中的主流选择。
本章核心要点
- 策略决定「怎么做」,值函数评估「做得怎么样」
- 策略梯度直接优化策略参数,适合连续动作空间
- 值函数逼近用神经网络近似真实值函数,是 Actor-Critic 的基础
- Actor-Critic 架构让策略和值函数协同工作,是力矩控制的主流方案
- 实际项目中,策略梯度配合优势函数使用,能显著降低方差