文章目录
1. 损失函数
损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。
损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。
1.1 常见的损失函数
分类任务:交叉熵损失
匹配任务:三元组损失,对比损失
风格迁移:风格损失,内容损失(欧氏距离)
1.1.1 均方差损失(MSE, Mean Squared Error Loss)
均方差损失是机器学习、深度学习回归任务中最常用的一种损失函数,也称为 L2 Loss。其基本形式如下 L M S E = 1 N ∑ i = 1 N ( y i − y i ^ ) 2 L_{MSE}=\frac{1}{N}\sum_{i=1}^N(y_i-\hat{y_i})^2 LMSE=N1i=1∑N(yi−yi^)2
从直觉上理解均方差损失,这个损失函数的最小值为 0(当预测等于真实值时),最大值为无穷大。下图是对于真实值 y = 0 y= 0 y=0,不同的预测值 [ − 1.5 , 1.5 ] [-1.5,1.5] [−1.5,1.5] 的均方差损失的变化图。横轴是不同的预测值,纵轴是均方差损失,可以看到随着预测与真实值绝对误差 ∣ y − y ^ ∣ |y-\hat{y}| ∣y−y^∣ 的增加,均方差损失呈二次方地增加。
在模型输出与真实值的误差服从高斯分布的假设下,最小化均方差损失函数与极大似然估计本质上是一致的,因此在这个假设能被满足的场景中(比如回归),均方差损失是一个很好的损失函数选择;当这个假设没能被满足的场景中(比如分类),均方差损失不是一个好的选择。
def MSE(y, t):
return 0.5 * np.sum((y - t)**2)
1.1.2 平均绝对误差损失(MAE, Mean Absolute Error Loss)
平均绝对误差是另一类常用的损失函数,也称为 L1 Loss。其基本形式如下 L M A E = 1 N ∑ i = 1 N ∣ y i − y i ^ ∣ L_{MAE}=\frac{1}{N}\sum_{i=1}^N|y_i-\hat{y_i}| LMAE=N1i=1∑N∣yi−yi^∣
同样的我们可以对这个损失函数进行可视化如下图,MAE 损失的最小值为 0(当预测等于真实值时),最大值为无穷大。可以看到随着预测与真实值绝对误差 ∣ y i − y i ^ ∣ |y_i-\hat{y_i}| ∣yi−yi^∣ 的增加,MAE 损失呈线性增长。
def MAE(y, t):
return 0.5 * np.sum(abs(y - t))
1.1.3 Huber Loss (Smooth Mean Absolute Error Loss, Smooth L1)
MSE 损失收敛快但容易受 outlier 影响,MAE 对 outlier 更加健壮但是收敛慢,Huber Loss 则是一种将 MSE 与 MAE 结合起来,取两者优点的损失函数,也被称作 Smooth Mean Absolute Error Loss 。其原理很简单,就是在误差接近 0 时使用 MSE,误差较大时使用 MAE,公式为 L h u b e r = 1 N ∑ i = 1 N ( 1 ∣ y i − y i ^ ∣ ≤ δ ( y i − y i ^ ) 2 2 + 1 ∣ y i − y i ^ ∣ > δ ( δ ∣ y i − y i ^ ∣ − 1 2 δ 2 ) ) L_{huber}=\frac{1}{N}\sum_{i=1}^N(1_{|y_i-\hat{y_i}|\leq\delta}\frac{(y_i-\hat{y_i})^2}{2}+1_{|y_i-\hat{y_i}|>\delta}(\delta|y_i-\hat{y_i}|-\frac{1}{2}\delta^2)) Lhuber=N1i=1∑N(1∣yi−yi^∣≤δ2(yi−yi^)2+1∣yi−