常用损失函数-交叉熵损失函数、MAE、MSE、smoothL1

常见的损失函数

损失函数:衡量模型参数的质量的函数,衡量方式是比较网络输出和真实输出的差异。ybar与y 之间的差异
损失函数、代价函数、目标函数、误差函数 虽然叫法不同,但都是一样的。

1、分类任务

在分类任务中最多使用的是交叉熵损失函数,下面分多分类和二分类来讨论交叉熵

1.1 多分类任务

在多分类任务中,使用softmax将logits转换为概率的形式,所以多分类的交叉熵损失也叫做softmax损失
在这里插入图片描述
交叉熵损失:最小化正确类别所对应的预测概率的对数的负值

在tf.keras 中使用CategoricalCrossentropy
代码实现:

#交叉熵损失
import tensorflow as tf
#设置真实值和预测值
y_true = [[0,1,0],[0,0,1]]
y_pre1 = [[0.05,0.9,0.05],[0.3,0.2,0.5]]
y_pre2 = [[0.05,0.9,0.05],[0.05,0.05,0.9]]
#实例化交叉熵损失
cce = tf.keras.losses.CategoricalCrossentropy()
#计算损失结果
cce(y_true,y_pre1)  #输出结果为0.39925
cce(y_true,y_pre2)  #输出结果为0.10536

在这里插入图片描述
越接近真实值,交叉熵损失值越小

1.2 二分类任务

二分类任务中,不再使用softmax激活函数,而是使用sigmoid激活函数,所以损失函数也相应调整
在这里插入图片描述
在tf.keras 中使用BinaryCrossentropy()

import tensorflow as tf
#设置真实值和预测值
y_true = [[0],[1]]
y_pre1 = [[0.4],[0.6]]
y_pre2 = [[0.1],[0.9]]
#实例化交叉熵损失
bce = tf.keras.losses.BinaryCrossentropy()
#计算损失结果
bce(y_true,y_pre1)  #输出结果为0.5108254
bce(y_true,y_pre2)  #输出结果为0.10536041

同样地,越接近真实值,交叉熵损失值越小

2、 回归任务

2.1 MAE损失

MAE损失也称为L1 Loss ,是以绝对误差作为距离
特点:L1 Loss 具有稀疏性,为了惩罚较大的值,常常将其作为正则项添加到其他loss中作为约束,最大问题是梯度在零点不平滑,导致会跳过极小值

在这里插入图片描述

在tf.keras 中使用MeanAbsoluteError()

import tensorflow as tf
#设置真实值和预测值
y_true = [[0.],[1.]]
y_pre1 = [[1.],[0.]]
y_pre2 =  [[0.],[1.]]
#实例化MAE损失
mae = tf.keras.losses.MeanAbsoluteError()
#计算损失结果
mae(y_true,y_pre1)  #输出结果为1.0
mae(y_true,y_pre2)  #输出结果为0
2.2 MSE损失

MSE损失又称为L2 loss ,欧式距离,以误差的平方和作为距离
L2 loss 也称为正则项,当预测值和目标值相差很大时,梯度容易爆炸
在这里插入图片描述
在tf.keras 中使用MeanSquaredError()

import tensorflow as tf
#设置真实值和预测值
y_true = [[0.],[1.]]
y_pre1 = [[1.],[0.]]
y_pre2 =  [[0.],[1.]]
#实例化MAE损失
mae = tf.keras.losses.MeanSquaredError()
#计算损失结果
mae(y_true,y_pre1)  #输出结果为1.0
mae(y_true,y_pre2)  #输出结果为0

越接近真实值,损失函数越小

L2损失用在正则化

2.3 smooth L1损失

将L!和L2损失结合起来,smooth L1损失是最常用的损失函数
下面公式中,x指真实值与预测值之间的差值
在这里插入图片描述
实际上是一个分段函数,[-1,1]区间之间是L2损失,解决了L1的不光滑问题,在[-1,1]区间之外是L1损失,解决了离群点梯度爆炸的问题

在tf.keras 中使用Huber()

import tensorflow as tf
#设置真实值和预测值
y_true = [[0.],[1.]]
y_pre = [[0.2],[0.6]]
#实例化MAE损失
mae = tf.keras.losses.Huber()
#计算损失结果
mae(y_true,y_pre)  #输出结果为0.0499

深度学习一般用于分类任务

总结

多分类问题用多分类的交叉熵函数
二分类问题用二分类的交叉熵函数
回归问题用smooth L1损失

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值