常见激活函数及其导数:

1. Sigmoid 函数

【注】Sigmoid 型函数是指一类 S 型曲线函数,为两端饱和函数。常用的 Sigmoid 型函数有Logistic函数和Tanh函数。

1.1 Logistic 函数

  • 定义:

σ(x)=11+ex\begin{array}{c} \sigma(x) = {1 \over 1 + e^{-x}} \end{array}

Logistic 函数常用来产生伯努利分布中的参数。

  • 性质:
  1. σ(x)=exex+1 \sigma(x) = {e^x \over e^x + 1}
  2. ddxσ(x)=σ(x)(1σ(x)) {d \over dx} \sigma(x) = \sigma(x)(1 - \sigma(x))
  3. 1σ(x)=σ(x) 1 - \sigma(x) = \sigma(-x)

1.2 Tanh 函数

  • 定义:

tanh(x)=exexex+ex\begin{array}{c} \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \end{array}

  • 性质:
  1. Tanh 函数可以看作是放大并平移的 Logistaic 函数:

tanh(x)=2σ(2x)1\begin{array}{c} \tanh(x) = 2\sigma(2x) - 1 \end{array}

其值域是 (1,1)(-1,1)

1.3 Hard-Logistic & Hard-Tanh

Logistic 函数和 Tanh 函数都是 Sigmoid 函数,具有饱和性,但计算开销较大,且这两个函数在中间近似线性,在两端近似为常量,故可以利用分段函数来近似。

  • Hard-Logistic 函数:

hard_logistic(x)={1gl(x)1gl0<gl(x)<10gl(x)0\begin{array}{c} \mathrm{hard\_logistic}(x) = \begin{cases} 1 & g_l(x) \geq 1 \\ g_l & 0 \lt g_l(x) \lt 1 \\ 0 & g_l(x) \leq 0 \end{cases} \end{array}

其中,glg_l 为 Logistic 函数在 0 附近的一阶泰勒展开近似:

gl(x)σ(0)+x×σ(0)=0.25x+0.5\begin{array}{c} g_l(x) \approx \sigma(0) + x \times \sigma^{'}(0) = 0.25x + 0.5 \end{array}

  • Hard-Tanh 函数:

hard_tanh(x)={1gt(x)1gt1<gt(x)<11gt(x)1\begin{array}{c} \mathrm{hard\_tanh}(x) = \begin{cases} 1 & g_t(x) \geq 1 \\ g_t & -1 \lt g_t(x) \lt 1 \\ -1 & g_t(x) \leq -1 \end{cases} \end{array}

其中,gtg_t 为 Tanh 函数在 0 附近的一阶泰勒展开近似:

gl(x)tanh(0)+x×tanh(0)=x\begin{array}{c} g_l(x) \approx \tanh(0) + x \times \tanh^{'}(0) = x \end{array}

2. softplus 函数

2.1 定义

ζ=log(1+ex)\begin{array}{c} \zeta = \log(1 + e^x) \end{array}

softplus 函数常用来产生正态分布中的 σ\sigma1σ21 \over \sigma^2 参数。

【注】softplus 函数是正部函数的平滑版本。

正部函数(又称整流线性单位函数 ReLU)

x+=max{0,x}\begin{array}{c} x^+ = \max\{0,x\} \end{array}

负部函数

x=max{0,x}\begin{array}{c} x^- = \max\{0,-x\} \end{array}

2.2 性质

  • logσ(x)=ζ(x) \log \sigma(x) = -\zeta(-x)

  • ddxζ(x)=σ(x) {d \over dx}\zeta(x) = \sigma(x)

  • x(0,1),σ1(x)=log(x1x) \forall x \in (0,1), \sigma^{-1}(x) = \log({x \over 1-x})

  • x>0,ζ1(x)=log(ex1) \forall x \gt 0, \zeta^{-1}(x) = \log(e^x - 1)

  • ζ(x)=xσ(y)dy \zeta(x) = \int_{-\infty}^x \sigma(y) dy

  • ζ(x)ζ(x)=x \zeta(x) - \zeta(-x) = x

3. Softmax 函数

Softmax 函数是 Logistic Sigmoid 函数的一种推广,Logistic Sigmoid 常用用于二分类,Softmax 可以用于多分类。

σ(Z)j=ezjk=1Kezk,  j=1,,K\begin{array}{c} \sigma(Z)_j = {e^{z_j} \over \sum_{k=1}^K e^{z_k}}, \ \ j = 1, \cdots, K \end{array}

  • Softmax 函数的输出可以理解为概率,即属于每一种分类的概率。

4. ReLU 函数

4.1 定义

ReLU(x)={xx00x<0=max(0,x)\begin{array}{c} \mathrm{ReLU}(x) = \begin{cases} x & x \geq 0 \\ 0 & x \lt 0 \end{cases} = max(0, x) \end{array}

  • 优点:
  1. 采用 ReLU 的神经元只需要进行加、乘和比较的操作,计算上更加高效。
  2. 在优化方面,相比于 Sigmoid 型函数的两端饱和,ReLU函数为左饱和函数,且在 x>0x > 0 时导数为 1,在一定程度上缓解了神经网络的梯度消失问题,加速梯度下降的收敛速度
  • 缺点:
  1. ReLU 函数的输出是非零中心化的,给后一层的神经网络引入偏置偏移,会影响梯度下降的效率。
  2. 此外, ReLU 神经元在训练时比较容易「死亡」。即在训练时,如果参数在一次不恰当的更新后,第一个隐藏层中的某个 ReLU 神经元在所有的训练数据上都不能被激活,那么这个神经元自身参数的梯度永远都会是
    0,在以后的训练过程中永远不能被激活。

【注】在实际使用中,为了避免上述缺点,常常采用几种扩展的 ReLU 函数。

4.2 带泄漏的 ReLU

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

LeakyReLU(x)={xif  x>0γxif  x0=max(0,x)+γmin(0,x)\begin{array}{c} \mathrm{LeakyReLU}(x) = \begin{cases} x & if \ \ x \gt 0 \\ \gamma x & if \ \ x \leq 0 \end{cases} = \max(0, x) + \gamma \min(0, x) \end{array}

其中,γ\gamma 是一个很小的常数(比如 0.01)。

4.3 带参数的 ReLU

带参数的 ReLU 引入一个可学习的参数,不同神经元可以有不同的参数。对于第 ii 个神经元,其 PReLU 定义如下:

PReLUi(x)={xif  x>0γixif  x0=max(0,x)+γimin(0,x)\begin{array}{c} \mathrm{PReLU}_i(x) = \begin{cases} x & if \ \ x \gt 0 \\ \gamma_i x & if \ \ x \leq 0 \end{cases} = \max(0,x) + \gamma_i \min(0,x) \end{array}

其中,γi\gamma_ix0x \leq 0 时函数的斜率。

4.4 ELU 函数

ELU 是一个近似的零中心化的非线性函数,其定义如下:

ELU(x)={xif  x>0γ(ex1)if  x0=max(0,x)+min(0,γ(ex1))\begin{array}{c} \mathrm{ELU}(x) = \begin{cases} x & if \ \ x \gt 0 \\ \gamma(e^x - 1) & if \ \ x \leq 0 \end{cases} = \max(0,x) + \min(0,\gamma(e^x - 1)) \end{array}

其中,γ0\gamma \geq 0 是一个超参数,决定 x0x \leq 0 时的饱和曲线,并调整输出均值在 0 附近。

4.5 Swish 函数

Swish 函数是一种自门控激活函数,其定义如下:

swish(x)=xσ(βx)\begin{array}{c} \mathrm{swish}(x) = x \sigma(\beta x) \end{array}

其中,σ()\sigma(\cdot) 为 Logistic 函数,β\beta 为可学习的参数(或一个固定的超参数)。

4.6 GELU 函数

GELU 函数也是一种通过门控机制来调整其输出值的激活函数,和 Swish 函数类似,其定义如下:

GELU(x)=xP(Xx)\begin{array}{c} \mathrm{GELU}(x) = xP(X \leq x) \end{array}

其中,P(Xx)P(X \leq x) 是高斯分布 N(μ,σ2)\mathcal{N}(\mu,\sigma^2) 的累积分布函数,其中 μ,σ\mu,\sigma 为超参数(一般设为标准高斯分布)。

  • 由于 GELU 高斯分布的累积分布函数为 S 型函数,因此 GELU 函数可以用 Tanh 函数或 Logistic 函数来近似:

GELU(x)0.5x(1+tanh(2π(x+0.044715x3)))GELU(x)xσ(1.702x)\begin{array}{c} \mathrm{GELU}(x) \approx 0.5x(1 + \tanh(\sqrt{\frac{2}{\pi}}(x+0.044715 x^3))) \\ \mathrm{GELU}(x) \approx x \sigma(1.702 x) \end{array}

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

5. Maxout 单元

Maxout 单元也是一种分段线性函数,Sigmoid 型函数、ReLU 等激活函数的输入是神经元的净输入 xx,是一个标量。而 Maxout 单元的输入是上一层神经元的全部原始输出, 是一个向量 x=[x1;x2;;xD] x = [x_1; x_2; \cdots ; x_D]

  • 每个 Maxout 单元有 KK 个权重向量 wkRD\boldsymbol{w}_k \in \mathbb{R}^D 和偏置 bk(1kK)b_k(1 \leq k \leq K)。对于输入 x\boldsymbol{x},可以得到 KK 个净输入 zk,1kKz_k, 1 \leq k \leq K

zk=wkTx+bk\begin{array}{c} z_k = \boldsymbol{w}_k^T \boldsymbol{x} + b_k \end{array}

其中 wk=[wk,1,,wk,D]T \boldsymbol{w}_k = [w_{k,1},\cdots,w_{k,D}]^T 为第 kk 个权重向量。

Maxout 单元的非线性函数定义如下:

maxout(x)=maxk[1,K](zk)\begin{array}{c} \mathrm{maxout}(\boldsymbol{x}) = \max_{k \in [1,K]} (z_k) \end{array}

【注】Maxout 单元不单是净输入到输出之间的非线性映射,而是整体学习输入到输出之间的非线性映射关系。