五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

26 網(wǎng)絡(luò)中的網(wǎng)絡(luò) NiN【動手學深度學習v2】

2022-02-18 10:59 作者:如果我是泡橘子  | 我要投稿

NiN


  • 這個網(wǎng)絡(luò)現(xiàn)在用的不多,但是它所提出的很多重要的概念在之后的很多網(wǎng)絡(luò)中都會被用到





LeNet、AlexNet和VGG


  • LeNet、AlexNet和VGG都有一個共同的設(shè)計模式:通過一系列的卷積層匯聚層來提取空間結(jié)構(gòu)特征,然后通過全連接層對特征的表征進行處理
  • AlexNet和VGG對LeNet的改進主要在于如何擴大和加深卷積層和匯聚層這兩個模塊





全連接層的問題


  • 在AlexNet和VGG的最后面都使用了兩個比較大的全連接層,最后再通過一個全連接層作為輸出(全連接層比較占用網(wǎng)絡(luò)參數(shù)空間,整個網(wǎng)絡(luò)的絕大多數(shù)參數(shù)都集中在全連接層)
  • 最重要的問題是會帶來過擬合
  • 假設(shè)使用卷積層的話,參數(shù)的個數(shù)等于輸入的通道數(shù)(Ci) * 輸出的通道數(shù)(Co) * 卷積窗口的高度(k) * 卷積窗口的寬度(k),但是如果使用全連接層的話,它的參數(shù)個數(shù)就等于整個輸入的像素(也就是輸入通道數(shù)) * 輸入的高 * 輸入的寬 * 輸出中所有的像素(也就是輸出通道數(shù))
  • 在卷積層的最后一層的輸出并沒有變成 1 * 1,很多情況下就是 7 * 7,這樣的話其實對于全連接層來說輸入的像素還是比較多的
  • 另外,如果使用全連接層,可能會完全放棄表征的空間結(jié)構(gòu)
  • LeNet中16是最后一個卷積層的輸出通道數(shù),5 * 5表示經(jīng)過卷積操作之后最終輸出壓縮成了5 * 5的大小,120是輸出的隱藏層的大小(下一個全連接層的輸入通道數(shù))
  • AlexNet中最后一個卷積層的輸出通道數(shù)是256
  • VGG最后一個卷積層的輸出通道數(shù)變成了512,經(jīng)過多次卷積操作之后最終輸出的大小也只壓縮到了7 * 7,因此它所占用的內(nèi)存量確實是比較大的,差不多占用700M左右,其中絕大部分參數(shù)都集中在卷積層之后的第一個全連接層



大量的參數(shù)會帶來很多問題


  • 占用大量的內(nèi)存
  • 占用很多的計算帶寬一個很大的矩陣乘法根本不是受限于計算,而是幾乎是受限于不斷訪問內(nèi)存所帶來的限制
  • 很容易過擬合某一層的參數(shù)過多很容易導(dǎo)致模型收斂特別快,反過來講,就需要使用大量的正則化避免該層學到所有的東西





NiN


為了解決這些問題,就提出了NiN

  • NiN的思想是完全不要全連接層(比如2021年由谷歌提出的MLP-Mixer,提出MLP又能夠替代CNN了,但是實際上它和NiN是一個東西,只是NiN認為全連接層不是很好,所以就用卷積層來替代全連接層,不要全連接層;而MLP-Mixer認為卷積層不行,還是得用全連接層,所以實際上是一個東西),在每個像素的通道上分別使用多層感知機,也就是在每個像素位置(針對每個高度和寬度)應(yīng)用一個全連接層。這樣將權(quán)重連接到了每個空間位置,可以將其視為1 * 1的卷積層,或者看作在每個像素位置上獨立作用的全連接層,從另一個角度講,就是將空間維度中的每個像素視為單個樣本,將通道維度視為不同特征



NiN塊


NiN中最重要的概念叫做NiN塊(VGG之后的網(wǎng)絡(luò)基本上都有自己局部的卷積神經(jīng)網(wǎng)絡(luò)架構(gòu),也就是塊狀結(jié)構(gòu))


NiN塊的結(jié)構(gòu)如下圖所示

  • 回顧:卷積層的輸入和輸出由四維張量組成,張量的每個軸分別對應(yīng)樣本、通道、高度和寬度;全連接層的輸入和輸出通常是分別對應(yīng)于樣本和特征的二維張量
  • NiN塊由一個卷積層和兩個全連接層(實際上是窗口大小為1 * 1、步幅為1、無填充的卷積層)組成(因為1 * 1的卷積層等價于全連接層,所以這里使用的是1 * 1的卷積層;步幅為1,無填充,所以卷積層輸出的形狀和輸入的形狀是一樣的,也就是不會改變輸入的形狀,同時也不會改變通道數(shù))
  • NiN塊中兩個1 * 1的卷積層其實是起到了全連接層的作用,這兩個卷積層充當了帶有ReLu激活函數(shù)的逐像素全連接層
  • 1 * 1的卷積運算如下圖所示
  • NiN塊可以認為是一個簡單的神經(jīng)網(wǎng)絡(luò):一個卷積層+兩個全連接層。唯一的不同是這里的全連接層是對每一個像素做全連接,對于每個輸入的每個像素的權(quán)重都是一樣的,不會根據(jù)輸入的具體情況發(fā)生變化,所以可以認為是按照輸入的每個像素逐一做全連接



NiN架構(gòu)


  • 沒有全連接層
  • 交替使用NiN塊和步幅為2的最大池化層(最大池化層的作用的就是高寬減半),逐步減小高寬(輸出的尺寸)增大通道數(shù)
  • 最后使用全局平均池化層得到輸出(全局平均池化層:該池化層的高寬等于輸入的高寬,等價于對每一個通道取平均值(這里應(yīng)該是取平均值吧,視頻中沐神說的是最大值,應(yīng)該是口誤吧),作為這個類別的預(yù)測,再通過softmax就能得到每個類別的概率了),其輸入通道數(shù)是標簽類別數(shù),最后不需要使用全連接層,也是一個比較極端的設(shè)計



VGG net 和 NiN net


  • VGG塊由多個卷積層和一個最大池化層組成;NiN塊由一個卷積層和兩個當做全連接層用的1 * 1的卷積層
  • VGG網(wǎng)絡(luò)由四個VGG塊和兩個大的全連接層,最后通過一個輸出通道數(shù)為1000的全連接層得到1000類
  • NiN網(wǎng)絡(luò)由一個NiN塊和一個步幅為2、3 * 3的最大池化層不斷重復(fù),如果將最后重復(fù)部分的NiN塊的通道數(shù)設(shè)置為標簽類別的數(shù)量的話,則最后就可以用全局平均池化層(global average pooling layer)代替全連接層來得到輸出(一個對數(shù)幾率(logits)),也就是對每個類的預(yù)測(這里說NiN網(wǎng)絡(luò)是由一個NiN塊和一個最大池化層不斷重復(fù)堆疊組成的,為什么上圖中NiN網(wǎng)絡(luò)里每個最大池化層都是一樣的,而每個NiN塊都長得不一樣?NiN塊中第一層的卷積窗口形狀通常是由用戶設(shè)置,隨后的卷積窗口形狀固定為1 * 1,這里應(yīng)該是受到AlexNet的啟發(fā),使用了窗口形狀為11 * 11、5 * 5、3 * 3的卷積層,輸出通道數(shù)與AlexNet中相同)
  • 第一個NiN塊的第一個卷積層的步幅為什么是4?通過長為4的步幅的卷積操作使得輸出的尺寸大幅度減小
  • NiN完全取消了全連接層,這樣做的好處是減少了模型所需參數(shù)的數(shù)量,但是在實踐中,這種設(shè)計有時會增加模型的訓練時間





總結(jié)


  • NiN的核心思想是NiN塊,NiN塊是一個卷積層加上兩個1 * 1的卷積層作為全連接層來使用(也就是說對每個像素增加了非線性,或者說對每個像素的通道數(shù)做了全連接層,而且是非線性的,因為有兩層)
  • NiN使用全局平均池化層(通道數(shù)量為所需的輸出數(shù)量)來替代VGG和AlexNet中的全連接層(全局全連接層因為比較大,所以也不需要學一個比較大的全連接層),這樣做的好處是不容易過擬合顯著減少網(wǎng)絡(luò)參數(shù)的數(shù)量
  • 整體來講,NiN的架構(gòu)比較簡單,就是NiN塊和最大池化層的重復(fù)堆疊,直到最后的全局平均池化層,因為完全放棄了全連接層,所以它的參數(shù)個數(shù)大大減少了,使得參數(shù)的總量與類別數(shù)的多少無關(guān)
  • NiN的設(shè)計影響了許多后續(xù)卷積神經(jīng)網(wǎng)絡(luò)的設(shè)計





Q&A


  • 1、一個超級寬的單隱藏層MLP難以訓練是因為顯存不夠大嗎?
    ?
    QA P3 - 00:07
    ?


  • 2、Pytorch跑起來是不是就要占用4G左右的顯存,為什么我6G的顯存VGG跑起來剛好跑125個batchsize?
    ?
    QA P3 - 00:55
    ?


  • 3、請問Pytorch或者MXNet訓練的模型上線,一般采用什么部署到生產(chǎn)環(huán)境,全部用C++重寫嗎,還是采用tensorflow serving的解決方案呢?
    ?
    QA P3 - 05:39
    ?


  • 4、這里做分類不用softmax嗎?
    ?
    QA P3 - 08:00
    ?


  • 5、adaptive average pooling相對于softmax有什么優(yōu)勢嗎?
    ?
    QA P3 - 08:42
    ?


  • 6、全局的平均池化層在設(shè)計上是不是很關(guān)鍵,所帶來的影響有哪些?
    ?
    QA P3 - 10:08
    ?

每次卷積的后面都能夠加全局最大池化層,它唯一的作用是將卷積輸出feature的高寬壓縮成為1 * 1,通道數(shù)不變,它的主要效果是將輸入變小了,而且它沒有可學習的參數(shù)。加入全局池化層可以讓計算變得更簡單,但是它最主要的好處是降低了模型的復(fù)雜度,加入全局平均池化層同時也會提升模型的泛化性能,提高模型的精度,壞處就是模型的收斂變慢了(絕大部分情況下在考慮模型時,模型的精度優(yōu)先于模型的收斂速度)


  • 7、為什么NiN塊中使用2個1 *1的卷積層,而不是1個或者3個,是由于參數(shù)數(shù)量的原因嗎?
    ?
    QA P3 - 12:47
    ?


  • 8、請再解釋一下兩個1 *1的卷積層對每個像素增加了非線性性是什么意思?
    ?
    QA P3 - 13:27
    ?

這意味著對每個像素的輸入通道數(shù)做了一個有兩個隱含層的MLP,MLP中有ReLu函數(shù),因此不管是1層還是2層都是增加了非線性性



  • 9、可以演示一下預(yù)測代碼嗎,我用了幾次都有問題
    ?
    QA P3 - 14:27
    ?


  • 10、Pytorch構(gòu)建的網(wǎng)絡(luò)權(quán)重是自動初始化的嗎?
    ?
    QA P3 - 16:08
    ?





----end----

其他參考:

1、《動手學深度學習》課程安排,https://courses.d2l.ai/zh-v2/assets/pdfs/part-1_10.pdf

2、《動手學深度學習》,https://zh-v2.d2l.ai/chapter_convolutional-modern/nin.html

3、MLP-Mixer,https://arxiv.org/abs/2105.01601

26 網(wǎng)絡(luò)中的網(wǎng)絡(luò) NiN【動手學深度學習v2】的評論 (共 條)

分享到微博請遵守國家法律
潼关县| 福安市| 拜泉县| 嘉兴市| 马尔康县| 汶川县| 罗甸县| 盐边县| 渝北区| 博爱县| 民乐县| 田阳县| 唐河县| 临海市| 博湖县| 西充县| 青岛市| 桑植县| 肥西县| 安吉县| 玉山县| 巩留县| 丰都县| 沛县| 荣昌县| 饶河县| 鄂托克旗| 东源县| 兴和县| 大竹县| 长兴县| 宁津县| 托克逊县| 治县。| 读书| 孟州市| 固始县| 广西| 洪泽县| 中阳县| 连城县|