关于线性分类器的一些总结

版权声明:https://blog.csdn.net/z0n1l2 https://blog.csdn.net/z0n1l2/article/details/83353116

线性分类器的分类函数是
f ( X ) = W X + B f(X) = WX+B
其中 X X 是特征, W W 是权重矩阵,其行数等于类别数,B是偏置,如果定义 X = ( X , 1 ) X'=(X,1) ,分类函数可以写成
f ( X ) = W X f(X')= WX'
所以以下讨论忽略偏置B。线性分类器输出是一个向量,维度等于类别数目,每个元素的取值范围 ( inf , inf ) (-\inf, \inf) ,X被判定为数值最大的维度对应的类别

线性分类器的形式很简单,但用途广泛,下面按照cost 函数不同一一列举

L2 loss

欧式距离损失函数,这个loss历史应该最为悠久
L = 1 N i ( s i s i ) 2 L = \frac{1}{N} \sum_i{(s_i - s'_i)^2}
神经网络也使用过L2 loss

hinge loss

先看一个例子,下表是3分类问题的输出结果,表格中的数值是分类器输出,不是概率值,但越大的值表示越可能属于对应类别。所以这个例子中,前两行正确分类,最后一行真实类别是car,但被错误分类成dog。

dog cat car
dog 2.2 -9 1
cat 0.3 3 2
car 4 0.1 3

第一行表示真实类别是dog,分类器输出对应dog的值是2.2,对应cat的值是-9,对应car的值是1。则这个样本对应的hinge loss就是
L ( d o g ) = m a x ( 0 , 1 + ( 9 ) 2.2 ) + m a x ( 0 , 1 + 1 2.2 ) = 7.8 + 0 = 7.8 L(dog) = max(0, 1+(-9)-2.2) + max(0, 1+1-2.2) = 7.8 + 0 = 7.8
同理第二行对应的样本的loss是
L ( c a t ) = m a x ( 0 , 1 + 0.3 3 ) + m a x ( 0 , 1 + 2 3 ) = 0 + 0 = 0 L(cat) = max(0, 1+0.3-3) + max(0, 1+2-3) = 0 + 0 = 0

hinge loss的公是如下
L ( x i ) = j i m a x ( 0 , m a r g i n + s j s i ) L(x_i) = \sum_{j \neq i} max(0, margin+s_j - s_i)
其中 s i s_i s j s_j 是分类器的输出, x i x_i 是输入样本, s i s_i 是真实类别对应的输出, s j s_j 是错误类别对应的输出,margin是一个超参,上面的例子里 m a r g i n = 1 margin=1 。考虑下hinge loss什么时候不等于0?

  • s j s i m a r g i n s_j \leq s_i - margin 时,分类正确,对应的hinge loss = 0
  • s i m a r g i n < s j < s i s_i - margin < s_j < s_i 时,分类正确,但是hinge loss 大于0
  • s j s j s_j \geq s_j 时,分类错误,hinge loss大于0

使用hinge loss最具代表的就是SVM。

交叉熵损失函数

交叉熵可以描述两个分布之间的差异,对于两个分布 { a i } \{a_i\} { b i } \{b_i\} ,其中 i = 0 , 1 , . . . , N i=0,1,...,N ,二者之间的交叉熵定义为
C E ( a , b ) = i = 0 N a i l o g b i CE(a,b) = -\sum_{i=0}^{N}{a_i log{b_i}}
交叉熵描述两个分布之间差异,交叉熵越大,差异越大。
PS:为什么交叉熵描述分布之间的差异? 相对熵,又称KL散度才是描述两个分布的差异,而交叉熵是KL散度的一项,在给定两个分布的前提下,另一项是固定的,所以此时交叉熵就可以用来表示两个分布的差异了
使用交叉熵损失函数最具代表性的就是神经网络,另外逻辑回归也是用的交叉熵损失函数

softmax函数

分类问题中使用的one-hot编码可以看作是一种概率分布,其每个元素满足[0,1],如果要利用交叉熵loss,则要求分类器输出的也是概率分布,虽然可以min-max方式归一化,但更常用的是softmax函数,因为softmax和交叉熵组合后的导数有不少优势,这个在以后涉及求导时再解释。
如前面的例子,第一行对应样本softmax loss
L ( d o g ) = e 2.2 e 2.2 + e 9 + e 1 L(dog) = \frac{e^{2.2}}{e^{2.2} + e^{-9} + e^{1}}
第二行对应样本的softmax loss
L ( c a t ) = e 0.3 e 0.3 + e 3 + e 2 L(cat) = \frac{e^{0.3}}{e^{0.3} + e^{3} + e^{2}}
softmax loss的数学公是
L ( x i ) = e s i j e s j L(x_i) = \frac{e^{s_i}}{\sum_j{e^{s_j}}}
其中 s j s_j 是分类器预测结果中第j类的值,而样本 x i x_i 对应的真实类别就是 i i
某个样本的softmax loss的取值范围是[0,1],可以看作是一个概率分布

regulation

regulation的作用是避免网络参数出现太大的值,出现太大的值就容易出现过拟合。当一个模型在训练集(或者还有验证集)上表现优异,而在测试集上表现很差,就是模型学习到一些只属于训练集,而不属于测试集的特征,假设训练集和测试集有足够的代表性,那么模型学习到的就是训练集里的属于噪声的特征。从另一个角度来解释,模型中某个参数如果太大,那么和这个参数计算的特征发生较小的变化,这个变化会被放大,导致模型对这个特征很敏感,很多时候这不是我们所期望的。

L1和L2正则项

这两个是最长使用的正则化条件
L 2 : L + C w 2 L2: L+C\sum{w^2}
L 1 : L + C w L1: L+C\sum{|w|}
相对而言,L1正则项容易令w为0,即模型中很多参数为零0,称为稀疏化,一般认为参数稀疏化有助于提高模型泛化能力。为什么L1正则项更容易令参数为0? 可以从导数的角度解释:L1范数在0点是不可导的,即其左右两侧符号不同,加了L1的损失函数
L = L + C w L' = L+C\sum|w|
导数
d L = d L + C s i g n ( w ) dL' = dL + C\sum{sign(w)}
因为在某个参数 w i w_i 为0的左右两侧, C s i g n ( w i ) Csign(w_i) 异号,则关于这个参数 w i w_i ,
d L [ d L C , d L + C ] dL' \in [dL - C, dL + C]
显然,只要C不小于 d L dL w i = 0 w_i = 0 处的值,则 d L dL' w i = 0 w_i = 0 处存在一个极小值点(这个点左右两侧异号,则必是极值点)。虽然所有学习方法都希望找到全集最小值点,但实际中很多算法都是在找局部极小值,然后再进一步尝试搜索局部极大值点,所以通过增加L1正则项,在参数 w i = 0 w_i=0 处生成loss函数的一个局部极小值,吸引优化算法尝试令参数 w i = 0 w_i=0

扫描二维码关注公众号,回复: 4897924 查看本文章

猜你喜欢

转载自blog.csdn.net/z0n1l2/article/details/83353116
今日推荐