训练深度神经网络那点儿事
点击上方关注,All in AI中国
作者:Ravindra Parmar
深度神经网络是计算机视觉和语音识别领域的关键突破。在过去的十年中,深层网络使得机器能够识别图像、语音,甚至能够以人类几乎不可能的准确度玩游戏。为了实现高精度,需要大量数据和计算能力来训练这些网络。然而,尽管涉及计算复杂性,我们可以遵循某些指导方针来减少训练时间并提高模型准确性。在本文中,我们将介绍一些这样的技术。
数据预处理
数据预处理的重要性只能通过以下事实来强调,即你的神经网络与用于训练它的输入数据一样好。如果缺少重要的数据输入,神经网络可能无法达到期望的准确度。另一方面,如果没有预先处理数据,则会影响神经网络的准确性和性能。
均值减法(零中心化)
这是从每个数据点减去均值的过程,使其为零中心。考虑对神经元(单元)的输入都是正的或全部为负的情况。在这种情况下,在反向传播期间计算的梯度将是正的或负的(与输入的符号相同)。因此,参数更新仅限于特定方向,这反过来会使收敛效率低下。
均值减法(数据零中心化)
数据归一化
归一化是指对数据进行归一化,使其在所有维度上具有相同的比例。通常的方法是将每个维度的数据除以标准差。但是,如果你有理由相信不同的输入特征具有不同的比例,但它们对学习算法具有同等重要性,那么它才有意义。
跨越两个维度的数据规范化
参数初始化
深度神经网络对于数以百万计或数十亿的参数并不陌生。初始化这些参数的方式可以确定我们的学习算法收敛的速度以及最终的准确度。最简单的方法是将它们全部初始化为零。但是,如果我们将层的权重初始化为全零,则计算的梯度对于层中的每个单元将是相同的,因此对于所有单元,对权重的更新将是相同的。因此,该层与单个逻辑回归单元一样好。
当然,我们可以通过用一些较小的随机数初始化权重来做得更好。不是吗?那么,让我们用10层深度神经网络分析该假设的成果,每个神经网络由500个单元组成,并使用tanh激活函数。[这只是关于tanh激活的注释,然后继续进行]。https://towardsdatascience.com/logistic-regression-detailed-overview-46c4da4303bc
Tanh激活功能
这是tanh激活函数的曲线图。随着其进展,关于这种激活的几点要记住:
- 这种激活是零中心化。
- 如果输入为大值正数或大值负数,则会饱和。
首先,我们从具有零均值和1 e-2标准差的标准高斯初始化所有权重。
不幸的是,这仅适用于小型网络。并且为了查看它为更深层的网络创建的问题,可以使用各种参数生成图表。这些图描绘了当我们深入网络时每层的均值、标准偏差,以及激活。
均值、标准偏差和跨层激活
注意,均值总是在零附近,这很明显,因为我们使用零中心非线性。然而,随着我们深入网络,标准偏差逐渐缩小,直到它崩溃到零为止。这也是显而易见的,因为事实上,我们在每个层将输入与非常小的权重相乘。因此,计算的梯度也非常小,因此对权重的更新可以忽略不计。
这很好!!!接下来让我们尝试使用非常大的数字初始化权重。为了做到这一点,让我们从标准高斯中取权重,其中零均值和标准偏差为1(而不是0.01)。
以下是显示所有层的均值,标准偏差和激活的图表。
均值、标准偏差和跨层激活
请注意,每层激活或者接近1,或者-1,因为我们将输入与非常大的权重相乘,然后将其输入tanh非线性(压扁到+1到-1的范围)。因此,计算的梯度也非常接近零,因为在这些方案中tanh饱和(导数为零)。最后,权重的更新几乎可以忽略不计。
实际上,Xavier初始化用于初始化所有层的权重。 Xavier初始化背后的动机是以这样的方式初始化权重,即它们不会终止于tanh激活的饱和状态,即初始化的值不是太小或太大。为了实现这一点,我们根据输入的数量进行缩放,同时从标准高斯中随机采样。
但是,这可以很好地假设tanh用于激活。对于例如ReLu的其他激活功能,这种情况肯定会中断。毫无疑问,适当的初始化仍然是一个活跃的研究领域。
批量归一化
这与我们迄今为止所讨论的内容有些相关。请记住,我们在将输入馈送到网络之前对输入进行了归一化处理。这样做的一个原因是考虑到由移位协方差引起的网络中的不稳定性。
它解释了为什么即使在学习了从某些输入到输出的映射之后,我们也需要重新训练学习算法,以便在输入变化的数据分布情况下学习从相同输入到输出的映射。
但是,这个问题并没有得到解决,因为数据分布在更深的层次上也会发生变化。每层激活可能导致不同的数据分布。因此,为了增加深度神经网络的稳定性,我们需要通过减去平均值并除以标准偏差来归一化每层馈送的数据。有一篇文章对此进行了深入的解释。https://towardsdatascience.com/batch-normalization-in-neural-networks-1ac91516821c
正则化
训练深度神经网络中最常见的问题之一是过度拟合。当你的网络在训练数据上表现出色,但在测试数据上表现不佳时,就会发现过度拟合。这是因为我们的学习算法试图拟合输入中的每个数据点,即使它们代表一些随机采样的噪声,如下图所示。
正则化有助于避免过度拟合惩罚网络的权重。为了进一步解释,考虑在神经网络上定义的分类任务的损失函数如下:
损失函数
请注意,正则化参数(lambda)用于控制权重对最终目标函数的影响。因此,在lambda取一个非常大的值的情况下,网络的权重应该接近零,以便最小化目标函数。但是当我们让权重崩溃为零时,我们将抵消层中许多单元的影响,因此网络并不比具有少数逻辑回归单元的单个线性分类器更好。而出乎意料的是,这将使我们陷入称为欠拟合的的体制中,这种体制并不比过度拟合好得多。显然,我们必须非常仔细地选择lambda的值,以便最终我们的模型属于平衡类别(图中的第3个图)。
Dropout正则化
除了我们讨论的内容之外,还有一种更强大的技术可以减少深度神经网络中的过度拟合,称为Dropout正则化。
其关键的想法是在训练网络时随机丢弃单元,以便我们在每次迭代时使用较小的神经网络。丢弃单元与在前向传播或后向传播期间忽略这些相同单元。从某种意义上说,这可以防止网络适应某些特定的特征集。
在每次迭代中,我们都会从网络中随机丢弃一些单元。因此,我们迫使每个单元不依赖(不给予高权重)来自前一层的任何特定单元集,因为它们中的任何单元可能随机消失。这种扩展权重的方式最终会缩小单个单元级别的权重,类似于我们在L 2正则化中所讨论的内容。