在神經(jīng)網(wǎng)絡(luò)中,激活函數(shù)負(fù)責(zé)將來自節(jié)點(diǎn)的加權(quán)輸入轉(zhuǎn)換為該輸入的節(jié)點(diǎn)或輸出的激活。ReLU 是一個分段線性函數(shù),如果輸入為正,它將直接輸出,否則,它將輸出為零。它已經(jīng)成為許多類型神經(jīng)網(wǎng)絡(luò)的默認(rèn)激活函數(shù),因?yàn)槭褂盟哪P透菀子?xùn)練,并且通常能夠獲得更好的性能。在本文中,我們來詳細(xì)介紹一下ReLU,主要分成以下幾個部分:
高淳網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),高淳網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為高淳上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的高淳做網(wǎng)站的公司定做!
1、Sigmoid 和 Tanh 激活函數(shù)的局限性
2、ReLU(Rectified Linear Activation Function)
3、如何實(shí)現(xiàn)ReLU
4、ReLU的優(yōu)點(diǎn)
5、使用ReLU的技巧
一個神經(jīng)網(wǎng)絡(luò)由層節(jié)點(diǎn)組成,并學(xué)習(xí)將輸入的樣本映射到輸出。對于給定的節(jié)點(diǎn),將輸入乘以節(jié)點(diǎn)中的權(quán)重,并將其相加。此值稱為節(jié)點(diǎn)的summed activation。然后,經(jīng)過求和的激活通過一個激活函數(shù)轉(zhuǎn)換并定義特定的輸出或節(jié)點(diǎn)的“activation”。
最簡單的激活函數(shù)被稱為線性激活,其中根本沒有應(yīng)用任何轉(zhuǎn)換。 一個僅由線性激活函數(shù)組成的網(wǎng)絡(luò)很容易訓(xùn)練,但不能學(xué)習(xí)復(fù)雜的映射函數(shù)。線性激活函數(shù)仍然用于預(yù)測一個數(shù)量的網(wǎng)絡(luò)的輸出層(例如回歸問題)。
非線性激活函數(shù)是更好的,因?yàn)樗鼈冊试S節(jié)點(diǎn)在數(shù)據(jù)中學(xué)習(xí)更復(fù)雜的結(jié)構(gòu) 。兩個廣泛使用的非線性激活函數(shù)是 sigmoid 函數(shù)和 雙曲正切 激活函數(shù)。
Sigmoid 激活函數(shù) ,也被稱為 Logistic函數(shù)神經(jīng)網(wǎng)絡(luò),傳統(tǒng)上是一個非常受歡迎的神經(jīng)網(wǎng)絡(luò)激活函數(shù)。函數(shù)的輸入被轉(zhuǎn)換成介于0.0和1.0之間的值。大于1.0的輸入被轉(zhuǎn)換為值1.0,同樣,小于0.0的值被折斷為0.0。所有可能的輸入函數(shù)的形狀都是從0到0.5到1.0的 s 形。在很長一段時間里,直到20世紀(jì)90年代早期,這是神經(jīng)網(wǎng)絡(luò)的默認(rèn)激活方式。
雙曲正切函數(shù) ,簡稱 tanh,是一個形狀類似的非線性激活函數(shù),輸出值介于-1.0和1.0之間。在20世紀(jì)90年代后期和21世紀(jì)初期,由于使用 tanh 函數(shù)的模型更容易訓(xùn)練,而且往往具有更好的預(yù)測性能,因此 tanh 函數(shù)比 Sigmoid激活函數(shù)更受青睞。
Sigmoid和 tanh 函數(shù)的一個普遍問題是它們值域飽和了 。這意味著,大值突然變?yōu)?.0,小值突然變?yōu)?-1或0。此外,函數(shù)只對其輸入中間點(diǎn)周圍的變化非常敏感。
無論作為輸入的節(jié)點(diǎn)所提供的求和激活是否包含有用信息,函數(shù)的靈敏度和飽和度都是有限的。一旦達(dá)到飽和狀態(tài),學(xué)習(xí)算法就需要不斷調(diào)整權(quán)值以提高模型的性能。
最后,隨著硬件能力的提高,通過 gpu 的非常深的神經(jīng)網(wǎng)絡(luò)使用Sigmoid 和 tanh 激活函數(shù)不容易訓(xùn)練。在大型網(wǎng)絡(luò)深層使用這些非線性激活函數(shù)不能接收有用的梯度信息。錯誤通過網(wǎng)絡(luò)傳播回來,并用于更新權(quán)重。每增加一層,錯誤數(shù)量就會大大減少。這就是所謂的 消失梯度 問題,它能有效地阻止深層(多層)網(wǎng)絡(luò)的學(xué)習(xí)。
雖然非線性激活函數(shù)的使用允許神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)復(fù)雜的映射函數(shù),但它們有效地阻止了學(xué)習(xí)算法與深度網(wǎng)絡(luò)的工作。在2000年代后期和2010年代初期,通過使用諸如波爾茲曼機(jī)器和分層訓(xùn)練或無監(jiān)督的預(yù)訓(xùn)練等替代網(wǎng)絡(luò)類型,這才找到了解決辦法。
為了訓(xùn)練深層神經(jīng)網(wǎng)絡(luò), 需要一個激活函數(shù)神經(jīng)網(wǎng)絡(luò),它看起來和行為都像一個線性函數(shù),但實(shí)際上是一個非線性函數(shù),允許學(xué)習(xí)數(shù)據(jù)中的復(fù)雜關(guān)系 。該函數(shù)還必須提供更靈敏的激活和輸入,避免飽和。
因此,ReLU出現(xiàn)了, 采用 ReLU 可以是深度學(xué)習(xí)革命中為數(shù)不多的里程碑之一 。ReLU激活函數(shù)是一個簡單的計算,如果輸入大于0,直接返回作為輸入提供的值;如果輸入是0或更小,返回值0。
我們可以用一個簡單的 if-statement 來描述這個問題,如下所示:
對于大于零的值,這個函數(shù)是線性的,這意味著當(dāng)使用反向傳播訓(xùn)練神經(jīng)網(wǎng)絡(luò)時,它具有很多線性激活函數(shù)的理想特性。然而,它是一個非線性函數(shù),因?yàn)樨?fù)值總是作為零輸出。由于矯正函數(shù)在輸入域的一半是線性的,另一半是非線性的,所以它被稱為 分段線性函數(shù)(piecewise linear function ) 。
我們可以很容易地在 Python 中實(shí)現(xiàn)ReLU激活函數(shù)。
我們希望任何正值都能不變地返回,而0.0或負(fù)值的輸入值將作為0.0返回。
下面是一些修正的線性激活函數(shù)的輸入和輸出的例子:
輸出如下:
我們可以通過繪制一系列的輸入和計算出的輸出,得到函數(shù)的輸入和輸出之間的關(guān)系。下面的示例生成一系列從 -10到10的整數(shù),并計算每個輸入的校正線性激活,然后繪制結(jié)果。
運(yùn)行這個例子會創(chuàng)建一個圖,顯示所有負(fù)值和零輸入都突變?yōu)?.0,而正輸出則返回原樣:
ReLU函數(shù)的導(dǎo)數(shù)是斜率。負(fù)值的斜率為0.0,正值的斜率為1.0。
傳統(tǒng)上,神經(jīng)網(wǎng)絡(luò)領(lǐng)域已經(jīng)不能是任何不完全可微的激活函數(shù),而ReLU是一個分段函數(shù)。從技術(shù)上講,當(dāng)輸入為0.0時,我們不能計算ReLU的導(dǎo)數(shù),但是,我們可以假設(shè)它為0。
tanh 和 sigmoid 激活函數(shù)需要使用指數(shù)計算, 而ReLU只需要max(),因此他 計算上更簡單,計算成本也更低 。
ReLU的一個重要好處是,它能夠輸出一個真正的零值 。這與 tanh 和 sigmoid 激活函數(shù)不同,后者學(xué)習(xí)近似于零輸出,例如一個非常接近于零的值,但不是真正的零值。這意味著負(fù)輸入可以輸出真零值,允許神經(jīng)網(wǎng)絡(luò)中的隱層激活包含一個或多個真零值。這就是所謂的稀疏表示,是一個理想的性質(zhì),在表示學(xué)習(xí),因?yàn)樗梢约铀賹W(xué)習(xí)和簡化模型。
ReLU看起來更像一個線性函數(shù),一般來說,當(dāng)神經(jīng)網(wǎng)絡(luò)的行為是線性或接近線性時,它更容易優(yōu)化 。
這個特性的關(guān)鍵在于,使用這個激活函數(shù)進(jìn)行訓(xùn)練的網(wǎng)絡(luò)幾乎完全避免了梯度消失的問題,因?yàn)樘荻热匀慌c節(jié)點(diǎn)激活成正比。
ReLU的出現(xiàn)使得利用硬件的提升和使用反向傳播成功訓(xùn)練具有非線性激活函數(shù)的深層多層網(wǎng)絡(luò)成為可能 。
很長一段時間,默認(rèn)的激活方式是Sigmoid激活函數(shù)。后來,Tanh成了激活函數(shù)。 對于現(xiàn)代的深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò),默認(rèn)的激活函數(shù)是ReLU激活函數(shù) 。
ReLU 可以用于大多數(shù)類型的神經(jīng)網(wǎng)絡(luò), 它通常作為多層感知機(jī)神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)的激活函數(shù) ,并且也得到了許多論文的證實(shí)。傳統(tǒng)上,LSTMs 使用 tanh 激活函數(shù)來激活cell狀態(tài),使用 Sigmoid激活函數(shù)作為node輸出。 而ReLU通常不適合RNN類型網(wǎng)絡(luò)的使用。
偏置是節(jié)點(diǎn)上具有固定值的輸入,這種偏置會影響激活函數(shù)的偏移,傳統(tǒng)的做法是將偏置輸入值設(shè)置為1.0。當(dāng)在網(wǎng)絡(luò)中使用 ReLU 時, 可以將偏差設(shè)置為一個小值,例如0.1 。
在訓(xùn)練神經(jīng)網(wǎng)絡(luò)之前,網(wǎng)絡(luò)的權(quán)值必須初始化為小的隨機(jī)值。當(dāng)在網(wǎng)絡(luò)中使用 ReLU 并將權(quán)重初始化為以零為中心的小型隨機(jī)值時,默認(rèn)情況下,網(wǎng)絡(luò)中一半的單元將輸出零值。有許多啟發(fā)式方法來初始化神經(jīng)網(wǎng)絡(luò)的權(quán)值,但是沒有最佳權(quán)值初始化方案。 何愷明的文章指出Xavier 初始化和其他方案不適合于 ReLU ,對 Xavier 初始化進(jìn)行一個小的修改,使其適合于 ReLU,提出He Weight Initialization,這個方法更適用于ReLU 。
在使用神經(jīng)網(wǎng)絡(luò)之前對輸入數(shù)據(jù)進(jìn)行縮放是一個很好的做法。這可能涉及標(biāo)準(zhǔn)化變量,使其具有零均值和單位方差,或者將每個值歸一化為0到1。如果不對許多問題進(jìn)行數(shù)據(jù)縮放,神經(jīng)網(wǎng)絡(luò)的權(quán)重可能會增大,從而使網(wǎng)絡(luò)不穩(wěn)定并增加泛化誤差。 無論是否在網(wǎng)絡(luò)中使用 ReLU,這種縮放輸入的良好實(shí)踐都適用。
ReLU 的輸出在正域上是無界的。這意味著在某些情況下,輸出可以繼續(xù)增長。因此,使用某種形式的權(quán)重正則化可能是一個比較好的方法,比如 l1或 l2向量范數(shù)。 這對于提高模型的稀疏表示(例如使用 l 1正則化)和降低泛化誤差都是一個很好的方法 。
.
參考資料: 算法基礎(chǔ)---ReLU激活函數(shù)及其變種
1、什么是 ReLU
ReLU 是修正線性單元(rectified linear unit),在 0 和 x 之間取最大值。
2、為什么要引入 ReLU
因?yàn)?sigmoid 和 tanh 容易導(dǎo)致梯度消失,而 ReLU 是非飽和激活函數(shù),不容易發(fā)生梯度消失
3、ReLU 的函數(shù)表達(dá)式和導(dǎo)數(shù)表達(dá)式
ReLU 的函數(shù)表達(dá)式:
當(dāng) x = 0 時,ReLU = 0
當(dāng) x 0 時,ReLU = x
ReLU 的導(dǎo)數(shù)表達(dá)式:
當(dāng) x= 0 時,導(dǎo)數(shù)為 0
當(dāng) x 0 時,導(dǎo)數(shù)為 1
4、ReLU 的函數(shù)圖像和導(dǎo)數(shù)圖像
ReLU 的函數(shù)圖像:
ReLU 的導(dǎo)數(shù)圖像:
5、ReLU 的優(yōu)點(diǎn)
① 有效緩解過擬合的問題,因?yàn)?ReLU 有可能使部分神經(jīng)節(jié)點(diǎn)的輸出變?yōu)?0,從而導(dǎo)致神經(jīng)節(jié)點(diǎn)死亡,降低了神經(jīng)網(wǎng)絡(luò)的復(fù)雜度
②? 不會發(fā)生梯度消失或梯度爆炸,當(dāng) x 大于 0 時,ReLU 的梯度恒為 1,不會隨著網(wǎng)路深度的加深而使得梯度在累乘的時候變得越來越小或者越來越大,從而不會發(fā)生梯度消失或梯度爆炸
③ 計算簡單,ReLU 本質(zhì)上就是計算一次在兩個值中取最大值
6、ReLU 的缺點(diǎn)
① 會導(dǎo)致神經(jīng)元死亡,當(dāng)一個神經(jīng)元在某次的激活值為 0 之后,此后得到的激活值都是 0.
證明:
因?yàn)榧僭O(shè)某個神經(jīng)元在第 N 次時的激活值為 0,則第 N+1 次的激活值為: ,其中? ?取值大于 0,? ?是 ReLU 在 x 點(diǎn)的梯度。當(dāng) x = 0 時, ?的值為 0,則? 也為 0;當(dāng) x 0 時, ?的梯度為 1,則? ?為 0 和? ?中的最大值 0.即無論 x 取什么值, ?的值都等于 0.
解決方法:
① 對于ReLU 會導(dǎo)致神經(jīng)節(jié)點(diǎn)死亡的原因有:
a.參數(shù)初始化時初始化到的參數(shù)值恰好能使神經(jīng)節(jié)點(diǎn)死亡,不過這種情況非常罕見
b.學(xué)習(xí)率太高,導(dǎo)致在參數(shù)更新時,導(dǎo)致參數(shù)小于等于 0
改進(jìn)方法有:
針對原因 a,采用 Xavier 初始化方法( 深度學(xué)習(xí)——Xavier初始化方法 )
針對原因 b,可以設(shè)置小一點(diǎn)的學(xué)習(xí)率或者是使用會自動調(diào)整學(xué)習(xí)率的優(yōu)化方法,例如 Adagrad
② 輸出不是零均值化(zero-centered),會導(dǎo)致模型收斂較慢(解釋: 談?wù)劶せ詈瘮?shù)以零為中心的問題 )
7、ReLU 的變種:
① Leaky ReLU
Leaky ReLU 的目的是為了解決 ReLU 的死亡神經(jīng)節(jié)點(diǎn)的問題。Leaky ReLU 的表達(dá)式是:
ReLU = max( ),其中 ?通常取值為 0.01,即
當(dāng) x = 0 時,ReLU =?
當(dāng) x 0 時,ReLU =?
② PReLU,Parameter ReLU 是對 Leaky ReLU 的改進(jìn),對于? ?不再取定值,而是從樣本中學(xué)習(xí)得到,具有收斂速度快,錯誤率低的優(yōu)點(diǎn)。
③ RReLU,Randomized ReLU 是對 Leaky ReLU 的改進(jìn),對于? ?不再取定值,而是在指定范圍內(nèi)隨機(jī)取一個值,而在預(yù)測階段則是使用固定值。PReLU 在一定程度上具有正則效果
8、pytorch 的 ReLU 函數(shù)的作用和參數(shù)詳解
torch.nn.ReLU(inplace=False)?
函數(shù)作用 :對輸入進(jìn)行修正線性函數(shù) ReLU(x) = max(0, x)
參數(shù)詳解
inplace:默認(rèn)為 False,即不進(jìn)行覆蓋運(yùn)算,默認(rèn)為 True 的話,則會對輸入進(jìn)行覆蓋運(yùn)算,此時減少了申請和注銷內(nèi)存的操作,會提高運(yùn)行效率
例子:
from?torch?import?autograd
m?=?nn.ReLU()
input?=?autograd.Variable(torch.randn(2))
print(input)
print(m(input))
結(jié)果:
tensor([-0.3543, -0.7416])
tensor([0., 0.])
注:連續(xù)使用多次 ReLU 跟使用一次的 ReLU 的效果是一樣的
訓(xùn)練回歸模型所需要的信息包含-數(shù)據(jù)、模型、損失函數(shù)、優(yōu)化函數(shù)(梯度下降算法)。
step 1:對數(shù)據(jù)進(jìn)行預(yù)處理使其可以fit到模型中
step 2:構(gòu)建模型
step 3:選擇損失函數(shù)(回歸模型一般用mse)和優(yōu)化函數(shù)
step 4:迭代訓(xùn)練模型中的參數(shù),并進(jìn)行預(yù)測
回歸問題轉(zhuǎn)化為分類問題,分類問題相當(dāng)于回歸的輸出是多個值。
回歸的輸出是實(shí)值可通過softmax將其轉(zhuǎn)化為對應(yīng)的概率值,且數(shù)組中的最大值所處的index不變。
引用交叉墑?chuàng)p失函數(shù)-衡量兩個概率分布差異的測量函數(shù)?;喌米钚』徊骒?fù)p失函數(shù)等價于最大化訓(xùn)練數(shù)據(jù)集所有標(biāo)簽類別的聯(lián)合預(yù)測概率。
多個全連接層的stack等價于一個全連接層,問題的根源在于全連接層只是對數(shù)據(jù)做仿射變換,而多個仿射變換的疊加仍然是一個仿射變換??梢酝ㄟ^解決非線性函數(shù)來解決該問題。
非線性激活函數(shù)如下:
1、ReLU(rectified linear unit)函數(shù)提供了一個很簡單的非線性變換。給定元素,該函數(shù)定義為 可以看出,ReLU函數(shù)只保留正數(shù)元素,并將負(fù)數(shù)元素清零。
2、Sigmoid函數(shù)可以將元素的值變換到0和1之間。 .導(dǎo)數(shù)在當(dāng)輸入為0時,sigmoid函數(shù)的導(dǎo)數(shù)達(dá)到最大值0.25;當(dāng)輸入越偏離0時,sigmoid函數(shù)的導(dǎo)數(shù)越接近0。
3、tanh(雙曲正切)函數(shù)可以將元素的值變換到-1和1之間。
激活函數(shù)的選擇
ReLu函數(shù)是一個通用的激活函數(shù),目前在大多數(shù)情況下使用。但是,ReLU函數(shù)只能在隱藏層中使用。
用于分類器時,sigmoid函數(shù)及其組合通常效果更好。由于梯度消失問題,有時要避免使用sigmoid和tanh函數(shù)。
在神經(jīng)網(wǎng)絡(luò)層數(shù)較多的時候,最好使用ReLu函數(shù),ReLu函數(shù)比較簡單計算量少,而sigmoid和tanh函數(shù)計算量大很多。
在選擇激活函數(shù)的時候可以先選用ReLu函數(shù)如果效果不理想可以嘗試其他激活函數(shù)。
預(yù)處理通常包括四個步驟:
現(xiàn)有的分詞工具,nltk.tokenize-word_tokenize;spacy
n元語法,防止序列長度增加,計算和存儲多個詞共同出現(xiàn)的概率的復(fù)雜度會呈指數(shù)級增加。元語法通過馬爾可夫假設(shè)簡化模型,馬爾科夫假設(shè)是指一個詞的出現(xiàn)只與前面n個詞相關(guān),即n階馬爾可夫鏈。
元語法可能有哪些缺陷?參數(shù)空間過大,數(shù)據(jù)稀疏
兩種采樣方式,隨機(jī)采樣和相鄰采樣。對應(yīng)的初始化方式不同。
卷積操作前w、h的長度
note: 為卷積后的w長度,p為padding長度,s為步長,k為卷積核大小。
卷積層與全連接層的對比:
二維卷積層經(jīng)常用于處理圖像,與此前的全連接層相比,它主要有兩個優(yōu)勢:
一是全連接層把圖像展平成一個向量,在輸入圖像上相鄰的元素可能因?yàn)檎蛊讲僮鞑辉傧噜?,網(wǎng)絡(luò)難以捕捉局部信息。而卷積層的設(shè)計,天然地具有提取局部信息的能力。
二是卷積層的參數(shù)量更少。
note:卷積核大小和圖像大小相同時等價于全連接層。
訓(xùn)練誤差:指模型在訓(xùn)練數(shù)據(jù)集上表現(xiàn)出的誤差。
泛化誤差:指模型在任意一個測試數(shù)據(jù)樣本上表現(xiàn)出的誤差的期望,并常常通過測試數(shù)據(jù)集上的誤差來近似。
target:降低泛化誤差。
數(shù)據(jù)集可分為:訓(xùn)練集、測試集、驗(yàn)證集(模型選擇,例如-超參數(shù))。
note:由于驗(yàn)證數(shù)據(jù)集不參與模型訓(xùn)練,當(dāng)訓(xùn)練數(shù)據(jù)不夠用時,預(yù)留大量的驗(yàn)證數(shù)據(jù)顯得太奢侈,因此采用k折交叉驗(yàn)證。
欠擬合是模型無法得到較低的訓(xùn)練誤差,我們將這一現(xiàn)象稱作欠擬合;
過擬合是模型的訓(xùn)練誤差遠(yuǎn)小于它在測試數(shù)據(jù)集上的誤差,我們稱該現(xiàn)象為過擬合。
模型復(fù)雜度和訓(xùn)練數(shù)據(jù)集大小-過擬合及欠擬合的影響
模型復(fù)雜度越高越容易發(fā)生過擬合;
如果訓(xùn)練數(shù)據(jù)集中樣本數(shù)過少,特別是比模型參數(shù)數(shù)量(按元素計)更少時,過擬合更容易發(fā)生。此外,泛化誤差不會隨訓(xùn)練數(shù)據(jù)集里樣本數(shù)量增加而增大。因此,在計算資源允許的范圍之內(nèi),我們通常希望訓(xùn)練數(shù)據(jù)集大一些。
過擬合的方法:正則化L1和L2及彈性網(wǎng)絡(luò),丟棄法-droupout。
當(dāng)層數(shù)較多時,梯度的計算容易出現(xiàn)梯度消失或爆炸。
數(shù)據(jù)集可能存在的協(xié)變量、標(biāo)簽和概念偏移。
隨著循環(huán)神經(jīng)網(wǎng)絡(luò)層數(shù)的增加可以出現(xiàn)梯度爆炸及消失,對應(yīng)的使用梯度裁剪解決梯度爆炸。
困惑度是對交叉熵?fù)p失函數(shù)做指數(shù)運(yùn)算后得到的值,使用它來對語言模型進(jìn)行判定。特別地,
1、最佳情況下,模型總是把標(biāo)簽類別的概率預(yù)測為1,此時困惑度為1;
2、最壞情況下,模型總是把標(biāo)簽類別的概率預(yù)測為0,此時困惑度為正無窮;
3、基線情況下,模型總是預(yù)測所有類別的概率都相同,此時困惑度為類別個數(shù)。
encoder:輸入到隱藏狀態(tài)
decoder:隱藏狀態(tài)到輸出
在訓(xùn)練時,將decoder的輸出不作為它的屬于。
可以關(guān)注到任意長度的字符信息。
有兩種實(shí)現(xiàn)方式:點(diǎn)方式和多層感知器方式
Transformer同樣基于編碼器-解碼器架構(gòu),其區(qū)別主要在于以下三點(diǎn):
Transformer blocks:將seq2seq模型重的循環(huán)網(wǎng)絡(luò)替換為了Transformer Blocks,該模塊包含一個多頭注意力層(Multi-head Attention Layers)以及兩個position-wise feed-forward networks(FFN)。對于解碼器來說,另一個多頭注意力層被用于接受編碼器的隱藏狀態(tài)。
Add and norm:多頭注意力層和前饋網(wǎng)絡(luò)的輸出被送到兩個“add and norm”層進(jìn)行處理,該層包含殘差結(jié)構(gòu)以及層歸一化。
Position encoding:由于自注意力層并沒有區(qū)分元素的順序,所以一個位置編碼層被用于向序列元素里添加位置信息。
一共包含7層:十分類問題。
卷積6x28x28-平均池化6x14x14-卷積16x10x10-平均池化16x5x5-全連接120-全連接84-全連接10。
卷積神經(jīng)網(wǎng)絡(luò)就是含卷積層的網(wǎng)絡(luò)。 LeNet交替使用卷積層和最大池化層后接全連接層來進(jìn)行圖像分類。
AlexNet
1×1卷積核作用
1.放縮通道數(shù):通過控制卷積核的數(shù)量達(dá)到通道數(shù)的放縮。
2.增加非線性。1×1卷積核的卷積過程相當(dāng)于全連接層的計算過程,并且還加入了非線性激活函數(shù),從而可以增加網(wǎng)絡(luò)的非線性。
3.計算參數(shù)少
GoogLeNet