sigmoid函数的数值稳定性

标签: 深度学习
144人阅读 评论(0) 收藏 举报
分类:

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

f(x)=11+ex

曲线表示为:




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

这里写图片描述

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

从理论上看,

limx+f(x)=1;limxf(x)=0

且中间数值可以从数学上证明是稳定的。
但我们考虑1-f(x)呢?
1f(x)=ex1+ex

我们用matlab绘制其曲线:


这里写图片描述

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

其实我们发现,对于 1- f(x),显然当x趋向正无穷时,还是稳定的,此时:
分子:ex0,而分母:1+ex1,

显然01,结果趋向0.

但是当x趋向负无穷时,此时,
分子: ex+,而分母:1+ex+,
此时:
ex1+ex就会变得不稳定,尽管理论上趋向1。
因此就出现了以上的图像。

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

其实有两种办法:

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

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

我们从图像上证明:


这里写图片描述

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

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

主要办法就是对于

1f(x)=ex1+ex

分别考虑正负x.

x0时,维持上式不变;
x<0时,分子分母同时乘以ex,则有:

ex1+ex=ex1+ex11+exx0x<0

此时绘制曲线为:


这里写图片描述

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

查看评论

sigmoid

sigmoid 函数sigmoid函数是一个良好的阈值函数 特点: 连续,光滑 严格单调 关于(0,0.5)中心对称 对阈值函数有一个良好的近似 原函数:f(x) = 1/[1+e^(-x...
  • lengzhao
  • lengzhao
  • 2016年04月11日 21:14
  • 643

浅谈数值稳定性

今天谈论的重点是数值稳定性,在计算机编程中,有很多算法都需要考虑数值稳定性。比如在机器学习算法中我学过的Logistic回归的牛顿迭代解法,在牛顿迭代时需要解线性方程组,由于Hessian矩阵是对称正...
  • ACdreamers
  • ACdreamers
  • 2014年11月26日 14:16
  • 5196

计算方法实习题一 舍入误差与数值稳定性(C语言)

实验目的 (1) 通过上机编程,复习巩固以前所学程序设计语言及上机操作指令。 (2) 通过上机计算,了解舍入误差所引起的数值不稳定性。 实验内容 用两种不同的顺序计算 ,分析其误差的变化。 实...
  • landcruiser007
  • landcruiser007
  • 2018年02月10日 10:24
  • 95

深度学习:Sigmoid函数与损失函数求导

1sigmoid函数 1 从指数函数到sigmoid 2 对数函数与sigmoid 2sigmoid函数求导 3神经网络损失函数求导 1、sigmoid函数​ sigmoid函数,也就是s型曲线函...
  • zhishengqianjun
  • zhishengqianjun
  • 2017年07月18日 14:22
  • 11792

机器学习基础(七)——sigmoid 函数的性质

θ(s)=11+e−s \theta(s)=\frac1{1+e^{-s}}(1)通分 θ(x)=es1+es \theta(x)=\frac{e^s}{1+e^s}(2)”对称” 1−θ(s)=θ(...
  • lanchunhui
  • lanchunhui
  • 2016年03月24日 13:02
  • 3215

sigmoid函数求导与自然指数

在神经网络里经常使用sigmoid做激活函数,它的导数是怎么样求解呢?因为要使用它的导数来计算梯度下降。这个过程如下:1. sigmoid函数:f(z) = 1 / (1 + exp( − z))导数...
  • caimouse
  • caimouse
  • 2017年03月26日 11:33
  • 18860

关于sigmoid函数

sigmoid函数是一个良好的阈值函数, 连续,光滑 严格单调 关于(0,0.5)中心对称 对阈值函数有一个良好的近似 原函数:f(x) = 1/[1+e^(-x)] 其导...
  • tianbwin2995
  • tianbwin2995
  • 2016年02月27日 10:33
  • 494

Sigmoid 函数

Sigmoid函数,即f(x)=1/(1+e-x)。是神经元的非线性作用函数。广泛应用在神经网络中。 神经网络的学习是基于一组样本进行的,它包括输入和输出(这里用期望输出表示),输入和输出有多少个分...
  • MagicQIT
  • MagicQIT
  • 2015年01月08日 15:17
  • 11611

sigmoid函数求导的步骤补充

网上有不少关于sigmoid函数求导的文章(比如来自CSDN的博文sigmoid函数求导与自然指数),但是求导过程中对于怎么由(1/(1+exp(-x)))'一下推导至exp(-x)/(1+exp(-...
  • csdn_zf
  • csdn_zf
  • 2017年06月07日 11:51
  • 6761

sigmoid函数的用途

sigmoid函数是一个良好的阈值函数,连续,光滑严格单调关于(0,0.5)中心对称对阈值函数        _ 1, x > /deltaf(x)= /      /       - 0, x 的良...
  • pennyliang
  • pennyliang
  • 2007年01月14日 11:39
  • 21604
    个人资料
    持之以恒
    等级:
    访问量: 34万+
    积分: 4724
    排名: 7686
    个人网站
    最新评论