淺談人工神經(jīng)網(wǎng)絡(luò)與BP算法
原創(chuàng)【51CTO.com原創(chuàng)稿件】
1 導(dǎo)讀
如今,深度學(xué)習(xí)技術(shù),也叫機(jī)器學(xué)習(xí)技術(shù)日益火熱,運(yùn)用深度學(xué)習(xí)技術(shù)的領(lǐng)域也愈來(lái)愈廣泛,這些領(lǐng)域包括圖像識(shí)別、語(yǔ)音識(shí)別、自然語(yǔ)言處理以及游戲、機(jī)器人之類(lèi)的。并且隨著深度學(xué)習(xí)技術(shù)的完善與成熟,以后用到深度學(xué)習(xí)技術(shù)的方面還會(huì)更加廣泛。對(duì)于這一塊的學(xué)習(xí),不僅需要具備一定的軟件知識(shí),還得了解一些硬件的技術(shù)知識(shí)與理論方法。由于本人是電子信息專(zhuān)業(yè),在大學(xué)期間接觸了一過(guò)一些機(jī)器學(xué)習(xí)的知識(shí),并且在畢業(yè)后順利進(jìn)入一家世界500強(qiáng)的互聯(lián)網(wǎng)公司從事人工智能研發(fā)中心工作,接觸了有關(guān)深度學(xué)習(xí)技術(shù)的軟件平臺(tái)與開(kāi)發(fā)工具。因此,對(duì)于這一領(lǐng)域知識(shí)還是比較熟悉并且能掌握的。在這一篇文稿中,我會(huì)對(duì)深度學(xué)習(xí)這一方面進(jìn)行基本的闡述,并且在此基礎(chǔ)上進(jìn)行拓展,以至于在后面可以完成一個(gè)深度學(xué)習(xí)技術(shù)的平臺(tái)實(shí)踐。類(lèi)似之前文稿中所說(shuō)的推薦系統(tǒng)的實(shí)現(xiàn)一樣,深度學(xué)習(xí)技術(shù)完全可以作為推薦系統(tǒng)的“計(jì)算引擎”,來(lái)進(jìn)一步提高推薦效果。因此,學(xué)習(xí)深度學(xué)習(xí)技術(shù)知識(shí)對(duì)從事軟、硬件行業(yè)發(fā)展尤為重要。
2 深度學(xué)習(xí)技術(shù)現(xiàn)狀
在之前的從事人工智能研發(fā)工作中,雖然明白有關(guān)深度學(xué)習(xí)的技術(shù)的日益火熱程度,但是也深深感受到這一方面的不易,因?yàn)槟壳霸谶@一領(lǐng)域,我國(guó)仍舊沒(méi)有取得突破性的進(jìn)展,我們也稱(chēng)這一階段為人工智能或者機(jī)器學(xué)習(xí)的“瓶頸期”。對(duì)于人工智能領(lǐng)域的可解釋性、普及程度、無(wú)監(jiān)督學(xué)習(xí)等方面進(jìn)步并不明顯。盡管目前這一領(lǐng)域發(fā)展仍舊處在“瓶頸期”,也就所謂的“雷聲大,雨點(diǎn)小”的狀況,但對(duì)于這一領(lǐng)域的研究,任何一個(gè)國(guó)家都不應(yīng)該懈怠,只要渡過(guò)“瓶頸期”,那么人工智能這一領(lǐng)域?qū)?huì)實(shí)現(xiàn)質(zhì)的飛越,也就會(huì)沖出瓶口,一瀉千里。當(dāng)然,作為軟件開(kāi)發(fā)行業(yè)的我,也期待這一天的到來(lái),即使需要投入很多科研人員的心血與時(shí)間。
3 深度學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)
3.1 深度學(xué)習(xí)
深度學(xué)習(xí),也叫機(jī)器學(xué)習(xí),它是通過(guò)實(shí)現(xiàn)一個(gè)能夠進(jìn)行自我學(xué)習(xí)的智能機(jī)器來(lái)替代人類(lèi)完成一些復(fù)雜而繁瑣的工作,也叫人工智能。這個(gè)機(jī)器的學(xué)習(xí)模型也是仿照人的行為來(lái)模擬進(jìn)行,也就是在生活中,我們對(duì)于需要解決的新問(wèn)題,我們都會(huì)通過(guò)依靠自己的歷史行為經(jīng)驗(yàn)來(lái)對(duì)問(wèn)題進(jìn)行整理歸納,從而發(fā)現(xiàn)這類(lèi)問(wèn)題的規(guī)律,最后運(yùn)用這些規(guī)律來(lái)完成對(duì)未來(lái)的預(yù)測(cè)功能。同樣地,對(duì)于人工智能機(jī)器,它對(duì)于需要處理的新的數(shù)據(jù)(新的問(wèn)題),依靠的也是自己的“經(jīng)驗(yàn)”,即記錄的歷史數(shù)據(jù),來(lái)構(gòu)建模型(類(lèi)似人尋找規(guī)律),繼而通過(guò)模型(規(guī)律)來(lái)預(yù)測(cè)未知的屬性或問(wèn)題。這些過(guò)程完全就依賴機(jī)器本身的自我學(xué)習(xí)能力,模型遇到的新數(shù)據(jù)越多,歷史數(shù)據(jù)就越豐富,學(xué)習(xí)能力就越強(qiáng),也是一個(gè)良性的正反饋過(guò)程。如下圖所示:
3.2 神經(jīng)網(wǎng)絡(luò)
說(shuō)到深度學(xué)習(xí)類(lèi)似人的學(xué)習(xí),就不得不提到神經(jīng)網(wǎng)絡(luò)這個(gè)詞匯。我們都知道,人的學(xué)習(xí)能力主要依賴的是人的大腦,而大腦中用來(lái)傳輸信息的也就是神經(jīng)網(wǎng)絡(luò)了。所以在深度學(xué)習(xí)中,也是模仿運(yùn)用人腦的神經(jīng)網(wǎng)絡(luò)運(yùn)作機(jī)制,形成相對(duì)于的深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)。類(lèi)比人腦神經(jīng)網(wǎng)絡(luò)的神經(jīng)元,在深度學(xué)習(xí)中,神經(jīng)網(wǎng)絡(luò)模型的構(gòu)建也是依賴各個(gè)“神經(jīng)元”。如下圖所示就是一個(gè)模擬的“神經(jīng)元”:
在該“神經(jīng)元”中,輸入分別為X1、X2、X3和截距b為+1;輸出為函數(shù) ,為w為每個(gè)輸入量的權(quán)重,激活函數(shù)為f(x),所以 。在這一類(lèi)的“神經(jīng)元”中,常用的激活函數(shù)有sigmoid(邏輯回歸函數(shù))和tanh(雙曲正切函數(shù)),如下所示:
3.3 感知器
在神經(jīng)網(wǎng)絡(luò)中最簡(jiǎn)單的神經(jīng)單元也叫感知器,因?yàn)橹挥挟?dāng)激活函數(shù)的返回值為兩個(gè)固定值時(shí),就可以稱(chēng)此時(shí)的神經(jīng)網(wǎng)絡(luò)為感知器,返回值可能為以下兩種情況:
因此感知器的返回值只有兩種情況,也只能解決二類(lèi)線性可分的問(wèn)題,適用于模式分類(lèi)的應(yīng)用場(chǎng)景。
3.4 線性神經(jīng)網(wǎng)絡(luò)
除了最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)——感知器以外,線性神經(jīng)網(wǎng)絡(luò)也是一種簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò),它可以包含多個(gè)神經(jīng)元。對(duì)應(yīng)的激活函數(shù)是一個(gè)線性函數(shù),并且可以返回多個(gè)值。最常用的激活函數(shù)就是上面兩個(gè)函數(shù):sigmoid函數(shù)和tanh函數(shù)。線性神經(jīng)網(wǎng)絡(luò)也只適合運(yùn)用于線性可分類(lèi)的問(wèn)題,但是運(yùn)用的分類(lèi)效果要比感知器好,并且可以進(jìn)行多種條件分類(lèi),不受限于二元分類(lèi)情況。
3.5 淺層神經(jīng)網(wǎng)絡(luò)
在線性神經(jīng)網(wǎng)絡(luò)中添加少量的隱層就可以更進(jìn)一步,叫做淺層神經(jīng)網(wǎng)絡(luò),也叫作傳統(tǒng)神經(jīng)網(wǎng)絡(luò)。一般淺層神經(jīng)網(wǎng)絡(luò)只會(huì)有1到2個(gè)隱層。淺層神經(jīng)網(wǎng)絡(luò)如下圖所示:(layerL1為輸入層,layerL2為隱層)
3.6 深度神經(jīng)網(wǎng)絡(luò)
對(duì)應(yīng)淺層神經(jīng)網(wǎng)絡(luò)中的少量隱層,那么肯定就有對(duì)應(yīng)多量隱層的深度神經(jīng)網(wǎng)絡(luò)(DNN),對(duì)于深度神經(jīng)網(wǎng)絡(luò)也就是深度學(xué)習(xí)的基礎(chǔ),或者說(shuō)深度學(xué)習(xí)技術(shù)也就是基于深度神經(jīng)網(wǎng)絡(luò)而來(lái),是神經(jīng)網(wǎng)絡(luò)的一個(gè)發(fā)展。深度神經(jīng)網(wǎng)絡(luò)如下圖所示:
那么對(duì)于隱層來(lái)說(shuō),增加隱層得到的最終輸出效果會(huì)比線性神經(jīng)網(wǎng)絡(luò)要更準(zhǔn)確,更符合要求。但是,隱層越多,得到的效果就越好嗎?有個(gè)成語(yǔ)就可以說(shuō)明這一點(diǎn),那就是過(guò)猶不及。任何事物,一旦不加以控制,超出了它所容忍的限度的話,那可能就遠(yuǎn)遠(yuǎn)落后于之前的狀況了。隱層也是一樣,少量地增加隱層的確可以得到更好的輸出效果。但是不加限制的增加的話,那么對(duì)于最終的效果并不會(huì)產(chǎn)生太大的變化,無(wú)疑是畫(huà)蛇添足。這種情況也叫作神經(jīng)網(wǎng)絡(luò)的過(guò)擬合化。
4 一個(gè)問(wèn)題——過(guò)擬合化?
4.1 隱層越多越好?
從理論上講,一個(gè)神經(jīng)元可以將數(shù)據(jù)集進(jìn)行二分化,當(dāng)隱層的神經(jīng)元個(gè)數(shù)足夠多的話,有隱層的神經(jīng)網(wǎng)絡(luò)可以逼近任何連續(xù)函數(shù)。盡管在網(wǎng)絡(luò)工程效果中,多隱層的神經(jīng)網(wǎng)絡(luò)要比單隱層的神經(jīng)網(wǎng)絡(luò)的效果好,可對(duì)于一些分類(lèi)的數(shù)據(jù)集問(wèn)題來(lái)講,三層的神經(jīng)網(wǎng)絡(luò)效果也的確優(yōu)于兩層的神經(jīng)網(wǎng)絡(luò),可是將隱層層次不斷增加到5層以上,對(duì)于最終的效果也就不會(huì)產(chǎn)生太大的變化,而且還使得神經(jīng)網(wǎng)絡(luò)變得過(guò)于復(fù)雜。提升隱層的層數(shù),也就提升了神經(jīng)元的個(gè)數(shù),使得神經(jīng)網(wǎng)絡(luò)就更為復(fù)雜,即使這種網(wǎng)絡(luò)的處理能力和空間表達(dá)能力更強(qiáng),但是對(duì)于某些簡(jiǎn)單的數(shù)據(jù)集問(wèn)題,例如分類(lèi)問(wèn)題就顯得大材小用了,從而有可能導(dǎo)致過(guò)擬合的問(wèn)題。神經(jīng)網(wǎng)絡(luò)模型雖然在預(yù)測(cè)集上表現(xiàn)出一個(gè)較好的數(shù)據(jù)結(jié)果,而對(duì)于視頻/圖片識(shí)別等問(wèn)題,神經(jīng)網(wǎng)絡(luò)就不太適合,這也是神經(jīng)網(wǎng)絡(luò)模型的一個(gè)局限性。
4.2 過(guò)擬合問(wèn)題解決方案
那么對(duì)于神經(jīng)網(wǎng)絡(luò)過(guò)擬合問(wèn)題,該怎么去解決呢?目前解決神經(jīng)網(wǎng)絡(luò)過(guò)擬合的方法主要有以下三種:
(1)交叉驗(yàn)證:主要講數(shù)據(jù)集分為訓(xùn)練集、驗(yàn)證集和測(cè)試集三個(gè)部分。其中把訓(xùn)練集作為子集訓(xùn)練出神經(jīng)網(wǎng)絡(luò)模型,通過(guò)驗(yàn)證集對(duì)這個(gè)模型的預(yù)測(cè)效果進(jìn)行性能和指標(biāo)評(píng)估,符合預(yù)測(cè)效果后,才用最終的測(cè)試集作為輸入,得到最終預(yù)測(cè)效果;
(2)剪枝:就是對(duì)于每一次訓(xùn)練完子集的epoch結(jié)束后,將計(jì)算的指標(biāo)accuracy跟上一次的進(jìn)行比較,如果accuracy不再變化時(shí),那么就停止訓(xùn)練;
(3)正則化:就是在目標(biāo)函數(shù)上加上一個(gè)參數(shù) ,使目標(biāo)函數(shù)變成含有 參數(shù)的函數(shù),最后用參數(shù) 來(lái)懲罰那些權(quán)重很大的向量,其中參數(shù) 就叫正則系數(shù),過(guò)程就叫做正則化處理。因此當(dāng) =0時(shí),表示并沒(méi)有采用正則化處理來(lái)預(yù)防過(guò)擬合化。
5 反向傳播算法
目前對(duì)于激活函數(shù)已經(jīng)具備了,隱層也知道采取相應(yīng)的方法對(duì)過(guò)擬合化問(wèn)題進(jìn)行處理了,那么還有什么需要去計(jì)算的呢?我們知道看輸出效果好壞都是看數(shù)據(jù)有沒(méi)有符合預(yù)測(cè)數(shù)據(jù)得到的,那么其中就會(huì)有誤差出現(xiàn),所以就需要計(jì)算出預(yù)測(cè)的誤差,通過(guò)誤差來(lái)確定另外一個(gè)對(duì)于任何一個(gè)神經(jīng)網(wǎng)絡(luò),都不應(yīng)該忽略一個(gè)關(guān)鍵性的參數(shù),那就是權(quán)重W,這對(duì)于神經(jīng)網(wǎng)絡(luò)的處理尤為關(guān)鍵。并且對(duì)于每一層網(wǎng)絡(luò),對(duì)于與各層的輸出數(shù)據(jù)效果都可以知道每一層網(wǎng)絡(luò)所帶來(lái)的數(shù)據(jù)損失。因此對(duì)于數(shù)據(jù)損失和神經(jīng)網(wǎng)絡(luò)層的權(quán)重的求解,最常用的一種方法就是FP(正向傳播)和BP(反向傳播)算法了,通過(guò)正向傳播求損失,反向傳播來(lái)回傳誤差,根據(jù)誤差值來(lái)修改每一層網(wǎng)絡(luò)的權(quán)重,從而繼續(xù)迭代直到得到最小誤差,也就是最優(yōu)的效果。
當(dāng)知道誤差計(jì)算后,就要使誤差越來(lái)越小,這里就可以用先前提到的推薦算法里面的隨機(jī)梯度下降的方式來(lái)不斷調(diào)整權(quán)重W參數(shù),從而得到最小誤差值,此時(shí)得到的權(quán)重W也就是所要的權(quán)重參數(shù)。至于具體的BP(反向傳播)算法求解權(quán)重W的過(guò)程,我會(huì)在進(jìn)行Python深入之后,再繼續(xù)使用Python軟件來(lái)模擬演示這個(gè)過(guò)程,并且給出模擬的輸出效果散點(diǎn)圖。在這里就不進(jìn)行贅述了。
6.總結(jié)
在這一篇文稿中,主要介紹了深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)知識(shí),對(duì)于這一塊問(wèn)題,后續(xù)還有更深入的內(nèi)容,其中在神經(jīng)網(wǎng)絡(luò)這塊還有更為晦澀難懂的卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)。而這些內(nèi)容,我會(huì)放到下一篇文稿中進(jìn)行闡述,來(lái)一步步深入學(xué)習(xí)技術(shù)領(lǐng)域。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】