自编码器的分层初始化(Layer-wise Pretraining)思想,其实就是 2006 年 Hinton 等人提出的 深度网络逐层无监督预训练 方法。
1. 背景
- 在深度学习早期(2000 年前后),深层神经网络训练很难:
- 随机初始化 → 反向传播时梯度消失 / 爆炸;
- 没有足够标注数据,深层网络容易陷入局部最优。
- Hinton 提出利用 自编码器 逐层无监督训练网络,把深度模型拆解成若干层来初始化参数。
2. 分层初始化的核心思想
逐层训练 + 自底向上堆叠:
- 先训练一个浅层自编码器(输入层 → 隐层 → 重构输出层),学到第一层特征。
- 固定第一层权重,只保留隐层表示,作为“输入”去训练第二个自编码器,得到第二层特征。
- 重复以上过程,层层堆叠,直到得到多层网络的参数。
- 最后把这些预训练好的权重作为深度神经网络的 初始化参数,再用有监督的目标(分类/回归)进行 整体微调(fine-tuning)。
3. 为什么有效?
- 缓解梯度消失问题:每一层都先单独学会“有用的特征”,不依赖深层反向传播。
- 更好的初始化:比随机初始化更接近“合适区域”,微调时更容易收敛。
- 利用无标签数据:自编码器训练不需要标签,可以充分利用海量未标注农作物图像。
Matlab代码
3.function sae= sae create(SIZE)
sae =nn create([SIZE(1),SIZE(2),SIZE(1)]) %输入和输出都是SIZE1,中间层是SIZE2 这是各层训练初始化的过程
4.function sae =sae train(sae,option,train_x)
sae.encoder = 1;
sae=nn train(sae,option,train_x,train_x)
end
1 2