李宏毅深度学习笔记2-3Tips for DeepLearning

1、当你的模型表现不好,应该怎么处理?

经过建立deep learning的三个步骤:define a set function•;goodness of function; pick the best function后,会得到一个neural network。在这之后
神经网络的表现
(1)首先检查这个neural network在training set结果如何,是否陷入局部最优,有的话,分析是哪个步骤出了问题,并解决它、(2)假如在training set得到好的结果,之后在testing set的performance才是我们关心的结果。如果在testing data performance不好,才是overfitting(注:training set上结果就不好,不能说是overfitting的问题)如果在testing set表现的很好,就意味成功了。(tips:很多人容易忽视查看在training set上结果,是因为在机器学习中例如是用SVM等模型,很容易使得training set得到一个很好的结果,但是在深度学习中并不是这样的。所以一定要记得查看training set 上的结果。不要看到所有不好的performance都是overfitting。)
例如
在testing data上看到一个56-layer和20-layer,显然20-layer的error较小,那么你就说是overfitting,那么这是错误的。首先你要检查你在training data上的结果。在training data上56-layer的performance本来就比20-layer变现的要差很多,在做neural network时,有很多的问题使你的train不好,比如local mininmize等等,56-layer可能卡在一个local minimize上,得到一个不好的结果,这样看来,56-layer并不是overfitting,只是没有train的好。
面对优化方案
你首先要想一下它是要解什么样的问题,是解决training data的performance不好,还是解决testing data performance不好。当一个方法要被approaches时,往往都是针对这两个其中一个做处理,比如,你可能会听到这个方法(dropout),dropout是在training data表现好,testing data上表现不好的时候才会去使用,当training data 结果就不好的时候用dropout 往往会越训练越差。

2、改进神经网络,解决trainingdata结果不好的三个方法
方法1:新的激活函数

现在你的training data performance不好的时候,可能是neural的架构时设计的不好,举例来说,你可能用的activation function不够好
梯度消失
网络比较深的时候会出现vanishing Gradient problem。比较靠近input的几层Gradient值十分小,靠近output的几层Gradient会很大,当你设定相同的learning rate时,靠近input layer 的参数updata会很慢,靠近output layer的参数updata会很快。当前几层都还没有更动参数的时候(还是随机的时候),随后几层的参数就已经收敛了。
为什么靠近前几层的参数会特别小呢?一个参数w对loss的影响多大,实际上取决于这个参数gradient的值有多大。给第一个layer的某个参数加上△w时,并通过sigmoid function时这个output会很小,每通过一次sogmoid function就会衰减一次(因为sogmoid function会将值压缩到0到1之间,将参数变化衰减),hidden layer很多的情况下,最后对loss 的影响非常小(对input 修改一个参数其实对output 是影响是非常小)。理论上我们可以设计dynamic的learning rate来解决这个问题,确实这样可以有机会解决这个问题,但是直接改activation function会更好,直接从根本上解决这个问题。
怎么样去解决梯度消失?
修改activation function:ReLU(output=max(input, 0)的好处:
1、比sigmoid function更快
2、结合了生物上的原因
3、等同于无穷多的sigmoid function叠加在一起的结果(不同的bias)
4、可以处理vanishing gradient problem,如下
在这里插入图片描述
ReLU对那些output等于0的neural来说,对network一点的影响都没。可以把它从整个network拿掉。 剩下的input等于output是linear时,你整个network就是a thinner linear network。如果是linear的话,input等于output,你就不会出现递减的问题。但我们需要的不是linear network,我们需要它是一个很复杂的function。
改进ReLU
改进1:leaky ReLU:ReLU在input小于0时,output为0,这时微分为0,你就没有办法updata你的参数,所有我们就希望在input小于0时,output有一点的值(input小于0时,output等于0.01乘以input),这被叫做leaky ReLU。
改进2:Parametric ReLU:Parametric ReLU在input小于0时,把output等于αz,设为neural的一个参数,可以通过training data学习出来,甚至每个neural都可以有不同的α值。
改进3:Exponential linear Unit (ELU)
Maxout:来根据training data自动生成activation function。将不同的输出分组,并选出其中的最大值用作下一层,相当于从不同的激活函数的结果中做选择
在这里插入图片描述
另外一个问题:maxout只会training选中的神经元,不会training不是max value的weight。这表面上看是一个问题,但实际上不是一个问题。当你给到不同的input时,得到的z的值是不同的,max value是不一样的,实际上每一个weight都会被training到。

方法2:Adaptive Learning Rate

adagrad的进阶版:RMSProp:
在这里插入图片描述
手动调整α比较小就可以倾向于选择新的梯度

方法3:加上Momentum(惯性)越过local minimize

除了learning rate的问题以外,我们在做deep learning的时候,有可能会卡在local minimize,也有可能会卡在 saddle point,甚至会卡在plateau的地方。其实在error surface上没有太多的local minimize,Neural越大,参数越大,出现的几率越低。
在真实的世界中,在山坡中,把一个小球丢下,滚到local minimize山坡处,只要不是很陡,会因为惯性翻过这个山坡,走到比local minimize还要好的地方,所以我们就是要把这个惯性加到GD里面
通过有个参数,让之前的梯度方向影响新的梯度方向
在这里插入图片描述
Adam:RMSProp+Momentum

3、解决神经网络overfitting的三个方法
方法1:Early Stopping

Early Stopping解释:随着training,total loss正常时越来越小,但training data和testing data的distribute是不一样的,在training data上loss逐渐减小,而在testing data上loss逐渐增大。理想上,假如你知道testing set 上的loss变化,你应该停在不是training set最小的地方,而是testing set最小的地方,可能training到这个地方就停下来。但是你不知道你的testing set(有label的testing set)上的error是什么。所以我们会用validation set模拟 testing set,在validation set最小的时候,training停下来

方法2:Regularization正则化-权重衰减

重新去定义要去minimize的那个loss function。在原来的loss function(minimize square error, cross entropy)的基础上加一个regularization term(L2-NormL2范数),在做regularization时是不会加bias这一项的,加regularization的目的是为了让线更加的平滑(bias跟平滑这件事情是没有任何关系的)。egularization term当然不只是平方,也可以用L1-Norm。
实际上就是让对参数影响越大的高次项惩罚越大,达到平滑的目的

方法3:丢弃法

当对该隐藏层使用丢弃法时,该层的隐藏单元将有一定概率被丢弃掉。设丢弃概率为p,那么有p的概率h会被清零,有1−p的概率h会除以1−p做拉伸(不改变其输入的期望值)。丢弃概率是丢弃法的超参数。
目的是不让每一层太依赖某几个神经元
在testing上注意两件事情:第一件事情就是在testing上不做dropout。第二件事就是在dropout的时候,假设dropout rate在training是p%,all weights都要乘以(1-p%)
ensemble:训练很多复杂的madel然后做平均,这样的就不太会overfitting
为什么说dropout是终极的ensemble方法:每次做丢弃法的时候丢弃的神经元不同,实际上是在训练很多不同的model,因此就相当于ensembel
丢弃法在和更接近线性的模型结合表现会更好,比如Relu、Maxout

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值