zoukankan      html  css  js  c++  java
  • softmax和softmax loss的学习记录

    0. 喜洋洋

        小黑喵教程3之卷积神经网络中的softmax函数和softmax loss。在CNN完成MNIST手写识别的实验中,我们的loss函数选用了softmax loss,但没有多作说明。今天特别的把这一点内容补上,小白喵要认真听课哦。

        听到softmax不禁就会想起max。要区别两者的关系,打个最通俗的比方:max是一个很专一的人,无论有多少的输出,它也只会对应一个输出;而softmax不同,它会把所有的输入当做“备胎“,给每一个输入打分,输出为等同输入长度的向量,每个元素值域为[0,1],且加和为1(例如CNN的MNIST实验中,某一个图片对应0-9十个分类的概率)。

        对softmax这个渣男有了基本认识之后,就需要对其公式和loss函数公式进行简单的讲解了。不要怕公式,放平心态其实挺简单的。

    1. 灰太狼

      1.1 softmax

        首先回忆一下softmax出现在网络的哪个位置。前面也讲了,他是最后做“分类预测”(打分)时出现,所以肯定是神经网络完成“卷积-池化-全连接层”之后。所以它接收的输入为全连接层输出的向量。

        在CNN的MNIST实验中,可以理解为softmax就是接收了最后一个全连接层10维向量的输出。之前全连接层的输出每个元素的值可能千奇百怪并不是在[0,1]之间,当然值越大代表某个数字的概率也就越大。softmax要做的其实就是把这组10维向量经过一个数学公式进行归一化。

        softmax公式如下:

    上式中,Sj为10维向量的第j维对应的softmax输出,aj为第j维向量原来的值,分母中即为所有的该向量的总和(归一化,在MNIST例子中T=10)。所以每一个Sj均在[0,1]直接,且加和为1。

        举个例子,对于一个3分类的问题。如果最后一层全连接输出为(1,2,3),那么经过softmax函数之后输出为(0.09,0.24,0.67)。这就代表了它属于第3类的概率最高。

        丹丹可能会疑惑。既然(1,2,3)已经能好好的表达属于哪个概率最大了,为什么还要softmax呢。第一是为了归一化,方便设计loss函数;第二是在神经网络训练减少loss时,方便求导(减少loss就是按照梯度下降最快的方式,softmax loss函数求导性质比较好,所以优化相对简单),先简单这么理解吧,需要发论文的时候这一块要更深入的了解。

      1.2 softmax loss

        讲完softmax后感觉softmax loss就很容易了,就是一个数学定义式。loss函数是为了做什么,不就是记录预测值和真实值的差距吗。定义为:

    上式中,L代表softmax loss。Sj就是1.1中介绍的softmax输出,yj代表这幅图片属于哪个类(也就是说,MNIST例子中,yj这个10维向量只有1个元素为1,其他都为0)。所以上式简单表达为:

    最后softmax loss就变为了softmax输出中打分最高的一维的log函数取负。对应的实际意义是什么呢,我们可以先看看-log函数的图像:

    我们的Sj是处于[0,1]之间,对于loss函数来说,Sj越大(网络预测的概率越大,越准),那么L的值就越小;相反L的值越大。例如,Sj=0.6和Sj=0.3都是归类到数字1,但是前者的L值更小代表它预测得更准。所以当我们训练很多轮加强网络深度之后,对于MNIST这个例子,最好的效果就是让softmax输出类似于(0.99,0,0,0,0,0,0,0,0,0,0),这样L值无限趋近于0。

    2. 我只是一只喵

        我也学到了很多东西,当然也愿意和丹丹分享。如果有不明白的地方一定要和小黑喵讨论。好啦,今天的内容就到这里了。

  • 相关阅读:
    (引)spring学习笔记1.什么是控制反转
    Arduino 各种模块篇 步进电机 step motor 舵机 servo 直流电机 总复习
    Raspberry Pi Wireless Adaptor
    Pyramid 使用总结1
    Arduino 各种模块篇 人体红外感应模块 proximity sensor
    Pyramid 使用总结2
    Webcam Streaming Desktop Recording on Linux for ubuntu or its destros
    Arduino 各种模块篇 步进电机 step motor( 不用库,不用shield, 纯)
    Arduino 各种模块篇 motor shield 电机扩展板(舵机、直流电机、步进电机party)
    转载 stepper motors
  • 原文地址:https://www.cnblogs.com/catallen/p/8854937.html
Copyright © 2011-2022 走看看