一文讀懂人工神經網路學習原理
原文標題: How do Artificial Neural Networks learn?
作者:rubikscode
翻譯:和中華
校對:李海明
本文約3000字,建議閱讀10分鐘。
本文對人工神經網路是如何學習的進行了簡單介紹,使讀者可以對神經網路的運行機制有更進一步的認識。
在之前的博客中,我們談到了關於人工神經網路(ANN)的一些非常有趣的主題。其中介紹了人工神經網路的基本結構以及一些最常用的激活函數。然而,我們並未提及人工神經網路最重要的方面 ---- 學習。這種系統最大的威力在於,它們可以像人類一樣,一旦在訓練過程中熟悉了某種問題,隨後便可以解決同類型的問題。在深入這個令人興奮的主題之前,我們先來快速回顧一下人工神經網路的一些最重要的組件以及其架構。
人工神經網路中最小也是最重要的單元叫神經元。與生物神經系統類似,這些神經元也互相連接並具有強大的處理能力。一般而言,ANNs試圖復現真實大腦的行為和過程,這也是為什麼他們的結構是基於生物學觀察而建模的。人造神經元也是一樣的,它的結構令人想起真正的神經元結構。
每個神經元都有輸入連接和輸出連接。這些連接模擬了大腦中突觸的行為。與大腦中突觸傳遞信號的方式相同——信號從一個神經元傳遞到另一個神經元,這些連接也在人造神經元之間傳遞信息。每一個連接都有權重,這意味著發送到每個連接的值要乘以這個因子。再次強調,這種模式是從大腦突觸得到的啟發,權重實際上模擬了生物神經元之間傳遞的神經遞質的數量。所以,如果某個連接重要,那麼它將具有比那些不重要的連接更大的權重值。
由於可能有許多值進入一個神經元,每個神經元便有一個所謂的輸入函數。通常,連接的輸入值都會被加權求和。然後該值被傳遞給激活函數,激活函數的作用是計算出是否將一些信號發送到該神經元的輸出。之前的文章對這方面有更具體的介紹。
我們可以(並且通常會)在每個ANN中有多層神經元,就如下圖所示:
學習
如果我們觀察自然界,可以發現能夠學習的系統都具有高度適應性。在獲取知識之時,這些系統利用外界的輸入,修改其已經獲得的信息,或者修改其內部結構。這其實就是ANNs的本質——它們適應並修改內部結構從而進行學習。更確切地說,ANNs基於輸入和期望的輸出來改變連接的權重。
你可能會問:「為什麼是權重?」 你仔細觀察ANNs的結構,會發現如果我們想修改它們的架構,那麼可以修改其內部的一些組件。比如,我們可以在神經元之間創建新連接,或者刪除連接,或者添加和刪除神經元。我們甚至可以修改輸入函數或激活函數。事實證明,修改權重參數是最實用的方法。另外,其他大部分情況可以通過修改權重參數來涵蓋。例如,刪除連接可以通過將權重設為0來完成(譯者註:這裡作者的意思類似於dropout機制)。如果我們把一個神經元所有相連的權重都設為0,則相當於刪除了該神經元。
訓練
在文章的開篇部分,我提到了一個對ANNs非常非常重要的詞--- 訓練。對於每個ANN而言,這都是一個必要過程,在這期間ANN會熟悉它所需要解決的問題。在實踐中,我們會收集一些數據,並基於此創建預測、分類或進行其他處理,這個數據集則被稱為訓練集。事實上,根據訓練期間的行為和訓練集的性質,我們可以將學習分為如下幾類:
無監督學習 --- 訓練集僅包括輸入。網路試圖識別相似的輸入並把他們分類。這種學習受生物學驅動,但並不一定適合所有問題。
強化學習 --- 訓練集包括輸入,但是在訓練期間也會給網路提供額外的信息。 內部機制是一旦網路計算出某個輸入的輸出,我們就提供信息以表明計算結果是正確的還是錯誤的,並且可能表明網路錯誤的性質。
監督學習 --- 訓練集包括輸入和期望的輸出。通過這種方式,網路可以檢查它的計算結果和期望輸出相不相同,並據此採取適當的行動。
監督學習是最常用的,所以我們來深入探討一下此話題。基本上,我們會得到一個訓練集,包括輸入值向量和期望的輸出值向量。一旦網路計算出其中一個輸入的輸出,成本函數便計算誤差向量。這個誤差表明我們的猜測跟期望的輸出有多接近。最常用的成本函數是均方誤差函數:
這裡,x是訓練集中的輸入向量,y(x)是人工神經網路產生的輸出, a是期望的輸出。此外,可以看到這個函數是關於w和b的函數,他們分別代表了權重和偏差(biases)。
現在這個誤差被返回神經網路,並且權重被相應地修改。這個過程就是反向傳播,它是一個高級的數學演算法,人工神經網路通過該演算法可以一次調整所有權重。由於這是一個複雜的話題,需要一篇獨立的文章介紹,所以建議你閱讀這裡
(https://rubikscode.net/2018/01/22/backpropagation-algorithm-in-artificial-neural-networks/)需要記住的重點是,通過使用這種演算法,ANNs可以快速簡單的修改權重。
梯度下降
整個訓練的關鍵是給權重設置正確的值,從而在神經網路中得到期望的輸出。這就意味著,我們要使誤差向量儘可能小,即找到成本函數的全局最小值。其中一種解決辦法是使用微積分。我們可以計算導數,並使用它們找到成本函數的極值所在。然而,這裡的成本函數並不是一兩個變數的函數,而是網路中所有權重的函數,計算量很快就會變得不可行。這也是為什麼我們要使用梯度下降技術。
有一個類比可以很好的描述該過程。想像你有一個小球位於如下圖所示的山谷中,如果你讓小球滾動,它將會從山谷的一邊滾到另一邊,最終到達谷底。
本質上,我們可以如此看待小球的行為:小球從左到右優化它的位置,最終到達谷底,在本例中,底部就是誤差函數的最小值。這就是梯度下降演算法在做的事情,它從一個位置開始,計算成本函數C的導數和二階導數得到關於「小球」朝哪滾的信息。每次我們計算導數時,我們都可以得到當前位置山谷邊坡的斜率信息,這在下圖中用藍線表示。
當斜率為負(從左到右向下)時,小球應該朝右移動,否則該朝左移動。請注意,小球只是一個類比,我們並不是要準確的模擬一個物理定律。由於我們已經意識到微積分不是最好的方法,所以我們試圖用這種替代方法來到達函數的最小值。
簡而言之,這個過程是這樣的:
將訓練集放入神經網路並獲得輸出。
將輸出與期望輸出做對比,並使用成本函數計算誤差。
基於誤差值和使用的成本函數,決定如何改變權重以使誤差最小。
重複該過程直到誤差值最小。
我剛剛所解釋的還有另外一個名字---- 批次梯度下降(Batch Gradient Descent)。這是因為我們把整個訓練集放在網路中,然後修改權重。這種方法的問題是,我們可能到達誤差函數的一個局部最小值,而不是全局最小值。這也是神經網路中最大的難題之一,不過有多種方式可以解決它。
然而,避免陷入局部最小值陷阱的常用方法是處理完訓練集中的一個輸入之後就修改權重。當訓練集中的所有輸入都處理完了,一個epoch也就完成了。為了得到最好的結果,有必要進行多個epochs。這個過程被稱為隨機梯度下降(Stochastical Gradient Descent)。而且,通過這樣做,我們最小化了另一個問題出現的概率 ---- 過擬合。過擬合是指神經網路在訓練集上表現良好,而在未知的真實數據上不好。當權重被設置為僅僅解決訓練集中的特定問題時,會發生這種情況。
總結
現在,我們總結一下:
在神經網路中隨機初始化權重
我們將第一組輸入值發送給神經網路,使其傳播通過網路並得到輸出值。
我們將輸出值和期望的輸出值進行比較,並使用成本函數計算誤差。
我們將誤差傳播回網路,並根據這些信息設置權重。
對於訓練集中的每個輸入值,重複2至4的步驟。
當整個訓練集都發送給了神經網路,我們就完成了一個epoch, 之後重複多次epochs。
所以,這只是神經網路如何學習的一個簡化表示。我沒有提到的是,在實踐中,訓練集被分成兩部分,第二部分用於驗證網路。
希望本文將對神經網路的學習方式提供一個很好的概述。由於這是一個複雜的話題,有些東西並未涉及(比如反向傳播),這些都將在後續文章中涉及。需要提及的是,我盡量沒有太深入數學,這也給讀者留下了很多研究空間。
謝謝閱讀!
譯者簡介
和中華,留德軟體工程碩士。由於對機器學習感興趣,碩士論文選擇了利用遺傳演算法思想改進傳統kmeans。目前在杭州進行大數據相關實踐。加入數據派THU希望為IT同行們盡自己一份綿薄之力,也希望結交許多志趣相投的小夥伴。
轉載須知
如需轉載,請在開篇顯著位置註明作者和出處(轉自:數據派ID:datapi),並在文章結尾放置數據派醒目二維碼。有原創標識文章,請發送【文章名稱-待授權公眾號名稱及ID】至聯繫郵箱,申請白名單授權並按要求編輯。
發布後請將鏈接反饋至聯繫郵箱(見下方)。未經許可的轉載以及改編者,我們將依法追究其法律責任。
※一文圖解機器學習的基本演算法!
※一文讀懂最近流行的CNN架構
TAG:數據派THU |