共计 1859 个字符,预计需要花费 5 分钟才能阅读完成。
背景痛点:梯度消失与激活函数困境
2006 年之前,神经网络(尤其是多层结构)长期受困于 梯度消失问题(Vanishing Gradient)。当使用 sigmoid 激活函数时,其导数最大值为 0.25(当输入为 0 时),这意味着误差反向传播时,梯度会逐层指数级衰减。数学表达为:

$$
\sigma(x) = \frac{1}{1+e^{-x}} \quad \sigma'(x) = \sigma(x)(1-\sigma(x))
$$
对于 10 层网络,底层梯度可能仅为顶层的 $0.25^{10} \approx 9.5\times10^{-7}$,导致底层参数几乎无法更新。
技术对比:RBM 预训练 vs 直接反向传播
Hinton 提出的 深度信念网络 /DBN(Deep Belief Network)通过 受限玻尔兹曼机 /RBM(Restricted Boltzmann Machine)逐层预训练初始化权重,显著改善了深层网络的训练效果。以下是 MNIST 数据集上的对比:
| 方法 | 测试准确率 | 训练时间(epoch=50) |
|---|---|---|
| 直接反向传播(BP) | 85.2% | 25 分钟 |
| RBM 预训练 +DBN 微调 | 94.7% | 38 分钟 |
核心实现:PyTorch 实现 3 层 DBN
import torch
import torch.nn as nn
class RBM(nn.Module):
def __init__(self, visible_dim, hidden_dim):
super().__init__()
self.W = nn.Parameter(torch.randn(hidden_dim, visible_dim) * 0.01)
self.h_bias = nn.Parameter(torch.zeros(hidden_dim))
self.v_bias = nn.Parameter(torch.zeros(visible_dim))
def contrastive_divergence(self, v, k=3):
# CD- k 算法:吉布斯采样 k 次
ph = torch.sigmoid(torch.matmul(v, self.W.t()) + self.h_bias)
h_sample = torch.bernoulli(ph)
for _ in range(k):
v_recon = torch.sigmoid(torch.matmul(h_sample, self.W) + self.v_bias)
h_sample = torch.bernoulli(torch.sigmoid(torch.matmul(v_recon, self.W.t()) + self.h_bias))
return v, v_recon
# 3 层 DBN 示例
layers = [784, 500, 200] # 可见层→隐藏层 1→隐藏层 2
rbms = [RBM(layers[i], layers[i+1]) for i in range(2)]
# 预训练(每层单独训练)for rbm in rbms:
optimizer = torch.optim.SGD(rbm.parameters(), lr=0.01)
for epoch in range(10):
for data in dataloader:
v, v_recon = rbm.contrastive_divergence(data, k=3)
loss = torch.mean((v - v_recon)**2)
optimizer.zero_grad()
loss.backward()
optimizer.step()
现代演进:从 RBM 到残差连接
虽然 RBM 预训练已较少使用,但其核心思想——分层特征学习 和逐层优化——在 Transformer 的残差连接(Residual Connection)中仍有体现。通过跳跃连接保留底层信息,本质上与 RBM 的“逐步精炼特征”异曲同工:
原始输入 → RBM1 → 特征 1 → RBM2 → 特征 2
↓________________________↑
避坑指南:3 个实战经验
- 层间学习率未递减:高层特征更抽象,建议每层学习率递减(如 0.01 → 0.005 → 0.001)
- 可见层单元数不合理:输入数据维度应与可见层匹配,MNIST 的 784 像素需对应 784 个可见单元
- CD- k 采样次数不足:k= 3 是常用起点,但对复杂数据需尝试 k =5~10
延伸思考
- 在预训练 - 微调范式下,如何量化评估每一层学到的特征可解释性?
- RBM 的生成特性(如重建输入)能否与现代 GAN 结合?
结语
2006 年的突破不仅解决了梯度消失问题,更开创了 分层表示学习 的先河。虽然如今我们更多使用 ReLU 和残差连接,但理解 DBN 的思想仍对设计新型网络结构大有裨益。
正文完
发表至: 未分类
近两天内
