Sigmoid函数的求导证明

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sigmoid函数的求导证明相关的知识,希望对你有一定的参考价值。

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

Derivative(导数)和Differential(微分)

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

红色的线是第一条割线(从[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), 则有

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

再将极限表达式分拆一下

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

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

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

Chain Rule(链式法则)

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



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

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

用Python来实现如下逻辑:

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

第六周了加油鸭

---恢复内容开始---

山师第六周学习心得

.高数重点小结

1.导数

?即函数变化率的极限

2.函数的求导法则

 ?函数的和差积商求导法则与复合函数求导法则(高中内容不再赘述)

?反函数的求导法则

[f -1(x0)]‘=(frac{1}{f‘(y)})

3.函数在某处连续、可导、极限存在的证明比较

?可倒一定连续,连续不一定可导

技术分享图片

(哈哈哈哈哈哈哈哈嗝)

?在某处连续:(1):(limlimits_{x ightarrowx0})f(x)=f(x0) (2)f(x0+)=f(x0-

?在某处可导:(1)f ‘-(x0)=f ‘+(x0) 

?极限存在:(1)f (x0-)=f (x0-

 4.高阶导数

重难点:莱布尼茨公式(计算时注意是否有某一项因式求导后为零

5.隐函数求导

?一般方法:等式两边分别求导(y相当于复合函数,求导时注意准确性)

?对数求导法:适用于(1)幂指函数

                   (2)多因子乘幂函数

.c语言重点小结

1.课堂内容

  ? 利用数组处理批量数据:

   定义一维数组a[n],方括号内的下标从0开始,可以包括常量和符号常量,不能包含变量,不可越界(无法检测出来此错误)

 ?运用数组的一些算法

(1)除留余数法将十进制数转化为二进制数;

 

#include<stdio.h> 
int main()
{
    int a[100];
    int n,i=0;
    scanf("%d",&n);
    while(n!=0)//n最后为0时取余结束 
    {
        a[i]=n%2;//取余数 
        n=n/2;
        i++;
    }
    for(int j=i-1;j>=0;j--)//将余数倒序输出
        printf("%d",a[j]);
        return 0;
}

 结果:

技术分享图片

(2).将一串数字逆置

#include<stdio.h> 
main()
{
    int j;
    scanf("%d",&j);
    int a[j];
    int i,t;
    for(i=0;i<j;i++)
        scanf("%d",&a[i]);
    for( i=0;i<j/2;i++)//将对称的元素互换(若写为i<j,则会互换两次,数字回到了原位) 
    {
    t=a[i];
    a[i]=a[j-i-1];
    a[j-i-1]=t;//第i个元素与第j-i-1个元素互换 
    }
    for(i=0;i<j;i++)
        printf("%d",a[i]);
        return 0;
}

结果:

技术分享图片

 

2.自学内容

 选择排序

从第一个元素开始,依次将其与后的元素相比并与最小的那个元素进行交换,n轮比较后各元素即可按由小到大的顺序排列。

冒泡排序

每次将相邻两个数进行比较,将较小的那个数调到前面,再进行下一趟两两比较,直到最小的数“上浮”到第一个。

(若有n个数,要进行n-1次比较,在第一趟比较中要进行n-1次两两比较,在第j次比较中要进行n-j次两两比较)

三.英语积累汇总

1.语法知识点

(1)虚拟语气从句为if+had done,主句为would+had done,可省略if,助动词had提前。

    例句:If I had known what this week‘s lecture was about,I wouldn‘t have gone.

       Had I known what this week‘s lecture was about,I wouldn‘t have gone.

(2)with+符合宾语(宾语后加上作宾部的adj,adv或非谓语动词)表原因或伴随。

    例句:The music was playing loudly,I coudn‘t concentrate.

       With the music played loudly,I coudn‘t concentrate.

2.词汇积累

 essential 必要的   clutter 杂乱的   amass 积累

  fussy 爱挑剔的,难取悦的   thereby 由此   indiscriminate 任意的

.学习感悟(?)

高数学习成果的巩固要靠刷题。。。

C语言要天天练手。。。

---恢复内容结束---

 

 

以上是关于Sigmoid函数的求导证明的主要内容,如果未能解决你的问题,请参考以下文章

sigmoid函数作用

激活函数 - 杂记

为啥 sigmoid 函数在神经网络中起作用?

激活函数 Sigmoidtanh*LUsoftPlusmaxOutsoftmaxdice- 杂记

激活函数

Sigmoid函数总结