很多人知道sigmoid函数是神经网络中常用的非线性变换方式,有几人知道为什么sigmoid函数比别的非线性变换更有吸引力吗?在评论和转发中已经看到不少有趣的见解了,我就不一一总结了(包括可导等数学性质,更多的可以谷歌或到wiki查到)。从我个人看来,都不是用sigmoid函数的本质原因。数学性质好固然不错,但决定一个函数形式是否对所研究的问题合理才是第一位的。做sigmoid变换的目的是把(-Inf,+Inf)取值范围的信号(用x表示)映射到(0,1)范围内(用y表示):y=h(x)。为此目的,我们应该选择什么样的h呢?h变换可理解成对x的一种编码。当然h最好是双射,意味着可以从y反解码获得x。理论上,满足双射的h有无穷多种,该怎么选择呢?实际上双射是不可能,因为观测y时不可避免引入误差,即y=h(x)+e(1)其中e为误差(你也可尝试考虑x有误差的情况)。在有误差e的情况下,x和y就不是一一映射了。任何h从y反解码得到的x都是不可靠的。问题:有没有一种映射h,在有误差的情况做到最优?通俗讲,就是寻找一个映射h能在有观测误差e的情况下最优的保持输入信号的信息,用信息论的语言描述就是x与y之间的互信息最大,有这个关系成立:I(x,y)=H(y)-H(y|x)(2)其中I(x,y)表示x与y的互信息,H(y)表示y的熵,H(y|x)表示y对x的条件熵,当有(1)式成立时,有H(y|x)=H(e)(3)将(3)式代入(2)式可得:I(x,y)=H(y)-H(e)(4)由上式可见,I(x,y)的互信息由两项决定:H(y)=H(h(x))和H(e)。其中第二项H(e)完全由误差决定,第一项H(y)由映射h决定,H(y)越大越好。问题:给定y取值范围(0,1),熵H(y)什么时候最大?答案是当y服从均匀分布时熵最大,因此能把x映射成一个服从均匀分布的变量y的映射h是最优的。问题来了:当知道x的概率密度为f(x)时(这个函数可能很奇怪),什么样的h能把x变换成均匀分布的信号呢?可能有人遇到这样的面试题:如果用c的库函数rand()生成服从高斯分布或贝塔分布,or其他分布的随机数?应该有不少人知道答案吧。C函数rand可生成[0,1)均匀分布随机数,用一种叫inversecumulativedistri-butionfunction的变换方法可以生成任意分布的随机数。感兴趣的同学可以查资料。回到正题,此处我们的目标和面试题相反,要从任意分布的信号生成均匀分布的信号,其实也和cumulativedistributionfunction累积分布函数有关。答案是:知道x的概率密度函数f(x),那么对f(x)的积分可得累积分布函数F(x),F就是最优的h,即y=F(x)最优。这几段话也许不那么容易理解,但想象一下高斯分布的概率密度函数是一个倒置的钟形函数,累积分布函数是不是和sigmoid长的很像?(尽管我们知道高斯分布的累积分布函数没有闭式解)。核心思想前面应该已经说完了。Sigmoid变换对于概率密度函数呈倒置钟形的信号来说是最优变换,而现实中倒置钟形分布的信号又比比皆是,很多自然的信号都是这样,譬如高斯分布就很普遍。换句话说:对于概率密度不是倒置钟形的信号会有自己最优的变换,而不一定是Sigmoid函数。请谅解有的表述并不严格,因为f积分得F,F求导得f才是严格的关系,而不是泛泛的说倒置钟形。关于为什么要把信号x压缩到[0,1]之类的一个局部范围内。无论在人脑还是电脑,信号都是用电压(伏特)表示的,电压变化幅度大,对信号的刻画当然更逼真,但能耗也必然升高。生物体必须在能耗和信息传递的准确性之间折中。1981年,一位叫simoLauglin的学者对苍蝇复眼中一类神经元的刺激(即我们讨论的x)的响应函数(即我们讨论的h)进行了研究,神奇的发现当刺激x的概率密度函数f(x)变化时,响应函数h也会随之变化,而且h总是和f的积分F类似。下面的图片就是来自这篇论文。前面罗罗嗦嗦说了那么多,换成大白话,就是山老师说的那样,前面的公式看不懂无所谓,能看懂山老师的话就可以了。@ICT山世光:我的歪解,它能压缩无用长尾巴,扩展核心分辨率-感觉这理解好弱智。期待老师木的正解。还是这张图,请注意下半部分红线标识的部分:对y的等距量化,对应到输入信号x时是非等距量化,同样长的y区间,对应到x时区间是不等的。同样长度的y,在x高密度区域只能编码一小段,而在x低密度区域却编码一长段。