Sigmoid 函数

来源:互联网 发布:suse 11 安装yum 编辑:程序博客网 时间:2024/05/11 05:30

转自:http://blog.csdn.net/magicqit/article/details/42525399

Sigmoid函数,即f(x)=1/(1+e-x)。是神经元的非线性作用函数。广泛应用在神经网络中。

神经网络的学习是基于一组样本进行的,它包括输入和输出(这里用期望输出表示),输入和输出有多少个分量就有多少个输入和输出神经元与之对应。最初神经网络的权值(Weight)和阈值(Threshold)是任意给定的,学习就是逐渐调整权值和阈值使得网络的实际输出和期望输出一致。

给定以下的总输入,我们可以基于sigmoid函数得到连续的输出,其中sigmoid函数的定义如下



该函数具有如下的特性:当x趋近于负无穷时,y趋近于0;当当x趋近于正无穷时,y趋近于1;当x=1/2时,y=0.


阈值化或者阶梯化: 

        增加该连接的权值,也就是增加总输入,可以使sigmoid函数越来越趋近于阈值函数,或者叫阶梯函数。将总输入变为原来的5倍,则sigmoid函数变为如下的形式:



线性化:

只要w为非零值,及时w非常小,ς(wx)最终都会趋近于y=0和y=1. 下图为w=0.1,-7<x<7时的sigmoid函数,看上去y是取值范围在0.35到0.65之间的一条直线。



但如果同样是w=0.1,当-25<x<25时,该曲线变成如下的形式,此时可以明显地看出,y的取值仍然趋近于y=0和y=1。



有上面的图可以看出,当w=0.1时,sigmoid函数仍然不是一个线性函数,但当x在-6到6之间时,可以近似将其看作是带有斜率的线性函数。因此,在实际应用中,如果x的取值范围始终在-6到6之间,利用sigmoid函数,我们就可以得到一个带有一定斜率的线性输出结果。


接下来,我们再来看下面这种极端情况,当w=0.0001时,即使-25<x<25,sigmoid函数曲线仍然看上去是一直线,而且斜率几乎为0.


但如果我们把x的取值范围扩展到-10000到10000,就可以发现,sigmoid函数仍然最终趋近于y=0和y=1。



sigmoid函数近似得到不同斜率的线性函数:

实际应用中,只要x的取值始终在某个特定的范围之内,我们总可以将sigmoid函数近似为,在该范围内成立的不同斜率的线性函数。

举个例子来说,当x的取值范围在-30到30之间时,通过去不同的权值w,即可将sigmoid函数近似为不同斜率的线性函数。






以上这些不同权值下的sigmoid函数都是以x=0为中心对称的,此时可以看作是阈值为0时的函数形式。通过改变阈值,即可得到沿不同阈值中心对称的sigmoid函数。

y = ς(x-t)

其中t表示该节点的阈值。正与前文提到的,与权值一样,阈值也可以通过神经网络学习算法得到。下图中,sigmoid函数关于x=3中心对称。


因此,sigmoid函数的一般形式为

ς(ax+b)

该函数具有如下特性:

    当a不为0时, sigmoid函数不是线性函数。其输出结果在0到1之间。

     当a为0时,y=ς(b),为线性常量。通过取不同的b值,即可得到0到1之间的任何常量。

     a可以去任何的正数或者负数,分数或者倍数,b可以为正,也可以为负。

     当a<0时,sigmoid函数曲线如下图所示。此时,当x取极小负值时,可以激活神经元。



sigmoid曲线在某点的斜率

sigmoid函数的一般形式可以简化为 y = ς(z) 

其中 z = ax+b 

因此,其在某点的斜率,也就是一阶导为
dy/dx = dy/dz dz/dx 
= y(1-y) a 

注意到,y的去取值范围在开区间的0到1之间,

当a>0时,所有点处的斜率都是正的,当y=1/2时,曲线最陡/斜率最大。

当a<0时,所有点处的斜率都是负的,当y=1/2时,曲线最陡/斜率最小(负值)

    

当a=1,b=0时,sigmoid曲线在某点斜率的极值

其一阶导推导过程如下图所示


由此可以看出,该曲线在某点处的切线斜率为y (1-y) 。通过对斜率再求导可以看出,其斜率在y=1/2处,取得最大值。

d/dy ( y (1-y) ) 
= y (-1) + (1-y) 1 
= -y + 1 -y 
= 1 - 2y 
= 0 for y = 1/2 




From:http://computing.dcu.ie/~humphrys/Notes/Neural/sigmoid.html



原创粉丝点击