初始化自动编码器的权重仍然是一个难题吗?

机器算法验证 自动编码器 受限玻尔兹曼机 预训练
2022-03-30 03:09:38

我想知道初始化自动编码器的权重是否仍然很困难,以及最近的策略是什么。

我一直在阅读不同的文章。Hinton 的一篇论文(2006 年)中,它说:

对于较大的初始权重,自动编码器通常会发现较差的局部最小值;由于初始权重较小,早期层的梯度很小,因此无法训练具有许多隐藏层的自动编码器。如果初始权重接近一个好的解决方案,梯度下降效果很好,但找到这样的初始权重需要一种非常不同类型的算法,一次学习一层特征。我们为二进制数据引入了这种“预训练”过程,将其推广到实值数据,并表明它适用于各种数据集。

1个回答

这些分层预训练程序大多不再需要,原因如下:

  • 更好的初始化方案,例如 shimao 指出的 Xavier / Glorot 初始化(同样的东西,以 Xavier Glorot 命名这些有助于避免梯度爆炸或消失的问题,从本质上讲,将许多数字相乘显着大于 1 会产生巨大的结果,或者将许多数字相乘显着小于 1 会产生微小的结果。这些初始化方案使梯度范数更接近一。
  • 切换到非饱和激活函数,例如LReLU0.1(x)={xx00.1xx<0,而不是像sigmoid(x)=11+exp(x)(0,1)以前流行的。Sigmoid 仅对x在一组相当紧凑的输入中;太大或太小,功能变得相当平坦。Leaky ReLU 到处都有有用的信号,而常规 ReLU 对任何正输入都有有用的信号。
  • 批量归一化以及权重/层/光谱/……归一化等相关方案如果您使用它们,也有助于将激活保持在“良好”状态。
  • 像 ResNets 这样的架构创新允许仍然可以有效训练的非常深的网络。
  • 现在(与 2006 年相比)可能有更多使用相当宽的隐藏层的趋势;在过去的几年中,这种过度参数化的机制已被证明可以进行梯度下降优化。
  • 像 Adam 这样的自适应优化器可能比以前的算法在优化方面做得更好。

仍然偶尔会看到人们出于某种原因进行分层训练,但绝大多数情况下,不再需要了。