激活函数总结

参考 Activation Functions Explained - GELU, SELU, ELU, ReLU and more

1.sigmoid

s i g m o i d sigmoid sigmoid 是一个 l o g i s t i c logistic logistic 非线性函数,即不管输入是什么,得到的输出都在区间 ( 0 , 1 ) (0,1) (0,1)
s i g m o i d ( x ) = 1 1 + e − x sigmoid(x)=\frac{1}{1+e^{-x}} sigmoid(x)=1+ex1

假设前向传播时为:
z ( L ) = w ( L ) × a + b a ( L ) = σ ( z ( L ) ) C = ( a ( L ) − y ) 2 z^{(L)}=w^{(L)}\times a +b\\ a^{(L)}=\sigma(z^{(L)})\\ C=(a^{(L)}-y)^2 z(L)=w(L)×a+ba(L)=σ(z(L))C=(a(L)y)2
那么反向传播的梯度将是:
∂ C ∂ w L = ∂ C ∂ a L ∂ a L ∂ z L ∂ z L ∂ w L \frac{\partial C}{\partial w^L}=\frac{\partial C}{\partial a^L}\frac{\partial a^L}{\partial z^L}\frac{\partial z^L}{\partial w^L} wLC=aLCzLaLwLzL
其中:
∂ a L ∂ z L = σ ′ ( w × a L − 1 + b ) σ ′ ( x ) = σ ( x ) ( 1 − σ ′ ( x ) ) \frac{\partial a^L}{\partial z^L}=\sigma'(w\times a^{L-1}+b)\\ \sigma'(x)=\sigma(x)(1-\sigma'(x)) zLaL=σ(w×aL1+b)σ(x)=σ(x)(1σ(x))
σ ′ ( x ) \sigma'(x) σ(x) 的值在 [ 0 , 0.25 ] [0,0.25] [0,0.25],而多个小于 0 0 0 的数连乘将会导致梯度消失,每个权重更新得都会很慢,有时导致训练不会有任何进展

假设单个神经元串成一条线,最后产生输出,当 b 1 b_1 b1发生变化时:
a 1 = σ ( z 1 ) = σ ( w 1 a 0 + b 1 ) ∂ a 1 ∂ b 1 = ∂ σ ( z 1 ) ∂ b 1 Δ a 1 ≈ ∂ σ ( w 1 a 0 + b 1 ) ∂ b 1 Δ b 1 = σ ′ ( z 1 ) Δ b 1 z 2 = w 2 a 1 + b 2 Δ z 2 ≈ ∂ z 2 ∂ a 1 Δ a 1 = w 2 Δ a 1 = w 2 σ ′ ( z 1 ) Δ b 1 . . . C = w 2 σ ′ ( z 1 ) w 3 σ ′ ( z 2 ) w 3 σ ′ ( z 4 ) . . . ∂ C ∂ a Δ b 1 ∂ C ∂ b 1 = w 2 σ ′ ( z 1 ) w 3 σ ′ ( z 2 ) w 3 σ ′ ( z 4 ) . . . ∂ C ∂ a L a_1=\sigma (z_1)=\sigma (w_1a_0+b_1)\\ \frac{\partial a_1}{\partial b_1}=\frac{\partial \sigma (z_1)}{\partial b_1}\\ \Delta a_1\approx \frac{\partial \sigma (w_1a_0+b_1)}{\partial b_1}\Delta b_1=\sigma'(z_1)\Delta b_1\\ z_2=w_2a_1+b_2\\ \Delta z_2\approx \frac{\partial z_2}{\partial a_1}\Delta a_1=w_2\Delta a_1=w_2\sigma'(z_1)\Delta b_1\\ ...\\ C=w_2\sigma'(z_1)w_3\sigma'(z_2)w_3\sigma'(z_4)...\frac{\partial C}{\partial a}\Delta b_1\\ \frac{\partial C}{\partial b_1}=w_2\sigma'(z_1)w_3\sigma'(z_2)w_3\sigma'(z_4)...\frac{\partial C}{\partial a_L} a1=σ(z1)=σ(w1a0+b1)b1a1=b1σ(z1)Δa1b1σ(w1a0+b1)Δb1=σ(z1)Δb1z2=w2a1+b2Δz2a1z2Δa1=w2Δa1=w2σ(z1)Δb1...C=w2σ(z1)w3σ(z2)w3σ(z4)...aCΔb1b1C=w2σ(z1)w3σ(z2)w3σ(z4)...aLC
w 1 , w 2 , . . . w L w_1,w_2,...w_L w1,w2,...wL比较大的时候,连乘将导致梯度爆炸,网络将收敛不到合适的值,有时甚至超出计算机数值表示范围产生 i n f inf inf或者 n a n nan nan,同时使学习率的调整十分敏感,有一些方法可以缓解,比如梯度裁剪等

2.relu

r e l u ( x ) = m a x ( x , 0 ) relu(x)=max(x,0) relu(x)=max(x,0)

梯度要么是 0 0 0,要么是 1 1 1,如果某个梯度为 0 0 0
∂ C ∂ b 1 = w 2 σ ′ ( z 1 ) w 3 σ ′ ( z 2 ) w 3 σ ′ ( z 4 ) . . . ∂ C ∂ a L \frac{\partial C}{\partial b_1}=w_2\sigma'(z_1)w_3\sigma'(z_2)w_3\sigma'(z_4)...\frac{\partial C}{\partial a_L} b1C=w2σ(z1)w3σ(z2)w3σ(z4)...aLC
整个梯度将会是 0 0 0,此时 b 1 b_1 b1 将不会更新,称为 r e l u relu relu 死亡,此时梯度将会比较稀疏,空间和时间方面将更有效率,因此使用 r e l u relu relu 作为激活函数时:

  • 能够避免梯度消失(最后梯度不是 0 0 0 就是 1 1 1,不会得到接近 0 0 0 的非 0 0 0 数),但不能避免梯度爆炸
  • 引入了稀疏性

3.elu

e l u elu elu 修补了 r e l u relu relu 的一些问题,而且保留了一些它好的性质:
e l u ( x ) = { x if x>0 α ( e x − 1 ) if x<0 elu(x)=\begin{cases} x &\text{if\ x>0}\\ \alpha(e^x-1)&\text{if\ x<0} \end{cases} elu(x)={xα(ex1)if x>0if x<0
大于 0 0 0 的部分和 r e l u relu relu 一致,小于 0 0 0 的部分改动了,保留了避免梯度消失的性质:
e l u ′ ( x ) = { 1 if x>0 e l u ( x ) + α if x ≤  0   =   { 1 if x>0 α e x if x ≤  0 elu'(x)=\begin{cases} 1 &\text{if\ x>0}\\ elu(x)+\alpha&\text{if\ x${\le}$ 0} \end{cases}\ =\ \begin{cases} 1 &\text{if\ x>0}\\ \alpha e^x&\text{if\ x${\le}$ 0} \end{cases} elu(x)={1elu(x)+αif x>0if x 0 = {1αexif x>0if x 0
使用 e l u elu elu 作为激活函数:

4.leaky relu

l e a k y   r e l u leaky\ relu leaky relu 相较 e l u elu elu 有一些缺陷,较 r e l u relu relu 有一些优势:
l r e l u ( x ) = { x if x>0 α x if  x ≤ 0 l r e l u ′ ( x ) = { 1 if x>0 α if  x ≤ 0 lrelu(x)=\begin{cases} x &\text{if\ x>0}\\ \alpha x&\text{if\ $x\le0$} \end{cases}\\ lrelu'(x)=\begin{cases} 1 &\text{if\ x>0}\\ \alpha&\text{if\ $x\le0$} \end{cases} lrelu(x)={xαxif x>0if x0lrelu(x)={1αif x>0if x0
使用 l e a k y   r e l u leaky\ relu leaky relu 作为激活函数:

  • 避免了死亡 r e l u relu relu 问题,因为引入了一个小的梯度 α \alpha α 而不是截断为 0 0 0
  • 相较 e l u elu elu 计算更快,但更加“线性”,而 e l u elu elu 由于有指数部分不那么"线性"
  • 不能避免梯度爆炸,且也引入了参数 α \alpha α

5.数值稳定

为了让梯度在合理范围内可以采取一些方法:

leakyrelu激活函数是一种常用的激活函数之一,它是ReLU函数的一种变体。它的图像可以描述如下:在输入小于0的区间,leakyrelu函数的输出是一个小的线性系数乘以输入值;而在输入大于等于0的区间,leakyrelu函数的输出与输入值相等。这个小的线性系数通常取一个较小的正数,比如0.01。这样设计的目的是为了在输入小于0的情况下,避免ReLU函数的神经元“死亡”,使得梯度能够在这个区间内有一个非零的值,从而提高模型的收敛速度和性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [深度学习激活函数总结(sigmoid,tanh,ReLU,Leaky ReLU,EReLU,PReLU,Softmax,Swish,Maxout,...](https://blog.csdn.net/winter2121/article/details/122326697)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [机器学习中的数学——激活函数(四):Leaky ReLU函数](https://blog.csdn.net/hy592070616/article/details/120617996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_森罗万象

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值