1.铰链损失函数hinge loss
铰链损失函数(hinge loss)的思想就是让那些未能正确分类的和正确分类的之间的距离要足够的远,如果相差达到一个阈值 Δ \Delta Δ时,此时这个未正确分类的误差就可以认为是0,否则就要累积计算误差。
具体介绍一下:
假设对某一个输入
x
i
x_{i}
xi进行分类,他的标签是
y
i
y_{i}
yi,通过一个函数
f
(
x
i
,
W
)
f\left(x_{i}, W\right)
f(xi,W)对
x
i
x_{i}
xi进行预测,我们得到的输出用s表示(也称为得分,score),将输入
x
i
x_{i}
xi预测为第j类得到的输出为
s
j
=
f
(
x
i
,
W
)
j
s_{j}=f\left(x_{i}, W\right)_{j}
sj=f(xi,W)j。那么,对一个输入
x
i
x_{i}
xi进行损失函数的计算为:
L i = ∑ j ≠ y i max ( 0 , s j − s y i + Δ ) L_{i}=\sum_{j \neq y_{i}} \max \left(0, s_{j}-s_{y_{i}}+\Delta\right) Li=∑j̸=yimax(0,sj−syi+Δ)
以一个例子来看一下它的原理:
假设这是一个三分类的分类器,对一个输入,经过分类器的输出是
s
=
[
13
,
−
7
,
11
]
s=[13,-7,11]
s=[13,−7,11],而对这个输入正确的分类应该是第一类,我们假设这里的超参数
Δ
\Delta
Δ设为10,那么这里的损失计算如下:
L i = max ( 0 , − 7 − 13 + 10 ) + max ( 0 , 11 − 13 + 10 ) L_{i}=\max (0,-7-13+10)+\max (0,11-13+10) Li=max(0,−7−13+10)+max(0,11−13+10)
可以看出,第一项由于 [ − 7 − 13 + 10 ] > 10 [-7-13+10]>10 [−7−13+10]>10,其结果就是0,也就是这个类别和我们要正确分类的类别相差较大,可以不用考虑其带来的误差和影响。
铰链损失函数如下:
图里的1表示 Δ \Delta Δ,将其换为 Δ \Delta Δ就更具普适性。
这张图也有利于理解,蓝色部分表示正确分类,绿色部分表示其他错误类别,但是和正确类别之间相差较远,损失可以忽略不计,红色部分落在
Δ
\Delta
Δ之间,就需要累计其带来的损失。
2.交叉熵损失函数
交叉熵损失函数的形式如下:
L i = − log ( e f y i ∑ j e f j ) L_{i}=-\log \left(\frac{e^{f_{y_{i}}}}{\sum_{j} e^{f_{j}}}\right) Li=−log(∑jefjefyi)
可以等价化为:
L i = − f y i + log ∑ j e f j L_{i}=-f_{y_{i}}+\log \sum_{j} e^{f_{j}} Li=−fyi+log∑jefj
3.一个例子说明两者的区别
假设输入是一个4*1的向量,经过一个线性分类器进行 f ( x i , W , b ) = W x i + b f\left(x_{i}, W, b\right)=W x_{i}+b f(xi,W,b)=Wxi+b 操作得到输出,后面是计算损失函数的两种方式:
参考自:https://cs231n.github.io/linear-classify/ 斯坦福大学cs231n课程