Sigmoid函数的求导证明前文提到了神经网络中的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), 则有
【python中倒置函数 python1234倒置】 这个简单公式也非常容易证明
再将极限表达式分拆一下
因为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
Python中的常用内置函数有哪些呢?(1)Lambda函数
用于创建匿名函数,即没有名称的函数 。它只是一个表达式,函数体比def简单很多 。当我们需要创建一个函数来执行单个操作并且可以在一行中编写时,就可以用到匿名函数了 。
Lamdba的主体是一个表达式,而不是一个代码块 。仅仅能在lambda表达式中封装有限的逻辑进去 。
利用Lamdba函数,往往可以将代码简化许多 。
(2)Map函数
会将一个函数映射到一个输入列表的所有元素上 , 比如我们先创建了一个函数来返回一个大写的输入单词,然后将此函数应有到列表colors中的所有元素 。
我们还可以使用匿名函数lamdba来配合map函数,这样可以更加精简 。
(3)Reduce函数
当需要对一个列表进行一些计算并返回结果时 , reduce()是个非常有用的函数 。举个例子,当需要计算一个整数列表所有元素的乘积时 , 即可使用reduce函数实现 。
它与函数的最大的区别就是,reduce()里的映射函数(function)接收两个参数,而map接收一个参数 。
(4)enumerate函数
用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中 。
它的两个参数,一个是序列、迭代器或其他支持迭代对象;另一个是下标起始位置,默认情况从0开始 , 也可以自定义计数器的起始编号 。
(5)Zip函数
用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
当我们使用zip()函数时,如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同 。
推荐阅读
- html5canvas裁剪,htmlcanvas截图到白屏
- 固态硬盘坏道怎么办,固态硬盘有坏道的说法吗
- 坐马桶竞速游戏,马桶 游戏
- 微信小程序java源代码,微信小程序java源代码是什么
- Mysql怎么增加索引 mysql增加索引字段
- 算法连续字母js实现,算法连续字母js实现什么
- 体育短视频是什么行业,体育短视频的特点
- 如何做好消费贷的营销,如何做好消费贷的营销策略
- vb.net建立数据库 vbnet连接数据库