想改善深层神经网络,这几种途径值得一试!

293 阅读7分钟


全文共2734字,预计学习时长5分钟

深层神经网络可以解决诸如自然语言处理、机器视觉、语音合成等复杂任务。提高深层神经网络的性能与理解其工作原理同样重要。这篇文章将解释改善神经网络方面的各种术语和方法。

偏差与方差

偏差与方差是体现网络在训练集和测试集中性能的两个基本术语。下列两类问题可以轻松直观地解释偏差与方差。蓝线表示由神经网络计算的判定边界。

1. 最左侧的图片展示出神经网络存在较大偏差。此时网络学习了一个简单假设,所以不能正确地用于训练数据。因此无法区分不同类的示例,并且对训练集和测试集处理效果不佳。可以说这个网络是不拟合的。

2. 最右侧的图片表明,神经网络存在较大方差。此时网络学习了一个非常复杂的假设,因此无法进行归纳。该方法对训练数据的处理效果较好,而对测试数据的处理效果较差。可以说网络是过度拟合的。

3. 中间的图片展示了一个“恰到好处”的神经网络。它学习了理想假设,这有助于网络筛选出异常情况,并对数据进行归纳。应将实现这种类型的网络定为目标。

图片来源:pexels.com/@pixabay

训练方法

既然了解了什么是理想的神经网络,那么如何实现目标呢?首先应处理偏差问题,再处理方差问题。

第一个问题是“是否存在较大偏差?”如果答案是肯定的,那么应尝试以下步骤:

· 训练更大的网络,包括增加隐层数和隐层的神经元数。

· 对网络进行长时间的训练。训练过程可能不完整,需要更多迭代。

· 尝试不同的优化算法,包括Adam、Momentum、AdaDelta等。

· 迭代执行上述步骤,直到偏差问题得到解决,然后处理第二个问题。

如果答案是否定的,意味着偏差问题已经解决,接下来应关注方差问题。第二个问题是“是否存在较大方差?”如果答案是肯定的,应尝试以下步骤:

· 收集更多训练数据。训练数据越多,数据越多变,从变化较小的数据中学习的假设就越不复杂。

· 尝试正则化。将在下一节中详述。

· 迭代执行上述步骤,直到方差问题得到解决。

如果答案是否定的,意味着方差问题已经解决,现在的神经网络是“恰到好处的”。

正则化

正则化是一种有助于减少神经网络过度拟合的逻辑技术。当在网络中加入正则化时,意味着加入了一个新的正则化项,并且修改了损失函数。修改后的代价函数 J在数学上表示为:


带有λ的第二项为正则化项。||W||项为弗罗宾尼斯范数(矩阵中元素的平方和)。随着正则化的引入,λ成为一个新的超参数,可以对其进行修改以提高神经网络的性能。上述正则化也称为L-2正则化。

早期使用以下更新规则来更新权值:

由于在修改后的已包括正则化的代价函数J中存在新的正则化项,所以将用以下方式更新权值:

这里显示出,权值减少了一个小于1的小数。因此也称这种正则化为权值衰减。衰减值取决于学习速率α和正则化项λ。

正则化为什么有效?

训练神经网络的最终目标是使代价函数J最小化,从而使正则化项最小化。现在已经了解了正则化的概念,接下来解释它为什么有效。

第一,如果增加λ的值,弗罗宾尼斯范数就会变小,权值就会接近0。这种方法消除了大部分神经元,制造浅层网络。可以看作是将学习复杂假设的深层网络转化为学习简单假设的浅层网络。众所周知,简单假设可以减少复杂的特征,减少过度拟合,得到一个“恰到好处”的神经网络。

也可以从应用正则化时神经元的激活方式来解释。为此,需要了解tanh(x)的激活。

如果增加λ的值,那么弗罗宾尼斯范数变小,即权值W 变小。因此,该层的输出将变小,并且将位于激活函数的蓝色区域中。可以看到,蓝色区域的激活几乎是线性的,网络的行为将类似于浅层网络,即网络将不学习复杂的假设(将避免尖锐的曲线),并且最终将减少过度拟合,便可以获得一个“恰到好处”的神经网络。

因此,由于弗罗宾尼斯范数将变大,过小的λ值将导致过度拟合,神经元将不会被清除,并且层的输出将不会在线性区域中。类似地,过大的λ值将导致拟合不足。因此,寻找λ的最优值是提高神经网络性能的关键。

丢弃正则化

丢弃正则化是另一种正则化技术。这种技术会丢弃某些神经元以及它们在神经网络中的连接。概率keep_prob决定了要丢弃的神经元。在去除神经元后,网络对剩余的神经元进行训练。需要注意的是,在测试时间/推理时间内,所有神经元都有可能用于确定输出。下例有助于理解这个概念:

# Define the probablity that a neuron 
stays.keep_prob = 0.5

# Create a probability mask for a layer eg. layer 2. 
The mask should
# have same dimensions as the weight matrix so 
that the connections
# can be removed.d2 = np.random.rand(a2.shape[0],a2.shape[1]) < 
keep_prob

# Obtain the new output matrix.a2 = 
np.multiply(a2,d2)

# Since few neurons are removed, we need to 
boost the weights of
# remaining neurons to avoid weight imbalance 
during test time.a2 = a2/keep_prob

由于首先丢弃概率为keep_prob的神经元,然后使用keep_prob增强剩余神经元,所以这种类型的丢弃被称为倒置丢弃。


丢弃之间禁止神经元只依赖某些特征,因此,权值得以传播。神经元可能变得依赖于某些输入特征来确定输出。在丢弃正则化的影响下,对于训练过程中的不同训练样本,一个特定神经元每次只得到少数特征作为输入。最终,权值分布在所有输入之间,网络使用所有输入特征来确定输出,而不依赖于任何单个特征,从而使网络更加结实。这也叫L2正则化的自适应形式。

也可以为每一层单独设置 keep_prob。因为丢弃的神经元数量与 keep_prob成反比;建立 keep_prob的一般标准是,密集连接应包含相对较少的 keep_prob,以便丢弃更多的神经元,反之亦然。

在丢弃正则化时,深层网络模仿浅层网络在训练阶段的工作。这反过来又减少了过度拟合,可得到“恰到好处”的神经网络。

早停止

早停止是一种训练方法。在早期停止训练神经网络以防止其过度拟合并跟踪train_loss和dev_loss以确定何时停止训练。


只要dev_loss开始迭代过度;便停止训练。这种方法被称为早停止。但是,由于以下两个原因,不推荐在训练网络时使用:

1. 停止训练时,损失不是最小的。

2. 正在减少训练不当的网络的过度拟合。

早停止会增加复杂度,无法获得“恰到好处”的神经网络。

留言 点赞 关注

我们一起分享AI学习与发展的干货

欢迎关注全平台AI垂类自媒体 “读芯术”

(添加小编微信:dxsxbb,加入读者圈,一起讨论最新鲜的人工智能科技哦~)