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

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

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

  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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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