002-神经网络基础-得分函数,SVM损失函数,正则化惩罚项,softmax函数,交叉熵损失函数

得分函数:

将图片拉伸成一个一维矩阵x,也就是3072×1,最后要得出10个分类的得分值也就是10×1,那w就得是10×3072的矩阵,也就是10组3072个特征的权重值,乘以x,加上b,得到的一个10×1的矩阵,这个矩阵就是最终的每个分类的得分值。

 

 

 

 

 

假设将图像分为2×2个像素点,最后又3中类型,那么图像可以被拉伸为4×1的矩阵,最后的结果是3×1的矩阵,那么权重W只能是4×3的矩阵了

也就是说有3组权重参数,每组参数中有4个特征的权重,这里的3组权重参数对应于最后要分类的3个类别,4个特征的权重代表每个特征所占的该类别的重要性(其中负值表示起到了反作用)。

这个例子中,最后得到狗的得分值最高。当然这只是个例子,不代表普遍性。

 

 

 

 --------------------------2018年10月14日02:52:49--睡觉---------------------------------------

 --------------------------2018年10月14日16:41:09--继续---------------------------------------

相当于做了这么一件事:

利用一个直线作为决策边界,将样本进行分类

b表示与Y轴的焦点。

 

损失函数:

输入猫的图像,输出类别得分,猫:3.2,车5.1,青蛙:-1.7

5.1-3.2表示输入猫判断为车与输入猫判断为猫的得分差异,

再加上1,表示对损失函数的容忍程度,这里的1可以换成任何实数,可以用△表示。

意义在于看看判断错误的情况下,得分与判断正确的情况下的最大差异

通过损失函数可以衡量当前的模型到底是怎么样的。

绿色表示错误的得分值,蓝色表示正确的得分值。

delta表示容忍程度。

如果对于所有样本损失函数是加起来之后在求一个均值。

也就是说,样本多少,对于损失函数是没有关系的。

 如果有下列一组输入和权重

得到的f(x,W)都是1

w1只关注x样本的第一个像素(其他权重都为0),

w2关注的是x样本的所有像素

那么如果新来一个x像素中,第一个像素是一个背景,毫无意义的话,

w1的权重就会判断错误

所以说,我们希望要一个w2模型,而不是要w1模型。

所以我们需要引入一个叫做正则化惩罚项的东西

用来惩罚

 

正则化惩罚项:

 

R(W1) = 1+0+0+0 =1

R(w2) = 1/16+1/16+1/16+1/16 = 4/16 = 1/4

说明了对于w1的惩罚力度要大于w2的惩罚力度,所以w1的损失函数就要大于w2的损失函数,

那么就说明模型w1的损失要大于模型w2的损失。

损失函数就可以表示为:

 

紧接着又有一个问题

我们利用w模型判断出的结果总是得分值,没有概率来的直白,

比如,w判断是猫的得分55,汽车的的得分35,青蛙的得分96,就不如

猫的概率是13%,汽车的概率是32%,青蛙的概率是55%。

如何转换为概率?用softmax分类器,其中

有sigmoid函数来解决实际值转换为概率的问题

 

 

 

softmax分类器

sigmoid函数:

将得分函数映射到sigmoid函数中,然后在通过sigmoid函数得出的概率值进行分类。

Softmax的输出(归一化的分类概率)

损失函数:交叉熵损失(cross-entropy loss)

softmax函数:

其输入值是一个向量,向量中元素为任意实数的评分值

输出一个向量,其中每个元素值在0到1之间,且所有元素之和为1

softmax要做一件什么事?就是将前边所说的得分值映射到e的指数上,然后再计算权重

 

比如这个例子,输入猫,输出猫的得分是3.2,e的3.2次方是24.5,也就是将3.2映射到了e的指数上,

同理5.1映射为164.0;1-.7映射为0.18

这里的exp做的事,相当于softmax函数的分子部分。

然后normalize做的就是归一化的事情了。

24.5÷(24.5+164.0+0.18) =0.13 

24.5÷(24.5+164.0+0.18) =0.87

24.5÷(24.5+164.0+0.18) =0.00

这里softmax函数输出的是一个概率值,也就是权重值。

那么softmax的损失函数是什么样的?取对数。

顾名思义,损失函数,

损失值越大就说明误差越大,模型效果越差;

损失值越小就说明误差越小,模型效果越好。

损失函数:交叉熵损失(cross-entropy loss)

只对softmax函数预测正确的概率求损失。

就像上图的0.13,输入一个猫,输出的是是猫的概率为0.13,是汽车的概率是0.87,是青蛙的概率是0.00

那么判断正确的概率是0.13

sofamax的损失函数就只对这个0.13记性求损失函数。

由于对数函数的特性,

概率(Pi)的取值只是0~1之间

那么概率越大,logPi的值就越接近0,对应于损失函数的意义,正确的概率越大,损失就会越小。

加一个负号的意思就是把损失大的值变为正的。

所以

对0.13取对数加负号,得到的值是0.89

所以这个w模型用softmax函数得出的损失值是0.89

那么问题来了,前边说的得分值,和得分值计算出的损失函数,用的好好的,为什么要多此一举使用softmax函数和它的损失值呢?

举个例子:

如果一个模型输出的分类得分是:10,9,9;10是正确类别

那么利用svm也就是得分值的那种方法,计算损失值:

max(0,9-10+1)+max(0,9-10+1) = 0

利用softmax计算:

exp(10) = 22026.47

exp(9) = 8103.08

归一化:

22026.47÷(22026.47+8103.08+8103.08) = 0.576

 -log10(0.576)=0.24

一个是0,一个是0.24

可以看出对于模型的损失,svm和softmax是有区别的。

而且10,9,9对于分类不是那么的明显,相差只有1。

用softmax的损失函数可以更好地判别模型的好坏。

 

 

原文地址:https://www.cnblogs.com/Mjerry/p/9785024.html