4、策略网络设计:Actor-Critic架构、MLP与LSTM网络选择、输入输出归一化技巧

好,咱们进入第四章。这一章我打算聊聊策略网络的设计。说白了,就是你的机器人“大脑”长什么样,怎么选,怎么调。

很多同学一开始就扎进算法调参,结果发现网络结构没选对,怎么调都白费。我早期做四足机器人项目时就吃过这个亏——用了纯MLP,结果机器人走路像喝醉了酒,前后动作完全脱节。后来换成LSTM,问题迎刃而解。所以,网络结构的选择,真的不是小事。

4.1 Actor-Critic架构:为什么是“双头怪”?

强化学习里,Actor-Critic架构是主流。为什么?因为它把“决策”和“评价”分开了。

  • Actor(演员):负责输出动作。比如关节的目标角度、力矩。
  • Critic(评论家):负责评估当前状态的好坏。它输出一个值函数V(s)或Q(s,a)。

你想想看,如果只有一个网络,既要学动作又要学价值,很容易学偏。就像一个人既当运动员又当裁判,难免有失公允。分开之后,Actor专心学策略,Critic专心学评价,训练稳定很多。

核心要点:Actor和Critic通常共享底层特征提取层,但在顶层分叉。这样既节省参数,又能让两者学到共同的状态表征。

我在实际项目中,习惯让Actor和Critic的隐藏层结构保持一致,但输出层不同。Actor输出层用tanh激活(把动作限制在[-1,1]),Critic输出层用线性激活(值函数范围不限)。

4.2 MLP与LSTM:什么时候选谁?

这是个大问题。我直接给结论:

网络类型 适用场景 我的经验
MLP(多层感知机) 状态完全可观测,当前帧足够决策 适合简单任务,如单关节位置控制
LSTM(长短期记忆网络) 需要历史信息,状态部分可观测 适合复杂运动,如行走、跑步、抓取

MLP的优势:简单、快、容易训练。如果你的机器人状态里已经包含了足够的历史信息(比如速度、加速度),MLP完全够用。

LSTM的优势:能记住过去几帧的信息。比如机器人走路时,脚落地瞬间的冲击力会影响下一步的步态。LSTM能捕捉这种时序依赖。

我的建议:如果你不确定,先用MLP试试。如果训练过程中loss震荡剧烈,或者策略出现“失忆”现象(比如机器人走着走着突然摔倒),果断换LSTM。

我曾经做一个双足机器人的平衡控制项目,MLP怎么都学不会在受到外力推搡后恢复平衡。换成LSTM后,只训练了原来一半的步数就收敛了。为什么?因为LSTM记住了“被推”这个事件,知道接下来要调整重心。

4.3 输入输出归一化技巧

归一化,说白了就是把数据压到一个合适的范围。不归一化,网络训练会非常痛苦。

输入归一化:

  • 关节角度:归一化到[-1, 1]或[0, 1]
  • 关节速度:根据最大速度归一化
  • IMU数据:加速度计、陀螺仪数据通常归一化到[-1, 1]

输出归一化:

  • Actor输出:用tanh激活,天然在[-1, 1]
  • 然后乘以实际动作范围(比如关节最大力矩)

注意:千万不要在归一化时引入未来信息。比如用整个轨迹的最大值来归一化,这会导致训练时信息泄露。应该用预先统计的固定值,或者用running mean/std。

我习惯的做法是:在训练开始前,先让机器人随机动作一段时间,收集数据,统计出每个维度的均值和标准差。然后用这些统计值做归一化。这样既简单又有效。

嗯,这里还要提一个坑:输出归一化时,别忘了考虑Critic的输入。Critic接收的是归一化后的状态和动作,所以动作也要归一化后再喂给Critic。我曾经在这个细节上栽过跟头,训练了三天发现Critic的loss死活不降,最后发现是动作没归一化。

4.4 网络结构设计实战建议

最后,我总结几条实战经验:

  1. 隐藏层大小:256或512个神经元,2-3层。太小了学不到复杂策略,太大了容易过拟合。
  2. 激活函数:隐藏层用ReLU或tanh。ReLU快,tanh更平滑。我偏好tanh,因为梯度更稳定。
  3. Dropout:如果训练数据有限,可以在隐藏层后加Dropout(0.1-0.3)。但注意,推理时要关掉。
  4. Batch Normalization:可以加,但要注意训练和推理模式切换。我一般只在输入层用LayerNorm。

核心原则:网络结构不是越复杂越好。够用就行。先跑通,再优化。

下面是我常用的一个Actor网络结构示意图,你可以参考:

输入层 (状态) 共享特征层 MLP/LSTM 256 units Actor头 tanh Critic头 线性 动作 值函数 Actor-Critic网络结构 输入状态 → 共享特征提取 → 分叉输出 Actor输出动作(tanh归一化) Critic输出值函数(线性激活)

好了,这一章的内容就这些。记住,网络设计没有银弹,多试、多调、多记录。你踩过的每一个坑,都会变成你未来的经验。

小技巧:训练时,可以定期保存网络权重。万一训练崩了,还能回滚到之前的版本。我一般每1000步保存一次。

可可精品资料库