大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
Sigmoid函数,即。是神经元的非线性作用函数。广泛应用在神经网络中。
神经网络的学习是基于一组样本进行的,它包括输入和输出(这里用期望输出表示),输入和输出有多少个分量就有多少个输入和输出神经元与之对应。最初神经网络的权值(Weight)和阈值(Threshold)是任意给定的,学习就是逐渐调整权值和阈值使得网络的实际输出和期望输出一致。
给定以下的总输入,我们可以基于sigmoid函数得到连续的输出,其中sigmoid函数的定义如下
该函数具有如下的特性:当x趋近于负无穷时,y趋近于0;当x趋近于正无穷时,y趋近于1;当x=0时,y=1/2.
阈值化或者阶梯化:
增加该连接的权值,也就是增加总输入,可以使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
因此,其在某点的斜率,也就是一阶导为
注意到,y的去取值范围在开区间的0到1之间,
当a>0时,所有点处的斜率都是正的,当y=1/2时,曲线最陡/斜率最大。
当a<0时,所有点处的斜率都是负的,当y=1/2时,曲线最陡/斜率最小(负值)。
当a=1,b=0时,sigmoid曲线在某点斜率的极值
其一阶导推导过程如下图所示
由此可以看出,该曲线在某点处的切线斜率为y (1-y) 。通过对斜率再求导可以看出,其斜率在y=1/2处,取得最大值。
From:http://computing.dcu.ie/~humphrys/Notes/Neural/sigmoid.html
以上内容来自用户【MagicQIT】,仅作格式和词语修改,原文地址:http://blog.csdn.net/magicqit/article/details/42525399
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/200722.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...