多分类器:KNN,SVM,Softmax,2-Layer-Affine-Net(以图像分类为例子)

时光怂恿深爱的人放手 提交于 2020-03-01 09:21:59

多分类器:KNN,SVM,Softmax,2-Layer-Affine-Net(以图像分类为例子)

记录一下 CS 231N 计算机视觉这门课所提到的一些基础分类器,结合机器学习中学到的二元分类器算法,并以 CIFAR 10 作为训练集测试多分类器性能。

KNN K近邻分类

主要思路:寻找训练集到测试集中最相似的 kk 个图像(距离由矩阵二范数、或是 FrobinusFrobinus 范数表示),并由 kk 个最优结果投票决定其标签。

算法流程:

  1. 训练集导入 XX 与标签 yy
  2. 测试集输入 x^\hat x ,找到 XX 中与 x^\hat x 距离最近的 kk 个图像:χ={X~1,,X~k}\chi = \{\tilde X_1,\cdots, \tilde X_k\} (一般用二范数距离)
  3. 对标签进行计数:η={(X~1,y~(1)),,(X~k,y~(p))}\eta = \{(\tilde X_1, \tilde y^{(1)}),\cdots, (\tilde X_k, \tilde y^{(p)})\}
  4. 找到 η\eta 中出现次数最多的 y~(i)\tilde y^{(i)} ,即为这次分类的结果。

**图像分类结果:**对 CIFAR10CIFAR-10 这个数据集上选取不同 kk 值进行五折 JackknifeJackknife 交叉验证总体准确度在 27%27\% 左右。

在这里插入图片描述

SVM 支持向量机

支持向量机依赖于凸集分离定理,即:两个不相交凸集之间可以用超平面分离。但训练集中的数据通常不是凸集。

二元支持向量机

二元支持向量机的最优化问题的拉格朗日函数为:(最后为正则项)
L(w,b,a)=12w212iNaiyi(wTxib)+iai L(w, b, a)=\frac{1}{2}\|w\|^2-\frac{1}{2}\sum_i^N a_iy_i(w^Tx_i-b)+\sum_i a_i
最优化如上函数,得到最优解 ww 。这里的 ww 可以单位化为 w=www=\frac{w}{\|w\|} ,实际上等价于:
L(w,b,a)=12iNaiyi(wTxib)+iai L(w, b, a)=-\frac{1}{2}\sum_i^N a_iy_i(w^Tx_i-b)+\sum_i a_i

多元支持向量机

多元支持向量机相当于每个第 ii 类与非 ii 类之间进行支持向量机的划分。假设总供 mm 个组别,则在多分类问题中,相当于建立了 mm 个互相独立的支持向量机模型。 WRmnW\in \R^{m*n} 为一个权重矩阵,Wx,xRnWx,x\in \R^n 内积输出的结果为一个向量,分别表示对每个类别的评分。

NN 元支持向量机对训练集的一个元素 xix_i 的损失函数为:(jj 代表类别,sjs_j 表示对第 jj 个组别上的评分, syis_{y_i} 表示训练集在第 jj 个支持向量机空间内的标签 ( 1-1 or 11))即表明这一分类在不属于第 yiy_i 个分类的支持向量机空间下的重错分的分数。
Li=jyimax(0,sjsyi+1) L_i = \sum_{j\ne y_i}\max(0, s_j-s_{y_i}+1)
整个损失函数为:(这里省略正则项,也省略了惩罚项的系数)这里的损失函数实际上也可以定义为 max(0,sjsyi+1)2\max(0, s_j-s_{y_i}+1)^2 ,取决于对误差的容忍性。
L=iLi=ijyimax(0,sjsyi+1) L=\sum_{i}L_i = \sum_i\sum_{j\ne y_i}\max(0, s_j-s_{y_i}+1)
如果分类正确,sjsyi+1<0s_j-s_{y_i}+1<0 整个损失函数就为 00 ,如果全部分类均不正确,则损失函数理论上能够达到正无穷。

在这里插入图片描述

交叉验证结果分析:准确率 0.379000,较 KNNKNN 来说有更好的泛化能力。权重矩阵比较模糊。

Softmax 分类器

又称(多分类逻辑回归模型)。对于二元逻辑回归问题,对于一个输入给出的输出 y^\hat y 是一个概率。
Y^=exp(wTx)1+exp(wTx)[0,1) \hat Y = \frac{\exp(w^Tx)}{1+\exp(w^Tx)}\in [0, 1)
在二元逻辑回归中,实际上这个函数可以写为:
Y^=exp(wTx)exp(0)+exp(wTx)[0,1) \hat Y = \frac{\exp(w^Tx)}{\exp(0)+\exp(w^Tx)}\in [0, 1)
实际上 exp(0)exp(0)+exp(wTx)\frac{\exp(0)}{\exp(0)+exp(w^Tx)} 是取 00 的概率,而原本输出的 Y^\hat Y 表示属于 11 类的概率,这个函数具有非常好的二元性。将其扩展到所有 mm 个类别,输出是一个 mm 维向量,因此公式如下:
P(Y=kX=xi)=exp(Wxi)jmexp((Wxi)j)Rm P(Y=k|X=x_i)=\frac{\exp(Wx_i)}{\sum_j^m \exp((Wx_i)_j)}\in \R^{m}
与二元逻辑回归的损失函数相同,多分类逻辑回归的损失函数如果用最小二乘定义的话,会是一个非凸的函数,不利于求解。这里使用的是最大似然估计的方法:
Li=logP(Y=yiX=xi) L_i=-\log P(Y=y_i|X=x_i)
十折交叉验证准确率:

lr 1.000000e-07 reg 2.500000e+04 train accuracy: 0.348837 val accuracy: 0.365000
lr 1.000000e-07 reg 5.000000e+04 train accuracy: 0.330980 val accuracy: 0.342000
lr 5.000000e-07 reg 2.500000e+04 train accuracy: 0.349531 val accuracy: 0.363000
lr 5.000000e-07 reg 5.000000e+04 train accuracy: 0.333429 val accuracy: 0.351000
best validation accuracy achieved during cross-validation: 0.365000

在这里插入图片描述

图像上来说,这个权重矩阵好像比 SVMSVM 更清晰一点。

Two Layer Affine Network

神经网络的主要基础就是 求解梯度的链式法则: f(g(x))x=fggx\frac{\partial f(g(x))}{\partial x}=\frac{\partial f}{\partial g}\frac{\partial g}{\partial x},以及向量值函数的梯度的求解。
zf(.){g1g2gnwhere: each gi(.){x1x2xn z\leftarrow f(.)\begin{cases}g_1\\g_2\\\vdots\\g_n\end{cases}\text{where: each } g_i(.)\begin{cases}x_1\\x_2\\\vdots\\x_n\end{cases}
对于向量值函数的求导 gx\frac{\partial g}{\partial x},我们最后得到的结果是一个 JacobJacob 矩阵,我在 凸优化 [1]:梯度与次梯度 这篇文章中写过。将整个 JacobJacob 矩阵记为 gx=J\frac{\partial g}{\partial x} = J 。在这里最后总的梯度是 JJfg=\frac{\partial f}{\partial g}=\nabla 的内积:fx=J×\frac{\partial f}{\partial x}=J\times \nabla

单层神经网络如支持向量机中的打分方式一样:f=Wxf=Wx,而双层神经网络如下:
f=W2max(0,W1x) f=W_2\max(0, W_1x)
这里对应的 max\max 针对每一个元素。、一般来说,如果两层的神经网络都是线性的,则最终这个神经网络的输出结果也是线性的(第二层相当于对第一层神经网络进行一个降秩操作),相当于一层神经网络。

这里用的是由两个仿射变换构成神经网络。分别为 y1=W1x+b1y_1 =W_1x+b_1 这是第一层神经网络, y2=W2y1+b2y_2 = W_2y_1+b_2 这是第二层神经网络。其中 W1,W2W_1,W_2 全部初始化为服从正态分布的随机数构成的矩阵。

这里损失函数用 softmaxsoftmax 函数来定义:(这里加上正则化)
z=W2max(0,W1x+b1)+b2L(W1,W2,b1,b2)=1Nlog(softmax(z))+α(W1Fro2+W2Fro2) \begin{aligned}z &= W_2\max(0, W_1 x+b_1)+b_2\\L(W_1,W_2,b_1,b_2)&=\frac{1}{N}\log (softmax(z))+\alpha(\|W_1\|_{Fro}^2+\|W_2\|_{Fro}^2)\end{aligned}
下降方法:对上式求导,进行随机梯度下降法。第一张图是损失函数,第二张图是准确率

在这里插入图片描述

算法中 W1W_1 权重矩阵的可视化模型(W1W_15050 行)。

在这里插入图片描述

如上线性神经网络的分类精确率提高的原因初步猜测是:

  1. 每个分类下都有若干张图(也就是最后一层神经网络的行数),相当于一个由若干个支持向量机组成的集成学习
  2. 在集成学习中,每个分类器都进行投票(也就是最后我们得到的 f=W2z+b2f=W_2z+b_2 这一步),从而能够达到更好的分类精确度。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!