筆記譯自斯坦福cs231n課程筆記neural nets notes 1,課程教師andrej karpathy授權翻譯。
內容列表:
小節參考文獻
將神經網路演算法以神經元的形式圖形化。神經網路被建模成神經元的集合,神經元之間以無環圖的形式進行連線。也就是說,一些神經元的輸出是另一些神經元的輸入。在網路中是不允許迴圈的,因為這樣會導致前向傳播的無限迴圈。通常神經網路模型中神經元是分層的,而不是像生物神經元一樣聚合成大小不一的團狀。對於普通神經網路,最普通的層的型別是全連線層(fully-connected layer)。全連線層中的神經元與其前後兩層的神經元是完全成對連線的,但是在同乙個全連線層內的神經元之間沒有連線。下面是兩個神經網路的圖例,都使用的全連線層:
左邊是乙個2層神經網路,隱層由4個神經元(也可稱為單元(unit))組成,輸出層由2個神經元組成,輸入層是3個神經元。右邊是乙個3層神經網路,兩個含4個神經元的隱層。注意:層與層之間的神經元是全連線的,但是層內的神經元不連線。
命名規則
當我們說n層神經網路的時候,我們沒有把輸入層算入。因此,單層的神經網路就是沒有隱層的(輸入直接對映到輸出)。因此,有的研究者會說邏輯回歸或者svm只是單層神經網路的乙個特例。研究者們也會使用人工神經網路(artificial neural networks 縮寫ann)或者多層感知器(multi-layer perceptrons 縮寫
mlp)來指代神經網路。很多研究者並不喜歡神經網路演算法和人類大腦之間的模擬,他們更傾向於用單元(unit)而不是神經元作為術語。
輸出層
和神經網路中其他層不同,輸出層的神經元一般是不會有啟用函式的(或者也可以認為它們有乙個線性相等的啟用函式)。這是因為最後的輸出層大多用於表示分類評分值,因此是任意值的實數,或者某種實數值的目標數(比如在回歸中)。
確定網路尺寸。用來度量神經網路的尺寸的標準主要有兩個:乙個是神經元的個數,另乙個是引數的個數,用上面圖示的兩個網路舉例:
為了方便對比,現代卷積神經網路能包含約1億個引數,可由10-20層構成(這就是深度學習)。然而,有效(effective)連線的個數因為引數共享的緣故大大增多。在後面的卷積神經網路內容中我們將學習更多。
不斷重複的矩陣乘法與啟用函式交織。將神經網路組織成層狀的乙個主要原因,就是這個結構讓神經網路演算法使用矩陣向量操作變得簡單和高效。用上面那個3層神經網路舉例,輸入是[3x1]的向量。乙個層所有連線的強度可以存在乙個單獨的矩陣中。比如第乙個隱層的權重w1是[4x3],所有單元的偏置儲存在b1中,尺寸[4x1]。這樣,每個神經元的權重都在w1的乙個行中,於是矩陣乘法np.dot(w1, x)就能計算該層中所有神經元的啟用資料。類似的,w2將會是[4x4]矩陣,儲存著第二個隱層的連線,w3是[1x4]的矩陣,用於輸出層。完整的3層神經網路的前向傳播就是簡單的3次矩陣乘法,其中交織著啟用函式的應用。
# 乙個3層神經網路的前向傳播:
f = lambda x: 1.0/(1.0 + np.exp(-x)) # 啟用函式(用的sigmoid)
x = np.random.randn(3, 1) # 含3個數字的隨機輸入向量(3x1)
h1 = f(np.dot(w1, x) + b1) # 計算第乙個隱層的啟用資料(4x1)
h2 = f(np.dot(w2, h1) + b2) # 計算第二個隱層的啟用資料(4x1)
out = np.dot(w3, h2) + b3 # 神經元輸出(1x1)
在上面的**中,w1,w2,w3,b1,b2,b3都是網路中可以學習的引數。注意x並不是乙個單獨的列向量,而可以是乙個批量的訓練資料(其中每個輸入樣本將會是x中的一列),所有的樣本將會被並行化的高效計算出來。注意神經網路最後一層通常是沒有啟用函式的(例如,在分類任務中它給出乙個實數值的分類評分)。
全連線層的前向傳播一般就是先進行乙個矩陣乘法,然後加上偏置並運用啟用函式。
理解具有全連線層的神經網路的乙個方式是:可以認為它們定義了乙個由一系列函式組成的函式族,網路的權重就是每個函式的引數。如此產生的問題是:該函式族的表達能力如何?存在不能被神經網路表達的函式嗎?
換句話說,神經網路可以近似任何連續函式。
既然乙個隱層就能近似任何函式,那為什麼還要構建更多層來將網路做得更深?答案是:雖然乙個2層網路在數學理論上能完美地近似所有連續函式,但在實際操作中效果相對較差。在乙個維度上,雖然以
更大的神經網路可以表達更複雜的函式。資料是用不同顏色的圓點表示他們的不同類別,決策邊界是由訓練過的神經網路做出的。你可以在convnetsjs demo上練練手。
在上圖中,可以看見有更多神經元的神經網路可以表達更複雜的函式。然而這既是優勢也是不足,優勢是可以分類更複雜的資料,不足是可能造成對訓練資料的過擬合。過擬合(overfitting)是網路對資料中的雜訊有很強的擬合能力,而沒有重視資料間(假設)的潛在基本關係。舉例來說,有20個神經元隱層的網路擬合了所有的訓練資料,但是其代價是把決策邊界變成了許多不相連的紅綠區域。而有3個神經元的模型的表達能力只能用比較寬泛的方式去分類資料。它將資料看做是兩個大塊,並把個別在綠色區域內的紅色點看做雜訊。在實際中,這樣可以在測試資料中獲得更好的泛化(generalization)能力。
基於上面的討論,看起來如果資料不是足夠複雜,則似乎小一點的網路更好,因為可以防止過擬合。然而並非如此,防止神經網路的過擬合有很多方法(l2正則化,dropout和輸入噪音等),後面會詳細討論。在實踐中,使用這些方法來控制過擬合比減少網路神經元數目要好得多。
不要減少網路神經元數目的主要原因在於小網路更難使用梯度下降等區域性方法來進行訓練:雖然小型網路的損失函式的區域性極小值更少,也比較容易收斂到這些區域性極小值,但是這些最小值一般都很差,損失值很高。相反,大網路擁有更多的區域性極小值,但就實際損失值來看,這些區域性極小值表現更好,損失更小。因為神經網路是非凸的,就很難從數學上研究這些特性。即便如此,還是有一些文章嘗試對這些目標函式進行理解,例如the loss su***ces of multilayer networks這篇**。在實際中,你將發現如果訓練的是乙個小網路,那麼最終的損失值將展現出多變性:某些情況下運氣好會收斂到乙個好的地方,某些情況下就收斂到乙個不好的極值。從另一方面來說,如果你訓練乙個大的網路,你將發現許多不同的解決方法,但是最終損失值的差異將會小很多。這就是說,所有的解決辦法都差不多,而且對於隨機初始化引數好壞的依賴也會小很多。
重申一下,正則化強度是控制神經網路過擬合的好方法。看下圖結果:
不同正則化強度的效果:每個神經網路都有20個隱層神經元,但是隨著正則化強度增加,它的決策邊界變得更加平滑。你可以在convnetsjs demo上練練手。
需要記住的是:不應該因為害怕出現過擬合而使用小網路。相反,應該進盡可能使用大網路,然後使用正則化技巧來控制過擬合。
小結如下:
CS231n課程筆記翻譯
賀完結!cs231n官方筆記授權翻譯總集篇發布 智慧型單元 知乎專欄 cs231n課程筆記翻譯 影象分類筆記 上 智慧型單元 知乎專欄 cs231n課程筆記翻譯 影象分類筆記 下 智慧型單元 知乎專欄 cs231n課程筆記翻譯 線性分類筆記 上 智慧型單元 知乎專欄 cs231n課程筆記翻譯 線性分...
CS231n課程筆記翻譯
賀完結!cs231n官方筆記授權翻譯總集篇發布 智慧型單元 知乎專欄 cs231n課程筆記翻譯 影象分類筆記 上 智慧型單元 知乎專欄 cs231n課程筆記翻譯 影象分類筆記 下 智慧型單元 知乎專欄 cs231n課程筆記翻譯 線性分類筆記 上 智慧型單元 知乎專欄 cs231n課程筆記翻譯 線性分...
CS231n課程筆記 線性分類
1 該分類器必須記住所有訓練資料並將其儲存起來,方便和未來資料進行比較,但這在儲存空間上是低效的。2 對乙個測試影象進行分類需要和所有訓練影象作比較,在計算上,資源耗費高。評分函式是原始影象資料到類別分值的對映。另乙個損失函式是用來量化 分類標籤的得分與真實標籤之間的一致性的。該方法可轉化為乙個最優...