神经网络常用激活函数

神经网络常用激活函数

激活函数:激活函数在神经元中很重要,通常为了增强网络的表示能力和学习能力,激活函数需要具备的性质如下:
\qquad (1)连续可导(但也允许少数点上不可导)的非线性函数,其中,可导的激活函数可以直接利用数值优化的方法来学习网络参数。
\qquad (2)激活函数及其导函数要尽可能的简单,这样有利于提高网络的计算效率。
\qquad (3)激活函数的导函数值域要在一个合适的区间内,不能太大或者太小,否则会影响训练的效率和稳定性。

一、Sigmoid型函数

\qquad 实际上Sigmoid型函数指的是一类形状为 S 形 曲 线 S形曲线 S线的函数,常用的Sigmoid型函数有Logistic函数以及双曲正切Tanh函数。Logistic函数的定义如下:
δ ( x ) = 1 1 + e x p ( − x ) (式1) \delta(x)=\cfrac{1}{1+exp(-x)}\tag{式1} δ(x)=1+exp(x)1(1)
这个Logistic函数可以看作是一个“挤压”函数,很明显它可以将输入的任意实数“挤压”或者“映射”到范围 ( 0 , 1 ) (0,1) (0,1)内。当输入 x x x为零,函数值为 1 2 \cfrac{1}{2} 21;当输入 x → + ∞ x\rightarrow{+\infty} x+,函数值为 1 1 1;当输入 x → − ∞ x\rightarrow{-\infty} x,函数值为 0 0 0
同时,Sigmoid函数的导数为:
δ ′ ( x ) = δ ( x ) ( 1 − δ ( x ) ) (式2) \delta^{'}{(x)}=\delta(x)(1-\delta(x))\tag{式2} δ(x)=δ(x)(1δ(x))(2)
所以,对于函数 δ ( x ) \delta(x) δ(x),当 x → + ∞ x\rightarrow{+\infty} x+时, δ ′ ( x ) → 0 \delta^{'}{(x)}\rightarrow{0} δ(x)0(右饱和),同时,当 x → − ∞ x\rightarrow{-\infty} x时, δ ′ ( x ) → 0 \delta^{'}{(x)}\rightarrow{0} δ(x)0(左饱和),同时满足左右饱和,因此logistic函数为饱和函数。

二、双曲正切函数

\qquad Tanh函数:双曲正切函数其实也是一种SIgmoid型的函数,定义如下:
t a n h ( x ) = e x p ( x ) − e x p ( − x ) e x p ( x ) + e x p ( − x ) (式3) tanh(x)=\cfrac{exp(x)-exp(-x)}{exp(x)+exp{(-x)}} \tag{式3} tanh(x)=exp(x)+exp(x)exp(x)exp(x)(3)
Tanh函数可以看作为放大且经过平移的Logistic函数,值域为 ( − 1 , 1 ) (-1,1) (1,1)。因为 δ ( x ) \delta(x) δ(x)函数通过非线性组合可以得到下式:
t a n h ( x ) = 2 δ ( 2 x ) − 1 (式4) tanh(x)=2\delta{(2x)}-1\tag{式4} tanh(x)=2δ(2x)1(4)
如下如所示:Tanh函数的输出为零中心化的,但是Logistic函数的输出恒大于 0 0 0。带来的问题是:非零中心化的输出会导致当前位置后一层的神经元的输入发生偏置偏移,同时也会造成梯度下降的收敛速度变慢。
在这里插入图片描述

三、Hard-Logistic函数和Hard-Tanh函数

Logistic 函数和Tanh 函数都是Sigmoid 型函数,具有饱和性,但是计算开销较大. 因为这两个函数都是在中间(0 附近)近似线性,两端饱和. 因此,这两个函
数可以通过分段函数来近似.
\qquad (1)由 δ ′ ( x ) = δ ( x ) ( 1 − δ ( x ) ) \delta^{'}{(x)}=\delta(x)(1-\delta(x)) δ(x)=δ(x)(1δ(x)),得到Logistic函数在 0 0 0附近的一阶泰勒展开式为:
g z ( x ) ≈ δ ( 0 ) + δ ′ ( 0 ) ( x − 0 ) (式5) g_{z}(x)\approx\delta(0)+\delta^{'}{(0)}(x-0)\tag{式5} gz(x)δ(0)+δ(0)(x0)(5)
= 0.25 x + 0.5 (式6) =0.25x+0.5\tag{式6} =0.25x+0.5(6)
因此,Logistic函数可以近似为如下的hard-logistic分段函数:
h a r d − L o g i s t i c ( x ) = { 1 g z ( x ) ≥ 1 g z 0 < g z ( x ) < 1 0 g z ( x ) ≤ 0 (式7) hard-Logistic(x)= \begin{cases} 1\qquad{g_{z}(x)}\ge1\\ g_z\qquad{0<g_z(x)<1}\\ 0\qquad{g_{z}(x)}\le0 \end{cases} \tag{式7} hardLogistic(x)=1gz(x)1gz0<gz(x)<10gz(x)0(7)
类似,Tanh函数在 0 0 0附近的一阶泰勒展开式为:
g t ( x ) ≈ t a n h ( 0 ) + t a n h ′ ( 0 ) x (式8) g_t{(x)}\approx{tanh(0)}+tanh^{'}(0)x\tag{式8} gt(x)tanh(0)+tanh(0)x(8)
= x (式9) =x\tag{式9} =x(9)
因此,Tanh函数也可以用分段韩式hard-tanh(x)来表示为:
h a r d − t a n h ( x ) = m a x ( m i n ( g t ( x ) , 1 ) , − 1 ) = m a x ( m i n ( x , 1 ) , − 1 ) (式10) hard-tanh(x)= max(min(g_t(x),1),-1)= max(min(x,1),-1)\tag{式10} hardtanh(x)=max(min(gt(x),1),1)=max(min(x,1),1)(10)
hard-Logistic函数和hard-tanh函数图像表示如下:
在这里插入图片描述

四、ReLU函数

\qquad ReLU函数也叫做Rectifier函数,为目前深度神经网络中经常使用的激活函数,表达式如下:
R e L U ( x ) = { x x ≥ 0 0 x < 0 (式11) ReLU(x)= \begin{cases} x\qquad{x}\ge0\\ 0\qquad{x}<0 \end{cases} \tag{式11} ReLU(x)={xx00x<0(11)
= m a x ( x , 0 ) (式12) =max(x,0)\tag{式12} =max(x,0)(12)
优点如下:使用ReLU的神经元,只需要进行加、乘和比较的操作,计算上更加高效。Sigmoid型函数会导致一个非稀疏的神经网络,但ReLU函数却具有很好的稀疏性,大约 50 % 50\% 50%的神经元会处于激活状态。

在优化方面,相比于Sigmoid型函数的两端饱和性,ReLU函数为左饱和函数,而且在 x > 0 x>0 x>0时候的导数为 1 1 1,好处是在一定程度上缓解了神经网络的梯度消失问题,加速梯度下降的收敛速度

缺点:ReLU函数的输出为非零中心化的,会给后一层的神经网络带来偏置偏移,从而影响梯度下降的效率。而且会发生死亡ReLU问题

死亡ReLU问题

如果参数在一次不恰当的更新之后,第一个隐藏层中的某个ReLU神经元在所有的训练数据上都不能被激活,那么这个神经元自身参数的梯度就永远会是 0 0 0,在以后的训练过程中永远不能被激活,这就是死亡ReLU问题,而且这种现象也会发生在其他的隐藏层。

4.1 带泄露的ReLU

带泄露的ReLU(Leaky ReLU),在输入 x < 0 x<0 x<0时,保持一个很小的梯度 λ \lambda λ,这样的好处是:当神经元非激活时,也能有一个非零的梯度以用来更新参数,从而避免永远不能被激活的为题,代泄露的ReLU定义如下:
L e a k y R e L U ( x ) = { x i f x > 0 r x i f x ≤ 0 (式13) LeakyReLU(x)= \begin{cases} x\qquad{if\quad{x>0}}\\ rx\qquad{if\quad{x\le0}} \end{cases} \tag{式13} LeakyReLU(x)={xifx>0rxifx0(13)
= m a x ( 0 , x ) + r m i n ( 0 , x ) (式14) =max(0,x)+rmin(0,x)\tag{式14} =max(0,x)+rmin(0,x)(14)
在这里, r r r为一个很小的常数,比如说 0.01 0.01 0.01,当 r < 1 r<1 r<1时,带泄露的ReLU也可以写为:
L e a k y R e L U ( x ) = m a x ( x , r x ) (式15) LeakyReLU(x)=max(x,rx)\tag{式15} LeakyReLU(x)=max(x,rx)(15)

4.2 带参数的ReLU

带参数的ReLU(Parametric ReLU,PReLU)实际上式引入了一个可以学习的参数,不同的神经元可以由不同的参数,对于第 i i i个神经元,PReLU定义如下:
P R e L U i ( x ) = { x i f x > 0 r i x i f x ≤ 0 (式16) PReLU_i(x)= \begin{cases} x\qquad{if\quad{x>0}}\\ r_ix\qquad{if{\quad{x\le0}}} \end{cases}\tag{式16} PReLUi(x)={xifx>0rixifx0(16)
= m a x ( 0 , x ) + r i m i n ( 0 , x ) (式17) =max(0,x)+r_imin(0,x)\tag{式17} =max(0,x)+rimin(0,x)(17)
其中, r i r_i ri x ≤ 0 x\le0 x0时候的斜率,PReLU为非饱和函数,如果 r i = 0 r_i=0 ri=0,就退化为ReLU。如果, r i r_i ri是一个很小的常数,则PReLU可以看作是带泄露的ReLU。同时,PReLU可以允许不同神经元具有不同的参数,也可以一组神经元共享一个参数。

4.3 ELU函数

ELU(指数线性单元)是一个近似的零中心化的非线性函数函数,定义如下:
E L U ( x ) = { x i f x > 0 r ( e x p ( x ) − 1 ) i f x ≤ 0 (式18) ELU(x)= \begin{cases} x\qquad{if\quad{x>0}}\\ r(exp(x)-1)\qquad{if\quad{x\le0}} \end{cases}\tag{式18} ELU(x)={xifx>0r(exp(x)1)ifx0(18)
= m a x ( x , 0 ) + m i n ( 0 , r ( e x p ( x ) − 1 ) ) (式19) =max(x,0)+min(0,r(exp(x)-1))\tag{式19} =max(x,0)+min(0,r(exp(x)1))(19)
其中, r ≥ 0 r\ge{0} r0为一个超参数,决定 x ≤ 0 x\le{0} x0时候的饱和曲线,同时调整输出均值在 0 0 0附近。

4.4 Softplus函数

Softplus函数可以看作为Rectifier函数的平滑版本,定义为:
S o f t p l u s ( x ) = l o g ( 1 + e x p ( x ) ) (式20) Softplus(x)=log(1+exp(x))\tag{式20} Softplus(x)=log(1+exp(x))(20)
很巧,SoftPlus函数的倒是正好是Logistic函数,Softplus函数虽然也具有单侧抑制,宽兴奋边界的特性,却没有稀疏激活性。

ReLU函数,LeakeyReLU函数,ELU以及Softplus函数的图像分别如下:
在这里插入图片描述

五、Swish函数

Swish函数作为一种自门控激活函数,定义如下:
s w i s h ( x ) = x δ ( β x ) (式21) swish(x)=x\delta(\beta{x})\tag{式21} swish(x)=xδ(βx)(21)
其中, δ ( ⋅ ) \delta(\cdot) δ()为Logistic函数, β \beta β为可以学习的参数或者一个固定的超参数, δ ( x ) ∈ ( 0 , 1 ) \delta(x)\in(0,1) δ(x)(0,1)可以看作为一种软性的门控机制。当 δ ( β x ) \delta{(\beta{x})} δ(βx)接近 1 1 1,激活函数输出近似为 x x x;当 δ ( β x ) \delta(\beta{x}) δ(βx)接近 0 0 0,激活函数的输出近似为 0 0 0

Swish函数图像如下:
在这里插入图片描述
可见,Swish函数可以看作为线性函数和ReLU函数之间的非线性插值函数,其程度由参数 β \beta β控制。

六、高斯误差线性单元

高斯误差线性单元(GELU)和Swish函数比较类似,同样是一种通过门控机制来调整其输出值的激活函数,定义如下:
G E L U ( x ) = x P ( X ≤ x ) (式22) GELU(x)=xP(X\le{x})\tag{式22} GELU(x)=xP(Xx)(22)
其中, P ( X ≤ x ) P(X\le{x}) P(Xx)是高斯分布 N ( μ , σ 2 ) \mathcal{N}(\mu,\sigma^2) N(μ,σ2)累计分布函数,其中 μ , σ \mu,\sigma μ,σ是超参数,一般设置 μ = 0 , σ = 1 \mu=0,\sigma=1 μ=0,σ=1就可以了。由于高斯分布的累积分布函数为 S 型 S型 S函数,故而可以使用Tanh函数或者Logistic函数来近似,
G E L U ( x ) ≈ 0.5 x ( 1 + t a n h 2 π ( x + 0.044715 x 3 ) ) (式23) GELU(x)\approx0.5x(1+tanh\sqrt{\cfrac{2}{\pi}}(x+0.044715x^3))\tag{式23} GELU(x)0.5x(1+tanhπ2 (x+0.044715x3))(23)
或者是
G E L U ( x ) ≈ x δ ( 1.702 x ) (式24) GELU(x)\approx{x}\delta(1.702x)\tag{式24} GELU(x)xδ(1.702x)(24)
当使用Logistic函数来近似的时候,GELU相当于一种特殊的Swish函数。

七、Maxout单元

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

每一个Maxout单元有 K K K个权重向量 w k ∈ R D \boldsymbol{w}_{k}\in{\mathbb{R}^{D}} wkRD和偏置 b k ( 1 ≤ k ≤ K ) b_k(1\le{k}\le{K}) bk(1kK),对于输入 x \boldsymbol{x} x,可以得到 K K K个净输入 z k , 1 ≤ k ≤ K z_{k},1\le{k}\le{K} zk,1kK.
z k = w k T x + b k (式25) z_{k}=\boldsymbol{w}_{k}^{T}\boldsymbol{x}+b_{k}\tag{式25} zk=wkTx+bk(25)
其中, w k = [ w k , 1 , ⋯   , w k , D ] T \boldsymbol{w}_{k}=[w_{k,1},\cdots,w_{k,D}]^T wk=[wk,1,,wk,D]T为第 k k k个权重向量。Maxout单元的非线性函数定义为:
m a x o u t ( x ) = max ⁡ k ∈ [ 1 , K ] ( z k ) (式26) maxout(\boldsymbol{x})=\max\limits_{k\in[1,K]}(z_{k})\tag{式26} maxout(x)=k[1,K]max(zk)(26)

八、常见激活函数及其导数

下图式常见激活函数及其导数:
在这里插入图片描述
到此,整理结束。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习人工智能,机器学习都离不开数学基础和编程知识。无论你是数据科学的初学者还是已经从事人工智能开发的有经验人员,这门课都适合于你。为什么这么说?首先人工智能和机器学习本质上就是算法,而算法就是数学及统计学以及编程的结合。当前市场上有许多开源的软件包如SKLEARN确实可以帮助没经验的或缺乏数学或算法基础的人实现机器学习模型及预测,但这些工具无法使你真正懂得算法的本质或来源,或者无法使你在不同场合下灵活运用及改进算法。记住,在实际工作中找到适合应用场景的解决方案是最难但是最重要的。但这离不开数学基础和算法理解。比如,线性回归是一类普遍的机器学习算法,所有的机器学习软件都有现成的方法实现模型,但如果在训练数据中加入几条新数据,那么新建立的模型和原来的模型有和联系或不同?再比如,为什么深度神经网络中的Sigmoid函数一般只用到输出层?神经网络的向后传播理论如何与泰勒展开和复合函数的偏导数联系在一起?人工智能中推荐系统和文字向量如何与矩阵的奇异分解以及特征向量联系?模型中对标签进行数据变换如何影响预测值?所有这些问题的答案,你都可以从本课中找到线索。本课系统地讲述了有关人工智能,机器学习背后的数学知识。特别指出,微积分和代数知识是本课的核心。统计学基础被安排在另外的课程中。除此之外,我在每一章节或主要知识点后都安排了各类程序以解释和回顾所学到的东西。最后要提到的是,这不是一门工程项目实践课。但我会另外专门安排有关人工智能,机器学习的实践课程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值