0%

损失函数

损失函数

平方误差损失

每个训练样本的平方误差损失(也称为L2 Loss)是实际值和预测值之差的平方

img

相应的成本函数是这些平方误差的平均值(MSE),它是一个二次函数(形式为ax^2+bx+c),并且值大于等于0,。二次函数具有全局最小值,由于没有局部最小值,所以永远不会陷入它。因此,可以保证梯度下降将收敛到全局最小值(如果完全收敛的话)

MSE损失函数通过使用平方误差来惩罚模型,有一个缺点,把一个比较大的数的平方会使它变得更大。但有一点需要注意,这个属性使MSE成本函数对异常值的健壮性降低。因此,如果我们的数据容易出现许多的异常值,则不应该使用它

绝对误差损失

每个训练样本的绝对误差是预测值和实际值之间的距离,与符号无关。绝对误差也称为L1 Loss

img

成本是这些绝对误差的平均值(MAE)。与MSE相比,MAE成本对异常值更加健壮。但是,在数学方程中处理绝对或模数运算符并不容易

Huber损失

结合了MSE和MAE的最佳特性。对于较小的误差,他是二次的,否则是线性的(对于其梯度也是如此)。Huber损失需要确定δ\delta参数

img

Huber损失对于异常值比MSE更强。它用于稳健回归,M估计法(M-estimator)和可加模型(additive model)。Huber损失的变体也可用于分类。

二分类损失函数

给分类基于应用于输入特征向量的规则则

二元交叉熵损失

熵是用来表示无序性和不确定性。测量具有芥蓝菜分布P(X)P(X)的随机变量X

img

负号使用于最后结果为正数

概率分布的熵值越大,表明分布的不确定性越大。同样,一个较小的值代表一个更确定的分布

这使得二元交叉熵适合作为损失函数(你希望最小化其值)。我们对输出概率p的分类模型使用二元交叉熵损失

元素属于第1类(或正类)的概率=p

元素属于第0类(或负类)的概率=1-p

然后,输出标签y(可以取值0和1)的交叉熵损失和预测概率p定义为:

img

这也称为Log-Loss(对数损失)。为了计算概率p,可以使用sigmoid函数。其中,z是输入功能的函数

img

sigmoid函数的范围是[0, 1]这使得它适合于计算概率

img

Hinge损失

Hinge损失主要用于带有类标签-1和1的支持向量机(SVM)。因此,请确保将数据集中“恶性”类标签从0更改为-1

Hinge损失不仅会惩罚错误的预测,还会惩罚不自信的正确预测

数据对(x, y)的Hinge损失如图:

img

Hinge损失简化了SVM的数学运算,同时最大化了损失(与对数损失(Log-Loss)相比)。当我们想要做实时决策而不是高度关注准确性时,就可以使用它

多分类损失函数

多分类交叉熵

多分类交叉熵损失是二元交叉熵损失的退矿。输入向量XiX_i和相应的ont-hot编码目标向量YiY_i的损失是:

img

使用softmax函数来找到概率PijP_{ij}

img

softmax层是接在神经网络的输出层前。Softmax层必须与输出层具有相同数量的节点

img

最后,我们的输出是具有给定输入的最大概率的类别

KL散度

KL散度是概率分布与另一个概率分布区别的度量。KL散度为零表示分布相同

img

注意,发散函数不对称

与多分类分类相比,KL散度更常用于逼近复杂函数。我们在使用变分自动编码器(VAE)等深度生成模型时经常使用KL散度

Pytorch实战

损失函数的基本用法

1
2
criterion = LossCriterion()	# 构造函数有自己的参数
loss = criterion(x, y) # 调用标准时也有参数

得到的loss结果已经对mini-batch数量取了平均值