2018-08-01 神經(jīng)網(wǎng)絡(luò)

一、生物神經(jīng)網(wǎng)絡(luò)和人工神經(jīng)網(wǎng)絡(luò)

????????人工神經(jīng)網(wǎng)絡(luò)靠的是正向和反向傳播來(lái)更新神經(jīng)元, 從而形成一個(gè)好的神經(jīng)系統(tǒng), 本質(zhì)上, 這是一個(gè)能讓計(jì)算機(jī)處理和優(yōu)化的數(shù)學(xué)模型.。而生物神經(jīng)網(wǎng)絡(luò)是通過刺激, 產(chǎn)生新的聯(lián)結(jié), 讓信號(hào)能夠通過新的聯(lián)結(jié)傳遞而形成反饋。


參考鏈接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-0-ANN-and-NN/

二、神經(jīng)網(wǎng)絡(luò)

? ? ? ? 下圖就是一個(gè)神經(jīng)網(wǎng)絡(luò)。它有很多層組成,最開始的輸入層負(fù)責(zé)接收信息,然后由中間的隱含層對(duì)其進(jìn)行加工處理,最后有輸出層輸出計(jì)算機(jī)對(duì)輸入信息的認(rèn)知。

神經(jīng)網(wǎng)絡(luò)

? ? ? ? 訓(xùn)練神經(jīng)網(wǎng)絡(luò)需要大量的數(shù)據(jù),訓(xùn)練的時(shí)候輸出結(jié)果有對(duì)的也有錯(cuò)的。錯(cuò)的結(jié)果會(huì)被當(dāng)作經(jīng)驗(yàn),從輸出層反向傳遞回去在正確的方向上對(duì)每個(gè)神經(jīng)元進(jìn)行一定的調(diào)整,使其在下一次訓(xùn)練的時(shí)候能夠輸出更準(zhǔn)確的結(jié)果。

????????每個(gè)神經(jīng)元都有對(duì)應(yīng)的激活函數(shù),見下圖。

激活函數(shù)

? ? ? ? 在一次訓(xùn)練中,部分神經(jīng)元被激活,如果結(jié)果錯(cuò)誤,那么就會(huì)讓一部分神經(jīng)元變得更遲鈍,一部分變得更敏感。

部分神經(jīng)元被激活



參考鏈接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-1-NN/

? ? ? ? ? ? ? ? ??http://www.itdecent.cn/p/e112012a4b2d

三、卷積神經(jīng)網(wǎng)絡(luò)CNN

? ? ? ? CNN一般用于圖像處理,它處理的是一個(gè)區(qū)域而不僅僅是一個(gè)點(diǎn),通過一個(gè)滑動(dòng)窗口,對(duì)圖片信息進(jìn)行卷積運(yùn)算,從而總結(jié)出更高層的結(jié)構(gòu)。

CNN處理流程

? ? ? ? 比較流行的搭建結(jié)構(gòu)見下圖:

CNN結(jié)構(gòu)

? ???????首先是輸入的圖片(image), 經(jīng)過一層卷積層 (convolution), 然后在用池化(pooling)方式處理卷積的信息, 這里使用的是 max pooling 的方式. 然后在經(jīng)過一次同樣的處理, 把得到的第二次處理的信息傳入兩層全連接的神經(jīng)層 (fully connected),這也是一般的兩層神經(jīng)網(wǎng)絡(luò)層,最后在接上一個(gè)分類器(classifier)進(jìn)行分類預(yù)測(cè)。

? ? ? ? 上邊提到的pooling是將小鄰域特征點(diǎn)進(jìn)行整合得到新的特征,而max pooling是提取這一小鄰域中值最大的那個(gè)特征作為新的特征。比如一個(gè)2×2的鄰域,[1 3; 2 0],經(jīng)過一次max pooling后就變?yōu)閇3]。

????????全連接層的每一個(gè)結(jié)點(diǎn)都與上一層的所有結(jié)點(diǎn)相連,用來(lái)把前邊提取到的特征綜合起來(lái)。


參考鏈接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-2-CNN/

? ? ? ? ? ? ? ? ? https://blog.csdn.net/JIEJINQUANIL/article/details/50042791

? ? ? ? ? ? ? ? ??https://blog.csdn.net/l691899397/article/details/52267166

四、循環(huán)神經(jīng)網(wǎng)絡(luò)RNN

? ? ? ? RNN一般對(duì)有序的數(shù)據(jù)進(jìn)行處理,其處理流程大致如下:

RNN處理流程

? ??????每次RNN都會(huì)產(chǎn)生一個(gè) S(t),用以描述當(dāng)前的狀態(tài),然后再綜合之前的狀態(tài)得出當(dāng)前的輸出。比如 Y(t+1) 是 綜合 S(t) 和 S(t+1) 后得到的。


參考鏈接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-3-RNN/

五、LSTM 循環(huán)神經(jīng)網(wǎng)絡(luò)

1. RNN的弊端

? ? ? ? RNN學(xué)習(xí)時(shí),如果出現(xiàn)誤差,會(huì)反向傳遞誤差以調(diào)整參數(shù),每一步都會(huì)乘以一個(gè)參數(shù)W。如果W小于1,那么誤差就會(huì)逐漸縮小,到最后可能會(huì)得到一個(gè)趨近于0的數(shù),這種情況叫做梯度消失或者梯度彌散。如果W大于1,那么誤差就會(huì)逐漸變大,到最后可能會(huì)得到一個(gè)無(wú)窮大的數(shù),這種情況叫做梯度爆炸。這就是普通 RNN 沒有辦法回憶起久遠(yuǎn)記憶的原因(比如,無(wú)法回憶起反向傳回來(lái)的誤差)。

梯度消失


梯度爆炸

?????????LSTM(Long Short-Term Memory 長(zhǎng)短期記憶網(wǎng)絡(luò))就是為了解決這種問題誕生的。

LSTM模型

????????不過LSTM只能避免RNN的梯度消失,但是不能對(duì)抗梯度爆炸問題。好在梯度膨脹不是個(gè)嚴(yán)重的問題,一般靠裁剪后的優(yōu)化算法即可解決,比如梯度裁剪(如果梯度的范數(shù)大于某個(gè)給定值,將梯度同比收縮)。

????????梯度剪裁的方法一般有兩種:

????????1.一種是當(dāng)梯度的某個(gè)維度絕對(duì)值大于某個(gè)上限的時(shí)候,就剪裁為上限。

????????2.另一種是梯度的L2范數(shù)大于上限后,讓梯度除以范數(shù),避免過大。

? ? ? ? 那么LSTM是如何避免梯度消失的呢?

傳統(tǒng)RNN和現(xiàn)代RNN



參考鏈接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-4-LSTM/

? ? ? ? ? ? ? ? ? https://blog.csdn.net/laolu1573/article/details/77470889

? ? ? ? ? ? ? ? ??http://www.itdecent.cn/p/9dc9f41f0b29

六、自編碼

? ? ? ? 自編碼器是一種壓縮解壓的神經(jīng)網(wǎng)絡(luò)

自編碼

? ? ? ? 前半部分可以用做編碼器,如下圖。編碼器可以提取出數(shù)據(jù)的精髓,可以用來(lái)對(duì)其他神經(jīng)網(wǎng)絡(luò)的輸入數(shù)據(jù)進(jìn)行提取,減輕神經(jīng)網(wǎng)絡(luò)的負(fù)擔(dān)。

編碼器

? ? ? ? 自編碼器的后半部分可以用作解碼器,這可以作為一種生成器(GAN),比如下面這個(gè)例子。

模仿并生成手寫數(shù)字

參考鏈接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-5-autoencoder/

七、生成對(duì)抗網(wǎng)絡(luò)

? ? ? ? 常見的神經(jīng)網(wǎng)絡(luò)有多種,有普通的前向傳播神經(jīng)網(wǎng)絡(luò)(下圖 左) , 有分析圖片的 CNN 卷積神經(jīng)網(wǎng)絡(luò)(下圖 中) , 有分析序列化數(shù)據(jù), 比如語(yǔ)音的 RNN 循環(huán)神經(jīng)網(wǎng)絡(luò)(下圖 右) , 這些神經(jīng)網(wǎng)絡(luò)都是用來(lái)輸入數(shù)據(jù), 得到想要的結(jié)果。

? ? ? ? 而生成網(wǎng)絡(luò)則是”憑空”捏造結(jié)果,即通過一些隨機(jī)數(shù)來(lái)生成結(jié)果。生成對(duì)抗網(wǎng)絡(luò) GAN 就是現(xiàn)在最流行的一種生成網(wǎng)絡(luò)。

? ? ? ? GAN 中有一個(gè)Generator和Discriminator。其中,Generator負(fù)責(zé)生成,Disciminator負(fù)責(zé)評(píng)價(jià)生成的結(jié)果,然后將評(píng)價(jià)結(jié)果傳給Generator,使其進(jìn)行一些有利的調(diào)整以生成更好的結(jié)果。實(shí)際就是Generator和Discriminator的“對(duì)抗”。

GAN結(jié)構(gòu)

參考鏈接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-6-GAN/

八、神經(jīng)網(wǎng)絡(luò)的黑盒不黑

? ? ? ? 神經(jīng)網(wǎng)絡(luò)一般可以分為三層,輸入層、隱含層(也就是“黑盒”)、輸出層,如果我們?nèi)サ糨斎雽?,將隱含層作為輸出層,我們可以得到輸入數(shù)據(jù)的重要代表特征。

代表特征

? ? ? ? 如果隱含層中有多層,我們還可以再次去掉隱含層中的一層,最終輸出的也是一系列代表特征,這樣看來(lái),這“黑盒”也不算太“黑”。

? ? ? ? 上邊的方法在遷移學(xué)習(xí)中有所應(yīng)用,有時(shí)候我們只需要神經(jīng)網(wǎng)絡(luò)的理解能力,即代表特征提取能力,可以去掉它的輸入層,與別的神經(jīng)網(wǎng)絡(luò)拼接到一起以完成別的任務(wù)。比如,下面就是一個(gè)圖片分辨神經(jīng)網(wǎng)絡(luò)遷移到圖片中物品價(jià)值預(yù)測(cè)的例子。

預(yù)測(cè)照片里事物的價(jià)值

參考鏈接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-7-feature-representation/

九、神經(jīng)網(wǎng)絡(luò):梯度下降

? ? ? ? 梯度下降是優(yōu)化問題中的一個(gè)分支。優(yōu)化問題大概有三種解決方法:牛頓法 (Newton’s method), 最小二乘法(Least Squares method), 梯度下降法 (Gradient Descent)。神經(jīng)網(wǎng)絡(luò)采用的就是梯度下降法來(lái)對(duì)其神經(jīng)元的參數(shù)進(jìn)行優(yōu)化。

? ? ? ? 梯度下降就是在梯度的方向上下降,從而達(dá)到最低點(diǎn)(即最優(yōu)點(diǎn))。這里的梯度可以理解為斜率。

梯度下降

? ? ? ? 神經(jīng)網(wǎng)絡(luò)中的優(yōu)化一般都有很多局部最優(yōu)點(diǎn),通常梯度下降到的都是局部最優(yōu)點(diǎn),雖然比不上全局最優(yōu)點(diǎn),但這也有足夠優(yōu)秀了。

局部最優(yōu)和全局最優(yōu)

十、遷移學(xué)習(xí)

參考鏈接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-9-transfer-learning/

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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