损失函数&优化器总结

损失函数&优化器总结

优化器

SGD

带动量的随机梯度下降SGDM是最常用的方法。

torch.optim.SGD(params, lr=xxx, momentum=0, dampening=0, weight_decay=0, nesterov=False)

SGD的特点:由于积累之前的动量来替代真正的梯度,下降初期时,使用上一次参数更新,下降方向一致,乘上较大的μ能够进行很好的加速。在梯度方向发生改变时,μ能减少更新,抑制振荡,从而加快收敛。

Adagrad

自适应梯度算法是为了自适应调整学习率,给学习率加上了一项分母。

torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0, initial_accumulator_value=0, eps=1e-10)

特点:学习率随着梯度值的累加而变小,起到了学习率减少的作用;中后期由于分母的累积会使得学习率很小,可能使得训练提前结束。(较少使用)

RMSprop
torch.optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=False)

特点:训练初中期,加速效果不错,很快训练,后期,梯度小学习率变大,可能会反复在局部最小值附近抖动,也可能跳出局部最小值找到更好的解。

Adadelta
torch.optim.Adadelta(params, lr=1.0, rho=0.9, eps=1e-06, weight_decay=0)

AdaDelta算法没有学习率超参数,它通过使用有关自变量更新量平方的指数加权移动平均的项来替代RMSProp算法中的学习率。

Adam
torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False)

Adam是RMSProp的动量版,原来的梯度变成带动量的梯度,此外还为了消除刚开始没有梯度累计时的偏差,除了一项随时间变大的式子。缺点:当训练到后期的时候,梯度通常都是很小的,少量有用的大梯度会被大量无用的梯度淹没

Adamax
torch.optim.Adamax(params, lr=0.002, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)

Adamax是Adam的一种变体,此方法对分母部分进行了改进,Adam单个权重的更新规则是将其梯度与当前和过去梯度的L2范数成反比例缩放,这里泛化到基于Lp范数的更新规则,虽然p的值较大会使得数值上变得不稳定,但令p趋于无穷会得出一个稳定和简单的算法。经过推导,分母的更新变成了max(),增加了一个学习率上限的概念,与原来的gt2不同。与AMSgrad有一定相似之处。

小结

目前较为出名的模型,YOLO、MaskRCNN、ResNet等都采用SGDM,Transformer、Bert、Big-GAN、MEMO等都采用的Adam。

损失函数

简单来说,损失函数是一种评估算法对数据集建模效果的方法,它是机器学习算法参数的数学函数。

  1. 回归:MSE(均方误差)、MAE(平均绝对误差)、哈伯损失
  2. 分类:二元交叉熵、分类交叉熵
  3. 自动编码器:KL 散度
  4. GAN:鉴别器损失、Minmax GAN 损失
  5. 物体检测:焦点损失
  6. 词嵌入:三重损失
回归损失
MSE

均方误差 (MSE) 是最简单和最常见的损失函数,要计算 MSE,您需要获取实际值和模型预测值之间的差异,对其进行平方,然后在整个数据集上对其进行平均。

优点:

  1. 易于解释。
  2. 总是因方而微分。
  3. 只有一个局部最小值。

缺点:

  1. 方格中的误差单位。因为没有正确理解广场中的单位。

  2. 对异常值不稳健

    注意:在最后一个神经元的回归中使用线性激活函数。

MAE

平均绝对误差(MAE)也是最简单的损失函数,要计算 MAE,您需要获取实际值和模型预测值之间的差异,然后在整个数据集中对其进行平均。

优点

  1. 直观简单
  2. Error Unit 与输出列相同。
  3. 对异常值具有鲁棒性

缺点

  1. 不能直接使用梯度下降,可以进行次梯度计算。
    注意:在最后一个神经元的回归中使用线性激活函数。
胡伯损失

在统计学中,Huber 损失是一种用于稳健回归的损失函数,它对数据中的异常值的敏感性低于平方误差损失。

优点

  1. 对异常值具有鲁棒性
  2. 它位于MAE和MSE之间。

缺点

  1. 它的主要缺点是关联复杂度,为了最大限度地提高模型精度,还需要优化超参数 δ,这会增加训练的要求。
分类损失
二元交叉熵/对数损失

它用于像两个类二元分类问题。二元交叉熵将每个预测概率值,可能是 0 或 1 ,与实际类输出进行比较。然后它根据与期望值的距离计算惩罚概率的分数,这意味着离实际值有多近或多远。

优点

  1. 成本函数是微分函数。

缺点

  1. 多个局部最小值
  2. 不直观

注意 :在最后一个神经元的分类中使用 sigmoid 激活函数。

分类交叉熵

分类交叉熵用于多类分类问题,也用于 softmax 回归。

注意:在最后一个神经元的多类分类中使用 softmax 激活函数。

何时使用分类交叉熵和稀疏分类交叉熵?

如果目标列为 0 0 1、0 1 0、1 0 0 等类似的热编码,则使用分类交叉熵。如果目标列为 1,2,3,4….n 等类似的数字编码,则使用稀疏分类交叉熵。

哪个更快?

稀疏分类交叉熵比分类交叉熵快。

posted @ 2022-11-18 16:32  飀飀  阅读(177)  评论(0编辑  收藏  举报