2020李宏毅学习笔记——10.Tips for Training DNN

1.Deep learning

经典三部曲,define-goodness-pick
在Training Set上表现不好 ----> 可能陷入局部最优
在Testing Set上表现不好 -----> Overfitting 过拟合
2020李宏毅学习笔记——10.Tips for Training DNN
注意:不要什么都归咎于overfitting
在testing data表现不好有可能是发生overfitting,但这个的前提model在training data表现好。你看56层的model在training data 就已经输给20层的model,也就是说,不要层数相对多,数据多,表现不好就是overfitting,也得看看training data表现怎么样。
overfitting是指参数多的情况下,在trainingset上性能好,testset上性能不好。判断是否是overfitting,要比较trainingset和testset上的性能区别在training set获得好的结果,但在testing set上获得不好的结果,这个才是overfitting。
而且:一般的机器学习方法(KNN,决策树等)不会在train好的模型上检查training data的结果,因为NN在training data上都没有办法获得很好的正确率,所以要先回头看一下要对模型做什么修改,才能使得在training set上取得比较好的正确率。
2020李宏毅学习笔记——10.Tips for Training DNN

2.Dropout

2.1在testset上结果不好的时候,才apply dropout。如果问题是在trainingdata上不好,则用drought则没用????否则越用dropout,越差。
2.2修正traindata上效果不好:
new activation和adaptive learning rate

那不是overfitting问题,可能是什么问题呢?

3.vanishing gradient problem

意思是:当你把Network叠加的很深的时候,在靠近input的地方的那几层神经元的参数对最终的lossfunction的微分的影很小。output地方很大。

出现问题原因
同样的learning rate的情况下,
靠近input的地方参数学习update非常慢,而output处很快。主要原因是用了sigmoid效果很差,可以根据bp的推导公式来看。
2020李宏毅学习笔记——10.Tips for Training DNN
尝试将前面或者后面的layer的参数做很小的变化,来判断cost function的值的变化

如在第一个layer中的某个参数加上微小的增量w,若w很大,则通过sigmoid函数时,这个output会很小,也就是改变了某个参数的值,对output影响会很小,但是影响是衰减的,sigmoid的策略是把-无穷到+无穷之间的值压缩到0-1之间,w的变化很大,单其output的变化会衰减,这样,没通过一层的sigmoid一次,其前面的变化传递到后面时,就会衰减一次。所以,Network越深,经过越多的sigmoid变换,前面的参数调整对后面output的影响就越小(衰减)。

4.relu

怎么解决呢?
第一种,retrainning。先learn好第一个layer,再learn第二个layer…
第二种,用relu方法。rectified linear unit。input参数小于0时,输出为0,否则,将原值输出。则,计算快(sigmoid里还有一层initial?)。2 某种生物上理由。3 等价于无穷多的sigmoid的叠加的结果。4 可以handle vanishing gradient 问题。
2020李宏毅学习笔记——10.Tips for Training DNN
经过relu之后,out为0的神经元neutron会被拿掉。这样network就变成了很瘦长的linear Network,linear Network的input=output就不会出现影响递减的问题
2020李宏毅学习笔记——10.Tips for Training DNN
这样又有一个问题:
用dl就是不想用linear,但是这样就变的很弱的linear问题了。
其实实际上整个Network还是non linear
比如:sigmoid时,当对input作小小的改变,不改变output的,就是linear function。但是对input做很大的改变,改变了neutron的upiteration,就变成了non linear????

怎么这么多问题:
relu不可微分,region<0微分就是0,>0微分就是1。反正input不可能正好是0.
所以在input<0时,设置斜率(微分值)为0.01或α(在gradient descent中学出来的)
2020李宏毅学习笔记——10.Tips for Training DNN

5.Maxout

让Network,自动学习activation function(ReLU是Maxout中的特殊的一种)

就是说:x1,x2通过不同的权重相乘再相加,分组,找最大。像在layer上作Maxpooling
2020李宏毅学习笔记——10.Tips for Training DNN
5.1 MaxOut可以做到Relu的activation function的效果