激活函数

Sigmoid

将输入 xx 映射到一个 0011 的概率,可以用来做二分类的判断。

公式与图像

Sigmoid(x)=11+exSigmoid(x)=\frac{1}{1+e^{-x}}

根据除法求导法则

\begin{align} \frac{\partial f(x)}{\partial x}&=\frac{-(-e^{-x})}{(1+e^{-x})^2} \\&=\frac{e^{-x}}{(1+e^{-x})^2} \\&=\frac{1+e^{-x}-1}{(1+e^{-x})^2} \\&=\frac{1}{1+e^{-x}}-\frac{1}{(1+e^{-x})^2} \\&=f(x)-f^2(x) \\&=f(x)(1-f(x)) \end{align}

根据 y=1xy=\frac{1}{x} 求导法则

\begin{align} \frac{\partial f(x)}{\partial x}&=-(1+e^{-x})^{-2}\cdot e^{-x}\cdot -1 \\ &=\frac{e^{-x}}{(1+e^{-x})^2} \\ &=\cdots \end{align}

f(x)f(x)

image-20211119195516195

f(x)f\prime(x)

image-20211119195741874

优缺点

优点

  • 导数容易计算。
  • 把数据压缩到 0 和 1 之间,单调连续,稳定,可以作为输出层。

缺点

  • 需要幂运算,计算成本高。
  • 输出均值非 0 ,会导致梯度更新要不都往正方向,要不都往负方向,收敛慢。
  • 大概在 [-5,5] 区间内导数才大于0,且最大为 0.25 ,因此对于深层网络的反向传播,容易出现梯度消失的现象。

Tanh

双曲正切函数,将输入 xx 映射到一个 1-111 的值。

公式与图像

tanh(x)=exexex+extanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}

\begin{align} \frac{\partial f(x)}{\partial x}&=\frac{(e^x+e^{-x})^2-(e^x-e^{-x})^2}{(e^x+e^{-x})^2} \\&=1-\frac{(e^x-e^{-x})^2}{(e^x+e^{-x})^2} \\&=1-f^2(x) \end{align}

f(x)f(x)

image-20211119205138926

f(x)f\prime (x)

image-20211119205319177

优缺点

优点

  • 导数容易计算。
  • 把数据压缩到 -1 和 1 之间,是 0 均值的,解决了Sigmoid的对应问题。

缺点

  • 存在幂运算。
  • 存在梯度消失问题。

Softmax

Softmax 函数,又称为归一化指数函数。它是二分类函数 Sigmoid 在多分类上的推广。一般来说,一个 X1X\cdot 1 的特征向量,经过一个 CXC\cdot X 的全连接层,得到一个 C1C \cdot 1 的向量,也叫做 logits ,然后经过 Softmax 激活函数,得到一个 C1C\cdot 1 的向量,每个值表示这个样本属于这一类的概率。

输出的结果满足两个条件:1 概率为非负数;2 各个分类概率相加为1。

公式与图像

Softmax(zi)=ezij=1CezjSoftmax(z_i)=\frac{e^{z_i}}{\sum_{j=1}^{C}e^{z_j}}

分子分母分别对应了上述的两个条件:分子通过指数函数,将输出映射到零到正无穷,分母是所有分子相加,进行归一化。

假设输入为 z\mathbf{z} 向量,经过 Softmax 函数之后输出为 a\mathbf{a} 向量,根据神经网络反向传播的链式求导法则,这里需要求解 az\frac{\partial\mathbf{a}}{\partial\mathbf{z}}

因为 z\mathbf{z}a\mathbf{a} 都是向量,这里偏导求出来应该是一个矩阵,第 ii 行对应 aiz\frac{\partial a_i}{\partial\mathbf{z}}

假设真实标签 yj=1y_j=1 ,其他为 00 ,那么这里也只需要求出第 jj 行对应的偏导数即可,即 ajz\frac{\partial a_j}{\partial\mathbf{z}} ,其中 aj=ezjk=1Cezka_j=\frac{e^{z_j}}{\sum_{k=1}^{C}e^{z_k}}

那么对于每个 ii ,有:

iji\neq jzizjz_i\neq z_j ,这里用到指数函数的求导和除法的求导法则,得到

ajzi=0ezjezi(k=1Cezk)2=ajai\frac{\partial a_j}{\partial z_i}=\frac{0-e^{z_j}e^{z_i}}{(\sum_{k=1}^{C}e^{z_k})^2}=-a_ja_i

i==ji==j

ajzi=(ezjk=1Cezk)ezjezi(k=1Cezk)2=ajaj2\frac{\partial a_j}{\partial z_i}=\frac{(e^{z_j}\sum_{k=1}^{C}e^{z_k})-e^{z_j}e^{z_i}}{(\sum_{k=1}^{C}e^{z_k})^2}=a_j-a_j^2

如果使用交叉熵损失函数,根据链式求导法则乘上 La\frac{\partial\mathbf{L}}{\partial\mathbf{a}} ,最终得到的结果就是 ay\mathbf{a}-\mathbf{y}

优缺点

优点

  • 将输出的差距扩大化,并压缩到 0 到 1 之间。
  • 导数容易计算。

缺点

  • 容易出现指数爆炸,导致数值溢出,可以通过统一减去一个最大值解决。
  • 通常配合交叉熵损失函数,也可能出现数值溢出。

ReLU

ReLU 函数是一个分段线性函数,把负值转为0,正值不变,这种操作称为单侧抑制,可以让神经网络中的神经元具有稀疏激活性,能够更好地挖掘相关特征。

公式与图像

ReLU(x)={x   if x>00   otherwiseReLU(x)=\left\{ \begin{aligned} &x \ \ \ if \ x>0 \\ &0 \ \ \ otherwise \end{aligned} \right.

其实就是等于 max(0,x)\max(0,x)

f(x)f(x)

image-20211121154353317

f(x)f\prime(x)

image-20211121154511322

优缺点

优点

  • 求导简单,无幂运算,计算复杂度低。
  • 能够缓解梯度消失的问题 ( 并不能完全解决梯度消失,当 x 小于 0 ,梯度为 0 ,即使 梯度为 1 ,权重也可能小于 1 ,连乘导致梯度消失 ) 。
  • 收敛速度相对更快 ( 导数恒为 1 ,对比其他几个激活函数 ) 。

缺点

  • 均值非 0 。
  • 不会对数据进行范围压缩,数据范围会随着模型层数的增加而不断增大。
  • 存在神经元死亡的现象 ( 如果出现异常值导致 ReLU 输出负数,梯度为 0 ,那么将无法通过反向传播更新神经元参数,那对于 ReLU 的输入就继续保持负数,这就是神经元死亡 ) 。

Leaky-ReLU & P-ReLU

两者都是对 ReLU 中 x<0x<0 的情况进行了改进,不同的是,P-ReLU 是把 α\alpha 当作一个可学习的参数。

公式与图像

f(x)={x   if x>0αx   otherwisef(x)=\left\{ \begin{aligned} &x \ \ \ if \ x>0 \\ &\alpha x \ \ \ otherwise \end{aligned} \right.

优缺点

优点

  • 缓解了 ReLU 存在的神经元死亡的问题。

缺点

  • 实际应用中效果不稳定。

ELU

结合了 Sigmoid 的左侧软饱和性和 ReLU 的右侧无饱和性。

公式与图像

f(x)={x   if x>0α(ex1)   otherwisef(x)=\left\{ \begin{aligned} &x \ \ \ if \ x>0 \\ &\alpha (e^x-1) \ \ \ otherwise \end{aligned} \right.

f(x)={1   if x>0ex   otherwisef(x)=\left\{ \begin{aligned} &1 \ \ \ if \ x>0 \\ &e^x \ \ \ otherwise \end{aligned} \right.

优缺点

优点

  • 输出均值接近 0 ,收敛速度更快。

缺点

  • 需要指数运算。
  • 实际应用中效果不稳定。

SoftSign

SoftSign 的曲线和 Tanh 极其相似,且相对更加平坦,可以作为 Tanh 的替代者。

公式与图像

f(x)=\frac{x}{1+\abs{x}}

f(x)={1(1+x)2   if x>01(1x)2   otherwisef\prime(x)=\left\{ \begin{aligned} &\frac{1}{(1+x)^2} \ \ \ if \ x>0 \\ &\frac{1}{(1-x)^2} \ \ \ otherwise \end{aligned} \right.

f(x)f(x)

image-20211121195408704

f(x)f\prime(x)

image-20211121195503474

优缺点

优点

  • 可以缓解 Tanh 梯度消失的问题。

缺点

  • 计算量和计算复杂度相对较大。

SoftPlus

可以作为 ReLU 的一个替代选择。

公式与图像

f(x)=ln(1+ex)f(x)=\ln(1+e^x)

f(x)=ex1+exf\prime(x)=\frac{e^x}{1+e^x}

f(x)f(x)

image-20211121200101597

f(x)f\prime(x)

image-20211121200315860

优缺点

优点

  • 导数连续非零,可以防止神经元死亡。

缺点

  • 均值非 0 ,非对称。
  • 导数通常小于 1 ,存在梯度消失现象。

Maxout

Maxout 实际上是一个可学习的分段线性函数。具体地,将上一层的输出连接 k 个隐藏层,并取这 k 个隐藏层的最大值作为激活函数最终的输出。

img

注意,虽然从文字看起来很难理解,很像只是多加了一层普通的隐藏层。但是注意其实是 k 个隐藏层,最终在这个维度取最大值,相当于又变成了一个隐藏层的功能。

从矩阵计算的角度来理解,比如输入矩阵是 ndn*ddd 是输入向量维度,也就是输入层节点个数,激活函数参数矩阵 WWdmkd*m*kmm 是输出向量维度,两者相乘得到 nmkn*m*k ,然后对 kk 这一维取最大值,得到 nmn*m 的输出。

矩阵相乘就是线性变换,kk 个线性变换取最大值如果从二维的角度来看,可以理解为坐标轴上有 kk 个线性函数/直线,这样子将 xx 轴划分为不同的取值范围,然后从 yy 轴的角度对其取最大值,选择最上方的那一段线段,就可以得到一个近似的曲线。通过选择不同的线性函数,几乎就能拟合任意的凸函数。

公式与图像

f(x)=max(w1Tx+b1,,wkTx+bk)f(x)=\max(w_1^Tx+b_1,\cdots,w_k^Tx+b_k)

优缺点

优点

  • 可以拟合任意凸函数。
  • 具有 ReLU 的所有优点,避免 ReLU 的一些缺点比如神经元死亡。

缺点

  • 增加了参数和计算量。

Q&A

为什么需要非线性激活函数?

如果没有激活函数,神经网络无论多少层,输出都是输入的线性组合。引入非线性激活函数,使得神经网络可以逼近任何非线性函数,大大提高可用性。

怎么分析判断一个损失函数的特点,优缺点?

可以通过分析当预测值和真实值不同差距的时候,梯度的情况,来分析损失函数的特性。

激活函数的饱和性是什么?

对于激活函数 f(x)f(x) ,当 x 趋近于负无穷,导数趋近于 0 ,称为左饱和,同理,当 x 趋近于正无穷,导数趋近于 0 ,称为右饱和。

当一个函数既满足左饱和又满足右饱和的时候就称之为饱和,典型的饱和激活函数有 Sigmoid,Tanh 。

对于激活函数 f(x)f(x) ,如果存在常数 C ,当 x<Cx<C 时,导数恒为 0 ,称为左硬饱和,同理如果存在常数 C ,当 x>Cx>C 时,导数恒为 0 ,称为右硬饱和。同理如果导数是趋近于 0 而不是恒等于,称为软饱和。