【深度学习DL】三、训练神经网络

一、欠拟合(Underfitting)和过拟合(Overfitting)

有时候将过拟合称为因方差造成的误差。

早期停止(Early Stopping)

我们要做的是降低梯度,直到测试误差停止降低并开始增大,这时我们就停止。这个算法叫早期停止法,广泛用于训练神经网络。

拟合过拟合_早期停止

二、正则化

正则化

右边的模型非常稳定,很难应用梯度下降法。在右边模型中分类错误会导致更大的偏差,这会很难调优模型或纠正模型。
Large coefficient --->Overfitting

如何避免这种过拟合的发生呢?
解决方案:

01_03_训练神经网络_正则化_解决方案.png

Error Function应为:

参数 表示惩罚系数的多少。如果很大,会惩罚很严重;如果很小,不需要惩罚很严重。

对于使用 和正则化有一些通用的规则:
如果我们需要得到绝对值,可以使用正则化;如果想得到平方,可以使用正则化。两者都比较通用,取决于我们的目标,可以应用其中一个或另一个。
使用正则化时,我们希望得到稀疏向量;它表示较小权重趋向于0,所以,如果想降低权重值,最终得到较小的数,正则可以帮助我们选择哪一些更重要,然后将其余的变为0。而正则化,不支持稀疏向量,因为它确保所有权重一致较小,这个可以训练模型得出更好的结果,所以这会是我们最常用的。

01_03_正则化通用规则.png

为什么正则化,得出稀疏权重的向量,正则化得出较小齐权的向量?
原因是这样:正则化可以得出更小的额平方总和以及更小的误差函数。

三、Dropout

四、局部最低点

局部最低点

一种解决方式是随机重新开始(Random Restart)
我们从几个随机的不同地点开始,从所有这些地点进行梯度下降,这样就增大了抵达全局最低点或者至少是非常低的局部最低点的概率。
局部最低点_随机重新开始

五、梯度消失

我们来看看s型函数,在两端曲线非常平缓,如果我们计算最左端或最右端的点的导数,这个导数将几乎为0,这样不好,因为导数可以告诉我们移动方向。


梯度消失1

在多层线性感知器中,情况更糟糕,看看以下示例:


梯度消失2

我们知道误差函数相对权重的导数是在输出对应路径上的节点,算出的所有导数的积,所有这些导数都是s型函数导数。所以它们很小,一堆很小的数相乘更小了。
这样使训练过程变得很难,因为梯度下降使我们对权重所做的更改非常非常小。意味着我们迈出很小的步子,永远也无法重珠峰上下来。


梯度消失3.png

如何解决这一问题呢?
最后的解决方法是改变激活函数。

1.激活函数

这是另外一种方法叫做双曲正切。这个公式与sigmoid函数相似,不过由于它的范围在-1到1之间导数更大。这个较小的区别实际上会在神经网络中产生更大进步。


激活函数tanh
2.激活函数

修正线性单元Rectified Linear Unit 即ReLU
它只表示,如果为正,就会返回相同的值;如果为负,就返回0。除了sigmoid函数,这个函数是最常使用的,可以在不牺牲精度的前提下,极大提高训练(improve tainig significantly)。因为,如果为正,导数为1。有趣的是,这个函数很少会打破线性,得出复杂的非线性解

激活函数relu

六、批次与随机梯度下降(Stochastic Gradient Descent)

随机梯度下降的原理很简单,拿出一小部分数据,让它们经历这个神经网络,根据这些点计算误差函数的梯度,然后沿着该方向移动一个步长,我们依然要使用所有数据。我们的做法是,将数据拆分为几个批次....
在现实中,采取大量稍微不太准确的步长,比采取一个很准确的步长要好很多。


批次与随机梯度下降

七、学习速率衰退

使用什么样的学习速率这一问题,差不多算是一个研究性问题(research question),但可以遵守一个基本原则:如果学习速率太大,那么采取的就是很大的步长,一开始可能速度很快,但是会错过最低点,并继续前进,这样会导致模型混乱。如果学习速率很小,会采取很小的步长,更有可能达到局部最低值,这样会使模型速度很慢。但是,有个好的经验做法是,如果模型不可行,则减低学习速率。


01_03_训练神经网络_学习速率衰退1.png

最佳学习速率是在模型越来越接近解决方案时降低。


01_03_训练神经网络_学习速率衰退2.png

八、动量

另一个解决局部最低点问题的方法是用动量和决心快速行动,如果在局部最低点卡住,可以翻过驼峰找到更低的最低点。


动量momentum.png

你可能感兴趣的:(【深度学习DL】三、训练神经网络)