线性分类器的分类函数是
其中
是特征,
是权重矩阵,其行数等于类别数,B是偏置,如果定义
,分类函数可以写成
所以以下讨论忽略偏置B。线性分类器输出是一个向量,维度等于类别数目,每个元素的取值范围
,X被判定为数值最大的维度对应的类别
线性分类器的形式很简单,但用途广泛,下面按照cost 函数不同一一列举
L2 loss
欧式距离损失函数,这个loss历史应该最为悠久
神经网络也使用过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就是
同理第二行对应的样本的loss是
hinge loss的公是如下
其中
和
是分类器的输出,
是输入样本,
是真实类别对应的输出,
是错误类别对应的输出,margin是一个超参,上面的例子里
。考虑下hinge loss什么时候不等于0?
- 时,分类正确,对应的hinge loss = 0
- 时,分类正确,但是hinge loss 大于0
- 时,分类错误,hinge loss大于0
使用hinge loss最具代表的就是SVM。
交叉熵损失函数
交叉熵可以描述两个分布之间的差异,对于两个分布
和
,其中
,二者之间的交叉熵定义为
交叉熵描述两个分布之间差异,交叉熵越大,差异越大。
PS:为什么交叉熵描述分布之间的差异? 相对熵,又称KL散度才是描述两个分布的差异,而交叉熵是KL散度的一项,在给定两个分布的前提下,另一项是固定的,所以此时交叉熵就可以用来表示两个分布的差异了
使用交叉熵损失函数最具代表性的就是神经网络,另外逻辑回归也是用的交叉熵损失函数
softmax函数
分类问题中使用的one-hot编码可以看作是一种概率分布,其每个元素满足[0,1],如果要利用交叉熵loss,则要求分类器输出的也是概率分布,虽然可以min-max方式归一化,但更常用的是softmax函数,因为softmax和交叉熵组合后的导数有不少优势,这个在以后涉及求导时再解释。
如前面的例子,第一行对应样本softmax loss
第二行对应样本的softmax loss
softmax loss的数学公是
其中
是分类器预测结果中第j类的值,而样本
对应的真实类别就是
某个样本的softmax loss的取值范围是[0,1],可以看作是一个概率分布
regulation
regulation的作用是避免网络参数出现太大的值,出现太大的值就容易出现过拟合。当一个模型在训练集(或者还有验证集)上表现优异,而在测试集上表现很差,就是模型学习到一些只属于训练集,而不属于测试集的特征,假设训练集和测试集有足够的代表性,那么模型学习到的就是训练集里的属于噪声的特征。从另一个角度来解释,模型中某个参数如果太大,那么和这个参数计算的特征发生较小的变化,这个变化会被放大,导致模型对这个特征很敏感,很多时候这不是我们所期望的。
L1和L2正则项
这两个是最长使用的正则化条件
相对而言,L1正则项容易令w为0,即模型中很多参数为零0,称为稀疏化,一般认为参数稀疏化有助于提高模型泛化能力。为什么L1正则项更容易令参数为0? 可以从导数的角度解释:L1范数在0点是不可导的,即其左右两侧符号不同,加了L1的损失函数
导数
因为在某个参数
为0的左右两侧,
异号,则关于这个参数
,
显然,只要C不小于
在
处的值,则
在
处存在一个极小值点(这个点左右两侧异号,则必是极值点)。虽然所有学习方法都希望找到全集最小值点,但实际中很多算法都是在找局部极小值,然后再进一步尝试搜索局部极大值点,所以通过增加L1正则项,在参数
处生成loss函数的一个局部极小值,吸引优化算法尝试令参数