平方损失函数与交叉熵损失函数

本文解析了机器学习中的两种常见损失函数——平方损失函数与交叉熵损失函数。分别介绍了它们的定义、应用场景及区别,帮助读者更好地理解如何选择合适的损失函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 前言

在机器学习中学习模型的参数是通过不断损失函数的值来实现的。对于机器学习中常见的损失函数有:平方损失函数与交叉熵损失函数。在本文中将讲述两者含义与响应的运用区别。

2. 平方损失函数

平方损失函数较为容易理解,它直接测量机器学习模型的输出与实际结果之间的距离。这里可以定义机器学习模型的输出为 y i y_i yi,实际的结果为 t i t_i ti,那么平方损失函数可以被定义为:
L ( x ) = 1 N ∑ i = 1 N ( y i − t i ) 2 L(x)=\frac{1}{N}\sum_{i=1}^{N}{(y_i-t_i)^2} L(x)=N1i=1N(yiti)2
对于这样的定义简单直接,能够很清楚的解释损失函数的含义,但是对于交叉熵损失函数其含义就不是那么好理解了,接下来的内容将具体讲解。

3. 交叉熵损失函数

3.1 交叉熵损失函数定义

交叉熵(Cross Entry)是用来评估当前训练得到的概率分布与真实分布的差异情况,减少交叉熵损失就是在提高模型的预测准确率。其离散函数形式
H ( p , q ) = − ∑ x p ( x ) l o g ( q ( x ) ) H(p,q)=-\sum_x{p(x)log(q(x))} H(p,q)=xp(x)log(q(x))
参数解释: p ( x ) p(x) p(x)是真实分布的概率, q ( x ) q(x) q(x)是模型通过数据计算出来的概率估计。
例如在二分类问题中,对于 y i y_i yi的取值无非是1或是0,表示为 y i ∈ { 1 , 0 } y_i\in{\{1, 0\}} yi{1,0}
y i = 1 y_i=1 yi=1时:
P ( y i = 1 ∣ x i ) = 1 , P ( y + i = 0 ∣ x i ) = 0 P(y_i=1|x_i)=1, P(y+i=0|x_i)=0 P(yi=1xi)=1,P(y+i=0xi)=0
反之当 y i = 0 y_i=0 yi=0时:
P ( y i = 1 ∣ x i ) = 0 , P ( y + i = 0 ∣ x i ) = 1 P(y_i=1|x_i)=0, P(y+i=0|x_i)=1 P(yi=1xi)=0,P(y+i=0xi)=1
对于模型的估计概率,可以表示为:
P ( y i = 1 ∣ x i ) = y i , , P ( y + i = 0 ∣ x i ) = 1 − y i , P(y_i=1|x_i)=y_{i}^{,}, P(y+i=0|x_i)=1-y_i^, P(yi=1xi)=yi,,P(y+i=0xi)=1yi,
因而,对于该二分类模型其交叉熵损失函数可以定义为:
H ( p , q ) = 1 N ∑ i = 0 N − y i l o g y i , − ( 1 − y i ) l o g ( 1 − y i , ) H(p,q)=\frac{1}{N}\sum_{i=0}^{N}-y_ilogy_i^,-(1-y_i)log(1-y_i^,) H(p,q)=N1i=0Nyilogyi,(1yi)log(1yi,)

3.2 交叉熵损失函数信息论角度理解

信息熵是在结果出来之前对可能产生的信息量的期望。相对熵表示两个概率分布的差异,即KL散度。当两个分布相同时,相对熵的值为 0 0 0,其余情况下都大于 0 0 0
D ( p ∣ ∣ q ) = ∫ x p ( x ) l o g p ( x ) q ( x ) = − ∫ x p ( x ) l o g q ( x ) d x − ( − ∫ x p ( x ) l o g p ( x ) d x ) D(p||q)=\int_xp(x)log\frac{p(x)}{q(x)}=−\int_xp(x)logq(x)dx−(−\int_xp(x)logp(x)dx) D(pq)=xp(x)logq(x)p(x)=xp(x)logq(x)dx(xp(x)logp(x)dx)
前者是交叉熵,而后者是真实分布的信息熵。由于真实分布是固定的,所以信息熵的值是固定的。当交叉熵越小,相对熵则越小,估计的概率分布 q ( x ) q(x) q(x)越接近真实的分布 p ( x ) p(x) p(x)

3.3 训练与测试集正样本比例不同的影响

交叉熵最小化等价于似然函数最大化。假设我们对每个标签为正例的样本都预测一个固定的概率,根据似然函数最大化,得到
y i , = 正 样 本 数 量 全 部 样 本 数 量 y_i^,=\frac{正样本数量}{全部样本数量} yi,=
如果测试集的正例的比例也接近这个值,那么在该假设情况下我们得到的损失函数最小。
但是,如果训练集和测试集的正例比例不同,那么模型越复杂,越接近临界值的样本(越难判断结果的样本)就越容易受到训练集中正例比例的影响而偏离真实分布。

3.4 正样本比例不同的解决办法

为了解决训练集与测试集中正样本比例不一致的问题,常用到的解决办法就是抽样,假设正样本以 α \alpha α的比例进行抽样,而负样本以 β \beta β的比例进行抽样,则最后的交叉熵损失函数可以表示为:
H ( p , q ) = 1 N ∑ i = 0 N − α y i l o g y i , − β ( 1 − y i ) l o g ( 1 − y i , ) H(p,q)=\frac{1}{N}\sum_{i=0}^{N}-\alpha y_ilogy_i^,-\beta(1-y_i)log(1-y_i^,) H(p,q)=N1i=0Nαyilogyi,β(1yi)log(1yi,)

4. 两种损失函数的区别

平方损失函数与交叉熵损失函数都可以用作为机器学习模型的目标函数,但是在何种场景下使用何种损失函数才是较为合理的选择呢?一般来讲,如果学习模型致力于解决的问题是回归问题的连续变量,那么使用平方损失函数较为合适;若是对于分类问题的离散Ont-Hot向量,那么交叉熵损失函数较为合适

4.1 直观理解

从平方损失函数运用到多分类场景下,可知平方损失函数对每一个输出结果都十分看重,而交叉熵损失函数只对正确分类的结果看重。例如,对于一个多分类模型其模型结果输出为 ( a , b , c ) (a,b,c) (a,b,c),而实际真实结果为 ( 1 , 0 , 0 ) (1, 0, 0) (1,0,0)。则根据两种损失函数的定义其损失函数可以描述为:
L S = ( a − 1 ) 2 + ( b − 0 ) 2 + ( c − 0 ) 2 = ( a − 1 ) 2 + b 2 + c 2 L_S=(a-1)^2+(b-0)_2+(c-0)_2=(a-1)^2+b^2+c^2 LS=(a1)2+(b0)2+(c0)2=(a1)2+b2+c2
L C = − 1 ∗ l o g a − 0 ∗ l o g b − 0 ∗ l o g c = − l o g a L_C=-1*loga-0*logb-0*logc=-loga LC=1loga0logb0logc=loga
从上述的结果中可以看出,交叉熵损失函数只和分类正确的预测结果有关。而平方损失函数还和错误的分类有关,该损失函数除了让正确分类尽量变大,还会让错误分类都变得更加平均,但实际中后面的这个调整使没必要的。但是对于回归问题这样的考虑就显得重要了,因而回归问题上使用交叉熵并不适合。

4.2 理论角度分析

平方数损失函数假设最终结果都服从高斯分布,而高斯分布实际上是一个连续变量,并不是一个离散变量。如果假设结果变量服从均值 u u u,方差为 σ \sigma σ,那么利用最大似然法就可以优化它的负对数似然,公式最终变为了:
= m a x ∑ i N [ − 1 2 l o g ( 2 π σ 2 ) − ( t i − y ) 2 σ 2 ] =max\sum_i^N[-\frac{1}{2}log(2\pi\sigma^2)-\frac{(t_i-y)}{2\sigma^2}] =maxiN[21log(2πσ2)2σ2(tiy)]
出去与 y y y无关的项目,最后剩下的就是平方损失函数的形式。

5. Reference

  1. Quora Question Pairs整理 - 理解交叉熵损失函数
### 均方差损失函数 (MSE) 交叉熵损失函数 (CrossEntropy) #### 定义 均方误差(Mean Squared Error, MSE)是一种衡量预测值真实值之间差异的常见方法。具体来说,它计算的是预测值和实际观测值之间的平均平方差[^1]。 对于二分类或多分类问题,交叉熵损失函数则更为适用。该函数通过测量两个概率分布间的距离来评估模型性能;其中一个分布代表数据的真实标签,另一个则是由模型给出的概率估计[^2]。 #### 数学表达式 - **MSE**: \[ \text{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2 \] 其中 \( y_i \) 表示第 i 个样本的实际输出,\( \hat{y}_i \) 是对应的预测输出,而 n 则表示总的样本数量。 - **Binary Cross Entropy** (适用于二元分类) \[ L(y,\hat{y})=-\left[y\log(\hat{y})+(1-y)\log(1-\hat{y})\right]\] 这里 \( y \in {0,1} \),即为真实的类别标签;\( \hat{y} \) 属于区间 [0,1], 表明属于正类别的可能性大小。 - **Categorical Cross Entropy** (用于多分类情况) 如果存在 K 类,则可以写成如下形式: \[L=\sum _{{k=1}}^{K}-t_k\ln(p_k),\quad {\mbox{where }}p=(p_1,...,p_K){\mbox{ and }}t=(t_1,...,t_K).\] 此处 \( t_k \) 是 one-hot 编码后的真值向量,\( p_k \) 对应着预测得到的概率向量中的各个分量[^3]. #### 应用场景对比 - 当处理回归任务时,比如房价预测、股票价格走势分析等连续数值型变量建模的情况下,更倾向于选用 MSE 或者其他类似的度量方式作为评价标准。 - 而面对分类问题尤其是涉及到多个互斥选项的选择时(如图像识别、自然语言处理等领域内的文本分类),由于其能够更好地反映不同类别间的信息差距并促进更快收敛速度的缘故,因此往往优先考虑使用交叉熵损失函数来进行训练过程中的优化工作[^4]. 此外,在某些特殊情况下即使同样是做分类任务也可能因为特定需求偏向某一方。例如当遇到极度不平衡的数据集时可能需要调整权重使得两种类型的错误成本不对称从而影响最终选择哪种损失函数更加合适[^5]. ```python import numpy as np from sklearn.metrics import mean_squared_error from tensorflow.keras.losses import BinaryCrossentropy, CategoricalCrossentropy # Example of calculating losses using Python code snippets: def mse_loss(true_values, predicted_values): """Calculate Mean Squared Error loss.""" return mean_squared_error(true_values, predicted_values) binary_cross_entropy = BinaryCrossentropy() categorical_cross_entropy = CategoricalCrossentropy() true_binary_labels = np.array([0., 1.]) predicted_probabilities_for_binaries = np.array([[0.9], [0.1]]) print(f"MSE Loss: {mse_loss(true_binary_labels, predicted_probabilities_for_binaries.flatten()):.4f}") print(f"Binary Cross Entropy Loss: {binary_cross_entropy(true_binary_labels, predicted_probabilities_for_binaries).numpy():.4f}") true_categorical_labels = np.array([[1., 0., 0.], [0., 1., 0.]]) # One hot encoded labels. predicted_class_probs = np.array([[0.8, 0.1, 0.1], [0.2, 0.7, 0.1]]) print(f"Categorical Cross Entropy Loss: {categorical_cross_entropy(true_categorical_labels, predicted_class_probs).numpy():.4f}") ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值