前文提到了神经网络中的Sigmoid函数實际上在反向传播中还会用到Sigmoid的导数,形式很简单: s(x)*(1-s(x))但是我想把这个过程自己推导一次,顺便复习一下导数和微分
首先我画了一张图来說明什么是导数和微分,本质上就是在极限中以线性函数(直线)来表示非线性函数(曲线)
灰色的线是第二条割线,当割线围绕着[x, f(x)]为原点继续順时针转动时h会不断变小,小到极限就变成了[x, f(x)]的切线
蓝色的线即这条切线,其斜率就是[x,f(x)]的导数物理意义是当前这一个点的瞬间速度。
当h小到极限的时候dy(导数除以h)就是[x,f(x)]的微分
割线斜率减去切线斜率即为误差函数E(h)
根据微积分中的倒数法则,如果g(x) = 1/f(x), 则有
这个简单公式也非常嫆易证明
再将极限表达式分拆一下
因为f在x点的连续性第二个极限表达式的分母等于f(x)的平方
现在利用倒数法则把Sigmoid函数的导数推导一下这次峩们记Sigmoid函数为s(x),它的倒置函数为f(x)
根据倒数法则从f(x)开始推导得出公式S1
根据链式法则我们可以有关于幂指导的推广
于是可以得出f(x)导数的另一种表达式S2
最后我们把S2和S1放到一起来消元就可以得到Sigmoid的导数公式了
用Python来实现如下逻辑: