导读:

softmax的前世今生系列是作者在学习NLP神经网络时,以softmax层为何能对文本进行分类、预测等问题为入手点,顺藤摸瓜梳理了整个神经网络工作的基本原理。其中包含:

1.softmax函数的正推原理,softmax的代数和几何意义,softmax为什么能用作分类预测,softmax链式求导的过程。

2.从数学的角度上研究了神经网络为什么能通过反向传播来训练网络的原理,神经网络的权重更新原理,权重正则化的原理。

3.结合信息熵理论,对二元交叉熵为何适合作为损失函数进行了探讨。

通过对本系列的学习,你可以全面的了解softmax的来龙去脉。如果你尚不了解神经网络,通过本系列的学习,你也可以学到神经网络反向传播的基本原理。学完本系列,基本神经网络原理就算式入门了,毕竟神经网络基本的网络类型就那几种,很多变种,有一通百通的特点。

网上对softmax或是神经网络反向传播知识的整理,基本都通过一个长篇大论堆积出来,一套下来面面俱到但又都不精细。本文将每个环节拆开,分别进行详细介绍,即清晰易懂,又减轻了阅读负担,增加可读性。本文也借鉴了其他作者的内容,并列举引用,希望大家在学习过程中能有所收获

本章内容提要:

softmax函数常用在解决多分类的问题上,就是如何将一批数据分成多个不同的类。在刚学习softmax函数时,网上资料一上来就是下面这个公式,

于是很费解这个奇怪的公式时从何而来,为什么这样的一个公式就可以做多分类的概率预测函数?让我们来一起研究一下他的数学意义,并将其推导出来。

一、定义一个分类模型

在探讨多分类问题时,我们首先要引入一个重要的分类模型,就是形如下面这个向量

如果你学过onehot code编码的话就会知道,这个T向量代表一个“东西”有“五种分类”的可能,分别对应向量中的五个位置,哪个位置上的数字是1,就说明这个东西属于哪一类。一个向量中只有一位可以为1,其他位置都为0. 那么显然,上图T对应的“东西”就属于“第三类”,因为只有三号位置上的值为1,其余位置上都为0.

利用这个模型,就很容易的把逻辑上的分类问题转换成数学上的向量问题了。

我们给向量中的每个元素定义一个通项式,

对于T向量中的每个元素来说,表达式就是

二、定义一个概率模型

有了一个可以对分类问题进行描述的数学模型T,我们再来构建一个可以用于计算分类的概率模型。

结合文章第一部分的例子,对于一个“东西”来说,他有五种分类可能,属于“第一类”的概率为、属于“第二类”的概率为、……属于”第五类“概率为,即:

那么根据常识有:

于是我们可以推出描述一个“东西”属于k种类型中的某一类的概率表达式:

很好理解,一个“东西”肯定属于几种分类中的一种,那么所有分类的概率之和则为1,即:

结合文章第一部分和第二部分的两个例子:

表示的是向量中,第个元素等于1的概率。

因此可以求得期望E:

而向量中只有第三项为1,其余均为0,所以:

即期望值等于概率分布:

三、引入一个指示函数概念

此时我们要引入一个指示函数 I  的概念:

这个函数的意义是,当 I 函数括号内表达式为真时,I 函数值为1。当 I 数括号内表达式为假时,I 函数值为0。所以,T 向量中的某个元素的值还可以表示成:


即当y=i时:

利用这个概念,我们将多项式分布转换为指数分布族表达式,这一堆东西看起来很复杂,其实并不难理解。看不懂也没关系,继续往下看后面的注释

其中:

因此我们得到一个很有用的表达式:

这里补充一下:

多项式分布为什么能转换为指数分布族表达式?我们知道指示函数I 只有两个结果,即0或1,

又因为指数计算有如下基本定义:

所以当y = i时,有:

可以看出二者是等价的关系,这就是多项式分布能转换为指数分布的原理。

参考文献:https://www.cnblogs.com/wallacup/p/6024855.html?utm_source=itdadao&utm_medium=referral

四、通过概率模型和分类模型推导softmax表达式

此时我们得到一个指数分布族表达式:

我们对其进行变换,变换过程如下:

对1式,我们对两边同时求和:

根据文中第二部分结论  得出:

因为1式中  ,联立两式的:

得出:

上式就是我们推导出来的softmax函数表达式,即:

根据第二部分我们知道, 表示的是向量中,第个元素等于1的概率。因此softmax计算出的最后结果为:

代表的是一个概率值,对于一个分类问题来说,softmax函数的结果,表示一个“东西”属于每个类别的可能性。这也就是为什么softmax函数适用于解决分类问题的原因。

五、总结

看完本文,基本对softmax函数的表达式究竟是怎么来的有了一个清楚的认识。

1.我们本意是想构建一个数学模型,用来表示一个已知“东西”属于很多类中的哪一类,于是我们提出了一个T向量。

2.后来我们又延伸了想法,对于一个未知的“东西”,我们怎么判断他属于哪一类事物?于是我们引入了一个概率模型φ。

3.但是向量T和概率φ之间并没有关联关系,于是我们引入了一个“指示函数I”,通过I的特性,将向量T和φ之间构建了一个关系表达式。这个表达式就是我们的softmax函数,它描述了概率和分类之间的关系。

4.那这个表达式为什么叫softmax?为啥不叫hardmax?不叫softmin?或者其他的什么?下一篇文章我们来解析一下这个问题。

传送门:softmax函数名字的由来(代数&几何原理)——softmax前世今生系列(2)

六、附学习笔记如下:

参考文献:

https://www.cnblogs.com/90zeng/p/softmax_regression_introduction.html

https://blog.csdn.net/ITleaks/article/details/80337855

https://blog.csdn.net/hejunqing14/article/details/48980321

softmax函数的正推原理——softmax前世今生系列(1)相关推荐

  1. softmax函数_干货 | 浅谈 Softmax 函数

    点击上方"视学算法",马上关注 来自 | 知乎 作者 | LinT链接丨https://zhuanlan.zhihu.com/p/79585726编辑 | 深度学习这件小事公众号仅 ...

  2. softmax函数名字的由来(代数几何原理)——softmax前世今生系列(2)

    导读: softmax的前世今生系列是作者在学习NLP神经网络时,以softmax层为何能对文本进行分类.预测等问题为入手点,顺藤摸瓜进行的一系列研究学习.其中包含: 1.softmax函数的正推原理 ...

  3. Softmax 函数及其作用(含推导)

    Softmax函数的定义及作用 Softmax是一种形如下式的函数: P(i)=exp(θTix)∑Kk=1exp(θTkx) 其中 θi和x是列向量, θTix可能被换成函数关于x的函数 fi(x) ...

  4. Python实现softmax函数

    Python实现softmax函数 : PS:为了避免求exp(x)出现溢出的情况,一般需要减去最大值. # -*-coding: utf-8 -*-import tensorflow as tf i ...

  5. 使用python构建三层神经网络、softmax函数

    [机器学习]使用python手写三层神经网络 输入层到第一层的传递表示 第一层到第二层的传递表示 第二层到第三层的传递表示 全过程传递表示代码 输入层到第一层的传递表示 首先看输入层到第一层的第一个神 ...

  6. What is the Softmax Function?详解机器学习中的Softmax函数【小白菜可懂】

    目录 定义 公式 计算 Softmax vs Sigmoid Softmax vs Sigmoid 计算 Softmax vs Argmax Softmax vs Argmax 计算 应用 神经网络中 ...

  7. 【Machine Learning】18.Softmax函数

    Softmax函数 1.导入 2.Softmax函数 2.1 算法简介 2.2 损失函数 3.Tensorflow 3.1 The *Obvious* organization 3.2 preferr ...

  8. Softmax函数与交叉熵

    Softmax函数 背景与定义 导数 softmax的计算与数值稳定性 Loss function 对数似然函数 交叉熵 Loss function求导 TensorFlow 方法1手动实现不建议使用 ...

  9. softmax函数到底是什么?——归一化指数函数,及其python实现

    softmax应该算是机器学习的入门数学知识了.softmax函数,它并不十分复杂,但又不是十分简单,总之这个函数就是很难去背诵下来,以致于每次你要写softmax的时候,都得搜一下才行.而每次搜索s ...

最新文章

  1. Linux Sed命令具体解释+怎样替换换行符quot;\nquot;(非常多面试问道)
  2. linux mate桌面主题下载_MATE-Desktop 1.11 发布下载,Linux 桌面
  3. 【MyBatis使用】mapper.xml 调试时无法打印SQL的无奈解决方法分享(原因说明+举例)
  4. boost::mp11::mp_invoke_q相关用法的测试程序
  5. python读取栅格gdal库下载链接
  6. virtualenv 安装不同版本的虚拟环境的办法
  7. ArcGIS锁定显示比例
  8. linux uvc协议_USB摄像头的UVC协议
  9. Opencv之threshold
  10. 第二十三讲 常用技术标准【2021年软考-高级信息系统项目管理师】
  11. Charset API
  12. ScrollView水平滑动条选中条目的居中显示
  13. 如何阅读matlab项目并调试运行成,【转】读书笔记:MATLAB
  14. 深圳软件测试培训:Js中的变量
  15. mysql table crashed_mysql Table Crashed
  16. pwn-栈迁移-ROP
  17. AD(altium designer)15原理图与PCB设计教程(三)—— 原理图元器件库的管理
  18. ue4 Niagara粒子打包安卓后不显示
  19. 解决sublime安装插件被墙失败的方法
  20. 通达信筹码集中度计算公式,解决了结果不同的问题

热门文章

  1. 分布式图处理系统--Pregel
  2. Ajax——跨域与JSONP
  3. 表单元素——下拉列表
  4. Android开发详解:第3章《App UI 设计》
  5. Python--字典的操作
  6. 小乌龟 TortoiseSVN的安装教程
  7. 拼多多店铺运营不得不知的留个运营小知识
  8. Pycharm 手动程序包安装
  9. 图像特征提取算法:方向梯度直方图HOG
  10. 苹果手机的处理器全都是64位的吗?