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

本文共2734字,预计学习时长5分钟算法

深层神经网络能够解决诸如天然语言处理、机器视觉、语音合成等复杂任务。提升深层神经网络的性能与理解其工做原理一样重要。这篇文章将解释改善神经网络方面的各类术语和方法。微信

误差与方差网络

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

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,加入读者圈,一块儿讨论最新鲜的人工智能科技哦~)

相关文章
相关标签/搜索