目录
1.线性函数(得分函数)
从输入--->输出的映射
我们要得到它属于每个类别的得分。
这只猫有32*32*3=3072个像素点 ,有些像素点对于判定是猫有促进的作用,有些像素点对判定是猫这个类别有抑制的作用。
不同的像素点对应我们需要判断出图片中的类别是猫的重要程度不同。即权重参数W。每个特征对应不同的权重参数,若每一个特征都不同,那这3072个像素点对应3072个权重参数。
数学表示
就是矩阵运算 [1*3072] * [3072*1] 结果是1*1
对于上图中W*X=10*3072,3072代表每个类别对应每个像素点的权重参数,10代表十个不同类别要得到十个结果。
+b表示偏置项 ,权重参数W对结果起到一个决定性影响,而这个b起到一个微调的操作,影响不大。10*1表示我对这10个类别都分别进行微调。
计算方法
这里为了理解清楚些,就只用三种类别(三分类)猫、狗、船,多分类是一样的。
这个矩阵是3*4 ,3代表有三个类别,4代表猫有四个像素点,每个像素点对应一个权重值。
计算过程:W1:0.2*56+(-0.5)*231+0.1*24+2.0*2 +1.1=-96.8得到猫这个类别的得分值。
W2得到狗这个类别的得分值,W3得到船这个类别得分值。(计算过程同上)
这里解释一下权重值大小正负分别代表什么,在W2中,2.1比较大说明在狗这个类别判断中第三个像素点比较重要,所以值大,那0.0代表在狗这个类别判断中它不太重要。正值代表促进作用,负值代表抑制作用。
但是从结果来看,明明是一只猫,却分类成了狗,为什么?
因为W这个矩阵是随机生成的,神经网络在整个生命周期中就是去改变这个W,让W更适合于我们的数据去做当前的任务。因为W这个值会对最终结果产生决定性影响。
2.损失函数
如何衡量分类的结果呢?
结果的得分值有着明显的差异,我们需要明确的指导模型的当前效果,有多好或者有多差!
Sj表示其他类别,Syi表示正确类别。其他错误类别减去正确类别再加上1(这个1是一个△,表示你的容忍程度),算出来这个值越大表示错误越离谱。 损失函数得0的时候表示此时没有损失,表示分类正确。
如果损失函数的值相同,那意味着两个模型一样吗?
模型A只关注数据样本中第一个点,而没有关注后面的点。只关注局部。它会产生过拟合。
模型B关注全局,均匀分布到整体。
我们总是希望模型不要太复杂,过拟合的模型是没用的。
3.前向传播
前面一系列操作是得到了损失值:
现在我们得到的是一个输入的得分值,但如果给我一个概率值岂不是更好!
我们使用sigmoid函数将得分值转换为概率值。
Softmax分类器
步骤1:先通过e的幂次方做一个映射,exp表示e^x次方函数 ,x越大,结果值越大。(这一步是为了更明显看到差异,3.2和5.1的差异没有24.5和164的差异明显,通过这个方法就能更清楚)
步骤2:然后进行一个归一化:
计算过程: 24.5/(24.5+164+0.18)=0.13 5.1/(24.6+164+0.18)=0.87
这个0.13表示的类别是猫的概率值。注意:这里只考虑属于正确类别的概率值,概率值越接近于1表示损失越小,概率值越接近0的表示损失越大。0.87对应的是错误的分类,它是把猫识别成车的概率更大。
步骤3:归一化之后用对数函数求它的损失。用log函数实现。
由图知:0-1之间log的值都小于0,所以需要在函数前加负号转换为正值。