1. 程式人生 > 其它 >動手學深度學習 | 網路中的網路NiN | 24

動手學深度學習 | 網路中的網路NiN | 24

目錄

NiN

NiN Network in Network,網路中的網路,這個網路現在用的不多,幾乎很少被用到,但是它裡面提出了比較重要的一些概念,在後面很多網路中都會持續的被用到。

MLP其實是不錯的,但是缺點就是引數量實在是太大了!

卷積層的引數相對於MLP會少很多,而且\(1*1\)卷積是可以達到於MLP的相同效果。

引數多會帶來很多問題:一個是會佔用很多記憶體,一個是會佔用很多的計算頻寬,還有一個最重要的事情就是MLP的引數過多,非常容易導致模型的過擬合。

為了避免上述MLP帶來的問題,NiN的思想就是完全不要全連線層,而是使用\(1*1\)的卷積來替代。

NiN塊,VGG也有VGG塊,後面基本卷積神經網都有自己的區域性架構。

NiN無全連線層,最後使用一個全域性平均池化層得到輸出。

所謂的全域性池化層,就是池化層的高寬,是等於輸入的高寬,就等價對每個通道,把最大值給拿出來。當然一般要分多少類,那麼最後的輸出通道數就為多少。

NiN是包括最後也不使用MLP,這也是一個非常極端的一個設計。

程式碼

QA

  1. 為什麼這裡分類最後沒有使用softmax?

不是的,都是有使用softmax的,只不過softmax是寫在train函式之中。

softmax是有一個自己的計算公式的(就可以看做是一個模型),然後分類問題使用的交叉熵損失函式。

一個最簡潔的softmax模型是包含在Linear中的 net = nn.Sequential(nn.Flatten(),nn.Linear(784,10))

所以GAP不是去替代softmax,而是去替代全連線層。

  1. GAP的設計是不是很關鍵?

這個設計思想給後面帶來了非常大的影響,後面大家發現這個東西,挺好用的。

GAP是沒有學習的引數的,它就是最後把輸出壓縮成(1,1)。可以理解成GAP的最大作用就是降低了模型的複雜性。使用GAP會大大提高模型的泛化性。

但是GAP的一個缺點就是會讓收斂變的很慢,反過來看,之所以AlexNet那些可以收斂的那麼快,是因為最後的那兩個MLP太厲害了,可以很好的進行資料的擬合。也就是AlexNet和VGG一般epoch=50即可,但是NiN可能epoch=120,這樣掃多幾次讓其收斂。

絕大部分時候,訓練久一點不要緊,精度好才是關鍵。

  1. 為什麼NiN是使用了2個\(1*1\)的卷積,而不是3個?

沐神認為是試出來...