[深度学习进阶 - 实操笔记] 损失设计

损失设计

1. SMOOTH_L1:L1与L2的结合。

① L1在任意位置梯度固定,在原点附近容易造成振荡’
② L2对异常值敏感,在原点附近梯度稳定。
③ smoothLoss的梯度在近端稳定,在远端为常数。
smoothL1函数
[深度学习进阶 - 实操笔记] 损失设计_第1张图片

2. FocalLoss

降低简单样本的训练所占权重,提高困难样本训练所占权重。

什么是困难样本?

  • 首先由于一般数据内负样本较多,(一张图片上目标区域可能只占50%其余都是负样本)所以负样本比正样本更容易训练,因此负样本就是简单样本。
  • 在数据极不均衡的情况下,就会出现负样本过多的情况下,正样本实际上就是困难样本。
  • 本身样本中目标在边界上,这类目标也是困难样本。(卷积更加关注图片内部信息,而更少关注边界信息)
  • 一些样本,受到场景光线噪声等干扰因素影响,这些也算困难样本。

FocalLoss就是困难样本训练,它的目的就是:
① 控制正负样本的权重;
② 控制容易分类和难分类样本的权重;

具体如何控制权重可看下面这个博主讲的。(可以人为设置,也可以使用CE算法)
Focal loss详解及其实现

3. TripletLoss(三元组损失)

从指标上分析目标分类模型的好坏程度,实际上就是要看类内距和类间距离,我们是希望类内距(同种类别之间的距离)越近越好,类间距(不同类别之间的距离)越远越好
TripletLoss是通过对一类样本设置一个锚点,正样本(同类)希望离锚点越近越好,负样本(不同类)越远越好。
但是这个损失不好训练,因为在神经网络学习过程中,困难样本的数据是在实时更新的。因此网络训练过程也要不断更新困难样本,使得神经网络的训练效率变低。
[深度学习进阶 - 实操笔记] 损失设计_第2张图片
TripletLoss详解。

4. CenterLoss

CenterLoss的本质也是通过缩小类内距,扩大类间距的方法。

基本思想:每个类别定义一个中心,使得同类别的样本往该中心靠拢,不同类的样本往自己的中心靠拢(也就会离别的中心更远)。

问题:如何确定每个类别的中心?
将类别的中心当成神经网络学习的参数,在反向传播的过程中自动学习更新。

centerLoss可视化:以MNIST数据集为例。
(代码在网上找一下就有了)
二维可视化,(训练的时间很短效果不是很好)
[深度学习进阶 - 实操笔记] 损失设计_第3张图片
三维可视化:
[深度学习进阶 - 实操笔记] 损失设计_第4张图片

5. softmax

(1) A-softmax
(2) arcface
(3) AM-softmax

你可能感兴趣的:(深度学习,深度学习)