PyTorch 激活函數(shù)圖形匯總

Sigmoid

torch.nn.Sigmoid

公式

圖形

優(yōu)點(diǎn):

  1. 用于二元分類的激活函數(shù)。

缺點(diǎn):

  1. 梯度消失:當(dāng)輸入 x>5 或 x < -5 時(shí),變化太緩慢,導(dǎo)數(shù)接近0,根據(jù)后向傳遞的數(shù)學(xué)依據(jù)是微積分求導(dǎo)的鏈?zhǔn)椒▌t,當(dāng)前導(dǎo)數(shù)需要之前各層導(dǎo)數(shù)的乘積,幾個(gè)比較小的數(shù)相乘,導(dǎo)數(shù)結(jié)果很接近0,從而無(wú)法完成深層網(wǎng)絡(luò)的訓(xùn)練。
  2. Sigmoid的輸出不是0均值的:這會(huì)導(dǎo)致后層的神經(jīng)元的輸入是非0均值的信號(hào),這會(huì)對(duì)梯度產(chǎn)生影響。以 f=sigmoid(wx+b)為例, 假設(shè)輸入均為正數(shù)(或負(fù)數(shù)),那么對(duì)w的導(dǎo)數(shù)總是正數(shù)(或負(fù)數(shù)),這樣在反向傳播過(guò)程中要么都往正方向更新,要么都往負(fù)方向更新,導(dǎo)致有一種捆綁效果,使得收斂緩慢。
  3. 冪運(yùn)算相對(duì)耗時(shí)。

Tanh

torch.nn.Tanh

公式

圖形

優(yōu)點(diǎn):

  1. Sigmoid的變種,改善的是tanh函數(shù)將輸出值映射到了-1到1之間,因此它是0均值的了。

缺點(diǎn):

  1. 同樣存在梯度消失和冪運(yùn)算的問(wèn)題。

Softsign

torch.nn.Softsign

公式

圖片

優(yōu)點(diǎn):

  1. Tanh的變種,解決了 冪運(yùn)算問(wèn)題。

缺點(diǎn):

  1. 還存在梯度消失問(wèn)題,但梯度消失的區(qū)間變寬了,適當(dāng)調(diào)整輸入數(shù)據(jù)區(qū)間,還是可以獲得可觀的梯度。

ReLU

torch.nn.ReLU(inplace=False)
ReLU(x)=max(0,x)

圖片

優(yōu)點(diǎn):

  1. 收斂速度比 sigmoid 和 tanh 快;(梯度不會(huì)飽和,解決了梯度消失問(wèn)題)
  2. 計(jì)算復(fù)雜度低,不需要進(jìn)行指數(shù)運(yùn)算

缺點(diǎn):

  1. 輸出不是0均值的;
  2. Dead ReLU Problem(神經(jīng)元壞死現(xiàn)象):某些神經(jīng)元可能永遠(yuǎn)不會(huì)被激活,導(dǎo)致相應(yīng)參數(shù)不會(huì)被更新(在負(fù)數(shù)部分,梯度為0)。產(chǎn)生這種現(xiàn)象的兩個(gè)原因:參數(shù)初始化問(wèn)題;learning rate太高導(dǎo)致在訓(xùn)練過(guò)程中參數(shù)更新太大。解決辦法:采用Xavier初始化方法;以及避免將learning rate設(shè)置太大或使用adagrad等自動(dòng)調(diào)節(jié)learning rate的算法。
  3. ReLu不會(huì)對(duì)數(shù)據(jù)做幅度壓縮,所以數(shù)據(jù)的幅度會(huì)隨著模型層數(shù)的增加不斷擴(kuò)張。

LeakyReLU

torch.nn.LeakyReLU(negative_slope=0.01, inplace=False)

公式

negative_slope 調(diào)整 x<0 部分的斜率

negative_slope=0.01(默認(rèn))


圖片

negative_slope=2.7


圖片

優(yōu)點(diǎn):

  1. Relu變種,處理了負(fù)值的情況,并解決Relu神經(jīng)元壞死。

缺點(diǎn):

  1. 不會(huì)對(duì)數(shù)據(jù)做幅度壓縮

PReLU

torch.nn.PReLU(num_parameters=1, init=0.25)

公式

其中a 是一個(gè)可學(xué)習(xí)的參數(shù),當(dāng)不帶參數(shù)調(diào)用時(shí),即nn.PReLU(),在所有的輸入通道上使用同一個(gè)a,當(dāng)帶參數(shù)調(diào)用時(shí),即nn.PReLU(nChannels),在每一個(gè)通道上學(xué)習(xí)一個(gè)單獨(dú)的a。
注意:當(dāng)為了獲得好的performance學(xué)習(xí)一個(gè)a時(shí),不要使用weight decay。
num_parameters:要學(xué)習(xí)的a的個(gè)數(shù),默認(rèn)1
init:a的初始值,默認(rèn)0.25
圖形和LeakyReLU 類似
init=0.25(默認(rèn))
圖片

init=2
圖片

ELU

torch.nn.ELU(alpha=1.0, inplace=False)
ELU(x)=max(0,x)+min(0,α?(exp(x)?1))

alpha 調(diào)整 x<0 的部分

alpha=1(默認(rèn))


圖片

alpha=3


圖片

優(yōu)點(diǎn):

  1. ReLU變種,解決Relu神經(jīng)元壞死,均值為0的輸出、而且處處一階可導(dǎo)

缺點(diǎn):

  1. 冪運(yùn)算問(wèn)題消耗比ReLU

CELU

torch.nn.CELU(alpha=1.0, inplace=False)
CELU(x)=max(0,x)+min(0,α?(exp(x/α)?1))

ELU變種,相對(duì)于ELU轉(zhuǎn)折處更平滑

alpha=1 時(shí)和ELUalpha=1 一致
alpha=3

圖片

SELU

torch.nn.SELU(inplace=False)
SELU(x)=scale?(max(0,x)+min(0,α?(exp(x)?1)))
α=1.6732632423543772848170429916717
scale=1.0507009873554804934193349852946

ELU變種

圖片

GELU

torch.nn.GELU
GELU(x)=x?Φ(x)
Φ(x)是高斯分布的累積分布函數(shù)

ELU變種,輸出不是0均值的

圖片

Softplus

torch.nn.Softplus(beta=1, threshold=20)

公式

ReLU變種,SoftPlusReLU函數(shù)的平滑近似

beta=1, threshold=20(默認(rèn))


圖片

beta=.5, threshold=20


圖片

ReLU6

torch.nn.ReLU6(inplace=False)
ReLU6(x)=min(max(0,x),6)

ReLU變種,和ReLU相比在x==6的位置有轉(zhuǎn)折

圖片

RReLU

torch.nn.RReLU(lower=0.125, upper=0.3333333333333333, inplace=False)

公式

ReLU變種,lower,upper 分別是2個(gè)斜率 對(duì)應(yīng) x<0陰影的兩個(gè)斜邊,也就是負(fù)值的斜率在訓(xùn)練中是隨機(jī)的,這個(gè)值在測(cè)試環(huán)節(jié)就會(huì)固定下來(lái)

lower,upper默認(rèn)


圖片

lower=0.3, upper=3


圖片

Threshold

torch.nn.Threshold(threshold, value, inplace=False)

ReLU變種,通過(guò)參數(shù)調(diào)整處理了負(fù)值的情況

圖片

threshold=0, value=0 和 relu一致

圖片

threshold=-2, value=-2


圖片

threshold=0, value=-2,threshold != value 時(shí)會(huì)出現(xiàn)有間斷


圖片

Hardshrink

torch.nnHardshrink(lambd=0.5)

圖片

lambd 調(diào)整中間=0 的長(zhǎng)度

lambd=0.5(默認(rèn))


圖片

lambd=2


圖片

Softshrink

torch.nn.Softshrink(lambd=0.5)

圖片

相對(duì)于Hardshrink沒(méi)有跳躍

lambd=0.5(默認(rèn))


圖片

lambd=2


圖片

Tanhshrink

torch.nn.Tanhshrink
Tanhshrink(x)=x?Tanh(x)

Softshrink轉(zhuǎn)折處有弧度

圖片

Hardtanh

torch.nn.Hardtanh(min_val=-1.0, max_val=1.0, inplace=False)

圖片

min_val=-1.0, max_val=1.0 調(diào)整中間 y=x

min_val=-1.0, max_val=1.0(默認(rèn))


圖片

min_val=-3.0, max_val=3.0


圖片

LogSigmoid

torch.nn.LogSigmoid()

圖片

圖片

Softmin

圖片

對(duì)n維輸入張量運(yùn)用Softmin函數(shù),將張量每個(gè)的元素縮放到(0,1)區(qū)間且最后一維和為1

圖片

Softmax

圖片

對(duì)n維輸入張量運(yùn)用Softmax函數(shù),將張量每個(gè)的元素縮放到(0,1)區(qū)間且最后一維和為1

圖片

Softmax2d

運(yùn)用到輸入 4D 的 tensor, 將張量每行的元素縮放到(0,1)區(qū)間

LogSoftmax

圖片

對(duì) Softmax 求 log

圖片

參考:

Non-linear activations (weighted sum, nonlinearity)
Pytorch激活函數(shù)及優(yōu)缺點(diǎn)比較
http://www.itdecent.cn/p/68bd249327ce
激活函數(shù)ReLU、Leaky ReLU、PReLU和RReLU

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容