PPC的C/C++和人工智能学习笔记
每一篇学习笔记,都只是为了更好地掌握和理解

深度学习(2)-得分函数损失函数

图像分类是计算机视觉的核心任务,那么对于一副输入的图片,能否计算出他对应于每一种分类的分数呢(比如我们要进行一个图像10分类的任务),有分数这个更加具体的数值,应该可以帮助到机器更好地完成任务。

 

定义得分函数 f(x,W) = Wx + (b)

这里的x就表示输入的图片,W表示参数,b是常数项,最主要的影响是前面的Wx。

 

以一个10分类任务来描述这个得分函数的意思:

我们有一组训练数据,都是32×32像素的彩色图片(每像素又分R,G,B三分量),对应10个类别(比如猫、狗、飞机…)。那么这里的输入x就是32×32×3=3072个数据组成的一个向量(也可以称为是有3072行1列的矩阵 [3072×1]),W是权重参数(可以这样理解:不同类别的图片的不同像素点的数据大小对最终结果的影响是有区别的,这个区别就是用权重参数来表达的),因为是10分类,所以有10组权重参数,每组权重参数3072个,用矩阵表示就是10行3072列[10×3072]就是这个W。这样,对于每个输入图片,Wx = [10×3072]×[2072×1] = [10×1](矩阵运算特性),也就是输出是一个10行1列的矩阵[10×1],也就得到了相对应10个类别的分数。

这里引入了权重矩阵,好像和原来的KNN算法有大区别了?训练是为了得到合适的权重参数。而且每个类别都有一组权重参数,那么训练好了权重参数,判断的时候,就只要把 输入图片乘上这个权重参数,就可以得到每个分类的得分了,根据得分来判断是哪类,计算速度感觉快多了!

W权重参数是有正有负的,如何得到合适的W权重参数是个麻烦事,好像就是训练任务就是为了得到合适的W。最终测试的时候,哪个类得分高就是哪个类。但是标准比较难定,就是有多好,有多不好(特别是在训练的过程中,如何来指导调整权重参数?),这个是用得分函数的缺陷的地方。

上图的W权重参数,计算得到的猫的得分是负值,说明这个W权重参数选择得不好。

 

为了解决得分函数的评判标准问题(就是有多好多不好),我们引入损失函数(计算的结果称为LOSS值)。

要通过LOSS值(损失函数计算结果)来实现得分函数无法给出评判标准的问题,我们希望对于一个输入图片,他在正确分类上的得分都要远高于其他分类得分,那么我们说这个权重参数W选得好,这个时候LOSS值就是最小=0。而如果正确分类的得分不如其他错误分类的得分,说明权重参数W选得不好,这个时候LOSS值就偏大。这样我们的目标就是调整权重参数W,使得LOSS值接近0或者等于0,这样我们就有了调整的方向了。

 

SVM损失函数(支持向量机的损失函数)

为了简化,我们用上图三分类的任务来描述这个损失函数并计算他们的LOSS值。

上图是根据一种权重参数W[3类×4图像数据],根据f(x,W)=Wx+b计算得到的得分值。要将这个得分值转换为LOSS值。

SVM损失函数是用 错误分类得分 – 正确分类得分 + 1,然后和0比较取最大值以后的和作为LOSS值的,而正确分类是不参与计算的。列个表格来说明这个问题:

 

LOSS值计算过程 LOSS值 结论
输入图(猫) max(0,5.1-3.2+1) + max(0,-1.7-3.2+1) 2.9 值不大,说明还有些问题
输入图(汽车) max(0,1.3-4.9+1) + max(0,2.0-4.9+1) 0 值为0,说明分得很好,正确分类的得分>(其他得分+1)
输入图(青蛙) max(0,2.2-(-3.1)+1) + max(0,2.5-(-3.1)+1) 12.9 值很高,说明分类完全不对

从这里也看出LOSS值是越小越好。

 

损失函数的那个 +1 表示一个阀值,也就是说 正确的分类得分要最高,而且要高于其他分类的得分至少 1,才可能 LOSS值=0

也就是说:其他错误分类的得分+1以后 再去减掉 正确分类的得分,假如还是小于0的,就说明这个分类比较好。

所以这个 +1 其实就是一个 阀值,可以设置高一些,也可以设置低一些,越高说明我们对分类要求越高。

 

把多个输入图的LOSS值平均,就是平均LOSS值。因为我们在训练的时候,数据很多,通常用多个图片一组来进行训练,所以需要取平均值。

正则惩罚项:

我们先来看一组数据,比如一个输入是[1,1,1,1],有两种权重参数,W1=[1,0,0,0],W2=[0.25,0.25,0.25,0.25],根据得分函数Wx计算得到的得分是一样的,那么也意味着两种权重对应该输入的LOSS值是一样的。但是W1和W2明显是不同的,W1只用到了1个数据,W2更加平滑,所以我们希望是参与W2的LOSS值更加小一点,引入正则惩罚项:kR(W)。他等于各权重参数的平方和乘以参数k(k的大小可以控制这个惩罚的力度,比如选0.5)。把前面计算得到的LOSS值再加上这个正则惩罚项,就是最终的损失函数。

权重W1的正则惩罚项= 0.5×(1+0+0+0)=0.5

权重W2的正则惩罚项= 0.5×(0.25×0.25 + 0.25×0.25 + 0.25×0.25 + 0.25×0.25)=0.125

可以看出加上正则惩罚项以后LOSS值就有区别了。也体现了我们希望表达W2更好的意思。

(2017-02-01 www.vsppc.com)

学习笔记未经允许不得转载:PPC的C/C++和人工智能学习笔记 » 深度学习(2)-得分函数损失函数

分享到:更多 ()

评论 抢沙发

评论前必须登录!