機器學習—神經網絡與深度學習
神經網絡與深度學習:
(一)感覺機和多層網絡
(二)誤差逆傳播算法
(三)神經網絡的優化技巧
(四)深度學習的基本概念
(五)常見的深度網絡結構
(零)前置知識
0 基本概念
0.1 點到直線的距離
若空間中直線方程為\(Ax+By+C=0\),點P的坐标為\((x_0,y_0)\)。
\[d = \frac{Ax_0+By_0+C}{\sqrt{A^2+B^2}}點到直線的距離
\]
0.2 超平面(Hyperplanes)
超平面是在空間\(R^d\)中的一個子空間\(R^{d-1}\)。
在二維空間中的超平面是一條線,在三維空間的超平面是一個平面。

0.3 歐式距離(Euclidean Metric)
二維空間公式
\[\rho = \sqrt{(x_2-x_1)^2+(y_2-y_1)^2} \\
|X| = \sqrt{x_2^2+y_2^2}
三維空間公式
\[\rho = \sqrt{(x_2-x_1)^2 + (y_2-y_1)^2 + (z_2-z_1)^2} \\
|X| = \sqrt{x_2^2 + y_2^2 + z_2^2}
n維空間公式
\[d(x,y) := \sqrt{(x_2-x_1)^2 + (x_2-y_2)^2 + \cdots + (x_n-y_n)^2} = \sqrt{\sum \limits_{i=1}^{n}(x_i-y_i)^2}
0.4 樣本到超平面距離
我們假設超平面是\(h = w \cdot x+b\),其中\(w= (w_0,w_1,\cdots,w_m)\),\(x=(x_0,x_1,\cdots,x_m)\),
樣本點\(x^{'}\)到超平面的距離如下:
\[d = \frac{w \cdot x^{'}+b}{||w||}
0.5 幾種函數的區分與認識
-
損失函數:用來衡量單個樣本預測值與真實值的誤差,是一個非負實值函數,損失函數越小,則預測正确程度越高。表示為
\[L(y_i,f(x_i))
-
代價函數:定義在訓練集上,是模型關于訓練集的平均損失(也稱為經驗風險函數),表示為
\[\frac{1}{N}\sum \limits_{i=1}^{N}L(y_i,f(x_i))
- 風險函數:是指損失函數的期望,(又稱期望損失),由于輸入\(X\)和輸出\(Y\)是随機變量,那麼可求得聯合分布\(P(X,Y)\),是以可以表示為:
\[R_{exp}(f) = E_p[L(Y,f(X))] = \int_{X,Y}L(y,f(x))p(x,y)dxdy
- 目标函數:是一個更為廣的概念,比如最小化結構風險求最優模型時,結構化風險函數就是目标函數,而最小化經驗風險求最優模型時,經驗風險函數就是目标函數,簡單地說,目标函數就是需要優化的函數。
0.6 梯度的了解及其應用
我們先來回顧以下幾個熟悉的概念,導數、偏導數、方向導數,進而根據他們的實際意義來引出并了解梯度。
-
導數
導數的定義
\[f'(x) = \underset{\Delta x \to 0}{lim} \frac{\Delta y}{\Delta x} \frac{f(x_0+\Delta x) - f(x_0)}{\Delta x}
這裡補充相關符号的意義及關系,如下
\(\Delta x\): \(x\)的變化量 ;
\(dx\): \(x\)的變化量\(\Delta x\)趨于0時,則記作微元\(dx\);
\(\Delta y\):\(\Delta y =f(x_0 + \Delta x)-f(x_0)\),是函數的增量;
\(dy\): \(dy = f'(x_0)dx\),是切線的增量;
當\(\Delta x \to 0\)時,\(dy\)與\(\Delta y\)都是無窮小,\(dy\)是\(\Delta y\)的主部,即\(\Delta y=dy + o(\Delta x)\)。
-
偏導數
偏導數的定義
\[\frac{\partial}{\partial x_j}f(x_0,x_1,...,x_n) = \underset{\Delta x \to 0}{lim} \frac{\Delta y}{\Delta x} = \underset{\Delta x \to 0}{lim} \frac{f(x_0,x_1,...,x_n) - f(x_0,...,x_j,...,x_n)}{\Delta x}
與導數的區分
可以看到,導數與偏導數本質上是一緻的,都是當自變量的變化量趨于0時候,函數值的變化量與自變量變化量比值的極限。直覺地說,偏導數也就是函數在某一點上沿某一坐标軸正方向的變化率。
與導數的差別在于:
導數,指的是一進制函數中,函數\(y=f(x)\)在某一點處沿\(x\)軸正方向的變化率。
偏導數,指的是多元函數中,函數\(y=f(x_1,x_2,...,x_n)\)在某一點處沿某一坐标軸\((x_1,x_2,...,x_n)\)正方向的變化率。
-
方向導數
方向導數的定義
\[\frac{\partial}{\partial l}f(x_0,x_1,...,x_n) = \underset{\rho \to 0}{lim} \frac{\Delta y}{\Delta x} = \underset{\rho \to 0}{lim} \frac{f(x_0+\Delta x_0,x_1+\Delta x_1,...,x_n+\Delta x_n) - f(x_0,x_1,...,x_n)}{\rho} \\
\rho = \sqrt{(\Delta x_0)^2 + (\Delta x_1)^2 + ...+ (\Delta x_j)^2 + ... +(\Delta x_n)^2}
方向導數的意義為,某一點在某一趨近方向上的導數值。通俗地說,方向導數就是函數在某一特定方向上的變化率。
-
梯度: 對于可微的數量場\(f(x,y,z)\),以\(\left(\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y},\frac{\partial f}{\partial z}\right)\)為分離的向量場,稱為\(f\)的梯度(或斜量)
梯度定義
\[grad f(x_0,x_1,...,x_n) = \left(\frac{\partial f}{\partial x_0},\frac{\partial f}{\partial x_1},...,\frac{\partial f}{\partial x_j},...,\frac{\partial f}{\partial x_n} \right)
梯度的提出是為回答一個問題:
函數在變量空間的某一點處,沿着哪一個方向有最大的變化率?
梯度定義如下:
函數在某一點的梯度是這樣一個向量,它的方向與取得最大方向導數的方向一緻,而它的模為方向導數的最大值。
這裡注意三點:
1)梯度是一個向量,即有方向有大小;
2)梯度的方向是最大方向導數的方向;
3)梯度的值是最大方向導數的值。
我們若将偏導數和方向導數看作是一個向量,向量的方向即為變化率的方向,向量的模即為變化率的大小。那麼梯度的意義,就可以了解為,函數在某一點最大的方向導數,函數沿梯度方向,函數有最大的變化率。也即可沿着梯度的方向去求極值。
梯度下降法(gradient descent)是一個最優化算法,常用于機器學習和人工智能當中用來遞歸性地逼近最小偏差模型。顧名思義,梯度下降法的計算過程就是沿梯度下降的方向求解極小值(也可以沿梯度上升方向求解極大值)。其疊代公式為
\[a_{k+1} = a_{k} + \rho_k s^{-(k)}
其中\(s^{-(k)}\)代表梯度的負方向,\(\rho_k\)表示梯度方向上的搜尋步長。梯度方向我們可以通過對函數求導得到,步長的确定比較麻煩,步長太大可能會發散,太小則收斂速度又慢。一般确定步長的方法是由線性搜尋算法來确定,即把下一個點的坐标看作是\(a_{k+1}\)的函數,然後求滿足\(f(a_{k+1})\)的最小值\(a_{k+1}\)即可。
一般情況下,梯度向量為0則說明到了一個極值點,此時梯度的幅值也為0。而采用梯度下降算法進行最優化求解時,算法疊代的終止條件是梯度向量的幅值接近0即可,可以設定非常小的常數門檻值。
在求解損失函數的最小值時,可以通過梯度下降法來一步步的疊代求解,得到最小化的損失函數和模型參數值。反過來,如果我們需要求解損失函數的最大值,這時就需要用梯度上升法來疊代了。在機器學習中,基于基本的梯度下降法發展了兩種梯度下降方法,分别為随機梯度下降法和批量梯度下降法。
0.7 全局最小與局部極小
模型學習的過程,實質上就是一個尋找最優參數的過程,例如BP算法試圖通過最速下降來尋找使得累積經驗誤差最小的權值與門檻值,在談到最優時,一般會提到局部極小和全局最小。
局部極小解:參數空間中的某個點,其領域點的誤差函數值均不小于該點的誤差函數值。
全局最小解:參數空間中的某個點,所有其他點的誤差函數值均不小于該點的誤差函數值。
要成為局部極小點,隻要滿足該點在參數空間上的梯度為零。
局部極小點可以有多個,而全局最小隻有一個。
全局最小一定是局部極小,但局部最小卻不一定是全局最小。
(如下圖中有兩個局部極小,但隻有其中之一是全局最小)
在很多機器學習算法中,在參數尋優過程時,都試圖找到目标函數的全局最小。
0.神經元模型
神經元(neuron)模型是神經網絡中最基本的成分,也即上述定義總的“簡單單元”。在生物神經網絡中,每個神經元與其他神經元相連,當它“興奮”時,就會向相連的神經元發送化學物質,進而改變這些神經元内的電位;如果某神經元的電位超過了一定的“門檻值”(threshold),那麼它就會被激活,即“興奮”起來,向其他神經元發送化學物質。
上述情形抽象為簡單的模型,稱為“M-P神經元模型”。
對\(y = f\left(\sum \limits_{i=1}^n w_ix_i - \theta\right)\)
其中,\(x_i\)可了解為第i個相鄰神經元發送的化學物品質,
\(w_i\)可了解為機關化學物質對于目前神經電位的影響,
則\(w_ix_i\)表示第i個神經元對目前神經元電位的影響(增加or減少),
假設目前神經元的電位原本為0,則\(\sum_1^nw_ix_i\)表示目前神經元的電位,
将其與門檻值\(\theta\)相減,若大于0,則神經元處于興奮狀态,
用激活函數\(f\)表示本神經元向下一個神經元發送的化學物質數量,也即為傳遞信号。
在這個模型中,神經元接收到來自n個其他神經元傳遞過來的輸入信号,這些輸入信号通過帶權重的連接配接(connection)進行傳遞,神經元接收到的總輸入值将與神經元的門檻值進行比較,然後通過“激活函數”(activation function)處理以産生神經元的輸出。
理想中的激活函數是下圖所示的階躍函數,它将輸入值映射為輸出值“0”或“1”,顯然,“1”對應于神經元興奮,“0”對應于神經元抑制。然而,階躍函數具有不連續、不光滑等不太好的性質,是以實際常用Sigmoid函數作為激活函數。典型的Sigmoid函數,如下圖所示,它把可能在較大範圍内變化的輸入值擠壓到(0,1)輸出值範圍内,是以有時也稱為“擠壓函數”(squashing function)。
我們把許多個這樣的神經元按一定層次結構連接配接起來,就得到了神經網絡。
1.感覺機
感覺機(perceptron)是二類分類的線性分類模型,其輸入為執行個體的特征向量,輸出為執行個體的類别,取+1和-1二值。感覺機對應于輸入空間(特征空間)中将執行個體劃分為正負兩類的分離超平面,屬于判别模型。
感覺機(Perceptron)由兩層神經元組成,如下圖所示,輸入層接收外界輸入信号後傳遞給輸出層,輸出層是M-P神經元(亦稱“門檻值邏輯單元”)(threshold logic unit)
感覺機學習旨在求出将訓練資料進行線性劃分的分離超平面,為此,導入基于誤分類的損失函數,利用梯度下降法對損失函數進行極小化,求得感覺機模型。
感覺機學習算法具有簡單而易于實作的優點,分為原始形式和對偶形式。
感覺機預測是用學習得到的感覺機模型對新的輸入執行個體進行分類。
1.1 感覺機模型
感覺機定義:假設輸入空間(特征空間)是\(X⊆R^n\),輸出空間是\(y={+1,-1}\).輸入\(x∈X\)表示執行個體的特征向量,對應于輸入空間(特征空間)的點;輸出\(y∈y\)表示執行個體的類别。由輸入空間到輸出空間的如下函數:
\[f(x) = sign(w \cdot x+b)
稱為感覺機。其中,\(w\)和\(b\)為感覺機模型參數,\(w∈R^n\)叫作權值(weight)或者權值向量(weight vector),\(b∈R\)叫作偏置(bias),\(w \cdot x\)表示\(w\)和\(x\)的内積。\(sign\)是符号函數,即
\[sign(x) = \left\{\begin{matrix}
+1, \quad x≥0 \\
-1, \quad x<0
\end{matrix}\right.
感覺機是一種線性分類模型,屬于判别模型。感覺機模型的假設空間是定義在特征空間中所有線性分類模型(linear classification model)或線性分類器(linear classifier),即函數集合{\(f|f(x)=w \cdot x+b\)}.
感覺機有如下幾何解釋:線性方程
\[y = w \cdot x+b = 0
對應于特征空間\(R^n\)中的一個超平面\(S\),其中\(w\)是超平面的法向量,\(b\)是超平面的截距。這個超平面将特征空間劃分為兩個部分。位于兩部分的點(特征向量)分别被分為正、負兩類。是以,超平面S稱為分離超平面(separating hyperplane),如下圖所示
1.2 感覺機學習政策
1.2.1 資料集的線性可分性
資料集的線性可分性的定義:給定一個資料集
\[T = \left\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N) \right\}
其中,\(x_i∈X = R^n,y_i∈y=\left\{+1,-1\right\},i=1,2,\cdots,N\),如果存在某個超平面\(S\)
\[w \cdot x+b = 0
能夠将資料集的正執行個體點和負執行個體點完全正确地劃分到超平面的兩側,即
\[\left\{\begin{matrix}
對所有y_i=+1的執行個體, \quad 有w*x_i+b > 0 \\
對所有y_i=-1的執行個體, \quad 有w*x_i+b < 0
則稱資料集T為線性可分資料集(linearly separable data set);否則,稱資料集合T線性不可分。
1.2.2 感覺機學習政策
假設訓練資料集是線性可分的,感覺機學習的目标是求得一個能夠将訓練集正執行個體和負執行個體點完全正确分開的分離超平面。為了找出這樣的超平面,即确定感覺機模型參數\(w,b\),需要确定一個學習政策,即定義(經驗)損失函數并将損失函數極小化。
損失函數的一個自然選擇是誤分類點的總數。但是,這樣的損失函數不是參數\(w,b\)的連續可導函數,不易優化。損失函數的另一個選擇是誤分類點到超平面S的總距離,這是感覺機所采用的。
為此,首先寫出輸入空間\(R^n\)中任一點\(x_0\)到超平面S的距離:
\[\frac{1}{||w||}|w*x_0+b|
其中,\(||w||\)是\(w\)的\(L_2\)範數,(也即為歐式距離\(||w|| = \sqrt{w_1^2+w_2^2+...+w_n^2}\))。
其次,對于誤分類的資料(\(x_i,y_i\))來說,\(-y_i(w \cdot x_i+b)>0\)成立。因為當\(w \cdot x_i+b>0\)時,\(y_i=-1\);而當\(w\cdot _i+b<0\)時,\(y_i=+1\)。是以,誤分類點\(x_i\)到超平面S的距離是
\[-\frac{1}{||w||}y_i(w \cdot x_0+b)
這樣,假設超平面S的誤分類點集合為M,那麼所有誤分類點到超平面S的總距離為
\[\frac{1}{||w||}\sum \limits_{x_i∈M}y_i(w \cdot x_0+b)
若不考慮\(\frac{1}{||w||}\),就得到感覺機學習的損失函數。\(\sum \limits_{x_i∈M}y_i(w \cdot x_0+b)\)也稱為樣本點的函數間隔。
(為何可不考慮\(\frac{1}{||w||}\)?)
這是因為,編置\(b\)可以定義為\(b = w_0x_0\),其中\(x_0=1\),将\(b\)吸收進\(w\)裡面。這樣一來,總距離就轉變成\(-\frac{1}{||w||}\sum_{x_i∈M}y_iw \cdot x_i\)。
由此,分子與分母都含有\(w\),當分子的\(w\)擴大N倍時,分母的L2範數也會擴大N倍數。也就是說,分子和分母有固定的倍數關系。那麼我們可以固定分子或者分母為1,然後求分母的倒數或者分子自己的最小化作為損失函數,這樣可以簡化我們的損失函數。在感覺機模型中,我們采用的是保留分子。
給定一個資料集
其中,\(x_i∈X = R^n,y_i∈y=\left\{+1,-1\right\},i=1,2,\cdots,N\).
感覺機\(sign(w \cdot x+b)\)學習的損失函數定義為
\[L(w,b) = -\sum \limits_{x_i∈M}y_i(w \cdot x_i+b)
其中M為誤分類點的集合。(這個損失函數就是感覺機學習的經驗風險函數。)
顯然,損失函數\(L(w,b)\)是非負的。如果沒有誤分類點,損失函數值是0。而且,誤分類點越少,誤分類點離超平面越近,損失函數就越小。
對于一個特定的樣本點的損失函數:在誤分類時是參數\(w,b\)的線性函數,在正确分類時是0。是以,給定訓練資料集T,損失函數\(L(w,b)\)是\(w,b\)的連續可導函數。
感覺機學習的政策是在假設空間中選取使損失函數\(L(w,b) = -\sum \limits_{x_i∈M}y_i(w \cdot x_i+b)\)最小的模型參數\(w,b\),即為感覺機模型。
1.2.3 感覺機學習算法
感覺機學習問題轉化為求解損失函數式\(L(w,b) = -\sum \limits_{x_i∈M}y_i(w \cdot x_i+b)\)的最優化問題,最優化的方法是随機梯度下降法。
1.2.3.1 感覺機學習算法的原始形式
感覺機學習算法是對以下最優化問題的算法。給定一個資料集
其中,\(x_i∈X = R^n,y_i∈y=\left\{+1,-1\right\},i=1,2,\cdots,N\),求參數\(w,b\),使其為以下損失函數極小化問題的解
\[\underset{w,b} min L(w,b) = -\sum \limits_{x_i∈M}y_i(w \cdot x_i+b)
其中M為誤分類點的集合。
感覺機學習算法是誤分類驅動的,具體采用随機梯度下降法(stochastic gradient descent)。
首先,任意選取一個超平面\(w_0,b_0\),然後用梯度下降法不斷地極小化目标函數\(\underset{w,b} min L(w,b) = -\sum \limits_{x_i∈M}y_i(w \cdot x_i+b)\)。極小化過程不是一次使M中所有誤分類點的梯度下降,而是依次随機選取一個誤分類點使其梯度下降。
假設誤分類點集合M是固定的,那麼損失函數\(L(w,b)\)的梯度由下面給出
\[▽_wL(w,b) = -\sum \limits_{x_i∈M}y_ix_i \\
▽_bL(w,b) = -\sum \limits_{x_i∈M}y_i
随機選取一個誤分類點(\(x_i,y_i\)),對\(w,b\)進行更新:
\[w ← w + \eta y_ix_i\\
b ← b + \eta y_i
其中,\(\eta(0<\eta≤1)\)是步長,在統計學習中又稱為學習率(learning rate)。這樣,通過疊代可以期待損失函數\(L(w,b)\)不斷減小,直到為0。
綜上所述,得到如下算法:
[算法](感覺機學習算法的原始形式)
輸入:訓練資料集\(T = \left\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N) \right\}\),其中\(x_i∈X = R^n,y_i∈y=\left\{+1,-1\right\},i=1,2,\cdots,N\),學習率\(\eta(0<\eta≤1)\);
輸出:\(w,b\);感覺機模型\(f(x) = sign(w \cdot x+b)\).
(1)選取初值\(w_0,b_0\);
(2)在訓練集中選取資料(\(x_i\),\(y_i\));
(3)如果\(y_i(w \cdot x+b)≤0\),
(4)轉至(2),直至訓練集中沒有誤分類點。
[注]這種學習算法直覺上有如下解決:當一個執行個體點被誤分類,即位于分離超平面的錯誤一側時,則調整\(w,b\)的值,使分離超平面向該誤分類點的一側移動,以減少該誤分類點與超平面間的距離,直至超平面越過該誤分類點使其被正确分類。本算法是感覺機學習的基本算法,對應于後面的對偶形式,稱為原始形式。感覺機學習算法簡單且易于實作。
[例1]試用感覺機學習算法的原始形式求感覺機模型。
如下圖所示的訓練資料集,其正執行個體點是\(x_1=(3,3)^T,x_2=(4,3)^T\),負執行個體點是\(x_3=(1,1)^T\),試用感覺機學習算法的原始形式求感覺機模型\(f(x)=sign(w \cdot x+b)\). 這裡,\(w=(w^{(1)},w^{(2)})^T,x=(x^{(1)},x^{(2)})^T\)。
解: 建構最優化問題:
\[\underset{w,b}min L(w,b) = -\sum \limits_{x_I∈M}y_i(w\cdot x_i+b)
按感覺機學習算法的原始形式算法,求解\(w,b\)。\(\eta=1\)。
(1) 取初值\(w_0=0,b_0=0\)
(2) 對\(x_1=(3,3)^T,y_1(w_0+x_1+b_0)=0\),未能被正确分類,更新\(w,b\)
\[w_1 = w_0 + y_1x_1 = (3,3)^T,\quad b_1 = b_0 + y_1 = 1
得到線性模型
\[w_1 \cdot x+b_1 = 3x^{(1)}+3x^{(2)}+1
(3) 對\(x_1,x_2\),顯然,\(y_i(w_1\cdot x_i+b_1)>0\),被正确分類,不修改\(w,b\);
對\(x_3=(1,1)^T,y_3(w_1 \cdot x_3+b_1)<0\),被誤分類,更新\(w,b\)。
\[w_2 = w_1 + y_3x_3 = (2,2)^T,\quad b_2 = b_1 + y_3 = 0
\[w_2*x + b_2 = 2x^{(1)} + 2x^{(2)}
如此繼續下去,直到
\[W_7 = (1,1)^T,\quad b_7 = -3\\
w_7 \cdot x + b_7 = x^{(1)}+x^{(2)} - 3
詳細疊代過程見下表:
對所有資料點\(y_i(w_7 \cdot x_i+b_7)>0\),沒有誤分類點,損失函數達到極小、
分類超平面為:\(x^{(1)}+x^{(2)} - 3\) =0
感覺機模型為:\(f(x) = sign(x^{(1)}+x^{(2)}-3)\)
這是在計算中誤分類點先後取\(x_1,x_3,x_3,x_3,x_1,x_3,w_3\)得到的分離超平面和感覺機模型。如果在計算中誤分類點依次取\(x_1,x_3,x_3,x_3,x_2,x_3,x_3,x_3,x_1,x_3,x_3\),那麼得到的分離超平面是\(2x^{(1)}+x^{(2)}-5=0\),得到的感覺機模型為:\(f(x) = sign(2x^{(1)}+x^{(2)}-5)\)。
由此可見,感覺機學習算法由于采用不同的初值或選取不同的誤分類點,解可以不同。
1.2.3.2 感覺機學習算法的對偶形式
感覺機學習的對偶形式的基本想法是,将\(w\)和\(b\)表示為執行個體\(x_i\)和标記\(y_i\)的線性組合的形式,通過求解其系數而求得\(w\)和\(b\)。不失為一般性,在原始形式中,可以假設初始值\(w_0,b_0\)均為0。對誤分類點\((x_i,y_i)\)通過
\[w ← w + \eta y_ix_i \\
逐漸修改\(w,b\),設修改n次,則\(w,b\)關于\((x_i,y_i)\)的增量分别是\(\alpha_iy_ix_i\)和\(\alpha_iy_i\),這裡\(a_i=n_i\eta\)。
這樣,從學習過程不難看出,最後學習到的\(w,b\)可以分别表示為
\[w = \sum \limits_{i=1}^{N}\alpha_iy_ix_i \\
b = \sum \limits_{i=1}^{N}\alpha_iy_i
這裡,\(\alpha_i≥0,i=1,2,\cdots,N\),當\(\eta=1\)時,表示第\(i\)個執行個體點由于誤分而進行更新的次數。執行個體點更新次數越多,意味着它距離分離超平面越近,也就越難正确分類。換句話說,這樣的執行個體對學習結果影響最大。
[算法2](感覺機學習算法的對偶形式)
輸入:線性可分的資料集\(T = \left\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N) \right\}\),其中\(x_i∈X = R^n,y_i∈y=\left\{+1,-1\right\},i=1,2,\cdots,N\); 學習率\(\eta(0<\eta≤1)\);
輸出:\(\alpha,b\); 感覺機模型\(f(x) = sign(\sum \limits_{j=1}^{N}\alpha_jy_jx_j \cdot x+b)\),其中\(\alpha=(\alpha_1,\alpha_2,\cdots,\alpha_N)^T\)。
(1) \(\alpha←0,b←0\);
(2) 在訓練集中選取資料(\(x_i,y_i\));
(3) 如果\(y_i \left(\sum \limits_{j=1}^{N}\alpha_jy_jx_j \cdot x_i+b \right)≤0\),
\[\alpha_i ← \alpha_i + \eta \\
(4) 轉至(2)直到沒有誤分類資料。
對偶形式中訓練執行個體僅以内積分(“\(\cdot\)”)的形式出現。為了友善,可以預先将訓練集中執行個體間的内積計算出來并以矩陣的形式存儲,這個矩陣就是所謂的Gram矩陣(Gram matrix)
\[G = [x_i \cdot x_j]_{N×N}
[例2]試用感覺機學習算法對偶形式求感覺機模型。
資料同例1,正樣本點是\(x_1=(3,3)^T,x_2 = (4,3)^T\),負樣本點是\(x_3 = (1,1)^T\),試用感覺機學習算法對偶形式求感覺機模型。
解:
(1) 取\(\alpha_i=0,i=1,2,3,b = 0,\eta = 1\)
(2) 計算Gram矩陣
\[G = \begin{bmatrix}
18 & 21 & 6 \\
21 & 25 & 7 \\
6 & 7 & 2
\end{bmatrix}
(3) 誤分條件
\[y_i \left(\sum \limits_{j=1}^{N}\alpha_jy_jx_j \cdot x_i + b \right)≤0
參數更新
\[\alpha_i ← \alpha_i + 1, \quad b ← b + y_i
(4)疊代過程。詳見下表。
(5)
\[w = 2x_1 + 0x_2 - 5x_3 = (1,1)^T \\
b = -3
分離超平面
\[x^{(1)} + x^{(2)} -3 = 0
感覺機模型
\[f(x) = sign(x^{(1)} + x^{(2)} -3)
與原始形式一樣,感覺機學習算法的對偶形式疊代也是收斂的,存在多個解。
1.2.4 感覺機學習算法的收斂性
Novikoff定理:設訓練資料集T= \(T = \left\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N) \right\}\)是線性可分的,其中\(x_i∈X = R^n,y_i∈y=\left\{+1,-1\right\},i=1,2,\cdots,N\),則有
(1) 存在滿足條件\(||\hat w_{opt}||=1\)的超平面\(\hat w_{opt} \cdot \hat x= w_{opt}\cdot x+b_{opt}=0\)将訓練資料集完全正确分開;且存在\(\gamma >0\),對所有\(i=1,2,\cdots,N\)
\[y_i(\hat w_{opt} \cdot\hat x_i) = y_i(w_{opt}\cdot x_i+b_{opt})≥\gamma
(2) 令\(R= \underset{1≤i≤N}{max} ||\hat x_i||\),則感覺機算法在訓練資料集上的誤分類此時k滿足不等式
\[k ≤ (\frac{R}{\gamma})^{2}
定理表明,誤分類的次數k是有上界的,經過有限次搜尋可以找到将訓練資料完全正确分開的分離超平面。也就是說,當訓練資料集線性可分時,感覺機學習算法原始形式疊代是收斂的。并且,感覺機學習算法存在許多解,這些解既依賴于初值的選擇,也依賴于超平面增加限制條件。當訓練集線性不可分時,感覺機學習算法不收斂,疊代結果會發生震蕩。
1.2.5感覺機實作邏輯運算
感覺機能容易地實作邏輯與&,或|,非!。
若根據\(y = f(\sum_i{w_ix_i}-\theta)\),假定\(f\)為階躍函數,有
- “與”(\(x_1\)∧\(x_2\)):令\(w_1=w_2=1,\theta =2\),則\(y = f(1 \cdot x_1+1\cdot x_2-2)\),僅在\(x_1=x_2=1\)時,\(y=1\);
- “或”(\(x_1∨x_2\)): 令\(w_1=w_2=1,\theta=0.5\),則\(y = f(1\cdot x_1+1 \cdot x_2-0.5)\),當\(x_1 = 1或x_2=1\)時,\(y=1\);
- “非”(\(﹁x\)):令\(w_1 = -0.6,w_2 = 0,\theta =-0.5\),則\(y = f(-0.6 \cdot x_1+0\cdot x_2+0.5)\),當\(x_1=1\)時,\(y=0,y=1\)。
更一般地,給定訓練資料集,權重\(w_i(i=1,2,\cdots,n)\)以及門檻值\(\theta\)可通過學習得到。門檻值\(\theta\)可看作一個固定輸入為-1.0的“啞節點”(dummy node)所對應的連接配接權重\(w_{n+1}\)。這樣,權重和門檻值的學習就可統一為權重的學習。
感覺機學習規則非常簡單,對訓練樣例(x,y),若目前感覺機的輸出為\(\hat y\),則感覺機權重将這樣調整:
\[w_i←w_i + \Delta w_i, \\
\Delta w_i = \eta(y - \hat y)x_i
其中\(\eta∈(0,1)\)稱為學習率(learning rate)。
若感覺機對訓練樣例\((x,y)\)預測正确,即\(\hat y = y\),則感覺機隻有輸出層神經元進行激活函數處理,即隻擁有一層功能神經元(functional neuron),其學習能力非常有限。事實上,上述與、或、非問題都是線性可分(linearly separable)的問題。
若兩類模式是線性可分的,即存在一個線性超平面能将它們分開,如下圖所示,則感覺機的學習過程一定會收斂(converge),而求得适當的權向量\(w=(w_1;w_2;\cdots,w_{n+1})\);否則若不收斂則感覺機學習過程将會發生振蕩(fluctuation),權向量\(w\)難以穩定并确定下來,不能求得合适解。
(單層)感覺機甚至不能解決異或這樣簡單的非線性可分問題。如下圖所示:
要解決非線性可分問題,需考慮使用多層功能神經元。
例如下圖這個簡單的兩層感覺機就能解決異或問題。
如上圖的網絡結構稱為“兩層網絡”,其中輸出層和輸入層之間的一層神經元,被稱為隐層或隐含層(hidden layer)(故該網絡結構也可稱“單隐層網絡”),隐含層和輸出層都是擁有激活函數的功能神經元。
更一般的,常見的神經網絡是形如下圖所示的層級結構((a)通常稱為“兩層網絡”或“單隐層網絡”)
每層神經元與下一層神經元全互連,神經元之間的不存在同層連接配接,也不存在跨層連接配接。這樣的神經網絡結構通常稱為“多層前饋神經網絡”(multi-layer feedforward neural network),其中輸入層神經元接收外界輸入,隐層與輸出層神經元對信号進行加工,最終結果由輸出層神經元輸出;換言之,輸入層神經元僅是接受輸入,不進行函數處理,隐層與輸出層包含功能神經元。
神經網絡的學習過程,就是根據訓練資料來調整神經元之間的“連接配接權”(connection weight)以及每個功能神經元的門檻值;換言之,神經網絡“學”到的東西,蘊涵在連接配接權與門檻值中。
2.多層網絡
2.1 單層前饋神經網絡
這裡先回顧一下,單層前饋神經網絡。将多個M-P神經元模型按層連接配接,就能得到單層前饋神經網絡。
單隐層前饋神經網絡由輸入層、隐含層、輸出層組成,可簡單模拟生物神經網絡,每層神經元與下一層神經元連接配接,神經元之間不存在跨層連接配接、同層連接配接,輸入層用于資料的輸入,隐含層與輸出層神經元對資料進行加工。
取出其中一個神經元進行讨論,其輸入到輸出的變換關系為
\[s_j = \sum \limits_{i=1}^{n}w_{ji}x_i - \theta_j \\
y_j = f(s_j) = \left\{\begin{matrix}
1, \quad s_j ≥ 0 \\
0, \quad s_j < 0
上式中,\(x=[x_1,x_2,\cdots,x_n]^T\)是輸入特征向量,\(w_{ji}\)是\(x_i\)到\(y_j\)的連接配接權,輸出值\(y_j(j=1,2,...,m)\)是按照不同特征的分類結果。
2.2 多層前饋神經網絡
多層前饋神經網絡有一個輸入層,中間包含一個或多個隐含層,有一個輸出層。多層感覺機網絡中輸入與輸出變換關系為
\[s_i^{(q)} = \sum \limits_{j=0}^{n_q-1}w_{ij}^{(q)}x_j^{(q-1)} \\
(x_0^{(q-1)} = \theta_i^{(q)}, \quad w_{i0}^{(q-1) = -1}) \\
x_i^{(q)} = f(s_i^{(q)}) =
\left\{\begin{matrix}
1, \quad s_j^{(q)} ≥ 0 \\
-1, \quad s_j^{(q)} < 0
\end{matrix}\right. \\
其中,i = 1,2,...,n_q; \quad j = 1,2,...,n_{q-1}; \quad q = 1,2,...,Q \\
這時每一層相當于一個單層前饋神經網絡,如對于第q層,它形成一個\(n_{q-1}\)維的超平面。它對于該層的輸入模式進行線性分類,但由于多層的組合,最終可以實作對輸入模式的較複雜的分類。
2.1 網絡結構
多層網絡,顧名思義就是由多個層結構組成的網絡系統,它的每一層都是由若幹個神經元結點構成,該層的任意一個結點都與上一層的每一個結點相聯,由它們來提供輸入,經過計算産生該結點的輸出并作為下一層結點的輸入。
值得注意的是任何多層的網絡結構必須有一個輸入層、一個輸出層。下面的圖結構是更形象的表示:
我們從圖像中來說明多層網絡的結構:上圖為一個三層的網絡結構,它由一個輸入層、一個輸出層和一個隐藏層構成。(當然隐藏層的層數可以更多。)圖像隐藏層的節點與輸入層的每一個節點相連,也就是說它接收了一組向量\([x_1,x_2,x_3,\cdots,x_n]\)作為輸入,同時與它相連的n條線代表了n個輸入的權重。特别要注意的是圖像隐藏層節點與輸出層節點還有一條紅色的連線,它們代表偏置,即\(w_0\)。
我們知道,圖像的第\(i\)個節點,它将輸入與對應的權重進行線性權重求和,然後經過\(sigmold\)函數計算,把得到的結果作為該個結點的輸出。
\[I_i = net_{i} = w_0 + x_1w_1 + x_2w_2 + x_3w_3 + \cdots + x_nw_n = \sum \limits_{i=0}^{N=n}x_iw_i.\quad (其中x_0=1) \\
O_i = \frac{1}{1+e^{-net_i}}
整個多層網絡就是一組輸入開始,然後按照每條連結線的權重,進行一緻地向前計算。這裡我們進一步對上面這個網絡結構進行量化,以便後面實作:首先它是一個三層的網絡結構,第一層是輸入層,它本身沒有接收輸入,也沒有連線進來;第二層有3個結點,并且有\(3×(4+1)\)根連結線,注意每個結點有一個偏置線;最後一層是輸出層,它有4個結點,并且有\(4×(3+1)\)根連結線。是以說整個網絡結構為\([layer1, layer2,layer3]\),而每一層都是這樣的結構:\(layer = [nodes, weights]\)。
通俗來講,神經網絡其實就是按照一定規則連接配接起來的多個神經元。
上圖展示了一個全連接配接(full connected,FC)神經網絡,它的規則包含:
- 神經元按照層來布局。最左邊的輸入層,負責接收輸入資料;最右邊的輸出層,負責輸出資料。
- 中間是隐藏層,對于外部不可預見。隐藏層可以包括多層,大于一層的就被稱為深度神經網絡,層次越多資料處理能力越強。
- 同一層的神經元之間沒有連接配接。
- 前後兩層的所有神經元相連(這就是全連接配接的含義),前層神經元的輸出就是後層神經元的輸入。
- 每個連接配接都有一個權重。
多層神經網絡的訓練過程
多層神經網絡的訓練過程,按如下步驟進行:
1.從輸入層開始,将資料經過神經網絡傳輸到輸出層,這一步是前向傳播。
2.根據輸出,計算誤差(預測結果和已知結果之間的差異),得到代價函數。利用梯度下降法最小化誤差。
3.梯度下降法需要計算每個權重的梯度,使用反向傳播算法計算梯度,根據梯度調整權重值。
重複以上三個步驟訓練權重。
與單層網絡的差別
從大的方面來說,兩者都是通過梯度下降法,求取代價函數的最小值,來訓練權重。
差別在于,多層神經網絡引入了反向傳播來計算梯度。
單層網絡中,權重的梯度計算是直接求代價函數對某個權重的偏導數,單層網絡的代價函數相對簡單,可以這樣做。
但是多層神經網絡中,越靠近輸入層的權重,其代價函數越複雜,計算量非常大。而反向傳播算法是一種高效簡單的梯度算法。
(二)誤差逆傳播算法(BP)
誤差逆傳播算法(error BackPropagation,簡稱BP),是迄今最成功的神經網絡學習算法。現實任務中使用神經網絡時,大多是在使用BP算法進行訓練。值得指出的是,BP不僅可用于前饋神經網絡,還可用于其他類型的神經網絡,例如訓練遞歸神經網絡。但通常說“BP網絡”時,一般是指用BP算法訓練的多層前饋神經網絡。
2.1算法推導過程
給定訓練集D= {\((x_1,y_1),(x_2,y_2),...,(x_m,y_m)\)},\(x_i∈\mathbb{R}^d\),\(y_i∈\mathbb{R}^l\),即輸入示例由\(d\)個屬性描述,輸出\(l\)維實值向量。
我們在下圖給出一個擁有\(d\)個輸入神經元、\(l\)個輸出神經元、\(q\)個隐含層神經元的多層前饋網絡結構。
其中,輸出層第\(j\)個神經元的門檻值用\(\theta_j\)表示,隐含層第\(h\)個神經元的門檻值用\(\gamma_h\)表示。
輸入層第\(i\)個神經元與隐含層第\(h\)個神經元之間的連接配接權為\(v_{ih}\),
隐含層第\(h\)個神經元與輸出層第\(j\)個神經元之間的連接配接權為\(w_{hj}\)。
則記隐含層第\(h\)層神經元接收到的輸入為\(\alpha_h = \sum_{i=1}^{d}v_{ij}x_i\),
輸出層第\(j\)個神經元接收到的輸入為\(\beta_j = \sum_{h=1}^{q}w_{hj}b_h\),
其中\(b_{h}\)為隐含層第\(h\)個神經元的輸出,
\(E_k\)為均方誤差,
\(g_j = -\frac{\partial E_k}{\partial \beta_j}\),即為均方誤差\(E_k\)對輸出層第\(j\)個神經元的輸入\(\beta_j\)的負偏導數,
而\(e_h=-\frac{\partial E_k}{\partial \alpha_h}\),即均方誤差\(E_k\)對隐含層第\(h\)個神經元的輸入\(\alpha_h\)的負偏導數。
誤差\(E_k\)從後往前依次對各層功能神經元的輸入求導,這也展現了"誤差逆傳播"的實際含義。
假設隐含層和輸出層神經元都使用\(Sigmold\)函數
對訓練樣例\((x_k,y_k)\),假定神經網絡的輸出為\(\hat y_k = (\hat y_1^k,\hat y_2^k,...,\hat y_l^k)\),即
\[\hat y_j^k = f(\beta_j - \theta_j) \quad \quad (5.3)
式(5.3)的解釋:
該式即網絡輸出層第\(j\)個神經元的輸出表達式,其中\(\beta_j = \sum_{h=1}^q w_{hj}b_h\)是輸出層第\(j\)個神經元輸入,\(\theta_j\)是相應的門檻值,\(f\)是神經元的激活函數。通過該式,可以根據目前連接配接權和門檻值計算出訓練樣本\((x_k,y_k)\)的網絡輸出\(\hat y_k = (\hat y_1^k,\hat y_2^k,...,\hat y_l^k)\)。
則網絡在\((x_k,y_k)\)上的均方誤差為
\[E_k = \frac{1}{2}\sum \limits_{j=1}^{l}(\hat y_j^k - y_j^k)^2 \quad \quad (5.4)
式(5.4)的解釋:
該式就是針對訓練樣本\((x_k,y_k)\),求出網絡輸出\(\hat y_k = (\hat y_1^k,\hat y_2^k,...,\hat y_l^k)\)與真實值\(y_k\)之間的均方誤差(對應元素差的平方,再求和);這裡的二分之一是為了求導後可以使系數為1,因為平方求導會多出來一個2,正好與\(\frac{1}{2}\)抵消掉。
上圖的網絡中有\((d+l+1)q+l\)個參數需要确定:
輸入層到隐含層的\(d×q\)個權值、
隐含層到輸出層的\(q×l\)個權值、
\(q\)個隐含層神經元的門檻值、
\(l\)個輸出層神經元的門檻值。
BP是一個疊代學習算法,在疊代的每一輪中采用廣義的感覺機學習規則對參數進行更新估計,即與式\((w_i←w_i+\Delta w_i)\)類似,任意參數\(v\)的更新估計式為
\[v ← v + \Delta v \quad \quad (5.5)
下面以隐含層到輸出層的連接配接權\(w_{hj}\)為例來進行推導。
BP算法基于梯度下降(gradient descent)政策,以目标的負梯度方向對參數進行調整。
對\(E_k = \frac{1}{2}\sum \limits_{j=1}^{l}(\hat y_j^k - y_j^k)^2\)的均方誤差\(E_k\),給定學習率\(\eta\),對均方誤差\(E_k\)在連接配接權\(w_{hj}\)求偏導,有
\[\Delta w_{hj} = -\eta \frac{\partial E_k}{\partial w_{hj}} \quad \quad (5.6)
注意到,隐含層到輸出層的連接配接權\(w_{hj}\)在網絡結構中先影響到第\(j\)個輸出層神經元的輸入值\(\beta_j\),再影響到其輸出值\(\hat y_j^k\),然後進而影響到\((x_k,y_k)\)上的均方誤差\(E_k\),那麼(根據偏導數的鍊式法則)有
\[\frac{\partial E_k}{\partial w_{hj}} = \frac{\partial E_k}{\partial \hat y_j^k} \cdot \frac{\partial \hat y_j^k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial w_{hj}} \quad \quad (5.7)
這裡根據\(\beta_j\)的定義(\(\beta_j = \sum_{h=1}^{q}w_{hj}b_h\)),顯然有
\[\frac{\partial \beta_j}{\partial w_{hj}} = b_h \quad \quad (5.8)
如下圖,\(Sigmold\)函數有一個很好的性質:
\[f'(x) = f(x)(1-f(x)) \quad \quad (5.9)
\(f'(x) = f(x)(1-f(x))\)推導:
\[\begin{align}
&令f(x)= \frac{1}{1+e^{-x}},求導,得 \\
&f'(x) = \frac{e^{-x}}{(1+e^{-x})^2} = \frac{1}{1+e^{-x}}\cdot \frac{e^{-x}}{1+e^{-x}}
\quad \quad 由(\frac{u}{v})'=\frac{u'v-uv'}{v^2}得\\
&= \frac{1}{1+e^{-x}}(1-\frac{1}{1+e^{-x}}) = f(x)(1-f(x))\\
&證畢。\\
\end{align}
于是根據\(\hat y_j^k = f(\beta_j - \theta_j)\)和\(E_k = \frac{1}{2}\sum \limits_{j=1}^{l}(\hat y_j^k - y_j^k)^2\)有
&g_j = \frac{\partial E_k}{\partial \hat y_j^k} \cdot \frac{\partial \hat y_j^k}{\partial \beta_j} \\
&= -(\hat y_j^k-y_j^k)f'(\beta_j - \theta_j) \quad \quad (由f'(x) = f(x)(1-f(x))) \\
&= \hat y_j^k(1-\hat y_j^k)(y_j^k-\hat y_j^k) \quad \quad (5.10)
\(g_j=\hat y_j^k(1-\hat y_j^k)(y_j^k-\hat y_j^k)\)推導:
\[\frac{\partial E_k}{\partial \hat y_j^k} = \frac{\partial(\frac{1}{2})\sum_{j=1}^l(\
hat y_j^k -y_j^k)}{\partial \hat y_j^k} = (\hat y_j^k-y_j^k) \\
\frac{\partial \hat y_j^k}{\partial \beta_j} = \hat y_j^k(1-\hat y_j^k)
将\(\hat y_j^k = f(\beta_j - \theta_j)\)的表達式代入,即得:
\[\frac{\partial \hat y_j^k}{\partial \beta_j} = \frac{\partial f(\beta_j -\theta_j)}{\partial \beta_j} = \frac{\partial f(\beta_j - \theta_j)}{\partial (\beta_j - \theta_j)}\cdot \frac{\partial(\beta_j - \theta_j)}{\partial \beta_j} \\
= f(\beta_j-\theta_j)(1-f(\beta_j-\theta_j))\\
= \hat y_j^k(1-\hat y_j^k) \\
兩部分整理,證畢。
\(\Delta w_{hj} = \eta g_j b_h\)推導
再将\(g_j= \hat y_j^k(1-\hat y_j^k)(y_j^k-\hat y_j^k)\)和\(\frac{\partial \beta_j}{\partial w_{hj}} = b_h\)代入\(\frac{\partial E_k}{\partial w_{hj}} = \frac{\partial E_k}{\partial \hat y_j^k} \cdot \frac{\partial \hat y_j^k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial w_{hj}}\),再代入\(\Delta w_{hj} = -\eta \frac{\partial E_k}{\partial w_{hj}}\),就得到了BP算法中關于\(w_{hj}\)的更新公式
\[\Delta w_{hj} = \eta g_j b_h \quad \quad (5.11)
如上過程,類似可得以下:
&\Delta \theta_j = -\eta g_j \quad \quad (5.12)\\
&\Delta v_{ih} = \eta e_h x_i \quad \quad (5.13)\\
&\Delta \gamma_{h} = -\eta e_h \quad \quad (5.14)\\
\(\Delta \theta_j = -\eta g_j\)推導
\[根據鍊式求導法則有,\frac{\partial E_k}{\partial \theta_j} = \frac{\partial E_k}{\partial \hat y_j^k} \cdot \frac{\partial \hat y_j^k}{\partial \theta_j} \\
其中\frac{\partial \hat y_j^k}{\partial \theta_j} = \frac{\partial f(\beta_j-\theta_j)}{\partial \theta_j} = \frac{\partial f(\beta_j - \theta_j)}{\partial(\beta_j-\theta_j)}\cdot \frac{\partial (\beta_j -\theta_j)}{\partial \theta_j} \\
又根據f'(x) = f(x)(1-f(x))有\frac{\partial f(\beta_j-\theta_j)}{\partial (\beta_j-\theta_j)} = f(\beta_j -\theta_j)(1-f(\beta_j-\theta_j)),并且易知\frac{\partial (\beta_j-\theta_j)}{\partial \theta_j}=-1 \\
是以有 \quad \frac{\partial \hat y_j^k}{\partial \theta_j} = -f(\beta_j-\theta_j)(1-f(\beta_j-\theta_j)) = -\hat y_j^k(1-\hat y_j^k) \\
而\frac{\partial E_k}{\partial \hat y_j^k} = \frac{\partial\frac{1}{2}\sum_{j=1}^l(\
hat y_j^k-y_j^k)^2}{\partial \hat y_j^k} = (\hat y_j^k - y_j^k) \\
綜合兩部分求導結果,結合g_j=\hat y_j^k(1-\hat y_j^k)(y_j^k-\hat y_j^k)得,\\
\frac{\partial E_k}{\partial \theta_j} = -(\hat y_j^k-y_j^k)\hat y_j^k(1-\hat y_j^k) = \hat y_j^k(1-\hat y_j^k)(y_j^k-\hat y_j^k) = g_j \\
是以,類似于\Delta w_{hj} = \eta g_j b_h,\Delta \theta_j = \eta \frac{\partial E_k}{\partial \theta_j} = -\eta g_j。\quad \quad 證畢。
\(\Delta v_{ih} = \eta e_h x_i\)和\(\Delta gamma_h = -\eta e_h\)中
&e_h = \frac{\partial E_k}{\partial b_h} \cdot \frac{\partial b_n}{\partial \alpha_h} \\
&= -\sum \limits_{j=1}^l \frac{\partial E_k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial b_h} f'(\alpha_h-\gamma_h) \\
&= \sum \limits_{j=1}^{l} w_{hj}g_{j} f'(\alpha_j-\gamma_h) \\
&= b_h(1-b_h)\sum \limits_{j=1}^l w_{hj}g_{j} \quad \quad (5.15)
\(e_h = b_h(1-b_h)\sum \limits_{j=1}^l w_{hj}g_{j}\)推導
&為了求e_h=-\frac{\partial E_k}{\partial \alpha_h},先列出E_h和\alpha之間的聯系: \\
&①E_k = \frac{1}{2} \sum_{j=1}^l(\hat y_j^k-y_j^k)^2 \\
&②\hat y_j^k = f(\beta_j-\theta_j) \\
&③\beta_j = \sum_{h=1}^q w_{hj}b_{h}\\
&④b_h = f(\alpha_h-\gamma_h) \\
&為避免符号混淆,在接下來的推導中将\beta_j = \sum_{h=1}^qw_{hj}b_h中求和變量h換為p,而h特指\alpha_h中的h, \\
&即有\beta_j = \sum_{p=1}^q w_{pj}b_p.
由于\beta_j = \sum_{p=1}^q w_{pj}b_p,即隐含層第h個神經元的輸出b_n與輸出層任意神經元的輸入\beta_j均有關,\\
&是以\frac{\partial E_k}{\partial b_h} = \frac{\partial E_k}{\partial \beta_1} \frac{\partial \beta_1}{\partial b_n} + \frac{\partial E_k}{\partial \beta_2} \frac{\partial \beta_2}{\partial b_n} + ... + \frac{\partial E_k}{\partial \beta_l} \frac{\partial \beta_l}{\partial b_n} = \sum_{j=1}^l \frac{\partial E_k}{\partial \beta_j} \frac{\partial \beta_j}{\partial \beta_n} \\
&進而可得 e_h = -\frac{\partial E_k}{\partial \alpha_h} = -\frac{\partial E_k}{\partial b_h}\frac{\partial b_h}{\partial \alpha_h} = -\sum_{j=1}^l \frac{\partial E_k}{\partial \beta_j}\frac{\partial \beta_j}{\partial b_h}\frac{\partial b_h}{\partial \alpha_h} \\
&由g_j定義可知g_j = -\frac{\partial E_k}{\partial \beta_j},再根據f'(x) = f(x)(1-f(x))的結論可知,\frac{\partial b_h}{\partial \alpha_h} = b_n(1-b_n),\\
&而\frac{\partial \beta_j}{\partial b_h} = \frac{\partial \sum_{p=1}^qw_{pj}b_p}{\partial b_n} = w_{hj} \\
&綜上所述,e_h = - \sum_{j=1}^l \frac{\partial E_k}{\partial \beta_j}\frac{\partial \beta_j}{\partial b_h}\frac{\partial b_h}{\partial \alpha_h} = \sum_{j=1}^lg_{j}w_{hj}b_h(1-b_h) = b_h(1-b_h)\sum_{j=1}^l g_j w_{hj}
以上,證畢。
\(\Delta v_{ih} = \eta e_h x_i\)推導:
&類似于\Delta w_{hj} = \eta g_j b_h,并結合e_h的定義e_h = \frac{\partial E_k}{\partial \alpha_h},得 \\
&7\Delta v_{ih} = -\eta \frac{\partial E_k}{\partial v_{ih}} = -\eta \frac{\partial E_k}{\partial \alpha_h}\frac{\partial \alpha_h}{\partial v_{ih}} = \eta e_h x_i \\
&其中,由\alpha_h = \sum_{i=1}^d v_{ih}x_i,可得\frac{\partial \alpha_h}{\partial v_{ih}} = \frac{\partial \sum_{i=1}^{d}v_{ih}x_i}{\partial v_{ih}} = x_i, \quad 至此證畢.
\(\Delta \gamma_{h} = -\eta e_h\)推導:
&類似于\Delta w_{hj} = \eta g_j b_h,得 \Delta \gamma_h = -\eta \frac{\partial E_k}{\partial \gamma_h} = -\eta \frac{\partial E_k}{\partial b_n}\frac{\partial b_h}{\partial \gamma_h} \\
&而b_h = f(\alpha_h - \gamma_h),故\frac{\partial f(\alpha_h - \gamma_h)}{\partial \gamma_{h}} = \frac{\partial f(\alpha_h - \gamma_h)}{\partial (\alpha_h - \gamma_h)}\frac{\partial (\alpha_h - \gamma_h)}{\partial \alpha_h} \\
&其中,\frac{\partial(\alpha_h - \gamma_h)}{\partial \gamma_h} = -1, \frac{\partial(\alpha_h - \gamma_h)}{\partial \alpha_h} = 1, \quad 即\frac{\partial b_n}{\partial \gamma_h} = -\frac{\partial b_h}{\partial \alpha_h} \\
&是以 \Delta \gamma_h = -\eta \frac{\partial E_k}{\partial \gamma_h} = -\eta \frac{\partial E_k}{\partial b_h} \frac{\partial b_n}{\partial \gamma_h} = \eta \frac{\partial E_k}{\partial b_h} \frac{\partial b_h}{\partial \alpha_h} \\
&結合,e_h的定義e_h = \frac{\partial E_k}{\partial \alpha_h},是以\Delta \gamma_h = \eta \frac{\partial E_k}{\partial b_n}\frac{\partial b_n}{\partial \alpha_h} = -\eta e_h。\quad 證畢。
學習率\(\eta∈(0,1)\)控制着算法每一輪疊代中的更新步長,若太大則容易振蕩,太小則收斂速度又過慢。
(有時為了做精細調節,可令\(\Delta w_{hj} = \eta g_j b_h\)和\(\Delta \theta_j = \eta g_j\)使用\(\eta_1\),\(\Delta v_{ih} = \eta e_h x_i\)和\(\Delta gamma_h = -\eta e_h\)使用\(\eta_2\),兩者未必相等)
2.2 BP算法工作流程
對每個訓練樣例,BP算法執行以下操作:
先将輸入示例提供給輸入層神經元,然後逐層将信号前傳,直到産生輸出層的結果;
然後計算輸出層的誤差(第4-5行),
再将誤差逆向傳播至隐含層神經元(第6行),
最後根據隐含層神經元的誤差來對連接配接權和門檻值進行調整(第7行)。
該疊代過程層循環進行,直到達到某些停止條件為止。
輸入:訓練集\(D=\left\{(x_k,y_k)\right\}_{k=1}^m\); 學習率\(\eta\).
過程:
1:在(0,1)範圍内随機初始化網絡中所有連接配接權和門檻值
2:repeat
3: for all (\(x_k,y_k\))∈D do
4: 根據目前參數和式\(\hat y_j^k = f(\beta_j - \theta_j)\)計算目前樣本的輸出\(\hat y_k\);
5: 根據式\(g_j=\hat y_j^k(1-\hat y_j^k)(y_j^k-\hat y_j^k)\)計算輸出層神經元的梯度項\(g_j\);
6: 根據\(e_h = b_h(1-b_h)\sum \limits_{j=1}^l w_{hj}g_{j}\)計算隐含層神經元的梯度項\(e_h\);
7: 根據\(\Delta w_{hj} = \eta g_j b_h\),\(\Delta \theta_j = \eta g_j\),\(\Delta v_{ih} = \eta e_h x_i\),\(\Delta gamma_h = -\eta e_h\)更新連接配接權\(w_{hj}\),\(v_{ih}\)與門檻值\(\theta_j\),\(\gamma_h\)
8: end for
9:until 達到停止條件(例如,訓練誤差已達到了一個很小的值)
輸出:連接配接權與門檻值确定的多層前饋神經網絡
這裡需要注意的是,BP算法的目标是要最小化訓練集D上的累積誤差
\[E= \frac{1}{m}\sum \limits_{k=1}^m E_k
上面介紹的“标準BP算法”每次僅針對一個訓練樣例更新連接配接權和門檻值,也就是說,上面算法的更新規則是基于單個的\(E_k\)推導而成。如果類似地推導出基于累積誤差最小化的更新規則,就得到了累積誤差逆傳播(accumulated error backpropagation)算法。對于神經網絡,累積BP算法與标準BP算法都很常用。
給出一個包含2個屬性、5個樣本的西瓜資料,随着訓練輪數的增加,網絡參數和分類邊界的變化情況(如下圖)。
由于标準BP算法每次更新隻針對單個樣例,是以參數更新得非常頻繁,而且對不同樣例進行更新的效果可能出現“抵消”現象。是以,為了達到同樣的累積誤差極小點,标準BP算法往往需進行更多次數的疊代。累積BP算法直接針對累積誤差最小化,它在讀取整個訓練集D一遍後才對參數進行更新,其參數更新的頻率低得多。但在很多任務中,累積誤差下降到一定程度之後,進一步下降會非常緩慢,這時标準BP往往會更快獲得較好的解,尤其是在訓練集D非常大時更加明顯。
2.3多層神經網絡的BP算法推導
為了更進一步了解BP算法的推導,尤其是為将來推導深度神經網絡的BP算法打下基礎,接下來以包含兩個隐層的神經網絡(如上圖所示)為例推導BP算法。
約定輸入層為第1層,輸出層神經元僅接受輸入,不進行函數處理;隐含層和輸出層神經元為功能神經元,對信号進行加工處理。除第1層外,第\(k\)層第\(i\)個神經元的輸入為\(z_i^{(k)}\),輸出為\(a_i^{(k)}\),其中\(a_i^{(k)} = f(z_i^{(k)})\),\(f(\cdot)\)為激活函數。第\(k\)層神經元個數為\(s_k\)個;從第\(k\)層第\(i\)個神經元到第\(l= k+1\)層第\(j\)個神經元的連接配接權重記為\(\theta_{ij}^{(kl)}\),第\(k\)層到第\(l=k+1\)層所有連接配接權重構成大小為\(s_k×s_l\)矩陣\(\Theta^{(kl)}\):
\[\Theta^{(12)} = \begin{bmatrix}
\theta_{11}^{(12)} & \theta_{12}^{(12)} & \theta_{13}^{(12)} & \theta_{14}^{(12)} \\
\theta_{21}^{(12)} & \theta_{22}^{(12)} & \theta_{23}^{(12)} & \theta_{24}^{(12)} \\
\theta_{31}^{(12)} & \theta_{32}^{(12)} & \theta_{33}^{(12)} & \theta_{34}^{(12)} \\
\end{bmatrix} ,\Theta^{(23)} = \begin{bmatrix}
\theta_{11}^{(23)} & \theta_{12}^{(23)} & \theta_{13}^{(23)} & \theta_{14}^{(23)} \\
\theta_{21}^{(23)} & \theta_{22}^{(23)} & \theta_{23}^{(23)} & \theta_{24}^{(23)} \\
\theta_{31}^{(23)} & \theta_{32}^{(23)} & \theta_{33}^{(23)} & \theta_{34}^{(23)} \\
\theta_{41}^{(23)} & \theta_{42}^{(23)} & \theta_{43}^{(23)} & \theta_{44}^{(23)}
\end{bmatrix} ,\Theta^{(34)} = \begin{bmatrix}
\theta_{11}^{(34} & \theta_{12}^{(34)} & \theta_{13}^{(34)} & \theta_{14}^{(34)} \\
\theta_{21}^{(34)} & \theta_{22}^{(34)} & \theta_{23}^{(34)} & \theta_{24}^{(34)} \\
\theta_{31}^{(34)} & \theta_{32}^{(34)} & \theta_{33}^{(34)} & \theta_{34}^{(34)} \\
\theta_{41}^{(34)} & \theta_{42}^{(34)} & \theta_{43}^{(34)} & \theta_{44}^{(34)}
為了友善表示,除輸出層外,每層增加取值為-1的第0個神經元,将第\(l\)層\(s_l\)個神經元的\(s_l\)個門檻值統一表示為連接配接權重;記第k層到第\(l=k+1\)層包含門檻值的所有連接配接權重構成的矩陣\(\widetilde \Theta^{(kl)}\),大小為\((s_k+1)×s_l\):
\[\widetilde \Theta^{(12)} = \begin{bmatrix}
\theta_{01}^{(12)} & \theta_{02}^{(12)} & \theta_{03}^{(12)} & \theta_{04}^{(12)} \\
\end{bmatrix} ,\widetilde \Theta^{(23)} = \begin{bmatrix}
\theta_{01}^{(23)} & \theta_{02}^{(23)} & \theta_{03}^{(23)} & \theta_{04}^{(23)} \\
\end{bmatrix} ,\widetilde \Theta^{(34)} = \begin{bmatrix}
\theta_{01}^{(34)} & \theta_{02}^{(34)} & \theta_{03}^{(34)} & \theta_{04}^{(34)} \\
例如,第3層第1個神經元的輸入為
\[z_1^{(3)} = \theta_{11}^{23}a_1^{(2)} + \theta_{21}^{23}a_2^{(2)} + \theta_{31}^{23}a_1^{(3)} + \theta_{41}^{23}a_1^{(4)} -\theta_{01}^{(23)}
各層神經元的輸入和輸出表示如下:
輸入:\(x = (x_1;x_2;x_3) = x\),
第1層:
\[a^{(1)} = \left(a_1^{(1)}; a_2^{(1)}; a_3^{(1)}\right) = x \\
\widetilde a^{(1)} = \left(-1; a_1^{(1)}; a_2^{(1)}; a_3^{(1)}\right) = (-1;x)
第2層:
\[z^{(2)} = \left(z_1^{(2)}; z_2^{(2)}; z_3^{(2)};z_4^{(2)} \right) = [\widetilde \Theta^{(12)}]^{T}\widetilde a^{(1)} \\
a^{(2)} = \left(a_1^{(2)}; a_2^{(2)}; a_3^{(2)} ; a_4^{(2)}\right) = f(z^{(2)}) \\
\widetilde a^{(2)} = \left(-1; a_1^{(2)}; a_2^{(2)}; a_3^{(2)} ; a_4^{(2)}\right) = (-1;a^{(2)})
第3層:
其中
\[f'(z^{(4)}) = \left(\frac{\partial a_1^{(4)}}{\partial z_1^{(4)}}; \frac{\partial a_2^{(4)}}{\partial z_2^{(4)}}; \frac{\partial a_3^{(4)}}{\partial z_3^{(4)}} \right) \\
f'(z^{(3)}) = \left(\frac{\partial a_1^{(3)}}{\partial z_1^{(3)}}; \frac{\partial a_2^{(3)}}{\partial z_2^{(3)}}; \frac{\partial a_3^{(3)}}{\partial z_3^{(3)}} ; \frac{\partial a_4^{(3)}}{\partial z_4^{(3)}}\right) \\
f'(z^{(2)}) = \left(\frac{\partial a_1^{(2)}}{\partial z_1^{(2)}}; \frac{\partial a_2^{(2)}}{\partial z_2^{(2)}}; \frac{\partial a_3^{(2)}}{\partial z_3^{(2)}};\frac{\partial a_4^{(2)}}{\partial z_4^{(2)}} \right)
符号“⊙”表示矩陣哈達瑪積,即兩個大小相同的矩陣對應位置元素相乘。
對于\(\delta^{(4)}\)來說,由于
\[\frac{\partial E}{\partial a^{(4)}} = \left(\frac{\partial E}{\partial a_1^{(4)}}; \frac{\partial E}{\partial a_1^{(4)}};\frac{\partial E}{\partial a_1^{(4)}} \right) \\
= \left(a_1^{(4)}-y_1; a_2^{(4)}-y_2; a_3^{(4)}-y_3\right) = a^{4} -y \\
是以 \delta^{(4)} = (a^{(4)}-y)⊙f'(z^{(4)})
對于\(\delta^{(3)}\)來說,由于
\[\frac{\partial E}{\partial a^{(3)}} = \left(\frac{\partial E}{\partial a_1^{(3)}}; \frac{\partial E}{\partial a_2^{(3)}};\frac{\partial E}{\partial a_3^{(3)}};\frac{\partial E}{\partial a_4^{(3)}} \right)
接下來以\(\frac{\partial E}{\partial a_1^{2}}\)為例,詳細推導\(\frac{\partial E}{\partial a_1^{2}}\)中的每一項:已知
\[z_1^{(3)} = \theta_{01}^{(23)}a_0^{2} + \theta_{11}^{(23)}a_1^{2} + \theta_{21}^{(23)}a_2^{2} + \theta_{31}^{(23)}a_3^{2} + \theta_{41}^{(23)}a_4^{2} =[\widetilde \Theta_{:1}^{(23)}]^{T}\widetilde \Theta^{(2)} \\
z_2^{(3)} = \theta_{02}^{(23)}a_0^{2} + \theta_{12}^{(23)}a_1^{2} + \theta_{22}^{(23)}a_2^{2} + \theta_{32}^{(23)}a_3^{2} + \theta_{42}^{(23)}a_4^{2} =[\widetilde \Theta_{:2}^{(23)}]^{T}\widetilde \Theta^{(2)} \\
z_3^{(3)} = \theta_{03}^{(23)}a_0^{2} + \theta_{13}^{(23)}a_1^{2} + \theta_{23}^{(23)}a_2^{2} + \theta_{33}^{(23)}a_3^{2} + \theta_{43}^{(23)}a_4^{2} =[\widetilde \Theta_{:3}^{(23)}]^{T}\widetilde \Theta^{(2)} \\
z_4^{(3)} = \theta_{04}^{(23)}a_0^{2} + \theta_{14}^{(23)}a_1^{2} + \theta_{24}^{(23)}a_2^{2} + \theta_{34}^{(23)}a_3^{2} + \theta_{44}^{(23)}a_4^{2} =[\widetilde \Theta_{:4}^{(23)}]^{T}\widetilde \Theta^{(2)} \\
則
\[\frac{\partial E}{\partial a_1^{(2)}} = \frac{\partial E}{\partial z_1^{(3)}}\frac{\partial z_1^{(3)}}{\partial a_1^{(2)}} + \frac{\partial E}{\partial z_2^{(3)}}\frac{\partial z_2^{(3)}}{\partial a_1^{(2)}} + \frac{\partial E}{\partial z_3^{(3)}}\frac{\partial z_3^{(3)}}{\partial a_1^{(2)}} + \frac{\partial E}{\partial z_4^{(3)}}\frac{\partial z_4^{(3)}}{\partial a_1^{(2)}} \\
= \frac{\partial E}{\partial z_1^{(3)}}\theta_{11}^{(23)} + \frac{\partial E}{\partial z_2^{(3)}}\theta_{12}^{(23)} + \frac{\partial E}{\partial z_3^{(3)}}\theta_{13}^{(23)}+ \frac{\partial E}{\partial z_4^{(3)}}\theta_{14}^{(23)} \\
= (\theta_{11}^{(23)}, \theta_{12}^{(23)}, \theta_{13}^{(23)},\theta_{14}^{(23)})\left(\frac{\partial E}{\partial z_1^{(3)}};\frac{\partial E}{\partial z_2^{(3)}};\frac{\partial E}{\partial z_3^{(3)}} ;\frac{\partial E}{\partial z_4^{(3)}} \right) \\
= \Theta_{1:}^{(23)} \frac{\partial E}{\partial z^{(3)}} = \Theta_{1:}^{(23)}\delta^{(3)}
進而有
\[\frac{\partial E}{\partial a^{(2)}} = \left(\Theta_{(1:)}^{(23)}\delta^{(3)}; \Theta_{(2:)}^{(23)}\delta^{(3)}; \Theta_{(3:)}^{(23)}\delta^{(3)}; \Theta_{(4:)}^{(23)}\delta^{(3)} \right)
是以\(\delta^{(2)} = (\Theta^{(23)}\delta^{(3)})⊙f'(z^{(2)})\):
總結一下:
\[\delta^{(4)} = \frac{\partial E}{\partial z^{(4)}} = \frac{\partial E}{\partial a^{(4)}}⊙f'(z^{(4)}) = (a^{(4)}-y)⊙f'(z^{4}) \\
\delta^{(3)} = \frac{\partial E}{\partial z^{(3)}} = \frac{\partial E}{\partial a^{(3)}}⊙f'(z^{(3)}) = (\Theta^{(34)}\delta^{(4)})⊙f'(z^{3}) \\
\delta^{(2)} = \frac{\partial E}{\partial z^{(2)}} = \frac{\partial E}{\partial a^{(2)}}⊙f'(z^{(2)}) = (\Theta^{(23)}\delta^{(3)})⊙f'(z^{2})
有以上三個變量,就可以求出\(\Delta \widetilde \Theta^{(12)},\Delta \widetilde \Theta^{(23)},\Delta \widetilde \Theta^{(34)}\),具體如下:
對于\(\widetilde \Theta^{(34)}\)來說,第1列隻與\(z_1^{(4)}\)有關,第2列隻與\(z_2^{(4)}\)有關,第3列隻與\(z_3^{(4)}\)有關,即
\[z_1^{(4)} = \theta_{01}^{(34)}a_0^{(3)} + \theta_{11}^{(34)}a_1^{(3)} + \theta_{21}^{(34)}a_2^{(3)} + \theta_{31}^{(34)}a_3^{(3)} + \theta_{41}^{(34)}a_4^{(3)} \\
z_2^{(4)} = \theta_{02}^{(34)}a_0^{(3)} + \theta_{12}^{(34)}a_2^{(3)} + \theta_{22}^{(34)}a_2^{(3)} + \theta_{32}^{(34)}a_3^{(3)} + \theta_{42}^{(34)}a_4^{(3)} \\
z_3^{(4)} = \theta_{03}^{(34)}a_0^{(3)} + \theta_{13}^{(34)}a_3^{(3)} + \theta_{23}^{(34)}a_3^{(3)} + \theta_{33}^{(34)}a_3^{(3)} + \theta_{43}^{(34)}a_4^{(3)} \\
例如,\(\frac{\partial E}{\partial \theta_{01}^{(34)}} = \frac{\partial E}{\partial z_1^{(4)}} \frac{\partial z_1^{(4)}}{\partial \theta_{01}^{(4)}} = \delta_1^{(4)}a_0^{(3)}\).
通用的公式為:
\[\frac{\partial E}{\partial \theta_{ij}^{(kl)}} = \frac{\partial E}{\partial \theta_{z}^{(l)}} \frac{\partial z_{j}^{(l)}}{\partial \theta_{ij}^{(kl)}} = \delta_j^{(l)} a_i^{(k)} \quad (0≤i≤s_k, 1≤j≤s_l, l=k+1) \\
\frac{\partial E}{\partial \widetilde \Theta^{(kl)}} = \widetilde a^{(k)}[\delta^{(l)}]^T \quad (1≤k≤3, 2≤l≤4)
進而
\[\Delta \widetilde \Theta^{(12)} = -\eta \widetilde a^{(1)}[\delta^{(2)}]^T,\Delta \widetilde \Theta^{(23)} = -\eta \widetilde a^{(2)}[\delta^{(3)}]^T, \Delta \widetilde \Theta^{(34)} = -\eta \widetilde a^{(3)}[\delta^{(4)}]^T
至此,推導結束。
以上推導過程可以輕易推廣至更一般的情況,對于n層神經網絡而言(1個輸入層,1個輸出層,n-2個隐含層),網絡在樣本\((x,y)\)上的均方誤差為:
\[E = \frac{1}{2}||\hat y -y||^2 = \frac{1}{2}||a^{(n)} - y||^2 = \frac{1}{2}\sum_{j=1}^{s_n}(a_j^{(n)} - y_j)^2 \\
對于第2層至第n層,
\[\delta^{(2)} = \frac{\partial E}{\partial z^{(2)}} = \frac{\partial E}{\partial a^{(2)}}⊙f'(z^{(2)}) = (\Theta^{(23)}\delta^{(3)})⊙f'(z^{(2)}) \\
\delta^{(k)} = \frac{\partial E}{\partial z^{(k)}} = \frac{\partial E}{\partial a^{(k)}}⊙f'(z^{(k)}) = (\Theta^{(kl)}\delta^{(l)})⊙f'(z^{(k)}), k=l-1 \\
\delta^{(n)} = \frac{\partial E}{\partial z^{(n)}} = \frac{\partial E}{\partial a^{(n)}}⊙f'(z^{(n)}) = (a^{n}-y)⊙f'(z^{(n)})
第k層到第\(l=k+1\)層的權重更新為
\[\Delta \widetilde \Theta^{(kl)} = -\eta \widetilde a^{(k)}[\delta^{(l)}]^T \quad (1≤k≤n-1, 2≤l≤n) \\
\widetilde \Theta^{(kl)} = \widetilde \Theta^{(kl)} + \Delta \widetilde \Theta^{kl}
2.4 BP神經網絡的優化政策
正由于其強大的表示能力,BP神經網絡經常遭遇“過拟合”,其訓練誤差持續降低,但測試誤差卻可能上升。
有以下兩種常用優化政策來緩解BP網絡的過拟合。
第一種政策是“早停”(early stopping):
将資料分為訓練集和驗證集,訓練集用來計算梯度、更新連接配接權和門檻值,驗證集用來估計誤差,若訓練集誤差降低但驗證集誤差升高,則停止訓練,同時傳回具有最小驗證集誤差的連接配接權和門檻值。
第二種政策是“正則化”(regularization):
其基本思想是在誤差目标函數中增加一個用于描述網絡複雜度的部分,例如連接配接權與門檻值的平方和。仍令\(E_k\)表示第k個訓練樣例上的誤差,\(w_i\)表示連接配接權和門檻值,則誤差目标函數\(E = \frac{1}{m}\sum \limits_{k=1}^mE_k\)改變為
\[E = \lambda \frac{1}{m}\sum \limits_{k=1}^m E_k +(1-\lambda)\sum \limits_{i} w_i^2
其中\(\lambda∈(0,1)\)用于對經驗誤差與網絡複雜度這兩項進行折中,常通過交叉驗證法來估計。
改善神經網絡優化的目标是找到更好的局部最小值和提高優化效率。目前比較有效的經驗性改善方法通常分為以下幾個方面:
(1)使用更有效的優化算法來提高梯度下降優化方法的效率和穩定下,比如動态學習率調整、梯度估計修正等。
(2)使用更好的參數初始化方法、資料預處理方法來提高優化效率。
(3)修改網絡結構來得到更好的優化地形(Optimization Landscape),比如使用ReLU激活函數、殘差連接配接、逐層歸一化等。[優化地形指的是,在高維空間中損失函數的曲面形狀,好的優化地形通常比較平滑]
(4)使用更好的超參數優化方法。
優化技巧都是針對相應的問題來提出的,下面列出了一些訓練神經網絡存在的主要問題,及其優化技巧。
- 過拟合
- 局部最優
- 梯度消失
- 收斂速度慢
- 學習速度慢
3.1 過拟合
判斷是否過拟合的方式就是觀察準确率曲線,如果訓練集準确率不斷上升,測試集準确率卻開始下下降,就說明出現過拟合了。
優化方法:
-
訓練更多的資料
人工擴大訓練集數量
通過旋轉、變形、增加噪音等各種方法來擴大訓練集數量,需要注意的是,這些方法需要因地制宜。在大規模的資料集上,不同的機器學習準确率差異不一定能說明某個算法更好,很可能在另一個資料集上另一種算法就更好。
-
降低網絡容量
(not always the option,大網絡有大智慧)
-
早期停止(early stopping)
将資料分為訓練集和驗證集,訓練集用來計算梯度、更新連接配接權和門檻值,驗證集用來估計誤差,若訓練集誤差降低但驗證集誤差升高,也即當驗證集的準确率已經飽和(saturated)時,則停止訓練,同時傳回具有最小驗證集誤差的連接配接權和門檻值。
- 為什麼使用驗證集:使用驗證集可以避免對測試集過拟合,進而得到正确的測試效果。
- 如何判斷是否已經飽和: 通過諸如“最近N次無提升”( \(no-improvement-in-n\) )、“平均準确率是否提升”等判斷條件,可以讓算法自己決定是否已過拟合。比如連續三次沒有提升到更高等。
-
正則化(L1和L2)
其基本思想是在誤差目标函數中增加一個用于描述網絡複雜度的部分,例如連接配接權與門檻值的平方和。仍令\(E_k\)表示第k個訓練樣例上的誤差,\(w_i\)表示連接配接權和門檻值,則誤差目标函數\(E = \frac{1}{m}\sum \limits_{k=1}^mE_k\)改變為
\(L2\) 正則化
\(L2\) 正則化的交叉熵損失函數,這裡第二個部分就是正則化部分,n是訓練集的大小:
\[ C = -\frac{1}{n}\sum_{xj}[y_jln{a_j^L} + (1-y_j)ln(1-a_j^L)]+\frac{\lambda}{2n}\sum_w{w^2}
正則化不需要bias(偏置),因為這個不和任何值相乘,隻定義門檻值,是以不會造成過拟合。
正則化讓網絡更傾向于小的權重,大的權重隻有在顯著減小損失函數的時候才會被采用。
求導:對于正則化之後的損失函數求導,求 \(w\) 的偏導隻需要加上一個 \(\frac{\lambda}{n}w\),求 \(b\) 的偏導則完全不變。
從這裡可以看到,在随機梯度下降的時候,\(w=(1-\frac{\eta\lambda}{n})w-\frac{\eta}{m}\sum_x{\frac{\partial{C_x}}{\partial{w}}}\) ,這裡的w會因為 \(1-\frac{\eta\lambda}{n}\) 這個系數而越來越小
正則化的神經網絡對于小的噪音會作出更小的反應,是以正則化神經網絡可能更适合小規模的神經網絡,而非正則化神經網絡适合訓練帶有大量關于噪聲的資訊的資料,模型比較複雜。
正則化目前還沒有系統的知識體系,來确定哪種正則化的效果更好。
事實上神經網絡會有一個自我正則化的過程,但是這個機制并沒有被很好地研究出來。
\(L1\)正則化
正則化的形式改成\(L1\)曼哈頓距離:
\[ C = C_0+\frac{\lambda}{n}\sum_w|w|
如果對\(L1\)正則化的cost函數求偏導:
\[ \frac{\partial{C}}{\partial{w}}=\frac{\partial{C_0}}{\partial{w}}+\frac{\lambda}{n}sign(w)
和\(L2\)一樣,\(L1\)正則化讓\(w\)更小了。不同的是在\(L1\)中縮小的是一個常數,而\(L2\)是依靠一個乘積對\(w\)進行百分比的縮放。是以當\(w\)很大的時候,\(L1\)需要比\(L2\)更多的步數才會把\(w\)縮放到相同的效果;當\(w\)很大的時候,\(L1\)又比\(L2\)要快很多。結果就是\(L1\)傾向于把很重要的\(w\)相對縮小,而其他不是很重要的\(w\)減小到幾乎為零。
-
Dropout,在每個epoch(回合)中随機關閉一些節點
Dropout
Dropout不依靠修改cost函數來避免過拟合,而是修改網絡本身,它通過每次都随機删去一部分神經元,對于參數不斷更新。由于每次都隻有一半的神經元更新了,是以對于它們每次更新的梯度會減半。
Dropout可以看成不同神經網絡對于權值更新都進行了投票,同時也可以這麼了解:避免了某個權值依賴其他權值的情況,讓訓練的權值更魯棒,讓每個權值都能發揮作用。從這個方面看,dropout是直接讓權值發揮作用,範數正則化則是懲罰大權值來間接讓小權值發揮作用。
3.2 局部最優(局部極小)
“跳出”局部極小的優化政策
初始點搜尋法
使用多組不同參數值初始化多個神經網絡,按标準化方法訓練,取其中誤差最小的解作為最終參數。這相當于從多個不同的初始點開始搜尋,這樣就可能陷入不同的局部極小,從中進行選擇有可能獲得更接近全局最小的結果。
使用“模拟退火”(simulated annealing)技術
模拟退火在每一步都以一定的機率接收比目前解更差的結果,進而有助于“跳出”局部極小。在每步疊代過程中,接受“次優解”的機率要随着時間的推移而逐漸降低,進而保證算法穩定。
使用随機梯度下降
與标準梯度下降法精确計算梯度不同,随機梯度下降法在計算梯度時加入了随機因素。于是,即使陷入局部極小點,它計算出的梯度仍可能不為零,這樣就有機會跳出局部極小繼續搜尋。
- 随機重新開始
-
動量,\(\beta\),\(0<\beta<1\).
第n步步長,\(step(n) := step(n) + \beta step(n-1) + \beta^2 step(n-2)\) + ...
3.3 梯度消失
在實際訓練中,與兩種情況下經常出現梯度消失,一是神經網絡層數過多太深,二是采用了與模型不合适的損失函數。
從深層網絡角度來講,不同的層學習的速度差異很大,表現為網絡中靠近輸出的層學習的情況很好,靠近輸入的層學習的很慢,有時甚至訓練了很久,前幾層的權值和剛開始随機初始化的值差不多。是以出現梯度消失、爆炸的現象。
從損失函數角度來講,在計算權值更新資訊的時候需要計算前層偏導資訊,是以如果激活函數選擇不合适,比如使用sigmoid,梯度消失就會很明顯了。
-
采用其他激活函數,如ReLU(修正線性單元)、tanh(雙曲正切)、softmax激活函數
softmax激活函數
\[a_j^L=\frac{e^{z_j^L}}{\sum_k{e^{z_k^L}}}
這裡的 \(z_j^L\) 還是指輸入x的線性組合 \((w_j^L)^Tx^{L-1}+b_j^L\) 。
softmax輸出的結果是一個機率,這是相對于sigmoid的一個優勢。同時softmax的一個值和同一層的其他值有關,而sigmoid隻和自己的值有關。
同時,對于softmax梯度消失的問題,使用 \(C \equiv-ln{a_y^L}\) 這樣的損失函數(對于類别為y的樣本,預測機率 \(a_y^L\) 越高越好):
\[\frac{\partial{C}}{\partial{b_j^L}}=a_j^L-y_j \\\frac{\partial{C}}{\partial{w_{jk}^L}}=a_k^{L-1}(a_j^L-y_j)
weights中x過小造成的梯度消失則不可能通過設計損失函數來避免。
-
更改損失函數,如交叉熵損失函數
更改損失函數為交叉熵損失函數
交叉熵損失函數的形式為:
\[C=-\frac{1}{n}\sum_x{[yln{a}+(1-y)ln{(1-a)}]}
此時 \(\frac{\partial{C}}{\partial{w_j}}=\frac{1}{n}\sum_x{\frac{\sigma’(z)x_j}{\sigma(z)(1-\sigma(z))}(\sigma(z)-y)}\).
當 \(\sigma\) 為sigmoid函數時,它有一個特殊的性質就是
\[\sigma’(z)x_j=\sigma(z)(1-\sigma(z))
是以 \(\frac{\partial{C}}{\partial{w_j}}=\frac{1}{n}\sum_x{x_j(\sigma(z)-y))}\),可以發現這裡的 \(\frac{\partial{C}}{\partial{w_j}}\) 已經和 \(\sigma’(z)\) 無關了,就算 \(\sigma(z)\) 已經很接近0或者1,也不會對學習速率産生什麼影響,并且預期結果與輸出結果差别越大,學習的速率就越快。
同樣可以得出 \(\frac{\partial{C}}{\partial{b}}=\frac{1}{n}\sum_x{(\sigma(z)-y))}\) 與 \(\sigma’(z)\) 無關。
是以使用sigmoid函數時,交叉熵損失函數可以有效地避免神經元飽和的情況。當使用平方和損失函數時,則對于sigmoid函數沒有這樣的約分作用。但當激活函數是線性函數時,平方和損失函數也是一個不錯的選擇,這時它也會得到和 \(\frac{\partial{C}}{\partial{w_j}}=\frac{1}{n}\sum_x{x_j(\sigma(z)-y))}\) 相同的結果,可以說交叉熵損失函數是為了sigmoid函數族量身定做的一個損失函數。
3.4 收斂速度慢
- 批量梯度下降(BGD)
- 随機梯度下降(SGD)
-
小批量梯度下降法(MGD)
梯度下降法作為機器學習中較常使用的優化算法,其有着三種不同的形式:批量梯度下降(Batch Gradient Descent)、随機梯度下降(Stochastic Gradient Descent)以及小批量梯度下降(Mini-Batch Gradient Descent)。其中小批量梯度下降法也常用在深度學習中進行模型的訓練。接下來,我們将對這三種不同的梯度下降法進行了解。
為了便于了解,這裡我們将使用隻含有一個特征的線性回歸來展開。
此時線性回歸的假設函數為:
\[h_{\theta}(x^{(i)}) = \theta_1 x^{(i)} + \theta_0 \\
其中\(i = 1,2,...,m\)表示樣本數。
對應的目标函數(代價函數)即為:
\[J(\theta_0, \theta_1) = \frac{1}{2m} \sum \limits_{i=1}^m(h_{\theta}(x^{(i)}) - y^{(i)})^2
下圖為\(J(\theta_0,\theta_1)\)與參數\(\theta_0,\theta_1\)的關系的圖:
機器學習-神經網絡與深度學習
3.4.1 批量梯度下降(BGD)
批量梯度下降法是最原始的形式,它是指每一次疊代時使用所有樣本來進行梯度的更新。
由上面的目标函數,從數學上了解如下:
(1) 對目标函數求偏導數:
\[\frac{\Delta J(\theta_0,\theta_1)}{\Delta \theta_j} = \frac{1}{m} \sum \limits_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)})x_j^{(i)}
其中,\(i=1,2,...,m\)表示樣本數,\(j=0,1\)表示特征數,這裡我們使用偏置值\(x_0^{(i)}=1\)。
(2) 每次疊代對參數進行更新:
\[\theta_j := \theta_j - \alpha \frac{1}{m} \sum \limits_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)}
這裡需注意,更新時存在一個求和函數\(\sum\),即為對所有樣本進行計算處理(可與SGD法進行比較)
僞代碼形式為:
repeat{
$ \theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^{m} (h_{\theta}(x{(i)})-y{(i)})x_j^{(i)} $
(for j =0,1)
}
優點:
(1)一次疊代是對所有樣本進行計算,此時利用矩陣進行操作,實作了并行。
(2)由全資料集确定的方向能夠更好地代表樣本總體,進而更準确地朝向極值所在的方向。
當目标函數為凸函數時,BGD一定能夠得到全局最優。
缺點:
(1)當樣本數目 \(m\) 很大時,每疊代一步都需要對所有樣本計算,訓練過程會很慢。
從疊代的次數上來看,BGD疊代的次數相對較少。
其疊代的收斂曲線示意圖可以表示如下:
3.4.2 随機梯度下降(SGD)
随機梯度下降法不同于批量梯度下降,随機梯度下降是每次疊代使用一個樣本來對參數進行更新。使得訓練速度加快。
對一個樣本的目标函數為:
\[J^{(i)}(\theta_0, \theta_1) = \frac{1}{2}(h_{\theta}(x^{(i)})-y^{(i)})^2
(1) 對目标函數求偏導
\[\frac{\Delta J^{(i)}(\theta_0, \theta_1)}{\theta_j} = (h_{\theta}(x^{(i)}) - y^{(i)})x_j^{(i)}
(1) 參數更新
\[\theta_j := \theta_j - \alpha(h_{\theta}(x^{(i)}) - y^{(i)})x_j^{(i)}
注意,這裡不再有求和符号\(\sum\).
for i=1,...,m{
$ \theta_j := \theta_j -\alpha (h_{\theta}(x{(i)})-y{(i)})x_j^{(i)} $
(for j =0,1)
}
(1)由于不是在全部訓練資料上的損失函數,而是在每輪疊代中,随機優化某一條訓練資料上的損失函數,這樣每一輪參數的更新速度大大加快。
(1)準确度下降。由于即使在目标函數為強凸函數的情況下,SGD仍舊無法做到線性收斂。
(2)可能會收斂到局部最優,由于單個樣本并不能代表全體樣本的趨勢。
(3)不易于并行實作。
解釋一下為什麼SGD收斂速度比BGD要快:
答:這裡我們假設有30W個樣本,對于BGD而言,每次疊代需要計算30W個樣本才能對參數進行一次更新,需要求得最小值可能需要多次疊代(假設這裡是10);而對于SGD,每次更新參數隻需要一個樣本,是以若使用這30W個樣本進行參數更新,則參數會被更新(疊代)30W次,而這期間,SGD就能保證能夠收斂到一個合适的最小值上了。也就是說,在收斂時,BGD計算了\(10×30W\)次,而SGD隻計算了 \(1×30W\)次。
從疊代的次數上來看,SGD疊代的次數較多,在解空間的搜尋過程看起來很盲目。其疊代的收斂曲線示意圖可以表示如下:
3.4.3 小批量梯度下降(MGD)
在訓練深度神經網絡時,訓練資料的規模通常比較大。如果在梯度下降時,每次疊代都要計算整個訓練資料上的梯度,這就需要比較多的計算資源。另外,大規模訓練集上的資料通常會非常備援,也沒有必要在整個訓練集上計算梯度。是以,在訓練深度神經網絡時,經常使用“小批量梯度下降法”(Mini-Batch Gradient Descent).
小批量梯度下降,是對批量梯度下降以及随機梯度下降的一個折中辦法。其思想是:每次疊代 使用batch_size個樣本來對參數進行更新。
令\(f(x;\theta)\)表示一個深度神經網絡,\(\theta\)為網絡參數,在使用小批量梯度下降進行優化時,每次選取\(K\)個訓練樣本\(\mathcal{S}_{t} = \left\{(x^{(k)},y^{(k)}) \right\}_{k=1}^K\)。第\(t\)次疊代(Iteration)時損失函數關于參數\(\theta\)的偏導數為
\[ g_t(\theta) = \frac{1}{K} \underset{x,y} \sum \frac{\partial \mathcal{L}(y,f(x;\theta))}{\partial \theta}
其中\(\mathcal{L}(\cdot)\)為可微分的損失函數,K稱為批量大小(Batch Size)。
第\(t\)次更新的梯度\(g_t\)定義為
\[ g_t \overset{\Delta} = g_t(\theta_{t-1})
使用梯度下降來更新參數,
\[ \theta_t \gets \theta_{t-1} - \alpha g_t \quad 其中\alpha為學習率
每次疊代時,參數更新的內插補點\(\Delta \theta_t\)定義為
\[ \Delta \theta_t \overset{\Delta}= \theta_t - \theta_{t-1}
這裡的\(\Delta \theta_t\)并不需要完全一緻。\(\Delta \theta_t\)為每次疊代時參數的實際更新方向,即\(\theta_t = \theta_{t-1}+\Delta \theta_t\)。在标準的小批量梯度下降中,\(\Delta \theta_t = \alpha g_t\)。
從上面公式可以看出,影響小批量梯度下降法的主要因素有:
(1)批量大小K.
(2)學習率\(\alpha\).
(3)梯度估計.
為了更有效地訓練深度神經網絡,在标準的小批量梯度下降法的基礎上,也經常使用一些改進方法以加快優化速度,比如如何選擇批量大小、如何調整學習率以及如何修正梯度估計。
(1)通過矩陣運算,每次在一個batch上優化神經網絡參數并不會比單個資料慢太多。
(2)每次使用一個batch可以大大減小收斂所需要的疊代次數,同時可以使收斂到的結果更加接近梯度下降的效果。(比如上例中的30W,設定batch_size=100時,需要疊代3000次,遠小于SGD的30W次)
(3)可實作并行化。
缺點:
(1)batch_size的不當選擇可能會帶來一些問題。
批量大小選擇
由上面可知,在小批量梯度下降法中,批量大小對網絡優化的影響也非常大。一般而言,批量大小不影響随機梯度的期望,但是會影響随機梯度的方差。批量大小越大,随機梯度的方差越小,引入的噪聲也就越小,訓練也越穩定,是以可以設定較大的學習率。而批量大小較小時候,需要設定較小的學習率,否則模型會不收斂。
學習率通常要随着批量大小的增大而相應地增大。一個簡單有效的方法是線性縮放規則(Linear Scaling Rule):當批量大小增加m倍時,學習率也增加m倍。線性縮放規則往往在批量大小比較小時适用,但當批量大小非常大時候,線性縮放會使得訓練不穩定。
下圖以MNIST資料集為例,給出了從回合(Epoch)和疊代(Iteration)的角度,批量大小對損失下降的影響。
其中,每一次小批量更新為一次疊代,所有訓練集的樣本更新一遍為一個回合,兩者的關系為
\[1回合(Epoch) = \frac{訓練樣本的數量N}{批量大小K}×疊代(Iteration).
根據上圖(a)圖像可以看出,批量大小越大,下降效果越明顯,并且下降曲線越平滑。
但從上圖(b)來看,如果按整個資料集上的回合(Epoch)數來看,則是批量樣本數越小,适當小的批量大小會導緻更快的收斂。
此外,批量大小和模型的泛化能力也有一定的關系,通過實驗發現:批量越大,越有可能收斂到尖銳最小值;批量越小,越有可能收斂到平坦最小值。
batch_size的選擇帶來的影響:
(1)在合理地範圍内,增大batch_size的好處:
a. 記憶體使用率提高了,大矩陣乘法的并行化效率提高。
b. 跑完一次 epoch(回合)所需的疊代次數減少,對于相同資料量的處理速度進一步加快。
c. 在一定範圍内,一般來說 Batch_Size 越大,其确定的下降方向越準,引起訓練震蕩越小。
(2)盲目增大batch_size的壞處:
a. 記憶體使用率提高了,但是記憶體容量可能撐不住了。
b. 跑完一次 epoch(全資料集)所需的疊代次數減少,要想達到相同的精度,其所花費的時間大大增加了,進而對參數的修正也就顯得更加緩慢。
c. Batch_Size 增大到一定程度,其确定的下降方向已經基本不再變化。
下圖顯示了三種梯度下降算法的收斂過程:
3.5 學習速度慢
學習率是神經網絡優化時的重要超參數。在梯度下降法中,學習率\(\alpha\)的取值非常關鍵。
若學習率過大就不會收斂,若學習率過小則又收斂速度太慢。
學習率調整方法:
- 學習率衰減(學習率退火)
- 學習率預熱
- 周期性學習率調整
- 自适應學習率調整
詳細介紹如下
3.5.1 學習率衰減(學習率退火)
從經驗上看,學習率在一開始要保持大一些來保證收斂速度,在收斂到最優點附近時要小些以避免來回振蕩。比較簡單的學習調整可以通過學習率衰減(Learning Rate Decay)的方式來實作,(也稱為學習退火)。
不失一般性,這裡的衰減方式設定為按疊代次數進行衰減。
假設初始化學習率為\(\alpha_0\),在第t次疊代時的學習率\(\alpha_t\)。常見的衰減方法有以下幾種:
分段常數衰減(Piecewise Constant Decay):
即每經\(T_1,T_2,...,T_m\)次疊代将學習率衰減為原來的\(\beta_1,\beta_2,...,\beta_m\)倍,其中\(T_m\)和\(\beta_m<1\)為根據經驗設定的超參數。分段常數衰減,也稱為階梯衰減(Step Decay).
逆時衰減(Inverse Time Decay):
\[\alpha_t = \alpha_0 \frac{1}{1+\beta×t} \quad 其中\beta為衰減率。
指數衰減(Exponential Decay):
\[\alpha_t = \alpha_0 \beta^{t} \quad 其中\beta < 1為衰減率。
自然指數衰減(Natural Exponential Decay):
\[\alpha_t = \alpha_0 exp(-\beta×t) = \alpha_0 e^{(-\beta t)} \quad 其中\beta為衰減率。
餘弦衰減(Cosine Decay):
\[\alpha_t = \frac{1}{2} \alpha_0(1+cos(\frac{t \pi}{T})) \quad 其中T為總的疊代次數
下圖給出了不同衰減方法的示例(假設初始學習率為1)
3.5.2 學習率預熱
在小批量梯度下降法中,當批量大小的設定比較大時,通常需要比較大的學習率。但在剛開始訓練時,由于參數是随機初始化的,梯度往往也比較大,再加上比較大的初始學習率,會使得訓練不穩定。
為了提高訓練穩定性,我們可以在最初幾輪疊代時,采用比較小的學習率,等梯度下降到一定程度後再恢複到初始的學習率,這種方法稱為學習率預熱(Learning Rate Warmup)。
一個常用的學習率預熱方法是逐漸預熱(Gradual Warmup)。假設預熱的疊代次數為\(T'\),初始學習率為\(\alpha_0\),在預熱過程中,每次更新的學習率為
\[\alpha_t' = \frac{t}{T’}\alpha \quad 1 ≤ t ≤ T'
當預熱過程結束,再選擇一種學習率衰減方法來逐漸降低學習率。
3.5.3 周期性學習率調整
為了使得梯度下降法能夠逃離鞍點或尖銳最小值,一種經驗性的方式是在訓練過程中周期性地增大學習率。當參加處于尖銳最小值附近時,增大學習率有助于逃離尖銳最小值;當參數處于平坦最小值附近時,增大學習率依然有可能在該平坦最小值的吸引域(Basin of Attraction)内。是以,周期性地增大學習率雖然可能短期内損害優化過程,使得網絡收斂的穩定性變差,但從長期來看,有助于找到更好的局部最優解。
這裡介紹兩種常用的周期性調整學習率的方法:循環學習率和帶熱重新開機的随機梯度下降。
3.5.3.1 循環學習率
使用循環學習率,即讓學習率在一個區間内周期性地增大和縮小。通常可以使用線性縮放來調整學習率,稱為三角循環學習率(Triangular Cyclic Learning Rate)。假設每個循環周期的長度相等都為\(2\Delta T\),其中前\(\DeltaT\)步為學習率線性增大階段,後\(\Delta T\)步為學習率線性縮小階段。在第\(t\)次疊代時,其所在的循環周期數\(m\)為
\[m = \lfloor 1+\frac{t}{2\Delta T}\rfloor
其中\(\lfloor \cdot \rfloor\)表示“向下取整”函數。第\(t\)次疊代的學習率為
\[\alpha_t = \alpha_{min}^m + (\alpha_{max}^m - \alpha_{min}^m)
\left(max(0,1-b) \right).
其中\(\alpha_{max}^m\)和\(\alpha_{min}^m\)分别為第\(m\)個周期中學習率的上界和下界,可以随着\(m\)的增大而逐漸降低;\(b∈[0,1]\)的計算為
\[b = |\frac{t}{\Delta T} - 2m + 1|
3.5.3.2 帶熱重新開機的随機梯度下降
帶熱重新開機的随機梯度下降是用熱重新開機方式來替代學習率衰減的方法。學習率每隔一定周期後重新初始化為某個預先設定值,然後逐漸衰減。每次重新開機後模型參數不是從頭開始優化,而是從重新開機前的參數基礎上繼續優化。
假設在梯度下降過程中重新開機M次,第m次重新開機在上次重新開機開始第\(T_m\)個回合後進行,\(T_m\)稱為重新開機周期。在第m次重新開機之前,采用餘弦衰減來降低學習率。第\(t\)次疊代的學習率為
\[\alpha_t = \alpha_{min}^m + \frac{1}{2}(\alpha_{max}^m - \alpha_{min}^m)(1+cos(\frac{T_{cur}}{T_m}\pi))
其中\(\alpha_{max}^m\)和\(\alpha_{min}^m\)分别為第\(m\)個周期中學習率的上界和下界,可以随着\(m\)的增大而逐漸降低;
\(T_{cur}\)為從上次重新開機之後的回合(Epoch)數。\(T_{cur}\)可以取小數,比如0.1,0.2等,這樣可以在一個回合内部進行學習率衰減。重新開機周期\(T_m\)可以随着重新開機次數逐漸增加,比如\(T_m = T_{m-1}×\mathcal{k}\),其中\(\mathcal{k}\)≥1為放大因子。
下圖給出了兩種周期性學習率調整的示例(假設初始學習率為1),每次周期中學習率的上界也逐漸衰減。
3.5.4 自适應學習率調整
自适應學習率調整包含以下幾種算法:\(AdaGrad\)算法、\(RMSprop\)算法、\(AdaDelta\)算法
3.5.4.1 \(AdaGrad\)算法
\(AdaGrad\)算法是借鑒L2正則化的思想,每次疊代時自适應地調整每個參數的學習率。在第\(t\)次疊代時,先計算每個參數梯度平方的累計值
\[G_t = \sum \limits_{\tau=1}^t g_{\tau} \odot g_{\tau}
其中\(\odot\)為按元素乘積,\(g_{\tau}∈ \mathbb{R}^{|\theta|}\)是第\(\tau\)次疊代時的梯度。
\(AdaGrad\)算法的參數更新內插補點為
\[\Delta \theta_t = - \frac{\alpha}{\sqrt{G_t + \epsilon}}\odotg_t
其中\(\alpha\)是初始的學習率,\(\epsilon\)是為了保持數值穩定性而設定的非常小的常數,一般取值\(e^{-7}到e^{-10}\)。此外,這裡開平方、除、加運算都是按元素進行的操作。
在\(AdaGrad\)算法中,如果某個參數的偏導數累積比較大,其學習率相對較小;相反,如果其偏導數累積較小,其學習率相對較大。但整體是随着疊代次數的增加,學習率逐漸縮小。
\(AdaGrad\)算法的缺點是在經過一定次數的疊代依然沒有找到最優點時,由于這時的學習率已經非常小,很那再繼續找到最優點。
3.5.4.2 \(RMSprop\)算法
\(RMSprop\)算法是Geoff Hinton提出的一種自适應學習率的方法,可以在有些情況下避免\(AdaGrad\)算法中學習率不斷單調下降以至于過早衰減的缺點。
\(RMSprop\)算法首先計算每次疊代梯度\(g_t\)平方的指數衰減移動平均,
\[G_t = \beta G_{t-1} + (1-\beta)g_t \odotg_t \\
= (1-\beta) \sum \limits_{\tau=1}^t \beta^{t-\tau}g_{\tau} \odot g_{\tau}
其中\(\beta\)為衰減率,一般取值為0.9。
\(RMSprop\)算法的參數更新內插補點為
\[\Delta \theta_t = -\frac{\alpha}{\sqrt{G_t+\epsilon}}\odotg_t
其中\(\alpha\)是初始的學習率,比如0.001。
從上式可以看出,\(RMSprop\)算法和\(AdaGrad\)算法的差別在于\(G_t\)的計算由累積方式變成指數衰減移動平均。在疊代過程中,每個參數的學習率并不總是呈衰減趨勢,既可以變小也可以變大。
3.5.4.3 \(AdaDelta\)算法
\(AdaDelta\)算法也是對\(AdaGrad\)算法的一個改進,與\(RMSprop\)算法類似,\(AdaDelta\)算法通過梯度平方的指數衰減移動平均來調整學習率。此外,\(AdaDelta\)算法通過梯度平方的指數衰減移動平均來調整學習率。此外,\(AdaDelta\)算法還引入了每次參數更新內插補點\(\Delta \theta\)的平方的指數衰減權移動平均。
第\(t\)次疊代時,參數更新內插補點\(\Delta \theta\)的平方的指數衰減權移動平均為
\[\Delta X_{t-1}^2 = \beta_1 \Delta X_{t-2}^2 + (1-\beta_1)\Delta \theta_{t-1} \odot \Delta \theta_{t-1}
其中\(\beta_1\)為衰減率。此時\(\Delta \theta_t\)還未知,是以隻能計算到\(\Delta X_{t-1}\)。
\(AdaDelta\)算法的參數更新內插補點為
\[\Delta \theta_t = -\frac{\sqrt{\Delta X_{t-1}^2} + \epsilon}{\sqrt{G_t + \epsilon}}g_t
其中\(G_t\)的計算方式和\(RMSprop\)算法一樣,\(\Delta X_{t-1}^2\)為參數更新內插補點\(\Delta \theta\)的指數衰減權移動平均。
從上式可以看出,\(AdaDelta\)算法将\(RMSprop\)算法中的初始學習率\(\alpha\)改為動态計算的\(\sqrt{\Delta X_{t-1}^2}\),在一定程度上平抑了學習率的波動。
為了更好的了解深度學習,這裡引用邱錫鵬《神經網絡與深度學習》的相關内容:
4.1 機器學習總結
機器學習(Machine Learning,ML)是指從有限的觀測資料中學習(或“猜測”)出具有一般性的規律,并利用這些規律對未知資料進行預測的方法。機器學習是人工智能的一個重要分支,并逐漸成為推動人工智能發展的關鍵因素。
傳統的機器學習主要關注如何學習一個預測模型。一般需要首先将資料表示為一組特征(Feature),特征的表示形式可以是連續的數值、離散的符号或其他形式。然後将這些特征輸入到預測模型,并輸出預測結果。這類機器學習有看作淺層學習(Shallow Learning)。淺層學習的一個重要特點是不設計特征學習,其特征主要靠人工經驗或特征轉換方法來抽取。
當我們用機器學習來解決實際任務時,會面對多種多樣的資料形式,比如聲音、圖像、文本等。不同資料的特征構造方式差異很大。對于圖像這類資料,我們可以很自然地将其表示為一個連續的向量。而對于文本資料,因為其一般由離散符号組成,并且每個符号在計算機内部都表示為無意義的編碼,是以通常很難找到合适的表示方式。是以,在實際任務中使用機器學習模型一般會包含以下幾個步驟:
(1) 資料預處理:經過資料的預處理,如去除噪聲等。比如在文本分類中,去除停用詞。
(2) 特征提取:從原始資料中提取一些有效的特征。比如在圖像分類中,提取邊緣、尺度不變特征變換(Scale Invariant Feature Transform,SIFT)特征等。
(3) 特征轉換:對特征進行一定的加工,比如降維和升維。降維包括特征抽取(Feature Extraction)和特征選擇(Feature Selection)兩種途徑。常用的特征轉換方法有主成分分析(Principal Components Analysis,PCA)、線性判别分析(Linear Discriminant Analysis,LDA)等。
(4) 預測:機器學習的核心部分,學習一個函數并進行預測。
上述流程中,每步特征處理以及預測一般都是分開進行的。傳統的機器學習模型主要關注最後一步,即建構預測函數。但是在實際操作過程中,不同預測模型的性能相差不多,而前三步中的特征處理對最終系統的準确性有着十分關鍵的作用。特征處理一般都需要人工幹預完成,利用人類的經驗來選取好的特征,并提高機器學習系統的性能。是以,很多的機器學習問題變成了特征工程(Feature Engineering)問題。開發一個機器學習系統的主要工作量都消耗在了預處理、特征提取以及特征轉換上。
4.2 表示學習
為了提高機器學習系統的準确率,我們就需要将輸入資訊轉換為有效的特征,或者更一般性地稱為表示(Representation)。如果有一種算法可以自動地學習出有效的特征,并提高最終機器學習模型的性能,那麼這種學習就可以叫做表示學習(Representation Learning)。
語義鴻溝 表示學習的關鍵是解決語義鴻溝(Semantic Gap)問題。
語義鴻溝問題是指輸入資料的底層特征和高層語義資訊之間的不一緻性和差異性。比如給定一些關于“車”的圖檔,由于圖檔中每輛車的顔色和形狀等屬性都不盡相同,是以不同圖檔在像素級别上的表示(即底層特征)差異性也會非常大。但是我們了解這些圖檔是建立在比較抽象的高層語義概念上的。如果一個預測模型直接建立在底層特征之上,會導緻對預測模型的能力要求過高。如果可以有一個好的表示在某種程度上能夠反映出資料的高層語義特征,那麼我們就能相對容易地建構後續的機器學習模型。
在表示學習中,有兩個核心問題:一是“什麼是一個好的表示”;二是“如何學習到好的表示”。
4.2.1 局部表示和分布式表示
“好的表示”是非常主觀的概念,沒有一個明确的标準。但一般而言,一個好的表示具有以下幾個優點:
(1) 一個好的表示應該具有很強的表示能力,即同樣大小的向量可以表示更多資訊。
(2) 一個好的表示應該使後續的學習任務變得簡單,即需要包含更高層的語義資訊。
(3) 一個好的表示應該具有一般性,是任務或領域獨立的。雖然目前的大部分表示學習方法還是基于某個任務來學習,但我們期望其學到的表示可以比較容易地遷移到其他任務上。
在機器學習中,我們經常使用兩種方式來表示特征:局部表示(Local Representation)和分布式表示(Distributed Representation)。
以顔色表示為例,我們可以用很多詞來形容不同的顔色,除了基本的“紅”“藍”“綠”“白”“黑”等之外,還有很多以地區或物品命名的,比如“中國紅”“天藍色”“咖啡色”“琥珀色”等。如果要在計算機中表示顔色,一般有兩種表示方法。
一種表示顔色的方法是以不同名字來命名不同的顔色,這種表示方式叫作局部表示,也稱離散表示或符号表示。局部表示通常可以表示為one-hot向量的形式。假設所有顔色的名字構成一個詞表\(\mathcal{V}\),詞表大小為\(|\mathcal{V}|\)。我們可以用一個\(|\mathcal{V}|\)的one-hot向量來表示每一種顔色。在第\(i\)種顔色對應的one-hot向量中,第\(i\)維的值為1,其他都為0。
局部表示有兩個優點:
(1)這種離散的表示方式具有很好的解釋性,有利于人工歸納和總結特征,并通過特征組合進行高效的特征工程;
(2)通過多種特征組合得到的表示向量通常是稀疏的二值向量,當用于線性模型時計算效率非常高。但局部表示有兩個不足之處:
a.one-hot向量的維數很高,且不能擴充。如果有一種新的顔色,我們就需要增加一維來表示;
b.不同顔色之間的相似度都為0,即我們無法知道“紅色”和“中國紅”的相似度要高于“紅色”和“黑色”的相似度。
另一種表示顔色的方式是用RGB值來表示顔色,不同顔色對應到R、G、B三維空間中一個點,這種表示方式叫做分布式表示。分布式表示通常可以表示為低維的稠度向量。
和局部表示相比,分布式表示的表示能力要強很多,分布式表示的向量次元一般都比較低。我們隻需要用一個三維的稠密向量就可以表示所有顔色。并且,分布式表示也很容易表示新的顔色名。此外,不要顔色之間的相似度也很容易計算。
下表列出了4種顔色的局部表示和分布式表示示例。
我們可以使用神經網絡來将高維的局部表示空間\(\mathbb{R}^{|\mathcal{v}|}\)映射到一個非常低維的分布式表示空間\(\mathbb{R}^{D}\),\(D\ll |\mathcal{V}|\)。在這個低維空間中,每個特征不再是坐标軸上的點,而是分散在整個低維空間中。在機器學習中,這個過程也稱為嵌入(Em-bedding)。嵌入通常指将一個度量空間中的一些對象映射到另外低維的度量空間中,并盡可能保持不同對象之間的拓補關系。比如自然語言中詞的分布式表示,也經常叫做詞嵌入。
下圖展示了一個三維one-hot向量空間和一個二維嵌入空間的對比。
圖中有三個樣本\(w_1,w_2,w_3\)在one-hot向量空間中,每個樣本都位于坐标軸上,每個坐标軸上一個樣本。而在低維的嵌入空間中,每個樣本都不在坐标軸上,樣本之間可以計算相似度。
4.2.2 表示學習
要學習到一種好的高層語義表示(一般為分布式表示),通常需要從底層特征開始,經過多步非線性轉換才能得到。深層結構的優點是可以增加特征的重用性,進而指數級地增加表示能力。是以,表示學習的關鍵是建構具有一定深度的多層次特征表示。
在傳統的機器學習中,也有很多有關特征學習的方法,比如主成分分析、線性判别、獨立成分分析等。但是,傳統的特征學習一般是通過人為地設計一些準則,然後根據這些準則來選取有效的特征。特征的學習是和最終預測模型的學習分開進行的,是以學習到的特征不一定可以提升最終模型的性能。
4.3 深度學習
為了學習一種好的表示,需要建構具有一定“深度”的模型,并通過學習算法來讓模型自動學習出好的特征表示(從底層特征,到中層特征,再到高層特征),進而最終提升預測模型的準确率。所謂“深度”是指原始資料進行非線性特征轉換的次數。如果把一個表示學習系統看作是一個有向圖結構,深度也可以看作從輸入節點到輸出節點所經過的最長路徑的長度。
這樣我們就需要一種學習方法可以從資料中學習一個“深度模型”,這就是深度學習(Deep Learning,DL)。深度學習是機器學習的一個子問題,其主要目的是從資料中自動學習到有效的特征表示。
下圖給出了深度學習的資料處理流程。通過多層的特征轉換,把原始資料變成更高層次、更抽象的表示。這些學習的表示可以替代人工設計的特征,進而避免“特征工程”。
深度學習是将原始的資料特征通過多步的特征轉換得到一種特征表示,并進一步輸入到預測函數得到最終結果。和“淺層學習”不同,深度學習需要解決的關鍵問題是貢獻度配置設定(Credit Assignment Problem,CAP),即一個系統中不同的元件(component)或其參數對最終系統輸出結果的貢獻或影響。
以下圍棋為例,每當下完一盤棋,最後的結果要麼赢要麼輸。我們會思考哪幾步導緻了最後的勝利,或者又是哪幾步導緻了最後的敗局。如何判斷每一步棋的貢獻就是貢獻度配置設定問題,這是一個非常困難的問題。從某種意義上來講,深度學習可以看作是一種強化學習(Reinforcement Learning,RL),每個内部元件并不能直接得到監督資訊,需要通過整個模型的最終監督資訊(獎勵)得到,并且有一定的延時性。
目前,深度學習采用的模型主要是神經網絡模型,其主要原因是神經網絡模型可以使用誤差反向傳播算法,進而可以比較好地解決貢獻度配置設定問題。隻要是超過一層的神經網絡都會存在貢獻度配置設定問題,是以可以将超過一層的神經網絡都看作是深度學習模型。随着深度學習的快速發展,模型深度也從早期的5~10層增加到目前的數百曾。随着模型深度的不斷增加,其特征表示的能力也越來越強,進而使後續的預測更加容易。
理論上,參數越多,模型複雜度就越高,容量(capability)就越大,進而能完成更複雜的學習任務。深度學習(deep learning)正是一種極其複雜而強大的模型。
如何增大模型複雜度?
這裡有兩個辦法,一是增加隐層數目,二是增加隐層神經元的數目。前者更有效一些,因為它不僅增加了功能神經元的數量,還增加了激活函數嵌套的層數。但是對多隐層神經網絡,經典算法如标準BP算法往往會在誤差逆傳播時發散(diverge),無法收斂達到穩定狀态。
那麼要怎麼才能有效地訓練多隐層神經網絡呢?
一般來說,有以下兩種方法:
1.無監督逐層訓練(unsupervised layer-wide training):每次訓練一層隐節點,把上一層隐節點的輸出當作輸入來訓練,本層隐節點訓練好後,輸出再作為下一層的輸入來訓練,這稱為預訓練(pre-trainning)。全部預訓練完成後,再對整個網絡進行微(fine-tuning)訓練。
一個典型的例子就是深度信念網絡(deep belief network,簡稱DBN)。這種做法其實可以視為把大量的參數進行分組,先找出每組較好的設定,再基于這些局部最優的結果來訓練全局最優。
2.權共享(weight sharing):令同一層神經元使用完全相同的連接配接權,典型的例子是卷積神經網絡(Convolutional Neural Network,簡稱CNN)。這樣做可以大大較少需要訓練的參數數目。
以CNN進行手寫數字識别任務為例,如下圖所示。
網絡輸入是一個\(32×32\)的手寫數字圖像,輸出是其識别結果,CNN複合多個“卷積層”和“采樣層”對輸入信号進行加工,然後在連接配接層實作與輸出目标之間的映射。每個卷積層都包含讀個特征映射(feature map),每個特征映射是一個由多個神經元構成的“平面”,通過一種卷積濾波器提取輸入的一種特征。
例如,上圖中第一個卷積層都由6個特征映射構成,每個特征映射是一個\(28×28\)的神經元陣列,其中每個神經元負責從\(5×5\)的區域通過卷積濾波器提取局部特征。采樣層亦稱為“彙合(pooling)層”,其作用是基于局部相關性原理進行亞采樣,進而在減少資料量的同時保持有用資訊。
如上圖,第一個采樣層有6個\(14×14\)的特征映射,其中每個神經元與上一層中對應特征映射的\(2×2\)領域相連,并據此計算輸出。通過複合卷積層和采樣層,圖中的CNN将原始圖像映射成120維特征向量,最後通過一個由84個神經元構成的連接配接層和輸出層連接配接完成識别任務。CNN可用BP算法進行訓練,但在訓練中,無論是在卷積層還是采樣層,其每一組神經元(即圖中的每個“平面”)都是用相同的連接配接權,進而大幅減少了需要訓練的參數數目。
深度學習可以了解為一種特征學習(feature learning)或者表示學習(representation learning),無論是DBN還是CNN,都是通過多個隐層來把與輸出目标聯系不大的初始輸入轉化為與輸出目标更加密切的表示,使原來隻通過單層映射難以完成的任務變成可能。即通過多層處理,逐漸将初始的“低層”特征表示轉化為“高層”特征表示,進而使得最後可以用簡單的模型來完成複雜的學習任務。
傳統任務中,樣本的特征需要人類專家來設計,這稱為特征工程(feature engineering)。特征好壞對泛化性能有至關重要的影響。而深度學習為全自動資料分析帶來了可能,可以自動産生更好的特征。
神經網絡模型、算法繁多,這裡不能詳盡描述,故隻對特别常見的幾種網絡稍作簡介。
- RBF網絡
- ART網絡
- SOM網絡
- 級聯相關網絡
- Elman網絡
- Boltzmann機
5.1 RBF網絡
RBF(Radial Basis Function,徑向基函數)網絡,是一種單隐層前饋神經網絡,它使用徑向基函數作為隐層神經元激活函數,而輸出層則是對隐層神經元輸出的線性組合。假定輸入為\(d\)維向量\(x\),輸出為實值,則RBF網絡可表示為
\[\varphi(x) = \sum \limits_{i}^q w_i \rho(x,c_i)
其中\(q\)為隐層神經元個數,
\(c_i\)表示第\(i\)個隐層神經元所對應的中心,\(w_i\)表示第\(i\)個隐層神經元所對應的權重。
\(\rho(x,c_i)\)是徑向基函數,這是某種沿徑向對稱的标量函數,通常定義為樣本\(x\)到資料中心\(c_i\)之間歐式距離的單調函數。常用的徑向基函數形如
\[\rho(x,c_i) = e^{(-\beta_i||x-c_i||^2)}
[Park and Sandberg]證明,具有足夠多隐層神經元的RBF網絡能以任意精度逼近任意連續函數。
通常采用兩步過程來訓練RBF網絡:
第一步,确定神經元中心\(c_i\),常用的方式包括随機采樣、聚類等;
第二步,利用BP算法等來确定參數\(w_i\)和\(\beta_i\)。
5.2 ART網絡
競争型學習(competitive learning)是神經網絡中一種常用的無監督學習政策,在使用該政策時,網絡的輸出神經元互相競争,每一時刻僅有一個競争獲勝的神經元被激活,其他神經元的狀态被抑制。這種機制亦稱“勝者通吃”(winner-take-all)原則。
ART(Adaptive Resonance Theory,自适應諧振理論)網絡是競争型學習的重要代表。該網絡由比較層、識别層、識别門檻值和重置子產品構成。其中,比較層負責接收輸入樣本,并将其傳遞給識别層神經元。識别層每個神經元對應與一個模式類,神經元數目可在訓練過程中動态增長以增加新的模式類。
在接收到比較層的輸入信号後,識别層神經元之間互相競争以産生獲勝神經元。競争的最簡單方式是,計算輸入向量與每個識别層神經元所對應的模式類的代表向量之間的距離,距離最小者勝。獲勝神經元将向其他識别層神經元發送信号,抑制其激活。若輸入向量與獲勝神經元所對應的代表向量之間的相似度大于識别門檻值,則目前輸入樣本将歸為該代表向量所屬類别,同時,網絡連接配接權将會更新,使得以後在接收到相似輸入樣本時該模式類會計算出更大的相似度,進而使該獲勝神經元有更大可能獲勝;若相似度不大于識别門檻值,則重置子產品将在識别層增設一個新的神經元,其代表向量就設定為目前輸入向量。
顯然,識别門檻值對ART網絡的性能有重要影響。當識别門檻值較高時,輸入樣本将會分成比較多、比較精細的模式類,而如果識别門檻值較低,則會産生比較少、比較粗略的模式類。
ART比較好地緩解了競争型學習中的“可塑性-穩定性窘境”(stability-plasticity),可塑性是指神經網絡要有學習新知識的能力,而穩定性則是神經網絡在學習新知識要保持對舊知識的記憶。這就使得ART網絡具有一個很重要的優點:可進行增量學習(incremental learning)或線上學習(online learning)。
早期的ART網絡隻能處理布爾型輸入資料,此後ART發展成了一個算法族,包括能處理實值輸入的ART2網絡、結合模糊處理的FuzzyART網絡,以及可進行監督學習的ARTMAP網絡等。
5.3 SOM網絡
SOM(Self-Organizing Map,自組織映射)網絡是一種競争學習型的無監督神經網絡,它能将高維輸入資料映射到低維空間(通常為二維),同時保持輸入資料在高維空間拓補結構,即将高維空間中相似的樣本點映射到網絡輸出層中鄰近神經元。
如下圖所示,SOM網絡中的輸出層神經元以矩陣方式排列在二維空間中,每個神經元都擁有一個權向量,網絡在接收輸入向量後,将會确定輸出層獲勝神經元,它決定了該輸入向量在低維空間中的位置。SOM的訓練目标就是為每個輸出層神經元找到合适的權向量,以達到保持拓補結構的目的。
SOM的訓練過程很簡單:在接收到一個訓練樣本後,每個輸出層神經元會計算該樣本與自身攜帶的權向量之間的距離,距離最近的神經元稱為競争獲勝者,稱為最佳比對單元(best matching unit)。然後,最佳比對單元及其鄰近神經元的權向量将被調整,以使得這些權向量與目前輸入樣本的距離縮小。這個過程不斷疊代,直至收斂。
5.4 級聯相關網絡
一般的神經網絡模型通常假定網絡結構是事先固定的,訓練的目的是,利用訓練樣本來确定合适的連接配接權、門檻值等參數。與此不同,結構自适應網絡則将網絡結構也當作學習的目标之一,并希望能在訓練過程中找到最符合資料特點的網絡結構。級聯相關(Cascade-Correlation)網絡是結構自适應網絡的重要代表。
級聯相關網絡有兩個主要成分:“級聯”和“相關”。
[級聯相關網絡的訓練過程。新的隐節點加入時,紅色連接配接權通過最大化新節點的輸出與網絡誤差之間的相關性來進行訓練。]
級聯是指建立層次連接配接的層級結構。在開始訓練時,網絡隻有輸入層和輸出層,處于最小拓補結構;随着訓練的進行,如圖所示,新的隐層神經元逐漸加入,進而建立起層級結構。當新的隐層神經元加入時,其輸入端連接配接權值是當機固定的。相關是指通過最大化新神經元的輸出與網絡誤差之間的相關性(correlation)來訓練相關的參數。
與一般的前饋神經網絡相比,級聯相關網絡無需設定網絡層數、隐層神經元數目,且訓練速度較快,但其在資料較小時易陷入過拟合。
5.5 Elman網絡
與前饋神經網絡不同,“遞歸神經網絡”(recurrent neural network)允許網絡中出現環形結構,進而可讓一些神經元的輸出回報回來作為輸入信号。這樣的結構與資訊回報過程,使得網絡在\(t\)時刻的輸出狀态不僅與\(t\)時刻的輸入有關,還與\(t-1\)時刻的網絡狀态有關,進而能處理與時間有關的動态變化。
Elman網絡是最常用的遞歸神經網絡之一,其結構如圖所示,它的結構與多層前饋網絡很相似,但隐層神經元的輸出被回報回來,與下一時刻輸入層神經元提供的信号一起,作為隐層神經元在下一時刻的輸入。隐層神經元通常采用\(Sigmoid\)激活函數,而網絡的訓練則常通過推廣的BP算法進行。
5.6 Boltzmann機
神經網絡中有一類模型為網絡狀态定義一個“能量”(energy),能量最小化時網絡達到理想狀态,而網絡的訓練就是在最小化這個能量函數。Boltzmann機就是一種“基于能量的模型”(energy-based model),常見結構如下圖所示,其神經元分為兩層:顯層與隐層。
顯層用于表示資料的輸入與輸出,隐層則被了解為資料的内在表達。
Boltzmann機中的神經元都是布爾型的,即隻能取0、1兩種狀态,狀态1表示激活,狀态0表示抑制。
令向量\(s∈\left\{0,1\right\}^n\)表示\(n\)個神經元的狀态,\(w_{ij}\)表示神經元\(i\)與\(j\)之間連接配接權,\(\theta_i\)表示神經元\(i\)的門檻值,則狀态向量\(s\)所對應的Boltzmann機能量定義為
\[E(s) = -\sum \limits_{i=1}^{n-1} \sum \limits_{j=i+1}^n w_{ij}s_is_j - \sum \limits_{i=1}^n \theta_i s_i
若網絡中的神經元以任意不依賴于輸入值的輸入值的順序進行更新,則網絡最終将達到Boltzmann分布,此時狀态向量\(s\)出現的機率将僅由其能量與所有可能狀态向量的能量确定:
\[P(s) = \frac{e^{-E(s)}}{\sum_t e^{-E(t)}}
Boltzmann機的訓練過程就是将每個訓練樣本視為一個狀态向量,使其出現的機率盡可能大。标準的Boltzmann機是一個全連接配接圖,訓練網絡的複雜度很高,這使其難以用于解決現實任務。現實總常采用受限Boltzmann機(Restricted Boltzmann Machine,簡稱RBM)。如下圖所示,受限Boltzmann機結構由完全圖簡化為二部圖。
受限Boltzmann機常用“對比散度”(Contrastive Divergence,簡稱CD)算法來進行訓練。假定網絡中有\(d\)個顯層神經元和\(q\)個隐層神經元,令\(v\)和\(h\)分别顯層與隐層的狀态向量,則由于同一層内不存在連接配接,有
\[P(v|h) = \overset{d}{\underset{i=1}\Pi}P(v_i|h) \\
P(v|h) = \overset{q}{\underset{j=1}\Pi}P(h_j|v)
CD算法對每個訓練樣本\(v\),先根據\(P(v|h) = \overset{q}{\underset{j=1}\Pi}P(h_j|v)\)計算出隐層神經元狀态的機率分布,然後根據這個機率分布采樣得到\(h\);此後,類似地根據\(P(v|h) = \overset{d}{\underset{i=1}\Pi}P(v_i|h)\)從\(h\)産生\(v'\),再從\(v'\)産生\(h'\);
連接配接權的更新公式為
\[\Delta \omega = \eta(vh^{T}-v'h'^{T})
參考材料:
(1)周志華《機器學習》
(2)李航《統計學習方法》
(3)邱錫鵬《神經網絡與深度學習》
(4)感覺機原理(Perceptron)
(5)批量梯度下降(BGD)、随機梯度下降(SGD)以及小批量梯度下降(MBGD)的了解
(6)[機器學習] ML重要概念:梯度(Gradient)與梯度下降法
Talk is cheap. Show me the code