在深度学习中,我们常常选用sigmoid函数作为激活函数。sigmoid函数的具体形式如下:

f(x)=11+e−x

f(x)=\frac{1}{1+e^{-x}}
曲线表示为:

再画大一点,取x区间更大一些,则为:

显然从图像上看,sigmoid函数是数值稳定的,即对于更大范围的x,y的取值是连续的,有效的。

从理论上看,

limx→+∞f(x)=1;limx→−∞f(x)=0

{\lim}_{x\rightarrow +\infty}f(x)=1;\\ {\lim}_{x\rightarrow -\infty}f(x)=0
且中间数值可以从数学上证明是稳定的。
但我们考虑1-f(x)呢?

1−f(x)=e−x1+e−x

1- f(x)=\frac{e^{-x}}{1+e^{-x}}
我们用matlab绘制其曲线:

我们发现这时,当x趋向负无穷,甚至仅仅x趋向-800,此时1-f(x)就不再稳定了,在matlab的值变成了NAN了

其实我们发现,对于 1- f(x),显然当x趋向正无穷时,还是稳定的,此时:
分子:e−x→0e^{-x}\rightarrow 0,而分母:1+e−x→11+e^{-x} \rightarrow 1,

显然01\frac{0}{1},结果趋向0.

但是当x趋向负无穷时,此时,
分子: e−x→+∞e^{-x}\rightarrow +\infty,而分母:1+e−x→+∞1+e^{-x} \rightarrow +\infty,
此时:
e−x1+e−x\frac{e^{-x}}{1+e^{-x}}就会变得不稳定,尽管理论上趋向1。
因此就出现了以上的图像。

那么如何解决这种不稳定问题的解呢?

其实有两种办法:

(一)先计算稳定的f(x),结果赋予y,再计算1-y .

乍看从数学上,好像完全一致,但是在数值解上不等价。 y=f(x)是稳定的,因此对于1-f(x)=1-y也变成了稳定的解。

我们从图像上证明:

此时就正确了,与理论解完全一致。

(二)直接从1-f(x)着手
这里我们从caffe的sigmoid_cross_entropy_loss_layer.cpp得到启发。

主要办法就是对于

1−f(x)=e−x1+e−x

1- f(x)=\frac{e^{-x}}{1+e^{-x}}
分别考虑正负x.

当x≥0x\geq 0时,维持上式不变;
当x<0x时,分子分母同时乘以exe^x,则有:

e−x1+e−x=⎧⎩⎨⎪⎪⎪⎪e−x1+e−x11+exx≥0x<0

\frac{e^{-x}}{1+e^{-x}}=\left\{\begin{matrix} \frac{e^{-x}}{1+e^{-x}} & x\geq 0\\ \frac{1}{1+e^{x}}& x

此时绘制曲线为:

因此在实际coding中,我们需要考虑计算的稳定性。

sigmoid函数的数值稳定性相关推荐

  1. 激活函数之logistic sigmoid函数介绍及C++实现

    logistic sigmoid函数: logistic sigmoid函数通常用来产生Bernoulli分布中的参数ø,因为它的范围是(0,1),处在ø的有效取值范围内.logisitic sigm ...

  2. 神经网络的反向传播(BP)是什么?sigmoid函数的导数是什么,有什么形式优势、优缺点?

    神经网络的反向传播(BP)是什么?sigmoid函数的导数是什么,有什么形式优势? 目录

  3. 计算 sigmoid 函数的导数

    计算 sigmoid 函数的导数 回想一下,sigmoid 函数有一个完美的导数,我们可以在下面的计算中看到.这将使我们的反向传播步骤更加简洁.

  4. python不支持prelu_python实现并绘制 sigmoid函数,tanh函数,ReLU函数,PReLU函数

    python实现并绘制 sigmoid函数,tanh函数,ReLU函数,PReLU函数 # -*- coding:utf-8 -*- from matplotlib import pyplot as ...

  5. sigmoid函数求导与自然指数

    sigmoid函数求导与自然指数 在神经网络里经常使用sigmoid做激活函数,它的导数是怎么样求解呢?因为要使用它的导数来计算梯度下降. 这个过程如下: 1. sigmoid 函数:f(z) = 1 ...

  6. 交叉熵代价函数——当我们用sigmoid函数作为神经元的激活函数时,最好使用交叉熵代价函数来替代方差代价函数,以避免训练过程太慢...

    交叉熵代价函数 machine learning算法中用得很多的交叉熵代价函数. 1.从方差代价函数说起 代价函数经常用方差代价函数(即采用均方误差MSE),比如对于一个神经元(单输入单输出,sigm ...

  7. Sigmoid 函数(To be continued)

    1.Definition Sigmoid 函数又称 S 函数,或者逻辑函数(Logistic function),它是一个连续.光滑.严格单调的阈值函数. 其函数图像为: 其对称中心为(0, 0.5) ...

  8. python计算警告:overflow encountered in exp(指数函数溢出)(sigmoid函数的numpy数组计算方式)

    文章目录 前言 原因 解决方法 1.对sigmoid函数实现的优化,使`np.exp(-x)`的值始终小于1 2.用这个公式替代(没试过,不知好不好用) 前言 在计算sigmoid函数值时,出现了以下 ...

  9. sigmoid函数(Logistic函数)

    文章目录 Sigmoid函数由下列公式定义: 其对x的导数可以用自身表示: Sigmoid函数的图形如S曲线: Sigmoid函数的级数表示: 用python打印Sigmoid函数曲线: 结果: 若想 ...

最新文章

  1. 浅谈Android五大布局——LinearLayout、FrameLayout和AbsoulteLa
  2. Google Gson的使用方法及JSON 技术对比
  3. 一、Delphi 2009 中的泛型
  4. BZOJ4590: [Shoi2015]自动刷题机
  5. C/C++工程师需要掌握哪些技能?他们的工资这么高,是有原因的!
  6. bat递归查找指定文件_批处理脚本遍历指定文件夹下的文件
  7. linux怎么卸载evolution,linux - 如何在Ubuntu的系统托盘中最小化Evolution? - Ubuntu问答...
  8. Android程序的“现场保护”
  9. 高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南
  10. 移动硬盘新建选项消失、不能新建文件夹和文件的解决方案
  11. 标准模型和IE模型的区别
  12. MySQL回滚日志(undo log)总结
  13. Elasticsearch:Simulate index API
  14. centOS 8 操作系统下载与安装
  15. matlab tic toc存储,Matlab中tic和toc用法
  16. 你在工作中遇到了哪些问题,解决办法是什么
  17. 企业对接Walmart平台常见报错
  18. unity3D-游戏/AR/VR在线就业班 C#入门访问修饰符学习笔记
  19. 影响SAR图像电磁散射特性的因素
  20. 台式计算机耳机有杂音怎么办,小编教你解决电脑耳机有噪音和杂音怎么办几个方法!...

热门文章

  1. HTML 表格中的行合并与列合并
  2. offset系列,client系列,scroll系列回顾
  3. 软件开发文档整理(之)一张示意图 | 清晰明了
  4. vmware ubuntu重置root密码
  5. JS 转换数字为大写
  6. Linked List Cycle II - LeetCode
  7. javascript --- [express+ vue2.x + elementUI]登陆的流程梳理
  8. http --- 混合加密的具体过程
  9. 算法 --- 二叉树查找树的先序(中序、后序)遍历的js实现
  10. Laravel中的Blade模版