說明:
本系列文章翻譯斯坦福大學的課程:Convolutional Neural Networks for Visual Recognition的課程講義 原文地址:http://cs231n.github.io/揉稚。 最好有Python基礎(但不是必要的)誊抛,Python的介紹見該課程的module0柠傍。
本節(jié)的code見地址:
https://github.com/anthony123/cs231n/tree/master/module1-5(working on)如果在code中發(fā)現(xiàn)bug或者有什么不清楚的地方提鸟,可以及時給我留言把曼,因為code沒有經(jīng)過很嚴格的測試揩徊。
課程目錄:
- 不和大腦科學類比的快速介紹
- 模擬一個神經(jīng)元
- 生物學動機及連接
- 作為線性分類器的單獨神經(jīng)元
- 經(jīng)常使用的激活函數(shù)
- 神經(jīng)網(wǎng)絡結(jié)構(gòu)
- 層級結(jié)構(gòu)
- 前向反饋計算的例子
- 表征能力
- 層數(shù)及每層大小的設置
- 總結(jié)
- 附加資源
快速介紹
介紹清楚神經(jīng)網(wǎng)絡官辽,而不與腦科學類比,也是可能的锹安。在線性分類那節(jié)課中, 我們介紹了使用公式s=Wx計算不同類別的分數(shù),其中W是一個矩陣叹哭,x是包含一張圖片所有像素的一個列向量忍宋。在CIFAR-10的例子中,x是[3072x1]的列向量风罩,W是一個[10x3072]的矩陣糠排,所以輸出的分數(shù)是一個10個類別分數(shù)的向量。
但是超升,一個簡單的神經(jīng)網(wǎng)絡可能計算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個對應于類別分數(shù)的數(shù)字症汹。我們可以注意到硫朦,非線性是計算的主要花銷。如果沒有非線性計算烈菌,那么就剩下簡單的線性計算阵幸,計算的函數(shù)也變成輸入向量的線性函數(shù)。非線性函數(shù)對最終的結(jié)果非常重要芽世。參數(shù)W2挚赊,W1都是通過隨機梯度下降學習到的,它們的梯度值都是通過鏈式法則獲得的(使用反向傳播計算)济瓢。
一個三層的網(wǎng)絡可以看成是s=W3max(0,W2max(0,W1x)), 其中荠割,所有的參數(shù)W3,W2和W1都是需要學習的參數(shù)。中間隱藏向量的大小是網(wǎng)絡的超參數(shù)旺矾,后面我們會講到如何設置它們∶镳校現(xiàn)在我們從神經(jīng)元/網(wǎng)絡的視角來解釋這些計算。
模擬一個神經(jīng)元
神經(jīng)網(wǎng)絡領域起源于對神經(jīng)生物系統(tǒng)的模擬箕宙,后來發(fā)現(xiàn)這種結(jié)構(gòu)在機器學習的任務中可以達到很好的結(jié)果嚎朽。我們首先介紹對這個領域有啟發(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)沖動。在計算模型中找筝,我們假設神經(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)元的前向傳導的示例代碼如下:
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)重進行點乘操作坎藐,并加入偏置值为牍,最后應用非線性函數(shù)(激活函數(shù)), 在上面情況下,激活函數(shù)為:
粗糙的模型
需要強調(diào)的是岩馍, 這個生物神經(jīng)元的模型非常粗糙碉咆。比如,真實的神經(jīng)元有不同的種類蛀恩,而且不同的神經(jīng)元有不同的性質(zhì)疫铜。生物神經(jīng)元的樹突計算是非常復雜的非線性計算。突觸也不是一個單獨的權(quán)重双谆,而是一個復雜的非線性動態(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,所以對這個分類器的預測就是查看概率是否大于0.5馆类。
二元SVM分類器 我們也可以將最大邊緣的鉸鏈損失放在神經(jīng)元的輸出后面混聊,并且把它訓練成一個二元SVM分類器。
正則解釋 在生物學的視角下乾巧, 在SVM/Softmax情況下的正則損失可以解釋為漸進遺忘句喜,因為它使得每個參數(shù)更新之后,突觸權(quán)重w趨向于0沟于。
一個單獨的神經(jīng)元可以用來實現(xiàn)一個二元分類器(比如 二元Softmax 或者二元SVM分類器)
經(jīng)常使用的激活函數(shù)
每一個激活函數(shù)(非線性函數(shù))接收一個輸入數(shù)值咳胃,并對這個值進行某種固定的數(shù)學操作。在實踐中社裆,你可能會遇到幾種不同的激活函數(shù):
Sigmoid函數(shù) Sigmoid非線性的數(shù)學公式為
其圖像如上圖所示泳秀。它接收一個實數(shù)标沪,并把它映射到0~1范圍內(nèi)。特別地嗜傅,大的正數(shù)變成1金句,大的負數(shù)變成0。Sigmoid在過去用的非常多吕嘀,因為它很好的解釋了神經(jīng)元的激活頻率违寞。從一點都沒有激活(0)到完全激活(1)贞瞒。但是,現(xiàn)在Sigmoid函數(shù)用的很少趁曼,因為它有兩個缺點:
Sigmoid飽和容易使梯度消失军浆。 Sigmoid的一個不好的特點在于當神經(jīng)元的激活值為0或者1的附近,它的梯度就接近0挡闰。在反向傳播過程中乒融,局部梯度將與這個門的輸出梯度相乘,所以如果局部梯度接近于0摄悯,那么就會使得整個梯度都變成0赞季,從而使得權(quán)值不會發(fā)生改變。而且奢驯,我們也需要注意申钩,不能使得權(quán)值的初始值過大。比如瘪阁,如果初始的權(quán)重過大撒遣,那么大多數(shù)的神經(jīng)元梯度都會接近0,那么整個網(wǎng)絡就不會學習罗洗。
Sigmoid函數(shù)不是以零為中心愉舔。 這會導致后續(xù)層也會接收到不是以零為中心的數(shù)據(jù)。這對梯度下降會有不好的影響伙菜。因為如果進入神經(jīng)元的數(shù)據(jù)總是正數(shù)的話(比如轩缤,x>0 f=Wx+b),那么反向傳播過程中贩绕,權(quán)重w的梯度變得要么全是正數(shù)火的,要么全是負數(shù)(取決于整個f的梯度符號)。這會導致權(quán)值更新呈現(xiàn)出之字形淑倾。但是一旦跨批量數(shù)據(jù)相加馏鹤,權(quán)重的最終更新可能會有不同的符號,這樣就可以在一定程度上解決這個問題娇哆。因此湃累,雖然這會導致一些不方便,但是相對于上面提到的飽和激活問題碍讨,它不會產(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.
ReLU 在最近幾年具钥,修正線性單元非常流行豆村。它的計算函數(shù)為f(x) = max(0,x)。下面列舉一些ReLu的優(yōu)點和缺點:
(+): 實驗發(fā)現(xiàn)相比于Sigmoid和Tanh骂删,它能夠加快隨機梯度下降的聚合掌动。這被認為是由于它的線性,不飽和的形式宁玫。
(+): 相比Sigmoid和Tanh粗恢,ReLu的計算更加簡單。
(-):不幸的是欧瘪,ReLU在訓練的過程中眷射,可能會很脆弱,容易“死亡”佛掖。比如妖碉,通過ReLU神經(jīng)元的大的梯度流可能永遠變成零。從而會導致部分數(shù)據(jù)在訓練的過程中丟失芥被。如果你在訓練的過程中由于設置過高的學習速率欧宜,導致多達40%的網(wǎng)絡死亡,那么可以通過將學習速率降低來試著解決這個問題拴魄。
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)在跨任務的一致性還不是很清楚扮授。
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ù)翻倍次洼。
關于常見的神經(jīng)元及其激活函數(shù)的討論也就結(jié)束了。最后補充一點遇骑,在一個神經(jīng)網(wǎng)絡中卖毁,使用不同類型的神經(jīng)元的做法非常少見,盡管這樣做也并沒有什么問題落萎。
總結(jié): “我該使用什么類型的神經(jīng)元呢亥啦?” 使用ReLU,但是要小心設置學習速率并注意網(wǎng)絡的死亡率练链。如果出現(xiàn)了這種情況翔脱,你可以試著使用leaky ReLU或者Maxout。永遠不要使用Sigmoid.媒鼓。使用Tanh届吁,但是不要期望它會表現(xiàn)的比ReLU或Maxout好。
神經(jīng)網(wǎng)絡架構(gòu)
層級組織結(jié)構(gòu)
作為圖結(jié)構(gòu)中神經(jīng)元的神經(jīng)網(wǎng)絡 神經(jīng)元可以看成是由無環(huán)圖連接的神經(jīng)元的集合隶糕。也就是說瓷产,一些神經(jīng)元的輸出是另外一些神經(jīng)元的輸入。環(huán)形圖是不允許的枚驻,因為這會導致網(wǎng)絡前向傳播的無限循環(huán)濒旦。這些連接起來的神經(jīng)元并不是無定形的,而是被組織成層級結(jié)構(gòu)再登。對于普通的神經(jīng)網(wǎng)絡來說尔邓,最常見的層級類型就是全連接層,即兩個相鄰的層之間兩兩都有連接锉矢,但是在一個層內(nèi)梯嗽,神經(jīng)元之間沒有連接。下面是兩個全連接層網(wǎng)絡的例子:
命名規(guī)范 注意沽损,當我們計算神經(jīng)網(wǎng)絡的層數(shù)時灯节,我們并不包括輸入層。因此,一層的神經(jīng)網(wǎng)絡沒有隱藏層(輸入直接映射到輸出)炎疆。在那種情況下卡骂,我們可能會聽到有人稱邏輯回歸或者SVM是單層的神經(jīng)網(wǎng)絡。你也有時候聽到別人把神經(jīng)網(wǎng)絡稱之為人工神經(jīng)網(wǎng)絡(Artificial Neural Network)或者 多層感知網(wǎng)絡(Multi-Layer Perceptrons(MLP))形入。很多不喜歡神經(jīng)網(wǎng)絡與真實腦相似論斷的人傾向于把神經(jīng)元稱之為單元全跨。
輸出層 不像神經(jīng)網(wǎng)絡其他層那樣,輸出層的神經(jīng)元不包括激活函數(shù)亿遂。(或者你可以認為激活函數(shù)是單位激活函數(shù)(identity activation function))浓若。這是因為最后的輸出函數(shù)經(jīng)常用來表示類別分數(shù)(分類問題中),其中的數(shù)值為實數(shù) 蛇数,或者是實數(shù)的目標(在回歸中)挪钓。
確定神經(jīng)網(wǎng)絡的大小 兩個經(jīng)常使用來測量神經(jīng)網(wǎng)絡大小的度量是神經(jīng)元的個數(shù)和參數(shù)的多少(更常見)。以上圖的兩個神經(jīng)網(wǎng)絡為例
- 第一個網(wǎng)絡(上)有4+2個神經(jīng)元(不包括輸入神經(jīng)元)耳舅,[3x4] + [4x2] = 20 個權(quán)重和4+2個偏置量诵原,一共有26個可學習的參數(shù)。
- 第二個網(wǎng)絡(下)有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)絡包括1億個量級的參數(shù)辑畦,通常包括10-20層(所以稱之為深度學習)。然而腿倚,之后我們會學習到纯出,由于參數(shù)共享,有效的連接數(shù)會遠遠大于這個量級敷燎。具體內(nèi)容我們會在卷積神經(jīng)網(wǎng)絡那節(jié)涉及暂筝。
前饋計算的例子
矩陣乘法與激活函數(shù)交替出現(xiàn)并重復 神經(jīng)網(wǎng)絡被組織成層級結(jié)構(gòu)的一個最基本的理由是這種結(jié)構(gòu)使得利用矩陣向量操作來計算神經(jīng)網(wǎng)絡變得簡單和有效。以上面的三層神經(jīng)網(wǎng)絡為例硬贯,輸入是[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)絡的整個前向傳播是簡單的三個矩陣乘法,但是和激活函數(shù)交替出現(xiàn)老赤。
#一個三層神經(jīng)網(wǎng)絡的前向傳播
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)絡可學習的參數(shù)。注意輸入可能不是一個單獨的向量矩陣诗越,x也可能是訓練數(shù)據(jù)的整個批量(其中砖瞧,可能每一列是一個輸入圖像),所以單個輸入都可以并發(fā)地計算嚷狞。
一個全連接層的前向傳播對應于一個矩陣乘法块促,再加上一個偏置向量和激活函數(shù)計算
表征能力
一種觀察全連接神經(jīng)網(wǎng)絡的視角是,把它看做是一個以權(quán)重為參數(shù)的函數(shù)群床未。一個自然的問題就產(chǎn)生了: 這個函數(shù)群的表征能力有多大竭翠?也就是說,是否存在不能用神經(jīng)網(wǎng)絡模擬的函數(shù)薇搁?結(jié)果發(fā)現(xiàn)至少一個隱藏層的神經(jīng)網(wǎng)絡是一個萬能逼近器(universal approximator)斋扰。也就是說,給出一個連續(xù)函數(shù)f(x)和一個?<0啃洋,存在一個有一個隱藏層(有一個非線性函數(shù)传货,比如:sigmoid)的神經(jīng)網(wǎng)絡g(x), 使得?x宏娄, ∣ f (x) ? g(x) ∣< ?问裕。換句話說,神經(jīng)網(wǎng)絡可以逼近任何連續(xù)函數(shù)孵坚。
如果一個隱藏層足以逼近任何函數(shù)粮宛,那么為什么還要使用更多的層呢?答案是神經(jīng)網(wǎng)絡是在數(shù)學上卖宠,是一個萬能逼近器巍杈,但是在實踐中,這是一個相對沒有意義的陳述扛伍。一方面筷畦,指示碰撞和(sum of indicator bumps)函數(shù)g(x) = Σi ci??(ai < x < bi), 其中參數(shù)向量a,b,c也是一個萬能逼近器,沒有人會建議我們在機器學習中使用這種函數(shù)形式蜒秤。神經(jīng)網(wǎng)絡在實踐中效果好汁咏,就是因為它簡潔表達的,平整的函數(shù)能夠非常容易地滿足我們在實踐中遇到數(shù)據(jù)的統(tǒng)計學特征作媚,也非常容易使用優(yōu)化算法學習(比如攘滩,梯度下降)。類似地纸泡,實踐發(fā)現(xiàn)漂问,更深的網(wǎng)絡(多個隱藏層)比只有一個隱藏層的網(wǎng)絡工作地更好赖瞒,盡管它們的表達能力一樣。
除此之外蚤假,實踐發(fā)現(xiàn)栏饮,一個三層的網(wǎng)絡比一個兩層的網(wǎng)絡效果更好,但是更深的網(wǎng)絡并不會使得效果更好磷仰。這和卷積神經(jīng)網(wǎng)絡不同袍嬉。實踐發(fā)現(xiàn)深度是一個優(yōu)秀的認知系統(tǒng)的關鍵。
設置層的數(shù)目及它們的大小
當我們面臨一個實踐問題時灶平,我們怎么決定使用何種架構(gòu)伺通?我們應該不使用隱藏層,使用一個隱藏層逢享?兩個隱藏層罐监?每一層的大小為多大?首先瞒爬,當我們提高神經(jīng)網(wǎng)絡的大小及層數(shù)弓柱,網(wǎng)絡的容量也會增加。也就是說侧但,函數(shù)可表征的空間也會增加矢空,因為神經(jīng)元可以相互合作,表征出許多不同的函數(shù)禀横。例如妇多,假設我們有一個二維空間上的一個二元分類問題。我們可以訓練三個不同的神經(jīng)網(wǎng)絡燕侠,每個網(wǎng)絡的隱藏層數(shù)不一樣。我們可以得到以下的分類器:
從上面的圖片我們可以看出蜓耻,更多神經(jīng)元的神經(jīng)網(wǎng)絡能夠表征出更復雜的函數(shù)茫舶。然而,這既是一個優(yōu)點(我們可以處理更加復雜的數(shù)據(jù))也是一個缺點(容易過擬合)刹淌。當一個高容量的模型擬合數(shù)據(jù)中的噪音而不是數(shù)據(jù)內(nèi)在的關系時饶氏,容易產(chǎn)生過擬合。例如有勾,上圖中20個隱藏層的模型能過擬合所有的數(shù)據(jù)疹启,但是也產(chǎn)生了一些分離的區(qū)域。三個隱藏層的模型只有初略分類數(shù)據(jù)的表征能力蔼卡。它把數(shù)據(jù)分為兩個部分喊崖,將綠色區(qū)域的紅色點解釋為雜質(zhì)。在實踐中,這可以提高在測試數(shù)據(jù)中的延展性荤懂。
基于我們上面的討論茁裙,為了防止過擬合,對于不夠復雜的數(shù)據(jù)节仿,似乎我們應該使用更小的神經(jīng)網(wǎng)絡晤锥。但是,這是錯誤的廊宪。在神經(jīng)網(wǎng)絡中矾瘾,我們還有很多其他的方法來阻止過擬合。在后續(xù)的課程中我們會講到(例如 L2正則化挤忙,dropout霜威,輸入噪音等)。在實踐中册烈,我們經(jīng)常使用這些方法來避免過擬合释移,而不是通過減少神經(jīng)元的數(shù)目莫杈。
其中背后的原因在于,小的神經(jīng)網(wǎng)絡很難使用局部方法(如梯度下降)進行訓練。損失函數(shù)只有相對較少的局部極小值痪蝇,而且很多極小值都非常容易聚合,但是結(jié)果并不好(有較高的損失值)秧廉。相反荧库,更大的神經(jīng)網(wǎng)絡擁有更多的局部極小值,而且這些極小值比實際的極小值更好驾中。因為神經(jīng)網(wǎng)絡是非凸函數(shù)唉堪,所以很難從數(shù)學的角度來分析。但是還是有一些理解這些目標函數(shù)的嘗試肩民。例如 這篇論文: The Loss Surfaces of Multilayer Networks. 在實踐中唠亚,你會發(fā)現(xiàn),一個小的神經(jīng)網(wǎng)絡的損失值會有很大的變數(shù)持痰。在有的情況下灶搜,你很幸運,它能聚合到一個好的地方工窍,但是在一些情況下割卖,你可能只能聚合到一個不好的地方。但是患雏,如果你訓練一個大的網(wǎng)絡鹏溯,你需要發(fā)現(xiàn)許多不同的解決方案,但是最終的損失的變量都會更小淹仑。也就是說剿涮,所有的解決方法都是一樣好言津,從而使得最終的結(jié)果更少地依賴隨機初始化。
正則強度是一個控制神經(jīng)網(wǎng)絡過擬合的好的方案取试。我們來看一下不同設置所達到的結(jié)果:
所以你不應該由于害怕過擬合而使用更小的網(wǎng)絡瞬浓。相反初婆,你應該使用一個你能承受的計算量的大型網(wǎng)絡,并且使用正則技術(shù)來控制過擬合猿棉。
總結(jié)
- 我們介紹了生物神經(jīng)元的及其非常粗糙的一個模型磅叛。
- 我們討論了在實踐中使用的幾種激活函數(shù)。其中ReLU是最常用的激活函數(shù)萨赁。
- 我們介紹了神經(jīng)網(wǎng)絡弊琴, 其中神經(jīng)元由全連接層連接。相鄰層的神經(jīng)元兩兩連接杖爽,而每一層內(nèi)的神經(jīng)元則沒有連接敲董。
- 這種層級結(jié)構(gòu)使得基于矩陣乘法與激活函數(shù)交替運算的方式計算網(wǎng)絡參數(shù)更加有效
- 我們可以把神經(jīng)網(wǎng)絡看成是一個萬能函數(shù)逼近器,但是我們也討論到這種性質(zhì)并不能直接導致它的廣泛使用慰安。神經(jīng)網(wǎng)絡之所有被使用腋寨,是因為它們基于正確的,來源于實踐的化焕,關于函數(shù)的功能性的假設萄窜。
- 我們發(fā)現(xiàn)更大的網(wǎng)絡幾乎都比更小的網(wǎng)絡效果更好,但是更好的網(wǎng)絡需要更強的正則項撒桨,否則查刻,會導致過擬合。我們會在后面的課程中介紹更多的正則項的形式(特別是dropout)凤类。