通常情况下,我们所说的Sigmoid函数定义如下:
σ(x)=1+e−x1=ex+1ex.
它的形状如下:
![Sigmoid函数(logsig)求导 Sigmoid函数(logsig)求导](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzUyMy9iOWZkYTZiM2U0ZDQxNjVkYjAwODBkZTc3ZTBkOWE4Yi5wbmc=)
导数如下:
dxdσ(x)=σ(x)⋅(1−σ(x)).
本篇博文讲σ(x)导数的推导过程。
注意
Sigmoid函数实际上是指形状呈S形的一组曲线[1],上述公式中的σ(x)正式名称为logistic函数,为Sigmoid函数簇的一个特例(这也是σ(x)的另一个名字,即logsig的命名来源)。我们经常用到的hyperbolic tangent函数,即tanhx=ex+e−xex−e−x也是一种sigmoid函数。
下文依旧称σ(x)为logistic函数。
logistic函数的有效工作范围是(−10,10),从它的图像也可以看出来:在(−10,10)以外,函数值的变化非常小。那么问题来了,如果用logistic函数当神经网络的**函数,当x>10或者x<−10时会出现梯度消失(gradient vanishing)的问题,即dxdσ(x)≈0。换句话说,梯度下降算法会进入死胡同。这一点要特别注意。
求导过程[2]
dxdσ(x)=dxd[1+e−x1]=dxd(1+e−x)−1=−(1+e−x)−2(−e−x)
=(1+e−x)2e−x
=1+e−x 1⋅1+e−xe−x
=1+e−x 1⋅1+e−x(1+e−x)−1
=1+e−x 1⋅(1+e−x1+e−x−1+e−x1)
=1+e−x 1⋅(1−1+e−x1)
=σ(x)⋅(1−σ(x))
复习一下一般求导法则
- 乘法法则
(f⋅g)′=f′g+fg′
- 除法法则
(gf)′=g2f′g−fg′(g=0)
- 倒数法则
(g1)′=g2−g′(g=0)
- 复合函数求导法则
(f[g(x)])′=dgdf(g)dxdg
[1] https://en.wikipedia.org/wiki/Sigmoid_function
[2] https://math.stackexchange.com/questions/78575/derivative-of-sigmoid-function-sigma-x-frac11e-x