========== 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)

、也就是說

v

u1

非線性扭曲後的結果。一般來說,可以把

v

叫做

啟用值

w

的作用,就是將這個啟用值線性對映到另一個空間上;

b

的作用,則是在這個基礎上再進行一步平移操作

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

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

稍微總結一下:

輸入:

n \times d

的矩陣 X,其中 n 是樣本個數、d 是資料維數

逐層進行啟用,一路向前傳導:

將輸入該層的資料透過

啟用函式#FormatImgID_16#

進行非線性扭曲

將扭曲後的結果透過層與層之間的權重

w

線性對映到另一個空間上、同時可以透過偏置量

b

來進行一個平移

將最終結果傳給下一層作為下一層的輸入

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

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

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