课前回顾

逻辑回归:二分类问题

多分类问题:把输入样本划分为多个类别

在前面的课程中我们介绍了逻辑回归。逻辑回归能够很好地解决二分类的问题,但是在现实生活中存在着大量的多分类问题,例如手写数字识别,图片分类等,都需要把输入的样本划分为多个类别。

超多分类的图像分类算法 超多分类问题_二分类


下面,我们就以鸢尾花数据集为例来学习如何实现多分类的任务。

多分类问题

自然顺序码

在鸢尾花数据集中一共有三种鸢尾花,分别被标记为0,1,2,这种编码方式成为自然顺序码。

超多分类的图像分类算法 超多分类问题_多分类_02


使用自然顺序码会出现一个奇怪的现象,山鸢尾和维多利亚鸢尾的平均值又是变色鸢尾,而且它们之间的距离也不同。2到0的距离要远一些,到1的距离要近一些。是因为0,1,2这三个数字之间本身是有大小关系的,而鸢尾花的类别之间是平等的,并没有谁大一点水小一点。

目前大部分机器学习算法都是基于欧式空间中的度量来进行计算,使用自然顺序码就可能在机器学习的过程中造成偏差。

独热编码

为了使得这种非连续关系的数据,取值不具有偏序性,并且到原点的距离是相等的,可以采用独热编码,这是采用独热编码来表示鸢尾花的类别。

超多分类的图像分类算法 超多分类问题_python_03


每种类别用一个一维向量来表示,其中的三个元素分别对应三个类别,属于哪个类别对应的元素就是1,其余元素为0。

所谓独热就是指在一个向量中只有一个元素是1也就是热的,其他元素都是0。显然采用独热编码,需要占用更多的空间,但是他能够更加合理地表示数据之间的关系,他将一维空间中三个标量的点扩展到了三维空间中,其中的每一个点到原点的距离都是相等的,采用独热编码可以有效的避免学习过程中的偏差。

因此在机器学习中通常会将离散的特征以及多分类问题中的类别标签,采用独热编码的方式来表示。

除此之外还有独冷编码,它和独热编码相反,就是向量中只有一个元素为0,其他元素都为1。

在逻辑回归中,输入特征的线性组合,通过sigmoid函数,转化为一个0到1之间的概率值。

超多分类的图像分类算法 超多分类问题_多分类_04


这里的输入,超多分类的图像分类算法 超多分类问题_超多分类的图像分类算法_05超多分类的图像分类算法 超多分类问题_python_06是样本的两个特征,令超多分类的图像分类算法 超多分类问题_python_07,用超多分类的图像分类算法 超多分类问题_python_08表示偏置项,这个分类器可以看成是有三个输入特征。在多分类问题中样本的标记常常被表示成独热编码的形式。相应的模型的输出也被表示为向量的形式,其中的每个元素是样本属于哪个类别的概率。例如这个输出,表明样本分别属于三种类别的概率。显然可以判断出来,这个样本属于第3类。

超多分类的图像分类算法 超多分类问题_二分类_09

识别鸢尾花

现在我们使用花瓣长度,花瓣宽度这两个特征来构造分类器,使它能够识别3种类型的鸢尾花。

这是输入特征。

超多分类的图像分类算法 超多分类问题_深度学习_10


要把三种类型的鸢尾花区分开,就需要构造三个线性模型,它们各自有不同的系数。

超多分类的图像分类算法 超多分类问题_python_11


现在我们需要寻找一个函数,通过它能够把线性模型的结果,超多分类的图像分类算法 超多分类问题_多分类_12超多分类的图像分类算法 超多分类问题_超多分类的图像分类算法_13超多分类的图像分类算法 超多分类问题_深度学习_14转变为属于每个类别的概率,这些概率的和应该等于1。这个函数就是softmax()函数,它首先将线性组合超多分类的图像分类算法 超多分类问题_多分类_12超多分类的图像分类算法 超多分类问题_超多分类的图像分类算法_13超多分类的图像分类算法 超多分类问题_深度学习_14分别作为自然常数e的指数,进行指数运算,这样就显着的拉开了它们之间的差距,使得大数变得更大,小数更小,把它们的和作为分母对输出进行归一化,这样就保证了超多分类的图像分类算法 超多分类问题_深度学习_18超多分类的图像分类算法 超多分类问题_二分类_19超多分类的图像分类算法 超多分类问题_超多分类的图像分类算法_20的值都在0~1之间,明显它们的和等于1。

超多分类的图像分类算法 超多分类问题_二分类_21


例如当softmax()函数的输入是1,2,3时,指数运算的结果是2.7,1.3和20,显然他们之间的差距明显拉大了。在归一化之后输出是0.09,0.24和0.67。属于第3类的概率,明显高于其他两类。

超多分类的图像分类算法 超多分类问题_深度学习_22


如果把第3个数稍微改大一点变成5,那么softmax()的结果是0.02 0.05和0.93可以看到输入值的差距会非常显著的体现在输出概率上。使得最大的那个数以压倒性优势概率,被选出来。

超多分类的图像分类算法 超多分类问题_二分类_23


之所以称为softmax(),可以理解为以更加soft的方式标记出最大的数。这个soft是和hard对应的,比如对于这个数组如果使用max函数就会找到最大数5,使用argmax()函数就会找到最大数的索引。

超多分类的图像分类算法 超多分类问题_多分类_24


其他的数一点机会也没有,成为最大数的概率是0,最大的这个数概率是100%,这就是采用hard的方式找到最大值。

而在softmax()中标记出的是每个数作为最大值的概率,而不是简单的划分为1和0,除了最大的数还可以看到其他数的概率,这和使用sigmoid()函数代替step()函数是类似的。

softmax()中,这些权值构成模型参数矩阵。

超多分类的图像分类算法 超多分类问题_python_25


这种多分类模型也称为softmax回归超多分类的图像分类算法 超多分类问题_超多分类的图像分类算法_26

和逻辑回归一样,softmax回归也是一种广义线性回归,用来完成分类任务。

也可以把这些运算合并在一起,以这种更加简洁的形式来表示。

超多分类的图像分类算法 超多分类问题_超多分类的图像分类算法_27


如果要使用鸢尾花数据集中的全部4个属性作为分类器的输入,加上偏置项超多分类的图像分类算法 超多分类问题_python_08,一共有5个输入项,划分为三类,所以输出还是三项,分别对应三个类别的概率。

超多分类的图像分类算法 超多分类问题_深度学习_29


每一个输出都接受这5个输入的特征,这个模型参数矩阵就是五行三列的,一共有15个权值。

超多分类的图像分类算法 超多分类问题_python_30


这些特征的线性组合经过softmax()函数,输出样本属于每个类别的概率。

超多分类的图像分类算法 超多分类问题_多分类_31


softmax()推广的一般形式,这是它的表达式

超多分类的图像分类算法 超多分类问题_超多分类的图像分类算法_32

其中,

  • 超多分类的图像分类算法 超多分类问题_超多分类的图像分类算法_33:输出节点的下标次序
  • 超多分类的图像分类算法 超多分类问题_二分类_34:第K的输出节点接收到的所有输入的线性组合
  • 超多分类的图像分类算法 超多分类问题_二分类_35:类别总数

在鸢尾花的例子中超多分类的图像分类算法 超多分类问题_多分类_36,P分别是1、2、3

softmax()函数是对数几率函数,在多分类问题上的推广。可以认为对数几率函数是softmax()的一个特例。

二元交叉熵损失函数(BCE)

在二分类问题中使用二元交叉熵损失函数计算预测值和标签值之间的误差。

超多分类的图像分类算法 超多分类问题_深度学习_37

模型需要预测的结果只有两种情况,所以每个样本有两项相加,样本属于哪个类别的预测概率为超多分类的图像分类算法 超多分类问题_多分类_38超多分类的图像分类算法 超多分类问题_python_39,对应的标签为超多分类的图像分类算法 超多分类问题_深度学习_40超多分类的图像分类算法 超多分类问题_python_41

超多分类的图像分类算法 超多分类问题_深度学习_42

多分类交叉熵函数(CCE)

多分类任务是对二分类的扩展,使用多分类交叉商损失函数。

超多分类的图像分类算法 超多分类问题_二分类_43

其中,

  • i是样本的索引。
  • n是样本的总数。
  • C代表类别的数量。
    有几个类别,每个样本就有几项相加,当C=2时,就是二元交叉商损失函数
  • 超多分类的图像分类算法 超多分类问题_多分类_44是第i个样本,属于第p类的标签值。
  • 超多分类的图像分类算法 超多分类问题_多分类_45是softmax函数输出的预测概率。通过交叉熵损失函数,可以计算概率的损失,也就是预测概率和实际分类标签的误差,交叉熵越小,两个概率分布就越接近。

除此之外,softmax()函数和交叉熵损失函数配合使用,在计算损失函数梯度时,其中的e的对数运算和e的指数运算可以相互抵消,使得模型的训练更加简单。

超多分类的图像分类算法 超多分类问题_python_46


因此在分类问题中,通常采用交叉熵损失函数。在鸢尾花分类问题中,假设我们分别设计了两个模型。这是他们的结果。

超多分类的图像分类算法 超多分类问题_超多分类的图像分类算法_47


可以看到,

模型A对样本1和样本2,以非常微弱的优势判断正确。而对于样本3,判断彻底错误。

模型B对于样本1和样本2的判断非常准确,对样本3判断错误。但是相对来说没有错的太离谱。这两个模型都是预测错了一个样本,它们的分类准确率都是2/3,但是显然模型B表现的更好。

超多分类的图像分类算法 超多分类问题_二分类_48


下面分别计算两个模型的交叉熵损失,这是使用模型A时的交叉熵损失

超多分类的图像分类算法 超多分类问题_超多分类的图像分类算法_49


这是使用模型地市的交叉熵损失

超多分类的图像分类算法 超多分类问题_超多分类的图像分类算法_50


可以看到模型B的损失明显小于模型A,和我们的预期是一样的。

互斥的多分类问题

在使用softmax()函数实现的多分类模型中,每个样本只能属于一个类别,这称为互斥的多分类问题。

例如鸢尾花的识别、手写数字识别都是互斥等多分类问题。

而如果有一些图片,我们要给他打上标签,分别是彩色图片,包括人物的图片,包括汽车的图片,户外图片和室内图片,可以看出来一个图片,可能同时被打上多个标签,也就是说一个样本可以同时存在于多个类别中,这称为非互斥的多分类问题,非互斥的多分类问题可以通过构建多个一对多的逻辑回归来实现。