Sigmoid函数的求导证明

前文提到了神经网络中的Sigmoid函数,实际上在反向传播中还会用到Sigmoid的导数,形式很简单: s(x)*(1-s(x)),但是我想把这个过程自己推导一次,顺便复习一下导数和微分。

Derivative(导数)和Differential(微分)

首先我画了一张图来说明什么是导数和微分,本质上就是在极限中以线性函数(直线)来表示非线性函数(曲线)。

My Cheatsheet

红色的线是第一条割线(从[x,f(x)]到[x+h, f(x+h)]),(f(x+h) - f(x))/h 就是割线的斜率,物理学上是一段时间内的平均速度。

灰色的线是第二条割线,当割线围绕着[x, f(x)]为原点继续顺时针转动时,h会不断变小,小到极限就变成了[x, f(x)]的切线。

蓝色的线即这条切线,其斜率就是[x,f(x)]的导数,物理意义是当前这一个点的瞬间速度。

当h小到极限的时候dy(导数除以h)就是[x,f(x)]的微分。

割线斜率减去切线斜率即为误差函数E(h)

Reciprocal Rule(倒数法则)

根据微积分中的倒数法则,如果g(x) = 1/f(x), 则有

Reciprocal Rule

这个简单公式也非常容易证明

R1

再将极限表达式分拆一下

R2

因为f在x点的连续性第二个极限表达式的分母等于f(x)的平方

R3

现在利用倒数法则把Sigmoid函数的导数推导一下,这次我们记Sigmoid函数为s(x),它的倒置函数为f(x)

根据倒数法则从f(x)开始推导得出公式S1

S1

Chain Rule(链式法则)

根据链式法则我们可以有关于幂指求导的推广

Chain Rule

于是可以得出f(x)导数的另一种表达式S2

S2

最后我们把S2和S1放到一起来消元就可以得到Sigmoid的导数公式了

Sigmoid Derivative

用Python来实现如下逻辑:

# activation function 
def sigmoid(z, derivative=False):
    sigmoid = 1.0/(1.0+np.exp(-z))
    if (derivative==True):
        return sigmoid * (1-sigmoid)
    return sigmoid

References:

1. Differential on wiki

2. Chain rule on wiki

3. Derivatives of logarithmic and exponential functions

4. MIT open course - Multivariable Calculus

5. Mathematics Stack Exchange

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 摘要:“微商,微分之商也。“微分和微商是高数的基本名词,它们的变化构成了高等数学入门的基础内容。因此,深入探究微分...
    Nino_Lau阅读 3,236评论 0 4
  • 不同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘...
    大川无敌阅读 14,023评论 0 29
  • 考试形式和试卷结构一、试卷满分及考试时间 试卷满分为150分,考试时间为180分钟 二、答题方式 答题方式为闭卷、...
    幻无名阅读 798评论 0 3
  • 不再动荡不安了,许是能放下一些了 会好的
    熟人勿近阅读 160评论 0 0
  • 每个人都是一朵云,一朵惊艳的玫瑰云,一朵恬静的雏菊云,或是一朵淡雅的睡莲云,都会被一阵风牵走,只要云想走,谁...
    杨二妞阅读 380评论 2 0