【傻瓜攻略】深入学习入门之激活函数(三)

紧接着上文的激活函数进行论述……啊……

对于那个非线性的解释,我找到了一个很好的详细解释,便于初学者学习:

https://www.quora.com/What-is-the-role-of-the-activation-function-in-a-neural-network-How-does-this-function-in-a-human-neural-network-system

总结来说:1、如果没有激活函数,神经网络可以直接简化成输入层和输出层,完全丧失了学习的能力。

2、如果没有激活函数,最后得到的function会是(在二维空间)真的一条笔直的线,没有很好的分割。

上述网址详细解释了关于非线性引入的这个原因

但是,这种原理性的推导对于初学者不是很友好,个人比较倾向于用神经元模型的原理来解释这种模型,参考书:《神经网络与机器学习》。


这个是简单的神经元的非线性模型,可以发现,神经元模型包括三个基本元素:突出或连接链集(简单来说就是神经网络中的w),加法器(简单来说就是神经网络的辣个加法),激活函数(这个就是我们一般说的sigmoid函数等函数)。

通常一个神经元输出的正常幅度范围可写成单位闭区间[0,1]或者另一种区间[-1,+1]。

好吧,不接着扯激活函数的重要了,我们开始介绍这些激活函数。

1、sigmoid 

σ(x)=1/(1+e^−x)

这个函数函数有意思的在于它的倒数f'(x)=f(x)(1-f(x)),这个优秀的性质决定它的计算非常方便,比较适合简单的分类神经网络,尤其是二分类问题。具体原因,请自行百度。

划重点辣!!!sigmoid函数比较适合分类的神经网络问题!!!

但是,很显然,该函数还存有函数本身的问题。参考:http://cs231n.github.io/neural-networks-1/ 具体的一些可以看这个网页,以下是傻瓜式总结:

1、如果初始化权重太大,会导致大多数神经节点瘫痪。输入sigmoid函数的数据为wx+b,此时若是w过大时,传入神经网络的输入x就会被淹没,从而导致后面的大多数神经节点得到的数据都是接近1的数据。同样在反向传播的线路上,由于反向传播的权重更新是存在一个sigmoid梯度乘以误差(损失函数)的一个误差传播过程,如果这个输出过大,此时它的sigmoid梯度就特别低,从而‘抹杀’了误差的反向传入。但是同样因为这个性质,使得在训练好的带sigmoid的神经网络上面能够拥有很好的鲁棒性(健壮性),具有较强的容错率,特别是在权值很大或很小的神经节点处。(终于理完逻辑了……得意ps:有点想再换一章写,强行被我忍住了……这一章最精华的估计就是这些逻辑理顺了,毕竟很多大神的文章都是一笔带过……所以,都是我的脑汁干货啊!!!贴个反向传播的图,免得看不太懂)


2、sigmoid函数的性质决定了它会在梯度下降时候发生震荡。其原因推导如下:(ps:不要嫌弃我字丑……因为就算被嫌弃了,我的字还是不会好看)

但由于,整体的梯度符号是变化的,所以这个缺点也没有那么致命。

好了,终于交代完sigmoid了。

下面休息一下,下一章介绍tanh函数

猜你喜欢

转载自blog.csdn.net/lyy_sha/article/details/80280564
今日推荐