李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

1.关于Deep Learning的一些技巧

结合下图进行一个完整的模型选取讲述。

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

以前的课程学习中知道Deep Learning主要有三个步骤。但是还是需要继续补充一下。

补充1:判断Train的结果怎么样,如果不好,就要重新设计一下主要的三个步骤。

补充2:如果Train的结果比较好,那么需要在Testing Data上进行Predict,观察Predict的结果怎么样?如果结果不好,可能是Overfitting导致的,还是需要重新设计主要的三个步骤。

但是在Testing data上出现performance不好的时候不能完全归咎于Overfitting,请结合下图。

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

上图中在Testing Data上的结果表现56-layer的neural network表现出的结果比20-layer差,我们就说这个这是Overfitting导致的吗?但是我们先检查一下在Training Data上的结果,56-layer的performance比20层的要差。其实这个是因为拥有56-layer的neural network在train的过程没有train好,为什么没有train好,可能是因为陷入到了local minimal等等。

故在deep learning的过程中会出现两个问题:

1.Train的结果不好

2.Test的结果不好

下面就这两个问题分别讲述:

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

2.Training结果不好的时候:

2.1 new activation function

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

注意:上图随着层数越多的时候出现accuracy越低,这不是overfitting导致的哦,因为这是在training的过程中,如果train的结果好,test的结果不好,可能是overfitting导致的。

那么引入一个问题:为什么随着层数的增加,或者说随着hidden layer数目的增加,但是accuracy确下降了呢?

这就是下降的梯度问题(Vanishing Gradient Problem)

先看一组试验数据,当神经网络在训练过程中, 随epoch增加时各隐藏层的学习率变化。

两个隐藏层:[784,30,30,10]

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

 三个隐藏层:[784,30,30,30,10]

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

四个隐藏层:[784,30,30,30,30,10]

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

可以看到:前面的隐藏层的学习速度要低于后面的隐藏层。

这种现象普遍存在于神经网络之中, 叫做消失的梯度问题(vanishing gradient problem)
另外一种情况是内层的梯度被外层大很多,叫做激增的梯度问题(exploding gradient problem)

更加一般地说,在深度神经网络中的梯度是不稳定的,在前面的层中或会消失,或会激增。这种不稳定性才是深度神经网络中基于梯度学习的根本问题。

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

这就会导致结果很差。

那么为什么会产生这种现象呢?

这是因为sigmoid函数,如果有着较大的input,但是会得到一个较小的output,结合下图中sigmoid函数图理解。

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

如果hidden layer较多的话,衰减的次数越多,input对output的影响则越小。

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

根本的问题其实并非是消失的梯度问题或者激增的梯度问题,而是在前面的层上的梯度是来自后面的层上项的乘积。所以神经网络非常不稳定。唯一可能的情况是以上的连续乘积刚好平衡大约等于1,但是这种几率非常小。

所以只要是sigmoid函数的神经网络都会造成梯度更新的时候极其不稳定,产生梯度消失或者激增问题。

那么如何解决这个问题呢?

2.1.1ReLU(Rectified Linear Unit)

解决Vanishing Gradient 的问题,一个解决的方法是将李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN有sigmoid function改为ReLU

下面包含一些选择ReLU的原因:

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

上图中z是输入值,a是输出值,如果a=0的话则可以说明这条network不会影响output,那么可以将这条network拿掉,如下:

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

这会使整个network显得很瘦长。

ReLU还有许多变种:

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

Leaky ReLU(待补充):

Parametric ReLu(待补充):

2.1.2Maxout

Maxout可以看做是在深度学习网络中加入一层**函数层,包含一个参数k.这一层相比ReLU,sigmoid等,其特殊之处在于增加了k个神经元,然后输出**值最大的值。

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

我们常见的隐含层节点输出:

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

而在Maxout网络中,其隐含层节点的输出表达式为:

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

 

其中

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

ReLU是一种特殊的Maxout.

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

 

假设网络第i层有2个神经元x1、x2,第i+1层的神经元个数为1个.原本只有一层参数,将ReLU或sigmoid等**函数替换掉,引入Maxout,将变成两层参数,参数个数增为k倍。

maxout的优点:

1.Maxout的拟合能力非常强,可以拟合任意的凸函数。

2.Maxout具有ReLU的所有优点,线性、不饱和性。

3.同时没有ReLU的一些缺点。如:神经元的死亡。

maxout的缺点:

从上面的**函数公式中可以看出,每个神经元中有两组(w,b)参数,那么参数量就增加了一倍,这就导致了整体参数的数量激增。

与常规**函数不同的是,它是一个可学习的分段线性函数.

然而任何一个凸函数,都可以由线性分段函数进行逼近近似。

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

问题来了,maxout如何train?

maxout选择输出最大的值,可以将maxout看成是linear的,

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

2.2RMCProp

下面介绍一下关于learning rate优化的问题。

首先第一个是local minimum。事实上这并不是一个值得担心的问题,因为出现local minimum的几率是十分小的。而且如果陷入到了local minimum时,那么离global minimum也就十分接近了。

但是有一个值得关注的问题是learning rate真的是越到后面越小吗?我们在前面假定learning rate是越来越小的,所以提出了一种调整learning rate的方法Adagrad

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

但是learning rate的变化也可能是下面这样子的,所以有一种方法RMSprop解决可能会出现的问题。

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

2.3Momentum

一般的gradient descent是下面这个样子的,但是会遇到许多问题

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

所以有人模仿现实世界中物体运动中存在的惯性,提出了momentum

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

下面是常规的gradient descent的示意图

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

下面是momentum的示意图

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

从上面结合RMSProp和Momentum就得到Adam

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

3.training结果好,但是testing结果不好

3.1 Early stopping

推荐博文链接:https://blog.csdn.net/u010402786/article/details/49592239

由于overfitting的影响,train应该在testing data的Loss最小时停止,注意这里的testing data严格来说是一个Validation set,含有label。

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

3.2Dropout

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN

李宏毅机器学习三天速成~~~第十课~~~Tips for Training DNN