深度学习笔记——深度学习技巧

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/li8zi8fa/article/details/77413340

1、模型在训练数据上表现不好,why?

(1)过拟合

(2)激活函数

(3)学习率

2、梯度消失?

   盲目增加网络层数很容易导致发生梯度消失现象,尤其是使用sigmoid作为激活函数的时候。sigmoid函数的特点使得权重很大的改变对输出产生很小的影响,当层数很多时这种影响甚至可以忽略不计。在权重更新环节,靠近输出端的权重梯度较大,靠近输入端的权重梯度很小,这使得后端权重更新的很快、很快就收敛,而前端却更新的很少,好像梯度在向后传播的过程中消失了一样,这就是梯度消失现象。





避免梯度消失发生的方法之一是使用ReLU作为激活函数





3、maxout激活函数

    从下图可以很清楚的看明白maxout的原理,每个maxout神经单元由两个基本神经元构成,并把两个神经元的最大激活值作为激活值输出:



ReLU可以看做是maxout的一种特殊情况,当其中一个神经元的参数全部是0时,maxout就是ReLU:


但是maxout有更多变化:


maxout的“神经元”可以包括不止两个基本神经元,可以自行设置:


maxout不可微,怎么训练呢?


每次求梯度、更新参数时,忽略输出激活值较小的那个(或几个)基本神经元,这时的网络就变成了激活函数是线性函数的普通神经网络:



这样会不会造成输出激活值较小的基本神经元的参数一直得不到更新?不会的。每个基本神经单元的激活值不会一直是较小的那个,因为输入的训练数据是不同的。



4、模型在测试数据集上效果不好?

(1)早停。通过对模型在验证数据集和训练数据集上的结果进行比较,当验证集的结果最好时停止训练,此时的模型泛化能力最好,也就是说此时的模型在测试集上的效果最好。


(2)正则化。婴儿刚出生时候大脑神经是很简单的,过了几年之后大脑神经系统就变得很复杂,又过了几年之后小孩儿成长起来,慢慢懂事,其大脑的神经系统又变得简单起来,因为之前拥有的很多神经细胞都是不必要的。


L2正则化:使得模型权重趋于0,尤其是那些值比较大的,但又不逼迫它们等于0。这是因为,权重更新公式中,w多了一个固定的系数(大于0,小于1,往往更接近于0),这个系数使得w较大时其值衰减的更厉害。


L1正则化:从权重更新公式可以看到,当w>0时,其值会减少一个量;当w<0时,其值会增加一个量。也就是说,L1正则化使得权重的更新量是动态的,更新的结果总使得权重衰减一个固定的值,不管w原来的值较大还是较小。因此,L1正则化使得很多权重变成0,模型变得很稀疏。


   正则化在深度学习模型里并不常用(在SVM,逻辑回归等模型里很重要),因为其作用效果跟早停一样,而且效果往往不如早停。

(3)dropout:每次输入一个mini-batch的数据进行训练时,都随机按比例丢弃一些神经元,n个mini-batch就有n个模型训练出来,测试结果是n和模型的结果平均值(虽然并不是真的求平均值),因此dropout可以理解成一个集成学习模型。


   一般情况下,min-batch的值不会很大(1000以内),对于训练一个模型来说,这个数据量会不会太少?不会,因为同一个权重可能被每一个mini-batch的数据所训练,至少会出现在若干个模型里面,这也就相当于一个权重是若干个mini-batch的数据训练出来的结果。


   训练阶段,每个mini-batch会学习出一个“瘦”的模型,但是在测试阶段使用的模型仍然是一个完整的模型,其神经元是完备的。那么,这种情况下的测试结果如何近似等于所有“瘦”模型单独测试结果的平均值?事实证明,当激活函数是ReLU时答案是肯定的,sigmoid不行。


   测试阶段使用的完备模型,也就是最终学习出来的模型是没有丢弃任何神经元的,那么其各个权重值是什么?答案是,各个权重值减半。But, why?看下图,如果不减半的话,激活函数的输入值会是单个“瘦”模型相应值得两倍。



展开阅读全文

没有更多推荐了,返回首页