cs231n系列1-5:神經(jīng)網(wǎng)絡(luò)第一部分:建立架構(gòu)

說明

  1. 本系列文章翻譯斯坦福大學的課程:Convolutional Neural Networks for Visual Recognition的課程講義 原文地址:http://cs231n.github.io/。 最好有Python基礎(chǔ)(但不是必要的),Python的介紹見該課程的module0。

  2. 本節(jié)的code見地址:
    https://github.com/anthony123/cs231n/tree/master/module1-5(working on)

  3. 如果在code中發(fā)現(xiàn)bug或者有什么不清楚的地方,可以及時給我留言,因為code沒有經(jīng)過很嚴格的測試。

課程目錄:
  • 不和大腦科學類比的快速介紹
  • 模擬一個神經(jīng)元
    • 生物學動機及連接
    • 作為線性分類器的單獨神經(jīng)元
    • 經(jīng)常使用的激活函數(shù)
  • 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
    • 層級結(jié)構(gòu)
    • 前向反饋計算的例子
    • 表征能力
    • 層數(shù)及每層大小的設(shè)置
  • 總結(jié)
  • 附加資源
快速介紹

介紹清楚神經(jīng)網(wǎng)絡(luò),而不與腦科學類比,也是可能的。在線性分類那節(jié)課中, 我們介紹了使用公式s=Wx計算不同類別的分數(shù),其中W是一個矩陣,x是包含一張圖片所有像素的一個列向量。在CIFAR-10的例子中,x是[3072x1]的列向量,W是一個[10x3072]的矩陣,所以輸出的分數(shù)是一個10個類別分數(shù)的向量。

但是,一個簡單的神經(jīng)網(wǎng)絡(luò)可能計算s=W2max(0,W1x),其中W1可能是[100x3072]的矩陣,它把圖像轉(zhuǎn)變?yōu)?00維度的中間向量。函數(shù)max(0,-)是一個逐元素的非線性函數(shù)。對于非線性函數(shù),我們有幾種選擇(這節(jié)課的后面會介紹),但是max函數(shù)是一個非常常用的函數(shù),它將低于0的數(shù)值置為0。最后,W2的大小為[10x100]。所以,最終我們可以得到10個對應(yīng)于類別分數(shù)的數(shù)字。我們可以注意到,非線性是計算的主要花銷。如果沒有非線性計算,那么就剩下簡單的線性計算,計算的函數(shù)也變成輸入向量的線性函數(shù)。非線性函數(shù)對最終的結(jié)果非常重要。參數(shù)W2,W1都是通過隨機梯度下降學習到的,它們的梯度值都是通過鏈式法則獲得的(使用反向傳播計算)。

一個三層的網(wǎng)絡(luò)可以看成是s=W3max(0,W2max(0,W1x)), 其中,所有的參數(shù)W3,W2和W1都是需要學習的參數(shù)。中間隱藏向量的大小是網(wǎng)絡(luò)的超參數(shù),后面我們會講到如何設(shè)置它們。現(xiàn)在我們從神經(jīng)元/網(wǎng)絡(luò)的視角來解釋這些計算。

模擬一個神經(jīng)元

神經(jīng)網(wǎng)絡(luò)領(lǐng)域起源于對神經(jīng)生物系統(tǒng)的模擬,后來發(fā)現(xiàn)這種結(jié)構(gòu)在機器學習的任務(wù)中可以達到很好的結(jié)果。我們首先介紹對這個領(lǐng)域有啟發(fā)的神經(jīng)生物系統(tǒng)。

生物學動機及其連接

大腦基本的計算單元是神經(jīng)元。在人類的神經(jīng)元中,大概有860億個神經(jīng)元。這些神經(jīng)元由大概10^14 ~ 10^15個突觸連接。下面的圖顯示了一個生物的神經(jīng)元(上)及其數(shù)學模型(下)。每個神經(jīng)元從樹突接收信號,并沿著軸突產(chǎn)生輸出信號。軸突最終產(chǎn)生分支,并通過與其他神經(jīng)元樹突的突觸進行連接。在神經(jīng)元的計算模型中,沿著軸突傳播的信號(x0)與另外一個神經(jīng)元樹突的突觸量(w0)進行乘法操作(w0*x0)。其中主要的思想在于突觸量(權(quán)重W)是可學習的,并且可以控制這個神經(jīng)元對另外一個神經(jīng)元的影響力度(及方向:興奮(正權(quán)重)和抑制(負權(quán)重))。在基本的模型中,樹突將信號放入細胞體中,并在那里進行求和操作。如果最終的和值超過一個閾值,那么神經(jīng)元就會喚醒,并沿著軸突傳送神經(jīng)沖動。在計算模型中,我們假設(shè)神經(jīng)沖動的時間點不是非常重要,重要的是神經(jīng)沖動的頻率。基于這種頻率編碼的理論,我們把神經(jīng)元的激活頻率模擬成一個激活函數(shù)f, 可以用來表示沿軸突傳播的神經(jīng)沖動的頻率。過去,一般選用sigmoid函數(shù)σ作為激活函數(shù),因為它將一個實數(shù)輸入(信號求和之后)轉(zhuǎn)變?yōu)橐粋€0到1的數(shù)值。在這節(jié)課的后面我們會講解不同的激活函數(shù)。

一個生物神經(jīng)元的卡通繪畫
生物神經(jīng)元對應(yīng)的數(shù)學模型

一個單獨神經(jīng)元的前向傳導(dǎo)的示例代碼如下:

class Neuron(object):
  # ...
  def forward(inputs):
    """assume inputs and weights are 1-D numpy arrays       
    and  bias is an number """
    cell_body_sum = np.sum(inputs * self.weights) + self.bias     
    firing_rate = 1.0 / (1.0 + math.exp(-cell_body_sum)) 
    # sigmoid activation function 
    return firing_rate

也就是說,每個神經(jīng)元先對輸入及權(quán)重進行點乘操作,并加入偏置值,最后應(yīng)用非線性函數(shù)(激活函數(shù)), 在上面情況下,激活函數(shù)為:

粗糙的模型

需要強調(diào)的是, 這個生物神經(jīng)元的模型非常粗糙。比如,真實的神經(jīng)元有不同的種類,而且不同的神經(jīng)元有不同的性質(zhì)。生物神經(jīng)元的樹突計算是非常復(fù)雜的非線性計算。突觸也不是一個單獨的權(quán)重,而是一個復(fù)雜的非線性動態(tài)系統(tǒng)。很多神經(jīng)系統(tǒng)產(chǎn)生神經(jīng)沖動的準確時機非常重要,所以頻率編碼并不適用。由于這些及其他的簡化,所以如果你將神經(jīng)網(wǎng)路與真實的腦神經(jīng)類比的例子講給一個具有神經(jīng)科學背景的人,那么你要做好準備接受他們的嘲笑。

單個神經(jīng)元作為線性分類器

模擬神經(jīng)元前向計算的數(shù)據(jù)公式是不是有些熟悉?在線性分類的講解中,我們知道一個神經(jīng)元可以“喜歡”(在1附近激活)或者“不喜歡”(在0處激活)輸入空間的某些線性分類。所以,在神經(jīng)元的輸出使用一個合適的損失函數(shù),我們可以將一個神經(jīng)元轉(zhuǎn)化成一個線性分類器。

二元softmax分類器 我們可以將


解釋為其中一種類別的概率 P(yi=1|xi;w)。那么,另外一種類別的概率為P(yi=0|xi;w) = 1 – P(yi=1|xi;w),因為兩種類別的概率之和為1。利用這種解釋,我們可以構(gòu)建我們熟悉的交叉熵損失,優(yōu)化它便能變成二元softmax分類器(也稱之為邏輯回歸)。因為sigmoid函數(shù)將輸出限制在0~1,所以對這個分類器的預(yù)測就是查看概率是否大于0.5。

二元SVM分類器 我們也可以將最大邊緣的鉸鏈損失放在神經(jīng)元的輸出后面,并且把它訓(xùn)練成一個二元SVM分類器。

正則解釋 在生物學的視角下, 在SVM/Softmax情況下的正則損失可以解釋為漸進遺忘,因為它使得每個參數(shù)更新之后,突觸權(quán)重w趨向于0。

一個單獨的神經(jīng)元可以用來實現(xiàn)一個二元分類器(比如 二元Softmax 或者二元SVM分類器)

經(jīng)常使用的激活函數(shù)

每一個激活函數(shù)(非線性函數(shù))接收一個輸入數(shù)值,并對這個值進行某種固定的數(shù)學操作。在實踐中,你可能會遇到幾種不同的激活函數(shù):

非線性sigmoid函數(shù),將實數(shù)映射到[0,1]
非線性tanh函數(shù),將實數(shù)映射到[-1,1]

Sigmoid函數(shù) Sigmoid非線性的數(shù)學公式為


其圖像如上圖所示。它接收一個實數(shù),并把它映射到0~1范圍內(nèi)。特別地,大的正數(shù)變成1,大的負數(shù)變成0。Sigmoid在過去用的非常多,因為它很好的解釋了神經(jīng)元的激活頻率。從一點都沒有激活(0)到完全激活(1)。但是,現(xiàn)在Sigmoid函數(shù)用的很少,因為它有兩個缺點:

  1. Sigmoid飽和容易使梯度消失。 Sigmoid的一個不好的特點在于當神經(jīng)元的激活值為0或者1的附近,它的梯度就接近0。在反向傳播過程中,局部梯度將與這個門的輸出梯度相乘,所以如果局部梯度接近于0,那么就會使得整個梯度都變成0,從而使得權(quán)值不會發(fā)生改變。而且,我們也需要注意,不能使得權(quán)值的初始值過大。比如,如果初始的權(quán)重過大,那么大多數(shù)的神經(jīng)元梯度都會接近0,那么整個網(wǎng)絡(luò)就不會學習。

  2. Sigmoid函數(shù)不是以零為中心。 這會導(dǎo)致后續(xù)層也會接收到不是以零為中心的數(shù)據(jù)。這對梯度下降會有不好的影響。因為如果進入神經(jīng)元的數(shù)據(jù)總是正數(shù)的話(比如,x>0 f=Wx+b),那么反向傳播過程中,權(quán)重w的梯度變得要么全是正數(shù),要么全是負數(shù)(取決于整個f的梯度符號)。這會導(dǎo)致權(quán)值更新呈現(xiàn)出之字形。但是一旦跨批量數(shù)據(jù)相加,權(quán)重的最終更新可能會有不同的符號,這樣就可以在一定程度上解決這個問題。因此,雖然這會導(dǎo)致一些不方便,但是相對于上面提到的飽和激活問題,它不會產(chǎn)生非常嚴重的后果。

Tanh Tanh函數(shù)如上圖右所示。它把實數(shù)映射到[-1,1]。像Sigmoid函數(shù)那樣,它的激活會飽和,但是和Sigmoid函數(shù)不一樣,它的輸出是在[-1,1]范圍內(nèi)。因此,在實踐中,Tanh永遠比Sigmoid函數(shù)好。其實,tanh神經(jīng)元也是一個Sigmoid的一個變形,因為tanh(x) = 2σ(2x)-1.

Rectified Linear Unit (ReLU)激活函數(shù): 當x<0時,函數(shù)值為0;當x>0時,函數(shù)值保持不變
Krizhevsky論文中的一個圖,表明與tanh相比,ReLU的聚合能力提升了6倍

ReLU 在最近幾年,修正線性單元非常流行。它的計算函數(shù)為f(x) = max(0,x)。下面列舉一些ReLu的優(yōu)點和缺點:
(+): 實驗發(fā)現(xiàn)相比于Sigmoid和Tanh,它能夠加快隨機梯度下降的聚合。這被認為是由于它的線性,不飽和的形式。
(+): 相比Sigmoid和Tanh,ReLu的計算更加簡單。
(-):不幸的是,ReLU在訓(xùn)練的過程中,可能會很脆弱,容易“死亡”。比如,通過ReLU神經(jīng)元的大的梯度流可能永遠變成零。從而會導(dǎo)致部分數(shù)據(jù)在訓(xùn)練的過程中丟失。如果你在訓(xùn)練的過程中由于設(shè)置過高的學習速率,導(dǎo)致多達40%的網(wǎng)絡(luò)死亡,那么可以通過將學習速率降低來試著解決這個問題。

leaky ReLU 它是一個嘗試解決死亡ReLU問題的變形。當x<0時,leaky ReLU有一個小的負斜率(比如:0.01)。函數(shù)表達式為f(x) = 1(x<0)(ax) + 1(x >= 0)(x) ,其中a是一個小的常數(shù)。有些人報告說在這種形式的激活函數(shù)取得了成功,但是這個結(jié)果不總是穩(wěn)定的。斜率a可以放在每個神經(jīng)元的參數(shù)列表中。但是,現(xiàn)在跨任務(wù)的一致性還不是很清楚。

maxout 另外一種比較流行的選擇是maxout,它是ReLU和leaky ReLU的通用版。maxout神經(jīng)元計算下面這個函數(shù)


我們可以發(fā)現(xiàn),ReLU和Leaky ReLU 是這個函數(shù)的特殊情況(比如: 當w1,b1=0,就變成了ReLU)。所以maxout可以享受到ReLU所有的好處,而且沒有ReLU的缺點(ReLU死亡)。然而,不好的一點在于,它也使得參數(shù)的個數(shù)翻倍。

關(guān)于常見的神經(jīng)元及其激活函數(shù)的討論也就結(jié)束了。最后補充一點,在一個神經(jīng)網(wǎng)絡(luò)中,使用不同類型的神經(jīng)元的做法非常少見,盡管這樣做也并沒有什么問題。

總結(jié): “我該使用什么類型的神經(jīng)元呢?” 使用ReLU,但是要小心設(shè)置學習速率并注意網(wǎng)絡(luò)的死亡率。如果出現(xiàn)了這種情況,你可以試著使用leaky ReLU或者Maxout。永遠不要使用Sigmoid.。使用Tanh,但是不要期望它會表現(xiàn)的比ReLU或Maxout好。

神經(jīng)網(wǎng)絡(luò)架構(gòu)

層級組織結(jié)構(gòu)

作為圖結(jié)構(gòu)中神經(jīng)元的神經(jīng)網(wǎng)絡(luò) 神經(jīng)元可以看成是由無環(huán)圖連接的神經(jīng)元的集合。也就是說,一些神經(jīng)元的輸出是另外一些神經(jīng)元的輸入。環(huán)形圖是不允許的,因為這會導(dǎo)致網(wǎng)絡(luò)前向傳播的無限循環(huán)。這些連接起來的神經(jīng)元并不是無定形的,而是被組織成層級結(jié)構(gòu)。對于普通的神經(jīng)網(wǎng)絡(luò)來說,最常見的層級類型就是全連接層,即兩個相鄰的層之間兩兩都有連接,但是在一個層內(nèi),神經(jīng)元之間沒有連接。下面是兩個全連接層網(wǎng)絡(luò)的例子:

一個兩層的網(wǎng)絡(luò)(包括4個神經(jīng)元的隱藏層及兩個神經(jīng)元的輸出層)
一個三層網(wǎng)絡(luò)(兩個分別有四個神經(jīng)元的隱藏層及一個輸出層)

命名規(guī)范 注意,當我們計算神經(jīng)網(wǎng)絡(luò)的層數(shù)時,我們并不包括輸入層。因此,一層的神經(jīng)網(wǎng)絡(luò)沒有隱藏層(輸入直接映射到輸出)。在那種情況下,我們可能會聽到有人稱邏輯回歸或者SVM是單層的神經(jīng)網(wǎng)絡(luò)。你也有時候聽到別人把神經(jīng)網(wǎng)絡(luò)稱之為人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network)或者 多層感知網(wǎng)絡(luò)(Multi-Layer Perceptrons(MLP))。很多不喜歡神經(jīng)網(wǎng)絡(luò)與真實腦相似論斷的人傾向于把神經(jīng)元稱之為單元。

輸出層 不像神經(jīng)網(wǎng)絡(luò)其他層那樣,輸出層的神經(jīng)元不包括激活函數(shù)。(或者你可以認為激活函數(shù)是單位激活函數(shù)(identity activation function))。這是因為最后的輸出函數(shù)經(jīng)常用來表示類別分數(shù)(分類問題中),其中的數(shù)值為實數(shù) ,或者是實數(shù)的目標(在回歸中)。

確定神經(jīng)網(wǎng)絡(luò)的大小 兩個經(jīng)常使用來測量神經(jīng)網(wǎng)絡(luò)大小的度量是神經(jīng)元的個數(shù)和參數(shù)的多少(更常見)。以上圖的兩個神經(jīng)網(wǎng)絡(luò)為例

  • 第一個網(wǎng)絡(luò)(上)有4+2個神經(jīng)元(不包括輸入神經(jīng)元),[3x4] + [4x2] = 20 個權(quán)重和4+2個偏置量,一共有26個可學習的參數(shù)。
  • 第二個網(wǎng)絡(luò)(下)有4+4+1=9個神經(jīng)元,[3x4]+[4x4]+[4x1]=32個權(quán)重和4+4+1=9個權(quán)重,一共有41個可學習的參數(shù)。

現(xiàn)代的卷積神經(jīng)網(wǎng)絡(luò)包括1億個量級的參數(shù),通常包括10-20層(所以稱之為深度學習)。然而,之后我們會學習到,由于參數(shù)共享,有效的連接數(shù)會遠遠大于這個量級。具體內(nèi)容我們會在卷積神經(jīng)網(wǎng)絡(luò)那節(jié)涉及。

前饋計算的例子

矩陣乘法與激活函數(shù)交替出現(xiàn)并重復(fù) 神經(jīng)網(wǎng)絡(luò)被組織成層級結(jié)構(gòu)的一個最基本的理由是這種結(jié)構(gòu)使得利用矩陣向量操作來計算神經(jīng)網(wǎng)絡(luò)變得簡單和有效。以上面的三層神經(jīng)網(wǎng)絡(luò)為例,輸入是[3x1]的向量。一層的所有連接強度可以存儲在一個矩陣里面。比如,第一個隱藏層權(quán)重矩陣W1的大小是[4x3], 所有單元的偏置值在大小為[4x1]的向量b1中。每一個單獨的神經(jīng)元將它的權(quán)重放在W1的某一行中。所以矩陣向量乘法np.dot(W1,x)計算這層所有神經(jīng)元的激活值。類似地,W2是一個[4x4]的矩陣,它存儲著第二個隱藏層的所有連接,W3是最后一層(輸出層)的一個[1x4]的矩陣。這個三層神經(jīng)網(wǎng)絡(luò)的整個前向傳播是簡單的三個矩陣乘法,但是和激活函數(shù)交替出現(xiàn)。

  #一個三層神經(jīng)網(wǎng)絡(luò)的前向傳播
  f = lambda x: 1.0/(1.0+np.exp(-x))    #激活函數(shù)
  x = np.random.randn(3,1)   #隨機輸入向量
  h1 = f(np.dot(W1, x) + b1)  #計算第一個隱藏層的激活值
  h2 = f(np.dot(W2, h1) + b2)   #計算第二個隱藏層的激活值
  out = np.dot(W3, h2) + b3     #輸出神經(jīng)元

在上面的代碼中,W1,W2,W3,b1,b2,b3都是神經(jīng)網(wǎng)絡(luò)可學習的參數(shù)。注意輸入可能不是一個單獨的向量矩陣,x也可能是訓(xùn)練數(shù)據(jù)的整個批量(其中,可能每一列是一個輸入圖像),所以單個輸入都可以并發(fā)地計算。

一個全連接層的前向傳播對應(yīng)于一個矩陣乘法,再加上一個偏置向量和激活函數(shù)計算

表征能力

一種觀察全連接神經(jīng)網(wǎng)絡(luò)的視角是,把它看做是一個以權(quán)重為參數(shù)的函數(shù)群。一個自然的問題就產(chǎn)生了: 這個函數(shù)群的表征能力有多大?也就是說,是否存在不能用神經(jīng)網(wǎng)絡(luò)模擬的函數(shù)?結(jié)果發(fā)現(xiàn)至少一個隱藏層的神經(jīng)網(wǎng)絡(luò)是一個萬能逼近器(universal approximator)。也就是說,給出一個連續(xù)函數(shù)f(x)和一個?<0,存在一個有一個隱藏層(有一個非線性函數(shù),比如:sigmoid)的神經(jīng)網(wǎng)絡(luò)g(x), 使得?x, ∣ f (x) ? g(x) ∣< ?。換句話說,神經(jīng)網(wǎng)絡(luò)可以逼近任何連續(xù)函數(shù)。

如果一個隱藏層足以逼近任何函數(shù),那么為什么還要使用更多的層呢?答案是神經(jīng)網(wǎng)絡(luò)是在數(shù)學上,是一個萬能逼近器,但是在實踐中,這是一個相對沒有意義的陳述。一方面,指示碰撞和(sum of indicator bumps)函數(shù)g(x) = Σi ci??(ai < x < bi), 其中參數(shù)向量a,b,c也是一個萬能逼近器,沒有人會建議我們在機器學習中使用這種函數(shù)形式。神經(jīng)網(wǎng)絡(luò)在實踐中效果好,就是因為它簡潔表達的,平整的函數(shù)能夠非常容易地滿足我們在實踐中遇到數(shù)據(jù)的統(tǒng)計學特征,也非常容易使用優(yōu)化算法學習(比如,梯度下降)。類似地,實踐發(fā)現(xiàn),更深的網(wǎng)絡(luò)(多個隱藏層)比只有一個隱藏層的網(wǎng)絡(luò)工作地更好,盡管它們的表達能力一樣。

除此之外,實踐發(fā)現(xiàn),一個三層的網(wǎng)絡(luò)比一個兩層的網(wǎng)絡(luò)效果更好,但是更深的網(wǎng)絡(luò)并不會使得效果更好。這和卷積神經(jīng)網(wǎng)絡(luò)不同。實踐發(fā)現(xiàn)深度是一個優(yōu)秀的認知系統(tǒng)的關(guān)鍵。

設(shè)置層的數(shù)目及它們的大小

當我們面臨一個實踐問題時,我們怎么決定使用何種架構(gòu)?我們應(yīng)該不使用隱藏層,使用一個隱藏層?兩個隱藏層?每一層的大小為多大?首先,當我們提高神經(jīng)網(wǎng)絡(luò)的大小及層數(shù),網(wǎng)絡(luò)的容量也會增加。也就是說,函數(shù)可表征的空間也會增加,因為神經(jīng)元可以相互合作,表征出許多不同的函數(shù)。例如,假設(shè)我們有一個二維空間上的一個二元分類問題。我們可以訓(xùn)練三個不同的神經(jīng)網(wǎng)絡(luò),每個網(wǎng)絡(luò)的隱藏層數(shù)不一樣。我們可以得到以下的分類器:

更大的神經(jīng)網(wǎng)絡(luò)可以表征出更復(fù)雜的函數(shù)。數(shù)據(jù)以圓點表示,并以顏色分類。你可以使用ConvNetsJS示例來試驗這些例子

從上面的圖片我們可以看出,更多神經(jīng)元的神經(jīng)網(wǎng)絡(luò)能夠表征出更復(fù)雜的函數(shù)。然而,這既是一個優(yōu)點(我們可以處理更加復(fù)雜的數(shù)據(jù))也是一個缺點(容易過擬合)。當一個高容量的模型擬合數(shù)據(jù)中的噪音而不是數(shù)據(jù)內(nèi)在的關(guān)系時,容易產(chǎn)生過擬合。例如,上圖中20個隱藏層的模型能過擬合所有的數(shù)據(jù),但是也產(chǎn)生了一些分離的區(qū)域。三個隱藏層的模型只有初略分類數(shù)據(jù)的表征能力。它把數(shù)據(jù)分為兩個部分,將綠色區(qū)域的紅色點解釋為雜質(zhì)。在實踐中,這可以提高在測試數(shù)據(jù)中的延展性。

基于我們上面的討論,為了防止過擬合,對于不夠復(fù)雜的數(shù)據(jù),似乎我們應(yīng)該使用更小的神經(jīng)網(wǎng)絡(luò)。但是,這是錯誤的。在神經(jīng)網(wǎng)絡(luò)中,我們還有很多其他的方法來阻止過擬合。在后續(xù)的課程中我們會講到(例如 L2正則化,dropout,輸入噪音等)。在實踐中,我們經(jīng)常使用這些方法來避免過擬合,而不是通過減少神經(jīng)元的數(shù)目。

其中背后的原因在于,小的神經(jīng)網(wǎng)絡(luò)很難使用局部方法(如梯度下降)進行訓(xùn)練。損失函數(shù)只有相對較少的局部極小值,而且很多極小值都非常容易聚合,但是結(jié)果并不好(有較高的損失值)。相反,更大的神經(jīng)網(wǎng)絡(luò)擁有更多的局部極小值,而且這些極小值比實際的極小值更好。因為神經(jīng)網(wǎng)絡(luò)是非凸函數(shù),所以很難從數(shù)學的角度來分析。但是還是有一些理解這些目標函數(shù)的嘗試。例如 這篇論文: The Loss Surfaces of Multilayer Networks. 在實踐中,你會發(fā)現(xiàn),一個小的神經(jīng)網(wǎng)絡(luò)的損失值會有很大的變數(shù)。在有的情況下,你很幸運,它能聚合到一個好的地方,但是在一些情況下,你可能只能聚合到一個不好的地方。但是,如果你訓(xùn)練一個大的網(wǎng)絡(luò),你需要發(fā)現(xiàn)許多不同的解決方案,但是最終的損失的變量都會更小。也就是說,所有的解決方法都是一樣好,從而使得最終的結(jié)果更少地依賴隨機初始化。

正則強度是一個控制神經(jīng)網(wǎng)絡(luò)過擬合的好的方案。我們來看一下不同設(shè)置所達到的結(jié)果:

正則強度的影響:上面的網(wǎng)絡(luò)都是具有20個隱藏層的網(wǎng)絡(luò)。但是使用一個更大的正則強度會使得最終的結(jié)果更理想。你可以使用ConvNets實例來試驗這些例子

所以你不應(yīng)該由于害怕過擬合而使用更小的網(wǎng)絡(luò)。相反,你應(yīng)該使用一個你能承受的計算量的大型網(wǎng)絡(luò),并且使用正則技術(shù)來控制過擬合。

總結(jié)

  • 我們介紹了生物神經(jīng)元的及其非常粗糙的一個模型。
  • 我們討論了在實踐中使用的幾種激活函數(shù)。其中ReLU是最常用的激活函數(shù)。
  • 我們介紹了神經(jīng)網(wǎng)絡(luò), 其中神經(jīng)元由全連接層連接。相鄰層的神經(jīng)元兩兩連接,而每一層內(nèi)的神經(jīng)元則沒有連接。
  • 這種層級結(jié)構(gòu)使得基于矩陣乘法與激活函數(shù)交替運算的方式計算網(wǎng)絡(luò)參數(shù)更加有效
  • 我們可以把神經(jīng)網(wǎng)絡(luò)看成是一個萬能函數(shù)逼近器,但是我們也討論到這種性質(zhì)并不能直接導(dǎo)致它的廣泛使用。神經(jīng)網(wǎng)絡(luò)之所有被使用,是因為它們基于正確的,來源于實踐的,關(guān)于函數(shù)的功能性的假設(shè)。
  • 我們發(fā)現(xiàn)更大的網(wǎng)絡(luò)幾乎都比更小的網(wǎng)絡(luò)效果更好,但是更好的網(wǎng)絡(luò)需要更強的正則項,否則,會導(dǎo)致過擬合。我們會在后面的課程中介紹更多的正則項的形式(特別是dropout)。

附加資源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,993評論 2 374

推薦閱讀更多精彩內(nèi)容