Sigmoid函数与Softmax函数的理解

1. Sigmod 函数

1.1 函数性质以及优点

其实logistic函数也就是经常说的sigmoid函数,它的几何形状也就是一条sigmoid曲线(S型曲线)。

其中z是一个线性组合,比如z可以等于:b + w1*x1 + w2*x2。通过代入很大的正数或很小的负数到g(z)函数中可知,其结果趋近于0或1

A logistic function or logistic curve is a common “S” shape (sigmoid curve).

也就是说,sigmoid函数的功能是相当于把一个实数压缩至0到1之间。当z是非常大的正数时,g(z)会趋近于1,而z是非常小的负数时,则g(z)会趋近于0

压缩至0到1有何用处呢?用处是这样便可以把激活函数看作一种“分类的概率”,比如激活函数的输出为0.9的话便可以解释为90%的概率为正样本。

优点:

1、Sigmoid函数的输出在(0,1)之间,输出范围有限,优化稳定,可以用作输出层。

2、连续函数,便于求导。

1.2 函数缺点

sigmoid也具有自身的缺陷。

第一点,最明显的就是饱和性,从上图也不难看出其两侧导数逐渐趋近于0, 即 。具体来说,在反向传播的过程中,sigmoid的梯度会包含了一个  因子(sigmoid关于输入的导数),因此一旦输入落入两端的饱和区,  就会变得接近于0,导致反向传播的梯度也变得非常小,此时网络参数可能甚至得不到更新,难以有效训练,这种现象称为梯度消失。一般来说,sigmoid网络在5层之内就会产生梯度消失现象。

第二点,激活函数的偏移现象。sigmoid函数的输出值均大于0,使得输出不是0的均值,这会导致后一层的神经元将得到上一层非0均值的信号作为输入,这会对梯度产生影响。。

第三点,计算复杂度高,因为sigmoid函数是指数形式。

1.3 Sigmod函数求导

sigmod 求导过程很简单,可以手动推导。

2. Softmax 函数

2.1 Softmax函数表达式与性质

softmax函数,又称归一化指数函数。它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。下图展示了softmax的计算方法:

下面这张图便于理解:

softmax直白来说就是将原来输出是3,1,-3通过softmax函数一作用,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标!

由于Softmax函数先拉大了输入向量元素之间的差异(通过指数函数),然后才归一化为一个概率分布,在应用到分类问题时,它使得各个类别的概率差异比较显著,最大值产生的概率更接近1,这样输出分布的形式更接近真实分布。

2.2Softmax函数的解释

Softmax可以由三个不同的角度来解释。从不同角度来看softmax函数,可以对其应用场景有更深刻的理解。

2.2.1 是arg max的一种平滑近似

softmax可以当作arg max的一种平滑近似,与arg max操作中暴力地选出一个最大值(产生一个one-hot向量)不同,softmax将这种输出作了一定的平滑,即将one-hot输出中最大值对应的1按输入元素值的大小分配给其他位置。

2.2.2 归一化产生一个概率分布

Softmax函数的输出符合指数分布族的基本形式

其中  。

不难理解,softmax将输入向量归一化映射到一个类别概率分布,即  个类别上的概率分布(前文也有提到)。这也是为什么在深度学习中常常将softmax作为MLP的最后一层,并配合以交叉熵损失函数(对分布间差异的一种度量)。

2.2.3 产生概率无向图的联合概率

从概率图模型的角度来看,softmax的这种形式可以理解为一个概率无向图上的联合概率。因此你会发现,条件最大熵模型与softmax回归模型实际上是一致的,诸如这样的例子还有很多。由于概率图模型很大程度上借用了一些热力学系统的理论,因此也可以从物理系统的角度赋予softmax一定的内涵。

3. 总结

• 如果模型输出为非互斥类别,且可以同时选择多个类别,则采用Sigmoid函数计算该网络的原始输出值。

• 如果模型输出为互斥类别,且只能选择一个类别,则采用Softmax函数计算该网络的原始输出值。

参考链接:

https://zhuanlan.zhihu.com/p/69771964  (有许多sigmod 和 softmax函数理解的例子)

https://zhuanlan.zhihu.com/p/79585726  (对softmax函数与交叉熵函数的理解)

原文地址:https://www.cnblogs.com/jiashun/p/doubles.html

时间: 2024-11-05 19:28:30

Sigmoid函数与Softmax函数的理解的相关文章

logistic函数和softmax函数

  简单总结一下机器学习最常见的两个函数,一个是logistic函数,另一个是softmax函数,若有不足之处,希望大家可以帮忙指正.本文首先分别介绍logistic函数和softmax函数的定义和应用,然后针对两者的联系和区别进行了总结. 1. logistic函数 1.1 logistic函数定义 引用wiki百科的定义: A logistic function or logistic curve is a common "S" shape (sigmoid curve). 其实逻

Softmax函数与交叉熵

在Logistic regression二分类问题中,我们可以使用sigmoid函数将输入Wx+b映射到(0,1)区间中,从而得到属于某个类别的概率.将这个问题进行泛化,推广到多分类问题中,我们可以使用softmax函数,对输出的值归一化为概率值 这里假设在进入softmax函数之前,已经有模型输出C值,其中C是要预测的类别数,模型可以是全连接网络的输出aa,其输出个数为C,即输出为: 所以对每个样本,它属于类别i的概率为: 通过上式可以保证 ,即属于各个类别的概率和为1 对softmax函数进

glViewport()函数和glOrtho()函数的理解

glViewport()函数和glOrtho()函数的理解     OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho. glOrtho是创建一个正交平行的视景体. 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况.比如,常用的工程中的制图等.需要比较精确的显示. 而作为它的对立情况, glFrustum则产生一个透视投影.这是一种模拟真是生活中,人们视野观测物体的真实情况.例如:观察两条平行的火车到,在过了很远之后,这两条铁轨是会相交于一处的.还有,离眼睛近

函数声明和函数表达式的理解

JScript和ECMAScript的变现不一致,但是对于现在的w3c规范来说都是遵循ECMAScript的.所以函数申明和函数表达式对JScript的表现在此就不做过多的介绍,可以移步汤姆大叔blog深入学习:揭秘命名函数表达式 1 function foo(){ return 1; }//函数声明 2 var foo = function(){ return 1; };//函数表达式 1 function a(){ 2 alert(foo());//1 3 function foo(){ r

理解函数表达式的函数名称

函数表达式: function 函数名称(可选)(参数:可选){函数体}. 之前不怎么理解:既然函数表达式里的函数名称可选,那有函数名与没函数名又有什么区别呢. 按照EMCA标准,函数表达式格式如下: FunctionExpression : function Identifier opt ( FormalParameterList opt ){ FunctionBody } 这种函数表达式又称有名函数表达式(named function expression),这个名称只能在函数内部使用 va

python实现并绘制 sigmoid函数,tanh函数,ReLU函数,PReLU函数

python实现并绘制 sigmoid函数,tanh函数,ReLU函数,PReLU函数 # -*- coding:utf-8 -*- from matplotlib import pyplot as plt import numpy as np import mpl_toolkits.axisartist as axisartist def sigmoid(x): return 1. / (1 + np.exp(-x)) def tanh(x): return (np.exp(x) - np.e

softmax函数python实现

import numpy as np def softmax(x): """ 对输入x的每一行计算softmax. 该函数对于输入是向量(将向量视为单独的行)或者矩阵(M x N)均适用. 代码利用softmax函数的性质: softmax(x) = softmax(x + c) 参数: x -- 一个N维向量,或者M x N维numpy矩阵. 返回值: x -- 在函数内部处理后的x """ orig_shape = x.shape # 根据输

272 函数的理解和使用:回调函数,匿名函数自调用IIFE,**函数中的this**

什么是函数? 用来实现特定功能的, n条语句的封装体 只有函数类型的数据是可以执行的, 其它的都不可以 为什么要用函数? 提高复用性 便于阅读交流 函数也是对象 instanceof Object===true 函数有属性: prototype 函数有方法: call()/apply() 可以添加新的属性/方法 函数的3种不同角色 一般函数 : 直接调用 构造函数 : 通过new调用 对象 : 通过.调用内部的属性/方法 函数中的this 显式指定谁: obj.xxx() 通过call/appl

JavaScript 函数声明,函数表达式,匿名函数的区别,深入理解立即执行函数(function(){…})()

function fnName(){xxxx}; // 函数声明:使用function关键字声明一个函数,在指定一个函数名. //例如:(正常,因为 提升 了函数声明,函数调用可以在函数声明之前) fnName(); function fnName(){ alert('Hello World'); } var fnName = function(){xxxx}; //函数表达式:使用function关键字声明一个函数,但是未给函数命名,最后将匿名函数赋予给一个变量. //例如1:(报错,变量fn