资讯 人工智能学术
此为临时链接,仅用于文章预览,将在时失效

如何优化深度神经网络?

作者:丛末
2019/08/05 14:03

训练一个深度神经网络以实现最佳的性能是一件具有挑战的任务。在本文中,我将会探索这项任务中最常见的问题及其解决方案。这些问题包括网络训练时间过长,梯度消失与爆炸以及网络初始化,我们在此统称为优化问题。而在训练网络中出现的另一类问题则称作正则化问题,对此,我已经在之前的文章中讨论过了,如果你没有阅读过,可以点击下方链接阅读原文。

Improving Deep Neural Networks  

输入数据标准化

当我们在训练神经网络时,我们可能会注意到模型训练的时间比预期的要久。这是因为网络的输入数据没有进行标准化处理,让我们尝试通过下方两个输入特征来理解标准化的含义。

如何优化深度神经网络?

在原始数据中,数据的 X 轴(特征X)取值区间为5-50,Y轴(特征Y)取值区间为3-7。 另一方面,在标准化后的数据中,X轴取值区间时-0.15~0.15, Y轴的取值区间时-1.5~1.5。

通过标准化数据,即缩放数值从而使其特征范围非常接近:而标准化数据只需要两步过程。

让数据减去其均值,使得数据的均值为 0,之后再让该数据除以其方差,从而缩放数据。

mu = np.mean(X)
X = X - mu

sigma = np.linalg.norm(X)
X = X/sigma

这里有一点值得注意的是,我们需要使用同样的 mu 值和 sigma 值去转换我们的测试数据,因为我们想用同样的方法来缩放它们。

为什么标准化会起作用呢? 

既然我们已经知道了如何标准化数据集,那么让我们试着理解为什么标准化能够在下面的示例中起作用。下面是成本值 J,权重 W 和偏差 b 之间的等高线图。中心表示我们必须达到的最小成本。 

如何优化深度神经网络?

右边的图看起来更对称,这是标准化背后的工作原理的关键。

如果特征的范围变化很大,则不同权重的值也会随着发生很大的变化,并且将花费更多的时间来选择完美的权重集。然而,如果我们使用标准化数据,那么权重就不会有很大的变化,从而在较短的时间内获得理想的权重集。

此外,如果使用原始数据,则必须使用较低的学习率来适应不同的等高线高度。但是在归一化数据的情况下,我们有更多的球面轮廓,通过选择更大的学习速率,我们可以直接实现最小值。 

当特征在相似的尺度上时,优化权重和偏差变得容易。 

梯度消失和梯度爆炸

梯度消失和梯度爆炸问题源于权值的初始化。 以上两个问题都导致网络的训练不当和速度较慢问题。正如其名称所暗示的那样,当权重消失并最终变得太小时,就会出现梯度消失;然而在梯度爆炸中,权重会爆炸并变得过大。让我们用一个案例来更好地理解它们。 

设 W 是与单位矩阵 I  相近的经初始化的所有层的权重矩阵。

如何优化深度神经网络?

在前向传播中,一个特定层的输出 Z  由以下公式定义,其中 W 是权重矩阵,X 是输入,b 是偏差:

如何优化深度神经网络?

如果我们在 L 层(L 为层数)上执行上述计算,那么我们可以假设权重矩阵 W  将乘以 L 次,忽略偏差。

现在,如果特定值大于 1 ,例如 1.5,则层的激活将呈指数递增,梯度将变大的,与此同时梯度下降将采取大的步长,并且网络将花费很长时间来达到最小值。这种问题被称为梯度爆炸。

同样的,如果特定值小于 1,例如 0.9,则层的激活将呈指数递减,梯度将变得很小,与此同时梯度下降将采取小的步长,并且网络将需要很长时间才能达到最小值。 这种问题被称为梯度消失。

为了避免梯度爆炸和梯度消失的问题,我们应该遵循以下规则 :

如果遵循上述规则,则能够确保梯度下降不会采取太大或太小的步长,并以有序的方式向最小值方向移动,从而避免了梯度爆炸和梯度消失问题。这也意味着网络将以更快的速度进行训练和优化。由于问题的根源在于权值的初始化不当,所以我们可以通过正确地初始化权值来解决这个问题。

Xavier 初始化 

当特定层的激活函数为 Tanh 时,则使用 Xavier 初始化。我们可以按照以下方式使用 Xavier 初始化:

# Let the dimesnion of weight matrix be(5,3)
# The variance is (1/neurons in previous layer)
# Randn ensure that the mean = 0

W = np.random.randn(5,3) * np.sqrt(1/3))

He 初始化

当特定层的激活函数为 ReLU  时,可使用 He初始化。我们可以通过以下方式使用 He初始化: 

# Let the shape of the weight matrix be(5,3)
# The variance is (2/neurons in previous layer)
# Randn ensure that the mean = 0

W = np.random.randn(5,3) * np.sqrt(2/3))

相关参考:

Deep Learning Notes

Coursera — Deep Learning Course 2

via https://medium.com/analytics-vidhya/optimization-problem-in-deep-neural-networks-400f853af406

本文译者:Ryan、肖书忠   雷锋网雷锋网雷锋网

长按图片保存图片,分享给好友或朋友圈

如何优化深度神经网络?

扫码查看文章

正在生成分享图...

取消
相关文章