台大李宏毅Machine Learning 2017Fall学习笔记 (10)Tips for Deep Learning
台大李宏毅Machine Learning 2017Fall学习笔记 (10)Tips for Deep Learning注:本博客主要参照http://blog.csdn.net/xzy_thu/article/details/69680951改写。此小节课讲的是在做深度学习过程中,提升模型效果的方法。从训练模型到最后应用,流程图如下图所示。注意:在实际训练深度学习模型的
台大李宏毅Machine Learning 2017Fall学习笔记 (10)Tips for Deep Learning
注:本博客主要参照
http://blog.csdn.net/xzy_thu/article/details/69680951改写。
此小节课讲的是在做深度学习过程中,提升模型效果的方法。
从训练模型到最后应用,流程图如下图所示。
注意:在实际训练深度学习模型的过程中,并不容易
overfitting
。
判断overfitting需要看两个数据集上的结果(training set → good, testing set → bad)。
在试图解决overfitting之后仍要再看一下training set上的结果!
不能看见所有不好的performance都归因到overfitting。如只看下右图,不能断言56-layer有overfitting,要看training set上的表现。根据下左图,可以发现原因是train的时候没有train好(也不能叫underfitting,underfitting:参数不够多,模型能力不足)。
对症下药
在读到deep learning的方法时,要思考该方法是解决什么问题。是解决training set上的performance不好,还是解决testing set上的performance不好。比如,Dropout是为了解决testing set上结果不好的问题,如果是training set上结果不好而用Dropout,不会有好的结果。
解决方法与对应的问题:
New activation function (for good results on training data)
MNIST手写数字识别,激活函数用sigmoid,training data上的accuracy与层数的关系曲线:
层数>7时,performance下降,原因不是overfitting! train的时候就没train好。
梯度消失的问题:
用sigmoid会出现梯度消失的问题(参数的变化经过sigmoid会逐层衰减,对最后的loss影响很小),改用ReLU(计算快,相当于无数sigmoid叠加,解决梯度消失问题)。
ReLU输出0或x,输出0的ReLU神经元相当于不存在,网络变得瘦长,但是整个网络仍然是非线性的,只有当input改变十分微小的时候才是线性的,因为input不同,输出为0的ReLU神经元也不同。
ReLU是Maxout的特例,Maxout可以学出激活函数。
Adaptive Learning Rate (for good results on training data)
1.RMSProp
现回顾下Adagrad的计算公式。
RMSProp的详细计算过程如下。
α 小,则倾向于相信新的gradient。
2.Momentum
在Momentum的方法中,参数下降的方向可以理解为是当前点梯度方向与前一步的速度方向这两个矢量的矢量和的方向。
而传统的梯度下降法可以理解为参数到达某一点后先停稳了,然后环顾四周,挑一个最陡的方向(该点的梯度方向)往下走。
3.Adam
算法如下:
Early Stopping (for good results on testing data)
这里的testing set指的是有label的testing set。
如果learning rate设的对的话,training set的loss会逐渐降低,而testing set与training set可能分布不同,所以testing set的loss可能先降后升,这时就不要一直train下去,而是要在testing loss最小的地方停止train。这里的testing set 实际指的是validation set。
Regularization (for good results on testing data)
L2正则化过程
L2正则化让function更平滑,而bias与函数平滑程度没有关系,故不考虑偏置项。
参数更新:
正则化在NN中虽有用但不明显。
NN参数初始值一般接近0,update参数即是要参数原理0。L2正则化(让参数接近0)的作用可能与early stopping类似。
L1正则化
L1 update的速度是|ηλ|(划横线那项每次改变量是一定的)。而 L2 update 的速度与
wt
有关(如果
wt
很大,那么改变量也很大)。
用L1做training,结果比较sparse,参数中有很多接近0的值,也有很多很大的值。
L2 learn的结果:参数值平均来讲比较小。
Dropout (for good results on testing data)
input layer中每个element也算是一个neuron.
每次更新参数之前都要resample.
用dropout,在training上的结果会变差,但在testing上的结果会变好。
在testing的时候不做dropout,所有neuron都要用。
如果training时dropout rate = p%, 得参数a, 那么testing时参数a要乘(1 - p%).
Dropout是ensemble的一种方式。
一个复杂model, bias准,但variance大,把多个复杂model ensemble起来,variance变小。
每个dropout后的结构由一个batch来train,但是权重是共享的,每个权重是由多个batch 来train的。
在testing的时候,把多个结构的结果取平均,与把所有参数乘以(1 - p%),效果是近似的。
Dropout用在ReLU、Maxout上效果较好。
更多推荐
所有评论(0)