深度学习技巧

深度学习技巧

深度神经网络(DNN)损失函数和激励函数的选择

MSE 均方差损失函数+Sigmoid 激活函数

Sigmoid激活函数的表达式为:在这里插入图片描述

Sigmoid激活函数的图像为:在这里插入图片描述

输出层δL的梯度情况:在这里插入图片描述

图上可以看出,对于Sigmoid,当z的取值越来越大后,函数曲线变得越来越平缓,意味着此时的导数σ′(z)σ′(z)也越来越小。同样的,当z的取值越来越小时,也有这个问题。仅仅在z取值为0附近时,导数σ′(z)的取值较大。Sigmoid的这个曲线意味着在大多数时候,我们的梯度变化值很小,导致我们的 W,b 更新到极值的速度较慢,也就是我们的算法收敛速度较慢。

Cross Entropy 交叉熵损失函数+Sigmoid激活函数

二分类时每个样本的交叉熵损失函数的形式:在这里插入图片描述

输出层δL的梯度情况:在这里插入图片描述

可以看出,使用交叉熵,得到的的δl梯度表达式没有了σ′(z),梯度为预测值和真实值的差距,这样求得的Wl,bl的地图也不包含σ′(z),因此避免了反向传播收敛速度慢的问题。通常情况下,如果我们使用了sigmoid激活函数,交叉熵损失函数肯定比均方差损失函数好用。

Logarithmic Loss 对数似然损失函数 +Sigmoid激活函数

假设我们有一个三个类别的分类问题,这样我们的DNN输出层应该有三个神经元,假设第一个神经元对应类别一,第二个对应类别二,第三个对应类别三,这样我们期望的输出应该是(1,0,0),(0,1,0)和(0,0,1)这三种。即样本真实类别对应的神经元输出应该无限接近或者等于1,而非该样本真实输出对应的神经元的输出应该无限接近或者等于0。或者说,我们希望输出层的神经元对应的输出是若干个概率值,这若干个概率值即我们DNN模型对于输入值对于各类别的输出预测,同时为满足概率模型,这若干个概率值之和应该等于1。

DNN分类模型要求是输出层神经元输出的值在0到1之间,同时所有输出值之和为1。很明显,现有的普通DNN是无法满足这个要求的。但是我们只需要对现有的全连接DNN稍作改良,即可用于解决分类问题。在现有的DNN模型中,我们可以将输出层第i个神经元的激活函数定义为如下形式:

在这里插入图片描述

其中,nL是输出层第L层的神经元个数,或者说我们的分类问题的类别数。这个方法很简洁漂亮,仅仅只需要将输出层的激活函数从Sigmoid之类的函数转变为上式的激活函数即可。上式这个激活函数就是我们的softmax激活函数。它在分类问题中有广泛的应用。将DNN用于分类问题,在输出层用softmax激活函数也是最常见的了。

下面这个例子清晰的描述了softmax激活函数在前向传播算法时的使用。假设我们的输出层为三个神经元,而未激活的输出为3,1和-3,我们求出各自的指数表达式为:20,2.7和0.05,我们的归一化因子即为22.75,这样我们就求出了三个类别的概率输出分布为0.88,0.12和0。

在这里插入图片描述

对于用于分类的softmax激活函数,对应的损失函数一般都是用对数似然函数,即:在这里插入图片描述

其中yk的取值为0或者1,如果某一训练样本的输出为第i类。则yi=1,其余的j≠i都有yj=0。由于每个样本只属于一个类别,所以这个对数似然函数可以简化为:

在这里插入图片描述

可见损失函数只和真实类别对应的输出有关,这样假设真实类别是第i类,对于真实类别第i类,他对应的第j个w链接wLij对应的梯度计算为:

在这里插入图片描述

同样的可以得到bLi的梯度表达式为:

在这里插入图片描述

可见,梯度计算很简洁。举个例子,假如我们对于第2类的训练样本,通过前向算法计算的未激活输出为(1,5,3),则我们得到softmax激活后的概率输出为:(0.015,0.866,0.117)。由于我们的类别是第二类,则反向传播的梯度应该为:(0.015,0.866-1,0.117)。

梯度爆炸梯度消失与ReLU激活函数

梯度爆炸和梯度消失定义

在反向传播的算法过程中,由于我们使用了是矩阵求导的链式法则,有一大串连乘,如果连乘的数字在每层都是小于1的,则梯度越往前乘越小,导致梯度消失,而如果连乘的数字在每层都是大于1的,则梯度越往前乘越大,导致梯度爆炸。随着反向传播算法的进行,我们的梯度值随着层数越来越小,甚至接近越0,导致梯度几乎消失,进而导致前面的隐藏层的W,b参数随着迭代的进行,几乎没有大的改变,更谈不上收敛了。

对于梯度爆炸,则一般可以通过调整我们DNN模型中的初始化参数得以解决。

对于无法完美解决的梯度消失问题,目前有很多研究,一个可能部分解决梯度消失问题的办法是使用ReLU(Rectified Linear Unit)激活函数,ReLU在卷积神经网络CNN中得到了广泛的应用,在CNN中梯度消失似乎不再是问题。表达式为:在这里插入图片描述
 也就是说大于等于0则不变,小于0则激活后为0。

其它激活函数

tanh

tanh:这个是sigmoid的变种,表达式为:在这里插入图片描述

tanh激活函数和sigmoid激活函数的关系为:在这里插入图片描述

tanh和sigmoid对比主要的特点是它的输出落在了[-1,1],这样输出可以进行标准化。同时tanh的曲线在较大时变得平坦的幅度没有sigmoid那么大,这样求梯度变化值有一些优势。当然,要说tanh一定比sigmoid好倒不一定,还是要具体问题具体分析。

softplus

sigmoid函数的原函数,表达式为:在这里插入图片描述

它的导数就是sigmoid函数。softplus的函数图像和ReLU有些类似。它出现的比ReLU早,可以视为ReLU的鼻祖。

在这里插入图片描述

PReLU

ReLU的变种,特点是如果未激活值小于0,不是简单粗暴的直接变为0,而是进行一定幅度的缩小。如下图。

在这里插入图片描述

损失函数与激活函数总结

1)如果使用sigmoid激活函数,则交叉熵损失函数一般肯定比均方差损失函数好。

2)如果是DNN用于分类,则一般在输出层使用softmax激活函数和对数似然损失函数。

3)ReLU激活函数对梯度消失问题有一定程度的解决,尤其是在CNN模型中。

Regularization(正则化)

L1正则化和L2正则化原理类似,而DNN的L2正则化通常的做法是只针对与线性系数矩阵W,而不针对偏倚系数b。

假如我们的每个样本的损失函数是均方差损失函数,则所有的m个样本的损失函数为:在这里插入图片描述

则加上了L2正则化后的损失函数是:在这里插入图片描述

其中,λ即我们的正则化超参数,实际使用时需要调参。而w为所有权重矩阵W的所有列向量。

如果使用上式的损失函数,进行反向传播算法时,流程和没有正则化的反向传播算法完全一样,区别仅仅在于进行梯度下降法时,W的更新公式。

不加正则化W的梯度下降更新公式为:在这里插入图片描述

加入L2正则化以后,迭代更新公式变成:在这里插入图片描述

注意到上式中的梯度计算中1/m忽略了,因为α是常数,而除以m也是常数,所以等同于用了新常数α来代替α/m。进而简化表达式,但是不影响损失算法。

集成学习(ensemble)正则化

常用的机器学习Bagging算法中,随机森林是最流行的。它 通过随机采样构建若干个相互独立的弱决策树学习器,最后采用加权平均法或者投票法决定集成的输出。在DNN中,我们一样使用Bagging的思路。不过和随机森林不同的是,我们这里不是若干个决策树,而是若干个DNN的网络。

首先我们要对原始的m个训练样本进行有放回随机采样,构建N组m个样本的数据集,然后分别用这N组数据集去训练我们的DNN。即采用我们的前向传播算法和反向传播算法得到N个DNN模型的W,bW,b参数组合,最后对N个DNN模型的输出用加权平均法或者投票法决定最终输出。

不过用集成学习Bagging的方法有一个问题,就是我们的DNN模型本来就比较复杂,参数很多。现在又变成了N个DNN模型,这样参数又增加了N倍,从而导致训练这样的网络要花更加多的时间和空间。因此一般N的个数不能太多,比如5-10个就可以了。

Dropout正则化(特殊的集成学习)

Dropout指的是在用前向传播算法和反向传播算法训练DNN模型时,一批数据迭代时,随机的从全连接DNN网络中去掉一部分隐藏层的神经元。在对训练集中的一批数据进行训练时,我们随机去掉一部分隐藏层的神经元,并用去掉隐藏层的神经元的网络来拟合我们的一批训练数据。然后用这个去掉隐藏层的神经元的网络来进行一轮迭代,更新所有的W,b。这就是所谓的dropout。

当然,dropout并不意味着这些神经元永远的消失了。在下一批数据迭代前,我们会把DNN模型恢复成最初的全连接模型,然后再用随机的方法去掉部分隐藏层的神经元,接着去迭代更新W,b。当然,这次用随机的方法去掉部分隐藏层后的残缺DNN网络和上次的残缺DNN网络并不相同。

总结下dropout的方法: 每轮梯度下降迭代时,它需要将训练数据分成若干批,然后分批进行迭代,每批数据迭代时,需要将原始的DNN模型随机去掉部分隐藏层的神经元,用残缺的DNN模型来迭代更新W,b。每批数据迭代更新完毕后,要将残缺的DNN模型恢复成原始的DNN模型。

使用基于dropout的正则化比基于bagging的正则化简单,这显而易见,由于dropout会将原始数据分批迭代,因此原始数据集最好较大,否则模型可能会欠拟合。

增强数据集正则化

对于我们传统的机器学习分类回归方法,增强数据集还是很难的。你无中生有出一组特征输入,却很难知道对应的特征输出是什么。但是对于DNN擅长的领域,比如图像识别,语音识别等则是有办法的。以图像识别领域为例,对于原始的数据集中的图像,我们可以将原始图像稍微的平移或者旋转一点点,则得到了一个新的图像。虽然这是一个新的图像,即样本的特征是新的,但是我们知道对应的特征输出和之前未平移旋转的图像是一样的。

我们现在得到了一个新的训练样本,输入特征和之前的训练样本不同,但是特征输出是一样的,用类似的思路,我们可以对原始的数据集进行增强,进而得到增强DNN模型的泛化能力的目的。

其它正则化

Noise Robustness, Adversarial Training,Early Stopping

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦码城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值