众所周知,深度神经网络的主要问题是学习时间过长。
但有一些方法可以加速学习过程:
- 批量归一化
=(x-AVG)/Variance
: https://arxiv.org/abs/1502.03167
批量归一化在训练步骤减少14倍的情况下达到了相同的准确度
- ReLU
=max(x, 0)
– 整流线性单元 (ReLU,LReLU,PReLU,RReLU): https://arxiv.org/abs/1505.00853
使用非饱和激活函数的优势体现在两个方面:首先是解决所谓的“梯度爆炸/消失”问题。其次是加速收敛速度。
或者使用以下任何一种:(maxout, ReLU家族, tanh)
- 快速权重初始化(避免梯度消失或爆炸): https://arxiv.org/abs/1511.06856
我们的初始化方法在标准计算机视觉任务上,如图像分类和对象检测,与当前最先进的无监督或自监督预训练方法相匹配,同时速度大约快三到四个数量级。
或者使用LSUV初始化(层顺序单元方差): https://arxiv.org/abs/1511.06422
但是,如果我们使用所有步骤:(1) 批量归一化,(2) ReLU,(3) 快速权重初始化或LSUV – 那么在训练深度神经网络的任何步骤中使用自编码器/自联想器是否还有意义?
回答:
tl;dr
自编码器可以被视为一种智能初始化权重的替代方法。因此,您使用自编码器来代替您描述的“快速”权重初始化算法。
更详细的解释
自编码器和RBM经常被用来预训练深度神经网络。早期的深度神经网络几乎无法训练,因为参数空间维度非常高。简单的随机梯度下降算法收敛速度非常慢,通常会陷入一个糟糕的局部最优解。解决这个问题的方法是使用RBM(G. Hinton等人)或自编码器(Y. Bengio等人)以无监督的方式预训练网络。
这带来两个很大的优势:
- 您不需要大量的标记训练数据。通常,有很多未标记的数据可用(想想:互联网上的图像),但标记它们是一项非常昂贵的任务。
- 您可以贪婪地逐层训练它们。这意味着,您先训练一个(1层)自编码器。一旦达到良好的重构效果,您就在其上叠加另一个自编码器。您训练第二个自编码器时不触动第一个自编码器。这有助于保持参数数量低,从而使训练更简单、更快。
在训练完RBM或自编码器后,您会在预训练网络的顶部放置一个输出层,并以监督方式使用反向传播训练整个网络。这一步也称为微调。由于除了输出层之外的所有层都已经预训练,权重不需要做太大改变,您将很快找到一个解决方案。
最后,回答您的问题
使用自编码器是否有意义?如果您有大量的标记训练数据,为什么还要费心呢?只需尽可能智能地初始化权重,让GPU运行几周就行了。
然而,如果标记训练数据稀缺,请收集大量未标记的数据并训练自编码器。这样,您可以确保在您拥有的少量标记示例中实现快速收敛和良好的解决方案。