在使用批量归一化的神经网络中使用自编码器是否有意义?

众所周知,深度神经网络的主要问题是学习时间过长。

但有一些方法可以加速学习过程:

  1. 批量归一化 =(x-AVG)/Variance: https://arxiv.org/abs/1502.03167

批量归一化在训练步骤减少14倍的情况下达到了相同的准确度

  1. ReLU =max(x, 0) – 整流线性单元 (ReLU,LReLU,PReLU,RReLU): https://arxiv.org/abs/1505.00853

使用非饱和激活函数的优势体现在两个方面:首先是解决所谓的“梯度爆炸/消失”问题。其次是加速收敛速度

或者使用以下任何一种:(maxout, ReLU家族, tanh)

  1. 快速权重初始化(避免梯度消失或爆炸): 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. 您不需要大量的标记训练数据。通常,有很多未标记的数据可用(想想:互联网上的图像),但标记它们是一项非常昂贵的任务。
  2. 您可以贪婪地逐层训练它们。这意味着,您先训练一个(1层)自编码器。一旦达到良好的重构效果,您就在其上叠加另一个自编码器。您训练第二个自编码器时不触动第一个自编码器。这有助于保持参数数量低,从而使训练更简单、更快。

在训练完RBM或自编码器后,您会在预训练网络的顶部放置一个输出层,并以监督方式使用反向传播训练整个网络。这一步也称为微调。由于除了输出层之外的所有层都已经预训练,权重不需要做太大改变,您将很快找到一个解决方案。

最后,回答您的问题

使用自编码器是否有意义?如果您有大量的标记训练数据,为什么还要费心呢?只需尽可能智能地初始化权重,让GPU运行几周就行了。

然而,如果标记训练数据稀缺,请收集大量未标记的数据并训练自编码器。这样,您可以确保在您拥有的少量标记示例中实现快速收敛和良好的解决方案。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注