损失函数概述
损失函数(Loss Function)是机器学习中用于衡量模型预测值与真实值之间差异的函数,是优化算法的核心目标。通过最小化损失函数,模型逐步调整参数以提高预测准确性。
常见损失函数分类
回归任务
-
均方误差(MSE)
计算预测值与真实值平方差的平均值,对异常值敏感:
L(y, \\hat{y}) = \\frac{1}{n}\\sum_{i=1}\^{n}(y_i - \\hat{y}_i)\^2
-
平均绝对误差(MAE)
使用绝对差值,对异常值鲁棒性更强:
L(y, \\hat{y}) = \\frac{1}{n}\\sum_{i=1}\^{n}\|y_i - \\hat{y}_i\|
-
Huber损失
结合MSE和MAE,在误差较小时使用平方项,较大时转为线性项:
L(y, \\hat{y}) = \\begin{cases} \\frac{1}{2}(y_i - \\hat{y}_i)\^2 \& \\text{if } \|y_i - \\hat{y}_i\| \\leq \\delta \\ \\delta(\|y_i - \\hat{y}_i\| - \\frac{1}{2}\\delta) \& \\text{otherwise} \\end{cases}
分类任务
-
交叉熵损失(Cross-Entropy)
用于二分类或多分类,衡量概率分布的差异:
- 二分类:
L(y, \\hat{y}) = -\\frac{1}{n}\\sum_{i=1}\^{n}\[y_i \\log(\\hat{y}_i) + (1-y_i)\\log(1-\\hat{y}_i)\]
- 多分类(Softmax交叉熵):
L(y, \\hat{y}) = -\\frac{1}{n}\\sum_{i=1}\^{n}\\sum_{c=1}\^{C}y_{i,c} \\log(\\hat{y}_{i,c})
- 二分类:
-
Hinge损失
支持向量机(SVM)中使用的损失函数,最大化分类边界:
L(y, \\hat{y}) = \\max(0, 1 - y_i \\cdot \\hat{y}_i)
-
Focal Loss
解决类别不平衡问题,通过调整难易样本的权重:
L(y, \\hat{y}) = -\\alpha (1-\\hat{y}_i)\^\\gamma y_i \\log(\\hat{y}_i)
损失函数选择原则
- 任务类型:回归任务常用MSE/MAE,分类任务常用交叉熵。
- 数据特性:异常值较多时选择MAE或Huber损失;类别不平衡时使用Focal Loss。
- 模型需求:SVM需配合Hinge损失,神经网络常用交叉熵。
自定义损失函数
通过组合现有函数或设计新公式满足特定需求。例如:
- 加权MSE:为不同样本分配不同权重。
- 正则化损失:加入L1/L2惩罚项防止过拟合。
代码示例(PyTorch自定义Huber损失):
python
import torch
def huber_loss(y_pred, y_true, delta=1.0):
error = y_true - y_pred
mask = (error.abs() <= delta).float()
return (mask * 0.5 * error.pow(2) + (1 - mask) * delta * (error.abs() - 0.5 * delta)).mean()