modeling probabilities and nonlinearities: activation functions (Grokking 第九章学习笔记)

为什么需要激活函数?

在Grokking书中之前的章节,我们学会了如何搭建一个如下所示的、简单的神经网络,并根据输出数据做出预测。

很容易可以看出:隐藏层神经元的值,是对应的输入层神经元乘以权重后的累加和。同理,输出层神经元的值也是如此。

这就导致了一个问题:不管隐藏层如何叠加,最终的预测结果总是输入值的线性表示。

在具体的场景中,这个问题更加的直观。比如在下图所示的分类问题中,我们可以很容易的找到一条线段完成分类操作:

但是在处理类似异或等问题时,我们始终不能用一条线段来完成分类

为了解决类似的问题,我们在神经网络中引入激活函数,使得最终的预测结果与输入值之间的关系变成非线性关系。

 

激活函数的性质

首先激活函数必须是连续的,在这里先复习以下函数连续的概念:

  设函数 y = f (x)在点x0的某邻域内有定义,如果当自变量的改变量△x趋近于 零时,相应函数的改变量△y也趋近于零,则称y = f (x)在点 x0处连续

  

  也就是说,如函数y = f (x)在点x0出连续时满足下列条件:

    函数在该点处有定义;函数在该点出的极限存在且极限值等于函数值

另一方面,激活函数的输入域应该是无限,你要保证对于任意的x值激活函数都由相对应的映射值。

 

什么是一个好的激活函数?

首先一个好的激活函数应该是单调的,如下图所示的激活函数就并非一个优秀的激活函数,因为在神经网络中绝大多数情况下不同的两个x值对应相同的y值是没有意义的。

其次,一个好的激活函数应当是非线性的(不然我引入吔屎吗?)

最后,一个好的激活函数及其派生函数应该是可以被有效计算的(这里的有效计算指计算的时间复杂度是多项式复杂度)

 

常用的激活函数

一、Sigmoid函数

  sigmoid函数即 S(x) = 1/(1+exp(-x))

  

 sigmoid函数的缺点在于:函数并非关于原点中心对称,同时可以很直观的看出,在|x|趋近于无穷时,会’杀死梯度‘。

二、Tanh函数

  tanh函数即 T(x) = (exp(x)-exp(-x))/(exp(x)+exp(-x))

  

  tanh函数解决了sigmoid函数不关于原点中心对称的问题,但是梯度消失的现象依然存在

三、Relu函数

  relu函数即 R(x) = max(0,x)

  

 relu函数解决了梯度消失的问题,同时计算效率极高。

 其缺点在于relu函数会杀死部分神经元。这个问题可以被Leaky ReLU函数解决,Leaky ReLU函数为:LR(x) = max(0.01x,x)

 

posted @ 2020-09-29 00:24  声声醉如兰  阅读(182)  评论(0编辑  收藏  举报