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

线性分类器的分类函数是
f ( X ) = W X + B f(X) = WX+B f(X)=WX+B
其中 X X X是特征, W W W是权重矩阵,其行数等于类别数,B是偏置,如果定义 X ′ = ( X , 1 ) X'=(X,1) X=(X,1),分类函数可以写成
f ( X ′ ) = W X ′ f(X')= WX' f(X)=WX
所以以下讨论忽略偏置B。线性分类器输出是一个向量,维度等于类别数目,每个元素的取值范围 ( − inf ⁡ , inf ⁡ ) (-\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} L=N1i(sisi)2
神经网络也使用过L2 loss

hinge loss

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

dogcatcar
dog2.2-91
cat0.332
car40.13

第一行表示真实类别是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 L(dog)=max(0,1+(9)2.2)+max(0,1+12.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 L(cat)=max(0,1+0.33)+max(0,1+23)=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) L(xi)=j̸=imax(0,margin+sjsi)
其中 s i s_i si s j s_j sj是分类器的输出, x i x_i xi是输入样本, s i s_i si是真实类别对应的输出, s j s_j sj是错误类别对应的输出,margin是一个超参,上面的例子里 m a r g i n = 1 margin=1 margin=1。考虑下hinge loss什么时候不等于0?

  • s j ≤ s i − m a r g i n s_j \leq s_i - margin sjsimargin时,分类正确,对应的hinge loss = 0
  • s i − m a r g i n &lt; s j &lt; s i s_i - margin &lt; s_j &lt; s_i simargin<sj<si时,分类正确,但是hinge loss 大于0
  • s j ≥ s j s_j \geq s_j sjsj 时,分类错误,hinge loss大于0

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

交叉熵损失函数

交叉熵可以描述两个分布之间的差异,对于两个分布 { a i } \{a_i\} {ai} { b i } \{b_i\} {bi},其中 i = 0 , 1 , . . . , N 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}} CE(a,b)=i=0Nailogbi
交叉熵描述两个分布之间差异,交叉熵越大,差异越大。
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}} L(dog)=e2.2+e9+e1e2.2
第二行对应样本的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}} L(cat)=e0.3+e3+e2e0.3
softmax loss的数学公是
L ( x i ) = e s i ∑ j e s j L(x_i) = \frac{e^{s_i}}{\sum_j{e^{s_j}}} L(xi)=jesjesi
其中 s j s_j sj是分类器预测结果中第j类的值,而样本 x i x_i xi对应的真实类别就是 i i i
某个样本的softmax loss的取值范围是[0,1],可以看作是一个概率分布

regulation

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

L1和L2正则项

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值