史丹佛CS231n課程筆記純乾貨1
CS231n的全稱是CS231n:
Convolutional Neural Networks for Visual Recognition,即面向視覺識別的卷積神經網路。該課程是史丹佛大學計算機視覺實驗室推出的課程。目前大家說CS231n,大都指的是2016年冬季學期(一月到三月)的版本。
1. 分類器中L1和L2比較。
在面對兩個向量之間的差異時,L2比L1更加不能容忍這些差異,相對於1個巨大的差異,L2距離更傾向於接受多箇中等程度的差異。
2. k-Nearest Neighbor分類器存在以下不足
分類器必須記住所有訓練資料並將其儲存起來,以便於未來測試資料用於比較。這在儲存空間上是低效的,資料集的大小很容易就以GB計。對一個測試影像進行分類需要和所有訓練影像作比較,演算法計算資源耗費高。
Nearest Neighbor分類器在某些特定情況(比如資料維度較低)下,可能是不錯的選擇。但是在實際的影像分類工作中,很少使用。
實際應用流程:
1) 預處理你的資料:對你資料中的特徵進行歸一化(normalize),讓其具有零平均值(zeromean)和單位方差(unit variance)。
2) 如果資料是高維資料,考慮使用降維方法,比如PCA或隨機投影。
3) 將資料隨機分入訓練集和驗證集。按照一般規律,70%-90% 資料作為訓練集。如果需要預測的超引數很多,那麼就應該使用更大的驗證集來有效地估計它們。如果擔心驗證集數量不夠,那麼就嘗試交叉驗證方法。
4) 在驗證集上調優,嘗試足夠多的k值,嘗試L1和L2兩種範數計算方式。
5) 如果分類器跑得太慢,嘗試使用Approximate Nearest Neighbor庫(比如FLANN)來加速這個過程,其代價是降低一些準確率。
6) 對最優的超引數做記錄。千萬不要在最終的分類器中使用驗證集資料,這樣做會破壞對於最優引數的估計。直接使用測試集來測試用最優引數設定好的最優模型,得到測試集資料的分類準確率,並以此作為你的kNN分類器在該資料上的效能表現。
3. 驗證集、交叉驗證集和超引數調優
特別注意:決不能使用測試集來進行調優。測試資料集只使用一次,即在訓練完成後評價最終的模型時使用。調優策略從訓練集中取出一部分資料用來調優,我們稱之為驗證集(validation set)。把訓練集分成訓練集和驗證集。使用驗證集來對所有超引數調優。最後只在測試集上跑一次並報告結果。
交叉驗證:
常用的資料分割模式。給出訓練集和測試集後,訓練集一般會被均分。這裡是分成5份。前面4份用來訓練,黃色那份用作驗證集調優。如果採取交叉驗證,那就各份輪流作為驗證集。最後模型訓練完畢,超引數都定好了,讓模型跑一次(而且只跑一次)測試集,以此測試結果評價演算法。
4. 線性分類器
將影像看做高維度的點:既然影像被伸展成為了一個高維度的列向量,那麼我們可以把影像看做這個高維度空間中的一個點(即每張影像是3072維空間中的一個點)。整個資料集就是一個點的集合,每個點都帶有1個分類標籤。
如下圖,影像空間的示意圖。其中每個影像是一個點,有3個分類器。以紅色的汽車分類器為例,紅線表示空間中汽車分類分數為0的點的集合,紅色的箭頭表示分值上升的方向。所有紅線右邊的點的分數值均為正,且線性升高。紅線左邊的點分值為負,且線性降低。
5. 損失函式
多類支援向量機損失Multiclass Support Vector Machine Loss
第i個資料中包含影像的畫素和代表正確類別的標籤。評分函式輸入畫素資料,然後通過公式來計算不同分類類別的分值。這裡我們將分值簡寫為s。比如,針對第j個類別的得分就是第j個元素:。針對第i個資料的多類SVM的損失函式定義如下:
SVM的損失函式想要正確分類類別的分數比不正確類別分數高,而且至少要高。如果不滿足這點,就開始計算損失值。
正則化(Regularization)
我們希望能向某些特定的權重W新增一些偏好,對其他權重則不新增,以此來消除模糊性。這一點是能夠實現的,方法是向損失函式增加一個正則化懲罰(regularization penalty)R(W)部分。最常用的正則化懲罰是L2正規化,L2正規化通過對所有引數進行逐元素的平方懲罰來抑制大數值的權重:
包含正則化懲罰後,就能夠給出完整的多類SVM損失函式了,它由兩個部分組成:資料損失(data loss),即所有樣例的的平均損失Li,以及正則化損失(regularization loss)。完整公式如下所示:
將其展開完整公式是:
Softmax分類器
交叉熵損失(cross-entropy loss)。公式如下:
或等價的
在上式中,使用fj來表示分類評分向量f中的第j個元素。
SVM和Softmax的比較
Softmax分類器為每個分類提供了“可能性”。 softmax分類器算出來的概率最好是看成一種對於分類正確性的自信。和SVM一樣,數字間相互比較得出的大小順序是可以解釋的,但其絕對值則難以直觀解釋。softmax分類器對於分數是永遠不會滿意的:正確分類總能得到更高的可能性,錯誤分類總能得到更低的可能性,損失值總是能夠更小。但是,SVM只要邊界值被滿足了就滿意了,不會超過限制去細微地操作具體分數。這可以被看做是SVM的一種特性。
更多關注:MNIST在TensorFlow上的Softmax迴歸模型實現
6. 梯度下降
梯度下降是對神經網路的損失函式最優化中最常用的方法。
小批量資料梯度下降(Mini-batch gradient descent):在大規模的應用中(比如ILSVRC挑戰賽),訓練資料可以達到百萬級量級。如果像這樣計算整個訓練集,來獲得僅僅一個引數的更新就太浪費了。一個常用的方法是計算訓練集中的小批量(batches)資料。
7. 梯度反向傳播
加法門單元把輸出的梯度相等地分發給它所有的輸入,這一行為與輸入值在前向傳播時的值無關。這是因為加法操作的區域性梯度都是簡單的+1,所以所有輸入的梯度實際上就等於輸出的梯度,因為乘以1.0保持不變。上例中,加法門把梯度2.00不變且相等地路由給了兩個輸入。
取最大值門單元對梯度做路由。和加法門不同,取最大值門將梯度轉給其中一個輸入,這個輸入是在前向傳播中值最大的那個輸入。這是因為在取最大值門中,最高值的區域性梯度是1.0,其餘的是0。上例中,取最大值門將梯度2.00轉給了z變數,因為z的值比w高,於是w的梯度保持為0。
乘法門單元相對不容易解釋。它的區域性梯度就是輸入值,但是是相互交換之後的,然後根據鏈式法則乘以輸出值的梯度。上例中,x的梯度是-4.00x2.00=-8.00。
8. 神經網路基本概念
一個兩層的神經網路計算公式是
非線性函式在神經網路的計算上是至關重要的,如果略去這一步,那麼兩個矩陣將會合二為一,對於分類的評分計算將重新變成關於輸入的線性函式。
二分類Softmax分類器。舉例來說,可以把看做其中一個分類的概率,其他分類的概率為,因為它們加起來必須為1。根據這種理解,可以得到交叉熵損失。然後將它最優化為二分類的Softmax分類器(也就是邏輯迴歸)。
二分類SVM分類器。或者可以在神經元的輸出外增加一個最大邊界折葉損失(max-margin hinge loss)函式,將其訓練成一個二分類的支援向量機。
理解正則化。在SVM/Softmax的例子中,正則化損失從生物學角度可以看做逐漸遺忘,因為它的效果是讓所有突觸權重在引數更新過程中逐漸向著0變化。
9. 常用啟用函式
左邊是Sigmoid非線性函式,將實數壓縮到[0,1]之間。右邊是tanh函式,將實數壓縮到[-1,1]。
Sigmoid的兩個主要缺點:Sigmoid函式飽和使梯度消失;Sigmoid函式的輸出不是零中心的。
Tanh:。
左邊是ReLU(校正線性單元:Rectified Linear Unit)啟用函式,當x = 0時函式值為0。當x>0函式的斜率為1。右邊圖表指明使用ReLU比tanh收斂快6倍。
ReLU。在近些年ReLU變得非常流行。它的函式公式是。換句話說,這個啟用函式就是一個關於0的閾值(如上圖左側)。使用ReLU有以下一些優缺點:
優點1:相較於sigmoid和tanh函式,ReLU對於隨機梯度下降的收斂有巨大的加速作用。這是由它的線性,非飽和的公式導致的。
優點2:sigmoid和tanh神經元含有指數運算等耗費計算資源的操作,而ReLU可以簡單地通過對一個矩陣進行閾值計算得到。
缺點:在訓練的時候,ReLU單元比較脆弱並且可能“死掉”。如果學習率設定得太高,可能會發現網路中40%的神經元都會死掉(在整個訓練集中這些神經元都不會被啟用)。通過合理設定學習率,這種情況的發生概率會降低。
Leaky ReLU。Leaky ReLU是為解決“ReLU死亡”問題的嘗試。
Maxout。Maxout神經元就擁有ReLU單元的所有優點(線性操作和不飽和),而沒有它的缺點(死亡的ReLU單元)。然而和ReLU對比,它每個神經元的引數數量增加了一倍,這就導致整體引數的數量激增。
最後需要注意一點:在同一個網路中混合使用不同型別的神經元是非常少見的,雖然沒有什麼根本性問題來禁止這樣做。
一句話:用ReLU非線性函式。注意設定好學習率,或許可以監控你的網路中死亡的神經元佔的比例。如果單元死亡問題困擾你,就試試Leaky ReLU或者Maxout,不要再用sigmoid了。也可以試試tanh,但是其效果應該不如ReLU或者Maxout。
10. 神經網路結構
最普通的層的型別是全連線層(fully-connected layer)。
命名規則。當我們說N層神經網路的時候,我們沒有把輸入層算入。
前向傳播。全連線層的前向傳播一般就是先進行一個矩陣乘法,然後加上偏置並運用啟用函式。
輸出層。和神經網路中其他層不同,輸出層的神經元一般是不會有啟用函式的(或者也可以認為它們有一個線性相等的啟用函式)。
卷積神經網路的情況卻不同,在卷積神經網路中,對於一個良好的識別系統來說,深度是一個極端重要的因素。
過擬合(Overfitting)是網路對資料中的噪聲有很強的擬合能力而沒有重視資料間(假設)的潛在基本關係。防止神經網路的過擬合有很多方法(L2正則化,dropout和輸入噪音等)。
不應該因為害怕出現過擬合而使用小網路。相反,應該進儘可能使用大網路,然後使用正則化技巧來控制過擬合。
相關文章
- 史丹佛CS231n課程筆記純乾貨2筆記
- 史丹佛機器學習公開課筆記機器學習筆記
- 史丹佛大學凸優化課程筆記-0優化筆記
- [CS231N課程筆記] Lecture 2. Image Classification筆記
- 李飛飛教你玩轉 ImageNet 挑戰賽,史丹佛 CS231n 最新視訊課程全公開
- 史丹佛機器學習教程學習筆記之2機器學習筆記
- 遨遊Unix–APUE課程筆記【1】筆記
- 史丹佛自然語言處理習題課1——緒論自然語言處理
- 史丹佛CS231n 2017最新課程:李飛飛詳解深度學習的框架實現與對比深度學習框架
- 《史丹佛CS224n NLP》課程資料+知識工具
- 機器學習課程筆記機器學習筆記
- buffer cache 記憶體管理物理結構純乾貨記憶體
- python課程筆記Python筆記
- 史丹佛NLP課程 | 第11講 - NLP中的卷積神經網路卷積神經網路
- 吳恩達授課,史丹佛CS230深度學習課程資源開放吳恩達深度學習
- 史丹佛程式設計正規化第二課筆記(資料型別在記憶體中的表示)程式設計筆記資料型別記憶體
- React Native純乾貨總結React Native
- 會計學課程筆記筆記
- 王道C短期課程筆記筆記
- 物聯網課程筆記筆記
- lua課程學習筆記筆記
- java乾貨筆記之變數4Java筆記變數
- 李巨集毅機器學習課程筆記-1.機器學習概論機器學習筆記
- 史丹佛iOS Swift開發公開課總結(一)iOSSwift
- 關於PaaS的純乾貨總結
- 達內課程學習筆記筆記
- 萬物互聯課程筆記筆記
- Stanford機器學習課程筆記——SVM機器學習筆記
- UI設計課程筆記(三)UI筆記
- [Triton課程筆記] 2.2.3 BLS續筆記
- 福利|精選大咖演講乾貨、精華筆記、課件分享(附PPT/視訊)筆記
- 純乾貨分享 —— 大資料入門指南大資料
- 純乾貨:21天帶你玩轉容器
- 純乾貨!程式設計師面試的技巧程式設計師面試
- 線性代數的本質課程筆記1-6講筆記
- UFLDL:史丹佛大學深度學習課程總結深度學習
- 史丹佛AI 指數年度報告:清華課程擴張全球最快,DL職位空缺激增35倍AI
- 網站SEO課程筆記整理版!網站筆記