- 写在前面:这篇先解决“见过但记不住”的问题
- 先用一张表建立直觉
- 1. MSE:均方误差,最常见的回归损失
- 2. CNN:卷积神经网络,擅长从图像或局部结构里提特征
- 3. RNN:循环神经网络,用隐藏状态记住过去
- 4. GRU:带门控的 RNN,学会选择性记忆和遗忘
- 5. LSTM:另一种更经典的门控循环网络
- 6. VAE:变分自编码器,学习一个概率潜空间
- 7. AutoEncoder:先理解 VAE 的普通版本
- 8. 它们在强化学习里通常出现在哪里
- 9. 一个简单记忆框架
- 10. 容易混淆的地方
- 总结
写在前面:这篇先解决“见过但记不住”的问题
看强化学习、机器人学习、深度学习论文或代码时,经常会遇到这些词:
MSECNNRNNGRULSTMVAEAutoEncoder
它们有些是损失函数,有些是网络结构,有些是生成模型。如果只是背中文名,很容易混在一起。
这篇我想按一个更实用的方式整理:
它解决什么问题?数学上大概在算什么?在强化学习里通常出现在哪里?
先不追求把每个模型推导到最深,而是建立一个以后看代码和论文能快速定位的框架。
先用一张表建立直觉
| 名词 | 类型 | 主要解决什么问题 | 一句话记忆 |
|---|---|---|---|
| MSE | 损失函数 | 衡量预测值和真实值差多少 | 平方误差的平均值 |
| CNN | 网络结构 | 从图像、网格、局部结构中提特征 | 用卷积核扫图像 |
| RNN | 网络结构 | 处理序列数据 | 当前输出依赖过去记忆 |
| GRU | 网络结构 | 改进 RNN 的记忆能力 | 用门控决定记住多少 |
| LSTM | 网络结构 | 更强的长序列记忆 | 用输入门、遗忘门、输出门控制记忆 |
| AutoEncoder | 表征学习 | 把数据压缩再还原 | 学一个低维表示 |
| VAE | 生成模型 | 学习概率潜空间并生成样本 | AutoEncoder + 概率分布约束 |
1. MSE:均方误差,最常见的回归损失
MSE 的全称是 Mean Squared Error,均方误差。
如果真实值是 ,预测值是 ,那么 MSE 写作:
它的意思很直接:
- 每个样本算一次误差:。
- 把误差平方:。
- 对所有样本取平均。
为什么要平方?
- 正误差和负误差不会互相抵消。
- 大误差会被放大,模型会更重视离谱预测。
- 数学上可导,优化起来方便。
在强化学习里,MSE 常见于 value function 的训练。
比如 critic 要预测状态价值 ,而训练目标是某个回报估计 ,那么可以写:
这里的直觉是:
critic 预测“这个状态未来大概能拿多少分”,MSE 用来惩罚预测值和目标回报之间的差距。
在 PPO 这类算法里,经常会看到 value loss,本质上就很接近 MSE。
2. CNN:卷积神经网络,擅长从图像或局部结构里提特征
CNN 的全称是 Convolutional Neural Network,卷积神经网络。
它最常用于图像,因为图像有明显的局部结构:
- 一个像素和周围像素有关。
- 边缘、角点、纹理都是局部模式。
- 同一种局部模式可能出现在图像不同位置。
普通全连接网络会把图像直接展平成一个很长的向量,这会丢掉很多空间结构。而 CNN 用卷积核在图像上滑动,提取局部特征。
二维卷积可以粗略写成:
其中:
- 是输入图像或特征图。
- 是卷积核。
- 是输出特征图。
- 是当前位置。
可以把卷积核想象成一个小窗口:
输入图像:一大片像素 |
CNN 的几个重要概念:
局部连接
卷积核只看局部区域,不是一上来就连接整张图。
这符合图像直觉:边缘、角点、纹理通常都是局部形成的。
参数共享
同一个卷积核会在整张图上滑动。
这意味着:
同一个特征检测器可以在不同位置复用。
比如一个检测“竖直边缘”的卷积核,不管边缘在左上角还是右下角,都可以检测到。
池化 pooling
池化用于降低分辨率,保留主要信息。
常见最大池化:
直觉:
在一个小区域里,只保留最明显的特征响应。
在强化学习里,CNN 常见于视觉输入任务,例如:
- Atari 游戏。
- 机器人相机图像输入。
- 深度图、地形高度图。
- occupancy map / height map。
如果 policy 输入是图像,通常会先用 CNN 提取视觉特征,再接 MLP 输出 action。
3. RNN:循环神经网络,用隐藏状态记住过去
RNN 的全称是 Recurrent Neural Network,循环神经网络。
它适合处理序列数据,例如:
- 时间序列。
- 语言文本。
- 机器人传感器历史。
- 部分可观测环境中的 observation history。
普通 MLP 每次只看当前输入:
而 RNN 会维护一个隐藏状态 :
这里最关键的是 。
它表示:
当前隐藏状态不仅由当前输入 决定,也由上一时刻的记忆 决定。
所以 RNN 的结构可以理解成:
x1 → h1 → y1 |
RNN 在强化学习里很有用,因为很多任务不是完全可观测的。
比如四足机器人 policy 当前只能看到:
- IMU。
- 关节角。
- 关节速度。
- 上一帧动作。
但它可能看不到:
- 地面摩擦系数。
- 精确接触状态。
- 外部扰动。
- 过去几帧发生了什么。
这时候 RNN 可以用历史观测形成一个“内部记忆”。
但是普通 RNN 有一个问题:长序列训练时容易梯度消失或梯度爆炸。
4. GRU:带门控的 RNN,学会选择性记忆和遗忘
GRU 的全称是 Gated Recurrent Unit,门控循环单元。
它是 RNN 的改进版。普通 RNN 每一步都直接更新隐藏状态,GRU 则增加了“门”来决定:
- 过去的记忆保留多少。
- 当前的新信息写入多少。
GRU 的核心公式常见写法是:
这里:
- 是 update gate,更新门。
- 是 reset gate,重置门。
- 是候选隐藏状态。
- 表示逐元素相乘。
- 是 sigmoid 函数,输出范围在 0 到 1。
怎么理解这些门?
更新门
决定新信息写入多少。
如果 接近 0:
说明主要保留旧记忆。
如果 接近 1:
说明更多采用新信息。
重置门
决定在计算候选状态时,过去记忆参与多少。
如果 接近 0,说明计算新候选状态时,基本忽略过去。
如果 接近 1,说明过去记忆完整参与。
GRU 的一句话理解:
它不是每一步都粗暴覆盖记忆,而是学会什么时候记、什么时候忘。
在强化学习里,GRU 常见于 recurrent policy / recurrent critic。
比如 policy 可以写成:
这里 policy 不只是根据当前观测 输出动作,而是根据带历史信息的隐藏状态 输出动作。
5. LSTM:另一种更经典的门控循环网络
LSTM 的全称是 Long Short-Term Memory。
它和 GRU 目标类似:解决普通 RNN 长序列记忆困难的问题。
LSTM 比 GRU 多维护了一个 cell state,通常记作 。
常见公式是:
这里:
- 是 forget gate,遗忘门。
- 是 input gate,输入门。
- 是 output gate,输出门。
- 是长期记忆单元。
- 是当前输出隐藏状态。
和 GRU 相比:
- LSTM 结构更复杂。
- 参数更多。
- 记忆能力强,但计算更重。
- GRU 更简洁,经常在工程里也很好用。
粗略记忆:
RNN:有记忆,但容易忘太快或训练不稳。 |
6. VAE:变分自编码器,学习一个概率潜空间
VAE 的全称是 Variational AutoEncoder,变分自编码器。
它比普通 AutoEncoder 多了一个重要思想:
不只是把输入压缩成一个确定向量,而是压缩成一个概率分布。
普通 AutoEncoder 是:
VAE 则是:
也就是说,encoder 不直接输出一个 ,而是输出:
- 均值 。
- 方差 。
然后从这个分布里采样:
再用 decoder 重建:
VAE 的损失通常由两部分组成:
第一项是重建损失:
它要求 decoder 尽量还原输入。
第二项是 KL 散度:
它要求学到的潜空间分布不要太乱,通常希望接近标准正态分布:
直觉上:
- 重建损失负责“像不像”。
- KL 散度负责“潜空间规不规整”。
如果没有 KL 约束,latent space 可能很碎,随机采样出来的 不一定能生成合理数据。
有了 KL 约束后,VAE 更像一个生成模型:
从 N(0, I) 采样 z → decoder → 生成一个样本 |
在强化学习里,VAE 可能出现在:
- 从高维 observation 学低维 latent state。
- 世界模型 world model。
- 从图像中提取紧凑状态表示。
- 模仿学习或离线 RL 中学习行为/轨迹分布。
- 表示不确定性。
比如视觉强化学习里,原始图像很大,可以先用 VAE 压缩成 latent:
然后 policy 使用 而不是原始图像:
7. AutoEncoder:先理解 VAE 的普通版本
AutoEncoder 可以看成 VAE 的前置概念。
它由两部分组成:
输入 x → Encoder → latent z → Decoder → 重建 x_hat |
数学上:
训练目标通常是让 尽量接近 :
也就是一个重建 MSE。
它的作用不是分类,而是学习一个压缩表示。
比如输入是一张深度图,AutoEncoder 可以把它压缩成一个低维向量:
深度图 64x64 → latent vector 32维 |
然后这个 latent vector 可以给 policy 使用。
AutoEncoder 和 VAE 的区别:
| 模型 | latent 是什么 | 是否方便生成 |
|---|---|---|
| AutoEncoder | 确定向量 | 不一定 |
| VAE | 概率分布采样 | 更方便 |
8. 它们在强化学习里通常出现在哪里
MSE 在哪里出现
MSE 常用于训练 value function 或 dynamics model。
例如:
或者预测下一状态:
CNN 在哪里出现
CNN 用于处理视觉输入:
image / depth / height map → CNN → feature vector → policy |
比如机器人看到深度图,CNN 先提取地形特征,再让 policy 决定关节目标。
RNN / GRU / LSTM 在哪里出现
它们用于处理历史信息:
observation sequence → recurrent network → hidden state → action |
在 POMDP 问题里特别常见。
POMDP 的意思是:policy 看不到完整 state,只能看到 observation。
这时历史信息很重要:
VAE 在哪里出现
VAE 用于学习 latent representation:
高维观测 → VAE encoder → 低维 latent → policy / world model |
或者:
latent z → decoder → 生成可能的观测或轨迹 |
9. 一个简单记忆框架
我觉得可以按“输入是什么、输出是什么”来记。
MSE
输入:预测值和目标值 |
CNN
输入:图像 / 网格数据 |
RNN / GRU / LSTM
输入:当前观测 + 过去隐藏状态 |
AutoEncoder / VAE
输入:高维数据 |
10. 容易混淆的地方
MSE 不是网络结构
MSE 是 loss,不是一个模型。
它不能“提特征”,只能告诉模型预测得好不好。
CNN 不一定只用于图片
CNN 最常用于图片,但只要数据有局部结构,也可能用 CNN。
例如:
- 高度图。
- occupancy grid。
- 一维时间信号。
- 局部地形 patch。
RNN、GRU、LSTM 不是强化学习算法
它们只是神经网络结构。
PPO、SAC、DDPG 这些才是强化学习算法。
你可以有:
PPO + MLP policy |
也就是说:
强化学习算法负责怎么优化策略,网络结构负责怎么表示策略或价值函数。
VAE 不是普通分类器
VAE 重点不是分类,而是学习 latent distribution。
它更关心:
- 能不能重建输入。
- latent space 是否规整。
- 能不能从 latent space 采样生成合理数据。
总结
这几个名词可以这样记:
MSE:衡量预测和目标差多少。 |
放到强化学习里:
observation → encoder(CNN/VAE/MLP/RNN) → feature/hidden state → policy → action |
我现在的理解是:
强化学习里很多看起来吓人的名词,其实可以拆成两类:一类是“用什么网络表示”,一类是“用什么损失训练”。先分清这两类,读论文和代码会轻松很多。