這是我看過(guò),最好懂的神經(jīng)網(wǎng)絡(luò) // 白話機(jī)器學(xué)習(xí)算法

猜一猜,下圖中是什么動(dòng)物?

圖1 看圖猜動(dòng)物

盡管圖中的動(dòng)物胖得出奇,你也應(yīng)該能夠猜到它是一只長(zhǎng)頸鹿。

人類的大腦擁有強(qiáng)大的辨識(shí)能力,它是一個(gè)由差不多800 億個(gè)神經(jīng)元組成的復(fù)雜網(wǎng)絡(luò)。即使某物并非我們熟知的模樣,我們也能夠輕松地識(shí)別。大腦神經(jīng)元彼此協(xié)同工作,它們把輸入信號(hào)(比如長(zhǎng)頸鹿的圖片)轉(zhuǎn)換成相應(yīng)的輸出標(biāo)簽(比如“長(zhǎng)頸鹿”)。

神經(jīng)網(wǎng)絡(luò)技術(shù)的誕生正是受到人腦神經(jīng)元的啟發(fā)。

神經(jīng)網(wǎng)絡(luò)是自動(dòng)圖像識(shí)別的基礎(chǔ),由神經(jīng)網(wǎng)絡(luò)衍生出的一些技術(shù)在執(zhí)行速度和準(zhǔn)確度上都超過(guò)了人類。近年來(lái),神經(jīng)網(wǎng)絡(luò)技術(shù)大熱,這其中主要有3 個(gè)原因。

1. 數(shù)據(jù)存儲(chǔ)和共享技術(shù)取得進(jìn)步:這為訓(xùn)練神經(jīng)網(wǎng)絡(luò)提供了海量數(shù)據(jù),有助于改善神經(jīng)網(wǎng)絡(luò)的性能。

2. 計(jì)算能力越來(lái)越強(qiáng)大:GPU(graphics processing unit,圖形處理器)的運(yùn)行速度最快能達(dá)到CPU(central processing unit,中央處理器)的150 倍。之前,GPU 主要用來(lái)在游戲中顯示高品質(zhì)圖像。后來(lái),人們發(fā)現(xiàn)它能為在大數(shù)據(jù)集上訓(xùn)練神經(jīng)網(wǎng)絡(luò)提供強(qiáng)大的支持。

3. 算法獲得改進(jìn):雖然目前神經(jīng)網(wǎng)絡(luò)在性能上還很難與人腦媲美,但是已有一些能大幅改善其性能的技術(shù)。本文會(huì)介紹其中一些技術(shù)。

自動(dòng)圖像識(shí)別是神經(jīng)網(wǎng)絡(luò)技術(shù)的有力例證,它被應(yīng)用于許多領(lǐng)域,包括視覺(jué)監(jiān)控和汽車自主導(dǎo)航,甚至還出現(xiàn)在智能手機(jī)中,用來(lái)識(shí)別手寫體。下面來(lái)看看如何訓(xùn)練能識(shí)別手寫體的神經(jīng)網(wǎng)絡(luò)。

本示例使用的手寫數(shù)字來(lái)自于MNIST(Mixed National Institute of Standards and Technology)數(shù)據(jù)庫(kù),如下圖所示。

圖2 MNIST 數(shù)據(jù)庫(kù)中的手寫數(shù)字

為了讓計(jì)算機(jī)讀取圖像,必須先把圖像轉(zhuǎn)換成像素。黑色像素用0 表示,白色像素用1 表示,如圖3 所示。如果圖像是彩色的,則可以使用三原色的色相值來(lái)表示。

圖3 把一幅圖像轉(zhuǎn)換為像素

一旦圖像完成像素化,就可以把得到的值交給神經(jīng)網(wǎng)絡(luò)。在本例中,神經(jīng)網(wǎng)絡(luò)總共得到10 000 個(gè)手寫數(shù)字以及它們實(shí)際所表示的數(shù)字。在神經(jīng)網(wǎng)絡(luò)學(xué)過(guò)手寫數(shù)字及其對(duì)應(yīng)標(biāo)簽的聯(lián)系之后,我們拿1000 個(gè)新的手寫數(shù)字(不帶標(biāo)簽)來(lái)測(cè)試它,看看它是否能夠全部識(shí)別出來(lái)。

測(cè)試發(fā)現(xiàn),神經(jīng)網(wǎng)絡(luò)從1000 個(gè)新的手寫數(shù)字中正確識(shí)別出了922個(gè),即正確率達(dá)到了92.2%。圖4 是一張列聯(lián)表,可以用它來(lái)檢查神經(jīng)網(wǎng)絡(luò)的識(shí)別情況。

圖4 列聯(lián)表總結(jié)了神經(jīng)網(wǎng)絡(luò)的表現(xiàn):第一行指出,共有85 個(gè)“0”,神經(jīng)網(wǎng)絡(luò)正確識(shí)別出84 個(gè),最后一個(gè)“0”被錯(cuò)誤地識(shí)別為“6”。最后一列是識(shí)別準(zhǔn)確率

從圖4 可以看到,“0”和“1”的手寫圖像幾乎全部被正確識(shí)別出來(lái)了,而“5”的手寫圖像最難識(shí)別。接下來(lái)詳細(xì)看看那些被識(shí)別錯(cuò)的數(shù)字。

“2”被錯(cuò)誤識(shí)別成“7”或“8”的情況大約占8%。雖然人能夠輕松識(shí)別出圖5 中的數(shù)字,神經(jīng)網(wǎng)絡(luò)卻可能被某些特征難住,比如“2”的小尾巴。有趣的是,神經(jīng)網(wǎng)絡(luò)對(duì)“3”和“5”也比較困惑(如圖6 所示),識(shí)別錯(cuò)誤的情況約占10%。

圖5 錯(cuò)誤識(shí)別“2”


圖6 錯(cuò)誤識(shí)別“3”和“5” 

盡管出現(xiàn)了這些錯(cuò)誤,但是神經(jīng)網(wǎng)絡(luò)的識(shí)別速度遠(yuǎn)快于人類,并且從總體上看,神經(jīng)網(wǎng)絡(luò)的識(shí)別準(zhǔn)確率很高。

神經(jīng)網(wǎng)絡(luò)的構(gòu)成

為了識(shí)別手寫數(shù)字,神經(jīng)網(wǎng)絡(luò)使用多層神經(jīng)元來(lái)處理輸入圖像,以便進(jìn)行預(yù)測(cè)。圖7 為雙層神經(jīng)網(wǎng)絡(luò)示意圖。

圖7 雙層神經(jīng)網(wǎng)絡(luò)示意圖。輸入不同,但是輸出相同,其中紅色表示被激活的神經(jīng)元

在圖7 的雙層神經(jīng)網(wǎng)絡(luò)中,雖然輸入是“6”的兩幅不同形態(tài)的圖像,但是輸出是一樣的,并且該神經(jīng)網(wǎng)絡(luò)使用不同的神經(jīng)元激活路徑。盡管每一個(gè)神經(jīng)元組合產(chǎn)生的預(yù)測(cè)是唯一的,但是每一個(gè)預(yù)測(cè)結(jié)果都可以由多個(gè)神經(jīng)元組合實(shí)現(xiàn)。

神經(jīng)網(wǎng)絡(luò)通常由如下幾部分組成。

輸入層:該層處理輸入圖像的每個(gè)像素。如此說(shuō)來(lái),神經(jīng)元的數(shù)量應(yīng)該和輸入圖像的像素?cái)?shù)一樣多。為簡(jiǎn)單起見(jiàn),圖7 把大量神經(jīng)元“凝聚”成一個(gè)節(jié)點(diǎn)。

為了提高預(yù)測(cè)準(zhǔn)確度,可以使用卷積層。卷積層并不處理單個(gè)像素,而是識(shí)別像素組合的特征,比如發(fā)現(xiàn)“6”有一個(gè)圈和一條朝上的尾巴。這種分析只關(guān)注特征是否出現(xiàn),而不關(guān)注出現(xiàn)的位置,所以即使某些關(guān)鍵特征偏離了中心,神經(jīng)網(wǎng)絡(luò)仍然能夠正確識(shí)別。這種特性叫作平移不變性。

隱藏層:在像素進(jìn)入神經(jīng)網(wǎng)絡(luò)之后,它們經(jīng)過(guò)層層轉(zhuǎn)換,不斷提高和那些標(biāo)簽已知的圖像的整體相似度。標(biāo)簽已知是指神經(jīng)網(wǎng)絡(luò)以前見(jiàn)過(guò)這些圖像。雖然轉(zhuǎn)換得越多,預(yù)測(cè)準(zhǔn)確度就會(huì)越高,但是處理時(shí)間會(huì)明顯增加。一般來(lái)說(shuō),幾個(gè)隱藏層就足夠了。每層的神經(jīng)元數(shù)量要和圖像的像素?cái)?shù)成比例。前面的示例使用了一個(gè)隱藏層,它包含500 個(gè)神經(jīng)元。

輸出層:該層產(chǎn)生最終預(yù)測(cè)結(jié)果。在這一層中,神經(jīng)元可以只有一個(gè),也可以和結(jié)果一樣多。

損失層:雖然圖7 并未顯示損失層,但是在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程中,損失層是存在的。該層通常位于最后,并提供有關(guān)輸入是否識(shí)別正確的反饋;如果不正確,則給出誤差量。

在訓(xùn)練神經(jīng)網(wǎng)絡(luò)的過(guò)程中,損失層至關(guān)重要。若預(yù)測(cè)正確,來(lái)自于損失層的反饋會(huì)強(qiáng)化產(chǎn)生該預(yù)測(cè)結(jié)果的激活路徑;若預(yù)測(cè)錯(cuò)誤,則錯(cuò)誤會(huì)沿著路徑逆向返回,這條路徑上的神經(jīng)元的激活條件就會(huì)被重新調(diào)整,以減少錯(cuò)誤。這個(gè)過(guò)程稱為反向傳播。

通過(guò)不斷重復(fù)這個(gè)訓(xùn)練過(guò)程,神經(jīng)網(wǎng)絡(luò)會(huì)學(xué)習(xí)輸入信號(hào)和正確輸出標(biāo)簽之間的聯(lián)系,并且把這些聯(lián)系作為激活規(guī)則編入每個(gè)神經(jīng)元。因此,為了提高神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)準(zhǔn)確度,需要調(diào)整管理激活規(guī)則的部件。

激活規(guī)則

為了產(chǎn)生預(yù)測(cè)結(jié)果,需要沿著一條路徑依次激活神經(jīng)元。每個(gè)神經(jīng)元的激活過(guò)程都由其激活規(guī)則所控制,激活規(guī)則指定了輸入信號(hào)的來(lái)源和強(qiáng)度。在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程中,激活規(guī)則會(huì)不斷調(diào)整。

圖8 展示了神經(jīng)元G 的一條激活規(guī)則,它模擬的是圖7 中的第一個(gè)場(chǎng)景。經(jīng)過(guò)訓(xùn)練,神經(jīng)網(wǎng)絡(luò)認(rèn)識(shí)到神經(jīng)元G 和上一層的神經(jīng)元A、C、D 有聯(lián)系。這3 個(gè)神經(jīng)元中的任何一個(gè)被激活,都會(huì)作為輸入信號(hào)傳遞給神經(jīng)元G。

圖8 神經(jīng)元激活規(guī)則示例

這些聯(lián)系的強(qiáng)度各不相同,聯(lián)系強(qiáng)度也被稱為權(quán)重,記作w。在圖8 中,與神經(jīng)元C 相比(w = 1),神經(jīng)元A 激活后發(fā)送的信號(hào)更強(qiáng)(w = 3)。聯(lián)系也是有方向的,例如神經(jīng)元D(w = –1)實(shí)際上會(huì)減弱傳送給神經(jīng)元G 的輸入信號(hào)。

在計(jì)算神經(jīng)元G 的輸入信號(hào)總強(qiáng)度時(shí),把上一層與之有關(guān)聯(lián)的所有激活神經(jīng)元的權(quán)重加起來(lái)。如果信號(hào)強(qiáng)度大于指定的閾值,神經(jīng)元G就會(huì)被激活。在圖8 中,最終的信號(hào)強(qiáng)度為2(即3 – 1),由于神經(jīng)元G 的閾值為3,因此它仍然處于未激活狀態(tài)。

良好的激活規(guī)則有助于產(chǎn)生準(zhǔn)確的預(yù)測(cè)結(jié)果,其關(guān)鍵在于確定合適的權(quán)重和閾值。另外,神經(jīng)網(wǎng)絡(luò)的其他參數(shù)也需要調(diào)整,比如隱藏層的數(shù)量、每層的神經(jīng)元數(shù)量等。(可以使用梯度下降法優(yōu)化這些參數(shù)。)

局限性

盡管神經(jīng)網(wǎng)絡(luò)能在一定程度上模擬人腦,但其本身仍然存在一些缺點(diǎn)。為了克服這些缺點(diǎn),人們提出了各種各樣的方法。

需要大樣本:神經(jīng)網(wǎng)絡(luò)的復(fù)雜性使之能夠識(shí)別帶有復(fù)雜特征的輸入,但前提是我們能為它提供大量訓(xùn)練數(shù)據(jù)。如果訓(xùn)練集太小,就會(huì)出現(xiàn)過(guò)擬合問(wèn)題(算法過(guò)度敏感,它把數(shù)據(jù)中的隨機(jī)波動(dòng)錯(cuò)誤地當(dāng)成持久模式)。如果很難獲得更多訓(xùn)練數(shù)據(jù),則可以使用如下幾種技術(shù)來(lái)最大限度地降低過(guò)擬合風(fēng)險(xiǎn)。

二次取樣:為了降低神經(jīng)元對(duì)噪聲的敏感度,需要對(duì)神經(jīng)網(wǎng)絡(luò)的輸入進(jìn)行“平滑化”處理,即針對(duì)信號(hào)樣本取平均值,這個(gè)過(guò)程叫作二次取樣。以圖像處理為例,可以通過(guò)二次取樣縮小圖像尺寸,或者降低紅綠藍(lán)3 個(gè)顏色通道的對(duì)比度。

畸變:當(dāng)缺少訓(xùn)練數(shù)據(jù)時(shí),可以通過(guò)向每幅圖像引入畸變來(lái)產(chǎn)生更多數(shù)據(jù)。每幅畸變圖像都可以作為新的輸入,以此擴(kuò)大訓(xùn)練數(shù)據(jù)的規(guī)模。畸變應(yīng)該能夠反映原數(shù)據(jù)集的特征。以手寫數(shù)字為例,可以旋轉(zhuǎn)圖像,以模擬人們寫字的角度,或者在特定的點(diǎn)進(jìn)行拉伸和擠壓(這叫作彈性變形),從而把手部肌肉不受控制而抖動(dòng)的特點(diǎn)表現(xiàn)出來(lái)。

丟棄:如果可供學(xué)習(xí)的訓(xùn)練樣本很少,神經(jīng)元就無(wú)法彼此建立聯(lián)系,這會(huì)導(dǎo)致出現(xiàn)過(guò)擬合問(wèn)題,因?yàn)樾〉纳窠?jīng)元集群之間彼此會(huì)產(chǎn)生過(guò)度依賴。為了解決這個(gè)問(wèn)題,可以在訓(xùn)練期間隨機(jī)丟棄一半的神經(jīng)元。這些遭丟棄的神經(jīng)元將處于未激活狀態(tài),剩下的神經(jīng)元?jiǎng)t正常工作。下一次訓(xùn)練丟棄一組不同的神經(jīng)元。這迫使不同的神經(jīng)元協(xié)同工作,從而揭示訓(xùn)練樣本所包含的更多特征。

計(jì)算成本高:訓(xùn)練一個(gè)由幾千個(gè)神經(jīng)元組成的神經(jīng)網(wǎng)絡(luò)可能需要很長(zhǎng)時(shí)間。一個(gè)簡(jiǎn)單的解決方法是升級(jí)硬件,但這會(huì)花不少錢。另一個(gè)解決方法是調(diào)整算法,用稍低一些的預(yù)測(cè)準(zhǔn)確度換取更快的處理速度,常用的一些方法如下。

隨機(jī)梯度下降法:為了更新某一個(gè)參數(shù),經(jīng)典的梯度下降法在一次迭代中使用所有訓(xùn)練樣本。當(dāng)數(shù)據(jù)集很大時(shí),這樣做會(huì)很耗時(shí),一種解決方法是在每次迭代中只用一個(gè)訓(xùn)練樣本來(lái)更新參數(shù)。這個(gè)方法被稱為隨機(jī)梯度下降法,雖然使用這個(gè)方法得到的最終參數(shù)可能不是最優(yōu)的,但是準(zhǔn)確度不會(huì)太低。

梯度下降法:簡(jiǎn)單地說(shuō),梯度下降法先初步猜測(cè)合適的權(quán)重組合,再通過(guò)一個(gè)迭代過(guò)程,把這些權(quán)重應(yīng)用于每個(gè)數(shù)據(jù)點(diǎn)做預(yù)測(cè),然后調(diào)整權(quán)重,以減少整體預(yù)測(cè)誤差。這個(gè)過(guò)程類似于一步步走到山底下。每走一步,梯度下降法都要判斷從哪個(gè)方向下是最陡峭的,然后朝著那個(gè)方向重新校準(zhǔn)權(quán)重。最終,我們會(huì)到達(dá)最低點(diǎn),這個(gè)點(diǎn)的預(yù)測(cè)誤差最小。

小批次梯度下降法:雖然使用隨機(jī)梯度下降法能夠提升速度,但最終參數(shù)可能不準(zhǔn)確,算法也可能無(wú)法收斂,導(dǎo)致某個(gè)參數(shù)上下波動(dòng)。一個(gè)折中方法是每次迭代使用訓(xùn)練樣本的一個(gè)子集,這就是小批次梯度下降法。

全連接層:隨著加入的神經(jīng)元越來(lái)越多,路徑的數(shù)量呈指數(shù)增長(zhǎng)。為了避免查看所有可能的組合,可以使初始層(處理更小、更低級(jí)的特征)的神經(jīng)元部分連接。只有最后幾層(處理更大、更高級(jí)的特征)才對(duì)相鄰層的神經(jīng)元進(jìn)行全連接。

不可解釋:神經(jīng)網(wǎng)絡(luò)由多層組成,每層都有幾百個(gè)神經(jīng)元,這些神經(jīng)元由不同的激活規(guī)則控制。這使得我們很難準(zhǔn)確地找到產(chǎn)生正確預(yù)測(cè)結(jié)果的輸入信號(hào)組合。這一點(diǎn)和回歸分析不同,回歸分析能夠明確地識(shí)別重要的預(yù)測(cè)變量并比較它們的強(qiáng)弱。神經(jīng)網(wǎng)絡(luò)的“黑盒”特性使之難以證明其使用得當(dāng),在涉及倫理問(wèn)題時(shí)尤其如此。不過(guò),人們正在努力研究每個(gè)神經(jīng)元層的訓(xùn)練過(guò)程,以期了解單個(gè)輸入信號(hào)如何影響最終的預(yù)測(cè)結(jié)果。

——

盡管存在上述局限性,但是神經(jīng)網(wǎng)絡(luò)本身?yè)碛械膹?qiáng)大能力使之得以應(yīng)用于虛擬助手、自動(dòng)駕駛等前沿領(lǐng)域。除了模擬人腦之外,神經(jīng)網(wǎng)絡(luò)在一些領(lǐng)域已經(jīng)戰(zhàn)勝了人類,比如谷歌公司的AlphaGo 在2015 年首次戰(zhàn)勝了人類棋手。隨著算法不斷改進(jìn),以及計(jì)算能力不斷提升,神經(jīng)網(wǎng)絡(luò)將在物聯(lián)網(wǎng)時(shí)代發(fā)揮關(guān)鍵作用。

小結(jié)

神經(jīng)網(wǎng)絡(luò)由多個(gè)神經(jīng)元層組成。訓(xùn)練期間,第 1 層的神經(jīng)元首先被輸入數(shù)據(jù)激活,然后將激活狀態(tài)傳播到后續(xù)各層的神經(jīng)元,最終在輸出層產(chǎn)生預(yù)測(cè)結(jié)果。

一個(gè)神經(jīng)元是否被激活取決于輸入信號(hào)的來(lái)源和強(qiáng)度,這由其激活規(guī)則指定。激活規(guī)則會(huì)根據(jù)預(yù)測(cè)結(jié)果的反饋不斷調(diào)整,這個(gè)過(guò)程被稱為反向傳播。

在大數(shù)據(jù)集和先進(jìn)的計(jì)算硬件可用的情況下,神經(jīng)網(wǎng)絡(luò)的表現(xiàn)最好。然而,預(yù)測(cè)結(jié)果在大部分時(shí)候都是無(wú)法解釋的。

——本文節(jié)選自《白話機(jī)器學(xué)習(xí)算法》,一本文科生都能看懂的算法入門書(shū)。

用通俗易懂的人類語(yǔ)言以及大量有趣的示例和插圖講解10多種前沿的機(jī)器學(xué)習(xí)算法。內(nèi)容涵蓋k均值聚類、主成分分析、關(guān)聯(lián)規(guī)則、社會(huì)網(wǎng)絡(luò)分析等無(wú)監(jiān)督學(xué)習(xí)算法,以及回歸分析、k最近鄰、支持向量機(jī)、決策樹(shù)、隨機(jī)森林、神經(jīng)網(wǎng)絡(luò)等監(jiān)督學(xué)習(xí)算法,并概述強(qiáng)化學(xué)習(xí)算法的思想。

京東購(gòu)買

讀IT好文,看IT好書(shū),盡在圖靈教育

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容