机器学习笔记(五)神经网络
5.神經(jīng)網(wǎng)絡
5.1神經(jīng)元模型
神經(jīng)網(wǎng)絡是由具有適應性的簡單單元組成的廣泛并行互連的網(wǎng)絡,它的組織能夠模擬生物神經(jīng)系統(tǒng)對真實世界物體所作出的交互反應。對這句話的理解,簡單提要下,主角是簡單單元(輸入單元、功能單元),特性是適應性和并行互連,功能是模擬生物神經(jīng)反應。
神經(jīng)網(wǎng)絡是一個數(shù)學模型,其最基本的成分是神經(jīng)元(neuron),即簡單單元。在生物神經(jīng)網(wǎng)絡中,每個神經(jīng)元與其他神經(jīng)元相連,當它興奮時,就會向相連的神經(jīng)元發(fā)送化學物質(zhì),從而改變這些神經(jīng)元內(nèi)的電位;如果某神經(jīng)元的電位超過了一個閾值(threshold),那么它就會被激活,即興奮起來,向其他神經(jīng)元發(fā)送化學物質(zhì)。這個過程,神經(jīng)網(wǎng)絡模型加以數(shù)學簡化并模擬。實際上,很多數(shù)學模型都源于對自然和人的觀察所得,如飛機模型是模擬鳥。
在這個模型中,很重要就是神經(jīng)元的互連以及輸入和輸出(閾值觸發(fā))。從最簡單的M-P神經(jīng)元模型來看,神經(jīng)元接收來自n個其他神經(jīng)元傳遞過來的輸入信號,這些輸入信號通過帶權重的鏈接(connection)進行傳遞,神經(jīng)元收到的總輸入值與神經(jīng)元的閾值進行比較,然后通過激活函數(shù)(activation function)處理以產(chǎn)生神經(jīng)元的輸出。
理想中的激活函數(shù)是階躍函數(shù),將輸入值映射為輸出值0和1,1對應于神經(jīng)元興奮,0對應于神經(jīng)元抑制。不過階躍函數(shù)不具有連續(xù)和光滑性質(zhì),因此常用sigmoid函數(shù)。
如上定義,一個神經(jīng)網(wǎng)絡是包含許多參數(shù)的數(shù)學模型,模型中包含若干函數(shù),所以不管是否真的模擬了生物神經(jīng)網(wǎng)絡,歸根到底還是要數(shù)學來支撐神經(jīng)網(wǎng)絡學習。下文深入看模型中的函數(shù)和參數(shù)是如何通過機器學習獲得,從而構建具有一定層次結構的神經(jīng)網(wǎng)絡。
5.2感知機與多層網(wǎng)絡
感知機(Perceptron)由兩層神經(jīng)元組成,輸入層接收外界輸入信號后傳遞給輸出層,輸出層是M-P神經(jīng)元,也稱閾值邏輯單元(threshold logic unit)。感知機可實現(xiàn)邏輯與、或、非運算,通過給定訓練集,權重w i和閾值 可通過學習得到。如果將閾值 看做是第m+1個輸入元,那么輸入值x m+1是-1.0(稱為啞結點,dummy node),權重值就是w m+1,如此可統(tǒng)一為對權重的學習。感知機的權重學習規(guī)則相對簡單,給定訓練樣例(x,y),若當前感知機的輸出為y-,則感知機權重將調(diào)整為:就是根據(jù)實際樣例y值和感知機模型輸出值y-的差距進行權重調(diào)整,如果二者相當(預測正確),那就不用調(diào)整。
感知機只有輸出層神經(jīng)元進行激活函數(shù)處理,就是只擁有一層功能神經(jīng)元(functional neuron),其學習能力非常有限。感知機可容易實現(xiàn)的邏輯與、或、非操作,是線性可分(linearly separable)問題,若兩類模式是線性可分的,則存在一個線性超平面將它們分開,這樣的感知機在學習權重值過程中會收斂(converge),否則會發(fā)生振蕩(fluctuation),權值難以穩(wěn)定,如異或操作。這個例子,可知,對神經(jīng)網(wǎng)絡模型的權值(閾值已統(tǒng)一為第m+1個權值)學習過程中,具備單層功能神經(jīng)元是不夠的(可解決線性可分問題),在解決非線性可分為問題時,需要引入多層功能神經(jīng)元。多層功能神經(jīng)元,是在輸入層和輸出層之間加上隱含層(hidden layer),隱含層和輸出層都是具有激活函數(shù)的功能神經(jīng)元。
多層前饋神經(jīng)網(wǎng)絡(multi-layer feedforward neural networks):每層神經(jīng)元與下層神經(jīng)元全互連,同層神經(jīng)元之間不存在互連,也不存在跨層互連的神經(jīng)元,從拓撲結構上看,不存在回或環(huán)路。輸入層神經(jīng)元接收外界輸入,隱含層與輸出層神經(jīng)元對信號進行加工,最終結果由輸出層神經(jīng)元輸出。輸入層神經(jīng)元僅接收輸入,不進行函數(shù)處理,隱含層和輸出層包含功能神經(jīng)元,處理數(shù)據(jù)。
神經(jīng)網(wǎng)絡的學習過程,就是根據(jù)訓練數(shù)據(jù)來調(diào)整神經(jīng)元之間的連接權(connection weight)以及每個功能神經(jīng)元的閾值,簡言之,神經(jīng)網(wǎng)絡模型要學得就是連接權和閾值。下面就要看用什么算法來學習出神經(jīng)網(wǎng)絡模型的權值和閾值。
5.3誤差逆?zhèn)鞑ニ惴?/h3>
誤差逆?zhèn)鞑ニ惴?#xff08;error BackPropagation,BP算法)是訓練多層前饋神經(jīng)網(wǎng)絡模型的常見算法。
1)定義一個多層前饋神經(jīng)網(wǎng)絡
給定訓練集D={(x 1,y 1),(x 2,y 2),…,(x m,y m)},其中x i∈R d,y i∈R l,輸入示例有d個屬性描述,輸出l維實值向量。若輸入示例中d個屬性含離散屬性,則需進行處理,若屬性值之間存在序關系則進行連續(xù)化,否則轉(zhuǎn)化為k維向量(k是屬性值數(shù)),就是變成k個屬性。
即真實輸出和預測輸出的誤差,目標是訓練出均方誤差最小,該函數(shù)關系到上述定義的閾值和權值,共有(d+l+1)q+l個參數(shù)。其中,輸入層到隱層有d*q個權值、隱層到輸出層有q*l個權值,隱層有q個閾值、輸出層有l(wèi)個閾值。
4)BP算法訓練
BP是一個迭代算法,在迭代的每一輪中采用上文定義的感知機學習規(guī)則來持續(xù)優(yōu)化參數(shù),直到目標函數(shù) 最小值。
一個訓練樣例更新連接權和閾值。通過推導基于累積誤差最小化的更新規(guī)則,可得到累積誤差逆?zhèn)鞑?#xff08;accumulated error backpropagation)算法。標準BP算法每次更新都只針對單個樣例,參數(shù)更新非常頻繁,而且對不用樣例進行更新的效果可能出現(xiàn)抵消現(xiàn)象,因此,為了達到同樣的累積誤差極小點,標準BP算法往往需要進行更多次數(shù)的迭代。累積BP算法,直接針對累積誤差最小化,在讀取整個訓練集D一遍后才對參數(shù)進行更新,其參數(shù)更新的頻率低,但在很多任務中,累積誤差下降到一定程度之后,進一步下降會非常緩慢,這時標準BP往往會更快獲得更好的解,尤其是在訓練集D非常大時更明顯。標準BP和累積BP類似于標準梯度下降法和隨機梯度下降法。
經(jīng)過證明,只需一個包含足夠多神經(jīng)元的隱層,多層前饋神經(jīng)網(wǎng)絡就能以任意精度逼近任意復雜度的連續(xù)函數(shù)。然后,如何設置隱層神經(jīng)元的個數(shù)是一個未決問題,在實際任務中,需要通過試錯法不斷調(diào)整。其實,到這里,可以理解的就是,多層神經(jīng)網(wǎng)絡的參數(shù)個數(shù)和參數(shù)值都是訓練的目標。
?
5.4全局最小和局部極小
BP算法中,用E表示神經(jīng)網(wǎng)路在訓練集上的誤差,它是關于連接權和閾值的函數(shù)。實際上,神經(jīng)網(wǎng)絡的訓練過程就是一個參數(shù)尋優(yōu)過程,在參數(shù)空間中,尋找一組最優(yōu)參數(shù)使得E最小。BP算法是基于梯度下降法來求解最小。
最小,有全局最小(global minimum)和局部最小(local minimum)。局部最小就是參數(shù)空間中的某個點,其鄰域點的誤差函數(shù)值均不小于該點的函數(shù)值;全局最小就是參數(shù)空間所有的點的誤差函數(shù)值均不小于該點的誤差函數(shù)值。
在一個參數(shù)空間內(nèi),梯度為零的點,只要其誤差函數(shù)值小于鄰點的誤差函數(shù)值,就是局部最小點,可能存在多個局部最小值,但卻只有一個全局最小值。在參數(shù)尋優(yōu)過程中,期望找到的是全局最小值。
采用梯度下降尋優(yōu),迭代尋找最優(yōu)參數(shù)值,每次迭代中,先計算誤差函數(shù)在當前點的梯度,然后根據(jù)梯度確定搜索方向。由于負梯度方向是函數(shù)值下降最快的方向,因此梯度下降法就是沿著負梯度方向搜索最優(yōu)解。若誤差函數(shù)在當前點的梯度為零,則已達到局部最小,更新量為零,意味著參數(shù)的迭代更新停止。那么,此時的局部最小是否就是全局最小呢?如果誤差函數(shù)存在多個局部最小,就無法保證一定能找到全局最小。如果參數(shù)尋優(yōu)陷入局部最小,那自然不是想要的結果。
在現(xiàn)實任務中,常采用以下策略來試圖跳出局部最小,從而進一步接近全局最小:
1)以多組不同參數(shù)值初始化多個神經(jīng)網(wǎng)絡,按標準BP方法訓練后,取其中誤差最小的解作為最終參數(shù);
2)使用模擬退火(simulated annealing)技術,模擬退火在每一步都以一定的概率接收比當前解更差的結果,從而有助于跳出局部最小;在每步迭代過程中,接受次優(yōu)解的概率回逐步降低,從而保證算法的穩(wěn)定;
3)使用隨機梯度下降,與標準梯度下降法精確計算梯度不同,隨機梯度下降法在計算時加入了隨機因素,于是即便陷入局部最小點,其計算出的梯度可能不為零,也就有機會跳出局部最小點繼續(xù)搜索。
值的一說的是,這些策略都是啟發(fā)式,并無實際保證可以找打全局最優(yōu)。對此,我們應該明白,機器學習算法本身多數(shù)就是基于啟發(fā)式的,或可見效,但需要在實際任務中逼近。遺傳算法也常用來訓練神經(jīng)網(wǎng)絡以更好地逼近全局最小。
5.5其他常見神經(jīng)網(wǎng)絡
1)RBF網(wǎng)絡
RBF(RadialBasis Function,徑向基函數(shù))網(wǎng)絡是一種單隱層前饋神經(jīng)網(wǎng)絡,使用徑向基函數(shù)作為隱層神經(jīng)元激活函數(shù),而輸出層則是對隱層神經(jīng)元輸出的線性組合。假定輸入為d維向量x,輸出為實值,則RBF網(wǎng)絡可表示為:
2)ART網(wǎng)絡
ART(AdaptiveResonance Theory,自適應諧振理論)網(wǎng)絡是競爭型學習的重要代表,由比較層、識別層、識別閾值和重置模塊構成。其中比較層負責接收輸入樣本,并將其傳遞給識別層神經(jīng)元。識別層每個神經(jīng)元對應一個模式類,神經(jīng)元數(shù)目可在訓練過程中動態(tài)增長以增加新的模式類。
這個網(wǎng)絡和前文不同的是,識別層神經(jīng)元是動態(tài)的,網(wǎng)絡結構不是固定的了。競爭型學習(competitive learning)是無監(jiān)督學習策略,網(wǎng)絡中的輸出神經(jīng)元相互競爭,每一時刻僅有一個競爭獲勝的神經(jīng)元被激活,其他神經(jīng)元的狀態(tài)被抑制,這種機制也稱為勝者通吃(winner-take-all)原則。
ART網(wǎng)絡在接收到比較層的輸入信號后,識別層神經(jīng)元之間相互競爭以產(chǎn)生獲勝神經(jīng)元。競爭規(guī)則是:計算輸入向量與每個識別層神經(jīng)元所對應的模式類的代表向量之間的距離,距離最小者勝。獲勝神經(jīng)元將向其他識別層神經(jīng)元發(fā)送信號,抑制其激活。若輸入向量與獲勝神經(jīng)元所對應的代表向量之間的相似度大于識別閾值,則當前輸入樣本將被歸為該代表向量所屬的類別,同時,網(wǎng)絡連接權將會更新,使得以后再接收到相似輸入樣本時該模式類會計算出更大的相似度,從而使該獲勝神經(jīng)元有更大可能獲勝;若相似度不大于識別閾值,則重置模塊將在識別層增加一個新的神經(jīng)元,其代表向量就設置為當前輸入向量。
可以看出,識別閾值是很關鍵的參數(shù),如較高,則輸入樣本會被劃分的比較精細,識別層神經(jīng)元數(shù)目過多;若較低,則劃分的比價粗略。ART較好地緩解了競爭型學習中的可塑性-穩(wěn)定性窘境(stability-plasticity dilemma),可塑性是指神經(jīng)網(wǎng)絡要有學習新知識的能力,而穩(wěn)定性是指神經(jīng)網(wǎng)絡在學習新知識時要保持對舊知識的記憶;這就使得ART網(wǎng)絡具有增量學習(incremental learning)或在線學習(online learning)。增量學習是指在學得模型后,再接收到訓練樣例時,僅需根據(jù)新樣例對模型進行更新,不必重新訓練整個模型,并且先前學得的有效信息不會被沖掉;在線學習是指每獲得一個新樣例就進行一次模型更新。在線學習是增量學習的特例,而增量學習可視為批模式(batch-mode)的在線學習。早期的ART網(wǎng)絡只能處理布爾型輸入數(shù)據(jù),后面發(fā)展成一個算法族,包括能處理實值輸入的ART2網(wǎng)絡、結合模糊處理的FuzzyART網(wǎng)絡以及可進行監(jiān)督學習的ARTMAP網(wǎng)絡等。
3)SOM網(wǎng)絡
SOM(Self-OraganizingMap,自組織映射)網(wǎng)絡是一種競爭學習型的無監(jiān)督神經(jīng)網(wǎng)絡,能將高維輸入數(shù)據(jù)映射到低維空間(通常為二維),同時保持輸入數(shù)據(jù)在高維空間的拓撲結構,即將高維空間中相似的樣本點映射到網(wǎng)絡輸出層中的鄰近神經(jīng)元。
SOM網(wǎng)絡中的輸出層神經(jīng)元以矩陣方式排列在二維空間中,每個神經(jīng)元都擁有一個權向量(低維空間坐標點),網(wǎng)絡在接收輸入向量后,將會確定輸出層獲勝神經(jīng)元,它決定了該輸入向量在低維空間中的位置。SOM的訓練目標就是為每個輸出層神經(jīng)元找到合適的權向量,以達到保持拓撲結構的目的。
SOM的訓練過程是:在接收到一個訓練樣本后,每個輸出層神經(jīng)元會計算該樣本與自身攜帶的權向量之間的距離,距離最近的神經(jīng)元成為競爭獲勝者,稱為最佳匹配單元(best matching unit),然后最佳匹配單元及其鄰近神經(jīng)元的權向量將被調(diào)整,以使得這些權向量與當前輸入樣本的距離縮小。這個過程不斷迭代,直至收斂。
4)級聯(lián)相關網(wǎng)絡
一般的神經(jīng)網(wǎng)路模型是假定網(wǎng)絡結構是固定的,訓練的目的是利用訓練個樣本來確定最優(yōu)的連接權、閾值等參數(shù);而結構自適應網(wǎng)絡則將網(wǎng)絡結構當作學習目標之一,在訓練過程中找到最符合數(shù)據(jù)特點的網(wǎng)絡結構,也叫構造性(constructive)神經(jīng)網(wǎng)絡。ART網(wǎng)絡的隱層神經(jīng)元數(shù)目在訓練過程中不斷增長,所以也屬于結構自適應網(wǎng)絡。級聯(lián)相關網(wǎng)絡也是結構自適應網(wǎng)絡的代表。
級聯(lián)相關網(wǎng)絡有兩個主要成分:級聯(lián)和相關。級聯(lián)是指建立層次連接的層級結構,在開始訓練時,網(wǎng)絡只有輸入層和輸出層,處于最小拓撲結構,隨著訓練進行,新的隱層神經(jīng)元加入,從而創(chuàng)建起層級結構,當新的隱層神經(jīng)元加入時,其輸入端連接權值是凍結固定的。相關是指通過最大化新神經(jīng)元的輸出與網(wǎng)絡誤差之間的相關性(correlation)來訓練相關參數(shù)。與一般的前饋神經(jīng)網(wǎng)絡相比,級聯(lián)相關網(wǎng)絡無需設置網(wǎng)絡層數(shù)、隱層神經(jīng)元數(shù)目,且訓練速度較快,但在數(shù)據(jù)較小時易陷入過擬合。
結構自適應網(wǎng)絡的動態(tài)性一般是在訓練過程中隱層數(shù)目及其神經(jīng)元數(shù)目的變化體現(xiàn)。上文的神經(jīng)網(wǎng)路類型,從固定網(wǎng)絡到動態(tài)網(wǎng)絡,都是無環(huán),下文的網(wǎng)絡則允許出現(xiàn)環(huán)形結構。
5)Elman網(wǎng)絡
與前饋神經(jīng)網(wǎng)絡不同,遞歸神經(jīng)網(wǎng)絡(recurrent neural networks)允許網(wǎng)絡中出現(xiàn)環(huán)形結構,從而可讓一些神經(jīng)元的輸出反饋回來作為輸入信號。這樣的結構與信息反饋過程,使得網(wǎng)絡在t時刻的輸出狀態(tài)不僅與t時刻的輸入有關,還與t-1時刻的網(wǎng)絡狀態(tài)有關,從而能處理與時間有關的動態(tài)變化。
Elman網(wǎng)絡是遞歸神經(jīng)網(wǎng)絡的代表,結構與多層前饋網(wǎng)絡相似,不同的是隱層神經(jīng)元的輸出被反饋回來,與下一時刻輸入層神經(jīng)元提供的信號一起,作為隱層神經(jīng)元在下一時刻的輸入。隱層神經(jīng)元通常采用sigmoid激活函數(shù),而網(wǎng)絡的訓練則通過推廣的BP算法進行。
6)Boltzmann機
神經(jīng)網(wǎng)絡中有一類模型是為網(wǎng)絡狀態(tài)定義一個能量(energy),能量最小化時網(wǎng)絡達到理想狀態(tài),而網(wǎng)絡的訓練就是在最小化這個能量函數(shù)。
Boltzmann機就是一種基于能量的模型(energy-based model),其神經(jīng)元分顯層和隱層,顯層用于表示數(shù)據(jù)的輸入與輸出,隱層則被理解為數(shù)據(jù)的內(nèi)在表達。Boltzmann機中的神經(jīng)元都是布爾型,只取0、1兩種狀態(tài),1表示激活,0表示抑制。?
5.6深度學習
參數(shù)越多的模型復雜度越高,容量越大,能勝任更復雜任務的學習;但一般情形下,復雜模型的訓練效果低,易陷入過擬合,隨著云計算、大數(shù)據(jù)時代的來臨,計算能力的大幅提高可緩解訓練低效性,訓練數(shù)據(jù)的大幅增加可降低過擬合風險,如之,代表復雜模型的深度學習得以發(fā)展。一句話,因為計算能力和數(shù)據(jù)容量的提升,導致深度學習可以建構復雜模型來解決現(xiàn)實任務中較為復雜的問題,存有上百億個參數(shù)的深度學習模型。
深層的神經(jīng)網(wǎng)絡模型就是典型的深度學習模型。對于神經(jīng)網(wǎng)絡模型,提高復雜度,可以增加隱層數(shù)目,從而增加神經(jīng)元連接權、閾值等參數(shù);也可通過增加隱層神經(jīng)元數(shù)目來實現(xiàn)。不過增加隱層的數(shù)目比增加隱層神經(jīng)元數(shù)目更有效,因為增加隱層數(shù)不僅增加了擁有激活函數(shù)的神經(jīng)元數(shù)目,還增加了激活函數(shù)的嵌套層數(shù)。然而,多隱層(指三個以上,深度學習模型通常有八九層甚至更多)神經(jīng)網(wǎng)絡難以直接用經(jīng)典算法(如標準BP算法)進行訓練,因為誤差在多隱層內(nèi)逆?zhèn)鞑r,往往會發(fā)散而不能收斂到穩(wěn)定狀態(tài)。
無監(jiān)督逐層訓練(unsupervised layer-wise training)是多隱層網(wǎng)路訓練的有效手段,其基本思想是每次訓練一層隱結點,訓練時將上一層隱結點的輸出作為輸入,而本層隱結點的輸出作為下一層隱結點的輸入,稱為預訓練,在預訓練全部完成后,再對整個網(wǎng)絡進行微調(diào)(fine-tuning)訓練。預訓練+微調(diào)的做法可視為將大量參數(shù)分組,對每組先找到局部最優(yōu),然后基于局部最優(yōu)結果聯(lián)合起來進行全局尋優(yōu),利用了模型大量參數(shù)所提供的自由度的同時,節(jié)省了訓練開銷。
權共享(weightsharing),讓一組神經(jīng)元使用相同的連接權,也是一種節(jié)省訓練開銷的策略。這個策略在卷積神經(jīng)網(wǎng)絡中發(fā)揮了重要作用。文中提到的卷積神經(jīng)網(wǎng)絡用于手寫數(shù)字識別案例,有興趣可進一步深入研究學習。
深度學習的訓練過程,多隱層堆疊、每層對上一層的輸出進行處理的機制,可以看作是在對輸入信號進行逐層加工,從而把初始的、與輸出目標之間聯(lián)系不太密切的輸入表示,轉(zhuǎn)化為成與輸出目標聯(lián)系更為密切的表示,使得原來僅基于最后一層的輸出映射難以完成的任務稱為可能。這大體也是分治策略的思想,換言之,逐漸將初始的低層特征表示轉(zhuǎn)化為高層特征表示后,用簡單模型即可完成復雜的分類等學習任務。由此,可將深度學習理解為進行特征學習或表示學習。
以往在機器學習用于現(xiàn)實任務時,描述樣本的特征通常需由人類專家來設計,這稱為特征工程(feature engineering)。特征的好壞對泛化性能有至關重要的影響,人類專家設計出好特征也并非易事;特征學習則通過機器學習技術自身來產(chǎn)生好特征,這使機器學習向全自動數(shù)據(jù)分析又前進了一步。
這段話,我的理解是,以前輸入的特征是人來提供,現(xiàn)在連輸入的特征都是機器學習而來,尤其是好的特征通過機器自動學習而來更難能可貴。換句話說,人不需要任何介入,機器自己學習數(shù)據(jù),自己訓練。未來人工智能是這個方向的,一切都是自學習而來,而要支持這種自學習的模型,其復雜度可想而知,神經(jīng)網(wǎng)絡是否能滿足,尚未可知。
總結
以上是生活随笔為你收集整理的机器学习笔记(五)神经网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习知识点(八)感知机模型Java实
- 下一篇: 机器学习知识点(九)BP神经网络Java