avatar

Catalog
Tips_for_training_DNN

训练误差的来源

where does the error come from?

Error comes from bias and variance.

1581745412(1)

bias variance 常见误差
复杂模型 较小 较大 overfiting
简单模型 较大 较小 underfiting

Tips for training DNN

啥也不说,先看张图

1581752334(1)


New activation function

对激活函数进行创新可以改进模型

question:为什么需要激活函数?

如果没有激活函数,整个网络就是线性的,线性的缺点,在于线性函数的组合仍然是线性函数,这意味着无论我们堆多少层网络,如果这些层都使用线性激活函数,那么这些层最终等效于一层。(可以自己画一个简单的全连接网络计算一下)


常见激活函数

激活函数


Sigmoid微信截图_20200216012819

生物神经元似乎是用 Sigmoid(S 型)激活函数活动的,因此研究人员在很长一段时间内坚持 Sigmoid 函数。但事实证明,Relu 激活函数通常在 ANN 工作得更好。这是生物研究误导的例子之一。

当神经网络有很多层,每个隐藏层都使用Sigmoid函数作为激励函数时,很容易引起梯度消失的问题

我们知道Sigmoid函数有一个缺点:当x较大或较小时,导数接近0;并且Sigmoid函数导数的最大值是0.25

我们将问题简单化来说明梯度消失问题,假设输入只有一个特征,没有偏置单元,每层只有一个神经元

20180807163139589

则代价函数对w的导数可以表示为:

2018080717114969

如果我们使用标准方法来初始化网络中的权重,那么会使用一个均值为0标准差为1的高斯分布。因此所有的权重通常会满足|wj|<1,而s‘是小于0.25的值,那么当神经网络特别深的时候,梯度呈指数级衰减,导数在每一层至少会被压缩为原来的1/4,当z值绝对值特别大时,导数趋于0,正是因为这两个原因,从输出层不断向输入层反向传播训练时,导数很容易逐渐变为0,使得权重和偏差参数无法被更新,导致神经网络无法被优化,训练永远不会收敛到良好的解决方案。 这被称为梯度消失问题。

当我们将w初始化为一个较大的值时,例如>10的值,那么从输出层到输入层每一层都会有一个s‘(zn)×wn的倍增,当s‘(zn)为0.25时,s‘(zn)×wn>2.5,同梯度消失类似,当神经网络很深时,梯度呈指数级增长,最后到输入时,梯度将会非常大,我们会得到一个非常大的权重更新,这就是梯度爆炸的问题,在循环神经网络中最为常见。

原文链接:https://blog.csdn.net/junjun150013652/article/details/81274958


ReLU

QQ截图20200216215330

QQ截图20200216215421

ReLU可以解决Sigmoid函数的梯度消失和梯度爆炸问题。


question:ReLU化简后不就是线性激活函数吗?

关于这个问题,可以有以下解释:

1、首先什么是线性的网络,如果把线性网络看成一个大的矩阵M。那么输入样本A和B,则会经过同样的线性变换MA,MB(这里A和B经历的线性变换矩阵M是一样的)。

2、的确对于单一的样本A,经过由relu激活函数所构成神经网络,其过程确实可以等价是经过了一个线性变换M1,但是对于样本B,在经过同样的网络时,由于每个神经元是否激活(0或者Wx+b)与样本A经过时情形不同了(不同样本),因此B所经历的线性变换M2并不等于M1。因此,relu构成的神经网络虽然对每个样本都是线性变换,但是不同样本之间经历的线性变换M并不一样,所以整个样本空间在经过relu构成的网络时其实是经历了非线性变换的。

3、还有一种解释就是,不同样本的同一个feature,在通过relu构成的神经网络时,流经的路径不一样(relu激活值为0,则堵塞;激活值为本身,则通过),因此最终的输出空间其实是输入空间的非线性变换得来的。

4、更极端的,不管是tanh还是sigmoid,你都可以把它们近似看成是分段线性的函数(很多段),但依然能够有非线性表达能力;relu虽然只有两段,但同样也是非线性激活函数,道理与之是一样的。

链接:https://www.jianshu.com/p/66cb257ec37e


Leaky ReLU

QQ截图20200216221007


Maxout

QQ截图20200216221200

QQ截图20200216221556

QQ截图20200216221608


question:Maxout激活函数如何求导?

根据Maxout将网络化简后,去掉那些不参与正向传播过程的神经单元,再进行求导。

同理CNN中的pooling层也这样求导。


Adaptive Learning Rate

At the beginning,we are far from the destination,so we use large learning rate.

After several epochs,we are close to the destination,so we reduce the learning rate.

1/t decay

QQ截图20200216225204


Adagrad

QQ截图20200216224137

依然符合随着训练次数增加,learning rate减小。


question:当某一次grad很大时,学习率反而更小了,这难道不和我们的规律矛盾吗?

确实有这样反直觉的疑惑,一种合理的解释是:root mean square of the previous derivatives of the parameter w 其实代表了w的二次微分,即陡峭程度,用w的一次微分除以二次微分,才是w应该更新的最佳步长。


RMSProp

error surface can be very complex when trainning NN,所以learning rate应该具备快速变化的能力。

QQ截图20200216231042

QQ截图20200216231202

可以参照计算机网络RTT更新公式。

Momentum

在网络训练中,loss可能收敛在plateau,saddle point, local minima.可以参照物理学中的知识,加一个momentum。

QQ截图20200216231341

不加momentum

QQ截图20200216231915

加momentum

QQ截图20200216231940


Adam

RMSProb+Momentum

QQ截图20200216232815


接下来的方法都是处理过拟合的方法

Early Stopping

没什么卵用


Regularization

L2正则化

QQ截图20200216233114

使用L2范数做正则化,每次会使Weight小一点,所以这也叫做weight decay。

正则化这个tip相较于其他tip对网络的优化程度比较小。解释如下:

我们在训练神经网络时,通常对w初始化一个比较接近0的数,然后通过一次次更新,w距离0越来越远。而正则化所做的事情,其实就是每次使w离0近一点,这难道不就相当于减少训练次数吗?

L1正则化

QQ截图20200216234835

sgn()为正负1,当w为正,则结果-1,w为负,则结果加1。

L1正则化和L2正则化对比:

L1 learn出来的值有的很大,有的很小,分布很散,因为他每次都是加减固定的值。而L2 learn出来的值都偏小,因为他是成比例缩小的。

Dropout

QQ截图20200216235500

QQ截图20200216235743

Why the weigth should multiply (1-p) when testing?

来一个直观的解释,假设现在有100个1,dropout rate 是20%,那么只有80个1参与运算,sum之后值为80,当测试时,100个1全部参与运算,所以每个1都要乘以80%,再sum,才能得到80。


Dropout is a kind of ensemble

QQ截图20200217000615

QQ截图20200217000655

Author: realLiuSir
Link: http://yoursite.com/2020/02/22/Tips_for_training_DNN/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶