深度学习--激活函数(持续更新)

激活函数(Activation function)


(一)前言

1.概念:

激活函数对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。
 

2.使用原因

(1)激活函数对模型学习、理解非常复杂和非线性的函数具有重要作用。
(2)激活函数可以把当前特征空间通过一定的线性映射转换到另一个空间,让数据能够更好的被分类。
(3)激活函数可以引入非线性因素。

  • 如果不使用激活函数,每层都相当于矩阵相乘,则输出信号仅是一个简单的线性函数。无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron),与单独一个线性分类器无异,那么网络的逼近能力就相当有限。
  • 线性函数一个一级多项式,线性方程的复杂度有限,从数据中学习复杂函数映射的能力很小。没有激活函数,神经网络将无法学习和模拟其他复杂类型的数据,例如图像、视频、音频、语音等。
  • 正因为上面的原因,决定引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。
     

3.性质

(1)非线性:当激活函数是非线性的,一个两层的神经网络就可以基本上逼近所有的函数。但如果激活函数是恒等激活函数的时候,即f(x) = x,就不满足这个性质,而且如果多层感知机(MLP)使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的。
(2)可微性:当优化方法是基于梯度的时候,就体现的该本质。
(3)单调性:当激活函数是单调的时候,单层网络能够保证是凸函数。
(4)输出值的范围:当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练更加高效,不过这种情况很小,一般需要更小的learning rate。
 

4.选择

按照经验来说:
(1)深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。总体上来讲,训练深度学习网络尽量使用零均值zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出,要尽量选择这样的激活函数以加快模型的收敛速度。
(2)如果搭建的神经网络的层数不多的时候,选择sigmoid、tanh、relu都可以,如果搭建的网络层数较多的时候,选择不当不当会造成梯度消失的问题,此时一般不宜选择sigmoid、tanh激活函数,最好选择relu激活函数。
(3)在二分类问题中,网络的最后一层适合使用sigmoid激活函数;而多分类任务中,网络的最后一层使用softmax激活函数。
(4)如果使用ReLU,那么谨慎设置初值和学习率。(实际中,如果learning rate很大,那么很可能网络中出现大量的dead relu,如果设置合适的较小的学习率,这个问题发生的情况不会太频繁)如果这个问题不好解决,那么可以试试Leaky ReLU、PReLU、ELU或者Maxout。


(二)具体分类

相对于饱和激活函数,使用“非饱和激活函数”的优势在于两点:

  1. 首先,“非饱和激活函数”能解决层数非常多的深度神经网络的“梯度消失”问题,而浅层网络才用sigmoid 作为激活函数。
  2. 其次,它能加快收敛速度。
     

1.饱和激活函数

1.1 对数几率函数,Logistic-Sigmoid函数

函数表达式及其导数:
s i g m o i d ( x ) = f ( x ) = 1 1 + e − x f ′ ( x ) = e − x ( 1 + e − x ) 2 = f ( x ) ( 1 − f ( x ) ) sigmoid(x)=f(x)=\frac{1}{1+e^{-x}}\\ f'(x)=\frac{e^{-x}}{(1+e^{-x})^{2}}=f(x)(1-f(x)) sigmoid(x)=f(x)=1+ex1f(x)=(1+ex)2ex=f(x)(1f(x))
几何图像:
请添加图片描述

特点:
(1)以前最常用的非线性激活函数,是⼀个连续的、平滑的、可微的阈值单元近似。以(0,0.5)中心对称,能够把输入的连续实值变换为0和1之间的输出。特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。
(2)由于输出值限定在0到1,因此它对每个神经元的输出进行了归一化,也可用于将预测概率作为输出的模型
(3)当想要将输出视作⼆元分类问题的概率时, sigmoid仍然被⼴泛⽤作输出单元上的激活函数(可以将sigmoid视为softmax的特例)。
(4)梯度平滑,避免跳跃的输出值;明确的预测,即非常接近1或0
(5)求导计算方便:
f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f'(x)=f(x)(1-f(x)) f(x)=f(x)(1f(x))

(6)
lim ⁡ x → ∞ f ′ ( x ) = 0 \displaystyle \lim_{x \to \infty } f'(x)=0 xlimf(x)=0
具有这种性质的称为软包和激活函数,一旦落入饱和区,导致了向底层传递的梯度值变得非常小,此时网络参数很难得到有效的训练,(梯度消失)
 
缺点:
(1)存在梯度消失和梯度爆炸

  • 在深度神经网络中梯度反向传递时,导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。
  • 当σ(x)中的x较大或较小时,导数接近0,而后向传递的数学依据是微积分求导的链式法则,当前层的导数需要之前各层导数的乘积,几个小数的相乘,结果会很接近0。
  • 因为Sigmoid导数的最大值是1/4,这意味着导数在每一层至少会被压缩为原来的1/4。如果我们初始化神经网络的权值为[0,1]之间的随机值,由反向传播算法的数学推导可知,梯度从后向前传播时,每传递一层梯度值都会减小为原来的0.25倍,如果神经网络隐层特别多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失现象;当网络权值初始化为(1,+∞)区间内的值,则会出现梯度爆炸情况。此外,在输入绝对值很大时也会出现饱和现象,导致梯度消失。
  • 梯度消失使得参数无法被更新,神经网络无法被优化

 
(2)输出不为零均值
Sigmoid的输出output不是0均值(即zero-centered),这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。产生的一个结果就是,如:
x > 0 , f = w T x + b x>0 , f = w^{T} x + b x>0,f=wTx+b
那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢,降低权重更新的效率。 如果按batch去训练,那么那个batch可能得到不同的信号,从而可以缓解一些这个问题。
 
(3)幂运算较耗时
其解析式中含有幂运算,计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。
 

1.2 双曲正切Hyperbolic Tangent(Tanh)函数

函数表达式及其导数:
t a n h ( x ) = f ( x ) = e x − e − x e x + e − x = 2 ∗ s i g m o i d ( 2 x ) − 1 f ′ ( x ) = 4 ∗ s i g m o i d ′ ( 2 x ) = 4 e − 2 x ( 1 + e − 2 x ) 2 = 1 − f 2 ( x ) tanh(x)=f(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}=2*sigmoid(2x)-1\\ f'(x)=4*sigmoid'(2x)=\frac{4e^{-2x}}{(1+e^{-2x})^{2}}=1-f^{2}(x) tanh(x)=f(x)=ex+exexex=2sigmoid(2x)1f(x)=4sigmoid(2x)=(1+e2x)24e2x=1f2(x)
几何图像:
请添加图片描述

特点:
(1)将 一个实值输入压缩至 [-1, 1]的范围,当输入在0附近时,tanh函数接近线形变换。这类函数具有平滑和渐近性,并保持单调性,解决了Sigmoid函数的不是zero-centered输出问题
(2)在一般的二元分类问题中,tanh 函数用于隐藏层,而 sigmoid 函数用于输出层,但这并不是固定的,需要根据特定问题进行调整。
(3)Tanh是零均值的,因此实际应用中tanh会比sigmoid更好,收敛更快。
 
缺点:
(1)梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。
(2)当输入较大或较小时,输出几乎是平滑的并且梯度较小,这不利于权重更新
 

2.非饱和激活函数-LU函数

2.1 整流线性修正单元Rectified linear unit(ReLU)函数

函数表达式及其导数:
R e L U ( x ) = f ( x ) = m a x ( 0 , x ) = { x , x ≥ 0 0 , x ≤ 0 f ′ ( x ) = { 1 , x > 0 0 , x < 0 ReLU(x)=f(x)=max(0,x)=\left\{\begin{matrix}x,x\geq0\\0,x\leq0\end{matrix}\right.\\ f'(x)=\left\{\begin{matrix}1,x>0\\0,x<0\end{matrix}\right. ReLU(x)=f(x)=max(0,x)={ x,x00,x0f(x)={ 1,x>00,x<0
几何图像:
请添加图片描述

特点:
(1)
深度学习中较为流行的一种激活函数,是一个取最大值函数(并不是全区间可导的),提供了一种非常简单的非线性变换
(2)单侧抑制
ReLU函数从图像上看,是一个分段线性函数,把所有的负值都变为0,而正值不变,这样就成为单侧抑制。从而在求导方面较为简单:要么让参数消失,要么让参数通过。
(3)相对宽阔的激活边界
当输入为负时,ReLU硬饱和;当输入为正时,保持梯度不衰减,不存在梯度饱和问题。ReLU的非饱和性减轻了神经网络的梯度消失问题(在正区间),提供相对宽阔的激活边界。
(4)稀疏激活性
ReLU使得一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的互相依存关系,缓解了过拟合问题的发生。从信号方面来看,即神经元同时只对输入信号的少部分选择性响应,大量信号被刻意的屏蔽了,这样可以提高学习的精度,更好更快地提取稀疏特征。
(5)Relu只需要一个阈值,判断输入是否大于0,即可以得到激活值,而且只存在线性关系,计算速度更快
(6)使用梯度下降(GD)法时,收敛速度远快于sigmoid和tanh
(7)ReLU函数有很多变体,如LeakyReLU,PReLU等。
 
缺点:
(1)输出不为零均值
(2)Dead Neuron问题
Dead Neuron(死亡神经元)或者说Dead ReLU(神经元坏死现象),指的是Relu的输入值为负的时候,输出始终为0,其一阶导数也始终为0,不再对任何数据有所响应,这样会导致神经元不能更新参数,可能永远不会被激活,导致相应的参数永远不能被更新。偏移现象和神经元死亡会共同影响网络的收敛性。
有两个主要原因可能导致这种情况产生:

  • 参数初始化问题
  • learning rate太高导致在训练过程中参数更新太大

解决方法:采用Xavier初始化方法,以及避免将learning rate设置太大或者使用adagrad等自动调节learning rate的算法

(3)对参数初始化和学习率非常敏感
 

2.2 带泄漏单元的ReLU(Leaky ReLU)函数

函数表达式及其导数:
L e a k y R e L U ( x ) = f ( x ) = m a x ( α x , x ) = { x , x ≥ 0 α x , x ≤ 0 其 中 α 是 一 个 很 小 的 正 数 , 一 般 为 0.01 f ′ ( x ) = { 1 , x > 0 α , x < 0 LeakyReLU(x)=f(x)=max(αx,x)=\left\{\begin{matrix}x,x\geq0\\αx,x\leq0\end{matrix}\right.\\ 其中α是一个很小的正数,一般为0.01\\ f'(x)=\left\{\begin{matrix}1,x>0\\α,x<0\end{matrix}\right. LeakyReLU(x)=f(x)=max(αx,x)={ x,x0αx,x0α0.01f(x)={ 1,x>0α,x<0
几何图像:
请添加图片描述

特点:
(1)为了解决Relu函数的Dead ReLU Problem,在Relu函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky Relu函数。
(2)把x的非常小的线性分量给予负输入(αx),初始化神经元,从而使ReLU在负数区域更偏向于激活而不是死掉,这里的斜率是确定的,即α为确定值,一般设为较小的值
(3)有助于扩大ReLU函数的范围,从[0,+∞)变成(-∞,+∞)
(4)理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。
 
缺点:
(1)实际中不太稳定,有些近似线性,导致在复杂分类中效果不好
(2)a值的选择增加了问题难度, 需要较强的人工先验或多次重复训练以确定合适的参数值
 

2.3 参数化的ReLU(Parametric ReLU)(PReLU)函数

函数表达式及其导数:
P R e L U ( x ) = f ( x ) = m a x ( α x , x ) = { x , x ≥ 0 α x , x ≤ 0 其 中 α 是 可 学 习 参 数 , 是 变 量 , 一 般 初 始 化 为 0.25 f ′ ( x ) = { 1 , x > 0 α , x < 0 PReLU(x)=f(x)=max(αx,x)=\left\{\begin{matrix}x,x\geq0\\αx,x\leq0\end{matrix}\right.\\ 其中α是可学习参数,是变量,一般初始化为0.25\\ f'(x)=\left\{\begin{matrix}1,x>0\\α,x<0\end{matrix}\right. PReLU(x)=f(x)=max(αx,x)={ x,x0αx,x0α0.25f(x)={ 1,x>0α,x<0
几何图像:
请添加图片描述

特点:
参数整流线性单元,用来解决Relu带来的神经元坏死问题,其中α是可学习参数,可由方向传播算法学出来,其他基本同上
 

2.4 随机ReLU(RReLU)函数

函数表达式及其导数:
R R e L U ( x ) = f ( x ) = m a x ( α x , x ) = { x , x ≥ 0 α x , x ≤ 0 其 中 α ∼ 均 匀 分 布 U ( m , n ) , 通 常 相 对 较 小 , m < n , m , n ∈ [ 0 , 1 ) f ′ ( x ) = { 1 , x > 0 α , x < 0 RReLU(x)=f(x)=max(αx,x)=\left\{\begin{matrix}x,x\geq0\\αx,x\leq0\end{matrix}\right.\\ 其中α\sim 均匀分布U(m,n),通常相对较小,m<n,m,n\in [0,1)\\ f'(x)=\left\{\begin{matrix}1,x>0\\α,x<0\end{matrix}\right. RReLU(x)=f(x)=max(αx,x)={ x,x0αx,x0αU(m,n),,m<n,m,n[0,1)f(x)={ 1,x>0α,x<0
特点:
在训练时使用RReLU作为激活函数,则需要从均匀分布U(m,n)中随机抽取的一个数值α,作为负值的斜率。PReLU 在负值域是线性运算,尽管斜率很小,但不会趋于0,这也可以避免Dead ReLU问题
 

2.5 指数线性单元Exponential Linear Unit(ELU)函数

函数表达式及其导数:
E L U ( x ) = f ( x ) = { x , x ≥ 0 α ( e x − 1 ) , x ≤ 0 其 中 α 是 超 参 数 , 默 认 为 1.0 f ′ ( x ) = { 1 , x > 0 α e x , x < 0 ELU(x)=f(x)=\left\{\begin{matrix}x,x\geq0\\α\left ( e^{x}-1 \right ),x\leq0\end{matrix}\right.\\ 其中α是超参数,默认为1.0\\ f'(x)=\left\{\begin{matrix}1,x>0\\α e^{x},x<0\end{matrix}\right. ELU(x)=f(x)={ x,x0α(ex1),x0α1.0f(x)={ 1,x>0αex,x<0
几何图像:
请添加图片描述
f(x)与α

特点:
(1)为解决ReLU存在的问题而提出,不会有Dead ReLU问题
(2)ELU有负值,这会使激活的平均值接近零。均值激活接近于零可以使学习更快,因为它们使梯度更接近自然梯度。
(3)ELU通过减少偏置偏移的影响,使正常梯度更接近于单位自然梯度,从而使均值向零加速学习
(4)ELU 在较小的输入下会饱和至负值,从而减少前向传播的变异和信息;有负数饱和区,从而对噪声有一些鲁棒性。
(5)类似于Leaky ReLU,理论上虽然好于ReLU,但在实际使用中目前并没有好的证据ELU总是优于ReLU。
 
缺点:计算量稍大,原点在α不为1时不可导
 

2.6 高斯误差线性单元Gaussian Error Linear Units(GELU)

函数表达式及其导数:
G E L U ( x ) = f ( x ) = x ∗ P ( X ≤ x ) = x ∗ Φ ( x ) = x ∗ 1 2 π σ ∫ − ∞ x e − ( X − μ ) 2 2 σ 2 d X 其 中 , Φ ( x ) 表 示 x 的 高 斯 正 态 分 布 的 累 计 分 布 , μ 和 σ 分 布 是 正 太 分 布 的 均 值 和 标 准 差 G E L U ( x ) ≈ g ( x ) = 0.5 x ( 1 + t a n h ( 2 π ( x + 0.047715 x 3 ) ) ) ≈ h ( x ) = x ∗ s i g m o i d ( 1.702 x ) f ′ ( x ) ≈ s i g m o i d ( 1.702 x ) + 1.702 x ∗ s i g m o i d ( 1.702 x ) ∗ ( 1 − s i g m o i d ( 1.702 x ) ) GELU(x)=f(x)=x*P(X\leq x)=x*\Phi (x)=x*\frac{1}{\sqrt{2\pi}\sigma}\int_{-\infty }^{x}e^{-\frac{(X-\mu)^{2}}{2\sigma^{2}}}dX\\ 其中,Φ(x)表示x的高斯正态分布的累计分布,μ和σ分布是正太分布的均值和标准差\\ GELU(x)\approx g(x)=0.5x(1+tanh(\sqrt{\frac{2}{\pi }}(x+0.047715x^{3})))\\ \approx h(x)=x*sigmoid(1.702x)\\ f'(x)\approx sigmoid(1.702x)+1.702x*sigmoid(1.702x)*(1-sigmoid(1.702x)) GELU(x)=f(x)=xP(Xx)=xΦ(x)=x2π σ1xe2σ2(Xμ)2dXΦ(x)xμσGELU(x)g(x)=0.5x(1+tanh(π2 (x+0.047715x3)))h(x)=xsigmoid(1.702x)f(x)sigmoid(1.702x)+1.702xsigmoid(1.702x)(1sigmoid(1.702x))
在μ=0,σ=1时近似,f(x)和g(x)的最大误差约为0.002,g(x)和h(x)的最大误差约为0.02
 
几何图像:
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

特点:
(1)

  • 在神经网络的建模过程中,模型很重要的性质就是非线性,同时为了模型泛化能力,需要加入随机正则,例如dropout(随机置一些输出为0,其实也是一种变相的随机非线性激活),而随机正则与非线性激活是分开的两个事情, 而其实模型的输入是由非线性激活与随机正则两者共同决定的。
  • 高斯误差线性单元正是在激活中引入了随机正则的思想,将非线性与依赖输入数据分布的随机正则化器相结合在一个激活函数的表达中,是一种对神经元输入的概率描述,直观上更符合自然的认识,同时实验效果要比ReLU与ELU都要好。

(2)

  • GELUs其实是dropout、zoneout、ReLU的综合,GELU对于输入乘以一个[0,1]组成的mask,而该mask的生成则是依概率随机的依赖于输入。假设输入为X,mask为m,则m服从一个伯努利分布Φ(x)= P(X<x),其中X服从标准正态分布。这么选择是因为神经元的输入趋向于正态分布,这么设定使得当输入x减小的时候,输入会有一个更高的概率被dropout掉,这样的激活变换就会随机依赖于输入了。
  • 与以往dropout指定随机概率值或ReLU根据输入值的正负进行mask的方式不同,GeLU根据当前input大于其余inputs的概率进行随机正则化,即为在mask时依赖输入的数据分布。

(3)x作为神经元输入,x越大,激活输出x约有可能保留,x越小,越有可能激活结果为0。对于比较大的输入x >0,GELU基本上就是线性输出(和 ReLU类似);对于比较小的输入x<0,GELU的输出就是0;当输入x接近于0时,GELU是非线性输出,具有一定的连续性。
(4)一般常见的是均值为0,方差为1的版本。当方差为无穷大,均值为0的时候,GeLU就等价于ReLU了。GELU可以当作为RELU的一种平滑策略。
(5)GELU作为激活函数训练时,建议使用一个带动量的优化器

具体细节:Gaussian Error Linear Units (GELUs)

2.7 门控线性单元Gated Linear Unit(GLU)

函数表达式及其导数:
G L U ( x ) = f ( x ) = ( x ∗ w + b ) ⊗ s i g m o i d ( x ∗ v + c ) 其 中 x 代 表 输 入 , w , v , b , c 都 是 可 学 习 参 数 , s i g m o i d 可 以 是 其 他 激 活 函 数 , ⊗ 是 对 应 元 素 相 乘 GLU(x)=f(x)=(x*w+b)\otimes sigmoid(x*v+c)\\ 其中x代表输入,w,v,b,c都是可学习参数,sigmoid可以是其他激活函数, ⊗是对应元素相乘 GLU(x)=f(x)=(xw+b)sigmoid(xv+c)xwvbcsigmoid

对应元素相乘(element-wise product),也称为哈达玛积(Hadamard product),表示矩阵乘法的点积

几何图像:

在这里插入图片描述
 
特点:
(1)把GTU中的Sigmoid gate去掉的话,就是一个Tanh激活函数。因此,可以通过比较Tanh和GTU的实验效果,来对比Gate mechanism对模型性能的影响。通过图1中的左图可以发现,使用GTU的效果远远优于Tanh激活函数,可见,gate units有助于深度网络建模。
(2)Tanh激活函数和GTU都存在梯度消失的问题,因为即使是GTU,当units的激活处于饱和区时,输入单元激活单元:tanh(X*W+b)和gate单元:O(X * V + c)都会削弱梯度值。相反,GLU和Relu不存在这样的问题。GLU和Relu都拥有线性的通道,可以使梯度很容易通过激活的units,反向传播且不会减小。因此,采用GLU或Relu做为激活,训练时收敛速度更快。
(3)Relu单元并没有完全抛弃GLU中的gate units,GLU可以看做是处于激活状态下的一种简化的Relu单元。对比Relu和GLU,通过图1右图可以大显,在相同的训练时间下,GLU单元可以获得比Relu更高的精度。
 

2.8 门控双曲正切单元Gated Tanh Unit(GTU)

函数表达式及其导数:
G L U ( x ) = f ( x ) = t a n h ( x ∗ w + b ) ⊗ s i g m o i d ( x ∗ v + c ) GLU(x)=f(x)=tanh(x*w+b)\otimes sigmoid(x*v+c)\\ GLU(x)=f(x)=tanh(xw+b)sigmoid(xv+c)
特点:
GTU存在tanh激活的非线性单元,GLU存在的线性单元,GLU中不存在类似于GTU中的梯度消失问题。通过对比可以发现,GLU获得比GTU更快的收敛速度,以及更高的准确率。
 

3.非饱和激活函数-Soft函数

3.1 Softsign函数

函数表达式及其导数:
S o f t s i g n ( x ) = f ( x ) = x 1 + ∣ x ∣ f ′ ( x ) = 1 ( 1 + ∣ x ∣ ) 2 Softsign(x)=f(x)=\frac{x}{1+\left|x\right|}\\ f'(x)=\frac{1}{(1+\left|x\right|)^{2}} Softsign(x)=f(x)=1+xxf(x)=(1+x)21
几何图像:
请添加图片描述

特点:
(1)Softsign函数是Tanh函数的另一个替代选择。就像Tanh函数一样,Softsign函数是反对称、去中心、可微分,并返回-1和1之间的值。其更平坦的曲线与更慢的下降导数表明它可以更高效地学习,比tTanh函数更好的解决梯度消失的问题。
(2)Softsign函数的导数的计算比Tanh函数更麻烦。
 

3.2 Softplus函数

函数表达式及其导数:
S o f t p l u s ( x ) = f ( x ) = l n ( 1 + e x ) f ′ ( x ) = 1 1 + e − x = s i g m o i d ( x ) Softplus(x)=f(x)=ln(1+e^{x})\\ f'(x)=\frac{1}{1+e^{-x}}=sigmoid(x) Softplus(x)=f(x)=ln(1+ex)f(x)=1+ex1=sigmoid(x)
几何图像:
请添加图片描述

特点:
(1)Softplus函数是Logistic-Sigmoid函数原函数,可以看作是ReLU函数的平滑版本,其中加了1是为了保证非负性。
(2)根据神经科学家的相关研究,Softplus函数和ReLU函数与脑神经元激活频率函数有神似的地方。也就是说,相比于早期的激活函数,Softplus函数和ReLU函数更加接近脑神经元的激活模型,而神经网络正是基于脑神经科学发展而来,这两个激活函数的应用促成了神经网络研究的新浪潮。
 

3.3 Softmax函数

函数表达式:
f ( x i ) = e x i ∑ j = 1 n e x j f(x_{i})=\frac{e^{x_{i}}}{\sum_{j=1}^{n}e^{x_{j}}} f(xi)=j=1nexjexi
特点:
(1)Softmax 是用于多分类问题神经网络输出的激活函数,比较特殊,不能直接显示。在多类分类问题中,超过两个类标签则需要类成员关系。对于长度为 K 的任意实向量,Softmax 可以将其压缩为长度为 K,值在(0,1)范围内,并且向量中元素的总和为 1 的实向量,表示每个类别的预测概率。
(2)在二分类任务时,经常使用sigmoid激活函数。而在处理多分类问题的时候,需要使用softmax函数。
(3)Softmax 与正常的 max 函数不同:max 函数仅输出最大值,但 Softmax 确保较小的值具有较小的概率,并且不会直接丢弃。可以认为它是 argmax 函数的概率版本或「soft」版本。
(4)Softmax 函数的分母结合了原始输出值的所有因子,这意味着 Softmax 函数获得的各种概率彼此相关。输出满足:每一项的区间范围的(0,1),所有项相加的和为1。
 
缺点:
(1)在零点不可微
(2)负输入的梯度为零,这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元


举例:
在这里插入图片描述
在这里插入图片描述


4.非饱和激活函数-以往函数

4.1 阈值函数(阶梯函数)Sgn函数

函数表达式及其导数:
S g n ( x ) = f ( x ) = { 1 , x ≥ 0 0 , x < 0 f ′ ( x ) = 0 , x ≠ 0 Sgn(x)=f(x)=\left\{\begin{matrix}1,x\geq0\\0,x<0\end{matrix}\right.\\ f'(x)=0,x\neq 0 Sgn(x)=f(x)={ 1,x00,x<0f(x)=0,x=0
几何图像:
请添加图片描述

4.2 分段线性函数

函数表达式及其导数:
f ( x ) = { 1 , x ≥ 1 1 2 ( x + 1 ) , − 1 ≤ x ≤ 1 0 , x ≤ − 1 f ′ ( x ) = { 1 2 , − 1 < x < 1 0 , x > 1 , x < − 1 f(x)=\left\{\begin{matrix}1,x\geq1\\\frac{1}{2}(x+1),-1\leq x \leq1\\0,x\leq-1\end{matrix}\right.\\ f'(x)=\left\{\begin{matrix}\frac{1}{2},-1<x<1\\0,x>1,x<-1\end{matrix}\right. f(x)=1,x121(x+1),1x10,x1f(x)={ 21,1<x<10,x>1,x<1
几何图像:
请添加图片描述

特点:
它类似于一个放大系数为 1 的非线性放大器,当工作于线性区时它是一个线性组合器, 放大系数趋于无穷大时变成一个阈值单元。
 

5.非饱和激活函数-其他函数

5.1 Maxout函数

函数表达式:
M a x o u t ( x ) = f i ( x ) = max ⁡ j ∈ [ 1 , k ] z i j = max ⁡ j ∈ [ 1 , k ] ( x T w . . . i j + b i j ) M a x o u t 隐 藏 层 每 个 神 经 元 的 计 算 公 式 如 上 , 其 中 k 为 每 个 神 经 元 输 出 之 后 接 的 虚 拟 隐 藏 层 的 个 数 , 由 人 为 设 定 大 小 其 中 权 重 w 是 一 个 大 小 为 ( d , m , k ) 三 维 矩 阵 , b 是 一 个 大 小 为 ( m , k ) 的 二 维 矩 阵 , 为 可 学 习 参 数 d 代 表 的 是 输 入 节 点 的 个 数 , m 代 表 的 则 是 输 出 层 节 点 的 个 数 Maxout(x)=f_{i}(x)=\displaystyle \max_{j\in [1,k]}z_{ij}=\displaystyle \max_{j\in [1,k]} (x^{T}w..._{ij}+b_{ij})\\ Maxout隐藏层每个神经元的计算公式如上,其中k为每个神经元输出之后接的虚拟隐藏层的个数,由人为设定大小\\ 其中权重w是一个大小为(d,m,k)三维矩阵,b是一个大小为(m,k)的二维矩阵,为可学习参数\\ d代表的是输入节点的个数,m代表的则是输出层节点的个数 Maxout(x)=fi(x)=j[1,k]maxzij=j[1,k]max(xTw...ij+bij)Maxoutkw(d,m,k)b(m,k)dm

当k为1时,网络就类似于普通的MLP网络

传统的MLP计算公式为:z=w*X+b,out=f(z),f就是所谓的激活函数

特点:
(1)可以理解为是神经网络中的一层网络,类似于池化层、卷积层一样,也可以把Maxout函数看成是网络的激活函数层
(2)原来只需要一组输入,现在需要k组输入,故参数个数成k倍增加
(3)maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。最直观的解释就是任意的凸函数都可以由分段线性函数以任意精度拟合,而maxout又是取k个隐隐含层节点的最大值,这些”隐隐含层"节点也是线性的,所以在不同的取值范围下,最大值也可以看做是分段线性的(分段的个数与k值有关)
(4)maxout是一个函数逼近器,对于一个标准的MLP网络来说,如果隐藏层的神经元足够多,那么理论上我们是可以逼近任意的函数的。类似的,对于maxout 网络也是一个函数逼近器。
(5)普通的神经元配合激活函数得到一组输出,经过了maxout将会得到k组输出,然后在k组之中取最大值。可见maxout非线性的拟合能力是更强的,因为参数更多,而且可学习。当k=2时,与relu(z)相当。如果有更多的k,就可以学习更加负责的激活函数,这就是maxout拟合能力更强的原因。事实上maxout可以拟合任意的凸函数。
(6)神经元不会死亡,并不是一个固定的函数方程
(8)是一个可学习的激活函数,因为w参数是学习变化的
(9)是一个分段线性函数,不容易梯度消失
 
缺点:
计算量非常大

定理:对于任意的一个连续分段线性函数g(v),我们可以找到两个凸的分段线性函数h1(v)、h2(v),使得这两个凸函数的差值为g(v)

具体细节:Maxout Networks

5.2 Dropout函数

5.3 Swish函数

函数表达式及其导数:
S w i s h ( x ) = f ( x ) = x ∗ s i g m o i d ( α x ) = x 1 + e − α x 其 中 a 为 超 参 数 或 可 学 习 参 数 f ′ ( x ) = s i g m o i d ( α x ) + α x ∗ s i g m o i d ( α x ) ∗ ( 1 − s i g m o i d ( α x ) ) Swish(x)=f(x)=x*sigmoid(αx)=\frac{x}{1+e^{-αx}}\\ 其中a为超参数或可学习参数\\ f'(x)=sigmoid(αx)+αx*sigmoid(αx)*(1-sigmoid(αx)) Swish(x)=f(x)=xsigmoid(αx)=1+eαxxaf(x)=sigmoid(αx)+αxsigmoid(αx)(1sigmoid(αx))
几何图像:
请添加图片描述
请添加图片描述

特点:

(1)自门控激活函数,设计受到了LSTM和高速网络中gating的sigmoid函数使用的启发。使用相同的gating值来简化gating机制,这称为 self-gating。self-gating的优点在于它只需要简单的标量输入,而普通的gating则需要多个标量输入。这使得诸如Swish之类的self-gated激活函数能够轻松替换以单个标量为输入的激活函数(例如 ReLU),而无需更改隐藏容量或参数数量。
(2)无界性。有助于防止慢速训练期间,梯度逐渐接近 0 并导致饱和

有界激活函数可以具有很强的正则化,并且可以解决较大的负输入问题

(3)导数恒大于零,平滑度在优化和泛化中起了重要作用
(4)从图像上看,swish函数和relu差不多,唯一区别较大的是接近于0的负半轴区域。swish在深层模型上的效果优于Relu
 

(三)对比

典型的激活函数对比:
(1)Sigmoid函数:二分类
(2)Softmax函数:多分类
(3)Tanh函数:函数输出是以0为中心的。当激活函数的输入是0时,输出也是0。
(4)ReLU函数:梯度不饱和,计算速度快。
 


以上未完待更新,仅供个人学习,侵权联系删除,如有错误或不足之处可指出,以便改进。

猜你喜欢

转载自blog.csdn.net/abc31431415926/article/details/127927739