常见的损失函数学习随笔

常见的损失函数学习随笔

  • 学习目标
  • 知道分类任务的损失函数
  • 知道回归任务的损失函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uskl1Q0K-1645090131995)(F:\Python学习\129黑马人工智能2.0课程\学习随笔\阶段4计算机视觉与图像处理\深度学习与CV随笔\第三章深度神经网络随笔\笔记图片\image-20200730153842351.png)]

在深度学习中, 损失函数是用来衡量模型参数的质量的函数, 衡量的方式是比较网络输出和真实输出的差异,损失函数在不同的文献中名称是不一样的,主要有以下几种命名方式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yaRp8aF8-1645090131996)(F:\Python学习\129黑马人工智能2.0课程\学习随笔\阶段4计算机视觉与图像处理\深度学习与CV随笔\第三章深度神经网络随笔\笔记图片\image-20200730154850183.png)]

分类任务

在深度学习的分类任务中使用最多的是交叉熵损失函数,所以在这里我们着重介绍这种损失函数。

多分类任务

在多分类任务通常使用softmax将logits转换为概率的形式,所以多分类的交叉熵损失也叫做softmax损失,它的计算方法是:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-53LHemZl-1645090131997)(F:\Python学习\129黑马人工智能2.0课程\学习随笔\阶段4计算机视觉与图像处理\深度学习与CV随笔\第三章深度神经网络随笔\笔记图片\image-20200730161303768.png)]

其中,y是样本x属于某一个类别的真实概率,而f(x)是样本属于某一类别的预测分数,S是softmax函数,L用来衡量p,q之间差异性的损失结果。

例子:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BL7jzwdI-1645090131998)(F:\Python学习\129黑马人工智能2.0课程\学习随笔\阶段4计算机视觉与图像处理\深度学习与CV随笔\第三章深度神经网络随笔\笔记图片\image-20200730160805389.png)]

上图中的交叉熵损失为:

从概率角度理解,我们的目的是最小化正确类别所对应的预测概率的对数的负值,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AnLbspU3-1645090131999)(F:\Python学习\129黑马人工智能2.0课程\学习随笔\阶段4计算机视觉与图像处理\深度学习与CV随笔\第三章深度神经网络随笔\笔记图片\image-20200730161746110.png)]

在tf.keras中使用CategoricalCrossentropy实现,如下所示:

# 导入相应的包
import tensorflow as tf
# 设置真实值和预测值
y_true = [[0, 1, 0], [0, 0, 1]]
y_pred = [[0.05, 0.95, 0], [0.1, 0.8, 0.1]]
# 实例化交叉熵损失
cce = tf.keras.losses.CategoricalCrossentropy()
# 计算损失结果
cce(y_true, y_pred).numpy()

结果为:

1.176939

二分类任务

在处理二分类任务时,我们不在使用softmax激活函数,而是使用sigmoid激活函数,那损失函数也相应的进行调整,使用二分类的交叉熵损失函数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ABZ9Slnd-1645090132000)(F:\Python学习\129黑马人工智能2.0课程\学习随笔\阶段4计算机视觉与图像处理\深度学习与CV随笔\第三章深度神经网络随笔\笔记图片\image-20200730162332710.png)]

其中,y是样本x属于某一个类别的真实概率,而y^是样本属于某一类别的预测概率,L用来衡量真实值与预测值之间差异性的损失结果。

在tf.keras中实现时使用BinaryCrossentropy(),如下所示:

# 导入相应的包
import tensorflow as tf
# 设置真实值和预测值
y_true = [[0], [1]]
y_pred = [[0.4], [0.6]]
# 实例化二分类交叉熵损失
bce = tf.keras.losses.BinaryCrossentropy()
# 计算损失结果
bce(y_true, y_pred).numpy()

结果为:

0.5108254

回归任务

回归任务中常用的损失函数有以下几种:

MAE损失

Mean absolute loss(MAE)也被称为L1 Loss,是以绝对误差作为距离:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VINCXrKI-1645090132000)(笔记图片/image-20200730165058491.png)]

曲线如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XrFMOVAb-1645090132001)(笔记图片/image-20200730165142553.png)]

特点是:由于L1 loss具有稀疏性,为了惩罚较大的值,因此常常将其作为正则项添加到其他loss中作为约束。L1 loss的最大问题是梯度在零点不平滑,导致会跳过极小值。

在tf.keras中使用MeanAbsoluteError实现,如下所示:

# 导入相应的包
import tensorflow as tf
# 设置真实值和预测值
y_true = [[0.], [0.]]
y_pred = [[1.], [1.]]
# 实例化MAE损失
mae = tf.keras.losses.MeanAbsoluteError()
# 计算损失结果
mae(y_true, y_pred).numpy()

结果为:

1.0

MSE损失

Mean Squared Loss/ Quadratic Loss(MSE loss)也被称为L2 loss,或欧氏距离,它以误差的平方和作为距离:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JhJ14ZTZ-1645090132002)(笔记图片/image-20200730165213969.png)]

曲线如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KgF2p3ez-1645090132002)(笔记图片/image-20200730165404271.png)]

特点是:L2 loss也常常作为正则项。当预测值与目标值相差很大时, 梯度容易爆炸。

在tf.keras中通过MeanSquaredError实现:

# 导入相应的包
import tensorflow as tf
# 设置真实值和预测值
y_true = [[0.], [1.]]
y_pred = [[1.], [1.]]
# 实例化MSE损失
mse = tf.keras.losses.MeanSquaredError()
# 计算损失结果
mse(y_true, y_pred).numpy()

结果为:

0.5

smooth L1 损失

Smooth L1损失函数如下式所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-heMQ8nju-1645090132003)(笔记图片/image-20200730170635889.png)]

其中:𝑥=f(x)−y 为真实值和预测值的差值。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2lz8HUGM-1645090132004)(笔记图片/image-20200730171108887.png)]

从上图中可以看出,该函数实际上就是一个分段函数,在[-1,1]之间实际上就是L2损失,这样解决了L1的不光滑问题,在[-1,1]区间外,实际上就是L1损失,这样就解决了离群点梯度爆炸的问题。通常在目标检测中使用该损失函数。

在tf.keras中使用Huber计算该损失,如下所示:

# 导入相应的包
import tensorflow as tf
# 设置真实值和预测值
y_true = [[0], [1]]
y_pred = [[0.6], [0.4]]
# 实例化smooth L1损失
h = tf.keras.losses.Huber()
# 计算损失结果
h(y_true, y_pred).numpy()

结果:

0.18

总结

  • 知道分类任务的损失函数

多分类的交叉熵损失函数和二分类的交叉熵损失函数

  • 知道回归任务的损失函数

MAE,MSE,smooth L1损失函数

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值