Posted on

深度學習模型-MLP、CNN與 RNN

常見的深度學習模型

三種深度學習模型,包含:
• MIP:多層感知器( Multilayer Perceptron)
• CNN :卷積神經網路(Convolutional Neural Network )
• RNN:循環神經網路(Recurrent Neural Netw ork)

MLP、CNN與RNN的差異

多層感知器(簡稱 MLP)就是一個全連接網路。在某些文獻裡,它被稱為深度前饋(feedforward)網路或前饋神經網路。從目標應用來認識這些網路有助於我們理解這些進階深度學習模型的設計原理。MIP 常用於簡易的算術與線性迴歸問題。不過,MLP 在處理順序型與多維度資料樣式上的效能不是太好。它在先天設計上很難去記得順序型資料的樣式,並且需要相當大量的參數才能處理多維度資料。

RNN 很常用於順序型的輸入資料,因為其內部設計能讓網路去發掘歷史資料的相依性,這對於預測來說相當有用。

而對於圖片或影片這類多維度資料,CNN 在擷取用於分類、分割、生成或其他目的特徵圖都相當不錯。在某些狀況下,型態為1D卷積的 CNN 也可用於能接受順序型輸入資料的網路。然而在多數深度學習模型中,會把 MLP、RNN 與CNN 結合起來讓它們發揮各自所長。

MLP、CNN與RNN輸入的模型維度

在將資料傳入模型前會需根據模型類型來調整形狀

Keras把 MLP 層稱為 Dense,代表密集連接層。第一與第二MLP 層完全相同,各有256個單元,接著,是relu觸發與 dropout。之所以選用256單元是因為 128、512與 1,024 單元的效能較差。網路在128 單元時會很快收斂,但測試準確度也較低。
而把單元數拉高到 512 或1,024 並不會大幅提升測試準確度。

單元數量稱為超參數 (hyperparameter),它控制了網路的容量(capacity)。容量是指網路可模擬出的函數複雜度。例如對於多項式來說,超參數就是其次方數。只要次方數增加,函數容量也會增加。
如以下模型,在此使用Keras 的Sequential Model API 來實作一個分類器模型。
當模型只需要一個輸入、一個輸出,且只需要由順序排列層來處理時,這樣已經很足夠。

由於 Dense 層屬於線性操作,所以就算有一連串的 Dense 層也只能做到模擬線性函數。現在的問題在於 MNIST 數字分類在本質上就是非線性過程。在Dense層之間插入relu觸發可讓MLP 得以針對非線性應對來建模。relu 或稱為修正線性單元(Rectified Linear Unit, ReIU)是一種簡易的非線性函數,它很像是個過濾器,只讓正值輸入通過且保持不變,其他則全部變為零。數學上來說,relu可用以下方程式來表示

正規化

神經網路傾向於記住自身的訓練資料,尤其是當容量充足的時候。在這樣的狀況下,網路碰到測試資料時就會一塌糊塗。這就是網路無法一般化的典型症狀。模型會運用正規化層或正規化函數來避免這個傾向,常見的正規化層也稱為 dropout。

dropout 的概念很簡單。指定 dropout 率(在此設定 dropout=0.45)・Dropout
層就會隨機移除這個比例的單元數,不讓它們參與下一層・例如,第一層有256個
單元,隨後應用 dropout=0.45。這樣一來,層1就只會有 (1 – 0.45) * 256 units =
140個單元會參與層 2。

常見給神經網路選擇的觸發函數

輸出層的觸發函數選擇

1inear、sigmoid 與 tanh・linear 觸發的是 identity 函數,它就是把輸入複製到輸出而已。sigmoid函數也稱為logistic sigmoid,它可用於預測 tensor 的元素須獨立映射到 0.0與1.0之間的情形。預測tensor 所有的元素總和不需要為1.0,這是與softmax 最大的不同。例如,sigmoid可用於情緒預測(0.0為差,1.0為優)的最後一層,或影像產生(0.0為0,1.0則為255 像素值)。

tanh 函數可將其輸入映射到-1.0到1.0之間,這個性質在輸出值需要有正負值時尤其重要。tanh 函數常用於循環神經網路的內部層,但也可用於輸出層觸發。如果用tanh 來取代輸出觸發中的sigmoid,那麼資料就需要先適當縮放才行。