1.损失函数和激活函数的选择
1.1 均方差损失函数+sigmoid激活函数
均方差损失函数:
L
(
y
,
f
(
x
)
)
=
(
y
−
f
(
x
)
)
2
L(y,f(x))=(y-f(x))^2
L(y,f(x))=(y−f(x))2sigmoid激活函数:
σ
(
z
)
=
1
1
+
e
−
z
\sigma(z)=\frac{1}{1+e^{-z}}
σ(z)=1+e−z1sigmoid激活函数的性质:
σ
′
(
z
)
=
σ
(
z
)
(
1
−
σ
(
z
)
)
\sigma^{'}(z)=\sigma(z)(1-\sigma(z))
σ′(z)=σ(z)(1−σ(z))假设输出是连续可导的值
算法收敛速度慢
1.2 交叉熵损失函数+sigmoid激活函数
交叉熵损失函数:
L
(
y
,
P
(
y
∣
x
)
)
=
−
1
m
∑
i
=
1
m
[
y
i
l
o
g
p
(
x
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
p
(
x
i
)
)
]
L(y,P(y|x))=-\frac{1}{m}\sum_{i=1}^m[y_ilogp(x_i)+(1-y_i)log(1-p(x_i))]
L(y,P(y∣x))=−m1i=1∑m[yilogp(xi)+(1−yi)log(1−p(xi))]假设输出是连续可导的值
交叉熵损失函数代替均方差损失函数,改进DNN算法收敛速度
1.3 对数似然损失函数+softmax激活函数
对数似然损失函数:
L
(
y
,
P
(
y
∣
x
)
)
=
−
l
o
g
P
(
y
∣
x
)
=
−
1
m
∑
i
=
1
M
∑
j
=
1
N
y
i
j
l
o
g
(
p
i
j
)
L(y,P(y|x))=-logP(y|x)=-\frac{1}{m}\sum_{i=1}^M\sum_{j=1}^{N}y_{ij}log(p_{ij})
L(y,P(y∣x))=−logP(y∣x)=−m1i=1∑Mj=1∑Nyijlog(pij)其中,
y
i
j
y_{ij}
yij 是一个二值指标,表示类别
j
j
j 是否是输入实例
x
i
x_i
xi 的真实类别。
p
i
j
p_{ij}
pij 为分类器预测输入实例
x
i
x_i
xi 属于类别
j
j
j 的概率。
softmax激活函数: S i = e i ∑ j e j S_i=\frac{e^{i}}{\sum_je^{j}} Si=∑jejei
处理多分类问题
1.4 梯度爆炸梯度消失+ReLU激活函数
在反向传播的过程中,由于我们使用矩阵求导的链式法则,有一连串连乘。
- 如果连乘的数字都是小于1,则梯度越来越小,直到消失
解决:调整初始化参数 - 如果连乘的数字都是大于1,则梯度越来越大,导致爆炸
解决:使用ReLU激活函数 R e L U ( x ) = m a x ( 0 , x ) ReLU(x)=max(0,x) ReLU(x)=max(0,x)
2.DNN前向传播
DNN的前向传播算法就是利用若干个权重系数矩阵W,偏倚向量b和输入向量x进行一系列线性运算和激活运算,从输入层开始,一层层向后计算,直到输出层,得到输出结果。
3.DNN反向传播
DNN的反向传播算法就是对DNN的损失函数用梯度下降法进行迭代优化求极小值的过程。
4. DNN算法流程
5.DNN的正则化
5.1. L1,L2正则化
范数规则化的两个作用:
- 保证模型尽可能的简单,避免过拟合。
参数值大小和模型复杂度是成正比的。参数过多会导致模型复杂度上升,越复杂的模型,越是会尝试对所有的样本进行拟合,甚至包括一些异常样本点。 - 约束模型特性,加入一些先验知识,例如稀疏、低秩等。
L0范数
L0是指向量中非0的元素的个数。
如果我们用L0范数来规则化一个参数矩阵W的话,就是希望W的大部分元素都是0。即让参数W是稀疏的。稀疏的好处:
- 简化模型,避免过拟合;
- 参数变少可以提高可解释性
但是,L0范数的最优化问题是一个NP hard问题,理论证明,L1范数是L0范数的最优凸近似,因此通常使用L1范数来代替。
L1范数
L1范数是指向量中各个元素绝对值之和。
L1正则化之所以可以防止过拟合,是因为它能产生等于0的权值,即产生稀疏的效果。参数值大小和模型复杂度是成正比的。因此复杂的模型,其L1范数就大,最终导致损失函数就大,说明这个模型就不够好。
L2范数
L2范数即欧式距离。
L2正则化之所以可以防止过拟合,是因为它是让各个参数接近于0。越小的参数说明模型越简单,越简单的模型越不容易产生过拟合现象。
L1稀疏、L2平滑
-
假定 w i > 0 w_i>0 wi>0,L1的权值每次更新都固定减少一个特定的值,那么经过若干次迭代之后,权值就有可能减少到0。 w i = w i − η w_i=w_i-\eta wi=wi−η。( w i < 0 时 则 是 增 加 到 0 w_i<0时则是增加到0 wi<0时则是增加到0)。
-
L2的权值更新公式为 w i = w i − η ∗ w i wi= wi- η * w_i wi=wi−η∗wi,假设 η = 0.5 \eta=0.5 η=0.5,也就是说权值每次都等于上一次的1/2,那么,虽然权值不断变小,但是因为每次都等于上一次的一半,所以很快会收敛到较小的值但不为0。
因此
- L1能产生等于0的权值,即产生稀疏的效果。
- L2能迅速得到比较小的权值,但是难以收敛到0,即产生平滑的效果 。
5.2. 集成学习
类似随机森林,用若干个DNN网络
5.3. dropout正则化
5.3.1 dropout
在训练模型时,dropout通过随机去掉一些神经元以获得不同的架构,防止参数过分依赖训练数据,增加参数对数据集的泛化能力。
Dropout相当于模型平均、模型组合。对于随机梯度下降sag来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。不同的网络在不同的情况下过拟合,但是共用一个损失函数,相当于同时进行了优化,取了平均。
5.3.2 target dropout
来源
19年2月新提出来的target dropout
对比
- dropout通过随机删除一些神经元或权重以获得不同的「架构」。
- target dropout将剪枝隐性地构建到 Dropout 中,在训练中「随机」删除很弱的连接,或不重要的神经元,从而构建更「重要」的架构
思想
根据一些快速逼近权重重要性的度量对权重或神经元进行排序,并将 Dropout 应用于那些重要性较低的元素。与正则化 Dropout 观察结果相似,作者表示该方法能鼓励神经网络学习更重要的权重或神经元。换而言之,神经网络学习到了如何对剪枝策略保持足够的鲁棒性。
优点
- 令神经网络的收敛对剪枝极其鲁棒。
- 非常容易实现,使用主流框架只需要修改两行代码。
- 该网络非常明确,我们所需要的稀疏性程度都可以自行设定。
5.4. 数据增强
增加训练数据
交叉验证法
- 用于评估模型的预测性能,尤其是训练好的模型在新数据上的表现,可以在一定程度上减小过拟合。
- 从有限的数据中获取尽可能多的有效信息。
6、梯度下降法
6.1. 批量梯度下降法BGD
批量梯度下降法是梯度下降法最原始的形式,它的具体思路是在更新每一参数时都使用所有的样本来进行更新。
优点:全局最优解;易于并行实现;
缺点:当样本数目很多时,训练过程会很慢。
从迭代的次数上来看,BGD迭代的次数相对较少。
6.2. 批量梯度下降法SGD
由于批量梯度下降法在更新每一个参数时,都需要所有的训练样本,所以训练过程会随着样本数量的加大而变得异常的缓慢。随机梯度下降法(Stochastic Gradient Descent,简称SGD)正是为了解决批量梯度下降法这一弊端而提出的。
随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。
但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。
优点:训练速度快;
缺点:准确度下降,并不是全局最优;不易于并行实现。
从迭代的次数上来看,SGD迭代的次数较多,在解空间的搜索过程看起来很盲目。
6.3. 小批量梯度下降法MBGD
小批量梯度下降法(Mini-batch Gradient Descent,简称MBGD)在两种方法的性能之间取得一个折衷,在每次更新参数时使用b个样本(b一般为10)
参考教程
- 深度神经网络(DNN)反向传播算法(BP) - 刘建平Pinard - 博客园
https://www.cnblogs.com/pinard/p/6422831.html - [Machine Learning] 梯度下降法的三种形式BGD、SGD以及MBGD - Poll的笔记 - 博客园
https://www.cnblogs.com/maybe2030/p/5089753.html