多層感知機與神經網絡學習總結

這篇博客主要總結多層感知機(MLP)的一些知識要點,MLP也就是DNN(深度神經網絡),是深度學習的基礎。(原創 https://blog.csdn.net/baidu_33718858/article/details/84972537)

主要的參考文獻來自於: https://machinelearningmastery.com/neural-networks-crash-course/ Jason的博客
https://www.cnblogs.com/pinard/p/6418668.html 劉建平大牛的博客,以及《深度學習》花書。

這篇博客主要包括的內容有:
0.概述
1.神經元
2.MLP的基本結構
3.前向傳播算法
4.反向傳播算法
5.損失函數和激活函數的選擇
6.正則化

概述

人工神經網絡領域通常被稱爲神經網絡或多層感知機,可能是最有用的神經網絡類型。感知機是單個神經元模型,是較大神經網絡的前身。

神經網絡的強大之處在於它們能夠學習訓練數據中的表示,以及如何將其與想要預測的輸出變量聯繫起來。從數學上講,它們能夠學習任何映射函數,並且已經被證明是一種通用的近似算法。

神經網絡的預測能力來自網絡的分層或多層結構。數據結構可以選擇(學會表示)不同比例或分辨率的特徵,並將它們組合成更高階的特徵。例如,從線條到線條到形狀的集合。

神經元
在這裏插入圖片描述
神經網絡的構建塊是人工神經元。

這些是具有加權輸入信號並使用激活功能產生輸出信號的簡單計算單元。

輸出和輸入之間學習到一個線性關係,得到中間輸出結果:
在這裏插入圖片描述
接着是一個神經元激活函數:
在這裏插入圖片描述

激活函數是輸入加權和與神經元輸出的簡單映射。它被稱爲激活函數,因爲它控制神經元被激活的閾值和輸出信號的強度。
從而得到我們想要的輸出結果1或者-1。

這個模型只能用於二元分類,且無法學習比較複雜的非線性模型,因此在工業界無法使用。

MLP的基本結構

神經元被排列成神經元網絡,神經網絡的結構是在上述的感知機結構上做了三點改進:

1)加入了隱藏層,隱藏層可以有多層,增強模型的表達能力。但同時也增加了模型的複雜度。

MLP可以理解爲有很多隱藏層的神經網絡,層與層之間是全連接的,也就是說,第i層的任意一個神經元一定與第i+1層的任意一個神經元相連。雖然DNN看起來很複雜,但是從小的局部模型來說,還是和感知機一樣。

2)輸出層的神經元也可以不止一個輸出,可以有多個輸出,這樣模型可以靈活的應用於分類迴歸,以及其他的機器學習領域比如降維和聚類等。

輸出層中激活函數的選擇受到您正在建模的問題類型的強烈約束。例如:

迴歸問題可能具有單個輸出神經元,並且神經元可能沒有激活功能。
二進制分類問題可能有一個輸出神經元,並使用sigmoid激活函數輸出0到1之間的值,以表示預測類1的值的概率。可以通過使用閾值將其轉換爲清晰的類值0.5和小於閾值的捕捉值爲0,否則爲1。
多類分類問題可能在輸出層中具有多個神經元,每個類一個(例如,在着名的虹膜花分類問題中三個類的三個神經元)。在這種情況下,softmax激活函數可用於輸出網絡預測每個類值的概率。選擇具有最高概率的輸出可用於產生清晰的類別分類值。
3)對激活函數做擴展,感知機的激活函數是sign(z),雖然簡單但是處理能力有限,因此神經網絡中一般使用的其他的激活函數。通過使用不同的激活函數,神經網絡的表達能力進一步增強。

前向傳播算法
在這裏插入圖片描述

假設我們選擇的激活函數是σ(z),隱藏層和輸出層的輸出值爲a,則對於下圖的三層DNN,利用和感知機一樣的思路,我們可以利用上一層的輸出計算下一層的輸出,也就是所謂的DNN前向傳播算法。

假設第l−1層共有m個神經元,而第l層共有n個神經元,則第l層的線性係數w組成了一個n×m的矩陣W^l, 第l層的偏倚b組成了一個n×1的向量b^l , 第l−1層的的輸出a組成了一個m×1的向量a(l−1),第l層的的未激活前線性輸出z組成了一個n×1的向量zl, 第l層的的輸出a組成了一個n×1的向量a^l。則用矩陣法表示,第l層的輸出爲:
在這裏插入圖片描述
DNN的前向傳播算法也就是利用我們的若干個權重係數矩陣W,偏倚向量b來和輸入值向量x進行一系列線性運算和激活運算,從輸入層開始,一層層的向後計算,一直到運算到輸出層,得到輸出結果爲值。

它是在訓練網絡之後使用的傳遞類型,以便對新數據進行預測。
在這裏插入圖片描述
反向傳播算法

將網絡輸出與預期輸出進行比較,並計算誤差。然後,該錯誤通過網絡傳播回來,一次一層,並根據它們對錯誤的貢獻量來更新權重。這個聰明的數學運算稱爲反向傳播算法。

https://machinelearningmastery.com/implement-backpropagation-algorithm-scratch-python/ Jason的博客,講了如何用Python 從頭實現反向傳播算法。https://www.cnblogs.com/pinard/p/6422831.html 劉建平的博客,重點講了BP算法原理方面的內容。

在進行DNN反向傳播算法前,我們需要選擇一個損失函數,來度量訓練樣本計算出的輸出和真實的訓練樣本輸出之間的損失。訓練樣本計算出的輸出是怎麼得來的?這 個輸出是隨機選擇一系列W,b用我們上一節的前向傳播算法計算出來的。因爲神經網絡初始化時權重和偏倚的選擇隨機,所以神經網絡的模型是不穩定的。

使用最常見的均方差來度量損失:
在這裏插入圖片描述
算法總結如下:
在這裏插入圖片描述在這裏插入圖片描述損失函數和激活函數的選擇

https://www.cnblogs.com/pinard/p/6437495.html 對DNN如何選擇損失函數和激活函數做了總結。

均方差損失函數+Sigmoid激活函數的問題
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述正則化

正則化主要是針對於權重係數矩陣,可以使用常見的L1/L2正則化,通過集成學習的思想(主要是bagging的思想,訓練多個DNN網絡進行正則化),通過Dropout。

用得比較多的應該是Dropout,所謂的Dropout指的是在用前向傳播算法和反向傳播算法訓練DNN模型時,一批數據迭代時,隨機的從全連接DNN網絡中去掉一部分隱藏層的神經元。當然,dropout並不意味着這些神經元永遠的消失了。在下一批數據迭代前,我們會把DNN模型恢復成最初的全連接模型,然後再用隨機的方法去掉部分隱藏層的神經元,接着去迭代更新W,b。當然,這次用隨機的方法去掉部分隱藏層後的殘缺DNN網絡和上次的殘缺DNN網絡並不相同。

從上面的描述可以看出dropout和Bagging的正則化思路還是很不相同的。dropout模型中的W,b是一套,共享的。所有的殘缺DNN迭代時,更新的是同一組W,b;而Bagging正則化時每個DNN模型有自己獨有的一套W,b參數,相互之間是獨立的。當然他們每次使用基於原始數據集得到的分批的數據集來訓練模型,這點是類似的。

作者:嬸嬸world_peace
來源:CSDN
原文:https://blog.csdn.net/baidu_33718858/article/details/84972537
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章