博客园  :: 首页  :: 新随笔  :: 管理

神经元与常用的激活函数

Posted on 2020-09-29 17:57  wsg_blog  阅读(2400)  评论(0编辑  收藏  举报

神经网络与深度学习-邱锡鹏》读书笔记

神经元

神经元是构成神经网络的基本单元,神经元的结构如下图所示:  

           

假设一个神经元接收D个输入$x_1,x_2,...x_D$,令向量$x=[x_1;x_2;...;x_D]$来表示这组输入,并用净输入$z$表示一个神经元所获得的输入信号$x$的加权和,

                                                $z={\sum}_{d=1}^{D} w_d x_d+b = w^Tx+b$

        其中,$w=[w_1;w_2;...;w_D]$是D维的权重向量,b是偏置。

        净输入$z$在经过一个非线性函数$f(·)$后,得到神经元的活性值$a$,

                                                $a=f(z)$,

        其中非线性函数$f(·)$称为激活函数(Activation Function).

 激活函数

激活函数:激活函数在神经元中非常重要,为了增强网络的表示能力和学习能力,激活函数需要具备以下几点性质

  1. 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数
  2. 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率
  3. 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性

常用的激活函数

种类:

  1. Sigmoid型函数:Logistic、Tanh
  2. ReLU(Rectified Linear Unit,修正线性单元)函数
  3. Swish函数(是一种自门控(Self-Gated)激活函数)
  4. GELU(Gaussian Error Linear Unit,高斯误差线性单元)
  5. Maxout单元(一种分段线性函数)

 详细介绍:

Sigmoid型函数

1.1 Logistic激活函数

函数定义为       ${\sigma}(x)=\frac{1}{1+exp(-x)}$      exp,高等数学里以自然常数e为底的指数函数,exp(-x)即 $e^{-x}$

1.2 Tanh激活函数

函数定义为       $tanh(x)=\frac{exp(x)-exp(-x)}{exp(x)+exp(-x)}$   

1.3 Hard-Logistic函数和Hard-Tanh函数

Logistic函数和Tanh函数都是Sigmoid型函数,具有饱和性,但是计算开销较大。

Logistic函数在0附近的一阶泰勒展开为    $g_l(x){\approx}{\sigma}(0)+x*{\sigma}'(0) = 0.25x+0.5$

                      这样Logistic函数可以用分段函数hard-logistic(x)来近似

\begin{equation}
hard-logistic(x)=\left \{
\begin{array}{ll}
1 & g_l(x) \ge 1 \\
g_l & 0<g_l(x)<1 \\
0 & g_l(x) \le 0
\end{array} \right. \\
= max(min(g_l(x),1),0) \\
    = max(min(0.25x+0.5,1),0)
\end{equation}

同样,Tanh函数在0附近的一阶泰勒展开为      $g_l(x)\approx tanh(0)+x*tanh'(0)=x$

                      $hard-tanh(x)=max(min(g_t(x),1),-1)=max(min(x,1),-1)$

 ReLU函数

1.1 ReLU函数

 ReLU(Rectified Linear Unit,修正线性单元),也叫Rectifier函数,是目前深度网络中经常使用的激活函数,ReLU实际上是一个斜坡(ramp)函数,定义为

\begin{equation}
ReLU(x)= \left \{
\begin{array}{ll}
x & x \ge 0 \\
0 & x<0
\end{array} \right. \\
=max(0,x)
\end{equation}

 优点:采用ReLU的神经元只需要进行加、乘和比较的操作,计算上更加高效,ReLU函数也被认为具有生物学合理性,比如单侧抑制、宽兴奋边界(即兴奋程度可以非常高),Sigmoid型激活函数会导致一个非稀疏的神经网络,而ReLU却具有很好的稀疏性,大约50%的神经元会处于激活状态;在优化方面,相比于Sigmoid型函数的两端饱和,ReLU函数为左饱和函数,且在x>0时导数为1,在一定程度上缓解了神经网络的梯度消失问题,加速梯度下降的收敛速度。

缺点:ReLU函数的输出是非零中心化的,给后一层的神经网络引入偏执偏移,会影响梯度下降的效率。此外ReLU神经元在训练时比较容易“死亡”,在训练时,如果参数在一次不恰当的更新后,第一个隐藏层中的某个ReLU神经元在所有的训练数据上都不能被激活,那么这个神经元自身参数的梯度永远都会是0,在以后的训练过程中永远不能被激活。这种现象称为死亡ReLU问题,并且也有可能发生在其他隐藏层。

在实际使用中,为了避免上述情况,有几种ReLU的变种也会被广泛使用。

1.2 带泄露、参数的ReLU

 带泄露的ReLU(Leaky ReLU)在输入x<0时,保持一个很小的梯度$ \gamma $,这样当神经元非激活时也能有一个非零的梯度可以更新参数,避免永远不能被激活,带泄露的ReLU的定义如下:

\begin{equation}
LeakyReLU(x) = \left\{
\begin{array}{ll}
x & \text{if x > 0} \\
\gamma x & \text{if x $\le$ 0}
\end{array} \right. \\
=max(0,x) + \gamma min(0,x).
\end{equation}

其中$\gamma$是一个很小的常熟,比如0.01.当$\gamma$<1时,带泄露的ReLU也可以写为:LeakyReLU(x)=max(x,$\gamma x$),相当于是一个比较简单的maxout单元。

 带参数的ReLU(Parametric ReLU,PReLU)引入一个可学习的参数,不同神经元可以有不同的参数。对于第i个神经元,其PReLU的定义为

\begin{equation}
LeakyReLU(x) = \left\{
\begin{array}{ll}
x & \text{if x > 0} \\
\gamma_i x & \text{if x $\le$ 0}
\end{array} \right. \\
=max(0,x) + \gamma_i min(0,x).
\end{equation}

 其中$\gamma_i$为$x \le 0$时函数的斜率。因此,PReLU是非饱和函数。如果$\gamma_i = 0$,那么PReLU就退化为ReLU.如果$\gamma_i$为一个很小的常数,则PReLU可以看作带泄露的ReLU.PReLU可以允许不同神经元具有不同的参数,也可以一组神经元共享一个参数。

1.3 ELU

 ELU(Exponential Linear Unit,指数线性单元)是一个近似的零中心化的非线性函数,其定义为

\begin{equation}
ELU(x) = \left\{
\begin{array}{ll}
x & \text{if x > 0} \\
\gamma_i(exp(x)-1) & \text{if x $\le$ 0}
\end{array} \right. \\
=max(0,x) + \gamma_i min(0,x).
\end{equation}

其中$\gamma \ge 0$是一个超参数,决定$x \le 0$时的饱和曲线,并调整输出均值在0附近。

1.4 Softplus

Softplus函数可以看作Rectifier函数的平滑版本,其定义为:Softplus(x)=log(1+exp(x)).  Softplus函数其导数刚好是Logistic函数.Softplus函数虽然也具有单侧抑制、宽兴奋边界的特性,却没有稀疏激活性。

 

Swish函数 

Swish函数,是一种自门控(Self-Gated)激活函数,定义为:

$swish(x) = x \sigma (\beta x)$

其中$\sigma(·)$为Logistic函数,$\beta$为可学习的参数或一个固定超参数.$\sigma(·) \in(0,1)$可以看作一种软性的门控机制.当$\sigma(\beta x)$接近于1时,门处于“开”状态,激活函数的输出近似于x本身;当$\sigma (\beta x)$接近于0时,门的状态为“关”,激活函数的输出近似于0.

  当$\beta = 0$时,Swish函数变成线性函数x/2.当$\beta = 1$时,Swish函数在x>0时近似线性,在x<0时近似饱和,同时具有一定的非单调性.当$\beta \to + \infty$时,$\sigma(\beta x)$趋向于离散的0-1函数,Swish函数近似为ReLU函数.因此,Swish函数可以看作线性函数和ReLU函数之间的非线性插值函数,其程度由参数$\beta$控制.

GELU函数

GELU(Gaussian Error Linear Unit,高斯误差线性单元)也是一种通过门控机制来调整其输出值的激活函数,和Swish函数比较类似.

$GELU(x)=xP(X \le x)$ 

 其中$P(X \le x)$是高斯分布$\mathcal{N}(\mu, \sigma^2)$的累积分布函数,其中$\mu,\sigma$为超参数,一般假设$\mu = 0,\sigma = 1即可$。由于高斯分布的累积分布函数为S型函数,因此GELU函数可以用Tanh函数或Logistic函数来近似,

$GELU(x) \approx 0.5x \Big( 1 + tanh \big( \sqrt{ \frac{2}{\pi} } (x + 0.044715 x^3) \big) \Big)$

或   $GELU(x) \approx x \sigma(1.702x)$

 当使用Logistic函数来近似时,GELU相当于一种特殊的Swish函数。

Maxout单元

Maxout单元[Goodfellow et al,2013]也是一种分段线性函数(采用Maxout单元的神经网络也叫作Maxout网络). Sigmoid型函数、ReLU等激活函数的输入是神经元的净输入z,是一个标量.而Maxout单元的输入是上一层神经元的全部原始输出,是一个向量$x=[x_1;x_2; \cdot \cdot \cdot;x_D].$

每个Maxout单元有K个权重向量$w_k \in \mathbb{R}^D$和偏置b_k(1 \le k \le K).对于输入$x$,可以得到K个净输入z_k,$1 \le k \le K$.

$z_k=w_k^Tx+b_k$

其中$w_k=[w_k,1,\cdot \cdot \cdot,w_k,D]^T$为第k个权重向量.

Maxout单元的非线性函数定义为

$maxout(x)=max({z_k})$ , $k \in [1,K]$

Maxout单元不单是净输入到输出之间的非线性映射,而是整体学习输入到输出之间的非线性映射关系.Maxout激活函数可以看作任意凸函数的分段线性近似,并且在有限的点上不可微的.