CNN與為什麼要做DNN(Deep neural network)(李弘毅 機器學習)
CNN整體過程
1.整體架構
- 卷積操作(convolution):可以進行卷積操作是因為對於影象而言,有些部分割槽域要比整個影象更加重要。並且相同的部分會出現在不同的區域,我們使用卷積操作可以降低成本。比如,我們識別鳥,鳥嘴部分的資訊很重要,通過這個鳥嘴,我們就可以識別出這個是一隻鳥。鳥不止一種型別,用很多種類,但鳥嘴都是大同小異的,所以對於鳥嘴的這個特徵,我們就可以使用相同的函式進行識別,從而降低了成本。
- Max Pooling操作。可以進行池化操作的原因是我們對影象進行subsampling處理,不影響整個影象的處理。比如,我們對畫素進行子取樣。比如只取原來影象奇數位置的畫素,從而得到了一張更小的圖片,但是這種處理對描述整個影象是沒有什麼大影響的,但是卻可以大大的減少了引數。
- Flatten.這個平坦化的處理就是將我們經過卷積和池化的最終進行進行處理,也就是把矩陣形式拉直變成一個向量進行處理,然後將這個向量作為輸入,輸入到全連線的網路中去。
卷積
1.首先定義一個卷積核,也就是過濾矩陣。這個卷積核裡的值不是人為設定的,是機器學習出來的。我們根據卷積核的大小與輸入矩陣對應大小位置進行點乘操作,根據步長移動卷積核,一次進行點乘,得到feature map。 在feature map中,值比較大並且相同的我們認為在原始影象中他們表示的是同一個特徵。以下圖為例: 這個我們的輸入矩陣是66的。卷積核是33的,步長為1。有兩個卷積核。 兩個卷積核所以feature map是兩層。可以看出,現在的feature map比原來的影象矩陣要小(44<6
Max pooling
Max pool的思路很簡單,就是對feature map進行分組,然後在每組中選出一個最大的值作為代表。 根據第一幅圖用紅色方框圈出的最大值,可以對應的第二幅的矩陣的每個元素。比如第一組在filter2下最大值為-1.這樣一來,原來6 * 6 的矩陣變成了2 * 2的矩陣。
Flatten
我們將矩陣拉直,輸入到全連線網路。
CNN 與全連線網路
其實就是輸入矩陣拉直成向量,然後filter矩陣的元素作為相應連線到的邊的權重。也就是隻連線部分邊的全連線網路。
CNN學習的過程(存在疑問)
對於輸入的影象,經過卷積操作,得到feature map。 對於第k個卷積核、11*11大小的feature map而言,我們首先可以求解 = 然後求解 =arg max 求解使得 最大的時候的x。這時候我們就可以考慮到使用梯度下降的辦法: 。
why Deep Neural Network
我們在保持引數相近的情況下,比較更寬和更高哪個更好。 事實上我們可以發現,更深的網路應用了一種模組化(Modularization)的思路。什麼是模組化呢,我們拿寫程式來舉例。我們不會把所有程式都寫在main函式中,我們會寫很多函式,互相呼叫。這樣一來,我們有一一些函式就可以共用提高效率。在更深的網路中,也是這樣的道理。我們首先用第一層網路抽取很多的重要特徵,第一層的輸出是第二層的輸入,這樣一來,我們就相當於是共用了第一層抽取的結果。再比如說邏輯電路,我們本來用兩個邏輯閘可以實現任何布林計算,但是實際上我們往往會採用多個門組合在一起,但當我們使用多個門的時候電路往往會更加簡單和高效。DNN也是這樣的道理,越深意味著每層的引數更少更加簡單,這樣也可以避免過擬合,用更少的資料完成相同的任務。因為採用DNN,可以更加有效的使用資料,我們可以對資料進行處理成我們想要的樣子,比如像對摺窗花那樣將分散的資料簡單分組。
端對端End to End
端對端意味著只要求輸入與輸出,不在乎中間過程如何處理。