<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【機(jī)器學(xué)習(xí)】神經(jīng)網(wǎng)絡(luò)淺講:從神經(jīng)元到深度學(xué)習(xí)

          共 4675字,需瀏覽 10分鐘

           ·

          2021-04-11 21:49


          來源:深度學(xué)習(xí)初學(xué)者

          本文約4500字,建議閱讀5分鐘

          本文以一種簡單的,循序的方式講解神經(jīng)網(wǎng)絡(luò)。


          適合對神經(jīng)網(wǎng)絡(luò)了解不多的同學(xué),深入淺出的講解了神經(jīng)網(wǎng)絡(luò)的核心思想,是一篇入門深度學(xué)習(xí)的好文。本文節(jié)選自“神經(jīng)網(wǎng)絡(luò)淺講”。

          兩層神經(jīng)網(wǎng)絡(luò)(多層傳感器)

          引子

          兩層神經(jīng)網(wǎng)絡(luò)是本文的重點(diǎn),因?yàn)檎窃谶@時候,神經(jīng)網(wǎng)絡(luò)開始了大范圍的推廣與使用。

          Minsky說過單層神經(jīng)網(wǎng)絡(luò)無法解決異或問題。但是當(dāng)增加一個計(jì)算層以后,兩層神經(jīng)網(wǎng)絡(luò)不僅可以解決異或問題,而且具有非常好的非線性分類效果。不過兩層神經(jīng)網(wǎng)絡(luò)的計(jì)算是一個問題,沒有一個較好的解法。

          1986年,Rumelhar和Hinton等人提出了反向傳播(Backpropagation,BP)算法,解決了兩層神經(jīng)網(wǎng)絡(luò)所需要的復(fù)雜計(jì)算量問題,從而帶動了業(yè)界使用兩層神經(jīng)網(wǎng)絡(luò)研究的熱潮。目前,大量的教授神經(jīng)網(wǎng)絡(luò)的教材,都是重點(diǎn)介紹兩層(帶一個隱藏層)神經(jīng)網(wǎng)絡(luò)的內(nèi)容。 

          這時候的Hinton還很年輕,30年以后,正是他重新定義了神經(jīng)網(wǎng)絡(luò),帶來了神經(jīng)網(wǎng)絡(luò)復(fù)蘇的又一春。

          圖19 David Rumelhart(左)以及 Geoffery Hinton(右)


          結(jié)構(gòu)

          兩層神經(jīng)網(wǎng)絡(luò)除了包含一個輸入層,一個輸出層以外,還增加了一個中間層。此時,中間層和輸出層都是計(jì)算層。我們擴(kuò)展上節(jié)的單層神經(jīng)網(wǎng)絡(luò),在右邊新加一個層次(只含有一個節(jié)點(diǎn))。


          現(xiàn)在,我們的權(quán)值矩陣增加到了兩個,我們用上標(biāo)來區(qū)分不同層次之間的變量。例如ax(y)代表第y層的第x個節(jié)點(diǎn)。z1,z2變成了a1(2),a2(2)。下圖給出了a1(2),a2(2)的計(jì)算公式。

          圖20 兩層神經(jīng)網(wǎng)絡(luò)(中間層計(jì)算)


          計(jì)算最終輸出z的方式是利用了中間層的a1(2),a2(2)和第二個權(quán)值矩陣計(jì)算得到的,如下圖。

          圖21 兩層神經(jīng)網(wǎng)絡(luò)(輸出層計(jì)算)


          假設(shè)我們的預(yù)測目標(biāo)是一個向量,那么與前面類似,只需要在“輸出層”再增加節(jié)點(diǎn)即可。


          我們使用向量和矩陣來表示層次中的變量。a(1)a(2),z是網(wǎng)絡(luò)中傳輸?shù)南蛄繑?shù)據(jù)。W(1)W(2)是網(wǎng)絡(luò)的矩陣參數(shù)。如下圖。


          圖22 兩層神經(jīng)網(wǎng)絡(luò)(向量形式)


          使用矩陣運(yùn)算來表達(dá)整個計(jì)算公式的話如下:

          g(W(1) * a(1)) = a(2)

          g(W(2) * a(2)) = z;

          由此可見,使用矩陣運(yùn)算來表達(dá)是很簡潔的,而且也不會受到節(jié)點(diǎn)數(shù)增多的影響(無論有多少節(jié)點(diǎn)參與運(yùn)算,乘法兩端都只有一個變量)。因此神經(jīng)網(wǎng)絡(luò)的教程中大量使用矩陣運(yùn)算來描述。

          需要說明的是,至今為止,我們對神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)圖的討論中都沒有提到偏置節(jié)點(diǎn)(bias unit)。事實(shí)上,這些節(jié)點(diǎn)是默認(rèn)存在的。它本質(zhì)上是一個只含有存儲功能,且存儲值永遠(yuǎn)為1的單元。在神經(jīng)網(wǎng)絡(luò)的每個層次中,除了輸出層以外,都會含有這樣一個偏置單元。正如線性回歸模型與邏輯回歸模型中的一樣。

          偏置單元與后一層的所有節(jié)點(diǎn)都有連接,我們設(shè)這些參數(shù)值為向量b,稱之為偏置。如下圖。

          圖23 兩層神經(jīng)網(wǎng)絡(luò)(考慮偏置節(jié)點(diǎn))

          可以看出,偏置節(jié)點(diǎn)很好認(rèn),因?yàn)槠錄]有輸入(前一層中沒有箭頭指向它)。有些神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)圖中會把偏置節(jié)點(diǎn)明顯畫出來,有些不會。一般情況下,我們都不會明確畫出偏置節(jié)點(diǎn)。 

          在考慮了偏置以后的一個神經(jīng)網(wǎng)絡(luò)的矩陣運(yùn)算如下:

          g(W(1) * a(1) b(1)) = a(2)

          g(W(2) * a(2) b(2)) = z;



          需要說明的是,在兩層神經(jīng)網(wǎng)絡(luò)中,我們不再使用sgn函數(shù)作為函數(shù)g,而是使用平滑函數(shù)sigmoid作為函數(shù)g。我們把函數(shù)g也稱作激活函數(shù)(active function)。

          事實(shí)上,神經(jīng)網(wǎng)絡(luò)的本質(zhì)就是通過參數(shù)與激活函數(shù)來擬合特征與目標(biāo)之間的真實(shí)函數(shù)關(guān)系。初學(xué)者可能認(rèn)為畫神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)圖是為了在程序中實(shí)現(xiàn)這些圓圈與線,但在一個神經(jīng)網(wǎng)絡(luò)的程序中,既沒有“線”這個對象,也沒有“單元”這個對象。實(shí)現(xiàn)一個神經(jīng)網(wǎng)絡(luò)最需要的是線性代數(shù)庫。

          效果

          與單層神經(jīng)網(wǎng)絡(luò)不同。理論證明,兩層神經(jīng)網(wǎng)絡(luò)可以無限逼近任意連續(xù)函數(shù)。這是什么意思呢?也就是說,面對復(fù)雜的非線性分類任務(wù),兩層(帶一個隱藏層)神經(jīng)網(wǎng)絡(luò)可以分類的很好。

          下面就是一個例子(此兩圖來自colah的博客),紅色的線與藍(lán)色的線代表數(shù)據(jù)。而紅色區(qū)域和藍(lán)色區(qū)域代表由神經(jīng)網(wǎng)絡(luò)劃開的區(qū)域,兩者的分界線就是決策分界。

          圖24 兩層神經(jīng)網(wǎng)絡(luò)(決策分界)

          可以看到,這個兩層神經(jīng)網(wǎng)絡(luò)的決策分界是非常平滑的曲線,而且分類的很好。有趣的是,前面已經(jīng)學(xué)到過,單層網(wǎng)絡(luò)只能做線性分類任務(wù)。而兩層神經(jīng)網(wǎng)絡(luò)中的后一層也是線性分類層,應(yīng)該只能做線性分類任務(wù)。為什么兩個線性分類任務(wù)結(jié)合就可以做非線性分類任務(wù)?

          我們可以把輸出層的決策分界單獨(dú)拿出來看一下。就是下圖。

          圖25 兩層神經(jīng)網(wǎng)絡(luò)(空間變換)

          可以看到,輸出層的決策分界仍然是直線。關(guān)鍵就是,從輸入層到隱藏層時,數(shù)據(jù)發(fā)生了空間變換。也就是說,兩層神經(jīng)網(wǎng)絡(luò)中,隱藏層對原始的數(shù)據(jù)進(jìn)行了一個空間變換,使其可以被線性分類,然后輸出層的決策分界劃出了一個線性分類分界線,對其進(jìn)行分類。

          這樣就導(dǎo)出了兩層神經(jīng)網(wǎng)絡(luò)可以做非線性分類的關(guān)鍵--隱藏層。聯(lián)想到我們一開始推導(dǎo)出的矩陣公式,我們知道,矩陣和向量相乘,本質(zhì)上就是對向量的坐標(biāo)空間進(jìn)行一個變換。因此,隱藏層的參數(shù)矩陣的作用就是使得數(shù)據(jù)的原始坐標(biāo)空間從線性不可分,轉(zhuǎn)換成了線性可分。

          兩層神經(jīng)網(wǎng)絡(luò)通過兩層的線性模型模擬了數(shù)據(jù)內(nèi)真實(shí)的非線性函數(shù)。因此,多層的神經(jīng)網(wǎng)絡(luò)的本質(zhì)就是復(fù)雜函數(shù)擬合。

          下面來討論一下隱藏層的節(jié)點(diǎn)數(shù)設(shè)計(jì)。在設(shè)計(jì)一個神經(jīng)網(wǎng)絡(luò)時,輸入層的節(jié)點(diǎn)數(shù)需要與特征的維度匹配,輸出層的節(jié)點(diǎn)數(shù)要與目標(biāo)的維度匹配。而中間層的節(jié)點(diǎn)數(shù),卻是由設(shè)計(jì)者指定的。因此,“自由”把握在設(shè)計(jì)者的手中。但是,節(jié)點(diǎn)數(shù)設(shè)置的多少,卻會影響到整個模型的效果。如何決定這個自由層的節(jié)點(diǎn)數(shù)呢?目前業(yè)界沒有完善的理論來指導(dǎo)這個決策。一般是根據(jù)經(jīng)驗(yàn)來設(shè)置。較好的方法就是預(yù)先設(shè)定幾個可選值,通過切換這幾個值來看整個模型的預(yù)測效果,選擇效果最好的值作為最終選擇。這種方法又叫做Grid Search(網(wǎng)格搜索)。

          了解了兩層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)以后,我們就可以看懂其它類似的結(jié)構(gòu)圖。例如EasyPR字符識別網(wǎng)絡(luò)架構(gòu)(下圖)。

          圖26 EasyPR字符識別網(wǎng)絡(luò)

          EasyPR使用了字符的圖像去進(jìn)行字符文字的識別。輸入是120維的向量。輸出是要預(yù)測的文字類別,共有65類。根據(jù)實(shí)驗(yàn),我們測試了一些隱藏層數(shù)目,發(fā)現(xiàn)當(dāng)值為40時,整個網(wǎng)絡(luò)在測試集上的效果較好,因此選擇網(wǎng)絡(luò)的最終結(jié)構(gòu)就是120,40,65。

          訓(xùn)練

          下面簡單介紹一下兩層神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。

          在Rosenblat提出的感知器模型中,模型中的參數(shù)可以被訓(xùn)練,但是使用的方法較為簡單,并沒有使用目前機(jī)器學(xué)習(xí)中通用的方法,這導(dǎo)致其擴(kuò)展性與適用性非常有限。從兩層神經(jīng)網(wǎng)絡(luò)開始,神經(jīng)網(wǎng)絡(luò)的研究人員開始使用機(jī)器學(xué)習(xí)相關(guān)的技術(shù)進(jìn)行神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。例如用大量的數(shù)據(jù)(1000-10000左右),使用算法進(jìn)行優(yōu)化等等,從而使得模型訓(xùn)練可以獲得性能與數(shù)據(jù)利用上的雙重優(yōu)勢。

          機(jī)器學(xué)習(xí)模型訓(xùn)練的目的,就是使得參數(shù)盡可能的與真實(shí)的模型逼近。具體做法是這樣的。首先給所有參數(shù)賦上隨機(jī)值。我們使用這些隨機(jī)生成的參數(shù)值,來預(yù)測訓(xùn)練數(shù)據(jù)中的樣本。樣本的預(yù)測目標(biāo)為yp,真實(shí)目標(biāo)為y。那么,定義一個值loss,計(jì)算公式如下。

          loss = (y- y)2

          這個值稱之為損失(loss),我們的目標(biāo)就是使對所有訓(xùn)練數(shù)據(jù)的損失和盡可能的小。

          如果將先前的神經(jīng)網(wǎng)絡(luò)預(yù)測的矩陣公式帶入到y(tǒng)p中(因?yàn)橛衵=yp),那么我們可以把損失寫為關(guān)于參數(shù)(parameter)的函數(shù),這個函數(shù)稱之為損失函數(shù)(loss function)。下面的問題就是求:如何優(yōu)化參數(shù),能夠讓損失函數(shù)的值最小。

          此時這個問題就被轉(zhuǎn)化為一個優(yōu)化問題。一個常用方法就是高等數(shù)學(xué)中的求導(dǎo),但是這里的問題由于參數(shù)不止一個,求導(dǎo)后計(jì)算導(dǎo)數(shù)等于0的運(yùn)算量很大,所以一般來說解決這個優(yōu)化問題使用的是梯度下降算法。梯度下降算法每次計(jì)算參數(shù)在當(dāng)前的梯度,然后讓參數(shù)向著梯度的反方向前進(jìn)一段距離,不斷重復(fù),直到梯度接近零時截止。一般這個時候,所有的參數(shù)恰好達(dá)到使損失函數(shù)達(dá)到一個最低值的狀態(tài)。

          在神經(jīng)網(wǎng)絡(luò)模型中,由于結(jié)構(gòu)復(fù)雜,每次計(jì)算梯度的代價很大。因此還需要使用反向傳播算法。反向傳播算法是利用了神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)進(jìn)行的計(jì)算。不一次計(jì)算所有參數(shù)的梯度,而是從后往前。首先計(jì)算輸出層的梯度,然后是第二個參數(shù)矩陣的梯度,接著是中間層的梯度,再然后是第一個參數(shù)矩陣的梯度,最后是輸入層的梯度。計(jì)算結(jié)束以后,所要的兩個參數(shù)矩陣的梯度就都有了。

          反向傳播算法可以直觀的理解為下圖。梯度的計(jì)算從后往前,一層層反向傳播。前綴E代表著相對導(dǎo)數(shù)的意思。

          圖27 反向傳播算法

          反向傳播算法的啟示是數(shù)學(xué)中的鏈?zhǔn)椒▌t。在此需要說明的是,盡管早期神經(jīng)網(wǎng)絡(luò)的研究人員努力從生物學(xué)中得到啟發(fā),但從BP算法開始,研究者們更多地從數(shù)學(xué)上尋求問題的最優(yōu)解。不再盲目模擬人腦網(wǎng)絡(luò)是神經(jīng)網(wǎng)絡(luò)研究走向成熟的標(biāo)志。正如科學(xué)家們可以從鳥類的飛行中得到啟發(fā),但沒有必要一定要完全模擬鳥類的飛行方式,也能制造可以飛天的飛機(jī)。

          優(yōu)化問題只是訓(xùn)練中的一個部分。機(jī)器學(xué)習(xí)問題之所以稱為學(xué)習(xí)問題,而不是優(yōu)化問題,就是因?yàn)樗粌H要求數(shù)據(jù)在訓(xùn)練集上求得一個較小的誤差,在測試集上也要表現(xiàn)好。因?yàn)槟P妥罱K是要部署到?jīng)]有見過訓(xùn)練數(shù)據(jù)的真實(shí)場景。提升模型在測試集上的預(yù)測效果的主題叫做泛化(generalization),相關(guān)方法被稱作正則化(regularization)。神經(jīng)網(wǎng)絡(luò)中常用的泛化技術(shù)有權(quán)重衰減等。

          影響

          兩層神經(jīng)網(wǎng)絡(luò)在多個地方的應(yīng)用說明了其效用與價值。10年前困擾神經(jīng)網(wǎng)絡(luò)界的異或問題被輕松解決。神經(jīng)網(wǎng)絡(luò)在這個時候,已經(jīng)可以發(fā)力于語音識別,圖像識別,自動駕駛等多個領(lǐng)域。


          歷史總是驚人的相似,神經(jīng)網(wǎng)絡(luò)的學(xué)者們再次登上了《紐約時報(bào)》的專訪。人們認(rèn)為神經(jīng)網(wǎng)絡(luò)可以解決許多問題。就連娛樂界都開始受到了影響,當(dāng)年的《終結(jié)者》電影中的阿諾都趕時髦地說一句:我的CPU是一個神經(jīng)網(wǎng)絡(luò)處理器,一個會學(xué)習(xí)的計(jì)算機(jī)。

          但是神經(jīng)網(wǎng)絡(luò)仍然存在若干的問題:盡管使用了BP算法,一次神經(jīng)網(wǎng)絡(luò)的訓(xùn)練仍然耗時太久,而且困擾訓(xùn)練優(yōu)化的一個問題就是局部最優(yōu)解問題,這使得神經(jīng)網(wǎng)絡(luò)的優(yōu)化較為困難。同時,隱藏層的節(jié)點(diǎn)數(shù)需要調(diào)參,這使得使用不太方便,工程和研究人員對此多有抱怨。

          90年代中期,由Vapnik等人發(fā)明的SVM(Support Vector Machines,支持向量機(jī))算法誕生,很快就在若干個方面體現(xiàn)出了對比神經(jīng)網(wǎng)絡(luò)的優(yōu)勢:無需調(diào)參;高效;全局最優(yōu)解?;谝陨戏N種理由,SVM迅速打敗了神經(jīng)網(wǎng)絡(luò)算法成為主流。

          圖28 Vladimir Vapnik

          神經(jīng)網(wǎng)絡(luò)的研究再次陷入了冰河期。當(dāng)時,只要你的論文中包含神經(jīng)網(wǎng)絡(luò)相關(guān)的字眼,非常容易被會議和期刊拒收,研究界那時對神經(jīng)網(wǎng)絡(luò)的不待見可想而知。

          - END -

          編輯:王菁

          校對:汪雨晴

          瀏覽 57
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人人干人人摸人人插 | AV乱伦片| 狠狠干狠狠艹 | 北条麻妃加勒比黑人无码 | 欧美日本AA |