系统总结深度学习的主要的损失函数和优化器
本次博客是深度学习的作业:系统总结了深度学习中监督学习的主要的损失函数,并指出各自的适应条件和优缺点。觉得很有意义,就记录下来供大家参考。
文章目录
- 损失函数
- 损失函数的作用
- 损失函数的分类
- 基于距离度量的损失函数
- 基于平方损失的演化损失函数
- 基于绝对损失的演化损失函数
- 基于0-1损失的演化损失函数
- 基于铰链损失的演化损失函数
- 基于中心损失的演化损失函数
- 基于余弦损失的演化损失函数
- 基于概率分布度量的损失函数
- 基于对数损失的演化损失函数
- 基于KL散度的演化损失函数
- 基于交叉熵损失的演化损失函数
- 基于softmax损失的演化损失函数
- 其他损失函数
- 优化器
- 优化器的作用
- 优化器的分类
- 深度学习中的优化算法
- 梯度下降的优化算法
- 动量优化算法
- 自适应学习率优化算法
- 其他优化器(暂不知)
- 优化效果
- 损失函数参考文献
- 优化器参考文献1(主要就是 **Michael不想说话** 的内容,我只是表格化下)
- 优化器参考文献2
损失函数
损失函数的作用
在监督学习中,损失函数用于评估单个样本经模型计算后输出的预测值与真实值的不一致程度。它是一个非负实值函数,主要特点为:恒非负;误差越小,函数值越小;收敛快。损失函数的值直接影响着模型的预测性能,损失函数值越小,模型的预测性能就越好。另外,作为样本间相似度度量标准,损失函数用来刻画样本真实值与预测值之间的关系,如果损失值小于某一值,则认为样本是相似的,否则认为是不相似的。
损失函数的分类
本文依据损失函数度量方式的不同,将主要损失函数分为基于距离度量的损失函数和基于概率分布度量的损失函数。
基于距离度量的损失函数
基于距离度量的损失函数通常将输入数据映射到基于距离度量的特征空间上,如欧氏空间、汉明空间等,将映射后的样本看作空间上的点,采用合适的损失函数度量特征空间上样本真实值和模型预测值之间的距离。特征空间上两个点的距离越小,模型的预测性能越好。
函数名 | 标准形式 | 优点 | 缺点 | 应用 | 演变的损失函数 | 适用于 | 不适于 | 实际应用 | 搭配的优化方法 |
---|---|---|---|---|---|---|---|---|---|
平方损失 (squared loss)函数 | ( Y − f ( x ) ) 2 (Y-f(x))^{2} (Y−f(x))2 | 计算方便、逻辑清晰、评估误差较准确以及可求得全局最优解。 | 在回归问题中,平方损失用于度量样本点到回归曲线的距离,通过最小化平方损失使样本点可以更好地拟合回归曲线。在机器学习的经典算法(反向传播算法、循环神经网络、流形学习、随机森林和图神经网络)中,常选用平方损失及其演化形式作为模型对误检测样本进行惩罚的依据。 | 基于平方损失演化的损失函数有加权平方损失函数、和方误差(sum squared error,SSE)函数、均方误差(mean squared error,MSE)函数、L2损失(L2 loss)函数、均方根误差(root mean squared error,RMSE)函数、 x 2 x^{2} x2检验(chi-square test)函数、triple损失函数和对比损失(contrastive loss)函数 | 回归问题;分类或标注问题;实现离散问题的预测 | 因为它对离群点比较敏感,所以它不适合离群点较多的数据集。 | 实际应用中,由于模型泛化问题等原因,一般不常使用平方损失函数的标准形式,而更多使用它的演化的损失函数 | 由于平方损失函数是可微的凸函数,常与之搭配的优化方法为随机梯度下降或牛顿法。 | |
绝对损失(absolute loss)函数 | | Y − f ( x ) | |Y-f(x)| |Y−f(x)| | 是最常见的一种损失函数,它不仅形式简单,而且能很好地表达真实值和预测值之间的距离;对离群点有很好的鲁棒性。 | 在残差为零处不可导;更新的梯度始终相同,也就是说,即使很小的损失值,梯度也很大,这样不利于模型的收敛。针对它的收敛问题, 一般的解决办法是在优化算法中使用变化的学习率,在损失接近最小值时降低学习率。 | 在有噪声标签的分类问题中,基于平均绝对误差构建的神经网络具有良好的噪声容忍能力,在单幅图像超分辨率重建中,选用绝对损失函数可使重建的图像失真更少,smooth L1损失在目标检测问题中可有效解决梯度爆炸问题。 | 基于绝对损失的演化损失函数包括平均绝对误差函数、平均相对误差 (mean relative error,MRE)函数、L1 损失(L1 loss)函数、Chebyshev损失函 数、Minkowski损失函数、smooth L1损失函数、huber损失函数和分位数损失 (quantile loss)函数 | 绝对损失及其演化损失更适用于有较多离群点的数据集。 | |||
0-1损失(zero-one loss)函数 | L ( Y , f ( x ) ) = { 1 , Y ≠ f ( x ) 0 , Y = f ( x ) L(Y, f(x))=\left\{\begin{array}{l}1, Y \neq f(x) \\ 0, Y=f(x)\end{array}\right. L(Y,f(x))={1,Y=f(x)0,Y=f(x) | 直观简单,易理解,它的分类思想为之后出现的其他分类算法奠定了基础。 | 它不考虑预测值和真实值的误差程度,是一种绝对分类方法;由于没有考虑噪声对现实世界数据的影响因素,对每个误分类样本都施以相同的惩罚,预测效果不佳,甚至出现严重误分类情况;是一种 不连续、非凸且不可导函数,优化困难。 | 分类 | 基于0-1损失的分类思想,出现了最常见的分类模型—— K最近邻(K nearest neighbor,KNN);研究人员在0-1损失的基础上引 入参数,进一步放宽分类标准,将其演化为感知机损失(perceptron loss)。 | 0-1损失函数在对称或均匀噪声的数据集上具有较好的鲁棒性。 | |||
铰链损失(hinge loss)也被称为合页损失 | max ( 0 , 1 − Y f ( x ) ) , Y ∈ { − 1 , 1 } \max (0,1-Y f(x)), Y \in\{-1,1\} max(0,1−Yf(x)),Y∈{−1,1} | 铰链损失函数是一个凸函数,因此,铰链损失函数可应用于机器学习领域的很多凸优化 方法中。 | 对错误越大的样本,它施以越严重的惩罚, 这可能使它对噪声敏感,从而降低模型的泛化能力。 | 铰链损失函数最著名的应用是作为支持向量机(support vector machine,SVM)的目标函数,其性质决定了SVM具有稀疏性,也就是说,分类正确但概率不足1和分类错误的样本被识别为支持向量,用于划分决策边界,其余分类完全正确的样本没有参与模型求解。 | 基于铰链损失的演化损失函数包括边界铰链损失函数、坡道损失(ramp loss)函数、Crammerand铰链损失函数、Weston铰链损失函数、二分类支持向量机损失函数、多分类支持向量机损失函数、 多分类支持向量机平方损失函数和top-k铰链损失函数 | 铰链损失及其演化损失函数常作为人脸识别、文本分类、笔迹识别和图像自动标注领域的损失函数,用于度量图像的相似性或向量空间中向量的距离 | 对噪声敏感,易降低模型的泛化能力 | ||
中心损失(center loss)函数 | 1 2 ∑ i = 1 n D ( f ( x i ) , c y i ) \frac{1}{2} \sum_{i=1}^{n} D\left(f\left(x^{i}\right), c_{y_{i}}\right) 21∑i=1nD(f(xi),cyi) | 它一般不单独使用, 常与softmax损失函数搭配使用,其分类 效果比只用softmax损失函数更好。 | 常用于神经网络模型中,实现类内相聚、类间分离。在特征学习时,当期望特征不仅可分,而且必须差异大时,通常使用中心损失函数减小类内变化,增加不同类特征的可分离性。 | 基于中心损失的演化损失函数有三元中心损失(triplet-center loss,TCL)函数 | 在实际应用中,由于中心损失函数本身考虑类内差异,因此中心损失函数应与主要考虑类间的损失函数搭配使用,如softmax损失、交叉熵损失 | ||||
余弦损失(cosine loss)也被称为余 弦相似度 | Y f ( x ) ∥ Y ∥ ∥ f ( x ) ∥ \frac{Y f(x)}{\|Y\|\|f(x)\|} ∥Y∥∥f(x)∥Yf(x) | 它用向量空间中两个向量夹角的余弦值衡量两个样本的差异。与欧氏距离相比,余弦距离对具体数值的绝对值不敏感,而更加注重两个向量在方向上的差异。 | 在监督学习中,余弦相似度常用于计算文本或标签的相似度。它常与词频-逆向文件频率(term frequency–inversedocument frequency,TF-IDF)算法结合使用,用于文本挖掘中的文件比较。在数据挖掘领域,余弦损失常用于度量集群内部的凝聚力。 | 基于余弦损失的演化损失函数有改进的余弦距离核函数,它是由李为等人在与文本相关的说话人确认技术中提出的,用来区分说话人身份及文本内容的差异 |
基于平方损失的演化损失函数
函数名 | 演化形式 | 特点 |
---|---|---|
加权平方损失函数 | λ ( Y − f ( x ) ) 2 \lambda(Y-f(x))^{2} λ(Y−f(x))2 | 加权平方损失函数通过加权修改样本真实值与预测值之间的误差,使样本到拟 合曲线的距离尽可能小,即找到最优拟合曲线。 |
和方误差(sum squared error,SSE)函数 | ∑ i = 1 n ( Y i − f ( x i ) ) 2 \sum_{i=1}^{n}\left(Y_{i}-f\left(x_{i}\right)\right)^{2} ∑i=1n(Yi−f(xi))2 | 在正负样本比例相差很大时,和方误差函数通过计算拟合数据和原始数据对应点的误差平方和,使正样本点更加靠近拟合曲线, 与均方误差函数相比,和方误差函数可以更好地表达误差。 |
均方误差(mean squared error,MSE) 函数 | 1 n ∑ i = 1 n ( Y i − f ( x i ) ) 2 \frac{1}{n} \sum_{i=1}^{n}\left(Y_{i}-f\left(x_{i}\right)\right)^{2} n1∑i=1n(Yi−f(xi))2 | MSE的思想是使各个训练样本点到最优拟合曲线的距离最小,常用于评价数据的变化程度。MSE的值越小,表示预测模型描 述的样本数据具有越好的精确度。由于无 参数、计算成本低和具有明确物理意义等优点,MSE已成为一种优秀的距离度量方法。尽管MSE在图像和语音处理方面表现较弱,但它仍是评价信号质量的标准,在回归问题中,MSE常被作为模型的经验损失或算法的性能指标。 |
L2损失(L2 loss)函数又被称为欧氏距离 | ∑ i = 1 n ( Y i − f ( x i ) ) 2 \sqrt{\sum_{i=1}^{n}\left(Y_{i}-f\left(x_{i}\right)\right)^{2}} ∑i=1n(Yi−f(xi))2 | 是一种常用的距离度量方法,通常用于度量数据点之间的相似度。由于L2损失具有凸性和可微性,且在独立、同分布的高斯噪声情况下,它能提供最大似然估计,使得它成为回归问题、模式识别、图像处理中最常使用的损失函数 |
均方根误差 (root mean squared error,RMSE)函数 | 1 n ∑ i = 1 n ( Y i − f ( x i ) ) 2 \sqrt{\frac{1}{n} \sum_{i=1}^{n}\left(Y_{i}-f\left(x_{i}\right)\right)^{2}} n1∑i=1n(Yi−f(xi))2 | 直观地揭示了模型的输出预测值与样本真实值的离散程度,常被作为回归算法的性能度量指标。尽管与平均绝对误差(MAE) 相比,RMSE计算更复杂且易偏向更高的误差,但由于其是平滑可微的函数,且更容易进行运算,目前仍是许多模型默认的度量标准 |
x 2 x^{2} x2检验(chi-square test)函数也被称为 x 2 x^{2} x2统计 | 1 2 ∑ i = 0 n − 1 ( A i − B i ) 2 A i + B i \frac{1}{2} \sum_{i=0}^{n-1} \frac{\left(A_{i}-B_{i}\right)^{2}}{A_{i}+B_{i}} 21∑i=0n−1Ai+Bi(Ai−Bi)2 | 常用于计算图像直方图之间的距离 |
triple损失 函数 | ∑ i N ( ∥ f ( x i a ) − f ( x i p ) ∥ 2 2 − ∥ f ( x i a ) − f ( x i n ) ∥ 2 2 + α ) \sum_{i}^{N}\left(\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{p}\right)\right\|_{2}^{2}-\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{n}\right)\right\|_{2}^{2}+\alpha\right) ∑iN(∥f(xia)−f(xip)∥22−∥f(xia)−f(xin)∥22+α) | triple 损失函数不能对每一个单独的样本进行约束,由于其具有类间距离大于类内距离的特性,首次出现在基于卷积神经网络 (convolutional neural network,CNN) 的人脸识别任务中便取得了令人满意的效果。 |
对比损失(contrastive loss)函数 | 1 2 n ∑ i = 1 N y d 2 + ( 1 − y ) max ( margin − d , 0 ) 2 \frac{1}{2 n} \sum_{i=1}^{N} y d^{2}+(1-y) \max (\operatorname{margin}-d, 0)^{2} 2n1∑i=1Nyd2+(1−y)max(margin−d,0)2 | 对比损失函数是一个成对损失函数, 在使用时除需样本本身外,还需一个对比数据,可见,它也不能对每一个单独的样本进行约束。对比损失函数不仅能降维,而且降维后成对样本的相似性保持不变,可以很好地表达成对样本的匹配程度(是否可以用于手语识别中) ,另 外,它能扩大类间距离,缩小类内距离, 在人脸验证算法中,常被作为人脸判断的依据。 |
基于绝对损失的演化损失函数
函数名 | 演化形式 | 特点 |
---|---|---|
平均绝对误差 (mean absolute error, MAR)函数 | 1 n ∑ i = 1 n ∣ Y i − f ( x i ) ∣ \frac{1}{n} \sum_{i=1}^{n}\left \lvert Y_{i}-f\left(x_{i}\right)\right \rvert n1∑i=1n∣Yi−f(xi)∣ | 平均绝对误差函数表达预测误差的实际情况,只衡量预测误差的平均模长,不考虑方向,一般作为回归算法的性能指标。 |
平均相对误差 (mean relative error,MRE)函数 | 1 n ∑ i = 1 n ∣ Y i − f ( x i ) ∣ Y i \frac{1}{n} \sum_{i=1}^{n} \frac{\left \lvert Y_{i}-f\left(x_{i}\right)\right\rvert}{Y_{i}} n1∑i=1nYi∣Yi−f(xi)∣ | 平均相对误差函数既指明误差的大小,又指明其正负方向。一般来说,与平均绝对误差函数相比,它更能反映评估的可信程度 |
L1 损失(L1 loss)函数又称为曼哈顿距离 | ∑ i = 1 n ∣ Y i − f ( x i ) ∣ \sum_{i=1}^{n}\left \lvert Y_{i}-f\left(x_{i}\right)\right \rvert ∑i=1n∣Yi−f(xi)∣ | 表示残差的绝对值之和 |
Chebyshev损失函数也称切比雪夫距离 | max i = 1 n ( ∣ Y i − f ( x i ) ∣ ) \max _{i=1}^{n} \left(\mid Y_{i}-f\left(x_{i}\right)\rvert \right) maxi=1n(∣Yi−f(xi)∣) | 是向量空间中的一 种度量方法 |
Minkowski损失函数也被称为闵氏距离或闵可夫斯基距离 | ( ∑ i = 1 n ∣ Y i − f ( x i ) ∣ p ) 1 p \left(\sum_{i=1}^{n}\left \lvert Y_{i}-f\left(x_{i}\right)\right \rvert^{p}\right)^{\frac{1}{p}} (∑i=1n∣Yi−f(xi)∣p)p1 | 是欧氏空间中的一种度量方法,常被看作欧氏距离和曼哈顿距离的一种推广。 |
smooth L1损失函数 | { 1 2 ( Y − f ( x ) ) 2 , ∣ Y − f ( x ) ∣ < 1 ∣ Y − f ( x ) ∣ − 1 2 , ∣ Y − f ( x ) ∣ ⩾ 1 \left\{\begin{array}{l}\frac{1}{2}(Y-f(x))^{2},\lvert Y-f(x)\rvert <1 \\ \lvert Y-f(x)\rvert-\frac{1}{2},\lvert Y-f(x)\rvert \geqslant 1\end{array}\right. {21(Y−f(x))2,∣Y−f(x)∣<1∣Y−f(x)∣−21,∣Y−f(x)∣⩾1 | smooth L1损失是由Girshick R在Fast R-CNN中提出的,主要用在目标检测中防止梯度爆炸。 |
huber损失函数 | { 1 2 ( Y − f ( x ) ) 2 , ∣ Y − f ( x ) ∣ ⩽ δ δ ∣ Y − f ( x ) ∣ − 1 2 δ 2 , ∣ Y − f ( x ) ∣ > δ \left\{\begin{array}{l}\frac{1}{2}(Y-f(x))^{2},\lvert Y-f(x)\rvert \leqslant \delta \\ \delta\lvert Y-f(x)\rvert -\frac{1}{2} \delta^{2},\lvert Y-f(x)\rvert >\delta\end{array}\right. {21(Y−f(x))2,∣Y−f(x)∣⩽δδ∣Y−f(x)∣−21δ2,∣Y−f(x)∣>δ | huber 损失是平方损失和绝对损失的综合,它克服了平方损失和绝对损失的缺点,不仅使损失函数具有连续的导数,而且利用均方误差函数梯度随误差减小的特性,可取得更精确的最小值。尽管huber损失对异常点具有更好的鲁棒性,但是,它不仅引入了额外的参数,而且选择合适的参数比较困难,这也增加了训练和调试的工作量。 |
分位数损失 (quantile loss)函数 | ∑ i : y i < f ( x i ) ( 1 − γ ) ∣ Y i − f ( x i ) ∣ + ∑ i : y i ⩾ f ( x i ) γ ∣ Y i − f ( x i ) ∣ \sum_{i: y_{i}<f\left(x_{i}\right)}(1-\gamma)\left \lvert Y_{i}-f\left(x_{i}\right)\right \rvert +\sum_{i: y_{i} \geqslant f\left(x_{i}\right)} \gamma\left \lvert Y_{i}-f\left(x_{i}\right)\right \rvert ∑i:yi<f(xi)(1−γ)∣Yi−f(xi)∣+∑i:yi⩾f(xi)γ∣Yi−f(xi)∣ | 分位数损失的思想是通过分位数 γ 惩罚高估和低估的预测值,使其更接近目标值的区间范围,当设置多个 γ 值时,将得到多个预测模型,当 γ =0.5 时,分位数损失相当于平均绝对误差函数。分位数损失易构建能够预测输出值范围的模型,与平均绝对误差函数相比,它可减少数据预处理的工作量。 基于分位数损失的回归学习,不仅适用于正态分布的残差预测问题,而且对于具有变化方差或非正态分布残差的预测问题,也能给出合理的预测区间。在神经网络模型、梯度提升回归器和基于树模型的区间预测问题中,选取分位数损失评估模型的性能往往会取得更好的预测结果。分位数损失函数选取合适的分位数比较困难,一般情况下,分位值的选取取决于求解问题对正误差和反误差的重视程度,应根据实验结果进行反复实验后再选取。另外,分位数损失值在 0 附近的区间内存在导数不连续的问题。 |
基于0-1损失的演化损失函数
基于0-1损失的分类思想发出现了最常见的分类模型–K最近邻(K nearest neighbor,KNN)
函数名 | 演化形式 | 特点 |
---|---|---|
感知机损失(perceptron loss) | L ( Y , f ( x ) ) = { 1 , ∣ Y − f ( x ) ∣ > t 0 , ∣ Y − f ( x ) ∣ ⩽ t L(Y, f(x))=\left\{\begin{array}{l}1,\lvert Y-f(x)\rvert>t \\ 0,\rvert Y-f(x)\lvert \leqslant t\end{array}\right. L(Y,f(x))={1,∣Y−f(x)∣>t0,∣Y−f(x)∣⩽t,其中 t 为参数,在感知机算法中 t=0.5 | 感知机损失是0-1损失改进后的结果,它采用参数克服了0-1损失分类的绝对性。与0-1损失相比,它的分类结果更可靠。感知机损失被广泛应用于图像风格化、图像复原等问题中,通过使用预训练的深度网络对图像进行多层语义分解,在相关问题上取得了较好的效果。 |
基于铰链损失的演化损失函数
函数名 | 演化形式 | 特点 |
---|---|---|
边界铰链损失函数 | max ( 0 , margin − ( f ( x ) − Y ) ) \max (0, \operatorname{margin}-(f(x)-Y)) max(0,margin−(f(x)−Y)) | 边界铰链损失表示期望正确预测的得分高于错误预测的得分,且高出边界值 margin,它主要用于训练两个样本之间的相似关系,而非样本的类别得分。 |
坡道损失(ramp loss)函数 | 1 n ∑ i = 1 n ( max ( 0 , 1 − h y i ) − max ( 0 , s − h y i ) ) \frac{1}{n} \sum_{i=1}^{n}\left(\max \left(0,1-h_{y_{i}}\right)-\max \left(0, s-h_{y_{i}}\right)\right) n1∑i=1n(max(0,1−hyi)−max(0,s−hyi)) | 在坡道损失函数中, s 为截断点的位置,一般情况下,s 的值取决于类别个数 c, s = − 1 c − 1 s=-\frac{1}{c-1} s=−c−11,它在 x=1 和 x=s 两处不可导。 |
Crammerand铰链损失函数 | max ( 0 , 1 + max Y ≠ f ( x ) w Y x − w f ( x ) x ) \max \left(0,1+\max _{Y \neq f(x)} w_{Y} x-w_{f(x)} x\right) max(0,1+maxY=f(x)wYx−wf(x)x) | Crammerand 铰链损失函数是由Crammerand Singer 提出的一种针对线性分类器的损失函数。 |
Weston铰链损失函数 | ∑ Y ≠ f ( x ) max ( 0 , 1 + w Y x − w f ( x ) x ) \sum_{Y \neq f(x)} \max \left(0,1+w_{Y} x-w_{f(x)} x\right) ∑Y=f(x)max(0,1+wYx−wf(x)x) | Weston铰链损失函数是由Weston和 Watkins提出的一种损失函数。 |
二分类支持向量机损失函数 | 1 2 ∥ w ∥ 2 + c ∑ i = 1 n max ( 0 , 1 − Y f ( x ) ) \frac{1}{2}\|w\|^{2}+c \sum_{i=1}^{n} \max (0,1-Y f(x)) 21∥w∥2+c∑i=1nmax(0,1−Yf(x)) | 二分类支持向量机损失函数可看作L2正则化与铰链损失之和。 |
多分类支持向量机损失函数 | ∑ j ≠ Y I max ( 0 , s j − s Y f + 1 ) \sum_{j \neq Y_{I}} \max \left(0, s_{j}-s_{Y_{f}}+1\right) ∑j=YImax(0,sj−sYf+1) | 多分类支持向量机损失函数只考虑在正确值附近的那些值,其他的均作为0处理,即只关注那些可能造成影响的点(或支持向量),因此,具有较好的鲁棒性。 |
多分类支持向量机平方损失函数 | ∑ j ≠ Y i max ( 0 , s j − s Y f + 1 ) 2 \sum_{j \neq Y_{i}} \max \left(0, s_{j}-s_{Y_{f}}+1\right)^{2} ∑j=Yimax(0,sj−sYf+1)2 | 与多分类支持向量机损失函数相比,多分类支持向量机平方损失函数的惩罚更强烈。 |
top-k 铰链损失函数 | C ∑ i = 1 n ( max ( 1 − y i ( w T x i + b ) , 0 ) ) C \sum_{i=1}^{n}\left(\max \left(1-y_{i}\left(w^{\mathrm{T}} x_{i}+b\right), 0\right)\right) C∑i=1n(max(1−yi(wTxi+b),0)) | top-k铰链损失函数在k个测试样本预测为正的约束下,使所有训练实例的铰链损失最小化。 |
基于中心损失的演化损失函数
函数名 | 演化形式 | 特点 |
---|---|---|
三元中心损失(triplet-center loss,TCL)函数 | L = ∑ i = 1 M max ( D ( f i , c y i ) + m − min j ≠ y i D ( f i , c j ) , 0 ) L=\sum_{i=1}^{M} \max \left(D\left(f_{i}, c_{y_{i}}\right)+m-\min _{j \neq y_{i}} D\left(f_{i}, c_{j}\right), 0\right) L=∑i=1Mmax(D(fi,cyi)+m−minj=yiD(fi,cj),0) | TCL函数使样本与其对应的中心之间的距离比样本与其最近的负中心之间的距离更近 |
基于余弦损失的演化损失函数
函数名 | 演化形式 | 特点 |
---|---|---|
余弦距离核函数 | L ( λ ( u 1 ) , λ ( u 2 ) ) = w ~ ( u 1 ) T w ~ ( u 2 ) ∥ w ~ ( u 1 ) T ∥ ∥ w ( u 2 ) ∥ × L\left(\lambda\left(u_{1}\right), \lambda\left(u_{2}\right)\right)=\frac{\tilde{w}\left(u_{1}\right) T \tilde{w}\left(u_{2}\right)}{\left\|\tilde{w}\left(u_{1}\right) T\right\|\left\|w\left(u_{2}\right)\right\|} \times L(λ(u1),λ(u2))=∥w~(u1)T∥∥w(u2)∥w~(u1)Tw~(u2)× L ( u 1 ) T L ( u 2 ) ∥ L ( u 1 ) T ∥ ∥ L ( u 2 ) ∥ \frac{L\left(u_{1}\right) T L\left(u_{2}\right)}{\left\|L\left(u_{1}\right) T\right\|\left\|L\left(u_{2}\right)\right\|} ∥L(u1)T∥∥L(u2)∥L(u1)TL(u2),其中, λ \lambda λ 为扬声器模型, u u u 为说话人。 | 由李为等人在与文本相关的说话人确认技术中提出的,用来区分说话人身份及文本内容的差异 |
基于概率分布度量的损失函数
基于概率分布度量的损失函数是将样本间的相似性转化为随机事件出现的可能性,即通过度量样本的真实分布与它估计的分布之间的距离,判断两者的相似度,一般用于涉及概率分布或预测类别出现的概率的应用问题中,在分类问题中尤为常用。
函数名 | 标准形式 | 特点 | 演变的损失函数 | 应用 |
---|---|---|---|---|
对数损失(logarithm loss)也被称为对数似然损失 | − log P ( Y ∣ X ) -\log P(Y \mid X) −logP(Y∣X) | 使用极大似然估计的思想,表示样本 x 在类别 y 的情形下,使概率 P ( y ∣ x ) P(y \mid x) P(y∣x) 达到最大值。因为概率的取值范围为[0,1],使得 log ( P ( y ∣ x ) ) \log (P(y \mid x)) log(P(y∣x)) 取值为 ( − ∞ , 0 ) (-\infty, 0) (−∞,0),为保证损失为非负,对数损失的形式为对数的负值。对数损失函数是逻辑回归、神经网络以及一些期望极大估计的模型经常使用的损失函数,它通过惩罚错误的分类,实现对分类器的精确度量化和模型参数估计,对数损失函数常用于度量真实条件概率分布与假定条件概率分布之间的差异。 | 基于对数损失函数的演化形式包括逻辑回归损失(logistic regression loss)函数、加权对数损失函数、对数双曲余弦损失(log-cosh loss)函数、softmax损失函数、二分类对数损失函数和巴氏距离(Bhattacharyya distance)函数 | 在分类学习中,当预测问题使用已知的样本分布,找到最有可能导致这种分布的参数值时,应选取对数损失函数或其演化损失函数作为预测问题的损失函数。**在基于深度神经网络的分类或标注问题中,**一般在输出层使用 softmax 作为损失函数,对数损失函数是回归、决策树、深度神经网络常使用的损失函数。 |
KL 散度函数( Kullback-Leibler divergence)也被称为相对熵 | ∑ i = 1 n P ( x i ) × log ( P ( x i ) Q ( x i ) ) \sum_{i=1}^{n} P\left(x_{i}\right) \times \log \left(\frac{P\left(x_{i}\right)}{Q\left(x_{i}\right)}\right) ∑i=1nP(xi)×log(Q(xi)P(xi)) | 是一种非对称度量方法,常用于度量两个概率分布之间的距离。KL 散度也可以衡量两个随机分布之间的距离,两个随机分布的相似度越高,它们的 KL 散度越 小 ,当两个随机分布的差别增大时,它们的 KL 散度也会增大 ,因此 KL 散度可以用于比较文本标签或图像的相似性。 | 基于KL散度的演化损失函数有 JS 散度函数。 | KL散度及其演化损失主要用于衡量两个概率分布之间的相似度,常作为图像低层特征和文本标签相似度的度量标准。KL 散度在成像分析 、流体动力学 、心电等临床实验室检测、生物应用的网络分析、细 胞生物学等领域有广泛的应用。 |
交叉熵损失 | − ∑ i = 1 N ∑ j = 1 c p i j log q i j -\sum_{i=1}^{N} \sum_{j=1}^{c} p_{i j} \log q_{i j} −∑i=1N∑j=1cpijlogqij | 交叉熵是信息论中的一个概念,最初用于估算平均编码长度,引入机器学习后,用于评估当前训练得到的概率分布与真实分布的差异情况。为了使神经网络的每一层输出从线性组合转为非线性逼近,以提高模型的预测精度,在以交叉熵为损失函数的神经网络模型中一般选用 tanh、sigmoid、softmax或ReLU 作为激活函数。 | 基于交叉熵损失的演化损失函数包括平均交叉熵损失函数、二分类交叉熵损失函数、二分类平衡交叉熵损失函数、多分类交叉熵损失函数和 focal 损失函数 | 交叉熵损失函数刻画了实际输出概率与期望输出概率之间的相似度,也就是交叉熵的值越小,两个概率分布就越接近,特别是在正负样本不均衡的分类问题中,常用交叉熵作为损失函数。目前,交叉熵损失函数是卷积神经网络中最常使用的分类损失函数,它可以有效避免梯度消散。 |
softmax损失函数 | − 1 n ∑ i = 1 n log e f y i ∑ j = 1 c e f j -\frac{1}{n} \sum_{i=1}^{n} \log \frac{\mathrm{e}^{f_{y_{i}}}}{\sum_{j=1}^{c} \mathrm{e}^{f_{j}}} −n1∑i=1nlog∑j=1cefjefyi | 从标准形式上看,softmax 损失函数应归到对数损失的范畴,在监督学习中,由于它被广泛使用,所以单独形成一个类别。softmax 损失函数本质上是逻辑回归模型在多分类任务上的一种延伸,常作为 CNN 模型的损失函数。softmax损失函数的本质是将一个 k 维的任意实数向量x映射成另一个 k 维的实数向量,其中,输出向量中的每个元素的取值范围都是 (0,1),即 softmax 损失函数输出每个类别的预测概率。由于softmax 损失函数具有类间可分性,被广泛用于分类、分割、人脸识别、图像自动标注和人脸验证等问题中,其特点是类间距离的优化效果非常好,但类内距离的优化效果比较差。 | 基于 softmax 损失函数的演化损失函数包括 softer softmax 函数、NSL (normalized softmax loss) 函数、LMCL (large margin cosine loss) 函数、L-softmax 函数、A-softmax 函数、A Msoftmax (additive margin softmax) 函数以及正则化 softmax 函数 | softmax 损失函数具有类间可分性,在多分类和图像标注问题中,常用它解决特征分离问题。在基于卷积神经网络的分类问题中,一般使用 softmax 损失函数作为损失函数,但 softmax 损失函数学习到的特征不具有足够的区分性,因此它常与对比损失或中心损失组合使用,以增强区分能力。 |
基于对数损失的演化损失函数
函数名 | 演化形式 | 特点 |
---|---|---|
逻辑回归损失(logistic regression loss)函数 | L ( y , P ( Y = y ∣ x ) ) = { log ( 1 + exp ( − f ( x ) ) ) , y = 1 log ( 1 + exp ( f ( x ) ) ) , y = 0 L(y, P(Y=y \mid x))=\left\{\begin{array}{l}\log (1+\exp (-f(x))), y=1 \\ \log (1+\exp (f(x))), y=0\end{array}\right. L(y,P(Y=y∣x))={log(1+exp(−f(x))),y=1log(1+exp(f(x))),y=0 | 逻辑回归损失函数假设样本服从伯努利分布,利用极大似然估计的思想求得极值,它常作为分类问题的损失函数。 |
加权对数损失函数 | − ∑ k = 0 C W C Y C log ( f ( x ) ) -\sum_{k=0}^{C} W_{C} Y_{C} \log (f(x)) −∑k=0CWCYClog(f(x)) | 加权对数损失函数主要应用在类别样本数目差距非常大的分类问题中,如边缘检测问题(边缘像素的重要性比非边缘像素大,可针对性地对样本进行加权)。 |
对数双曲余弦损失 (log-cosh loss) 函数 | ∑ i = 1 n log ( cosh ( f ( x i ) − Y i ) ) \sum_{i=1}^{n} \log \left(\cosh \left(f\left(x_{i}\right)-Y_{i}\right)\right) ∑i=1nlog(cosh(f(xi)−Yi)) | 对数双曲余弦损失函数基本上等价于均方误差函数,但又不易受到异常点的影响,是更加平滑的损失函数,它具有huber损失函数的所有优点,且二阶处处可导 |
softmax 损失函数 | − Y log ( soft max ( Y , f ( x ) ) ) -Y \log (\operatorname{soft} \max (Y, f(x))) −Ylog(softmax(Y,f(x))) | softmax损失函数是卷积神经网络处理分类问题时常用的损失函数 |
二分类对数损失函数 | − 1 n ∑ i = 1 n ( y i log p i + ( 1 − y i ) log ( 1 − p i ) ) -\frac{1}{n} \sum_{i=1}^{n}\left(y_{i} \log p_{i}+\left(1-y_{i}\right) \log \left(1-p_{i}\right)\right) −n1∑i=1n(yilogpi+(1−yi)log(1−pi)) | |
巴氏距离 (Bhattacharyya distance) 函数 | − ln ( B C ( p , q ) ) -\ln (B C(p, q)) −ln(BC(p,q)) | 。巴氏距离函数用于度量两个连续或离散概率分布的相似度,它与衡量两个统计样本或种群之间的重叠量的巴氏系数密切相关。在直方图相似度计算中,选用巴氏距离函数会获得很好的效果,但它的计算很复杂。 |
基于KL散度的演化损失函数
函数名 | 演化形式 | 特点 |
---|---|---|
JS 散度函数也称 JS 距离 | J S = 1 2 K L ( P ( X ) ∥ P ( X ) + Q ( X ) 2 ) + \mathrm{JS}=\frac{1}{2} \mathrm{KL}\left(P(X) \| \frac{P(X)+Q(X)}{2}\right)+ JS=21KL(P(X)∥2P(X)+Q(X))+ 1 2 K L ( Q ( X ) ∥ P ( X ) + Q ( X ) 2 ) , \frac{1}{2} \mathrm{KL}\left(Q(X) \| \frac{P(X)+Q(X)}{2}\right), 21KL(Q(X)∥2P(X)+Q(X)), 其中 , K L ( ∙ ) , \mathrm{KL}(\bullet) ,KL(∙)为 KL 散度 | 用于衡量两个概率分布之间的相似度,它是基于 K L 散度的一种变形,消除了 KL 散度非对称的问题,与 KL 散度相比,它使得相似度判别更加准确。 |
基于交叉熵损失的演化损失函数
函数名 | 演化形式 | 特点 |
---|---|---|
平均交叉熵损失函数 | − 1 n ∑ i = 1 n Y i ln ( a i ) -\frac{1}{n} \sum_{i=1}^{n} Y_{i} \ln \left(a_{i}\right) −n1∑i=1nYiln(ai) | |
二分类交叉熵损失函数 | − 1 n ∑ i = 1 n [ Y i ln ( a i ) + ( 1 − Y i ) ln ( 1 − a i ) ] -\frac{1}{n} \sum_{i=1}^{n}\left[Y_{i} \ln \left(a_{i}\right)+\left(1-Y_{i}\right) \ln \left(1-a_{i}\right)\right] −n1∑i=1n[Yiln(ai)+(1−Yi)ln(1−ai)] | 二分类交叉熵损失函数对于正样本而言,输出概率越大,损失越小;对于负样本而言,输出概率越小,损失越小。 |
二分类平衡交叉熵损失函数 | − 1 n ∑ i = 1 n [ β Y i ln ( a i ) + ( 1 − β ) ( 1 − Y i ) ln ( 1 − a i ) ] -\frac{1}{n} \sum_{i=1}^{n}\left[\beta Y_{i} \ln \left(a_{i}\right)+(1-\beta)\left(1-Y_{i}\right) \ln \left(1-a_{i}\right)\right] −n1∑i=1n[βYiln(ai)+(1−β)(1−Yi)ln(1−ai)] | 二分类平衡交叉熵损失函数与二分类交叉熵损失函数相比,它的优势在于引入了平衡参数 β∈[0,1],可实现正负样本均衡,使预测值更接近于真实值。 |
多分类交叉熵函数 | − 1 n ∑ i = 1 n ∑ j = 1 k Y i , j log ( a i , j ) -\frac{1}{n} \sum_{i=1}^{n} \sum_{j=1}^{k} Y_{i, j} \log \left(a_{i, j}\right) −n1∑i=1n∑j=1kYi,jlog(ai,j) | |
focal损失函数 | − 1 n ∑ i = 1 n Y i ∂ i ( 1 − a i ) γ log ( a i ) -\frac{1}{n} \sum_{i=1}^{n} Y_{i} \partial_{i}\left(1-a_{i}\right)^{\gamma} \log \left(a_{i}\right) −n1∑i=1nYi∂i(1−ai)γlog(ai) |
基于softmax损失的演化损失函数
函数名 | 演化形式 | 特点 |
---|---|---|
softer softmax损失函数 | softer softmax 损失函数是 Hinton G等人为了解决模型给误分类标签分配的概率被 softmax 损失忽略的问题而提出的 | |
NSL (normalized softmax loss) 函数 | − 1 n ∑ i = 1 n log e s cos ( θ y i , i ) ∑ j ≠ Y i e s cos ( θ j , i ) -\frac{1}{n} \sum_{i=1}^{n} \log \frac{\mathrm{e}^{s \cos \left(\theta_{y_{i}}, i\right)}}{\sum_{j \neq Y_{i}} \mathrm{e}^{s \cos \left(\theta_{j}, i\right)}} −n1∑i=1nlog∑j=Yiescos(θj,i)escos(θyi,i) | NSL损失函数利用两个特征向量之间的余弦相似度评估两个样本之间的相似性,使后验概率只依赖于角度的余弦值,由此产生的模型学习了角空间中可分离的特征,提高了特征学习能力 |
LMCL (large margin cosine loss) 函数 | − 1 n ∑ i = 1 n log e s ( cos ( θ Y 1 , i ) − m ) e s ( cos ( θ r i , i ) − m ) + ∑ j = 1 , j ≠ Y i e s cos ( θ j , i ) -\frac{1}{n} \sum_{i=1}^{n} \log \frac{\mathrm{e}^{s\left(\cos \left(\theta_{Y_{1}}, i\right)-m\right)}}{\mathrm{e}^{s\left(\cos \left(\theta_{r_{i}}, i\right)-m\right)}+\sum_{j=1, j \neq Y_{i}} \mathrm{e}^{s \cos \left(\theta_{j}, i\right)}} −n1∑i=1nloges(cos(θri,i)−m)+∑j=1,j=Yiescos(θj,i)es(cos(θY1,i)−m) | 为了构建一个更大边距的分类器,期望 cos ( θ 1 ) − m > cos ( θ 2 ) \cos \left(\theta_{1}\right)-m>\cos \left(\theta_{2}\right) cos(θ1)−m>cos(θ2) 且 cos ( θ 2 ) − m > cos ( θ 1 ) , m ⩾ 0 \cos \left(\theta_{2}\right)-m>\cos \left(\theta_{1}\right), \quad m \geqslant 0 cos(θ2)−m>cos(θ1),m⩾0 为控制余弦边矩大小的参数所提出。 |
L-softmax 函数 | 与传统的欧几里得边距相比,角的余弦值与 softmax 具有内在的一致性,基于此思想,在原始 softmax 基础上选用角边距度量两个样本的相似性,Liu W等人提出了 L-softmax 损失函数。 | |
A-softmax 函数 | 受L-softmax损失函数启发,在它的基础上,Liu W等人增加了条件 ∥ W ∥ = 1 , B = 0 \|W\|=1, B=0 ∥W∥=1,B=0 和 cos ( m θ 1 ) > cos ( θ 2 ) \cos \left(m \theta_{1}\right)>\cos \left(\theta_{2}\right) cos(mθ1)>cos(θ2),使得预测仅取决于 W 和 x 之间的角度 θ ,提出了A-softmax损失函数。 | |
A Msoftmax (additive margin softmax) 函数 | − 1 n ∑ i = 1 n log e s ( W 1 T f 1 − m ) e s ( W 1 T f i − m ) + ∑ j = 1 , j ≠ Y i c e s W j T f i -\frac{1}{n} \sum_{i=1}^{n} \log \frac{\mathrm{e}^{s\left(W_{1}^{\mathrm{T}} f_{1}-m\right)}}{\mathrm{e}^{s\left(W_{1}^{\mathrm{T}} f_{i}-m\right)}+\sum_{j=1, j \neq Y_{i}}^{c} \mathrm{e}^{s W_{j}^{\mathrm{T}} f_{i}}} −n1∑i=1nloges(W1Tfi−m)+∑j=1,j=YicesWjTfies(W1Tf1−m) | 受 L-softmax 损失函数的启发,Wang F等人提出了 AM-softmax 损失函数,它使前后向传播变得更加简单。 |
正则化 softmax 函数 | − 1 n ∑ i = 1 n log e f f j ∑ j = 1 c e f j + λ R ( W ) -\frac{1}{n} \sum_{i=1}^{n} \log \frac{\mathrm{e}^{f_{f_{j}}}}{\sum_{j=1}^{c} \mathrm{e}^{f_{j}}}+\lambda R(W) −n1∑i=1nlog∑j=1cefjeffj+λR(W) | 正则化 softmax 损失函数加入刻画模型的复杂度指标的正则化,可以有效地避免过拟合问题。 |
其他损失函数
与主要损失函数相比,其他损失函数在监督学习中使用的频次比较低
函数名 | 标准形式 | 特点 |
---|---|---|
指数损失 (exponential loss) 函数 | exp ( − Y f ( x ) ) \exp (-Y f(x)) exp(−Yf(x)) | 指数损失函数是 AdaBoost 算法中常用的损失函数。它与铰链损失函数和交叉熵损失函数相比,对错误分类施加的惩罚更大,这使得它的误差梯度也较大,因此在使用梯度下降算法优化时,在极小值处求解速度也较快。 |
汉明距离函数 | ∑ i = 1 n I ( x i , y i ) \sum_{i=1}^{n} I\left(x_{i}, y_{i}\right) ∑i=1nI(xi,yi) | 汉明距离用于计算两个向量的相似度,即通过比较两个向量的每一位是否相同来计算汉明距离 |
dice损失函数 | 1 − ∑ i = 1 n p i r i + ε ∑ i = 1 n p i + r i + ε − ∑ i = 1 n ( 1 − p i ) ( 1 − r i ) + ε ∑ i = 1 n 2 − p i − r i + ε 1-\frac{\sum_{i=1}^{n} p_{i} r_{i}+\varepsilon}{\sum_{i=1}^{n} p_{i}+r_{i}+\varepsilon}-\frac{\sum_{i=1}^{n}\left(1-p_{i}\right)\left(1-r_{i}\right)+\varepsilon}{\sum_{i=1}^{n} 2-p_{i}-r_{i}+\varepsilon} 1−∑i=1npi+ri+ε∑i=1npiri+ε−∑i=1n2−pi−ri+ε∑i=1n(1−pi)(1−ri)+ε | dice 损失函数是一种集合相似性度量函数,通常用于计算两个样本的相似性,常作为文本比较或图像分割类问题的损失函数,尤其适用于处理图像的前景区域和背景区域相差较大的图像分割问题 |
余弦损失+softmax 函数 | − 1 n ∑ i = 1 n log e s ( cos ( θ Y i , i ) − m ) e s ( cos ( θ I i , i ) − m ) + ∑ j = 1 , j ≠ Y i e scos ( θ j , i ) -\frac{1}{n} \sum_{i=1}^{n} \log \frac{\mathrm{e}^{s\left(\cos \left(\theta_{\mathrm{Y}_{i}}, i\right)-m\right)}}{\mathrm{e}^{s\left(\cos \left(\theta_{I_{i}}, i\right)-m\right)}+\sum_{j=1, j \neq Y_{i}} \mathrm{e}^{\operatorname{scos}\left(\theta_{j}, i\right)}} −n1∑i=1nloges(cos(θIi,i)−m)+∑j=1,j=Yiescos(θj,i)es(cos(θYi,i)−m) | 余弦损失+softmax 函数是利用余弦和 softmax 的特性组合而成的 |
softmax+LDloss 函数 | L s + α L L L_{s}+\alpha L_{L} Ls+αLL | softmax+LDloss 函数是黄旭等人在融合判别式深度特征学习的图像识别算法中引入线性判别分析(linear discriminantanalysis,LDA)思想构建的损失函数,该算法使 softmax+LDloss 参与卷积神经网络的训练,实现尽可能最小化类内特征距离和最大化类间特征距离的目标,以提高特征的鉴别能力,进而改善图像的识别性能 |
优化器
优化器的作用
优化器或者优化算法,是通过训练优化参数,来最小化(最大化)损失函数。损失函数是用来计算测试集中目标值Y的真实值和预测值的偏差程度。
为了使模型输出逼近或达到最优值,我们需要用各种优化策略和算法,来更新和计算影响模型训练和模型输出的网络参数。
优化器的分类
一阶优化算法
这种算法使用各参数的梯度值来最小化或最大化损失函数E(x)。最常用的一阶优化算法是梯度下降。
函数梯度:导数dy/dx的多变量表达式,用来表示y相对于x的瞬时变化率。往往为了计算多变量函数的导数时,会用梯度取代导数,并使用偏导数来计算梯度。梯度和导数之间的一个主要区别是函数的梯度形成了一个多维变量。因此,对单变量函数,使用导数来分析;而梯度是基于多变量函数而产生的。
二阶优化算法
二阶优化算法使用了二阶导数(也叫做Hessian方法)来最小化或最大化损失函数。这种方法是二阶收敛,收敛速度快,但是由于二阶导数的计算成本很高,所以这种方法并没有广泛使用。
主要算法:牛顿法和拟牛顿法(Newton’s method & Quasi-Newton Methods)
牛顿法和梯度下降法的效率对比
深度学习中的优化算法
梯度下降的优化算法
名称 | 优点 | 缺点 | 特点 |
---|---|---|---|
梯度下降 (Gradient Descent) GD | 1、训练速度慢:每进行一步都要计算调整下一步方向,在大型数据中,每个样本都更新一次参数,且每次迭代要遍历所有样本,需要很长时间进行训练和达到收敛。2、易陷入局部最优解:在有限的范围内寻找路径,当陷入相对较平的区域,误认为最低点(局部最优即鞍点),梯度为0,不进行参数更新。 | 梯度下降:学习训练的模型参数为w,损失函数为J(w),则损失函数关于模型参数的偏导数即相关梯度为ΔJ(w),学习率为η,梯度下降法更新参数公式:w=w−η×ΔJ(w),模型参数的调整沿着梯度方向不断减小的方向最小化损失函数。 | |
批量梯度下降BGD | BGD迭代的次数相对较少。 | 每一次的参数更新都用到了所有的训练数据(比如有m个,就用到了m个),如果训练数据非常多的话,是非常耗时的。 | 批量梯度下降BGD:学习训练样本的总数为n,每次样本i为(x,y),模型参数为w,代价函数为J(w),每个样本i的代价函数关于W的梯度为ΔJ(w,x,y),学习率η,更新参数表达式为: w t + 1 = w t − η t 1 n ∑ i = 1 n Δ J i ( w t , x i , y i ) w_{t+1}=w_{t}-\eta_{t} \frac{1}{n} \sum_{i=1}^{n} \Delta J_{i}\left(w_{t}, x^{i}, y^{i}\right) wt+1=wt−ηtn1∑i=1nΔJi(wt,xi,yi) |
随机梯度下降 (Stochastic Gradient Descent) SGD | 计算梯度快,对于小噪声,SGD可以很好收敛。对于大型数据,训练很快,从数据中取大量的样本算一个梯度,更新一下参数。 | 噪音较BGD要多,权值更新方向可能出现错误,使得SGD并不是每次迭代都向着整体最优化方向。 | 与BGD最大的区别就在于,更新参数的时候,并没有将所有训练样本考虑进去,然后求和除以总数,而是任取一个样本点,然后利用这个样本点进行更新。更新参数表达式为: w t + 1 = w t − η t g t w_{t+1}=w_{t}-\eta_{t} g_{t} wt+1=wt−ηtgt,其中 g t = Δ J i s ( w t , x i s , y i s ) , i s ∈ { 1 , 2 , … , n } g_{t}=\Delta J_{i_{s}}\left(w_{t}, x^{i_{s}}, y^{i_{s}}\right), i_{s} \in\{1,2, \ldots, n\} gt=ΔJis(wt,xis,yis),is∈{1,2,…,n} |
小批量梯度下降法 (Min-Batch) MBGD | 小批量梯度下降法是为了解决批梯度下降法的训练速度慢,以及随机梯度下降法的准确性综合而来。小批量随机梯度下降法的实现是SGD的基础上,随机取batch个样本,而不是1个样本。但是不同问题的batch是不一样的,没有绝对的取值定义。 |
动量优化算法
动量优化算法在梯度下降法的基础上进行改进,具有加速梯度下降的作用。
名称 | 优点 | 缺点 | 特点 |
---|---|---|---|
动量优化算法——Momentum | 动量解决SGD的两个问题:(1)SGD引入的噪声(2)Hessian矩阵病态(SGD收敛过程的梯度相比正常来回摆动幅度较大)。使网络能更优和更稳定的收敛,减少振荡过程。当我们将一个小球从山上滚下来时,没有阻力的话,它的动量会越来越大,但是如果遇到了阻力,速度就会变小。加入的这一项,可以使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡。 | 这种情况相当于小球从山上滚下来时是在盲目地沿着坡滚,如果它能具备一些先知,例如快要上坡时,就知道需要减速了的话,适应性会更好。 | Momentum:引入一个累计历史梯度信息动量加速SGD。优化公式如下: { w t + 1 = w t − v t v t = α v t − 1 + η t Δ J ( w t , x i s , y i s ) \left\{\begin{array}{l}w_{t+1}=w_{t}-v_{t} \\ v_{t}=\alpha v_{t-1}+\eta_{t} \Delta J\left(w_{t}, x^{i_{s}}, y^{i_{s}}\right)\end{array}\right. {wt+1=wt−vtvt=αvt−1+ηtΔJ(wt,xis,yis) α \alpha α 代表动量大小,一般取为0.9(表示最大速度10倍于SGD)。当前权值的改变受上一次改变的影响,类似加上了惯性。 |
动量优化算法——NAG(Nesterov Accelerated Gradient) | NAG:牛顿加速梯度算法是Momentum变种,更新公式如下: { w t + 1 = w t − v t v t = α v t − 1 + η t Δ J ( w t − α v t − 1 ) \left\{\begin{array}{l}w_{t+1}=w_{t}-v_{t} \\ v_{t}=\alpha v_{t-1}+\eta_{t} \Delta J\left(w_{t}-\alpha v_{t-1}\right)\end{array}\right. {wt+1=wt−vtvt=αvt−1+ηtΔJ(wt−αvt−1) NAG的计算在模型参数施加当前速度之后,可以理解为在Momentum 中引入了一个校正因子。 | 在Momentum中,小球会盲目的跟从下坡的梯度,易发生错误。因此,需要提前知道下降的方向,同时,在快到目标点时速度会有所下降,以不至于超出。NAG用w−alpha*v_{t−1} 来近似当做参数下一步会变成的值,则在计算梯度时,不是在当前位置,而是未来的位置上。(NAG在Tensorflow中与Momentum合并在同一函数tf.train.MomentumOptimizer中,可以通过参数配置启用。) |
自适应学习率优化算法
传统的优化算法将学习率设置为常数或者根据训练次数调节学习率。忽略了学习率其他变化的可能性。
名称 | 优点 | 缺点 | 特点 |
---|---|---|---|
自适应学习率优化算法——AdaGrad | 减少了学习率的手动调节,一般 η 就取 0.01。 | 分母会不断积累,这样学习率就会收缩并最终会变得非常小 | Adagrad方法是通过参数来调整合适的学习率η,对稀疏参数(低频)进行大幅更新和对频繁参数(高频)进行小幅更新。因此,Adagrad方法非常适合处理稀疏数据,很好地提高了 SGD 的鲁棒性。Adagrad缩放每个参数反比于其所有梯度历史平均值总和的平方根。具有代价函数最大梯度的参数相应的有快速下降的学习率,而小梯度的参数在学习率上有相对较小的下降。 θ t + 1 , i = θ t , i − η G t , i i + ϵ ⋅ g t , i \theta_{t+1, i}=\theta_{t, i}-\frac{\eta}{\sqrt{G_{t, i i}+\epsilon}} \cdot g_{t, i} θt+1,i=θt,i−Gt,ii+ϵ η⋅gt,i,其中 g t , i = ∇ θ J ( θ i ) g_{t, i}=\nabla_{\theta} J\left(\theta_{i}\right) gt,i=∇θJ(θi) ,其中G_t 是个对角矩阵, (i,i) 元素就是 t 时刻参数 θ_i 的梯度平方和。 W t + 1 = W t − η 0 ∑ t ′ = 1 t ( g t ′ , i ) + ϵ ⊙ g t , i W_{t+1}=W_{t}-\frac{\eta_{0}}{\sqrt{\sum_{t^{\prime}=1}^{t}\left(g_{t^{\prime}, i}\right)+\epsilon}} \odot g_{t, i} Wt+1=Wt−∑t′=1t(gt′,i)+ϵ η0⊙gt,i |
自适应学习率优化算法——RMSprop | 修改了AdaGrad的梯度累积为指数加权的移动平均,使在非凸下效果更好。 | { E [ g 2 ] t = α E [ g 2 ] t − 1 + ( 1 − α ) g t 2 W t + 1 = W t − η 0 E [ g 2 ] t + ϵ ⊙ g t \left\{\begin{array}{l}E\left[g^{2}\right]_{t}=\alpha E\left[g^{2}\right]_{t-1}+(1-\alpha) g_{t}^{2} \\ W_{t+1}=W_{t}-\frac{\eta_{0}}{\sqrt{E\left[g^{2}\right]_{t}+\epsilon}} \odot g_{t}\end{array}\right. {E[g2]t=αE[g2]t−1+(1−α)gt2Wt+1=Wt−E[g2]t+ϵ η0⊙gt,其中 E[g^2]_t代表前t次的梯度平方的均值。RMSProp的分母取了加权平均,避免学习率越来越低,同时可以自适应调节学习率。 | |
自适应学习率优化算法——Adadelta | 在训练的前中期,表现效果较好,加速效果可以,训练速度更快。 | 在后期,模型会反复地在局部最小值附近抖动。 | 这个算法是对 Adagrad 的改进,和 Adagrad 相比,就是分母的 G 换成了过去的梯度平方的衰减平均值,指数衰减平均值 Δ θ t = − η E [ g 2 ] t + ϵ g t \Delta \theta_{t}=-\frac{\eta}{\sqrt{E\left[g^{2}\right]_{t}+\epsilon}} g_{t} Δθt=−E[g2]t+ϵ ηgt 这个分母相当于梯度的均方根 root mean squared (RMS) ,所以可以用 RMS 简写: Δ θ t = − η R M S [ g ] t g t \Delta \theta_{t}=-\frac{\eta}{R M S[g]_{t}} g_{t} Δθt=−RMS[g]tηgt 其中 E 的计算公式如下,t 时刻的依赖于前一时刻的平均和当前的梯度: E [ g 2 ] t = γ E [ g 2 ] t − 1 + ( 1 − γ ) g t 2 E\left[g^{2}\right]_{t}=\gamma E\left[g^{2}\right]_{t-1}+(1-\gamma) g_{t}^{2} E[g2]t=γE[g2]t−1+(1−γ)gt2 梯度更新规则:此外,还将学习率 η 换成了 RMS[Δθ],这样的话,我们甚至都不需要提前设定学习率了: Δ θ t = − R M S [ Δ θ ] t − 1 R M S [ g ] t g t \Delta \theta_{t}=-\frac{R M S[\Delta \theta]_{t-1}}{R M S[g]_{t}} g_{t} Δθt=−RMS[g]tRMS[Δθ]t−1gt,其中 θ t + 1 = θ t + Δ θ t \theta_{t+1}=\theta_{t}+\Delta \theta_{t} θt+1=θt+Δθt |
自适应学习率优化算法——Adam(adaptive moment estimation) | 这个算法是另一种计算每个参数的自适应学习率的方法。相当于 RMSprop + Momentum。除了像 Adadelta 和 RMSprop 一样存储了过去梯度的平方 v_t 的指数衰减平均值 ,也像 momentum 一样保持了过去梯度 m_t 的指数衰减平均值: m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_{t}=\beta_{1} m_{t-1}+\left(1-\beta_{1}\right) g_{t} mt=β1mt−1+(1−β1)gt v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_{t}=\beta_{2} v_{t-1}+\left(1-\beta_{2}\right) g_{t}^{2} vt=β2vt−1+(1−β2)gt2 如果 m_t 和 v_t 被初始化为 0 向量,那它们就会向 0 偏置,所以做了偏差校正,通过计算偏差校正后的 mt 和 vt 来抵消这些偏差: m ^ t = m t 1 − β 1 t \hat{m}_{t}=\frac{m_{t}}{1-\beta_{1}^{t}} m^t=1−β1tmt v ^ t = v t 1 − β 2 t \hat{v}_{t}=\frac{v_{t}}{1-\beta_{2}^{t}} v^t=1−β2tvt 梯度更新规则: θ t + 1 = θ t − η v ^ t + ϵ m ^ t \theta_{t+1}=\theta_{t}-\frac{\eta}{\sqrt{\hat{v}_{t}}+\epsilon} \hat{m}_{t} θt+1=θt−v^t +ϵηm^t m_t和v_t分别维一阶动量和二阶动量,超参数设定值: β1 = 0.9,β2 = 0.999,ϵ = 10e−8 |
其他优化器(暂不知)
名称 | 优点 | 缺点 | 特点 |
---|---|---|---|
Adamax | - | - | - |
ASGD | - | - | - |
Adam + SGD | - | - | - |
Rprop | - | - | - |
SGD | - | - | - |
LBFGS | - | - | - |
优化效果
几种算法在鞍点和等高线上的表现:
上面两种情况都可以看出,Adagrad, Adadelta, RMSprop 几乎很快就找到了正确的方向并前进,收敛速度也相当快,而其它方法要么很慢,要么走了很多弯路才找到。
但是,自适应优化算法通常都会得到比SGD算法性能更差(经常是差很多)的结果,尽管自适应优化算法在训练时会表现的比较好,因此使用者在使用自适应优化算法时需要慎重考虑!(CVPR的paper全都用的SGD,而不是用理论上的Adam)
损失函数参考文献
优化器参考文献1(主要就是 Michael不想说话 的内容,我只是表格化下)
优化器参考文献2
系统总结深度学习的主要的损失函数和优化器相关推荐
- yolo-mask的损失函数l包含三部分_【AI初识境】深度学习中常用的损失函数有哪些?...
这是专栏<AI初识境>的第11篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. 今天来说说深度学习中常见的损失函数(loss),覆盖分类,回归任务以及生成对抗网络,有了目 ...
- 「AI初识境」深度学习中常用的损失函数有哪些?
https://www.toutiao.com/a6695152940425937411/ 这是专栏<AI初识境>的第11篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. ...
- 【AI初识境】深度学习中常用的损失函数有哪些?
这是专栏<AI初识境>的第11篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. 今天来说说深度学习中常见的损失函数(loss),覆盖分类,回归任务以及生成对抗网络,有了目 ...
- 近期活动盘点:心电数据标注系统和深度学习诊断算法研究、2019年第六届清华大学大数据社会科学讲习班...
想知道近期有什么最新活动?大数点为你整理的近期活动信息在此: 第四期医工结合研讨会:心电数据标注系统和深度学习诊断算法研究 2019年7月11日 7月11日,"医工结合系列研讨会第四期会议: ...
- 成功解决当Win10系统进行深度学习的时候发现系统C盘满了,教你如何正确卸载一些非必要的内容
成功解决当Win10系统进行深度学习的时候发现系统C盘满了,教你如何正确卸载一些非必要的内容 目录 解决问题 解决方法 解决问题 C盘:当Win10系统进行深度学习的时候发现系统C盘满了,教你如何正确 ...
- 深度学习中常见的损失函数
文章来源于AI的那些事儿,作者黄鸿波 2018年我出版了<TensorFlow进阶指南 基础.算法与应用>这本书,今天我把这本书中关于常见的损失函数这一节的内容公开出来,希望能对大家有所帮 ...
- 人工机器:作为归纳系统的深度学习
深度学习为深度神经网络机器学习.07年最先引起注目的是DNN,在语音识别上有突出的表现:深度CNN在机器视觉领域的超常表现引领模式识别领域科学界和工业界的潮流,基于图像数据本身的二维结构天然适合CNN ...
- 深度学习机器学习面试题——损失函数
深度学习机器学习面试题--损失函数 提示:重要的深度学习机器学习面试题,大厂可能会在笔试面试中考 说一下你了解的损失函数? 说说你平时都用过什么损失函数,各自什么特点? 交叉熵函数与最大似然函数的联系 ...
- win10系统的深度学习环境搭建以win10+rtx2060+tensorflow为例/K210的win10系统的深度学习环境搭建/有无显卡均可安装
win10系统的深度学习环境搭建以win10+rtx2060+tensorflow为例 K210的win10系统的深度学习环境搭建 有无显卡均可安装 一 软件准备 1.Anaconda3 软件介绍:A ...
最新文章
- 机器学习填坑:你知道模型参数和超参数之间的区别吗?
- PE文件结构及其加载机制(三)
- 赠书:算法与数据中台“网约车业务实践”
- python 生成排列、组合以及选择
- springboot 添加拦截器之后中文乱码_spring boot 2.x 添加拦截器配置未生效的问题
- 【文末有福利】吸烟致癌,是基因的错吗?
- CSS3实现静态和动态效果
- Ubuntu 安装 Eclipse C/C++开发环境
- php生成随机不重复的数字_PHP生成不重复随机数的几种方法
- cad2008加载 et拓展工具_译文:8个值得推荐的用于前端开发的性能分析工具「渡一教育」...
- gitlab git 安装
- 东风小康为什么是dfsk_重庆造乘用车首次乘坐专列出口欧洲 100辆东风风光ix5抵达德国...
- 让网吧技术变得简单--网吧母盘制作攻略
- matlab 实时信号平滑,信号平滑处理
- MATLAB Simulink Example
- MathWorks 中国
- pr中,视频导入后,视频画面大小显示不完整应该如何解决?
- 【MFC】解决窗口大小改变之后,ComboBox当前选项文字出现蓝色背景
- 经典逻辑推理题(答案)
- HTML+CSS制作的纯静态网页
- shell脚本获取当前时间、1分钟前时间、1小时前时间和1天前时间
- server2003 必要的系统优化和安全设置