前言
损失函数用来估量模型的预测值与真实值的不一样程度,通常可以用梯度下降算法寻找函数最小值。
一、回归
L1 Loss
L=∣y^−y∣ L=|\hat{y}-y| L=∣y^−y∣
该函数常用与收敛以回归为目的的输出,代表一次线性差值。特点是,输出结果的数学意义在全局相等,且对输出结果偏高偏低的惩罚一致(对离群点低敏感),连续但在近点(∣y^−y∣接近于0|\hat{y}-y|接近于0∣y^−y∣接近于0)不可导,难以收敛至最优点。
L2 Loss
L=(y^−y)2 L=(\hat{y}-y)^{2} L=(y^−y)2
L2 Loss应用最小二乘法的收敛思路。特点是,曲线光滑连续可导,可用与梯度下降,由于平方的特性,随着误差减小,梯度也减小,但同时导致对离群点惩罚过高。应用至批量即为MSE。
注:若离群点是重要数据,选用MSE,若离群点是数据损坏或错误采样,选MAE。
Huber Loss
针对L1 Loss和L2 Loss的优缺点,Huber Loss通过设立超参数δ\deltaδ。假如δ=1\delta=1δ=1,则意味偏离小于1,用MSE;偏离大于1,用线性误差。实现了处处可导和减小对离群点敏感度的问题。
Lδ(y,f(x))={
12(y−f(x))2,∣y−f(x)∣≤δδ∣y−f(x)∣−12δ,∣y−f(x)∣>δ L_{\delta}(y, f(x))=\left\{\begin{array}{ll}{\frac{1}{2}(y-f(x))^{2},} & {|y-f(x)| \leq \delta} \\ {\delta|y-f(x)|-\frac{1}{2} \delta,} & {|y-f(x)|>\delta}\end{array}\right. Lδ(y,f(x))={
21(y−f(x))2,δ∣y−f(x)∣−21δ,∣y−f(x)∣≤δ∣y−f(x)∣>δ
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1, 20, 40)
y = x + [np.random.choice(4) for _ in range(40)]
y[-5:] -= 8
X = np.vstack((np.ones_like(x), x))
m = X.