zoukankan      html  css  js  c++  java
  • 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的损失函数可以更好地判别模型的好坏。

     

     

  • 相关阅读:
    86. Partition List
    328. Odd Even Linked List
    19. Remove Nth Node From End of List(移除倒数第N的结点, 快慢指针)
    24. Swap Nodes in Pairs
    2. Add Two Numbers(2个链表相加)
    92. Reverse Linked List II(链表部分反转)
    109. Convert Sorted List to Binary Search Tree
    138. Copy List with Random Pointer
    为Unity的新版ugui的Prefab生成预览图
    ArcEngine生成矩形缓冲区
  • 原文地址:https://www.cnblogs.com/Mjerry/p/9785024.html
Copyright © 2011-2022 走看看