CS231n 課後作業第二講 : Assignment 2(含代碼實現)| 分享總結

2020-11-29 雷鋒網

雷鋒網AI研習社按:CS231n是史丹福大學開設的計算機視覺與深度學習的入門課程,授課內容在國內外頗受好評。其配套的課後作業質量也頗高,因此雷鋒網AI研習社在近期的線上公開課上請來了一位技術大牛為大家來講解這門課的配套作業。

本文根據AI研習社公開課上的直播視頻內容整理而成,主要介紹CS231n 課後作業第二套Assignment 2的完成思路與重點部分代碼實現。如果你還沒開始聽CS231n,可直接點擊課程連結觀看回放視頻。

王煦中,CS碩士,主要研究方向為自然語言處理與深度學習。知乎專欄喵神大人的深度工坊(http://t.cn/RTc9wfy)作者,日語及ACGN愛好者。

分享主題:CS231n 課後作業第二講 : Assignment 2(含代碼實現)作業連結:https://github.com/Observerspy/CS231n

分享提綱:

Part 1 Fully-connected Neural Network 

Part 2 Batch Normalization

Part 3 Dropout

Part 4 Convolutional Networks

Part 5 Tensorflow on CIFAR-10

第一部分分享主要是全連接神經網絡,這裡主要是對代碼進行模塊化,把每一層都抽象出來,分別實現每一層的前向和反向部分,實現多層神經網絡。第二和第三部分講的是神經網絡中兩個的重要技巧,對網絡訓練有很大的提升。本次作業中比較難的部分是卷積神經網絡的實現,包括正向和反向的推導過程。

第一個部分是對代碼的模塊化處理,實現從兩層到多層神經網絡。

關於Update rules

第一個改變是加入了動量更新,也就是慣性。第二個是RMSProp(自適應學習率),第三個是Adam(兩者結合),其實是上面兩個方法的結合,如果拿不準使用哪個方法,就用Adam。

為什麼需要BN(Batch Normalization )

傳統機器學習往往需要對輸入數據做一個歸一化,通常使用的是零均值和方差歸一,這樣會保證輸入的數據特徵會有比較好的分布,使得算法可以比好好的學習。對於深度學習神經網絡,使用BN使得每一層分布都保持在良好範圍內。

BN的原理

在求均值,求方差,歸一化這三步做完之後,每一層的數據分布都是標準正太分布,導致其完全學習不到輸入數據的特徵。BN第四步中最關鍵的是兩個參數,這兩個參數對歸一化後的分母進行縮放和平移,通過網絡自己學習平移和縮放來保留一定的特徵。

訓練過程

前向就是計算minibatch的均值和方差,然後對minibatch做normalize和scale、shift。測試的時候沒有minibatch,通過使用基於momentum的指數衰減,從而估計出均值和方差。

反向過程

BN的作用

可以有效減緩過擬合,減小不好的初始化影響,可以用大一點的學習率。通常放在激勵函數前效果好一點。

Dropout 原理

訓練時以概率P保留神經元,測試時所有神經元都參與。通常在測試的時候使用inverted dropout多移除一個p保證訓練預測分布的統一。

Dropout的作用

可以有效緩解過擬合,通常dropout放在激勵函數的後面或者全連接層後。

接下裡來看怎麼實現一個卷積神經網絡

卷積神經網絡通常有三個單元結構,分別是卷積核,激活函數,池化層。先看卷積核,首先明確輸入x和卷積核的形狀(數量,通道,高,寬)。

卷積核

這裡的卷積和通信原理裡的卷積還是稍有區別的,在這裡其實只是卷積核和相應的區域進行元素乘,然後求和,課程官網給的說明十分形象生動。

也就是每個卷積核分別在每個通道上和對應區域進行元素乘,然後求和,對應圖中:(-3(通道1元素乘後求和) + -1(通道2元素乘後求和) + 0 (通道3元素乘後求和))(三個通道求和) + 1(bias_0) = -3(out的第一個格子裡的值)

所以,關鍵問題就是根據步長如何確定x對應區域,這裡需要對Hnew(下標i)和Wnew(下標j)進行雙循環。選好區域直接和每個卷積(下標k)核作元素乘就行了,注意sum的時候我們其實是在(C, H, W)上作的,因此axis=(1, 2, 3)。這時候一個輸出out[:, k , i, j]就計算好了。

所以上述一共套了i, j ,k三層循環,循環完畢後out再加上bias就行了。注意b的形狀(F,),因此要先把b擴展成和out一樣的形狀:b[None, :, None, None](None相當於np.newaxis)

以上就是前向計算,接下來是反向計算。

反向計算首先明確我們要求什麼。求dx,dw和db。

卷積核的三個導數具體的求解過程,請關注AI慕課學院視頻回放。

池化層

pooling同樣有步長,確定輸出形狀的公式,計算輸出形狀並初始化,max pooling顧名思義就是取這個pooling大小區域內的max值。注意axis=(2, 3)。


反向和ReLU、DropOut是類似的,也就是說只有剛才前向通過的才允許繼續傳遞梯度。

max_mask形狀是(HH, WW),為了和x_padded_mask形狀對應也要擴展。然後dout和這個temp_binary_mask元素乘即可。同樣注意dout是由i,j確定的,因此形狀需要擴展。

以前我們做的BN形狀是(N, D),這裡不過是將(N, C, H, W)reshape為(N*H*W, C)。

最後進入TensorFlow

這裡強調一點,在使用BN時請務必注意:在你的優化器上套上下面圖中的兩行代碼,另外需要注意tf.layers.batch_normalization()中的is_training(是一個tf.placeholder)在訓練和測試時的設置,如果要使用dropout也是類似的。

以上就是本次的課後作業指導分享。

雷鋒網(公眾號:雷鋒網)AI慕課學院提供本次視頻回放,歡迎觀看。

微信公眾號:AI研習社(ID: okweiwu)定期邀請各路大神直播分享,關注後第一時間與嘉賓直播互動。

雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 第二彈!CS231n 2017中文字幕視頻:如何訓練機器進行視覺識別?
    CS231n 的全稱是 CS231n: Convolutional Neural Networks for Visual Recognition,即面向視覺識別的卷積神經網絡。該課程是史丹福大學計算機視覺實驗室推出的課程。需要注意的是,我們這次翻譯的是 2017 春季(4 月至 6 月)的最新版本。
  • 直播分享|手把手教你寫 2019 最新版 CS231n 作業
    AI 研習社譯製的雙語課程廣受好評相信每一個學習人工智慧的同學,都聽說過史丹福大學計算機視覺實驗室推出的 CS231n 這門課。分享主題李飛飛 CS231n 斯坦福深度視覺識別 2019 年作業實戰分享分享背景CS231n為史丹福大學計算機視覺公開課
  • 教程| 斯坦福CS231n 2017最新課程:李飛飛詳解深度學習的框架實現...
    作者:李飛飛等機器之心編譯參與:Smith、蔣思源史丹福大學的課程 CS231n (Convolutional Neural Networks for Visual Recognition) 作為深度學習和計算機視覺方面的重要基礎課程,在學界廣受推崇。
  • CS231n 2017 今天正式開課!雙語字幕版獨家上線!
    雷鋒網:CS231n 2017雙語字幕版獨家上線!今天正式開課!哈哈哈,距離斯坦福計算機視覺課程結束5個月,2017春季CS231n中文版終於上線了,課程中文版已經在AI慕課學院(mooc.ai )發布( free free free ),11月10日正式開課,預計持續12周!
  • 英國assignment寫作知識 海外留學生assignment寫作方法技巧分享
    英國assignment寫作方法技巧分享Tips on Assignment Writing methods in The UK從同學們拿到國外大學offer的那一刻,就意味著已經是準留學生了,差的就只是到學校去報到而已,這也僅僅是同學們留學之旅的開始。
  • 【Hello NLP】CS224n筆記[4]:自然語言中的依存分析(Dependency Parsing)
    比方從第二行,這個時候Stack中只有[Root,I],不構成依賴關係,所以我們需要從Buffer中「進貨」了,因此採取的Action是Shift(把Buffer中的首個詞,移動到Stack中),於是就到了第三行。
  • 斯坦福CS224n《基於深度學習的NLP》課程更新,C.Manning主講
    cs224n官網連結:http://web.stanford.edu/class/cs224n/index.html2017年本課程視頻觀看地址(油管):https://www.youtube.com/playlist?
  • 2011年實用口語練習:Assignment 家庭作業
    Assignment 家庭作業  一、Talk show 【脫口而出】  1、What homework are we having today?  今天又什麼家庭作業?  What is the homework for today?
  • 斯坦福 CS224d 中英字幕版重磅上線
    課程大綱第一講 - NLP和深度學習入門第二講 - 詞向量表示: word2vec第三講 - 高級詞向量表示第四講 - Word Window 分類與神經網絡第五講 - 反向傳播和項目建議第六講 - 依賴分析第七講 - TensorFlow
  • 302頁吳恩達Deeplearning.ai課程筆記,詳記基礎知識與作業代碼
    1.2.1 介紹必要的 Python 工具包;1.2.2 介紹數據集的結構;1.2.3 介紹整個學習算法的宏觀架構;1.2.4 介紹構建算法的基本步驟;1.2.5 和 1.2.6 總結前述內容進行代碼實現,並進行了可視化分析;1.2.7 介紹如何用自己的數據集訓練該神經網絡;1.2.8 展示了 logistic 回歸神經網絡的完整代碼。
  • 青年大學習第十季「十四五」與青年8道課後習題作業答案
    青年大學習第十季特輯「十四五」與青年的課後習題有8道題。下面小編分享青年大學習第10季特輯「十四五」與青年所有課後習題作業答案。  青年大學習第十季特輯「十四五」與青年所有課後習題作業答案匯總  第一題:黨的十九屆五中全會指出,我國已轉向____發展階段
  • VBA代碼解決方案第55講:VBA代碼中,如何判斷是否為數值
    大家好,我們今日繼續講解VBA代碼解決方案的第55講內容:VBA代碼中,如何判斷是否為數值。本節的利用價值非常大,在INPUTBOX中,在窗口的控制項中,這種判斷會隨處可見,這裡需要大家注意點是在VBA中和EXCEL中判斷數值的函數是不一樣的,大家是否還記得在EXCEL函數中利用的函數嗎?