深度学习5.2——Tips for Deep Learning

目录

一、深度学习的方法

二、训练阶段的优化策略

三、新的激活函数

1、ReLU(Rectified Linear Unit )

2、Leaky Relu和Parametric ReLU

3、MaxOUT

四、自适应的学习率

1、Adagrad

2、RMSProp

3、Momentum

五、测试阶段的优化策略

1、early stopping

2、regularization正则化

3、dropout


一、深度学习的方法

首先,我们在之前提到过深度学习的基本步骤:

经过这三个步骤训练出一个神经网络,如果该神经网络无法在训练集上得到好的结果,那么需要重新返回到这三个步骤,如果可以得到好的结果,那么观察该神经网络能否在测试集上得到好的结果,如果不行,那么称之为过度拟合,需要回到上述的三个基本步骤,如果可以,那么结束整个过程。

二、训练阶段的优化策略

深度学习的深度并不代表模型效果更好:

随着模型层数的增加, 模型的准确率越来越低。但这并不是因为模型过拟合了,上图只意味着模型在训练的时候都没有达到好的效果。

出现这种情况的原因是参数变化对Cost的变化减小。即在靠近模型输入层的梯度比较小,参数更新较慢;靠近输出层的梯度较大,参数更新较快。因此,在模型训练的时候,当模型靠近输出层的参数训练得差不多的时候,靠近输入层的参数还是混乱的:

如果激活函数使用的是sigmoid函数,在经过sigmoid函数之后,参数的变化会被削减。因此,当神经网络模型越深,削减的次数越多,参数变化对模型的loss影响越小。因此,越靠近输入层的梯度是越小的:

接下来,我们探讨一下解决这个问题的方法。 

三、新的激活函数

1、ReLU(Rectified Linear Unit )

其优点在于: 线性,计算更快;生物学理由(使得一部分的神经元不被激活);可以解决梯度消失的问题。

因为ReLU输出的值就等于输入的值(输入值大于0的时候),另一部分是0(输入值小于0的时候)。因此,输入在通过ReLU之后,没有进行压缩,多大值就是多少值:

2、Leaky Relu和Parametric ReLU

Parametric ReLU是Leaky Relu的变种,唯一的不同就是,当 z 小于0时,Leaky Relu的输出 =0.01 ,但是Parametric ReLU =  模型自己学到的:

3、MaxOUT

基本思想:输入层输入x_1  和 x_2 之后,加权再加上 b 之后,得到5、7、-1、1;然后人工设定规则,将5、7、-1、1进行分组,每组中取max值,得到7、1;以此类推......:

假设下图中红色框框的部分是更大的那一项:

那么就意味着不带红色框的项 z 就不被计算在模型中,因此,模型的训练可以简化为下图:

四、自适应的学习率

1、Adagrad

Adagrad表示的是,每一次参数迭代,不只是减去梯度,而是要先除以过去梯度和的平方开根号:

w^{t+1}\leftarrow w^t-\frac{\eta }{\sqrt{\sum_{i=0}^{t}(g^i)^2}}g^t

 但是,在实际的深度学习任务中,我们需要的是在不同的区域有也不同的学习率,而不是在同一个方向上学习率是差不多的:

2、RMSProp

w^1\leftarrow w^0-\frac{\eta }{\sigma ^0}g^0\ \sigma ^0=g^0\\ w^2\leftarrow w^1-\frac{\eta }{\sigma ^1}g^1\ \sigma ^1=\sqrt{\alpha (\sigma ^0)^2+(1-\alpha )(g^1)^2}\\ w^3\leftarrow w^2-\frac{\eta }{\sigma ^2}g^2\ \sigma ^2=\sqrt{\alpha (\sigma ^1)^2+(1-\alpha )(g^2)^2}\\ \begin{matrix} .\\.\\. \end{matrix}\\ w^{t+1}\leftarrow w^t-\frac{\eta }{\sigma ^t}g^t\ \sigma ^t=\sqrt{\alpha (\sigma ^{t-1})^2+(1-\alpha )(g^t)^2}\\

相比而言,Adagrad只是除上之前的梯度的平方的和。差别在于多了一个来调整学习率。若较小,则1- 较大,意味着你倾向于使得新的梯度对参数的影响更大一些,若较大,则意味着倾向于旧的梯度对参数的影响更大:

w^{t+1}\leftarrow w^t-\frac{\eta }{\sqrt{\sum_{i=0}^{t}(g^i)^2}}g^t

3、Momentum

深度学习的问题在于,难以找到真正的最优解,如下图,可能会在斜率较低的时候更新缓慢;可能会停留在鞍点(saddle point);更有可能会陷入局部最优解(local minima):

在梯度下降的基础上,加上Momentum的概念。简单来说,就是结合梯度和前一个步骤移动的方向(增加了惯性的思想)。

原来的梯度下降:

 加上Momentum后的梯度下降:

五、测试阶段的优化策略

1、early stopping

模型不应该在training error最小的时候停止,而是应该在training error 和 testing error都最小,取得平衡的时候停止迭代:

2、regularization正则化

Loss Function上增加一个正则项,使得模型找到一组参数使得损失函数最小,同时参数是接近于0 的:

使用增加正则项的损失函数进行参数更新后:

 在深度学习中,正则化对模型的作用,会比对SVM更小一些。

L1正则:

\left \| \Theta \right \|_1=|\omega _1|+|\omega _2|+...

L2正则:

\left \| \Theta \right \|_2=(\omega _1)^2+(\omega _2)^2+...

一般来说,使用L1正则训练出来的参数,会存在一部分参数很小,但是一部分参数依然很大的情况;使用L2训练出来的参数,一般都会比较小。 

3、dropout

我们知道,每一次迭代,神经网络模型的结构是不一样的。

假设在训练的时候,dropout rate=p,那么在测试的时候,需要将学习到的权重乘上(1-p)

假设我们训练的时候,每次都丢失一般的神经元。但是在测试的时候,使用的参数是全部神经元的参数,因此,就要在原有的参数上×(1-p)。

实际上,dropout是一种ensemble的方法。因为每一次训练,使用一个batch的样本进行神经网络的训练,dropout之后,每一次都会有不同的神经元被丢弃,因此每次迭代的神经网络结构是不同的,等同于我们每次都训练一个不同结构的模型。因此,可以将dropout理解成是ensemble的一种方法:

但是在测试的时候,我们没有办法在这么多的不同的模型上进行y的预测再综合,因为太复杂啊,所以是将所有神经元的参数都综合起来,得到完整的模型结构,再进行预测: 

左边是理想中,预测的时候,不同dropout得到不同模型结构,进行预测,得到不同的y,然后进行综合,但这种方法复杂度太高。

右边是将不同的神经元综合后,在原有的参数上乘上(1-p),一次性预测得到y。

经验证,左边和右边的方法效果是相同的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值