Sigmoid
torch.nn.Sigmoid


優(yōu)點(diǎn):
- 用于二元分類的激活函數(shù)。
缺點(diǎn):
- 梯度消失:當(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)練。
- 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)致有一種捆綁效果,使得收斂緩慢。
- 冪運(yùn)算相對(duì)耗時(shí)。
Tanh
torch.nn.Tanh


優(yōu)點(diǎn):
-
Sigmoid的變種,改善的是tanh函數(shù)將輸出值映射到了-1到1之間,因此它是0均值的了。
缺點(diǎn):
- 同樣存在梯度消失和冪運(yùn)算的問(wèn)題。
Softsign
torch.nn.Softsign


優(yōu)點(diǎn):
-
Tanh的變種,解決了 冪運(yùn)算問(wèn)題。
缺點(diǎn):
- 還存在梯度消失問(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):
- 收斂速度比 sigmoid 和 tanh 快;(梯度不會(huì)飽和,解決了梯度消失問(wèn)題)
- 計(jì)算復(fù)雜度低,不需要進(jìn)行指數(shù)運(yùn)算
缺點(diǎn):
- 輸出不是0均值的;
- 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的算法。
- 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):
-
Relu變種,處理了負(fù)值的情況,并解決Relu神經(jīng)元壞死。
缺點(diǎn):
- 不會(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):
-
ReLU變種,解決Relu神經(jīng)元壞死,均值為0的輸出、而且處處一階可導(dǎo)
缺點(diǎn):
- 冪運(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變種,SoftPlus是ReLU函數(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