最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

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

ResNet論文逐段精讀【論文精讀】

2021-12-09 13:48 作者:如果我是泡橘子  | 我要投稿

ResNet


1、introduction


深度神經(jīng)網(wǎng)絡好在可以加很多層把網(wǎng)絡變得特別深,然后不同程度的層會得到不同等級的feature,比如低級的視覺特征或者是高級的語義特征


提出問題:隨著網(wǎng)絡越來越深,梯度就會出現(xiàn)爆炸或者消失

  • 解決他的辦法就是:1、在初始化的時候要做好一點,就是權重在隨機初始化的時候,權重不要特別大也不要特別小。2、在中間加入一些normalization,包括BN(batch normalization)可以使得校驗每個層之間的那些輸出和他的梯度的均值和方差相對來說比較深的網(wǎng)絡是可以訓練的,避免有一些層特別大,有一些層特別小。使用了這些技術之后是能夠訓練(能夠收斂),雖然現(xiàn)在能夠收斂了,但是當網(wǎng)絡變深的時候,性能其實是變差的(精度會變差)
  • 文章提出出現(xiàn)精度變差的問題不是因為層數(shù)變多了,模型變復雜了導致的過擬合,而是因為訓練誤差也變高了(overfitting是說訓練誤差變得很低,但是測試誤差變得很高),訓練誤差和測試誤差都變高了,所以他不是overfitting。雖然網(wǎng)絡是收斂的,但是好像沒有訓練出一個好的結果



深入講述了深度增加了之后精度也會變差

  • 考慮一個比較淺一點的網(wǎng)絡和他對應的比較深的版本(在淺的網(wǎng)絡中再多加一些層進去),如果錢的網(wǎng)絡效果還不錯的話,神的網(wǎng)絡是不應該變差的:深的網(wǎng)絡新加的那些層,總是可以把這些層學習的變成一個identity mapping輸入是x,輸出也是x,等價于可以把一些權重學成比如說簡單的n分之一,是的輸入和輸出是一一對應的),但是實際情況是,雖然理論上權重是可以學習成這樣,但是實際上做不到:假設讓SGD去優(yōu)化,深層學到一個跟那些淺層網(wǎng)絡精度比較好的一樣的結果,上面的層變成identity(相對于淺層神經(jīng)網(wǎng)絡,深層神經(jīng)網(wǎng)絡中多加的那些層全部變成identity),這樣的話精度不應該會變差,應該是跟淺層神經(jīng)網(wǎng)絡是一樣的,但是實際上SGD找不到這種最優(yōu)解
  • 這篇文章提出顯式地構造出一個identity mapping,使得深層的神經(jīng)網(wǎng)絡不會變的比相對較淺的神經(jīng)網(wǎng)絡更差,它將其稱為deep residual learning framework
  • 要學的東西叫做H(x),假設現(xiàn)在已經(jīng)有了一個淺的神經(jīng)網(wǎng)絡,他的輸出是x,然后要在這個淺的神經(jīng)網(wǎng)絡上面再新加一些層,讓它變得更深。新加的那些層不要直接去學H(x),而是應該去學H(x)-x,x是原始的淺層神經(jīng)網(wǎng)絡已經(jīng)學到的一些東西,新加的層不要重新去學習,而是去學習學到的東西和真實的東西之間的殘差,最后整個神經(jīng)網(wǎng)絡的輸出等價于淺層神經(jīng)網(wǎng)絡的輸出x和新加的神經(jīng)網(wǎng)絡學習殘差的輸出之和,將優(yōu)化目標從H(x)轉變成為了H(x)-x
  • 上圖中最下面的紅色方框表示所要學習的H(x)
  • 藍色方框表示原始的淺層神經(jīng)網(wǎng)絡
  • 紅色陰影方框表示新加的層
  • o表示最終整個神經(jīng)網(wǎng)絡的輸出
  • 這樣的好處是:只是加了一個東西進來,沒有任何可以學的參數(shù),不會增加任何的模型復雜度,也不會使計算變得更加復雜,而且這個網(wǎng)絡跟之前一樣,也是可以訓練的,沒有任何改變



非常深的residual nets非常容易優(yōu)化,但是如果不添加殘差連接的話,效果就會很差。越深的網(wǎng)絡,精度就越高



introduction是摘要的擴充版本,也是對整個工作比較完整的描述





2、related work


一篇文章要成為經(jīng)典,不見得一定要提出原創(chuàng)性的東西,很可能就是把之前的一些東西很巧妙的放在一起,能解決一個現(xiàn)在大家比較關心難的問題



殘差連接如何處理輸入和輸出的形狀是不同的情況:

  • 第一個方案是在輸入和輸出上分別添加一些額外的0,使得這兩個形狀能夠對應起來然后可以相加
  • 第二個方案是之前提到過的全連接怎么做投影,做到卷積上,是通過一個叫做1*1的卷積層,這個卷積層的特點是在空間維度上不做任何東西,主要是在通道維度上做改變。所以只要選取一個1*1的卷積使得輸出通道是輸入通道的兩倍,這樣就能將殘差連接的輸入和輸出進行對比了。在ResNet中,如果把輸出通道數(shù)翻了兩倍,那么輸入的高和寬通常都會被減半,所以在做1*1的卷積的時候,同樣也會使步幅為2,這樣的話使得高寬和通道上都能夠匹配上



implementation中講了實驗的一些細節(jié)

  • 把短邊隨機的采樣到256和480(AlexNet是直接將短邊變成256,而這里是隨機的)。隨機放的比較大的好處是做隨機切割,切割成224*224的時候,隨機性會更多一點
  • 將每一個pixel的均值都減掉了
  • 使用了顏色的增強(AlexNet上用的是PCA,現(xiàn)在我們所使用的是比較簡單的RGB上面的,調節(jié)各個地方的亮度、飽和度等)
  • 使用了BN(batch normalization)
  • 所有的權重全部是跟另外一個paper中的一樣(作者自己的另外一篇文章)。注意寫論文的時候,盡量能夠讓別人不要去查找別的文獻就能夠知道你所做的事情
  • 批量大小是56,學習率是0.1,然后每一次當錯誤率比較平的時候除以10
  • 模型訓練了60*10^4個批量。建議最好不要寫這種iteration,因為他跟批量大小是相關的,如果變了一個批量大小,他就會發(fā)生改變,所以現(xiàn)在一般會說迭代了多少遍數(shù)據(jù),相對來說穩(wěn)定一點
  • 這里沒有使用dropout,因為沒有全連接層,所以dropout沒有太大作用
  • 在測試的時候使用了標準的10個crop testing(給定一張測試圖片,會在里面隨機的或者是按照一定規(guī)則的去采樣10個圖片出來,然后再每個子圖上面做預測,最后將結果做平均)。這樣的好處是因為訓練的時候每次是隨機把圖片拿出來,測試的時候也大概進行模擬這個過程,另外做10次預測能夠降低方差。
  • 采樣的時候是在不同的分辨率上去做采樣,這樣在測試的時候做的工作量比較多,但是在實際過程中使用比較少





4、experiments


  • 如何評估ImagNet以
  • 各個不同版本的ResNet是如何設計的



首先闡述了ImageNet



描述了plain networks

沒有帶殘差的時候,使用了一個18層和34層

  • 上表是整個ResNet不同架構之間的構成信息(5個版本)
  • 第一個7*7的卷積是一樣的
  • 接下來的pooling層也是一樣的
  • 最后的全連接層也是一樣的(最后是一個全局的pooling然后再加一個1000的全連接層做輸出)
  • 不同的架構之間,主要是中間部分不一樣,也就是那些復制的卷積層是不同的
  • conv2.x:x表示里面有很多不同的層(塊)
  • 【3*3,64】:46是通道數(shù)
  • 模型的結構為什么取成表中的結構,論文中并沒有細講,這些超參數(shù)是作者自己調出來的,實際上這些參數(shù)可以通過一些網(wǎng)絡架構的自動選取
  • flops:整個網(wǎng)絡要計算多少個浮點數(shù)運算。卷積層的浮點運算等價于輸入的高乘以寬乘以通道數(shù)乘以輸出通道數(shù)再乘以核的窗口的高和寬



  • 上圖中比較了18層和34層在有殘差連接和沒有殘差連接的結果
  • 左圖中,紅色曲線表示34的驗證精度(或者說是測試精度)
  • 左圖中,粉色曲線表示的是34的訓練精度
  • 一開始訓練精度是要比測試精度高的,因為在一開始的時候使用了大量的數(shù)據(jù)增強,使得尋來你誤差相對來說是比較大的,而在測試的時候沒有做數(shù)據(jù)增強,噪音比較低,所以一開始的測試誤差是比較低的
  • 圖中曲線的數(shù)值部分是由于學習率的下降,每一次乘以0.1,對整個曲線來說下降就比較明顯。為什么現(xiàn)在不使用乘0.1這種方法:在什么時候乘時機不好掌控,如果乘的太早,會后期收斂無力,晚一點乘的話,一開始找的方向更準一點,對后期來說是比較好的
  • 上圖主要是想說明在有殘差連接的時候,34比28要好;另外對于34來說,有殘差連接會好很多;其次,有了殘差連接以后,收斂速度會快很多,核心思想是說,在所有的超參數(shù)都一定的情況下,有殘差的連接收斂會快,而且后期會好



輸入輸出形狀不一樣的時候怎樣做殘差連接

  • 填零
  • 投影
  • 所有的連接都做投影:就算輸入輸出的形狀是一樣的,一樣可以在連接的時候做個1*1的卷積,但是輸入和輸出通道數(shù)是一樣的,做一次投影


對比以上三種方案

  • A表示填0
  • B表示在不同的時候做投影
  • C表示全部做投影
  • B和C的表現(xiàn)差不多,但是還是要比A好一點
  • B和C雖然差不多,但是計算復雜度更高,B對計算量的增加比較少,作者采用了B



怎樣構建更深的ResNet

如果要做50或者50層以上的,會引入bottleneck design

  • 左圖是之前的設計,當通道數(shù)是64位的時候,通道數(shù)不會發(fā)生改變
  • 如果要做到比較深的話,可以學到更多的模式,可以把通道數(shù)變得更大,右圖從64變到了256
  • 當通道數(shù)變得更大的時候,計算復雜度成平方關系增加,這里通過1個1*1的卷積,將256維投影回到64維,然后再做通道數(shù)不變的卷積,然后再投影回256(將輸入和輸出的通道數(shù)進行匹配,便于進行對比)。等價于先對特征維度降一次維,在降一次維的上面再做一個空間上的東西,然后再投影回去
  • 雖然通道數(shù)是之前的4倍,但是在這種設計之下,二者的算法復雜度是差不多的
    ?
    32:25
    ?



ImageNet標號的錯誤率本來挺高的,估計有1%



CIFAR-10是一個很小的數(shù)據(jù)集,跑起來相對來說比較容易,32*32,五萬個樣本,10類的數(shù)據(jù)集



在整個殘差連接,如果后面新加上的層不能讓模型變得更好的時候,因為有殘差連接的存在,新加的那些層應該是不會學到任何東西,應該都是靠近0的,這樣就等價于就算是訓練了1000層的ResNet,但是可能就前100層有用,后面的900層基本上因為沒有什么東西可以學的,基本上就不會動了



這篇文章沒有結論



mAP:目標檢測上最常見的一個精度,錨框的平均精度,越高越好



為什么ResNet訓練起來比較快?

  • 一方面是因為梯度上保持的比較好,新加一些層的話,加的層越多,梯度的乘法就越多,因為梯度比較小,一般是在0附近的高斯分布,所以就會導致在很深的時候就會比較?。ㄌ荻认В?。雖然batch normalization或者其他東西能夠對這種狀況進行改善,但是實際上相對來說還是比較小,但是如果加了一個ResNet的話,它的好處就是在原有的基礎上加上了淺層網(wǎng)絡的梯度,深層的網(wǎng)絡梯度很小沒有關系,淺層網(wǎng)絡可以進行訓練,變成了加法,一個小的數(shù)加上一個大的數(shù),相對來說梯度還是會比較大的。也就是說,不管后面新加的層數(shù)有多少,前面淺層網(wǎng)絡的梯度始終是有用的,這就是從誤差反向傳播的角度來解釋為什么訓練的比較快
  • 在CIFAR上面加到了1000層以上,沒有做任何特別的regularization,然后效果很好,overfitting有一點點但是不大。SGD收斂是沒有意義的,SGD的收斂就是訓練不動了,收斂是最好收斂在比較好的地方。做深的時候,用簡單的機器訓練根本就跑不動,根本就不會得到比較好的結果,所以只看收斂的話意義不大,但是在加了殘差連接的情況下,因為梯度比較大,所以就沒那么容易收斂,所以導致一直能夠往前(SGD的精髓就是能夠一直能跑的動,如果哪一天跑不動了,梯度沒了就完了,就會卡在一個地方出不去了,所以它的精髓就在于需要梯度夠大,要一直能夠跑,因為有噪音的存在,所以慢慢的他總是會收斂的,所以只要保證梯度一直夠大,其實到最后的結果就會比較好



為什么ResNet在CIFAR-10那么小的數(shù)據(jù)集上他的過擬合不那么明顯?

open question

雖然模型很深,參數(shù)很多,但是因為模型是這么構造的,所以使得他內在的模型復雜度其實不是很高,也就是說,很有可能加了殘差鏈接之后,使得模型的復雜度降低了,一旦模型的復雜度降低了,其實過擬合就沒那么嚴重了

  • 所謂的模型復雜度降低了不是說不能夠表示別的東西了,而是能夠找到一個不那么復雜的模型去擬合數(shù)據(jù),就如作者所說,不加殘差連接的時候,理論上也能夠學出一個有一個identity的東西(不要后面的東西),但是實際上做不到,因為沒有引導整個網(wǎng)絡這么走的話,其實理論上的結果它根本過不去,所以一定是得手動的把這個結果加進去,使得它更容易訓練出一個簡單的模型來擬合數(shù)據(jù)的情況下,等價于把模型的復雜度降低了



這篇文章的residual和gradient boosting是不一樣的

  • gradient boosting是在標號上做residual
  • 這篇文章是在feature維度上





----end----

ResNet論文逐段精讀【論文精讀】的評論 (共 條)

分享到微博請遵守國家法律
高雄市| 南投市| 阜城县| 双城市| 清流县| 台南县| 宝兴县| 怀仁县| 铜梁县| 台湾省| 舞钢市| 邛崃市| 永春县| 延吉市| 广州市| 拉孜县| 云阳县| 右玉县| 浏阳市| 宜兰市| 镇江市| 峨边| 临漳县| 尤溪县| 沧源| 博客| 阿瓦提县| 宣汉县| 凯里市| 攀枝花市| 威信县| 丹棱县| 家居| 巴东县| 徐州市| 乐业县| 农安县| 枣强县| 玉屏| 澳门| 清徐县|