一、生物神經(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)知。

? ? ? ? 訓(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ù),見下圖。

? ? ? ? 在一次訓(xùn)練中,部分神經(jīng)元被激活,如果結(jié)果錯(cuò)誤,那么就會(huì)讓一部分神經(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)。

? ? ? ? 比較流行的搭建結(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都會(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只能避免RNN的梯度消失,但是不能對(duì)抗梯度爆炸問題。好在梯度膨脹不是個(gè)嚴(yán)重的問題,一般靠裁剪后的優(yōu)化算法即可解決,比如梯度裁剪(如果梯度的范數(shù)大于某個(gè)給定值,將梯度同比收縮)。
????????梯度剪裁的方法一般有兩種:
????????1.一種是當(dāng)梯度的某個(gè)維度絕對(duì)值大于某個(gè)上限的時(shí)候,就剪裁為上限。
????????2.另一種是梯度的L2范數(shù)大于上限后,讓梯度除以范數(shù),避免過大。
? ? ? ? 那么LSTM是如何避免梯度消失的呢?

參考鏈接: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è)例子。

參考鏈接: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ì)抗”。

參考鏈接: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è)的例子。

參考鏈接: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)秀了。

十、遷移學(xué)習(xí)
參考鏈接:https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-9-transfer-learning/