线性分类器 网络
1.线性分类器得分函数函数
CIFAR-10:一共有10个类别,几千张图片的分类任务学习
给你一张图片,而后得出每一个类别的分数是多少,结果是一个得分向量score-vector测试
咱们把[32,32,3]的图片当作x,线性分类器就是给出权重W,获得10个得分优化
简单一点,咱们把32*32*3的矩阵拉成一个3072*1的向量,最后咱们想获得10维的得分向量,那么咱们的权重W就得是10*3072的矩阵,相乘后获得10*1的向量编码
f是一个函数,它所作的事情很是简单,就是就输入矩阵映射成为得分向量,决定这个得分函数的就是W,咱们但愿获得最合适的一组W。spa
识别图像---其实就是分类问题 .net
图片识别是计算机视觉的核心任务
每一个图片是由像素组成的
200*200*3=12000个像素值(特征)3d
单通道:灰度值【0~255】
一个像素点只有一个值blog
三通道:RGB
一个像素点有三个值组成
图像数字化三要素:长度,宽度,通道数
给你一张图片,也就是一个矩阵,让你完成一个任务,识别图像中的内容找出分类,一共有10个类别几千张图片
把你输入的矩阵x,经过f,映射为一个得分向量
把图像作一个reshape,将其拉成一个一维3072*1的向量。
为了获得一个10*1的矩阵(向量),要配给W一个10*3072,因此10*3072 与 3072*1 相乘,获得一个10*1的列向量,就认为是一个10维的得分向量
实例:
咱们输入一个图像,拉伸后成为1维,为了方便,简单为4*1的向量,得分向量为3个分类,3*1,因而咱们的W就要是一个3*4的矩阵,线性分类器嘛,有偏置项b(wile增长灵活性),最后咱们获得y=W*x+b的线性函数(得分函数,y就是得分向量)。
上面的W在dog类别中得分最高,这显然不是咱们想要的,咱们想要的是在正确的类别上有较高的得分,在错误的类别得分较低,因此咱们要作的是修正这个W,使咱们输入一张图片后,在正确的类别上得分最高。
二、线性分类器的理解---空间划分
Wx+b是空间的点
上面的例子中,有3个类别,咱们能够把W的第一行+b看作是决定第一个类别的最终得分,W的第二行+b决定第二个类别的分数,以此类推,咱们三个不一样的W和b其实就是对于空间中进行了划分,至关于三个直线(确切说是超平面,)而后咱们输入不一样的x,其实就是空间中的不一样区域。
线性分类器的理解---模板匹配(模板指的是W中的某一行)
W的每一行能够看作是其中一个类别的模板
每类得分,其实是像素点和模板匹配度
模板匹配的方式是内积运算
没有b的状况:
注意哈:有些写成了y=wx,没有偏置项b,多是这样处理的---将偏置项的值装到了W矩阵的最后一列,而后在x向量中增长一个1,也就是:
三、损失函数 LossFunction/CostFunction--衡量吻合程度
给定W,能够由像素映射到类目得分
能够调节参数(权重)W,使得映射的结果和实际类别吻合
损失函数是用来衡量吻合程度的。
损失函数1:hinge loss支持向量机SVM损失
给你一套试卷,要求你在正确题目的得分要比其余任何错误题目的得分要高出来一个值Δ,你要是全部的都高出了Δ,好,不动,要是没有高出,那就加一个惩罚值(你缺的多少就惩罚多少)
具体:
对于训练集上第i张图片数据xi
在W下会有一个得分结果向量f(xi,W)
第j类的得分为f(xi,W)j
则在该样本上损失咱们由下列公式计算获得
如今咱们由三个类别,而得分函数计算某张图片的得分为f(xi,W)= [13,-7,11],而实际的结果是第一类yi=0,假设Δ=10(在正确的类别上的得分比错误上的类别高出至少10分),上面的公式把错误类别(j不等于yi)都遍历一遍,求值加和:
咱们看一下这种状况:
f(x,w1)=1*1+1*0+1*0+1*0=1
f(x,w2)=1*0.25*4 = 1
咱们发现不一样的权重结果居然相同,那么这种状况下咱们应该选择哪一种参数呢?或者说哪一个参数更好呢?其实咱们能够猜到,第二种效果更好,由于他考虑到了全部的x,第一种的话他只考虑到了第一个参数,这样的话很容易出现过拟合的状况,即训练集上效果很是好,但测试集上效果却很差。所以第二种更好,可是有没有一种什么方法让咱们把第二种挑出来呢?固然是有的,那就是加入一个正则化惩罚项
L(W1)的正则化惩罚 = 1^2+0^2 + 0+0=1
L(w2)的正则化惩罚 = (1/4)^2 + (1/4)^2 + (1/4)^2 + (1/4)^2 = 1/4
这样w2的正则化惩罚就会更小,w1的惩罚会更大,咱们就会更承认w2,整体损失函数就会更小,咱们就会选择w2了。
最后除以N是由于要避免样本个数对结果的影响,样本个数对于模型的好坏是没有影响的。
softMax(归一化的分类几率)
损失函数2:cross-entropy(交叉熵)
作一个归一化,在A、B、C、D四个选项中选择他们的几率有多高,我本身有一份标准答案(几率向量),评估你获得的几率和个人标准答案(几率)之间的距离
对于训练集中的第i张图片数据xi
在W下会有一个得分结果向量fyi
则损失函数记作:
其输入值是一个向量,向量中元素为任意实数的
评分值
输出一个向量,其中每一个元素值在0到1之间,且
全部元素之和为1
实际工程中计算的方法是
由于e的指数次方是得分,若是过高的话容易溢出
其实softmax损失就是将以前的得分换成了几率。
softmax实例
2种损失函数的对比
SVM的随机函数有一个缺点,当错误类别和正确类别的得分很是接近时,好比说正好相差△,那么损失函数结果为0,但其实分类结果并很差,可是softmax的话对于每个分类结果都会对值进行e次幂,这样差距就会放大不少,在通过softmax几率变换,就会获得最优的结果。softmax分类器是一种永不知知足的分类器。
最优化
矩阵相乘W*x+b获得了得分向量,而后咱们首先是hingeloss(SVM),就是算正确类别的得分要比错误类别的得分高出一个Δ,而后高了没问题,没高就补充缺乏的分数,交叉熵损失就是将得分向量转化为了几率(转换公式),而后作一个归一化,我本身有一个标准答案,而后评估你的几率和标准答案之间的距离。注意点,交叉熵损失要对目标值one-hot编码。
4.最优化和梯度降低
当咱们经过分类器得到一个预测值,咱们会求得一组参数,那么咱们怎么知道这个参数时好是坏呢?这就引入了损失函数,损失函数越小说明预测值和真实值越接近。可是,咱们知道了如何评判参数的好坏,咱们应该如何获得最优参数解呢?咱们知道,一次求解确定是不够的,能获得最优参数的几率微乎其微,因此咱们就要经过屡次迭代求得最优解。这使就引出了梯度降低,梯度降低是一种经过迭代屡次求解参数的方式。咱们能够理解成计算机是一个蒙着眼睛的人,他要寻找山坡的最低点,而最低点就是最优解,使得损失函数最小的值。
由于咱们的目标是获得最优解,所以咱们要告诉计算机最优解是什么样子的,或者说告诉它你走那个方向是正确的。这个方向就是咱们对参数进行求导的结果,咱们知道导数的几何意义就是某个函数在这个点的切线的斜率,所以,根据这个特性,咱们能够知道梯度降低的方向,知道方向之后,还有一个问题,就是我应该走多快呢?或者说一步走多远呢?咱们能够想象,步子太大的话可能会越过最低点,到达另外一个山头。所以,一般状况下,咱们会选择一个小的学习率,慢慢的寻找最优解。
经过测试咱们也能够知道,学习率对于结果有很大的影响。
反向传播
正向传播链式法则
神经网络就是一系列反向传播的过程。
关于softmax和cross entrop的详细解读,推荐这篇文章 http://www.javashuo.com/article/p-rrpkcppi-np.html