㈠ BP神經網路(誤差反傳網路)
雖然每個人工神經元很簡單,但是只要把多個人工
神經元按一定方式連接起來就構成了一個能處理復雜信息的神經網路。採用BP演算法的多層前饋網路是目前應用最廣泛的神經網路,稱之為BP神經網路。它的最大功能就是能映射復雜的非線性函數關系。
對於已知的模型空間和數據空間,我們知道某個模型和他對應的數據,但是無法寫出它們之間的函數關系式,但是如果有大量的一一對應的模型和數據樣本集合,利用BP神經網路可以模擬(映射)它們之間的函數關系。
一個三層BP網路如圖8.11所示,分為輸入層、隱層、輸出層。它是最常用的BP網路。理論分析證明三層網路已經能夠表達任意復雜的連續函數關系了。只有在映射不連續函數時(如鋸齒波)才需要兩個隱層[8]。
圖8.11中,X=(x1,…,xi,…,xn)T為輸入向量,如加入x0=-1,可以為隱層神經元引入閥值;隱層輸出向量為:Y=(y1,…,yi,…,ym)T,如加入y0=-1,可以為輸出層神經元引入閥值;輸出層輸出向量為:O=(o1,…,oi,…,ol)T;輸入層到隱層之間的權值矩陣用V表示,V=(V1,…,Vj,…,Vl)T,其中列向量Vj表示隱層第j個神經元的權值向量;隱層到輸出層之間的權值矩陣用W表示,W=(W1,…,Wk,…,Wl)T,
其中列向量Wk表示輸出層第k個神經元的權值向量。
圖8.11 三層BP網路[8]
BP演算法的基本思想是:預先給定一一對應的輸入輸出樣本集。學習過程由信號的正向傳播與誤差的反向傳播兩個過程組成。正向傳播時,輸入樣本從輸入層傳入,經過各隱層逐層處理後,傳向輸出層。若輸出層的實際輸出與期望的輸出(教師信號)不符,則轉入誤差的反向傳播。將輸出誤差以某種形式通過隱層向輸入層逐層反傳,並將誤差分攤給各層的所有神經元,獲得各層的誤差信號,用它們可以對各層的神經元的權值進行調整(關於如何修改權值參見韓立群著作[8]),循環不斷地利用輸入輸出樣本集進行權值調整,以使所有輸入樣本的輸出誤差都減小到滿意的精度。這個過程就稱為網路的學習訓練過程。當網路訓練完畢後,它相當於映射(表達)了輸入輸出樣本之間的函數關系。
在地球物理勘探中,正演過程可以表示為如下函數:
d=f(m) (8.31)
它的反函數為
m=f-1(d) (8.32)
如果能夠獲得這個反函數,那麼就解決了反演問題。一般來說,難以寫出這個反函數,但是我們可以用BP神經網路來映射這個反函數m=f-1(d)。對於地球物理反問題,如果把觀測數據當作輸入數據,模型參數當作輸出數據,事先在模型空間隨機產生大量樣本進行正演計算,獲得對應的觀測數據樣本,利用它們對BP網路進行訓練,則訓練好的網路就相當於是地球物理數據方程的反函數。可以用它進行反演,輸入觀測數據,網路就會輸出它所對應的模型。
BP神經網路在能夠進行反演之前需要進行學習訓練。訓練需要大量的樣本,產生這些樣本需要大量的正演計算,此外在學習訓練過程也需要大量的時間。但是BP神經網路一旦訓練完畢,在反演中的計算時間可以忽略。
要想使BP神經網路比較好地映射函數關系,需要有全面代表性的樣本,但是由於模型空間的無限性,難以獲得全面代表性的樣本集合。用這樣的樣本訓練出來的BP網路,只能反映樣本所在的較小范圍數據空間和較小范圍模型空間的函數關系。對於超出它們的觀測數據就無法正確反演。目前BP神經網路在一維反演有較多應用,在二維、三維反演應用較少,原因就是難以產生全面代表性的樣本空間。
㈡ 人工智慧神經網路
1.
x=2.0,w=2.3,b=-3
y=wx+b=1.6
1)硬極限就是大於0就是1,小於等於0就取0,所以答案是1
2)線性函數輸入是多少,輸出就是多少,所以答案是1.6
3)對數-S型函數,應該是應用sigmoid函數,y=1/(1+e^(-1.6))=0.832
2.你打錯字了?把「是」打成「時」了?
x=2.0,w=2.3,b=-3
y=wx+b=1.6
1)傳輸函數的凈輸入是1.6
2)神經元的輸出是1.6(沒有給傳輸函數是啥,所以這個可能是沒有經過傳輸函數的輸出吧。)
3.
1)6個輸入,2個輸出,所以有8個神經元。
2)6個w,所以是6維
3)採用sigmoid函數,輸出就會是0和1之間的連續值了。
4)為了使網路具有更好的性能,可以提高容錯性和存儲容量,可以採用偏值
以上答案僅供參考。第一題應該沒有問題,後兩題不太確定。
㈢ 一文看懂四種基本的神經網路架構
原文鏈接:
http://blackblog.tech/2018/02/23/Eight-Neural-Network/
更多干貨就在我的個人博客 http://blackblog.tech 歡迎關注
剛剛入門神經網路,往往會對眾多的神經網路架構感到困惑,神經網路看起來復雜多樣,但是這么多架構無非也就是三類,前饋神經網路,循環網路,對稱連接網路,本文將介紹四種常見的神經網路,分別是CNN,RNN,DBN,GAN。通過這四種基本的神經網路架構,我們來對神經網路進行一定的了解。
神經網路是機器學習中的一種模型,是一種模仿動物神經網路行為特徵,進行分布式並行信息處理的演算法數學模型。這種網路依靠系統的復雜程度,通過調整內部大量節點之間相互連接的關系,從而達到處理信息的目的。
一般來說,神經網路的架構可以分為三類:
前饋神經網路:
這是實際應用中最常見的神經網路類型。第一層是輸入,最後一層是輸出。如果有多個隱藏層,我們稱之為「深度」神經網路。他們計算出一系列改變樣本相似性的變換。各層神經元的活動是前一層活動的非線性函數。
循環網路:
循環網路在他們的連接圖中定向了循環,這意味著你可以按照箭頭回到你開始的地方。他們可以有復雜的動態,使其很難訓練。他們更具有生物真實性。
循環網路的目的使用來處理序列數據。在傳統的神經網路模型中,是從輸入層到隱含層再到輸出層,層與層之間是全連接的,每層之間的節點是無連接的。但是這種普通的神經網路對於很多問題卻無能無力。例如,你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。
循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。
對稱連接網路:
對稱連接網路有點像循環網路,但是單元之間的連接是對稱的(它們在兩個方向上權重相同)。比起循環網路,對稱連接網路更容易分析。這個網路中有更多的限制,因為它們遵守能量函數定律。沒有隱藏單元的對稱連接網路被稱為「Hopfield 網路」。有隱藏單元的對稱連接的網路被稱為玻爾茲曼機。
其實之前的帖子講過一些關於感知機的內容,這里再復述一下。
首先還是這張圖
這是一個M-P神經元
一個神經元有n個輸入,每一個輸入對應一個權值w,神經元內會對輸入與權重做乘法後求和,求和的結果與偏置做差,最終將結果放入激活函數中,由激活函數給出最後的輸出,輸出往往是二進制的,0 狀態代表抑制,1 狀態代表激活。
可以把感知機看作是 n 維實例空間中的超平面決策面,對於超平面一側的樣本,感知器輸出 1,對於另一側的實例輸出 0,這個決策超平面方程是 w⋅x=0。 那些可以被某一個超平面分割的正反樣例集合稱為線性可分(linearly separable)樣例集合,它們就可以使用圖中的感知機表示。
與、或、非問題都是線性可分的問題,使用一個有兩輸入的感知機能容易地表示,而異或並不是一個線性可分的問題,所以使用單層感知機是不行的,這時候就要使用多層感知機來解決疑惑問題了。
如果我們要訓練一個感知機,應該怎麼辦呢?
我們會從隨機的權值開始,反復地應用這個感知機到每個訓練樣例,只要它誤分類樣例就修改感知機的權值。重復這個過程,直到感知機正確分類所有的樣例。每一步根據感知機訓練法則來修改權值,也就是修改與輸入 xi 對應的權 wi,法則如下:
這里 t 是當前訓練樣例的目標輸出,o 是感知機的輸出,η 是一個正的常數稱為學習速率。學習速率的作用是緩和每一步調整權的程度,它通常被設為一個小的數值(例如 0.1),而且有時會使其隨著權調整次數的增加而衰減。
多層感知機,或者說是多層神經網路無非就是在輸入層與輸出層之間加了多個隱藏層而已,後續的CNN,DBN等神經網路只不過是將重新設計了每一層的類型。感知機可以說是神經網路的基礎,後續更為復雜的神經網路都離不開最簡單的感知機的模型,
談到機器學習,我們往往還會跟上一個詞語,叫做模式識別,但是真實環境中的模式識別往往會出現各種問題。比如:
圖像分割:真實場景中總是摻雜著其它物體。很難判斷哪些部分屬於同一個對象。對象的某些部分可以隱藏在其他對象的後面。
物體光照:像素的強度被光照強烈影響。
圖像變形:物體可以以各種非仿射方式變形。例如,手寫也可以有一個大的圓圈或只是一個尖頭。
情景支持:物體所屬類別通常由它們的使用方式來定義。例如,椅子是為了讓人們坐在上面而設計的,因此它們具有各種各樣的物理形狀。
卷積神經網路與普通神經網路的區別在於,卷積神經網路包含了一個由卷積層和子采樣層構成的特徵抽取器。在卷積神經網路的卷積層中,一個神經元只與部分鄰層神經元連接。在CNN的一個卷積層中,通常包含若干個特徵平面(featureMap),每個特徵平面由一些矩形排列的的神經元組成,同一特徵平面的神經元共享權值,這里共享的權值就是卷積核。卷積核一般以隨機小數矩陣的形式初始化,在網路的訓練過程中卷積核將學習得到合理的權值。共享權值(卷積核)帶來的直接好處是減少網路各層之間的連接,同時又降低了過擬合的風險。子采樣也叫做池化(pooling),通常有均值子采樣(mean pooling)和最大值子采樣(max pooling)兩種形式。子采樣可以看作一種特殊的卷積過程。卷積和子采樣大大簡化了模型復雜度,減少了模型的參數。
卷積神經網路由三部分構成。第一部分是輸入層。第二部分由n個卷積層和池化層的組合組成。第三部分由一個全連結的多層感知機分類器構成。
這里舉AlexNet為例:
·輸入:224×224大小的圖片,3通道
·第一層卷積:11×11大小的卷積核96個,每個GPU上48個。
·第一層max-pooling:2×2的核。
·第二層卷積:5×5卷積核256個,每個GPU上128個。
·第二層max-pooling:2×2的核。
·第三層卷積:與上一層是全連接,3*3的卷積核384個。分到兩個GPU上個192個。
·第四層卷積:3×3的卷積核384個,兩個GPU各192個。該層與上一層連接沒有經過pooling層。
·第五層卷積:3×3的卷積核256個,兩個GPU上個128個。
·第五層max-pooling:2×2的核。
·第一層全連接:4096維,將第五層max-pooling的輸出連接成為一個一維向量,作為該層的輸入。
·第二層全連接:4096維
·Softmax層:輸出為1000,輸出的每一維都是圖片屬於該類別的概率。
卷積神經網路在模式識別領域有著重要應用,當然這里只是對卷積神經網路做了最簡單的講解,卷積神經網路中仍然有很多知識,比如局部感受野,權值共享,多卷積核等內容,後續有機會再進行講解。
傳統的神經網路對於很多問題難以處理,比如你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。RNN之所以稱為循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。理論上,RNN能夠對任何長度的序列數據進行處理。
這是一個簡單的RNN的結構,可以看到隱藏層自己是可以跟自己進行連接的。
那麼RNN為什麼隱藏層能夠看到上一刻的隱藏層的輸出呢,其實我們把這個網路展開來開就很清晰了。
從上面的公式我們可以看出,循環層和全連接層的區別就是循環層多了一個權重矩陣 W。
如果反復把式2帶入到式1,我們將得到:
在講DBN之前,我們需要對DBN的基本組成單位有一定的了解,那就是RBM,受限玻爾茲曼機。
首先什麼是玻爾茲曼機?
[圖片上傳失敗...(image-d36b31-1519636788074)]
如圖所示為一個玻爾茲曼機,其藍色節點為隱層,白色節點為輸入層。
玻爾茲曼機和遞歸神經網路相比,區別體現在以下幾點:
1、遞歸神經網路本質是學習一個函數,因此有輸入和輸出層的概念,而玻爾茲曼機的用處在於學習一組數據的「內在表示」,因此其沒有輸出層的概念。
2、遞歸神經網路各節點鏈接為有向環,而玻爾茲曼機各節點連接成無向完全圖。
而受限玻爾茲曼機是什麼呢?
最簡單的來說就是加入了限制,這個限制就是將完全圖變成了二分圖。即由一個顯層和一個隱層構成,顯層與隱層的神經元之間為雙向全連接。
h表示隱藏層,v表示顯層
在RBM中,任意兩個相連的神經元之間有一個權值w表示其連接強度,每個神經元自身有一個偏置系數b(對顯層神經元)和c(對隱層神經元)來表示其自身權重。
具體的公式推導在這里就不展示了
DBN是一個概率生成模型,與傳統的判別模型的神經網路相對,生成模型是建立一個觀察數據和標簽之間的聯合分布,對P(Observation|Label)和 P(Label|Observation)都做了評估,而判別模型僅僅而已評估了後者,也就是P(Label|Observation)。
DBN由多個限制玻爾茲曼機(Restricted Boltzmann Machines)層組成,一個典型的神經網路類型如圖所示。這些網路被「限制」為一個可視層和一個隱層,層間存在連接,但層內的單元間不存在連接。隱層單元被訓練去捕捉在可視層表現出來的高階數據的相關性。
生成對抗網路其實在之前的帖子中做過講解,這里在說明一下。
生成對抗網路的目標在於生成,我們傳統的網路結構往往都是判別模型,即判斷一個樣本的真實性。而生成模型能夠根據所提供的樣本生成類似的新樣本,注意這些樣本是由計算機學習而來的。
GAN一般由兩個網路組成,生成模型網路,判別模型網路。
生成模型 G 捕捉樣本數據的分布,用服從某一分布(均勻分布,高斯分布等)的雜訊 z 生成一個類似真實訓練數據的樣本,追求效果是越像真實樣本越好;判別模型 D 是一個二分類器,估計一個樣本來自於訓練數據(而非生成數據)的概率,如果樣本來自於真實的訓練數據,D 輸出大概率,否則,D 輸出小概率。
舉個例子:生成網路 G 好比假幣製造團伙,專門製造假幣,判別網路 D 好比警察,專門檢測使用的貨幣是真幣還是假幣,G 的目標是想方設法生成和真幣一樣的貨幣,使得 D 判別不出來,D 的目標是想方設法檢測出來 G 生成的假幣。
傳統的判別網路:
生成對抗網路:
下面展示一個cDCGAN的例子(前面帖子中寫過的)
生成網路
判別網路
最終結果,使用MNIST作為初始樣本,通過學習後生成的數字,可以看到學習的效果還是不錯的。
本文非常簡單的介紹了四種神經網路的架構,CNN,RNN,DBN,GAN。當然也僅僅是簡單的介紹,並沒有深層次講解其內涵。這四種神經網路的架構十分常見,應用也十分廣泛。當然關於神經網路的知識,不可能幾篇帖子就講解完,這里知識講解一些基礎知識,幫助大家快速入(zhuang)門(bi)。後面的帖子將對深度自動編碼器,Hopfield 網路長短期記憶網路(LSTM)進行講解。
㈣ 神經網路演算法
20 世紀五、六⼗年代,科學家 Frank Rosenblatt其受到 Warren McCulloch 和 Walter Pitts早期的⼯作的影響,發明了感知機(Perceptrons)。
⼀個感知器接受⼏個⼆進制輸⼊, ,並產⽣⼀個⼆進制輸出:
如上圖所示的感知機有三個輸⼊: 。通常可以有更多或更少輸⼊。 我們再引⼊權重: ,衡量輸入對輸出的重要性。感知機的輸出為0 或者 1,則由分配權重後的總和 ⼩於等於或者⼤於閾值決定。和權重⼀樣,閾值(threshold)是⼀個實數,⼀個神經元的參數。⽤更精確的代數形式如下:
給三個因素設置權重來作出決定:
可以把這三個因素對應地⽤⼆進制變數 來表⽰。例如,如果天⽓好,我們把
,如果不好, 。類似地,如果你的朋友陪你去, ,否則 。 也類似。
這三個對於可能對你來說,「電影好不好看」對你來說最重要,而天氣顯得不是那麼的重要。所以你會這樣分配權值: ,然後定義閾值threshold=5。
現在,你可以使⽤感知器來給這種決策建⽴數學模型。
例如:
隨著權重和閾值的變化,你可以得到不同的決策模型。很明顯,感知機不是⼈做出決策使⽤的全部模型。但是這個例⼦說明了⼀個感知機如何能權衡不同的依據來決策。這看上去也可以⼤致解釋⼀個感知機⽹絡有時確實能夠做出一些不錯的決定。
現在我們隊上面的結構做一點變化,令b=-threshold,即把閾值移到不等號左邊,變成偏置, 那麼感知器的規則可以重寫為:
引⼊偏置只是我們描述感知器的⼀個很⼩的變動,但是我們後⾯會看到它引導更進⼀步的符號簡化。因此,我們不再⽤閾值,⽽總是使⽤偏置。
感知機是首個可以學習的人工神經網路,它的出現引起的神經網路的第一層高潮。需要指出的是,感知機只能做簡單的線性分類任務,而且Minsky在1969年出版的《Perceptron》書中,證明了感知機對XOR(異或)這樣的問題都無法解決。但是感知機的提出,對神經網路的發展是具有重要意義的。
通過上面的感知機的觀察我們發現一個問題,每個感知機的輸出只有0和1,這就意味著有時我們只是在單個感知機上稍微修改了一點點權值w或者偏置b,就可能造成最終輸出完全的反轉。也就是說,感知機的輸出是一個階躍函數。如下圖所示,在0附近的時候,輸出的變化是非常明顯的,而在遠離0的地方,我們可能調整好久參數也不會發生輸出的變化。
這樣階躍的跳變並不是我們想要的,我們需要的是當我們隊權值w或者偏置b做出微小的調整後,輸出也相應的發生微小的改變芹則禪。這同時也意味值我們的輸出不再只是0和1,還可以輸出小數。由此我們引入了S型神經元。
S型神經元使用 S 型函數,也叫Sigmoid function函數,我們用它作為激活函數。其表達式如下:
圖像如下圖所示:
利⽤實際的 σ 函數,我們得到⼀個,就像上⾯說明的,平滑的感知器。 σ 函數的平滑特性,正是關鍵因素,⽽不是其細部形式盯明。 σ 的平滑意味著權重和偏置的微⼩變化,即 ∆w 和 ∆b,會從神經元產⽣⼀個微⼩的輸出變化 ∆output。實際上,微積分告訴我們
∆output 可以很好地近似表⽰為:
上面的式子是⼀個反映權重、偏置變化嫌塵和輸出變化的線性函數。這⼀線性使得我們可以通過選擇權重和偏置的微⼩變化來達到輸出的微⼩變化。所以當 S 型神經元和感知器本質上是相同的,但S型神經元在計算處理如何變化權重和偏置來使輸出變化的時候會更加容易。
有了對S型神經元的了解,我們就可以介紹神經網路的基本結構了。具體如下:
在⽹絡中最左邊的稱為輸⼊層,其中的神經元稱為輸⼊神經元。最右邊的,即輸出層包含有輸出神經元,在圖中,輸出層只有⼀個神經元。中間層,既然這層中的神經元既不是輸⼊也不是輸出,則被稱為隱藏層。
這就是神經網路的基本結構,隨著後面的發展神經網路的層數也隨之不斷增加和復雜。
我們回顧一下神經網路發展的歷程。神經網路的發展歷史曲折盪漾,既有被人捧上天的時刻,也有摔落在街頭無人問津的時段,中間經歷了數次大起大落。
從單層神經網路(感知機)開始,到包含一個隱藏層的兩層神經網路,再到多層的深度神經網路,一共有三次興起過程。詳見下圖。
我們希望有⼀個演算法,能讓我們找到權重和偏置,以⾄於⽹絡的輸出 y(x) 能夠擬合所有的 訓練輸⼊ x。為了量化我們如何實現這個⽬標,我們定義⼀個代價函數:
這⾥ w 表⽰所有的⽹絡中權重的集合, b 是所有的偏置, n 是訓練輸⼊數據的個數,
a 是表⽰當輸⼊為 x 時輸出的向量,求和則是在總的訓練輸⼊ x 上進⾏的。當然,輸出 a 取決於 x, w和 b,但是為了保持符號的簡潔性,我沒有明確地指出這種依賴關系。符號 ∥v∥ 是指向量 v 的模。我們把 C 稱為⼆次代價函數;有時也稱被稱為均⽅誤差或者 MSE。觀察⼆次代價函數的形式我們可以看到 C(w, b) 是⾮負的,因為求和公式中的每⼀項都是⾮負的。此外,代價函數 C(w,b)的值相當⼩,即 C(w; b) ≈ 0,精確地說,是當對於所有的訓練輸⼊ x, y(x) 接近於輸出 a 時。因
此如果我們的學習演算法能找到合適的權重和偏置,使得 C(w; b) ≈ 0,它就能很好地⼯作。相反,當 C(w; b) 很⼤時就不怎麼好了,那意味著對於⼤量地輸⼊, y(x) 與輸出 a 相差很⼤。因此我們的訓練演算法的⽬的,是最⼩化權重和偏置的代價函數 C(w; b)。換句話說,我們想要找到⼀系列能讓代價盡可能⼩的權重和偏置。我們將采⽤稱為梯度下降的演算法來達到這個⽬的。
下面我們將代價函數簡化為C(v)。它可以是任意的多元實值函數, 。
注意我們⽤ v 代替了 w 和 b 以強調它可能是任意的函數,我們現在先不局限於神經⽹絡的環境。
為了使問題更加簡單我們先考慮兩個變數的情況,想像 C 是⼀個只有兩個變數 和 的函數,我們的目的是找到 和 使得C最小。
如上圖所示,我們的目的就是找到局部最小值。對於這樣的一個問題,一種方法就是通過微積分的方法來解決,我們可以通過計算導數來求解C的極值點。但是對於神經網路來說,我們往往面對的是非常道的權值和偏置,也就是說v的維數不只是兩維,有可能是億萬維的。對於一個高維的函數C(v)求導數幾乎是不可能的。
在這種情況下,有人提出了一個有趣的演算法。想像一下一個小球從山頂滾下山谷的過程, 我們的⽇常經驗告訴我們這個球最終會滾到⾕底。我們先暫時忽略相關的物理定理, 對球體的⾁眼觀察是為了激發我們的想像⽽不是束縛我們的思維。因此與其陷進物理學⾥凌亂的細節,不如我們就這樣問⾃⼰:如果我們扮演⼀天的上帝,能夠構造⾃⼰的物理定律,能夠⽀配球體可以如何滾動,那麼我們將會採取什麼樣的運動學定律來讓球體能夠總是滾落到⾕底呢?
為了更精確地描述這個問題,讓我們思考⼀下,當我們在 和 ⽅向分別將球體移動⼀個很⼩的量,即 ∆ 和 ∆ 時,球體將會發⽣什麼情況。微積分告訴我們 C 將會有如下變化:
也可以用向量表示為
現在我們的問題就轉換為不斷尋找一個小於0的∆C,使得C+∆C不斷變小。
假設我們選取:
這⾥的 η 是個很⼩的正數(稱為學習速率),於是
由於 ∥∇C∥2 ≥ 0,這保證了 ∆C ≤ 0,即,如果我們按照上述⽅程的規則去改變 v,那麼 C
會⼀直減⼩,不會增加。
所以我們可以通過不斷改變v來C的值不斷下降,是小球滾到最低點。
總結⼀下,梯度下降演算法⼯作的⽅式就是重復計算梯度 ∇C,然後沿著相反的⽅向移動,沿著⼭⾕「滾落」。我們可以想像它像這樣:
為了使梯度下降能夠正確地運⾏,我們需要選擇合適的學習速率η,確保C不斷減少,直到找到最小值。
知道了兩個變數的函數 C 的梯度下降方法,我們可以很容易的把它推廣到多維。我們假設 C 是⼀個有 m 個變數 的多元函數。 ∆C 將會變為:
其中, ∇C為
∆v為:
更新規則為:
在回到神經網路中,w和b的更新規則為:
前面提到神經⽹絡如何使⽤梯度下降演算法來學習他們⾃⾝的權重和偏置。但是,這⾥還留下了⼀個問題:我們並沒有討論如何計算代價函數的梯度。這里就需要用到一個非常重要的演算法:反向傳播演算法(backpropagation)。
反向傳播演算法的啟示是數學中的鏈式法則。
四個方程:
輸出層誤差方程:
當前層誤差方程:
誤差方程關於偏置的關系:
誤差方程關於權值的關系
演算法描述:
檢視這個演算法,你可以看到為何它被稱作反向傳播。我們從最後⼀層開始向後計算誤差向量δ。這看起來有點奇怪,為何要從後⾯開始。但是如果你認真思考反向傳播的證明,這種反向移動其實是代價函數是⽹絡輸出的函數的結果。為了理解代價隨前⾯層的權重和偏置變化的規律,我們需要重復作⽤鏈式法則,反向地獲得需要的表達式。
參考鏈接: http://neuralnetworksanddeeplearning.com/