原文標題: 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。
所以,這隻是神經網路如何學習的一個簡化表示。我沒有提到的是,在實踐中,訓練集被分成兩部分,第二部分用於驗證網路。
希望本文將對神經網路的學習方式提供一個很好的概述。由於這是一個複雜的話題,有些東西並未涉及(比如反向傳播),這些都將在後續文章中涉及。需要提及的是,我儘量沒有太深入數學,這也給讀者留下了很多研究空間。
謝謝閱讀!
原文連結:https://rubikscode.net/2018/01/15/how-artificial-neural-networks-learn/
譯者簡介:和中華,留德軟體工程碩士。由於對機器學習感興趣,碩士論文選擇了利用遺傳演演算法思想改進傳統kmeans。目前在杭州進行大資料相關實踐。加入資料派THU希望為IT同行們盡自己一份綿薄之力,也希望結交許多志趣相投的小夥伴。
本文轉自:資料派THU 公眾號;作者:rubikscode;翻譯:和中華;校對:李海明;
版權宣告:本號內容部分來自網際網路,轉載請註明原文連結和作者,如有侵權或出處有誤請和我們聯絡。
關聯閱讀:
原創系列文章:
資料運營 關聯文章閱讀:
資料分析、資料產品 關聯文章閱讀: