损失函数
0-1损失
L(Y,f(X))={1,Y≠f(X)0,Y=f(X) L(Y, f(X)) = \begin{cases} 1, & Y \not= f(X) \\ 0, & Y = f(X) \end{cases} L(Y,f(X))={1,0,Y=f(X)Y=f(X)
- 直接对应分类判断错误的个数,但是是一个非凸函数,不太好用
- 感知机使用的就是这种损失函数,但是严格相等过于严格,可以卡一个阈值:L(Y,f(X))={1,∣Y−f(X)∣>=T0,∣Y−f(X)∣<T L(Y, f(X)) = \begin{cases} 1, & |Y - f(X)|>=T \\ 0, & |Y - f(X)| < T \end{cases} L(Y,f(X))={1,0,∣Y−f(X)∣>=T∣Y−f(X)∣<T
绝对值损失
L(Y,f(X))=∣Y−f(X)∣ L(Y, f(X)) = |Y - f(X)| L(Y,f(X))=∣Y−f(X)∣
对数损失
L(Y,P(Y∣X))=−log(P(Y∣X)) L(Y, P(Y|X)) = -log(P(Y|X)) L(Y,P(Y∣X))=−log(P(Y∣X))
- 能很好的表征概率分布,在很多场景,尤其是多分类的情况,能知道属于某一个类别的置信度
- 逻辑回归LR的损失函数就是log对数损失
平方损失
L(Y,f(X))=∑N(Y−f(X))2 L(Y, f(X)) = \sum_N (Y-f(X))^2 L(Y,f(X))=N∑(Y−f(X))2
- 通常用于回归问题
指数损失
L(Y,f(X))=exp(−yf(x)) L(Y, f(X)) = exp(-yf(x)) L(Y,f(X))=exp(−yf(x))
- 对异常点,噪声非常敏感
Hinge损失(合页损失)
L(y,f(x))=max(0,1−yf(x)) L(y, f(x)) = max(0, 1-yf(x)) L(y,f(x))=max(0,1−yf(x))
- 如果分类正确,损失为0,否则损失为1−yf(x)1-yf(x)1−yf(x),这也是SVM使用的损失函数
- y∈{−1,1}y\in\{-1,1\}y∈{−1,1},分类错误时损失实际上是1+∣f(x)∣1+|f(x)|1+∣f(x)∣
- 对异常点不敏感,没有概率解释
感知损失函数
L(y,f(x))=max(0,−f(x)) L(y, f(x)) = max(0, -f(x)) L(y,f(x))=max(0,−f(x))
- 是合页损失的一个变种,并不是最大化边界距离,所以模型泛化能力不强
- 可以理解为什么这也是一种合页损失,因为从图上看,都是一个折线,看着像一个合页,所以。。。
交叉熵损失
L=−1n∑x[yln(p)+(1−y)ln(1−p)] L = - \frac{1}{n} \sum_x [ yln(p) + (1-y)ln(1-p) ] L=−n1x∑[yln(p)+(1−y)ln(1−p)]
- 上式是一个二分类的交叉熵,y∈{0,1}y\in\{0, 1\}y∈{0,1},p=p(y∣x)p=p(y|x)p=p(y∣x)是模型预测属于类别yyy的概率
- 多分类的loss函数如下,本质上和上式是一样的:loss=−1n∑iyiln(pi) loss = -\frac{1}{n} \sum_i y_i ln(p_i) loss=−n1i∑yiln(pi)
- 使用交叉熵的优势:
- 当激活函数是sigmoid函数的时候:交叉熵能够解决平方误差函数更新权重过慢的问题,误差越大,权重更新越快,误差越小,权重更新慢,这个性质非常好
- 简单推导:
- σ(x)=11+e−x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1
- σ′=σ∗(1−σ) \sigma^\prime = \sigma *(1-\sigma) σ′=σ∗(1−σ)
- 交叉熵的倒数(激活函数是σ\sigmaσ):loss(y,f(x))=−1n∑iyiln(f(xi)) loss(y, f(x)) = - \frac{1}{n} \sum_i y_iln(f(x_i)) loss(y,f(x))=−n1i∑yiln(f(xi))
∂loss∂w=∂loss∂f(x)∂f(x)∂w=−1n∑iyi1f(wxi)∂f(wxi)∂w=−1n∑iyi1σ(wxi)∂σ(wxi)∂w=−1n∑iyi1σ(wxi)(σ(wxi)(1−σ(wxi)))=−1n∑iyi(1−σ(wxi))=1n∑i(f(wxi)−yi)) \begin{aligned} \frac{\partial loss}{\partial w} & = \frac{\partial loss}{\partial f(x)} \frac{\partial f(x)}{\partial w} = -\frac{1}{n}\sum_i y_i\frac{1}{f(wx_i)} \frac{\partial f(wx_i)}{\partial w} \\ & = -\frac{1}{n}\sum_i y_i\frac{1}{\sigma(wx_i)} \frac{\partial \sigma(wx_i)}{\partial w} \\ & = -\frac{1}{n}\sum_i y_i\frac{1}{\sigma(wx_i)} (\sigma(wx_i)(1-\sigma(wx_i))) \\ & = -\frac{1}{n}\sum_i y_i (1-\sigma(wx_i)) \\ & = \frac{1}{n}\sum_i (f(w x_i) - y_i )) \end{aligned}∂w∂loss=∂f(x)∂loss∂w∂f(x)=−n1i∑yif(wxi)1∂w∂f(wxi)=−n1i∑yiσ(wxi)1∂w∂σ(wxi)=−n1i∑yiσ(wxi)1(σ(wxi)(1−σ(wxi)))=−n1i∑yi(1−σ(wxi))=n1i∑(f(wxi)−yi)) - 均方差的倒数(激活函数是σ\sigmaσ):loss(y,f(x))=12n∑i(yi−f(xi))2loss(y, f(x)) = \frac{1}{2n} \sum_i (y_i-f(x_i))^2loss(y,f(x))=2n1i∑(yi−f(xi))2
- ∂loss∂w=∂loss∂f(x)∂f(x)∂w=1n∑i(yi−f(wxi))∂f(wxi)∂w=1n∑i(yi−σ(wxi))(σ(wxi)(1−σ(wxi)))\begin{aligned} \frac{\partial loss}{\partial w} & = \frac{\partial loss}{\partial f(x)} \frac{\partial f(x)}{\partial w} \\ & = \frac{1}{n} \sum_i (y_i - f(w x_i)) \frac{\partial f(w x_i)}{\partial w} \\ & = \frac{1}{n} \sum_i (y_i - \sigma(w x_i)) (\sigma(w x_i)(1-\sigma(w x_i))) \end{aligned}∂w∂loss=∂f(x)∂loss∂w∂f(x)=n1i∑(yi−f(wxi))∂w∂f(wxi)=n1i∑(yi−σ(wxi))(σ(wxi)(1−σ(wxi)))
- 从均方差和交叉熵的损失函数的倒数的推导来看:
- 均方差损失,其激活函数的倒数项是无法消掉的,那么当使用
sigmoid激活函数的时候,倒数项一直存在,而sigmoid的倒数项只有在接近0的时候才稍微比较大一点,其余的地方的倒数都是接近0的值,这会导致权重w更新缓慢 - 交叉熵损失,在使用
sigmoid做为激活函数的时候,可以看到,误差越大梯度越大,那么权重w更新越快,性质非常良好 - 注意这里指的是使用了
sigmoid作为激活函数,如果采用了其他的激活函数,并不保证有这样好的性质
- 均方差损失,其激活函数的倒数项是无法消掉的,那么当使用
参考资料
- https://zhuanlan.zhihu.com/p/58883095
本文全面解析了各种损失函数,包括0-1损失、绝对值损失、对数损失、平方损失、指数损失、Hinge损失、感知损失、交叉熵损失等。详细介绍了每种损失函数的特点、应用场景及优缺点。

被折叠的 条评论
为什么被折叠?



