神经网络基础2:激活函数

不是所有信息都是有用的,一些只是噪音;激活函数可以帮助神经网络做这种隔离,激活有用的信息,并抑制无关的数据点。

以下将介绍神经网络中常用的几种激活函数:sigmoid、tanh、ReLu、leaky ReLu、PReLu、ELU、maxout、softmax,以及它们各自的特性。

记激活函数的输入z为上一层输出的线性组合,输入Z为上一层输出的多组不同的线性组合(vector)。

神经网络基础2:激活函数_第1张图片

sigmoid

f(z) = \sigma (z)= \frac{1}{1+exp(-z)}, \;\;\; f'(z)=f(z)(1-f(z))

sigmoid函数是一个平滑函数,并且具有连续性和可微性;其输出值在(0,1)之间,可当做概率使用,可用于二分类模型输出层的激活函数;随着abs(z)越来越大,梯度会越来越小,在abs(z)>5之后梯度就基本接近0了;越是接近sigmoid的两端,相对z的改变,f(z)就越趋向于作出非常小的反应;sigmoid函数在其大部分定义域内都饱和,在这些饱和区域内梯度会很小或者消失了(由于值极小,无法做出显著的改变了),网络拒绝进一步学习,或者学习速度剧烈地变慢了,这种现象称之为梯度消失,当网络较深时(链式法则,导数累乘),这种现象会越加明显;但是反过来,sigmoid的饱和特性能够让其对输入变化或噪声更鲁棒。

另一个问题,sigmoid函数的输出在(0,1)之间,都是正数,不是zero-centered的,这会拖慢学习的收敛速度(原因可以参看上一篇https://blog.csdn.net/yeqiustu/article/details/106172592)。

还有一个问题就是sigmoid函数涉及幂运算,计算量较大。

tanh

\left\{\begin{matrix} f(z) = tanh(z)= \frac{exp(z)-exp(-z)}{exp(z)+exp(-z)} = 2\sigma (2z) -1 \\ \\ f'(z)=4\sigma(2z)(1-\sigma(2z)) = 1-f^2(z) \end{matrix}\right.

可以看到tanh函数是对sigmoid函数的拉伸与偏移,输出是zero-centered的;然而,gradient vanishing的问题(饱和区比sigmoid更大)和幂运算的问题仍然存在。

ReLU

Rectified Linear Units,线性整流单元

\left\{\begin{matrix} f(z) = ReLU(z)= max(z,0) \\ \\ f'(z)=1,\; \;if\; z > 0 \;else\; 0 \end{matrix}\right.

可以看到,当z<0时,ReLU硬饱和,梯度为0;而当z>0时,则梯度为1;所以,ReLU 能够在z>0时保持梯度不衰减,从而缓解梯度消失问题,收敛速度远快于sigmoid和tanh;激活部分神经元,增加稀疏性;而且计算速度非常快,只需要判断输入是否大于0;

当输入落入硬饱和区时,对应权重无法更新,这种现象被称为Dead ReLU Problem--“神经元死亡”,当网络中很多神经元都处于死亡状态,则网络会训练不动;有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。

另外,ReLU的输出不是zero-centered(可通过BN等手段解决)。

尽管存在这两个问题,ReLU目前仍是最常用的激活函数,在搭建人工神经网络的时候推荐优先尝试!

ReLU的变形

为了解决Dead ReLU Problem和缓解ReLU非zero-centered的问题,出现了一些ReLU的变形,即对负数硬饱和区进行修改,使这区域的输出为负和梯度不再为0;

Leaky ReLU与Parametric ReLU

\left\{\begin{matrix} f(z) = z \;if\; z > 0 \;else\; az \\ \\ f'(z)=1 \;if\; z > 0 \;else\; a \end{matrix}\right.

Leaky ReLU将a作为人工设定的超参,而Parametric ReLU则将a当做一个可学习的参数。

Exponential Linear Units,ELU

\left\{\begin{matrix} f(z) = z \;if\; z > 0 \;else\; a(e^z-1) \\ \\ f'(z)=1 \;if\; z > 0 \;else\; ae^z \end{matrix}\right.

ELU在左侧使用指数函数,具有软饱和性,对输入变化或噪声更鲁棒。

这些变形理论上虽然好于ReLU,但在实际使用中目前并没有好的证据表明它们总是优于ReLU。

高斯误差线性单元(GELU)

f(z) = 0.5z(1+tanh(\sqrt{2/\pi}(z+0.044715z^3)))

高斯误差线性单元激活函数在最近的 Transformer 模型(谷歌的 BERT 和 OpenAI 的 GPT-2)中得到了应用。不怎么理解,先记录下来,有时间再看下论文(https://arxiv.org/pdf/1606.08415.pdf)研究下。

maxout

\left\{\begin{matrix} f(Z) = max(Z_1,Z_2,...,Z_k) \\ \\ f'(Z_i)=1 \; if\; Z_i=f(Z) \;else \;0 \end{matrix}\right.

主要用来对多组feature map进行筛选,只保留最显著的单元,抑制小值单元(无关或不重要),减少干扰;常见于CV任务中。

softmax

\left\{\begin{matrix} f(Z_i) = softmax(Z_i)= \frac{exp(Z_i)}{\sum_{j=1}^{K}{exp(Z_j)}} \\ \\ f_i'(Z_j)=f(Z_i)-f(Z_i)f(Z_j) \;if\; i=j \;else\; -f(Z_i)f(Z_j) \end{matrix}\right.

其中取指数,第一个原因是要模拟 max 的行为,所以要让大的更大;第二个原因是需要一个可导的函数。

每个输出值都在0-1之间,和为1,可作为概率分布,主要用于多分类任务的输出层;

当K=2时,softmax有2组参数W1、W2,而sigmoid只要一组参数W,参数有冗余,化简后与sigmoid等价;softmax(Z_i)= \frac{exp(Z_i)}{\sum_{j=1}^{2}{exp(Z_j)}}=\frac{1}{1+{exp(Z_j-Z_i)}} \\ = \frac{1}{1+{exp(W_jX-W_iX)}} = \frac{1}{1+{exp(-\tilde{W}^TX)}}

 

你可能感兴趣的:(神经网络基础,深度学习,神经网络,激活函数)