猜一猜,下圖中是什么動(dòng)物?
圖1 看圖猜動(dòng)物
盡管圖中的動(dòng)物胖得出奇,你也應(yīng)該能夠猜到它是一只長(zhǎng)頸鹿。人類(lèi)的大腦擁有強(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ā)。
1. 神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)是自動(dòng)圖像識(shí)別的基礎(chǔ),由神經(jīng)網(wǎng)絡(luò)衍生出的一些技術(shù)在執(zhí)行速度和準(zhǔn)確度上都超過(guò)了人類(lèi)。近年來(lái),神經(jīng)網(wǎng)絡(luò)技術(shù)大熱,這其中主要有 3 個(gè)原因。
數(shù)據(jù)存儲(chǔ)和共享技術(shù)取得進(jìn)步。這為訓(xùn)練神經(jīng)網(wǎng)絡(luò)提供了海量數(shù)據(jù),有助于改善神經(jīng)網(wǎng)絡(luò)的性能。
計(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)大的支持。
算法獲得改進(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)控和汽車(chē)自主導(dǎo)航,甚至還出現(xiàn)在智能手機(jī)中,用來(lái)識(shí)別手寫(xiě)體。下面來(lái)看看如何訓(xùn)練能識(shí)別手寫(xiě)體的神經(jīng)網(wǎng)絡(luò)。
2. 示例:識(shí)別手寫(xiě)數(shù)字
下面示例中使用的手寫(xiě)數(shù)字來(lái)自于 MNIST 數(shù)據(jù)庫(kù),如下圖所示。
圖2 MNIST 數(shù)據(jù)庫(kù)中的手寫(xiě)數(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è)手寫(xiě)數(shù)字以及它們實(shí)際所表示的數(shù)字。在神經(jīng)網(wǎng)絡(luò)學(xué)過(guò)手寫(xiě)數(shù)字及其對(duì)應(yīng)標(biāo)簽的聯(lián)系之后,我們拿 1000 個(gè)新的手寫(xiě)數(shù)字(不帶標(biāo)簽)來(lái)測(cè)試它,看看它是否能夠全部識(shí)別出來(lái)。
測(cè)試發(fā)現(xiàn),神經(jīng)網(wǎng)絡(luò)從 1000 個(gè)新的手寫(xiě)數(shù)字中正確識(shí)別出了 922 個(gè),即正確率達(dá)到了 92.2%。下圖是一張列聯(lián)表,可以用它來(lái)檢查神經(jīng)網(wǎng)絡(luò)的識(shí)別情況。
圖4 列聯(lián)表
圖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”的手寫(xiě)圖像幾乎全部被正確識(shí)別出來(lái)了,而“5”的手寫(xiě)圖像最難識(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)快于人類(lèi),并且從總體上看,神經(jīng)網(wǎng)絡(luò)的識(shí)別準(zhǔn)確率很高。
3. 神經(jīng)網(wǎng)絡(luò)的構(gòu)成
為了識(shí)別手寫(xiě)數(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ò)程稱(chēng)為反向傳播。 通過(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ī)則的部件。
4. 激活規(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)度也被稱(chē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ù)。)
5. 局限性
盡管神經(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ù)集的特征。以手寫(xiě)數(shù)字為例,可以旋轉(zhuǎn)圖像,以模擬人們寫(xiě)字的角度,或者在特定的點(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ò)度依賴(lài)。為了解決這個(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ì)花不少錢(qián)。另一個(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è)方法被稱(chēng)為隨機(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ò)程類(lèi)似于一步步走到山底下。每走一步,梯度下降法都要判斷從哪個(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)行全連接。
不可解釋?zhuān)?/p>
神經(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)勝了人類(lèi),比如谷歌公司的AlphaGo 在2015 年首次戰(zhàn)勝了人類(lèi)棋手。隨著算法不斷改進(jìn),以及計(jì)算能力不斷提升,神經(jīng)網(wǎng)絡(luò)將在物聯(lián)網(wǎng)時(shí)代發(fā)揮關(guān)鍵作用。
6. 小結(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ò)程被稱(chēng)為反向傳播。
在大數(shù)據(jù)集和先進(jìn)的計(jì)算硬件可用的情況下,神經(jīng)網(wǎng)絡(luò)的表現(xiàn)最好。然而,預(yù)測(cè)結(jié)果在大部分時(shí)候都是無(wú)法解釋的。
——本文節(jié)選自《白話機(jī)器學(xué)習(xí)算法》
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4814瀏覽量
103555 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1224瀏覽量
25440
原文標(biāo)題:這是我看過(guò),最好懂的神經(jīng)網(wǎng)絡(luò)
文章出處:【微信號(hào):AItists,微信公眾號(hào):人工智能學(xué)家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
無(wú)刷直流電機(jī)單神經(jīng)元自適應(yīng)智能控制系統(tǒng)
無(wú)刷直流電機(jī)單神經(jīng)元PI控制器的設(shè)計(jì)
【「芯片通識(shí)課:一本書(shū)讀懂芯片技術(shù)」閱讀體驗(yàn)】從deepseek看今天芯片發(fā)展
BP神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)原則
BP神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)的比較
什么是BP神經(jīng)網(wǎng)絡(luò)的反向傳播算法
BP神經(jīng)網(wǎng)絡(luò)的基本原理
如何訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)模型
深度學(xué)習(xí)入門(mén):簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)的構(gòu)建與實(shí)現(xiàn)
人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法

評(píng)論