多層神經網絡, Multi-layer neural network, 是研究的最多,結構又相對比較簡單的神經網絡。這種網絡是屬於前饋神經網絡,一般由輸入層,隱層,輸出層組成。隱層的多少決定了該網絡叫深度還是「淺度」神經網絡。通常將大於3層的稱為深度網絡了。深度學習,狹義上講就是對深度網絡的訓練過程。
隱層少的時候,對神經網絡的權重參數學習,採用的是梯度下降學習算法,即著名的BP算法,(Error Back Propagation Algorithm). BP算法中要考慮的超參數有 學習速率,動量項,還有總的學習次數(迭代次數)等。網絡結構複雜後,梯度下降學習時還常常會陷入局部極小,導致泛化能力降低。
在網絡結構上,輸入輸出層的神經元個數由給定的問題決定。因此,MLP結構設計上只需要考慮一共有多少隱藏層,每一個隱層有多少個神經元這兩個超參數即可。
訓練MLP所花費的時間主要在這些超參數的選擇上,BP算法的超參數選擇問題,常用的方法是多次試錯,即通過窮舉的方法來搜素選取。另外一種思路是拋棄BP算法,用不需要超參數的非梯度下降學習算法來訓練MLP,這正是我們二十多年前開始研究的一個方向。我們發展的方法稱為偽逆學習算法(PseudoInverse Learning --PIL)。
一、 偽逆學習算法發展歷史
1.1 多層前饋神經網絡簡介
首先我們來看一種典型的前饋神經網絡—單隱層神經網絡(SHLN),下圖是該網絡結構的示意圖:
在早期該網絡也被稱為三層神經網絡。該網絡模型可以看成是一種從輸入空間X到輸出空間O的一種映射,應用非常廣泛,比較抽象的說典型應用包括分類、回歸等問題。在給定數據集D下面,依據優化算法確定模型的權重參數,這個稱為訓練或學習。對這種三層神經網絡,研究對象包括問題建模,輸入輸出編碼,激活函數選擇,誤差函數(損失函數)分析等等。在給定問題的輸入輸出編碼後,相當於確定了輸入、輸出層的神經元個數。在網絡結構設計上,剩下的要考慮的是隱層神經元的個數如何選擇。如何選擇隱層神經元的個數呢?早期研究者做了大量的工作,從NN FAQ [ftp://ftp.sas.com/pub/neural/FAQ3.html#A_hu]總結的答案:我們應該使用多少個隱節點?隱節點個數取決於以下因素:
- 輸入與輸出層神經元的個數。
- 訓練樣本個數。
- 目標中的噪聲。
- 問題的複雜度。
- 網絡的架構。
- 隱層激活函數的類型。
- 訓練算法。
- 正則化。
從上面我們可以看出,隱單元(隱節點)的個數與很多因素有關,對初學者及一般使用者而言,選擇隱單元個數既網絡結構設計,是一個非常棘手的問題。網絡結構設計至今也沒有一個理論可以指導,正如前面所說,超參數的選擇是依據經驗來操作的。對該模型的數學上描述如下:
其中假定了輸入樣本x是d維,輸出o是m維向量。g表示網絡的映射函數,Θ表示網絡的參數組,包括了連接權重W,V, 偏置神經元b1, b2等。這裡l表示的是隱層神經元的個數,σ代表激活函數。如果將偏置神經元融入到權重矩陣中,權重矩陣在數學上是原矩陣的增廣矩陣,網絡的矩陣與向量數學表示將變得非常簡潔:
(1)
在對給定的數據集下面研究分類或回歸時,我們首先要設計網絡結構,例如選擇一個隱層單元個數的值,還有一個具體的激活函數。激活函數的選取是早期人工神經網絡研究的一個重要研究方向,(在目前的深度學習中最常用的是ReLU激活函數),下面是神經網絡中一些常見的激活函數示意圖(源自網絡):
從左到右、從上到下為 線性函數、階躍函數、斜坡函數、S 型函數(sigmoid, logistic)、雙曲正切函數(hyperbolic tangent-- Tanh)、高斯函數(Gaussian kenel function)。
在文獻中對MLP應用最為常見的是 Sigmoid和Tanh函數。
如果我們從數據集中抽出N個樣本來訓練神經網絡,即確定神經網絡的權重參數,該如何做呢?
首先要前向傳播——將訓練數據集饋入神經網絡,得到神經網絡的輸出,看看網絡的實際輸出與期望輸出的誤差是多少。這裡面涉及一個問題,如何衡量這個誤差呢?我們需要一種度量來計算網絡的實際輸出與期望輸出之間的差別,這個度量就是誤差函數,也叫代價函數或損失函數。誤差函數具有多種形式,不同的函數自然會有不同的結果。在假定誤差分布是高斯分布情況下,誤差函數化簡為誤差平方和(Sum of squared error),有時也叫均方差(對樣本數目的平均平方誤差,MSE)這是最常用的一種形式:
(2)
在給定的數據下訓練神經網絡就是確定網絡的參數,這個過程也稱為學習。神經網絡的學習目標是找到一組參數Θ使得E最小, 即最小化公式(2):
Θopt=argmin[E],這裡Θopt表示在該誤差函數標準下的最優權重參數集。
最小化誤差E的必要條件是, 由此我們可得公式3:
(3)
通常公式(3)無法得到解析解,因此需要使用一種優化算法來尋找該神經網絡中的權重參數。神經網絡最常見的學習算法是基於梯度下降的BP算法。BP算法是計算相對於神經網絡中每一層的權重的誤差偏導數,然後在與梯度相反的方向上移動。通過反覆多次迭代計算,使得誤差函數趨向一個極值,這時對應的權重參數就可能是我們在該平方誤差準則下公式(3)的一個近似解。
1.2 偽逆學習算法訓練單隱層神經網絡
正如前面所說,基於梯度下降的BP算法需要預先考慮的超參數有 學習速率,動量項,還有總的學習次數(迭代次數)等,這些超參數選擇對一般使用者而言是比較困難的事情。在1995年,我們提出了一種對三層神經網絡訓練的非梯度下降算法[1]。
在這個工作中,對隱單元和輸出單元均採用了Tanh激活函數,誤差函數公式(2)用矩陣表示為:
(4)
這裡Y表示隱層輸出矩陣, Y=Tanh(XV),B=ArcTanh[T], T是期望的目標輸出矩陣,(由於將權重矩陣寫在了右邊,T矩陣裡是每行對應一個期望輸出向量,與公式(1)裡的表示是轉置關係)。公式(4)形式上是一個線性代數裡最小二乘法的問題,但目前確切知道的只有B矩陣,而連接隱層和輸出層的權重矩陣W,以及包含在Y裡面的連接輸入和隱層的權重矩陣V還不確定。
對公式(4)中的W有一個形式解是W=Y+B, Y+表示Y的偽逆(Pseudoinverse, 或稱為廣義逆, Moore- Penrose inverse)。將這個形式解帶入公式(4), 我們還可以得到如下的數學形式:
YY+B-B=0 (5)
如果公式(5)成立,一個直觀的解釋就是YY+=I可滿足要求,因此Y+是Y的右逆就是一個解。
原先假定隱層神經元的個數是l, 如上所說,l與很多因素有關,選取一個合適的l對初學者來說是一個非常複雜的問題,一下不容易解決。依據線性代數裡的定理,如果l<N, Y的右逆不可能存在,因此如果要使公式(5)嚴格成立,l至少應大於或等於N才有可能。
因此,為減少問題的複雜性,不妨將隱層神經元的個數選為N。在這些參數確定後,還有輸入到隱層的權重矩陣V待定。
我們知道,在BP算法以及梯度下降及其變種優化算法中,權重參數需要給出一個初始值,通常是對權重隨機初始化的,也就是說V 矩陣的值可以採用隨機值,這是最初想到的一種簡單的方法。有了這種靈感後就著手編程進行實驗,看看這樣做的效果如何。但是「理想是豐滿的,現實是骨感的」。在理論上我們認為沒有問題的事情,在計算機數值計算時由於精度有限,就會出現問題。由於是完全隨機產生矩陣V中的元素值,這些值有大有小,還有些是幾乎相等,實驗結果表明這樣做是不穩定的,於是在ICONIP 1995論文中有了如下一段話:
在1994年開始數值實驗的時候,那時用的是16位的計算機,程式語言是Fortran-77,這種語言在當時是用的最多的科學計算程式語言了。在實驗中發現計算機的輸出是非常不穩定,通過debug, 發現W矩陣元素裡有時還有複數出現。這個問題困擾了很長時間,最終發現是由於隨機選V矩陣元素的值,有些數值過大引起的。這會導致Tanh函數飽和。
找到原因後,問題就好解決了,可採用的方法有很多種,例如現在常用的數值歸一化方法。但我們提出了另外一種方法,即將V設為輸入矩陣的偽逆矩陣。這樣做在理論上顯然可以保證Z=XV矩陣裡的元素數值不會變大,在特殊情況下,如果X矩陣是方陣,滿秩矩陣,Z矩陣將是一個單位矩陣,元素的最大值為1。通過數值實驗,發現這種想法是可行的,對大多數問題,在給定的數據下能用這種偽逆學習算法計算得到V和W矩陣,得到公式(4)的數值精確解。(滿足一定的精度要求,訓練誤差非常小,由於是數值解,不是理論上的零誤差)。這就是最初的偽逆學習的基本概念,即權重矩陣W用偽逆計算,W=Y+B,權重矩陣V也用偽逆計算,V= X+。整個學習過程沒有用戶難以選擇的超參數,不需要調參時間,也不需要梯度下降反覆迭代,學習過程超快,而且還能實現精確學習。
1.3 基於偽逆學習算法的多層神經網絡完備學習
在當時雖然對一些數據實現了「精確學習」,相對BP算法而言還是超快學習,但是對另外一些數據而言,由於數據固有的性質,單隱層的網絡的學習的精度還滿足不了要求。在2001年,我們發表了新的解決方案,將神經網絡從三層擴展到了多層結構, 並針對增加或減少隱層神經元個數時,提出了採用Griville's theorem 結合 Bordering algorithm來快速計算偽逆矩陣[2]。這個工作進一步擴展細化後,在2002年初投稿到Neurocomputing (NC), 論文於2003年Online並在2004年第一期正式出版(紙質)[3]。
下面詳細介紹在NC上發表的論文的內容:
首先對在該論文中採用的符號說明如下:
• 從數據集中抽取N個樣本構成訓練樣本集{Xi,Oi}Ni=1 ,這裡用(Xi,Oi)表示第i個訓練對,Xi=(X1,X2,‥.,Xn)∈Rn是輸入信號向量,Oi=(O1,O2,...,Om)∈Rm是對應的輸出向量。
• 用X0表示由訓練樣本構成的輸入矩陣,大小為N行n+1列(1表示加了偏置神經元,每行表示一個樣本向量)。
將誤差(損失)函數公式(2)寫成矩陣形式:
沿網絡正向傳播樣本,用l層到l+1層的權重Wl乘以第層的神經元輸出矩陣,並應用激活函數,可得到下一層的輸出矩陣:
最終網絡輸出為
這裡L表示最後一層。在這種情形下若採用平方誤差函數,神經網絡的優化問題變為:
如果我們能找到權重矩陣WL,使||YLWL-O||=0,那麼網絡就可以精確的學習每個訓練樣本。這時網絡優化問題變成一個求解線性最小二乘問題。如果想實現平方誤差準則下的完備學習,擴展的偽逆學習算法的描述如下:
算法的第1,2步可以看作為初始化,第3,4,5步循環迭代提升隱層輸出矩陣的秩。
根據線性代數的知識可知,當第l層隱層輸出矩陣滿秩時,矩陣的逆存在,偽逆矩陣就是逆矩陣:
在這種情況下可實現對給定訓練樣本的完備學習。
基於以上分析,可得偽逆學習算法的終止條件為
這裡是一個用戶指定的可用於表示學習精度的值。通常可將其設置為一個很小的值,例如 。
以上是PIL算法的基本思想,在NC論文中還討論了PIL算法的幾個性質,網絡結構變化以及算法加速以及應用等。
1.4 偽逆學習算法的幾個特點
PIL算法具有如下幾個特點:
• PIL算法對應的學習誤差是正向傳播,並且在傳播的過程中確定多層網絡的結構(MLP網絡的深度依據數據性質動態增加,隱層神經元的個數設為N)。網絡前一層學習到的權重參數在隨後的學習中不需要改變。
• 神經網絡訓練的經典算法為誤差反向傳播(BP)。BP採用基於梯度下降的方法對目標函數進行迭代優化。與BP算法相比,PIL算法是一個完全自動的算法,沒有需要用戶手動調節的模型參數,例如BP算法中的學習率或動量常量(momentum constant)。在BP算法裡這些參數的好壞對神經網絡模型的訓練時間,泛化能力都有巨大的影響。而這些超參數的選擇,沒有理論指導,需要豐富的調參經驗。
• BP算法是基於梯度下降的算法,需要計算激活函數的梯度,這要求激活函數可微分。而偽逆學習算法則不要求激活函數可微分,而可採用任意非線性函數,這是假定通過非線性變換可以提升矩陣的秩。偽逆學習算法使用輸入矩陣的偽逆陣做為神經網絡輸入層到下一個隱層的層間權重矩陣,通過不斷的加層映射提升隱層輸出矩陣的秩,直到其為滿秩矩陣。
• 相比BP算法,偽逆學習算法不需要考慮如何初始化神經網絡的權重來避免局部極小值。因為偽逆解為全局最優解。
• 還有一點是要達到同樣的學習精度,PIL算法要比BP算法快幾千倍,所需時間分別是幾秒和幾個小時的量級。
1.5 對偽逆學習算法的擴展及應用
1.5.1添加與刪除樣本
在論文中說明了添加或刪除訓練樣本等同於添加或刪除隱層神經元。當訓練樣本矩陣發生變化時重新計算整個矩陣的偽逆是非常費時的,而由Griville's theorem以及 Bordering 算法可快速計算權重變化情況。
Y的前k列組成一個子矩陣其偽逆為
這裡Yk表示矩陣Y的第k個列向量,其中
如果Y中的列向量線性獨立,那麼
當偽逆算法需要做留一法交叉驗證時應用以上求解過程可以提高計算速度,因此該算法特別有效。
1.5.2堆疊泛化 (Stacked Generalization--SG)
我們知道,訓練神經網絡最關心的問題是網絡的泛化能力,改進網絡泛化能力的方法也有很多種,當時的論文討論了Stacked Generalization 技術應用。
SG具體過程如下:令訓練集為D。首先對訓練集進行分割。分割方式之一為選擇D中一個樣本作為驗證點,其餘樣本作為訓練集。所有的0級網絡都通過由分割得到的數據集來訓練。每個網絡的性能通過分割時得到的驗證點判斷。0級網絡的輸出將被當作訓練特徵來訓練1級網絡,這裡目標值是相應的來自原始完整數據集的目標值。最後,使用全部數據D重新訓練所有的0級網絡,並將其輸出作為1級網絡的輸入。1級網絡的輸出即為最終的預測值。
SG 的樣本劃分方法採用交叉檢驗劃分樣本 (CVPS)的方法,CVPS的數學表達式可描述為:給定訓練數據集{Xi,Oi}Ni-1,我們將其隨機分為K個大小几乎相等的子集Ds1,Ds2,...,Dsk。定義Dsj和Ds-j分別為第j個k重交叉驗證的驗證集和訓練集。它們被稱為0級模型的樣本集。K=N時為「留一交叉驗證",即驗證集只有一個樣本,而訓練集包含N-1個樣本。(數據集劃分時i的初始值不同。)
令zj表示模型Mj在Xj上的驗證輸出。 在整個交叉驗證過程結束時,從模型的輸出得到的數據集為:
這裡DCV是用來訓練1級模型的數據集。 為了完成訓練過程,所有的0級模型都需要用整個數據集來重新訓練。
需要注意的是,對於噪聲數據,如果網絡模型過擬合,泛化性能會變差。這時,使用堆疊泛化方法無法提高網絡的性能。對於泛化問題,我們不能期望去實現完備學習,這樣會導致過擬合。因此,我們應該採用一些正則化策略,例如早期停止(early stopping)技術,在測試誤差增加時就停止添加網絡的隱層,使得網絡結構不要過於複雜(減小權重參數的數目),就是說如果兩層隱層結構的網絡對給定的數據過擬合了,那就用單隱層的神經網絡結構。
對於一個大規模的數據集,可採用分而治之方法。也就是說,將數據集劃分成子集,以減少單個網絡大小。 我們還可以使用其他方法來提高網絡性能,例如首先設計一個集成網絡(ensemble networks),然後應用權重參數平均來減小網絡規模[8]。具體實現的方案之一可以使用k重CVPS生成的樣本子集來訓練多個神經網絡,然後集成為一個網絡。
1.5.3 減小網絡複雜度
在論文中還提出了一種減小網絡複雜度,即降低網絡深度的的方法。
為了簡化網絡模型結構,可在網絡訓練的第2步,添加一個與權重矩陣維數相同的高斯噪聲矩陣來進行微擾。 因為噪聲分布是獨立同分步的(i.i.d),所以擾動後的矩陣的逆以概率1存在。 通過該策略,偽逆學習算法最多需要兩個隱層即可達到精確學習。 (這是由於噪聲是隨機值,所形成的矩陣只是以概率1可逆,不一定絕對可逆,但有兩個隱層的話,則矩陣不可逆的概率為要比只有一個隱層時小的多得多,也就可以說概率一定為零了)。
現在總結一下偽逆學習思想的特點:
(1)訓練MLP不需要梯度下降迭代學習。
(2)不需要調節梯度下降算法超參數,最大可能給用戶帶來方便,該方法的易用性強。
(3)PIL是動態增加網絡層數實現完備學習,避免了通常的網絡設計難題。
(4)對隱層神經元的個數選擇問題,PIL給出了一個選擇方法,即從數據集中抽取N個樣本構成訓練集,隱單元個數設為N。這樣避免了讓用戶選擇隱單元個數的難題,也就是說對網絡結構設計問題給出了一種方案。
(5)在PIL算法擴展中,採用的正則化技術是早期停止技術,用早期停止技術來解決過擬合問題。
二、 偽逆學習算法討論
對給定的數據,如果能建模為MLP網絡可以解決的問題,則我們可以考慮MLP網絡結構(模型)和優化算法。
2.1 網絡結構(模型)問題
對一個單隱層神經網絡而言,由於建模時就將輸入輸出層的神經元確定下來了,網絡結構設計就是選擇適當的隱單元的個數問題了。在給定的數據集下,要提高網絡的泛化能力,隱單元的個數是唯一可調節的參數。這個參數不能隨機選擇,而是要精心設計。因為選擇小了,網絡結構就比較簡單,容易造成欠擬合。而選擇大了,則網絡結構變得複雜,權重參數較多會造成過擬合。無論是欠擬合還是過擬合,都會造成網絡的泛化能力不強。如果是由於網絡結構簡單造成了欠擬合,唯一解決方案就是增加網絡的複雜度。而過擬合可以採用正則化技術或減小網絡的複雜度來解決。好的泛化性能需要在Bias與Variance之間作出一個恰當的平衡。如果採用PIL算法,對模型選擇問題是如何考慮的呢?首先要選擇足夠多的隱層神經元個數,也就是說網絡的結構要複雜一些,對給定的數據,模型的容量要足夠大。當讓,這種策略有可能過擬合,但可避免欠擬合問題,這種策略是當前深度學習中常用的策略。為避免過擬合,諸如Drop out等正則化技術被應用到深度學習中。在PIL裡,早期停止正則化技術,還有動態調整網絡的深度被應用到MLP訓練上來提高泛化能力。
需要說明的是在論文中給出的一個建議是在給定的數據集上,對數據抽出N個樣本來構成訓練集,其餘可以作為測試集。N選取多大可以得到一個泛化能力強的網絡?論文中用一個分段線性光滑函數進行了實驗,結果表明,選取N=5時,對測試數據欠擬合,分段線性函數變成了一個類似Sine函數的光滑函數。而選取N=20時可以得到理想的泛化結果。顯然,要通過模型選擇提高網絡的泛化能力,就是一個在一維空間搜索最優隱單元個數的問題。如果你運氣好,一次就能猜中最優隱單元個數值,那也可以說不需要時間調這個超參數。
2.2 隨機值(噪聲)矩陣問題
在ICONIP』1995論文中,提出了輸入到隱層的權重矩陣V可以是隨機選取,也就是只採用隨機初始化後不進行梯度下降調整。在NC的論文中,提出了添加一個與權重矩陣維數相同的高斯噪聲矩陣來進行擾動。(理論依據是量子力學中常用的微擾理論)。在產生高斯噪聲時,具體的隨機數值分布要符合高斯分布,這些數據一般不會很大。用高斯噪聲可以解決隨機初始化權重值時數值過大造成的不穩定問題,因此單隱層網絡對某些數據也可實現完備學習。
說到數據加噪聲的問題,在前人的研究中,已經說明了是一種正則化方法。參考ftp://ftp.sas.com/pub/neural/FAQ.html以及所列出的參考文獻。在NC論文裡,說的是給權重矩陣加高斯噪聲的問題。實際上,數據加噪聲和權重加噪聲是等價的。而在1995年的論文中,說明了V矩陣本身可以選擇為一個噪聲矩陣(隨機初始化),這個對輸入數據而言是乘性噪聲問題,與上面所說的加性噪聲並不等價。
2.3 激活函數問題
在NC論文中有這麼一段話:
這說明激活函數不需要可微分(可導),也不需要擴展到無限可導。只要求是非線性的可提升矩陣的秩,例如類似sigmoid型的函數。其他函數,包括高斯函數,徑向基函數(徑向基函數神經網絡(RBF)的激活函數),核函數(支持向量機SVM所用的多種核函數),還有其他類型的激活函數,這些也是可以擴展考慮的。事實上,RBF是一種局域性的函數,因此可以從局部連接的角度來考慮 [7]。
2.4 誤差(損失)函數問題
讓我們首先回到以前,來看NC論文裡關於最小平方誤差函數討論:
這說明在平方誤差準則下面,要實現完備學習,一個直觀的解釋就是隱層輸出矩陣Y可逆。這裡把學習任務轉換為尋找滿足可逆矩陣Y了。如何使最後的隱層輸出矩陣Y可逆,從線性代數裡的定理我們知道,一個滿秩方陣是可逆的。(雖然並不要求Y+是Y的兩邊逆,也就是說Y可以不是方陣。 如果用Y矩陣中的列向量表示樣本,則Y+是Y的左逆也滿足要求)。所以訓練網絡的任務在這樣的條件下就變成想辦法把Y矩陣升秩為滿秩矩陣。如何讓Y成為滿秩矩陣,自然也有多種方法,例如採用噪聲矩陣(隨機產生數值,這樣Y矩陣將以概率1可逆, 這是在概率統計裡,隨機噪聲是符合i.i.d要求的,這樣Y矩陣才有可能是以概率1滿秩,滿秩矩陣的逆矩陣才存在,否則只好用偽逆矩陣得到一個次優解了),或者逐層升秩等等。但是如果訓練數據有噪聲,就不需要精確學習了。這就意味著平方誤差不需要越小越好。
在平方誤差準則下,我們能否得到一個泛化能力強的映射函數g(x,Θ)呢?即找到一組參數,對訓練數據的誤差不一定最小,但對測試數據的誤差最小。也就是應該有一定的殘差存在,在該殘差下所得到的網絡參數對測試數據的表現最優。
事實上,依據 Moore-Penrose 逆的性質,我們可以把YY+看成是一個正交投影算子,令P=YY+,訓練誤差可以寫為||PO—O||。這表明學習任務可以轉換為在給定數據下,找到這樣一個正交投影算子P,使得對投影后得到的子空間與原始的目標空間的殘差維持在一定水平,但對測試數據的誤差最小。如何依據給定的數據集尋找這樣一個投影算子呢?也就是說如何產生這樣一個子空間呢? 我們這裡將偽逆學習與子空間學習關聯起來了,因此可以借鑑子空間學習的一些思想與方法,實現對MLP的非梯度下降學習。在對過擬合問題研究中,大多數正則化技術,例如權重衰減正則化,是在平方誤差函數上加了一項約束,改變了誤差函數的形式,這個放在後面對正則化技術的討論一節裡。
三、 用偽逆學習算法訓練深度前饋網絡
那到底能不能用PIL算法快速訓練多層神經網絡(MLP)呢?(事實上,我們在2001年就成功實現了基於PIL算法的深度前饋網絡的訓練[2]。只是那時數據量也不多,算力也不夠強大,也沒有將該框架應用到具體的模式識別問題上去,沒有經過大規模複雜問題的考驗。)現在我們知道,深度學習的興起源於Hinton教授2006年的工作。對深度網絡而言,直接採用梯度下降算法訓練,在當時的算力下是不可能的。因此Hinton教授提出了深度學習的核心方法:逐層貪婪學習加微調,用這種方法解決了梯度彌散和局部極值的問題。這實際上是分而治之的思想的應用,將一個深度網絡按層分解,每層採用無監督學習方式來訓練,最後對深度網絡的權重參數用梯度下降算法再微調一下以達到期望的訓練誤差。深度信念網絡DBN是多個RBM堆疊,在最後加上一個分類器構成的。自編碼器(Autoencoders)可以認為是一種採用無監督學習訓練出來的單隱層神經網絡,將編碼器堆疊起來,後面加上一個分類器,就構成了深度前饋神經網絡,這也是以前的MLP。深度學習框架下深度網絡結構核心是前面的層數是用於學習數據表徵,最後才用一個分類器對目標進行分類或回歸。逐層貪婪學習加微調策略也可以理解為用無監督學習方式得到權重參數的初始值,用有監督學習方式再訓練深度網絡,這樣保證學習過程很快收斂到設定的誤差值。這意味著對網絡權重參數採用了預訓練,得到接近誤差函數極值點的權重參數初始值後,再用梯度下降方法訓練深度網絡使其收斂,而不是採用隨機初始化後直接用梯度下降算法來訓練。現在隨著算力的提高和眾多深度學習技巧的發展,以及對梯度下降算法的改進(諸如BGD, SGD, Momentum, AdaGrad, RMSProp, ADAM 等等),目前訓練神經網絡採用直接用基於梯度下降的優化技術,也可以得到期望的結果。但是有一點可以肯定的是,不要期望對權重矩陣隨機初始化後,不通過學習就能使得誤差函數極小,網絡的泛化能力還強。
3.1 堆疊自編碼器
我們知道,RBM, CNN, Autoencoder被稱為構建深度網絡的基礎模塊(Building block),就是蓋一座高樓用的磚塊。在構建深度網絡時,採用逐層貪婪訓練的策略,逐層訓練過的自編碼器(去掉解碼器)再堆疊為多層深度模型,這稱為堆棧自編碼器。在堆棧自編碼器中,前一層自編碼器的輸出作為後一層自編碼器的輸入。網絡最後一層的輸出可作為原始數據的特徵。在特定的學習任務中(例如分類問題),可以再將輸出的特徵作為分類器的輸入,再對分類器以有監督的方式進行訓練。
由於自編碼器本質上可以視為輸入等於輸出的單隱層神經網絡,因此,如果將數據本身作為其標籤,O=X,那麼偽逆學習的思想也可以被用於訓練自編碼器。由於自編碼器的目標是從原始數據中學習特徵,不是對數據進行精確重構,因此要避免恆等映射。這個就需要加約束(正則化)來實現數據表徵。對隱層進行約束通常有兩種方式,一種是稀疏約束,另外一種是強制降維,也就是所謂的瓶頸約束。強制降維要求自編碼器的隱層神經元個數要小於輸入數據的維度。我們基於偽逆學習的思想實現了對Autoencoder的快速訓練[6]。
在1995年的論文中,對隱層神經元的個數設為N, 那時優化的目標是精確學習分類或回歸。 而自編碼器是為了學習特徵,目標是不一樣的。在SMC2017論文中[6],我們採用truncated SVD (T-SVD) 技術實現了特徵降維操作,這也解決了在1995年論文中遺留下來沒有進一步討論的數據壓縮問題。
在自編碼器中,隱層神經元的個數p應該選多少呢?如果用稀疏約束,p可以大於或等於輸入樣本的維數d,但如果是強制降維的話,p應該小於d。我們依據經驗,將p與輸入樣本矩陣的秩r關聯起來,採用低秩近似來設置p的大小。這是考慮到目前流行的稀疏、低秩近似方法在深度學習中得到了廣泛的應用,例如有稀疏自編碼器,還有採用低秩近似對深度網絡結構進行壓縮等方面的工作。
在SMC2017論文中,我們提出了選擇隱單元個數的經驗公式:
首先,如果一次降維降的太狠了,輸入信息映射到隱空間時就丟失的太多,必然引起重構誤差很大,因此隱單元個數不應該太小。隱層神經元的個數設置為小於原始輸入數據的維度,而大於或等於輸入數據矩陣的秩:
(6)
如果輸入數據本身就含有噪聲,輸入矩陣有可能是滿秩的,就進行強制降維:
(7)
在用堆棧自編碼器構造深度網絡時,可採用動態生長策略增加隱層,這裡給出一個停止增加的準則(仍然是採用了PIL 2001論文裡的準則[2]):
有了這些準則和PIL算法,我們就可以全自動地構造深度MLP了。(參考文獻[6], 還有ICONIP2017 的tutorial)
實驗結果表明這種策略是可行的,但也反映出簡單堆疊構造深度網絡存在一些問題。逐層貪婪學習是一種預訓練技術,Bengio教授在早期就指出了「與其他層次的預訓練技術相同的缺點是:它是貪婪的,也就是說,它不試圖以較低層次的方式來調整下層,從而使更高層的工作更容易。」 而且「無監督的貪婪逐層預訓練明顯優於單純的有監督貪婪逐層預訓練。一個可能的解釋是貪婪的監督過程過於貪婪:在學習隱單元表示時,它可能丟棄一些關於目標的信息,這些信息不容易被一個隱層神經網絡捕獲,但是可以通過更多的隱藏層來捕獲。」事實上,在NC2004論文裡SG實驗就說明了有監督貪婪學習可以實現完備學習,但對有噪聲的數據會過擬合。採用早停技術可以使學習過程變得不那麼過於貪婪,這樣再採用SG技術可以使得網絡得到較好的泛化能力。
公式(6)就是考慮了每層降維不要過於貪婪而提出來的,但是我們也應該認識到無論是稀疏還是低秩約束,在構造堆疊自編碼器網絡時,前面的編碼器已經學習到稀疏或低秩表示,後面的表徵學習就很難再繼續學習到稀疏或低秩特徵了。用這樣的策略很難構造出性能良好的較深的深度神經網絡,因此需要考慮另外的構造網絡的方式,例如在NC2004論文中所建議的集成網絡(Ensemble Nets)。
在smc2017論文中還討論了權重捆綁(weight tie)問題。對於比較複雜的模型,可以選擇利用權重捆綁減少權重參數,降低模型的自由度, 將解碼器連接權重矩陣的轉置作為編碼器的權重矩陣。因此,對自編碼器的訓練,可以先對編碼器權重隨機初始化化後前向傳播,得到隱層輸出矩陣,就可用偽逆學習得到解碼器權重矩陣。再採用權重捆綁的思想,令編碼器權重等於解碼器權重的轉置,更新下編碼器權重。不難看出,這本質上仍是偽逆學習的思想應用於自編碼器訓練。需要注意的是這樣更新編碼器後,隱層輸出將發生變化,解碼器權重也需要更新才能使得重構誤差較小。若採用的是sigmoid 或 Tanh激活函數,反覆進行權重捆綁迭代更行權重是不收斂的。對這個問題的解決方案還在研究中,很快會得出結果。另外,在smc2017論文裡提出了經驗選擇隱單元個數,動態增長層數的方法。但是網絡結構設計並不是這麼簡單的事情,仍有很多問題沒有解決。
3.2 關於正則化技術
在線性代數裡面,研究的最多的是 Ridge Regression(嶺回歸) 和 LASSO了。 對應到神經網絡裡面是在平方誤差函數上面加一項正則化項,分別對應L2 Norm 和L1 Norm. 神經網絡裡的權重衰減對應於統計裡面的嶺回歸,而稀疏約束對應於LASSO。選擇不同的誤差函數形式實際上是改變了優化目標,有很多研究論文是與設計誤差函數相關的。
我們來看權重衰減正則化,這時誤差函數形式為:
(8)
寫成矩陣-向量的數學表示:
這裡W是連接隱層到輸出層的權重矩陣(為了簡化複雜度,暫時不考慮其他層的連接權重矩陣),Y是隱層輸出矩陣。對公式(6)求極值,可以得到:
(10)
因此有W(YYT+λI)=OYT, 記 Y+=YT(YYT+λI)-1,則W=OY+,這與前面平方誤差函數下得到的W的表示形式是一致的。(偽逆矩陣左乘或右乘取決於自己定義訓練樣本是用行向量還是用列向量表示。)在實際計算中,如果正則化參數λ=0, 則在Y是行滿秩的情況下可求得Y+,如果Y是列滿秩,則Y+=(YTY)-1YT。我們注意到Moore-Penrose 逆的一種極限形式為:
。
這種極限形式與嶺回歸下的正則化參數趨於零非常類似。需要注意的是正則化參數λ不為零時,Y+=YT(YYT+λI)-1不是嚴格意義上的偽逆矩陣。將W=OY+代入公式(10),我們可以看出:
如果正則化參數很小,例如10-12量級,只需要對數據歸一化處理,O矩陣元素值很小,則誤差Er也會很小。這也就是說,無論在前面隱層中權重矩陣如何設置,用噪聲或用偽逆,經過Sigmoid 或 Tanh等非線性激活函數後,隱層輸出矩陣Y的元素最大也就是1,最小為0或-1。由於λ不為零,Y+總是存在的,總體誤差將會非常小。如果假定經過前面的隱層升秩後,隱層輸出Y成為了一個單位方陣,Y+=(1+λ)-1I,這時可以得出訓練誤差為:
特別地,當用到分類問題時,目標矩陣O採用 one of the K 編碼時,對N個訓練樣本, 。這說明λ只要足夠小,訓練誤差也可以足夠小。
但是採用正則化的目的是將誤差函數的極值拉到一個恰當的位置,在這個位置時得到的參數並不是讓訓練誤差最小,而是讓測試誤差最小。這個位置由λ來控制。如何尋找這個超參數又是一件非常困難的事情。通常採用的是窮舉搜索方法或依據經驗啟發式選擇。這種試錯選擇超參數的方法計算工作量非常大,這是由於給定一個超參數值,訓練一個網絡,訓練好後用測試數據計算下誤差。再給定一個超參數值,再訓練一個網絡,再用測試數據計算誤差。如此在多個超參數值中,看看哪個對應的測試誤差最小,我們就選定測試誤差最小的這個超參數了。為了減少計算工作量,我們在以前的工作中依據KL散度準則,提出了一個選擇正則化參數的公式,可以依據這個公式僅利用訓練數據來估計正則化參數[4]。(註:所謂的貝葉斯X學習機只是我們這個工作的一個特例。將神經網絡的映射函數設計成任何函數,如果設計成深度前饋網絡,就可以稱為貝葉斯MLP)。
需要注意的是由於網絡的泛化能力是依據測試數據衡量的,而網絡的參數是依據訓練數據學習的。正則化技術是將模型參數約束到可能是表示真實的分布的位置,可以解決一類病態問題。而在機器學習研究領域裡有一個最基本的假定就是測試數據和訓練數據是同分布的,即假定所用到的數據均是在一個確定的分布下抽樣的結果。如果學習用的數據和以後推理的數據不是同分布,則網絡的泛化能力不可能強。(目前機器學習中對數據的概率分布解釋以及學習與推理,均假定樣本是高維空間的一個點,訓練樣本與測試樣本在高維空間如果離得很近,例如內插操作的結果就很好。如果測試樣本離訓練樣本較遠,例如做外推時,效果就不會太好)。
另外在編程實現方面,例如採用Thin-SVD等技術, 還可以將訓練速度進一步加速。 (這部分參考我的ICONIP2017 Tutorial PPT,在我的主頁上有下載http://sss.bnu.edu.cn /~pguo)。
偽逆學習算法教程
(下)
四、 偽逆學習算法擴展及應用
4.1偽逆學習算法擴展
(待續)…
參考文獻
[1]. P. Guo, C.L.P. Chen and Y.G. Sun, 「An Exact Supervised Learning for a Three-Layer Supervised Neural Network」, Proceedings of the International Conference on neural Information Processing (ICONIP』95), pp.1041--1044, Beijing, 1995.
[2]. P. Guo and M. Lyu, 「Pseudoinverse Learning Algorithm for Feedforward Neural Networks」, in N. E. Mastorakis, Ed., Advances in Neural Networks and Applications, Puerto De La Cruz, Tenerife, Canary Islands, Spain , pp. 321--326, 2001.
[3]. P. Guo and M. Lyu, 「A pseudoinverse learning algorithm for feedforward neural networks with stacked generalization applications to software reliability growth data」, Neurocomputing, vol. 56, pp. 101--121, 2004, (Online in 2003).
[4]. P. Guo, M.R. Lyu and C.L.P. Chen, "Regularization Parameter Estimation for Feedforward Neural Networks ", IEEE trans System, Man and Cybernetics (B), Vol.33, No.1, pp.35-44, 2003.
[5]. Ke Wang, Ping Guo, Qian Yin, A-Li Luo, Xin Xin; 「A pseudoinverse incremental algorithm for fast training deep neural networks with application to spectra pattern recognition」, Proceedings of the 2016 International Joint Conference on Neural Networks, IJCNN 2016, pp.3453-3460, 2016.
[6]. K. Wang, P. Guo, X. Xin, Z.B.Ye, "Autoencoder, Low Rank Approximation and Pseudoinverse Learning Algorithm", IEEE SMC 2017, pp.948--953.
[7]. Ke Wang, Ping Guo, A-Li Luo, Xin Xin, Fuqing Duan, 「Deep neural networks with local connectivity and its application to astronomical spectral data」, Proceedings of 2016 IEEE International Conference on Systems, Man, and Cybernetics (SMC), pp.002687 - 002692, 2016.
[8]. P. Guo, "Averaging Ensemble Neural Networks in Parameter Space'', Proceedings of fifth international conference on neural information processing (ICONIP'98), Kitakyushu, pp.486-489, 1998.
[9]. P. Guo, C.L.P. Chen and Y.G. Sun, "AHLN Algorithm: Perfect Learning Through Data Representation", Journal of Beijing Normal University (Natural Science Edition), Vol.32 (1), p71, 1996.