從0~1的機器學習:深度學習與CNN-學習筆記
深度學習
深度學習的三個步驟
定義一組函式(most significant)
給定評價的標準
挑選最好的函式
為什麼需要多個隱含層?隱含層越多是否越好?
| 深度*每層
神經元
個數 | 語音識別錯誤率 |
| ———————— | ———————— |
| 1*2k | 24。2% |
| 2*2k | 20。4% |
| 3*2k | 18。4% |
| 4*2k | 17。8% |
| 5*2k | 17。2% |
| 7*2k | 17。1% |
……從增加模型的複雜度來看,增加隱層的樹木顯然比增加
隱層神經元
的數目更有效。因為增加隱層數不僅增加了擁有啟用函式的神經元數目,還增加了啟用函式巢狀的層數。然而,多隱層神經網路難以直接用經典演算法(例如標準BP)進行訓練,因為誤差在多隱層內逆傳播時,往往會“發散”而不能收斂到穩定狀態……
—— 《機器學習》
周志華
深度學習可以模組化。其解決了資料少的問題。第一層隱含層為基分類器,後一層是由基分類器組成新的
分類器
,以此類推。
模組化可以以完全不同的輸入,得到非常相似的輸出。
深度學習中的問題&技巧
結果差不總是過學習引起的(訓練不足、資料不足等)。
對於某些激勵函式(Sigmoid)來說,深度似乎沒有帶來效能的改進(梯度消失)。深度學習一般使用ReLU作為激勵函式,不存在深到一定程度效能趨向平緩。
ReLU:Rectified Linear Unit,在
上,函式影象與x軸負半軸重合,在
上,影象為 y = x。對於ReLU來說,表示式為
ReLU額外的好處:計算快;仿生效果。
ReLU
擴充套件參考連結
本質
:max{y=0,y=x}
對每一個輸入而言,它是線性改變的;但是對不同的輸入而言,最後的輸出改變是非線性的。
誤差正則化
正則化的意義
L2正則化:
梯度:
最後輸出結果
係數趨於0
L1正則化:
梯度:
Dropout
dropout是指在深度學習網路的訓練過程中,對於
神經網路單元
,按照一定的機率將其暫時從網路中丟棄,注意是暫時。這裡暫時把丟棄的機率設定為 p%。
輸出層不可被dropout。
Dropout就是使的原來的網路變得更“瘦”,這樣對於N個神經元的網路中相當於有了
2^n
個模型集合,擺脫了為了
解決過擬合
要訓練更多次N個神經元的模型而帶來的
費時
的問題,同時解決了因為正常過擬合時間過長所可能帶來的
欠學習
的副作用。Dropout強迫一個
神經單元
,和隨機挑選出來的其他神經單元共同工作,達到好的效果,消除減弱了神經元節點間的聯合適應性,增強了
泛化能力
。
在
測試
時
沒有Dropout
。注意在乘
權值
的時候,所有的權值需要乘 (1 - p%)。
(最後輸出的是測試模型集合的約等。上圖中
無框的四個模型
中的w1,w2是各自不同的,
虛線綠框
中的w1是前四個模型中w1的平均,w2類似;
實線綠框
中的w1,w2指
虛線綠框
中的w1w2。)
卷積神經網路(CNN)
CNN在
影象處理
與
語音識別
有著出色表現。因為
重要的模式
通常
比影象本身小,要發現某個模式其實只需要區域性就夠了。
相比較其他深度、
前饋神經網路
,卷積神經網路需要考量的
引數
更少。
二次抽樣不會改變我們關注的模式,二次抽樣會減少引數,簡化運算。
卷積層
卷積神經網路中每層卷積層由若干卷積單元組成,每個卷積單元的引數都是透過
反向傳播演算法
最最佳化得到的。卷積運算的目的是提取輸入的
不同特徵
,第一層卷積層可能只能提取一些低階的特徵如邊緣、線條和角等層級,更多層的網路能從低階特徵中迭代提取更復雜的特徵。
卷積核
卷積核的模式需要與我們需要的重要模式相同。可以有多個卷積核。
卷積的操作
卷積的操作與ANN的操作類似,選取的矩陣與卷積核對應相乘,然後相加得到一個卷積結果。根據設定的步長右/下移一個步長,重複進行。最後卷積結果根據順序排列得到一個矩陣。此矩陣的大小與步長相關,相同的步長得到的
矩陣大小
是固定的。
值得注意的是:
左邊資料(選取的矩陣)在變化,每次卷積核都是針對某一區域性的資料視窗進行卷積,這就是所謂的CNN中的
區域性感知
機制。
資料視窗滑動,導致輸入在變化,但中間卷積核的權重(即每個神經元連線資料視窗的權重)是固定不變的,這個權重不變即所謂的CNN中的
引數(權重)共享
機制。
因為
權重共享機制
是卷積之所以簡便的重點(權重不變的情況下可以減少相同權重變數的數量),而w_i = w_i + delta w_i,delta w_i不可估測,所以在不操作的情況下無法確定更新後的權重是否一樣,所以在卷積完一層後,對其
權重求和取平均值
,再重新賦給權重,可以保障權重的共享機制。
最大池化Max Pooling
將輸入的影象劃分為若干個矩形區域,對每個子區域輸出
最大值
。
直覺上,這種機制能夠有效地原因在於,在發現一個特徵之後,它的精確位置遠不及它和其他特徵的相對位置的關係重要。
池化層
會不斷地減小資料的空間大小,因此引數的數量和計算量也會下降,這在一定程度上也控制了
過擬合
。通常來說,CNN的卷積層之間都會週期性地插入池化層。 —— Wiki百科 “卷積神經網路”
卷積與池化兩個操作可以多次重複,新圖的通道數目等於捲起核的數目。將通道拉直成為一個向量,再將其進行
深度網路
的計算。
CNN in Keras
一開始是 1 x 28 x 28 的影象,卷積核為 3x3。
第一次conv運算後有 25 x ( 9 + 26 x 26 )個引數。(25是本層設定的卷積核個數,9是本層卷積核的神經元個數,26是本層卷積運算後的矩陣大小28-3+1)
第一次pooling運算後變成了
一張
13 x 13的影象。(池化的引數設定為(2,2),)
第二次conv運算後有 50 x ( 9 x 25 + 11 x 11)個引數。(每個卷積核生成一張圖片的
一個通道
,25個卷積核生成25個通道,每個通道有9個不同的卷積核,但是同一張圖片的權重是一樣的,即11x11x1而不用乘25。)
以此類推,如果沒有經過池化,下一層與本層便是全連線。
最後經過拉直得到輸入向量,1250是50 x 5 x 5個輸入引數,要額外加上w0,共1251個引數。
深度訓練下的程式碼output_dim是輸出的神經元個數。
小結
深度學習問題中的技巧
新的激勵函式
正則化
DropOut
卷積神經網路在影象語音識別中的效果非常好, 原因有三:
原因一:重要的模式通常都比影象本身小
原因二:相同的模式會出現在不同的區域
原因三:二次抽樣不會改變我們關注的模式