李宏毅ML+DL学习记录:tips for training DNN

在这里插入图片描述
主要分成两块来讲:结果在训练集上不好 and 结果在测试集上不好

一.结果在训练集上不好:

由上图可以看出,当结果在训练集上的效果不好时,我们主要有两种方式:
1.采用adaptive learning rate(即不把lr固定成一个常数),比如adagrad
2.使用新的激活函数

1.adaptive lr

1)adagrad:
在这里插入图片描述
2)RMSProp(adagrad的进阶):
在这里插入图片描述
在这里插入图片描述
所以可以看出,RMSProp就是在adagrad的基础上加了一个权。
alpha值越小,越看中较新的gradient(即上图中的g)告诉你的信息,而比较无视旧的gradient带给你的信息。

3)momentum:

在这里插入图片描述
上图是一般的gradient descent,红色是实际算出来的gradient,那么我们要让loss变小,就得沿着gradient的反方向进行改变,即图中蓝色的线条。
在这里插入图片描述
这幅图呢,代表的是momentum的方法:在进行参数更新的时候,不仅仅考虑了gradient,还考虑了之前的movement。红色的虚线表示gradient的反方向,如果是单纯的gradient descent,那么就应该按照红色的虚线进行参数更新。绿色的虚线表示上一次参数更新(蓝色的线)(也就是上一次的movement)的延续。红色虚线与绿色虚线共同构成了下一次的movement。
在这里插入图片描述
momentum的好处在哪里呢?看上图,A,B两点就不说了(PS:本幅图中,红色的线直接代表了gradient的反方向)。我们的目标是使loss function的值(也就是图中的cost值)越小越好,比如我们希望它能达到E这点。
如果参数此时已经更新到C这点,那么loss对参数的偏微分值为0,如果是一般的gradient descent,那么参数就不会再更新了,这就是local minimum问题。但是,如果加上momentum(图中绿色的虚线)情况就不一样了,此时,红色的线为0,绿色的线向左,所以综合来看,参数依然会向左边这个方向更新(即蓝色的线)。
再来看D点,此时如果单纯靠gradient,我们会向右更新参数,但是这与我们的目标E是相反的,如果加上momentum,那么我们就有可能在momentum的帮助下,改变参数更新的方向,从而更接近我们的目标。
(by the way,其实D点再往右一点就达到了plateau,此时loss对参数的偏微分值也为0,加上momentum也能解决这一问题。)

4)Adam:
在这里插入图片描述
adam是RMSProp和momentum的结合。
在这里插入图片描述
(为什么mt,vt要变成mt_hat和vt_hat目前我还不太清楚)

2.new activation function

sigmoid激活函数在DNN中常常会出现梯度消失的问题:
在这里插入图片描述
可以从上图中看出,离output层越近,gradient值往往较大,那么参数的更新也比较快;离output层越远,gradient值往往较小,参数的更新就比较慢。所以当比较近的那些参数已经收敛的时候,离得远的参数说不定还在random。所以我们考虑使用其他激活函数。

1)relu(rectified linear unit):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对以上图片的解释:对于x1,x2,经过第一层的参数(w)之后,有些小于0,有些大于0。小于0的,经过relu激活函数变成了0(即output变成了0),大于0的(比如设为z),经过relu激活函数,仍然是z(即图二)。output为0的,后面与参数无论怎么相乘相加都为0,所以就相当于没有这些连接了,所以就可以直接抹掉(即图三)。
对于剩下的neuron,由于a=z,所以经过relu激活函数后,前面传来的信息(z)并不会被缩小(还是为z)(sigmoid就会缩小,因为经过sigmoid激活函数后的输出为a=1/(1+exp(-z))这在一定程度上缓解了梯度消失。
经过以上操作,neural network看起来变成了更‘瘦’的linear structure了,但实际上它仍然是非线性的。原因在于:第一个样本的情况下为0的neuron,在第二个样本时不一定为0,所以第一个样本时被抹掉的参数,在第二个样本时不一定被抹掉,因此不同的样本,有不同的structure,所以是非线性的。

relu的一些变形:
在这里插入图片描述

2)maxout:
在这里插入图片描述
即在一个group中,选择最大的那个值作为经过激活函数后的输出值。(上图中,一个group包含两个数)
relu是一种特殊的maxout:(原因见下图)
在这里插入图片描述
z1(蓝线),z2(红线)是group中的两个数,输出的值是它们中的最大值,即a=max{z1,z2},所以a的图像就是绿色那条线,可以看出,如果调整w和b的值,那么这个maxout的效果就会和relu一样。

在这里插入图片描述
当group中的数的个数不一样时、当w,b值不一样时,最终激活函数的图像也不一样。
那么使用maxout的NN如何train呢?思想和relu差不多:
在这里插入图片描述
就如上图所说,给定x,我们知道每个group中哪些z是最大的,那么哪些不是最大的,它们所对应的参数就可以抹掉。比如一共有w1~w10共10个参数需要train,第一个样本x1时,假如只有w1,w4,w7(这个数目可能不太准确)留下来了,其他都被抹掉了,那么经过反向传播,w1\4\7就会被更新一次。当第二个样本时,w1\4\7使用更新后的值,其他参数的值仍使用初始值,在此情况下,假设w2,5,6,7,8被抹掉了,那么经过反向传播,w1,3,4,9,10就会被更新。然后第三个样本…

二.结果在训练集上效果不好

1.early stopping

在这里插入图片描述
实际实验中,往往不能知道testing set的error(因为没有label),所以常常用validation set来代替。

2.regularization(正则)

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

3.dropout

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:for each mini-batch, resample the dropout neurons!!!

测试集上:
在这里插入图片描述
更正一下上图的一个错误:应该是(100-p)%

发布了43 篇原创文章 · 获赞 1 · 访问量 765

猜你喜欢

转载自blog.csdn.net/weixin_41391619/article/details/104474558
DNN