數學 · 神經網路(一)· 前向傳導

========== 2017.05.16 更新 ==========

更細緻的說明可以參見這裡

========== 分割線的說 ==========

神經網路的數學部分可能會讓許多人望而生畏,各種梯度的計算可能也會讓人有些吃力

事實上……

確實如此(喂)。不過,如果靜下心來好好推導一下的話,可能又會覺得它比想像中的簡單

這一章我們要介紹的是演算法中比較簡單的前向傳導演算法(感謝評論區 @MeeLu 的建議,將原翻譯「前傳演算法」改成了「前向傳導演算法」),為此我們要先弄懂演算法的過程。我們先來看兩層之間的前向傳導是怎麼樣的(以下除了偏置量 b 是數以外,其它變數都是矩陣):

大概就是這個感覺。我們再把上面的過程寫成數學語言就行: v = varphi (u1)rightarrow u2 = vw + b

其中各個矩陣的 shape 為(n是輸入的數據個數):

u1: (n, 4); v: (n, 4); u2: (n, 8)w: (4, 8)

其中,varphi 叫做激活函數、也就是每一層自己 Duang 的部分。直觀地說:

  • 所謂激活函數,正是整個結構中的非線性扭曲力

也就是說,激活函數是神經網路之所以能夠進行非線性扭曲的關鍵

那麼w是什麼?注意到v = varphi (u1)、也就是說vu1非線性扭曲後的結果。一般來說,可以把v叫做激活值

w的作用,就是將這個激活值線性映射到另一個空間上;b的作用,則是在這個基礎上再進行一步平移操作

這裡展開講的會會涉及到數學分析和高等代數的相關知識,個人覺得如果不是專攻理論的話可以不太在意背後的理論基礎、而如果是相關專業的話我的能力也 hold 不住 (^_^;)

以上就把兩層之間的前向傳導演算法介紹完了。對於整個神經網路而言,只需要將上面講的步驟不斷重複進行即可

稍微總結一下:

  1. 輸入:n times d的矩陣 X,其中 n 是樣本個數、d 是數據維數
  2. 逐層進行激活,一路向前傳導:
    1. 將輸入該層的數據通過激活函數varphi 進行非線性扭曲
    2. 將扭曲後的結果通過層與層之間的權重w線性映射到另一個空間上、同時可以通過偏置量b來進行一個平移
    3. 將最終結果傳給下一層作為下一層的輸入

下一章就要講 BP(反向傳播)演算法了。BP 是神經網路訓練的核心、推導也會稍微複雜一點,但是對於最簡單的情形(梯度下降),如果按部就班地算的話、可能會發現其實不過如此

希望觀眾老爺們能夠喜歡~

(猛戳我進入下一章!( σω)σ )


推薦閱讀:

如何證明輾轉相除法(歐幾里德演算法)?
《古今數學思想》這本書為什麼唯獨沒有對中國數學的描述?
如何看待三江方士這個人?

TAG:数学 | 机器学习 | 神经网络 |