常见损失函数总结 in NLP

常见损失函数总结

loss一般是正的,而且越小越好。

0-1 loss / abs loss

  • 应用场景:回归问题
  • 0-1 loss:只要预测值和标签不相等,就loss+=1;或者预测值q和标签p之间的差值大于阈值t,就loss+=1.或者套用其他的非线性函数。
  • abs loss:loss += abs(p-q).

square loss

  • 应用场景:很多,分类问题和回归问题都可以
  • loss输入:模型通过预测给出一个tensor(scalar, vector甚至matrix),而标签也是一个同样size的tensor
  • 计算:
    J m s e = ∑ i , j ( p i , j − q i , j ) 2 J_{mse} = \sum_{i, j}(p_{i, j} - q_{i, j})^2 Jmse=i,j(pi,jqi,j)2

hinge loss

  • 应用场景:N分类问题
  • loss输入:模型输入一个N维向量为分类结果,针对这个向量计算loss.(这个N维向量一般是一个全连接层(线性层)的输出,是模型对于每个类别的打分。)
  • 计算方法:向量的每个分量和正确分类的分量比较,如果差的不多甚至超过(说明有混淆),则在loss中反映出来。在下面的公式中, i i i是正确的类别, t t t是阈值(一般为1,或是某个计算出来的平均值)。
    J h i n g e = ∑ j = 1 , j ≠ i N m a x ( 0 , s j − s i + t ) J_{hinge} = \sum_{j=1, j\neq i}^{N}max(0, s_j - s_i + t) Jhinge=j=1,j=iNmax(0,sjsi+t)

softmax loss

  • 应用场景:N分类问题
  • loss输入:模型输出一个N维向量,为模型预测的分类概率。
  • 计算方法:
    J s o f t m a x = − l o g P ( i ∣ m o d e l ) J_{softmax} = -logP(i|model) Jsoftmax=logP(imodel)

cross entropy loss

  • 应用场景:在自然语言中很常用
  • loss输入:模型输出一个N维向量q,即模型预测的分布(分布律)。但是实际上的分布是N维向量p.
  • 计算方法:
    J c r o s s _ e n t r o p y = − ∑ i = 1 N p i l o g q i J_{cross\_entropy} = -\sum_{i=1}^{N}p_ilogq_i Jcross_entropy=i=1Npilogqi

有的时候也会使用困惑度作为loss
J c r o s s _ e n t r o p y = 2 J c r o s s _ e n t r o p y J_{cross\_entropy} = 2^{J_{cross\_entropy} } Jcross_entropy=2Jcross_entropy

L1正则项

  • 正则项又叫做罚项,是为了限制模型的参数过度地往同一个方向发展,从而导致模型过拟合,而加在损失函数后面的一项。
  • 计算:所有参数的线性和/加权线性和。
    • 如果所有参数都位于同一量度,那么可以直接线性和;如果有的参数和其他参数量度不同(比如分布不同,均值的差距太大)(这可能是因为输入没有标准化导致的),那就乘以一个线性系数。
  • L1会趋向于产生少量的特征,而其他的特征都是0.这样可以提取出较少的特征。图像解释:因为L1范数在平面坐标系的单位圆是菱形的,有向四个坐标轴突出的迹象,所以趋向于产生少量的值较大的特征。
  • 如果样本原本的分布符合Laplace分布,那么推荐使用L1正则项。

L2正则项

  • 计算:所有参数的平方和/加权平方和。
  • L2产生的特征数比L1多,但是都是接近于0的。图像解释:因为L2范数在平面坐标系的单位圆是圆,在各个方向的扩展比较均匀,所以趋向于产生大量的值较小的特征。
  • 如果样本原本的分布符合Gauss分布,那么推荐使用L2正则项。
### 均方差损失函数 (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}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值