之前寫過幾篇大白話介紹系列,比如金融危機起因這種。但還是有朋友跟我說,這不是大白話。其實,我已經盡力把問題解釋到入門者的程度了。有一些困難的東西,一是因為有些問題是無法避免,比如解釋一個CDO的結構,這確實需要思考;還一個原因是,在現在一個快餐網絡知識的時代,真正願意花時間仔細讀的人也不是多數。
這次寫的這篇因為有一些數學上的東西,所以會難以避免的涉及一些麻煩的東西。但其實只要有線性代數的一定基礎,都是很容易理解的。
==============分割線==============
最近這段時間,人工智慧、神經網絡算法著實的又火了一把。在金融中,也有了不少的人在試圖合理的運用這套技術。那麼到底什麼是人工神經網絡?它背後的原理又是什麼?
這篇文章適合只聽說過人工神經網絡,但沒有了解其原理的人。
1)人工神經網絡的結構
我們在這裡介紹一個最簡單的神經網絡。這個簡單的神經網絡有三層結構:輸入層,隱藏層,輸出層。如下圖所示(圖片來自谷歌)
顧名思義:在輸入層,我們對神經網絡輸入變量;在隱藏層和輸出層,我們進行計算並輸出。在神經網絡的隱藏層上,存在著依靠Activation function來進行運算的「神經元」。這些具體計算流程我們稍後一起講。
其中,矩陣W是連接輸入層與隱藏層的橋梁,叫做weight。然後,每個神經元上都有一個常數變量b0,我們叫作bias。N個神經元有N的bias,所以這些bias構成了一個常數向量b0。在隱藏層的神經元接收到了向量z之後,神經元會進行Activation function的計算
在輸出層,類似於在隱藏層,我們還要添加一個bias b1,這個bias的維度和輸出的維度是一致的。
總結來說,假如我們有M個輸入變量組成的向量X,N個神經元,L個輸出變量組成的向量Y。則神經網絡的計算公式就是
在這裡,W,b0,theta,b1都是神經網絡自身的變量。而所謂的神經網絡訓練,也就是讓這些變量與training data「擬合」。
2)人工神經網絡的訓練
最常用的神經網絡訓練方式是反向傳播算法(backpropagation)。反向傳播算法有兩個要素,簡單來說就是:正向計算得到誤差函數,反向求導梯度下降。以上述神經網絡為例,假設我們有K組訓練用的輸入與輸出數據(x_i, y_i),i=1, ..., K,我們來推導一下訓練的算法。
首先,我們的訓練其實就是使得定義的誤差函數最小化,那麼什麼是誤差函數?常用的誤差函數有很多,我們以平方和為例
其中,函數N( . )代表著人工神經網絡這個函數。這樣,我們首先要做的就是初始化神經網絡的一些自身變量,然後將初始化的變量代入神經網絡,加上所有的訓練數據,得到初始的誤差函數值如下
第二步,我們就是要update神經網絡的自身變量,使得神經網絡的誤差函數在更新之後的自身變量下縮小。而我們使用的主要方法,和牛頓法求零點一樣,是梯度下降。所以,我們需要求出誤差函數關於神經網絡自身變量(W、b0、theta、b1)的偏導數。
其中,空心圓代表矩陣點乘。
在得到了偏導數之後,我們利用下式來更新我們的變量
其中,r被稱作learning rate,代表了神經網絡的學習速度與質量。關於r的選取,是一個要權衡利弊的問題:r太小,梯度下降太慢,訓練時間很長;r太大,可能無法訓練成功。
在這裡,反向傳播算法更新神經網絡的方式就是梯度下降,原理與牛頓法、最小二乘法是一致的。就這樣,我們不斷的重複上述步驟,直到誤差函數縮小到一個可接受範圍,則我們就完成了神經網絡對訓練數據的學習。
3)Universal approximation theorem
查德一看,神經網絡對一個未知函數的估計是很暴力的。但其實它背後是有理論支撐的,那就是這一個定理。這個定理的大白話描述(不是嚴謹的)就是,如果你的activation function是單調增、有上下界、非常數且連續,那麼給定一個任意的連續函數,總是存在一個有限的N,使得含有N個神經元的單隱藏層神經網絡可以無限逼近這個連續函數。
這個定理的證明用到了Hahn-Banach theorem、Riesz representation theorem和Fourier analysis,有興趣的朋友可以去自己查看一下。
但是,在選取N上,如果你的N選擇過多,你的問題就會有兩種:1,訓練速度緩慢;2,overfiting,增加預測值的誤差。而如果選擇過少的N,你的主要問題就是,難以訓練成功。因此,在N的選擇上,要注意使用cross-validation來做test,以避免overfiting的問題。
本文屬於作者原創,抄襲侵權必究。
歡迎關注本人微信公眾號:QuantJiang