圖解神經網絡,帶你輕松搞定原理!

目錄

  • 神經網絡是什麼?
  • 神經網絡的組成?
  • 神經網絡如何工作?

神經網絡是什麼?

神經網絡是一組受人類大腦功能啟發的算法。一般來說,當你睜開眼睛時,你看到的東西叫做數據,再由你大腦中的 Nuerons(數據處理的細胞)處理,並識別出你周圍的東西,這也是神經網絡的工作原理。神經網絡有時被稱為人工神經網絡(Artificial Neural Network,ANN),它們不像你大腦中的神經元那樣是自然的,而是人工模擬神經網絡的性質和功能。

神經網絡的組成?

人工神經網絡是由大量高度相互關聯的處理單元(神經元)協同工作來解決特定問題。首先介紹一種名為感知機的神經元。感知機接收若幹個輸入,每個輸入對應一個權重值(可以看成常數),產出一個輸出。

接下來用一個生活中的例子形象理解感知機,假設一個場景,周末去爬山,有以下三種輸入(可以理解為影響因素):

對於你來說,輸入(2)影響非常大,這樣就設置的權重值就大,輸入(3)的影響的比較小,權重值就小。

再將輸入二值化,對於天氣不惡劣,設置為 1(x_2=1),對於天氣惡劣,設置為 0(x_2=0),天氣的影響程度通過權重值體現,設置為 10(w_1=10)。同樣設置輸入(1)的權值為 8(w_2=8),輸入(3)的權重值為 1(w_3=1)。輸出二值化是去爬山為 1(y=1),不去為 0(y=0)。

假設對於感知機,如果 (x_1 times w_1 + x_2 times w_2 + x_3 times w_3) 的結果大於某閾值(如 5),表示去爬山 y=1,隨機調整權重和閾值,感知機的結果會不一樣。

一個典型的神經網絡有成百上千個神經元(感知機),排成一列的神經元也稱為單元或是層,每一列的神經元會連接左右兩邊的神經元。感知機有輸入和輸出,對於神經網絡是有輸入單元與輸出單元,在輸入單元和輸出單元之間是一層或多層稱為隱藏單元。一個單元和另一個單元之間的聯系用權重表示,權重可以是正數(如一個單元激發另一個單元) ,也可以是負數(如一個單元抑制或抑制另一個單元)。權重越高,一個單位對另一個單位的影響就越大。

神經網絡如何工作?

神經網絡的工作大致可分為前向傳播和反向傳播,類比人們學習的過程,前向傳播如讀書期間,學生認真學習知識點,進行考試,獲得自己對知識點的掌握程度;反向傳播是學生獲得考試成績作為反饋,調整學習知識的側重點。

以下展示瞭 2 個輸入和 2 個輸出的神經網絡:

前向傳播對應的輸出為 y_1y_2,換成矩陣表示為

以上 W 矩陣每行數乘以 X 矩陣每列數是矩陣乘法,也稱為點乘(dot product)或內積(inner product)。

繼續增加一層隱藏層,如下圖所示,並采用矩陣乘法表示輸出結果,可以看到一系列線性的矩陣乘法,其實還是求解 4 個權重值,這個效果跟單層隱藏層的效果一樣:

大多數真實世界的數據是非線性的,我們希望神經元學習這些非線性表示,可以通過激活函數將非線性引入神經元。例如爬山例子中的閾值,激活函數 ReLU(Rectified Linear Activation Function)采用閾值 0,輸入大於 0,輸出為輸入值,小於 0 輸出值為 0,公式表示為 F (z) = max (0,z),ReLU 的圖像如下所示。

加入激活函數的神經網絡如下圖所示:

再以爬山為例,輸出值 y_1=5 表示去爬山,y_2=1 表示不去爬山,在生活中會用概率表述爬山的可能性,這裡通過 SoftMax 函數規范輸出值,公式如下。

SoftMax(y_{i})=frac{e^{y_{i}}}{sum_{c = 1}^{C}{e^{y_{c}}}} \

輸出值 y_1=5y_2=1 的計算過程如下,可以看到爬山的概率是 98%:

加入 SoftMax 函數的神經網絡如下圖所示:

獲得神經網絡的輸出值 (0.98, 0.02) 之後,與真實值 (1, 0) 比較,非常接近,仍然需要與真實值比較,計算差距(也稱誤差,用 e 表示),就跟摸底考試一樣,查看學習的掌握程度,同樣神經網絡也要學習,讓輸出結果無限接近真實值,也就需要調整權重值,這裡就需要反向傳播瞭。

在反向傳播過程中需要依據誤差值來調整權重值,可以看成參數優化過程,簡要過程是,先初始化權重值,再增加或減少權重值,查看誤差是否最小,變小繼續上一步相同操作,變大則上一步相反操作,調整權重後查看誤差值,直至誤差值變小且浮動不大。

現在以簡單的函數 y =(x-1)^2 + 1 為例,y 表示誤差,我們希望找到 x,最小化 y,函數展示如下。紅色點是隨機的初始點類比權重值的初始化,左邊是當 x 增大時,誤差是減小;右邊是當 x 減小時,誤差是減小。如何找到誤差下降的方向成為瞭關鍵。

斜率的大小表明變化的速率,意思是當斜率比較大的情況下,權重 x 變化所引起的結果變化也大。把這個概念引入求最小化的問題上,以權重導數乘以一個系數作為權重更新的數值,這個系數我們叫它學習率(learning rate),這個系數能在一定程度上控制權重自我更新,權重改變的方向與梯度方向相反,如下圖所示,權重的更新公式是 W_{new} = W_{odd}-學習率*導數

由於誤差是目標訓練值與實際輸出值之間的差值,即 損失函數=(目標值-實際值)^2,表示為 (w times x – y_{true})^2,導數為:

(w*x-y)^{'}=2w*x^{2}-2x*y=2x(y-y_{true}) \

經過反復迭代,讓損失函數值無限接近 0,浮動不大時,獲得合適的權重,即神經網絡訓練好瞭。

本文用生動形象語言的介紹瞭神經網絡的基本結構及數學原理,為瞭方便大傢理解,本文的參數圍繞著 W,後續繼續深入學習,若遇到其他參數,如 b,不用感到陌生,解決思路跟 W 類似。

好瞭,祝大傢有所進步!

參考文獻

  1. https://purnasaigudikandula.medium.com/a-beginner-intro-to-neural-networks-543267bda3c8
  2. https://www.explainthatstuff.com/introduction-to-neural-networks.html
  3. https://shenshutao.github.io/blog/machine/learning/cnn/
  4. Python 神經網絡編程
赞(0)