在深度神经网络中防止过拟合

摘自O社的fundamentals of Deep Learning

第一种方法:正则化

1、L2正则化

正则化通过添加惩罚大权重的附加项来修改我们最小化的目标函数。换言之,我们将目标函数改为Error+λf (θ) ,f(θ)随 θ的变大而变大, λ 是另一个名叫正则化强度的超参数。 我们选择λ 的值的大小决定了我们想解决过拟合的程度。 λ =0说明我们没有采取任何方法防止过拟合。如果λ太大,那么我们的模型将优先考虑将θ保持尽可能小,而不是试图找到在我们的训练集上表现良好的参数值。结果是,选择λ是一个很重要的步骤,需要一些一些检验和试错。

在机器学习中最常见的正则化方法是L2正则化。可以通过用神经网络中所有权重的平方大小扩大误差函数来实现。换言之,对于神经网络中的每一个权重w,我们加入 (1/2λww)为附加方程。L2正则化直观地解释了对峰值权重向量的严重惩罚,并且倾向于使用弥散权重向量。鼓励网络稍微使用所有输入而不是仅大量使用一些输入。**特别要注意的是,在梯度下降更新期间,使用L2正则化最终意味着每个权重都线性衰减为零。**由于这个现象,L2正则化也通常被叫作权重衰变。
我们可以使用ConvNetJS来可视化L2正则化的影响。我们使用一个有两个输入一个尺寸为2的softmax层输出,和一个有20个神经元的隐藏层。我们使用mini-batch gradient descent(batch size 10) ,正则化强度分别为0.01,0.1和1。结果如下图所示:
在深度神经网络中防止过拟合_第1张图片
(可以看到对过拟合有很好的抑制作用)

2、L1正则化

另一个正则化的常用类型为L1正则化。在这里我们对神经网络中的每一个权重w增加了 λ|w|项。L1正则化具有吸引人的特性,即它导致权重向量在优化过程中变得稀疏(即非常接近于零)。换句话说,具有L1正则化的神经元最终仅使用其最重要输入的一小部分,并且变得对输入中的噪声具有较强的抵抗力。相比之下,来自L2正则化的权重向量通常是分散的,少量的。当您想确切了解哪些功能有助于决策时,L1正则化非常有用。 如果不需要这种级别的功能分析,则我们更喜欢使用L2正则化,因为它的效果更好。
最大范数约束具有试图限制θ太大的相似目标,但它们做的更加直接。最大范数对每个神经元的传入权重向量的大小施加绝对上限的约束,并使用投影梯度下降来限制约束的实施。换句话说,每当梯度下降步骤移动传入的权重向量使得w的平方大于c时,我们就将向量投影回半径为c的球(以原点为中心)。c的典型值为3和4.一个不错的特性是参数向量不会失控地增长(即使学习率太高),因为权重的更新总是有界的。
投影约束下降:projected gradient desent

3、Dropout

Dropout是一种防止过拟合的十分不同的方法,目前在深度神经网络算法中已经成为了一种非常流行的方法。当训练的时候,通过仅以某个概率p(超参数)使神经元保持活动状态,否则将其设置为零来实现Dropout,即使没有某些信息,这也迫使网络保持准确。 它可以防止网络变得过于依赖神经元中的任何一个(或任何小的组合)。 从数学上来说,它通过提供一种有效地将许多不同的神经网络体系结构以指数方式近似组合的方式来防止过度拟合。 Dropout的过程如图2-16所示。
在深度神经网络中防止过拟合_第2张图片
Dropout理解起来非常直观,但是要考虑一些重要的复杂问题。 首先,我们希望神经元在测试时间内的输出与他们在训练时的预期输出相等。 我们可以通过在测试时缩放输出来解决此问题。 例如,如果p = 0.5,则神经元必须在测试时将其输出减半,以便获得与训练期间相同的(预期)输出。 这很容易看到,因为神经元的输出以概率1-p设置为0。 这意味着,如果神经元在退出之前的输出是x,那么在退出之后,预期的输出将是E output = px + 1-p·0 = px。 但是,这种幼稚的Dropout实现是不可取的,因为它需要在测试时缩放神经元输出。测试时间的性能对于模型评估至关重要,因此,最好使用倒置落差法,这种方法在训练时而不是在测试时进行缩放。 在反向辍学中,任何尚未被激活的神经元都将其输出除以p,然后将该值传播到下一层。 通过此修复,E输出= p*x/p +(1-− p)0= x,我们可以避免在测试时任意缩放神经元输出。
讲真这个讲Dropout的没怎么看懂。不过大意理解了就行。

你可能感兴趣的:(MESSIDOR)