无锡麦地齿轮有限责任公司欢迎您!

如何优化深度神经网络?

时间:2020-07-06

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

https://towardsdatascience.com/improving-deep-neural-networks-b5984e29e336?source=post_page输入数据标准化

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

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

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

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

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

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

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

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

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

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

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

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

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

当特定层的激活函数为 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

当特定层的激活函数为 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

http://www.deeplearning.ai/ai-notes/initialization/Coursera — Deep Learning Course 2

https://www.coursera.org/learn/deep-neural-network/home/welcomevia https://medium.com/analytics-vidhya/optimization-problem-in-deep-neural-networks-400f853af406