模式识别系列(六)多分类策略

目录

  • 1.多分类问题引入
  • 2.1vN策略
  • 3.1v1策略
  • 4.Softmax
    • 4.1概念与方法
    • 4.2softmax梯度传播

1.多分类问题引入

  在此篇之前,如果大家还有印象,我们会发现 处理的都是二分类问题,也就是标签y的取值只能是0,1或者-1,1。不论是我们的pla,线性回归,logistic回归,还是svm,最后都是找到一个由权重构成的分类面,它自身的限制导致了这些所有的算法只能处理二分类问题。但是我们在实际运用中,往往处理的不仅仅是“是或不是”的问题,很多时候是“是什么”的问题,那么这就是多分类问题,比如:
模式识别系列(六)多分类策略_第1张图片这是一个四类的分类,我们用肉眼很容易看出来它们之间的区别,但是如何让算法区分出这四类不同的点呢?在这一篇,我们来看几种策略,分别是1vN,1v1,softmax。

2.1vN策略

  1vN策略的目的是把多分类问题转化为一系列二分类问题,从而推广到多分类问题。这句话怎么理解呢?看下面这张图就明白了。
模式识别系列(六)多分类策略_第2张图片每一类和其他类都能化成两类问题,因此,对于每一类,可以获得一个分类面,因此就把样本化为了不同的区域。当输入一个特征向量,只需要分别用每一个分类面对特征向量进行判别,取其中得分最高的区域,就可以得出最后的分类结果。但是,这个方法不好的地方我们可以看到,将分类面叠加起来后,是有盲区的,按照分类面来说,这些区域不属于任何一类。
因此,1vN策略的过程就可以描述如下:

  1. 对于任意的k属于Nclass
  2. 将属于k类的样本点作为正样本,将其他的点作为负样本,由此得出Nclass个分类面
  3. 将未知的样本特征向量分别计算 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,下面这张图很好的说明了它的过程:
模式识别系列(六)多分类策略_第3张图片其中 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=1Nyjlnyj^
而我们的 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 ^ s_j = w^T_jx,;\quad \hat{y_j} = \frac{e^{s_j}}{\sum_{i=1}^Ne^{s_i}}; \quad E= -ln\hat{y_k} sj=wjTx,;yj^=i=1Nesiesj;E=lnyk^
让我们求个导看一看,根据链式法则:
∂ E ∂ w j = ∂ E ∂ y k ^ ∂ y k ^ ∂ s j ∂ s j ∂ w j \frac{\partial E}{\partial w_j} = \frac{\partial E}{\partial \hat{y_k}} \frac{\partial \hat{y_k}}{\partial s_j} \frac{\partial s_j}{\partial w_j} wjE=yk^Esjyk^wjsj
∂ E ∂ y k ^ = − 1 y k ^ ; ∂ s j ∂ w j = x ∂ y k ^ ∂ s j = ∂ e s k ∂ s j ∑ i = 1 N e s i − e s j e s k ( ∑ i = 1 N e s i ) 2 = e s k ∑ i = 1 N e s i ( 1 − e s k ∑ i = 1 N e s i ) = y k ^ ( 1 − y k ^ ) , j = k = − e s j e s k ( ∑ i = 1 N e s i ) 2 = − y j ^ y k ^ , j ≠ k \begin{aligned} \frac{\partial E}{\partial \hat{y_k}} &= -\frac{1}{\hat{y_k}};\quad \quad \frac{\partial s_j}{\partial w_j} = x \\ \frac{\partial \hat{y_k}}{\partial s_j} &= \frac{\frac{\partial e^{s_k}}{\partial s_j}\sum_{i=1}^Ne^{s_i} - e^{s_j}e^{s_k}}{(\sum_{i=1}^Ne^{s_i})^2}\\ &=\frac{e^{s_k}}{\sum_{i=1}^Ne^{s_i}} (1 - \frac{e^{s_k}}{\sum_{i=1}^Ne^{s_i}})=\hat{y_k}(1-\hat{y_k}), j=k\\ &=- \frac{e^{s_j}e^{s_k}}{(\sum_{i=1}^Ne^{s_i})^2} = -\hat{y_j}\hat{y_k}, j \ne k \end{aligned} yk^Esjyk^=yk^1;wjsj=x=(i=1Nesi)2sjeski=1Nesiesjesk=i=1Nesiesk(1i=1Nesiesk)=yk^(1yk^),j=k=(i=1Nesi)2esjesk=yj^yk^,j=k
这样一来,求导的结果就变成了了:
∂ E ∂ w j = { ( y j ^ − 1 ) x , j = k y j ^ x , j ≠ k \frac{\partial E}{\partial w_j} =\left\{ \begin{aligned} (\hat{y_j} -1)x \quad,j=k\\ \hat{y_j}x\quad,j\ne k \end{aligned} \right. wjE={(yj^1)x,j=kyj^x,j=k
通过梯度下降就可以逐步优化了

你可能感兴趣的:(机器学习,人工智能)