李宏毅深度学习_Tips for Training Deep Neural Network

李宏毅深度学习_Tips for Training Deep Neural Network

本文是李宏毅深度学习 (2015)的学习笔记,主要介绍了在训练DNN过程中的不同阶段用到的一些技巧。本文所用到的图示主要来自课堂ppt。

原视频地址:李宏毅深度学习 (2015)

概述

Outline

想要提高深度学习的效率和收获比较好的结果,可以从以上五部分(其实只有四部分,Data Preprocessing没讲,可能涉及到数据归一化,PCA数据压缩等)入手,下面分别从每个部分入手,介绍一些常用于深度学习中的技巧。

一、Activation Function

在浅层BP神经网络中经常使用Sigmoid函数作为激活函数,但是Sigmoid函数在DNN中会存在一些问题:一方面,对Sigmoid函数求导计算量较大;另一方面,隐含层较多的情况下,BP过程中会出现Vanishing Gradient Problem。

Vanishing Gradient Problem

sigmoid

vanishing

我们知道Sigmoid函数的导数最大值小于1(在0处,只有0.2左右),而在BP过程中, δ l = σ ( z l ) ( W l + 1 ) T δ l + 1 ,使得前一层的误差项 δ l 会越来越小,致使求解出的梯度也会也来越小,这样在DNN的训练中,靠前的隐含层参数收敛速度会很慢。

ReLU

ReLU

由上图可以看出,当 z 的值大于0时,激活函数ReLU的导数始终为1,这样BP过程就不会再出现Vanishing Gradient Problem,但ReLU很容易使一些神经元“dead”,可以使用ReLU的一些变体,如:Leaky-ReLU或者Parametric-ReLU解决,或者,在初始化参数时,将bias的值尽量调大,这样 z 的值就不容易小于0了。

ReLU-variant

Maxout

Maxout

激活函数Maxout是在确定网络结构后将每一层的权值分组,选取每一组中 z 的最大值传入下一层,而其他的 z 相当于置0了。类似于ReLU我们可以得到更瘦的网络结构。Maxout没有明确的表达式和导数,它与输入、权值和bias都有关,可以认为是Learnable的Activation Function。

这里写图片描述

Maxout虽然没有显式的导数,但在经过如上图的简化后,整个网络的结构就可变为一个更瘦的全连接网络,可用BP算法求解,且满足 z l = a l 。虽然,这会使得网络只更新了一部分的参数,但对于不同的输入,使用Stochastic Gradient Descent时每次更新的参数也会不完全相同,最终所有的参数都会被更新。

二、Cost Function

这一部分从Cost Function的角度入手,改进DNN。

Softmax

softmax

输出层使用Softmax函数计算,这样使得各项输出统一起来(二分类问题中Softmax函数可看作退化为Sigmoid函数),具体地,使输出层满足:

  • 1 > y i > 0
  • Σ i y i = 1

Cross Entropy

cross entropy

为了配合Softmax我们使用Cross Entropy作为代价函数,此时只需考虑正确分类的那一维的交叉熵作为代价即可,因为其他维的 z 在Softmax中对正确分类的那一维也有影响,使用正确的这一维作为代价已经将其他维度也考虑进去了。

cost1

cost2

求输出层的误差值 δ L 将分成两部分,第一部分是对于正确分类的那一维而言,另一部分是对于其他维度而言。将误差值花化简后可以看出,使用交叉熵和Softmax配合也可以使得输出层计算量减少。

三、Optimization

优化可从两点考虑:一是选择更合适的Learning Rate;二是对局部最优的处理。

1、Learning Rate

采取自适应的Learning Rate,可以使收敛速度加快。

Adagrad

Adagrad

Adagrad对Learning Rate的更新与过去每次迭代参数的梯度有关,可以看出Leaerning Rate是一直在减小的,这是符合直觉的。

Adagrad1

Adagrad2

事实上,Adagrad表现更优异的原因是Learning Rate不仅与一阶导数有关,还与二阶导数有关,Adagrad公式中用一阶导数平方和的平方根来近似二阶导数(这个值越大说明二阶导数也越大,应该适当减小Learning Rate),使得Learning Rate更为合理,适应性更强。

2、Momentum

Physical

如上图所示,在Gradient Descent中加入Momentum(动量、动力、冲力),有时可以使Cost Function冲出Local Minimum。

Momentum

加入Momentum后,当前步的移动方向会与当前负梯度和上一步的移动方向有关。因此,之前每一步的移动都会对当前步的移动方向造成影响,相当于有一个惯性。

四、Generalization

为了让一个深度学习的模型表现更好,一个通用的方法就是收集更多的训练数据,但这样做也面临一个问题就是过拟合,模型往往在训练集上效果很好在测试集表现没那么优异,这一部分介绍了三个常用的方法来解决这个问题。

1、Early Stopping

earlystopping

从图中可以看出,随着模型参数的增多,对训练集的拟合程度越来越高,然而对于测试集,拟合程度一般来说会先升后降,因此我们要把模型的参数控制在一个合适的范围,以避免过拟合现象,但没有确切的方法来确定这个范围。

2、Weight Decay

weightdecay1

weightdecay2

代价函数中加入正则项后,直观地理解为,要使新的Cost Function值越来越小,不仅要让老的Cost Function值减小,还要使正则项值减小,这要就会让权值尽量变小。这样做的思想也是尽量减少模型参数,权值变小,对网络影响就会小,一个特例,如果权值减小到0,那么相当于模型少了一个参数。

3、Dropout

dropout1

dropout2

Dropout有点类似于Boost方法的思想,就是利用相对简单的几个模型组合起来,构成一个复杂的效果更好的模型。在对测试集进行检验时,使用的是几个简单模型的线性组合。在应用Dropout时,有以下几点建议:

dropout3

总结

至此,在深度学习中几种常用的技巧已经介绍完了,大家在训练自己模型的时候要灵活运用,以提高训练速度和精度。

猜你喜欢

转载自blog.csdn.net/qq_25011449/article/details/80423575