1.多分类问题引入
在此篇之前,如果大家还有印象,我们会发现 处理的都是二分类问题,也就是标签y的取值只能是0,1或者-1,1。不论是我们的pla,线性回归,logistic回归,还是svm,最后都是找到一个由权重构成的分类面,它自身的限制导致了这些所有的算法只能处理二分类问题。但是我们在实际运用中,往往处理的不仅仅是“是或不是”的问题,很多时候是“是什么”的问题,那么这就是多分类问题,比如:
这是一个四类的分类,我们用肉眼很容易看出来它们之间的区别,但是如何让算法区分出这四类不同的点呢?在这一篇,我们来看几种策略,分别是1vN,1v1,softmax。
2.1vN策略
1vN策略的目的是把多分类问题转化为一系列二分类问题,从而推广到多分类问题。这句话怎么理解呢?看下面这张图就明白了。
每一类和其他类都能化成两类问题,因此,对于每一类,可以获得一个分类面,因此就把样本化为了不同的区域。当输入一个特征向量,只需要分别用每一个分类面对特征向量进行判别,取其中得分最高的区域,就可以得出最后的分类结果。但是,这个方法不好的地方我们可以看到,将分类面叠加起来后,是有盲区的,按照分类面来说,这些区域不属于任何一类。
因此,1vN策略的过程就可以描述如下:
- 对于任意的k属于Nclass
- 将属于k类的样本点作为正样本,将其他的点作为负样本,由此得出Nclass个分类面
- 将未知的样本特征向量分别计算 w k T x w_k^Tx wkTx,取值最大的第i类作为最后的分类结果
3.1v1策略
1V1是另外一种策略,不同于1vN,1v1有点像打积分赛,每次挑两类上来比较,那么位次怎么出来呢?就是看最后的胜负场。比如说我有三类样本,分别为1,2,3,那么就能生成三个分类面:12,13,23,假如此时有一个样本,12觉得它是1,13觉得它是1,23觉得它是2,那么这个样本就被分为了1类。1v1遵从的是投票的策略。
4.Softmax
4.1概念与方法
此节才是真正的重点,大家有了解过深度学习的或多或少都听过softmax这个概念。实际上,softmax在深度学习中运用极其广泛,像pytorch里头的cross-entropy loss这一多分类损失函数直接集成了softmax层在里头,因此,了解什么是softmax,为什么要用softmax是理解深度网络反向传播等算法的关键。
关于softmax,下面这张图很好的说明了它的过程:
其中 x x x是最后的特征向量,而 S i S_i Si是特征向量关于每一类的一个线性变换,随后通过一个函数映射:
y ^ i = e S i ∑ i = 1 N e S i \hat{y}_i = \frac{e^{S_i}}{\sum_{i=1}^Ne^{S_i}} y^i=∑i=1NeSieSi
得到分属各个类别的概率。需要强调的是,softmax实质上是一种函数映射,它本身是没有参数的。至于为什么使用指数函数,可能是因为指数函数有良好的求导性质,且正样本的影响力会更大。最后在分类的时候,取预测概率最大的一类即可。
4.2softmax梯度传播
softmax的学习方法也就是梯度下降法,因此如何求导是一个关键的问题。首先,我们采用的loss函数自然是交叉熵损失:
E = − ∑ j = 1 N y j l n y j ^ E = -\sum_{j=1}^N y_j ln\hat{y_j} E=−j=1∑Nyjlnyj^
而我们的 y y y是一个除了目标维度是1,其他维度都是0的这么一个标签向量,假设这个样本属于类别k,那么损失函数就变为了:
E = − l n y k ^ E = -ln\hat{y_k} E=−lnyk^
因为只有y_k为1,其他的都为0。于是乎,我们得到了:
s j = w j T x , ; y j ^ = e s j ∑ i = 1 N e s i ; E = − l n y k ^