在深度学习大家族里,有两个常见的概念:一个是优化器,另一个是损失函数。今天我们就来谈谈这两者以及它们在真实场景里的使用。
优化器
优化器指的是让模型怎么学习。它就像一个教练,指导模型怎么更新学习率和权重。常见的优化器有指数加权平均、Momentmum、Adagrad、RMStrop、Adam算法。我接下来就按照平时模型创建训练中的使用频率依次介绍:
1、Momentmum算法又叫动量算法

假设:权重 β 为 0.9,例如:
- 第一次梯度值:D1 = S1 = W1
- 第二次梯度值:D2=S2 = 0.9 * S1 + W2 * 0.1
- 第三次梯度值:D3=S3 = 0.9 * S2 + W3 * 0.1
- 第四次梯度值:D4=S4 = 0.9 * S3 + W4 * 0.1
该算法对平缓、鞍点的缓解办法:
2、Adagrad算法
AdaGrad 通过对不同的参数分量使用不同的学习率,AdaGrad 的学习率总体会逐渐减小。
原理:AdaGrad 通过对不同的参数分量使用不同的学习率,AdaGrad 的学习率总体会逐渐减小。
计算步骤:
1.初始化学习率 α、初始化参数 θ、小常数 σ = 1e-6
2.初始化梯度累积变量 s = 0
3.从训练集中采样 m 个样本的小批量,计算梯度 g
4.累积平方梯度 s = s + g ⊙ g,⊙ 表示各个分量相乘
学习率 α 的计算公式如下:


其中η是学习率,ϵ是为了维持数值稳定性而添加的常数,1e^-6。这里开方、除法和乘法的运算都是按元素运算的。这些按元素运算使得目标函数自变量中每个元素都分别拥有自己的学习率。
重复2-4步骤,即可实现网络训练
Adagrad的缺点:可能会使学习率过早过量得降低,导致在模型训练后期学习率变得过小接近0,较难获得最优解。
3、RMStrop算法
该算法是对Adagrad算法的优化。
算法的计算过程:
初始化学习率 α、初始化参数 θ、小常数 σ = 1e-6
初始化参数 θ
初始化梯度累计变量 s
从训练集中采样 m 个样本的小批量,计算梯度 g
使用指数移动平均累积历史梯度,公式如下:

学习率和参数的计算公式:

4、Adam算法
Adam算法是对Momentmum和RMStrop两个算法的优化,结合两者的优点。
梯度更新方式: 使⽤梯度的指数加权平均。
学习率更新方式: 使⽤梯度平⽅的指数加权平均。
损失函数
损失函数是让模型知道学习什么。它就像一个考官。常见的损失函数有L1、L2损失、MSE损失、CrossEntropy损失函数。
看到CrossEntropy就应该条件反射想到这个是专用于分类任务,而
1、L1-Loss
L1损失又叫Mean absolute loss(MAE)MAE损失。,是以绝对误差作为距离。
损失函数公式:

图像:

由于L1 loss具有稀疏性,为了惩罚较大的值,因此常常将其作为正则项添加到其他loss中作为约束。比如用于过拟合的缓解。
缺点:L1 loss的最大问题是梯度在零点不平滑,导致会跳过极小值。
2、MSE-Loss
又叫L2损失或欧氏距离,它以误差的平方和的均值作为距离。
计算公式:

图像:

缺点:容易爆炸。
3、CrossEntropy-Loss
3.1、又叫交叉熵损失
在多分类任务中它将原始成绩logits转化为概率。因为它中间有层需要softmax激活函数,所以又可以叫softmax损失。

1.y 是样本 x 属于某一个类别的真实概率。
2.而 f(x) 是样本属于某一类别的预测分数。
3.S 是 softmax 激活函数,将属于某一类别的预测分数转换成概率。
4.L 用来衡量真实值 y 和预测值 f(x) 之间差异性的损失结果。
3.2、根据具体分类任务的不同,比如二分类任务。会将其中的softmax换成sigmoid。同时这就导致了整个算法的改变。这个算法就优化成了BCE_Loss
4、Smooth-L1
smooth L1说的是光滑之后的L1。损失函数公式:

其中:𝑥 = f(x) − y 为真实值和预测值的差值。
从下图中可以看出,该函数实际上就是一个分段函数
4.1 在[-1,1]之间实际上就是L2损失,这样解决了L1的不光滑问题 4.2 在[-1,1]区间外,实际上就是L1损失,这样就解决了离群点梯度爆炸的问题
图像:

损失函数与优化器的关系
只有损失函数与优化器搭配好,才能使模型从数据集中学习到预期的效果。针对不同的任务场景:
回归任务:
L1_Loss/MSE_Loss/smoothL1_Loss+任意优化器
分类任务:
CrossEntropyLoss+任意优化器(RMSProp/Adam/SGD)
