李宏毅机器学习笔记-9:Tips For Training DNN

我们训练一个神经网络首先就要在Training Data上做测试,如果在Training Data上的效果很好,再拿去Testing Data测试。这是为啥?等下再解释

下面是训练一个神经网络的大致过程
在这里插入图片描述
有的时候Test Data测试结果不好并不是过拟合的结果

在这里插入图片描述
这是因为你的神经网络在Train set的结果本来就不好,上图56层的神经网络在训练的结果就没20层的好,所以在Test set的结果自然就比20层差。

如果在Training Data神经网络表现就不好,该怎么办?
一个是换新的Activation function,一个是更新我们的Lr

Activation function

往往会出现一些问题,所以需要更换我们的Activation function,比如梯度消失问题(vanishing gradient),梯度消失的问题就是当我们神经网络很深的时候出现的问题

在这里插入图片描述
后几层梯度很大,所以前几层参数更新几次后,后面的参数就已经达到了收敛(可能是局部最优,因为前几层的参数几乎和初始化的参数一致),所以这不是初始化参数的问题

那要怎样做呢?
在这里插入图片描述
当我们加上Activation function时就可以减小深层的梯度,上图是sigmoid

把sigmoid换成ReLU可以很好解决梯度消失的问题

在这里插入图片描述
通过ReLU后,就变成线性的,梯度就变小了,原样输出。但只有部分层是线性,全是线性也没用

在这里插入图片描述
在这里插入图片描述

ReLU有很多变形,可以改变小于0的部分,改成线性和非线性都可以 在这里插入图片描述
Maxout NN——让神经网络自己去学习Activation function

下图左边如果学习的参数是这样就可以得到ReLU,当然也可以得到其他激活函数(如右边),根据你的参数的不同会有不同的函数
在这里插入图片描述

Lr

对于Lr,adagrad用了一次微分估计二次微分的方法(需要在二次微分相对固定,但通常二次微分不是那么固定)
在这里插入图片描述
可能在同一个方向需要不同的Lr。可以运用RMSProp
在这里插入图片描述
其中
在这里插入图片描述

在训练的时候可能会出现这样的情况,导致还没到达最优就已经停止了

在这里插入图片描述
于是我们可以加入动量,红色代表梯度,绿色代表动量,蓝色代表实际的方向,可以发现蓝色可以有效地越过上图梯度可能为0但却不是左右的地方,只要考虑前一次,就可以吧前面所有的Movement考虑进来
在这里插入图片描述在这里插入图片描述
如何让神经网络在Test set上有好的表现,减少overfitting的情况?
方法有3:Early stopping,Regularzation,Dropout

Early stopping

随着训练次数的增加,我们希望停在测试数据误差增大的那个地方,但是我们不知道在哪里,所以,要边训练边拿Trian Data的一部分数据(Validation set)来做测试

在这里插入图片描述

Regularization

正则化分为L1,L2

Dropout

Dropout:在每一次训练前都丢掉一些神经元(假设每个神经元被丢掉的概率都为p%),这样神经网络就会变得更瘦,但在测试的时候不睡丢弃这些神经元,在少数的神经元都可以做好的情况下,增加神经元就可以做的更好,比如运动员在练习的时候加上负担,正常比赛就没有这些负担,或许可以发挥比训练时候更好的水平。
在这里插入图片描述
但在测试的时候,权重需要乘上(1-p%),因为之前有丢弃神经元,导致z与z’不等
在这里插入图片描述
为什么说Dropout行的通,先看看Ensemble
在一个训练集上训练多个神经网络,再用测试数据在每个神经网络测试后取平均值
在这里插入图片描述
在这里插入图片描述
当作用的Activation function是线性的 时候就会出现下面这种情况,平均值和y大致相等,所以行的通
在这里插入图片描述
over

发布了16 篇原创文章 · 获赞 0 · 访问量 953

猜你喜欢

转载自blog.csdn.net/qq_44157281/article/details/98041392
DNN