一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

神經(jīng)網(wǎng)絡(luò)中常見的激活函數(shù)

 DuerOS布道師 2022-09-25 發(fā)布于北京

深度學(xué)習(xí)中已經(jīng)成為了人工智能領(lǐng)域的必備工具,源于人工神經(jīng)網(wǎng)絡(luò)的研究,含多個(gè)隱藏層的多層感知器就是一種深度學(xué)習(xí)結(jié)構(gòu)。尋找隱藏層的權(quán)重參數(shù)和偏置的過程,就是常說的“學(xué)習(xí)”過程,其遵循的基本原則就是使得網(wǎng)絡(luò)最終的輸出誤差最小化。在神經(jīng)?絡(luò)中,激活函數(shù)是必須選擇的眾多參數(shù)之?,從而使神經(jīng)?絡(luò)獲得最優(yōu)的結(jié)果和性能。

經(jīng)常用到的激活函數(shù)有哪些呢?如何進(jìn)行選擇呢?

關(guān)于激活函數(shù)

激活函數(shù)(Activation Function),就是在人工神經(jīng)網(wǎng)絡(luò)的神經(jīng)元上運(yùn)行的函數(shù),負(fù)責(zé)將神經(jīng)元的輸入映射到輸出端,激活函數(shù)將神經(jīng)網(wǎng)絡(luò)中將輸入信號的總和轉(zhuǎn)換為輸出信號。激活函數(shù)大多是非線性函數(shù),才能將多層感知機(jī)的輸出轉(zhuǎn)換為非線性,使得神經(jīng)網(wǎng)絡(luò)可以任意逼近任何非線性函數(shù),進(jìn)而可以應(yīng)用到眾多的非線性模型中。

也就是說,非線性激活函數(shù)可以創(chuàng)建輸入與輸出鍵的復(fù)雜映射關(guān)系,神經(jīng)網(wǎng)絡(luò)也能通過“學(xué)習(xí)”來更新參數(shù)。并且,因?yàn)榉蔷€性函數(shù)的導(dǎo)數(shù)與輸入有關(guān),從而可以通過向后傳播算法計(jì)算梯度,也可以構(gòu)建多層神經(jīng)網(wǎng)絡(luò),以處理復(fù)雜問題。

常見的激活函數(shù)有用于淺層網(wǎng)絡(luò)的sigmoid 系列,用于深層網(wǎng)絡(luò)的ReLU系列,用于遞歸網(wǎng)絡(luò)的tanh系列以及Softmax 系列等等。

sigmoid 系列

sigmoid函數(shù)也叫Logistic函數(shù),用于隱層神經(jīng)元輸出,能將( ? ∞ , + ∞ )的數(shù)值映射到(0,1)的區(qū)間,當(dāng)以概率形式表示預(yù)測值時(shí),一般使用這個(gè)函數(shù)。sigmod激活函數(shù)的Python 代碼如下:

import numpy as np

def sigmoid(x):
s = 1 / (1 + np.exp(-x))
return s

函數(shù)的圖像如下所示:

Sigmoid函數(shù)的優(yōu)點(diǎn)在于它可導(dǎo),并且值域在0到1之間,使得神經(jīng)元的輸出標(biāo)準(zhǔn)化,是神經(jīng)網(wǎng)絡(luò)最早采用的激活函數(shù)。它的不足也很明顯,在增加或減少到一定程度時(shí),函數(shù)值變化很小,這就是所謂的“梯度消失”,致使網(wǎng)絡(luò)的收斂速度變慢,進(jìn)而耗費(fèi)計(jì)算資源。另外,輸出值不是以0為中心,而是0.5。

一般的Sigmoid 函數(shù)應(yīng)用于淺層網(wǎng)絡(luò)。

HardSigmoid

在Sigmoid的基礎(chǔ)上,又有HardSigmoid,因?yàn)楫?dāng)輸入值趨向無窮大的時(shí)候,輸出值趨向于1;當(dāng)輸入值趨向無窮小的時(shí)候,輸出值趨向于0。所以,顧名思義,HardSigmoid是在Sigmoid的基礎(chǔ)上,當(dāng)輸入值超過某個(gè)范圍強(qiáng)行置1和0。HardSigmoid 的python 代碼如下:

def Hard_sigmoid(x):
y = []
for i in x:
if i < -2.5:
y_i = 0
elif i >= -2.5 and i <= 2.5:
y_i = 0.2 * i + 0.5
else:
y_i = 1
y.append(y_i)
return y

HardSigmoid 激活函數(shù)的函數(shù)圖像如下:

Swish

swish的表達(dá)式為:f ( x ) = x ? s i g m o i d ( b x ),python代碼如下:

def Swish(x):
return x / (1 + np.exp(-b*x))

其中b是可學(xué)參數(shù), Swish 具備無上界有下界、平滑、非單調(diào)的特性。

Swish 在深層模型上的效果優(yōu)于 ReLU。例如,僅僅使用 Swish 單元替換 ReLU 就能把 Mobile NASNetA 在 ImageNet 上的分類準(zhǔn)確率提高 0.9%。

maxout

Maxout可以看做是在深度學(xué)習(xí)網(wǎng)絡(luò)中加入一層激活函數(shù)層,包含一個(gè)參數(shù)k。這一層相比ReLU,sigmoid等,其特殊之處在于增加了k個(gè)神經(jīng)元,然后輸出激活值最大的值。

maxout是一個(gè)函數(shù)逼近器,對于一個(gè)標(biāo)準(zhǔn)的MLP網(wǎng)絡(luò)來說,如果隱藏層的神經(jīng)元足夠多,那么理論上是可以逼近任意的函數(shù)的。Maxout的擬合能力非常強(qiáng),可以擬合任意的凸函數(shù),具有ReLU的所有優(yōu)點(diǎn),線性、不飽和性,同時(shí)沒有ReLU的一些缺點(diǎn),如神經(jīng)元的死亡。

Relu系列

Relu (Rectified Linear Unit)稱為“線性整流函數(shù)”或者“修正線性單元”,通常就直接稱為 ReLU 函數(shù),是解決梯度消失問題的方法。將 ReLU 函數(shù)引入神經(jīng)網(wǎng)絡(luò)時(shí),也引入了很大的稀疏性。然而,由于稀疏性,時(shí)間和空間復(fù)雜度更低,不涉及成本更高的指數(shù)運(yùn)算,允許網(wǎng)絡(luò)快速收斂。

盡管Relu看起來像線性函數(shù),但它具有導(dǎo)數(shù)函數(shù)并允許反向傳播,python 代碼如下:

import numpy as np

def relu(x):
s = np.where(x < 0, 0, x)
return s

ReLU引入了神經(jīng)元死亡問題,當(dāng)輸入接近零或?yàn)樨?fù)時(shí),函數(shù)的梯度變?yōu)榱?,網(wǎng)絡(luò)將無法執(zhí)行反向傳播,也無法學(xué)習(xí),也就是說,網(wǎng)絡(luò)的大部分分量都永遠(yuǎn)不會(huì)更新,另外,它不能避免梯度爆炸問題。

ReLU是現(xiàn)在DNN模型中比較常用的激活函數(shù)。

ELU

指數(shù)線性單元激活函數(shù)ELU解決了 ReLU 的一些問題,同時(shí)也保留了一些好的方面。這種激活函數(shù)要選取一個(gè) α 值;常見的取值是在 0.1 到 0.3 之間。但α =0.3時(shí)的函數(shù)圖像如下:

ELU能避免神經(jīng)元死亡問題,能得到負(fù)值輸出,這能幫助網(wǎng)絡(luò)向正確的方向推動(dòng)權(quán)重和偏置變化,在計(jì)算梯度時(shí)能得到激活,而不是讓它們等于 0。ELU 的python 代碼如下:

import numpy as np

def elu(x):
s = np.where(x >= 0, x, α(np.exp(x)-1)
return s

但是,由于包含了指數(shù)運(yùn)算,計(jì)算時(shí)間更長,同樣無法避免梯度爆炸問題,另外,神經(jīng)網(wǎng)絡(luò)不學(xué)習(xí) α 值。

Leaky ReLU

滲漏型整流線性單元激活函數(shù)也有一個(gè) α 值,通常取值在 0.1 到 0.3 之間。Leaky ReLU 激活函數(shù)很常用,相比于 ELU 也有一些缺陷,但比 ReLU 具有一些優(yōu)勢。

LeakyReLU的負(fù)值斜率很小,而不是平坦的斜率。斜率系數(shù)需要在訓(xùn)練前確定,即在訓(xùn)練過程中不學(xué)習(xí)。這種類型的激活函數(shù)在可能遇到稀疏梯度的任務(wù)中很流行,例如訓(xùn)練生成式對抗網(wǎng)絡(luò)。

import numpy as np

def lrelu(x):
s = np.where(x >= 0, x, αx)
return s

類似 ELU,Leaky ReLU 也能避免死亡 ReLU 問題,因?yàn)槠湓谟?jì)算導(dǎo)數(shù)時(shí)允許較小的梯度,由于不包含指數(shù)運(yùn)算,所以計(jì)算速度比 ELU 快。

擴(kuò)展型指數(shù)線性單元激活函數(shù)(SELU)

SELU 激活能夠?qū)ι窠?jīng)網(wǎng)絡(luò)進(jìn)行自歸一化,歸一化就是首先減去均值,然后除以標(biāo)準(zhǔn)差。因此,經(jīng)過歸一化之后,網(wǎng)絡(luò)的組件(權(quán)重、偏置和激活)的均值為 0,標(biāo)準(zhǔn)差為 1,而這正是 SELU 激活函數(shù)的輸出值。通過歸一化,網(wǎng)絡(luò)參數(shù)會(huì)被初始化一個(gè)正態(tài)分布。

通過歸一化,網(wǎng)絡(luò)參數(shù)會(huì)被初始化一個(gè)正態(tài)分布。

def SeLU(x,alpha=1.6732632423543772848170429916717,scale=1.0507009873554804934193349852946):
y = []
for i in x:
if i >= 0:
y_i = scale * i
else:
y_i = scale * alpha * (np.exp(i) - 1)
y.append(y_i)
return y

SELU內(nèi)部歸一化的速度比外部歸一化快,這意味著網(wǎng)絡(luò)能更快收斂,而且避免了出現(xiàn)梯度消失或爆炸問題,在CNN或RNN 網(wǎng)絡(luò)架構(gòu)中有所應(yīng)用。

高斯誤差線性單元激活函數(shù)GELU

GELU是某些函數(shù)(比如雙曲正切函數(shù) tanh)與近似數(shù)值的組合,

當(dāng) x 大于 0 時(shí),輸出為 x;但 x=0 到 x=1 的區(qū)間除外,這時(shí)曲線更偏向于 y 軸。

import numpy as np
def tanh(x):
s1 = np.exp(x) - np.exp(-x)
s2 = np.exp(x) + np.exp(-x)
s = s1 / s2
return s
gelu = lambda x:0.5 * x * (1 + tanh(np.sqrt(2 / np.pi) * (x + 0.044715 * np.power(x, 3))))

GELU 在NLP 領(lǐng)域有較好表現(xiàn),尤其在 Transformer 模型中表現(xiàn)最好,能避免梯度消失問題。

tanh系列

tanh

Tanh函數(shù),即雙曲正切函數(shù),比sigmoid函數(shù)更受歡迎,能為多層神經(jīng)網(wǎng)絡(luò)提供更好的性能。

它的輸出更多地以零為中心,這有助于加速收斂,尤其是在訓(xùn)練初期。雙曲線正切函數(shù)的python代碼如下:

import numpy as np

def tanh(x):
s1 = np.exp(x) - np.exp(-x)
s2 = np.exp(x) + np.exp(-x)
s = s1 / s2
return s

Tanh函數(shù)的最大優(yōu)點(diǎn)是輸出值以 0為中心,即關(guān)于坐標(biāo)原點(diǎn)對稱,分屬為正數(shù)和負(fù)數(shù)兩大類別,函數(shù)及其導(dǎo)數(shù)都是單調(diào)的,收斂速度比sigmoid快,從而可以減少迭代次數(shù)。這使得它具有了Sigmoid函數(shù)的優(yōu)勢,又克服了某些不足。但是,“梯度消失”的問題都還存在,進(jìn)而導(dǎo)致收斂速度變慢。

Tanh 一般用于遞歸神經(jīng)網(wǎng)絡(luò)。

HardTanh

Hardtanh激活函數(shù)是Tanh的線性分段近似。相較而言,它更易計(jì)算,這使得學(xué)習(xí)計(jì)算的速度更快,盡管首次派生值為零可能導(dǎo)致靜默神經(jīng)元/過慢的學(xué)習(xí)速率。

TanhShrink

基于Tanh之上,計(jì)算輸入輸出的差值,即為TanhShrink,函數(shù)圖像如下。

在當(dāng)輸入在0附近時(shí),梯度近乎為0,而在輸入極大或極小時(shí),梯度反而為正常梯度。

softmax 系列

Softmax函數(shù)比較適合作為多分類模型的激活函數(shù),一般會(huì)與交叉熵?fù)p失函數(shù)相配。

通常,Softmax函數(shù)只應(yīng)用于輸出層,把一堆實(shí)數(shù)的值映射到0-1區(qū)間,并且使他們的和為1,可以理解為對應(yīng)每個(gè)類別對應(yīng)的預(yù)測概率。python代碼如下:

def softmax(x):
x_exp = np.exp(x)
x_sum = np.sum(x_exp, axis=1, keepdims=True)
s = x_exp / x_sum
return s

如果某一個(gè)zj大過其他z,那這個(gè)映射的分量就逼近于1,其他就逼近于0。

Softmax函數(shù)用于將輸入進(jìn)行歸一化到(0,1),并且其和為1,普遍應(yīng)用于分類模型(互斥)的預(yù)測概率值。事實(shí)上,但凡涉及到概率的地方基本都會(huì)用到softmax,典型的就比如attention layer當(dāng)中,都會(huì)使用softmax來計(jì)算attention值。

LogSoftMax

 LogSoftmax是基于Softmax函數(shù)之上,計(jì)算其對應(yīng)的對數(shù)值,范圍在(-∞,0)用來計(jì)算交叉熵?fù)p失函數(shù)(根據(jù)groundtruth的標(biāo)簽取出對應(yīng)的值即可)。LogSoftMax 加快了運(yùn)算速度,提高數(shù)據(jù)穩(wěn)性。

Softmin

Softmin是在Softmax的基礎(chǔ)上,做相反變換。Softmin是在Softmax的基礎(chǔ)上,做相反變換。  跟softmax類似,輸入n維t數(shù)據(jù),對它們進(jìn)行重新縮放使得n維輸出的每個(gè)元素都在[0, 1]區(qū)間內(nèi),且和為1。不同的是,softmax是單調(diào)遞增而softmin是單調(diào)遞減,意味著softmax操作會(huì)使得最大的值在激活操作后依然保持最大,而softmin會(huì)使得最小的數(shù)在經(jīng)過了softmin后變成最大值。

激活函數(shù)的選擇

以終為始,激活函數(shù)的選擇也是為最終的任務(wù)目標(biāo)服務(wù)的。不存在普遍適用各種神經(jīng)網(wǎng)絡(luò)的萬能的激活函數(shù),在選擇激活函數(shù)的時(shí)候,要考慮不同的條件限制,例如,如果函數(shù)可導(dǎo),求導(dǎo)數(shù)的計(jì)算難度如何?函數(shù)光滑程度如何?輸出是否保持標(biāo)準(zhǔn)化?網(wǎng)絡(luò)的收斂速度如何?等等。

一般地,在用于分類器時(shí),Sigmoid函數(shù)及其組合通常效果更好。為了避免梯度消失問題,又需要避免使用Sigmoid和TanH。如果是回歸模型,在輸出層上可以使用線性激活函數(shù)。如果是淺層神經(jīng)網(wǎng)絡(luò),如不超過4層的,可選擇使用多種激勵(lì)函數(shù),沒有太大的影響。如果網(wǎng)絡(luò)中存在大量未激活神經(jīng)元,可以考慮leaky ReLU函數(shù)。

ReLU函數(shù)是應(yīng)用比較廣泛的激活函數(shù),可以作為默認(rèn)選項(xiàng)。深度學(xué)習(xí)往往需要大量時(shí)間來處理大量數(shù)據(jù),模型的收斂速度是尤為重要的所以要盡量選擇輸出具有zero-centered特點(diǎn)的激活函數(shù)以加快模型的收斂速度。

一個(gè)經(jīng)驗(yàn)上的建議是:SELU > ELU > Leaky ReLU > ReLU> tanh > sigmoid,但是,如果網(wǎng)絡(luò)的體系結(jié)構(gòu)阻止自歸一化,那么 ELU 可能是比 SELU 更好的選擇。如果速度很重要,Leaky ReLU 將是比慢很多的 ELU 更好的選擇。

更重要的是,激活函數(shù)仍在發(fā)展,需要跟蹤業(yè)界的最新進(jìn)展,并勇于探索和創(chuàng)新。

一句話小結(jié)

激活函數(shù)是神經(jīng)網(wǎng)絡(luò)中的重要參數(shù),一般地,Sigmoid 系列用于二分類任務(wù)輸出層,softmax系列用于多分類任務(wù)輸出層,tanh系列用于模型隱藏層,Relu系列用于回歸任務(wù)以及卷積神經(jīng)網(wǎng)絡(luò)隱藏層。但事無絕對,而且,新研究的激活函數(shù)仍在涌現(xiàn)。

附,reddit上有一張激活函數(shù)的圖,挺有意思的!

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产三级黄片在线免费看| 不卡一区二区在线视频| 日韩中文字幕在线不卡一区| 日韩精品你懂的在线观看| 亚洲国产成人av毛片国产| 日韩高清一区二区三区四区| 精品国产亚洲一区二区三区| 国产一区欧美一区日韩一区| 97人妻精品一区二区三区男同| 中文字幕人妻一区二区免费| 中文字幕亚洲视频一区二区| 欧美日韩一级aa大片| 欧美高潮喷吹一区二区| 国产精品人妻熟女毛片av久| 好吊色欧美一区二区三区顽频 | 国产欧美精品对白性色| 日韩偷拍精品一区二区三区| 色哟哟哟在线观看视频| 久久这里只精品免费福利| 翘臀少妇成人一区二区| 欧美日韩人妻中文一区二区| 中文字幕日韩欧美理伦片| 丰满人妻一二三区av| 欧美国产日产综合精品| 亚洲丁香婷婷久久一区| 色一欲一性一乱—区二区三区| 成人精品欧美一级乱黄| 国产欧美一区二区三区精品视| 欧美一级不卡视频在线观看| 国产美女精品人人做人人爽| 丰满人妻熟妇乱又乱精品古代| 日本午夜一本久久久综合| 一区二区三区人妻在线| 一级欧美一级欧美在线播| 区一区二区三中文字幕| 亚洲精品福利入口在线| 久久精品色妇熟妇丰满人妻91| 欧美精品女同一区二区| 久久人人爽人人爽大片av| 五月天丁香亚洲综合网| 邻居人妻人公侵犯人妻视频|