神经网络-图像分类-计算机视觉
图像,维度
挑战
常规套路
K-近邻
选3时周围有两个三角一个方块,所以他属于三角;选择5时,他周围有两个三角,三个方块,所以它属于方块。
计算流程
算法分析
可用的数据样例
如何让对图像进行“距离”计算。
直接对像素点进行相减,然后对所有像素点进行求和计算。
结果查看。以第一行为例,后面的图象是求出来类似的图像,然而结果不是特别准确,这个问题后面讲到。
超参数与交叉验证
L2是欧式距离,L1是麦哈顿距离。对于距离如何设定呢?
选择参数。
如果每次都用测试集来检验参数是否合理,那将会浪费很多测试集,测试集是非常宝贵的。
所以选择交叉验证这一方法。
第一次将1234作为训练,5作为测试,第二次以1245作为训练,3作为测试。这样交叉验证,将所有(5次)结果处理。比如求均值,这样可以得到对于一个参数的多次验证结果
横轴hi参数值,纵轴是准确率。
对于将图像进行偏移、遮盖和灰度化,都会与原来的图像具有相同的L2距离。但是实际上这几幅图是不一样的
线性函数
对于x特征加权重w得到属于每一类的得分(一共十类)。
对于32323即这个猫猫图片是3232维的,彩色图像。乘积为3072,将像素点展开为一列,即将图像转换为3072行1列的向量,对于分类结果,是一个十行一列的向量,每一行是对于取当前这个分类的概率。对于这一列像素点(相当于特征),每一个都要加一个权重,所以每一个对应的结果都需要3072个权重与特征相乘,因为有十个结果。所以权重矩阵是103072的。
特征向量是3*4的,即要分成三类,图像的属性是4个,将矩阵w,x对应相乘加上b就可以得到每一类的得分值。
相当于画出分界线(线性函数)。
但是对于刚刚那个猫猫图像,他得分属于狗子的比较高,显然是存在误差的,那我们怎么改善一下呢。
损失函数
看一看属于当前分类的得分值与属于其他分类的得分值差多少。使用损失函数公式,其中1为差值容忍度为1,在当前定义下,一定要小于1才能没有损失。损失值大说明预测结果不好。
如果说预测值位于绿色区域,是大于红色区间的,所以说预测结果不是很好,损失值比较大,落在红色区间位置,说明效果还是不错的,落在黑色区间位置,说明损失值比较小。
正则化惩罚项
对于两个不同的模型,得到了相同的损失函数值。但实际上是不一样的,这两个模型对于每个属性的重视程度不一样。
正则化惩罚项就是惩罚权重。对权重的每一项求平方然后求和,选择结果小的。
softmax分类器
SVM输出的是得分值。能不能输出一个概率呢?
就是用softmax分类器。通过得分映射为概率。
首先进行归一化,将属于每一类的得分进行escore计算,得到中间值,然后进行标准化,将当前得分(24.5)的中间值除以属于每个类别的得分中间值(24.5,164,0.18),得到属于当前类别的概率。
但是这个猫猫图像求出来最大的概率是属于小车的,所以我们要计算损失值,计算损失值使用当前属于正确类别的得分值来计算的,在此例中就是使用0.13来计算的,因为想要得分值越低,损失越高,得分值越接近于一(越高),损失越小,所以选用log函数正合适,因为计算值基本都为负值,多以进行取反。如下2图。
两种损失函数比较
四一种如果对于每一类的得分差不多那么求出来损失值比较小甚至接近于零,所以说第一种损失函数做得不够好。但是第二种首先会进行EXP映射,会将值先进行映射,就不会出现第一种的缺点。
目标函数要解决的问题-优化问题
下山问题,想要找到J(θ)最小值,用梯度下降法一步一步的求J(θ),每一步得出几个θ值,综合几个值找到下降最快的方向。每走一步求一个新的方向
最优化问题
前向传播
就是从输入数据到得出损失值的过程(x->loss)。通过前向传播得到loss值,然后再通过反向传播优化参数值。
epoch值相当于迭代完所有的图像次数,batch是选择了(假如说)64个图像进行完整的前向传播和反向传播的次数。可以看到实际情况在每次迭代后也有可能损失值提高,但是总体是下降的。
就是在每次更新的时候,加一个更新的限度。就是类似于梯度下降时,每次走的步长是多少。(0.001或者0.0001这样小点的)
反向传播
一个反向传播的例子。f的值时由下面等式决定的,可以通过求偏导来求出每个参数(x,y,z)对结果的贡献值有多大。在反向传播中就是要求出每个权重参数对结果产生的影响是多大的。
梯度是一步步从L传到z再从z传到x,y.是看红色下、传播路径。
举例说明:z=x*y,求x相对z的贡献程度就是求z对x的偏导,那么就是y;求y相对z的贡献程度就是求z对y的偏导,那么就是z,相当于互换的感觉.
下一部分正式开始讲神经网络。