神经网络入门(一)
1簡(jiǎn)單模型 vs 復(fù)雜模型
對(duì)于一個(gè)嶄新的機(jī)器學(xué)習(xí)的任務(wù),在模型選取和特征向量獲取上通常我們會(huì)有兩種選擇方式:a. 簡(jiǎn)單模型 + 復(fù)雜特征項(xiàng);b. 復(fù)雜模型 + 簡(jiǎn)單特征項(xiàng)。這兩種方式各有各的優(yōu)缺點(diǎn):
1.1 簡(jiǎn)單模型
對(duì)于簡(jiǎn)單模型來說,其優(yōu)點(diǎn)是容易理解、可解釋性較強(qiáng),但是為了達(dá)到相對(duì)好的預(yù)測(cè)效果,我們通常會(huì)考慮對(duì)原始特征進(jìn)一步抽象,增加大量的特征項(xiàng)來彌補(bǔ)model在處理非線性問題上的缺陷:
假設(shè)我們現(xiàn)在有一個(gè)學(xué)習(xí)任務(wù),首先我們抽取出100個(gè)不相關(guān)的特征屬性,然后我們想要嘗試使用邏輯回歸(LR)模型,我們都知道LR是一種廣義的線性模型,為了提高LR對(duì)非線性問題的處理能力,我們要引入多項(xiàng)式特征,為了充分考慮特征關(guān)聯(lián),通常我們也會(huì)執(zhí)行特征之間交叉組合。若我們僅考慮2次項(xiàng),也就是只考慮特征兩兩組合( ,這樣我們也會(huì)得到接近5000個(gè)組合特征,若再考慮3次項(xiàng),4此項(xiàng)呢?結(jié)果可想而知…!而隨著初始特征n的增大,特征空間也會(huì)急劇膨脹。項(xiàng)數(shù)過多可能會(huì)帶來的問題:模型容易過擬合、在處理這些項(xiàng)時(shí)計(jì)算量過大。
1.2 復(fù)雜模型
對(duì)于神經(jīng)網(wǎng)絡(luò)這種復(fù)雜的模型,其缺點(diǎn)就是相對(duì)難理解、可解釋性不強(qiáng);優(yōu)點(diǎn)是這種模型一般不需要像LR那樣在特征獲取上下這么大的功夫,它可以通過隱層神經(jīng)元對(duì)特征不斷抽象,從而自動(dòng)發(fā)覺特征關(guān)聯(lián),進(jìn)而使得模型達(dá)到良好的表型。下文,我們著重討論一下,這一處處充滿神秘的模型。
2初識(shí)神經(jīng)網(wǎng)絡(luò)(前饋)
神經(jīng)網(wǎng)絡(luò)模型是參考生物神經(jīng)網(wǎng)絡(luò)處理問題的模式而建立的一種復(fù)雜網(wǎng)絡(luò)結(jié)構(gòu)。在神經(jīng)網(wǎng)絡(luò)中,神經(jīng)元又稱激活單元,每個(gè)激活單元都會(huì)采納大量的特征作為輸入,然后根據(jù)自身特點(diǎn)提供一個(gè)輸出,供下層神經(jīng)元使用。logistic神經(jīng)元的圖示如下:
其中,表示偏置項(xiàng),它通常作為模型(單元)的固有屬性而被添加到模型中,一般取值為1;是模型參數(shù),又稱為權(quán)重,起到放大或縮小輸入信息的作用;而logistics神經(jīng)元會(huì)將輸入信息進(jìn)行匯總并添加一個(gè)非線性變換,從而獲得神經(jīng)元輸出。神經(jīng)網(wǎng)絡(luò)就是由多個(gè)這樣的logistics神經(jīng)元按照不同層次組織起來的網(wǎng)絡(luò),每一層的輸出都作為下一層的輸入,如下圖:
這是一個(gè)包含一個(gè)隱層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。其中,Layer1為輸入層,Layer2為隱層,Layer3為輸出層。
2.1模型表示
下面我們用數(shù)學(xué)符號(hào)來描述上述的神經(jīng)網(wǎng)絡(luò)模型。首先我們進(jìn)行符號(hào)約定,如下:
故:
使用向量化的方式,可以表示成:
這也是前饋神經(jīng)網(wǎng)絡(luò)從輸入變量獲得輸出結(jié)果的數(shù)學(xué)表示。
2.2模型理解
為了更加清晰的認(rèn)識(shí)神經(jīng)網(wǎng)絡(luò),我們可以將上圖中的Layer1遮住,那么剩下的Layer2和Layer3就像是一個(gè)LR模型,其與真正LR的不同在于輸入向量的差異:普通LR的輸入向量是原始特征向量,而該模型的輸入是(經(jīng)過學(xué)習(xí)后得到的特征屬性)。
因此,對(duì)神經(jīng)網(wǎng)絡(luò)更直觀的理解就是,它通過大量的隱層網(wǎng)絡(luò)將輸入向量進(jìn)行一步步抽象(加權(quán)求和+非線性變換),生成能夠更加容易解釋模型的復(fù)雜新特征,最后將這些強(qiáng)大的新特征傳入輸出層獲得預(yù)測(cè)結(jié)果。就像,單層神經(jīng)元(無隱層)無法表示邏輯同或運(yùn)算,但是若加上一個(gè)隱層結(jié)構(gòu)就可以輕松表示出邏輯同或運(yùn)算!
????上面所說是二分類問題的假設(shè)模型,其實(shí)神經(jīng)網(wǎng)絡(luò)模型也非常擅長(zhǎng)處理多分類任務(wù)。與二分類不同的時(shí),多分類模型最后的輸出層將是一個(gè)K維的向量,K表示類別數(shù)。
3 神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)
有了上面的描述我想大家對(duì)前饋神經(jīng)網(wǎng)絡(luò)應(yīng)該已經(jīng)有了一個(gè)全面的認(rèn)識(shí),那么接下來進(jìn)入本文討論的重點(diǎn)內(nèi)容-神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過程。神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)同其他模型的學(xué)習(xí),首先我們要確定其損失函數(shù),然后對(duì)參數(shù)進(jìn)行估計(jì),最后確定模型用于預(yù)測(cè)。本文針對(duì)分類問題中的神經(jīng)網(wǎng)絡(luò)模型的學(xué)習(xí)過程進(jìn)行討論。
3.1 代價(jià)函數(shù)
在分類問題,我們知道使用交叉熵誤差函數(shù)而不是平方和誤差函數(shù),會(huì)使得訓(xùn)練速度更快,同時(shí)也提升了泛化能力。對(duì)于二元分類問題來說,神經(jīng)網(wǎng)絡(luò)可以使用單一的logistics神經(jīng)元作為輸出,同時(shí)也可以使用兩個(gè)softmax神經(jīng)元作為輸出。對(duì)于多分類問題,同樣有兩方面的思考:
下面我們將會(huì)介紹更加具有一般性的多分類的神經(jīng)網(wǎng)絡(luò)的損失函數(shù)。首先假設(shè)神經(jīng)網(wǎng)絡(luò)的輸出單元有K個(gè),而網(wǎng)絡(luò)的第k個(gè)神經(jīng)元的輸出我們用表示,同時(shí)其目標(biāo)用表示,基于兩種不同的考量角度,損失函數(shù)被給出:
3.1.1 類別之間有交集的多分類問題
對(duì)于此類問題,我們可以將多分類看成多個(gè)相互獨(dú)立的二元分類問題,每個(gè)輸出神經(jīng)元都有兩種取值(t=0,1),并且輸出神經(jīng)元之間相互獨(dú)立,故給定輸入向量時(shí),目標(biāo)向量的條件概率分布為:
取似然函數(shù)的負(fù)對(duì)數(shù),可以得到下面的誤差函數(shù):
3.1.2 類別之間互斥的多分類問題
對(duì)于該問題,我們通常用"1-of-K"的表示方式來表示類別,從而網(wǎng)絡(luò)的輸出可以表示為:,因此誤差函數(shù)為:
而網(wǎng)絡(luò)輸出的計(jì)算通常使用Softmax函數(shù):
這里 表示第i個(gè)樣本第k個(gè)輸出單元的輸出值,是一個(gè)概率值。對(duì)于正則化項(xiàng),我們依然采用l2正則項(xiàng),將所有參數(shù)(不包含bias項(xiàng)的參數(shù))的平方和相加,也就是不把i=0時(shí)的參數(shù)加進(jìn)入
3.2 反向傳播算法
絕大部分的訓(xùn)練算法都會(huì)涉及到用迭代的方式最小化誤差函數(shù)和一系列的權(quán)值更新操作。具體來說,一般的訓(xùn)練算法可以分為兩個(gè)階段:
反向傳播(bp)算法主要應(yīng)用第一階段,它能非常高效的計(jì)算這些導(dǎo)數(shù)。
3.2.1 誤差函數(shù)導(dǎo)數(shù)的計(jì)算
接下來我們將會(huì)學(xué)習(xí)到bp算法是如何計(jì)算誤差函數(shù)導(dǎo)數(shù)的。
首先為了使得推導(dǎo)過程更加直觀,我們將會(huì)使用一個(gè)簡(jiǎn)單的層次網(wǎng)絡(luò)結(jié)構(gòu)說明(這個(gè)層次網(wǎng)絡(luò)有兩層sigmoid隱層神經(jīng)元、誤差函數(shù)使用均方誤差函數(shù))。網(wǎng)絡(luò)結(jié)構(gòu)如圖:
? ???
像前面提到的我們做如下符號(hào)約定:
????????
首先考慮一個(gè)簡(jiǎn)單的線性模型,其中輸出是輸入變量的線性組合:
? ??? ????????????????(1)
給定一個(gè)特定的輸入模式n(x, t),則其誤差函數(shù)為:
?? ??????????????????(2)
則這個(gè)誤差函數(shù)關(guān)于參數(shù)的梯度為:
?? ??????????????????(3)
此時(shí)誤差函數(shù)的梯度可以表示為與鏈接的輸出端相關(guān)聯(lián)"誤差信號(hào)"和與鏈接輸入端相關(guān)聯(lián)的變量的乘積。(交叉熵誤差函數(shù)也有類似的結(jié)果!)
接下來計(jì)算神經(jīng)網(wǎng)絡(luò)中誤差函數(shù)關(guān)于參數(shù)的梯度。首先,因?yàn)檎`差函數(shù)中只有加權(quán)求和項(xiàng)與參數(shù),故可以通過鏈?zhǔn)角髮?dǎo)法則得到:
??? ?????????(4)
同上面線性函數(shù)的表示方式,我們通常引入新的符號(hào):
???? ????????????????????(5)
用其來表示與鏈接的輸出端相關(guān)聯(lián)"誤差信號(hào)",此時(shí)誤差函數(shù)關(guān)于參數(shù)的梯度可以寫成:
??? ?????????????(6)
這個(gè)式子告訴我們:要求的導(dǎo)數(shù) = 權(quán)值輸出端單元的誤差項(xiàng) * 權(quán)值輸入端單元的激活值。因?yàn)槊總€(gè)結(jié)點(diǎn)的激活值在前饋階段已經(jīng)得出,因此,為了計(jì)算導(dǎo)數(shù),我們只需要計(jì)算網(wǎng)絡(luò)中每個(gè)隱層結(jié)點(diǎn)和輸出結(jié)點(diǎn)的"誤差信息"即可,然后應(yīng)用(6)式得到導(dǎo)數(shù)值!
接下來帶來了一個(gè)問題,每個(gè)隱層結(jié)點(diǎn)和輸出結(jié)點(diǎn)的"誤差信息"怎么計(jì)算?對(duì)于輸出結(jié)點(diǎn)來說,第k個(gè)結(jié)點(diǎn)的誤差等于該結(jié)點(diǎn)的輸出值與目標(biāo)值之間的差:
?? ??輸出結(jié)點(diǎn)(線性激活函數(shù))誤差 : ????????(7)
為了計(jì)算隱層結(jié)點(diǎn)的誤差值,我們?cè)俅问褂面準(zhǔn)椒▌t:
? ?? ?隱層結(jié)點(diǎn)的誤差
?????? ??????????(8)
可見,l層第j個(gè)結(jié)點(diǎn)的誤差取決于當(dāng)前結(jié)點(diǎn)的激活值、l+1層結(jié)點(diǎn)的誤差、以及l(fā)+1層結(jié)點(diǎn)于當(dāng)前結(jié)點(diǎn)的鏈接權(quán)值。這種從輸出到輸入推導(dǎo)誤差的方式叫做誤差的反向傳播。
公式說明: (8)式中的求和項(xiàng)是對(duì)所有與j單元有權(quán)值鏈接的上層單元進(jìn)行求和。(8)式遵循了一個(gè)事實(shí),l層第j個(gè)結(jié)點(diǎn)通過第l+1層所有與其關(guān)聯(lián)的結(jié)點(diǎn)間接對(duì)誤差函數(shù)產(chǎn)生影響!(以下是PRML中的圖,可以幫助理解)
3.2.2 反向傳播算法描述
首先,通過正向傳播,找到所有隱層神經(jīng)元和輸出單元的激活;
使用(7)式得到所有輸出單元的誤差;
然后,利用誤差的反向傳播公式(8),獲得網(wǎng)絡(luò)中所有隱層神經(jīng)元的誤差;
最后,使用公式(6)計(jì)算得到誤差函數(shù)相對(duì)于所有權(quán)值的導(dǎo)數(shù)。
注意:上述得到的導(dǎo)數(shù)只是對(duì)于單個(gè)樣本而言的,因?yàn)殚_始時(shí)我們?cè)O(shè)定了訓(xùn)練樣本只有一個(gè)(x,t),若使用多個(gè)訓(xùn)練樣本,可以通過加和的形式求的導(dǎo)數(shù):
而有了梯度,我們接下來就可以使用梯度下降(SGD)更新權(quán)值參數(shù)了。
3.3 實(shí)用技巧
通過上面的講述我們應(yīng)該明白了神經(jīng)網(wǎng)絡(luò)中權(quán)值參數(shù)是如何更新的。下面我們將介紹一些在應(yīng)用的實(shí)用技巧:
3.3.1 梯度檢驗(yàn)
當(dāng)我們對(duì)神經(jīng)網(wǎng)絡(luò)使用梯度下降時(shí),使用bp計(jì)算的導(dǎo)數(shù)通常不知道是否正確,進(jìn)而不能保證最終的結(jié)果是否將會(huì)是最優(yōu)解。為了解決這個(gè)問題,通常對(duì)一些測(cè)試樣例執(zhí)行梯度檢驗(yàn)操作,確保對(duì)于檢驗(yàn)的樣例通過數(shù)值計(jì)算的導(dǎo)數(shù)與通過bp得到的導(dǎo)數(shù)有著相近的結(jié)果(最多可以差幾位小數(shù)),導(dǎo)數(shù)的數(shù)值計(jì)算如下:
????????
注意:若反向傳播計(jì)算導(dǎo)數(shù)的開銷為O(W),那么數(shù)值方法計(jì)算導(dǎo)數(shù)的時(shí)間復(fù)雜度為O(W^2)。故我們可以看出,數(shù)值方法計(jì)算導(dǎo)數(shù)時(shí)間復(fù)雜度比bp算法要高的多,所以當(dāng)我們已經(jīng)確認(rèn)了反向傳播算法正確執(zhí)行時(shí),在執(zhí)行優(yōu)化算法之前必須關(guān)掉梯度驗(yàn)證過程,否則訓(xùn)練過程將會(huì)非常緩慢!
3.3.2 隨機(jī)初始化
首先要明確像LR那樣將所有權(quán)值參數(shù)都初始化為0的操作在神經(jīng)網(wǎng)絡(luò)中是行不通的!若在神經(jīng)網(wǎng)路中將所有權(quán)值都置為0或其它相同的值,這樣我們第二層神經(jīng)元所有激活單元都會(huì)有相同的值,這代表了計(jì)算神經(jīng)元的高度冗余,這將導(dǎo)致神經(jīng)網(wǎng)路功能的單一!從而訓(xùn)練不出有效解決問題的神經(jīng)網(wǎng)絡(luò)模型。為了避免這種問題的出現(xiàn),通常采用隨機(jī)初始化的思想,將所有的參數(shù)都初始化為 之間的值。
3.4 對(duì)神經(jīng)網(wǎng)絡(luò)的幾點(diǎn)思考
神經(jīng)網(wǎng)絡(luò)和感知器的區(qū)別:神經(jīng)網(wǎng)絡(luò)的隱層神經(jīng)元使用的是連續(xù)的Sigmoid非線性函數(shù),而感知器使用階梯函數(shù)這一非線性函數(shù)。這意味著神經(jīng)網(wǎng)絡(luò)函數(shù)對(duì)網(wǎng)絡(luò)參數(shù)來說是可微的,這一性質(zhì)在神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中起這重要的作用。
隱藏層的激活函數(shù)不可以取線性函數(shù)的原因:如果所有隱藏層神經(jīng)元的激活函數(shù)都取線性函數(shù)的話,那么我們將總能找到一個(gè)沒有隱藏層的網(wǎng)絡(luò)與之等價(jià)。這是因?yàn)?#xff0c;多個(gè)線性變換的組合,也是一個(gè)線性變換(多個(gè)線性變換的組合可以用一個(gè)線性變換代替)。此時(shí),如果隱藏層神經(jīng)元的數(shù)量少于輸入或輸出神經(jīng)元的數(shù)量,那么這個(gè)網(wǎng)絡(luò)所產(chǎn)生的變換就不是一般意義上的從輸入到輸出的線性變換,這是因?yàn)殡[含單元出現(xiàn)的維度降低造成了信息丟失。
實(shí)際應(yīng)用中的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu):輸入層單元數(shù) = 特征的維度;輸出層單元數(shù) = 類別個(gè)數(shù); 隱層單元數(shù)理論上是越多越好,但是單元數(shù)越多意味著計(jì)算量越大,故其取值一般稍大于傳入特征數(shù)或者幾倍關(guān)系也可以。基于隱藏層的數(shù)目,一般默認(rèn)使用1個(gè)隱層的神經(jīng)網(wǎng)絡(luò),也可以使用多個(gè)隱層的神經(jīng)網(wǎng)絡(luò),若為多層神經(jīng)網(wǎng)路一般默認(rèn)所有隱層具有相同的單元數(shù)。
神經(jīng)網(wǎng)絡(luò)中的參數(shù)更新:一般使用隨機(jī)梯度下降法(SGD),而非批量梯度下降,原因是:1. SGD可以更加高效的處理數(shù)據(jù)中的冗余性(假設(shè)我們將數(shù)據(jù)集中所有樣本都復(fù)制一次,這樣包含了一半的冗余信息,使用PGD的計(jì)算量也會(huì)增大一倍,而SGD不受影響);2. 有機(jī)會(huì)跳出局部最小值到達(dá)全局最小值(因?yàn)檎麄€(gè)數(shù)據(jù)集的關(guān)于誤差函數(shù)的駐點(diǎn)通常不會(huì)是每個(gè)數(shù)據(jù)點(diǎn)各自的駐點(diǎn))
分類: 機(jī)器學(xué)習(xí)篇 <div id="blog_post_info"> 好文要頂 關(guān)注我 收藏該文 ML小菜鳥關(guān)注 - 4
粉絲 - 128 +加關(guān)注 2 0 <div class="clear"></div> <div id="post_next_prev"><a href="https://www.cnblogs.com/lianyingteng/p/7821256.html" class="p_n_p_prefix">? </a> 上一篇: <a href="https://www.cnblogs.com/lianyingteng/p/7821256.html" title="發(fā)布于 2017-11-13 14:21">ML - 特征選擇</a> <br> <a href="https://www.cnblogs.com/lianyingteng/p/7988779.html" class="p_n_p_prefix">? </a> 下一篇: <a href="https://www.cnblogs.com/lianyingteng/p/7988779.html" title="發(fā)布于 2017-12-05 18:48">K-means 算法</a>
總結(jié)
- 上一篇: 高压直流电源为什么要“接地”?如何“接地
- 下一篇: 当小米MIX 2遇到iPhone X 你