猜一猜,下圖中是什么動物?
圖1 看圖猜動物
盡管圖中的動物胖得出奇,你也應該能夠猜到它是一只長頸鹿。人類的大腦擁有強大的辨識能力,它是一個由差不多 800 億個神經(jīng)元組成的復雜網(wǎng)絡。即使某物并非我們熟知的模樣,我們也能夠輕松地識別。
大腦神經(jīng)元彼此協(xié)同工作,它們把輸入信號(比如長頸鹿的圖片)轉(zhuǎn)換成相應的輸出標簽(比如“長頸鹿”)。
神經(jīng)網(wǎng)絡技術(shù)的誕生正是受到人腦神經(jīng)元的啟發(fā)。
1. 神經(jīng)網(wǎng)絡
神經(jīng)網(wǎng)絡是自動圖像識別的基礎,由神經(jīng)網(wǎng)絡衍生出的一些技術(shù)在執(zhí)行速度和準確度上都超過了人類。近年來,神經(jīng)網(wǎng)絡技術(shù)大熱,這其中主要有 3 個原因。
數(shù)據(jù)存儲和共享技術(shù)取得進步。這為訓練神經(jīng)網(wǎng)絡提供了海量數(shù)據(jù),有助于改善神經(jīng)網(wǎng)絡的性能。
計算能力越來越強大。GPU(graphics processing unit,圖形處理器)的運行速度最快能達到CPU(central processing unit,中央處理器)的 150 倍。之前,GPU 主要用來在游戲中顯示高品質(zhì)圖像。后來,人們發(fā)現(xiàn)它能為在大數(shù)據(jù)集上訓練神經(jīng)網(wǎng)絡提供強大的支持。
算法獲得改進。雖然目前神經(jīng)網(wǎng)絡在性能上還很難與人腦媲美,但是已有一些能大幅改善其性能的技術(shù)。本文會介紹其中一些技術(shù)。
自動圖像識別是神經(jīng)網(wǎng)絡技術(shù)的有力例證,它被應用于許多領域,包括視覺監(jiān)控和汽車自主導航,甚至還出現(xiàn)在智能手機中,用來識別手寫體。下面來看看如何訓練能識別手寫體的神經(jīng)網(wǎng)絡。
2. 示例:識別手寫數(shù)字
下面示例中使用的手寫數(shù)字來自于 MNIST 數(shù)據(jù)庫,如下圖所示。
圖2 MNIST 數(shù)據(jù)庫中的手寫數(shù)字
為了讓計算機讀取圖像,必須先把圖像轉(zhuǎn)換成像素。黑色像素用 0 表示,白色像素用 1 表示,如圖 3 所示。如果圖像是彩色的,則可以使用三原色的色相值來表示。
圖3 把一幅圖像轉(zhuǎn)換為像素
一旦圖像完成像素化,就可以把得到的值交給神經(jīng)網(wǎng)絡。在本例中,神經(jīng)網(wǎng)絡總共得到 10 000 個手寫數(shù)字以及它們實際所表示的數(shù)字。在神經(jīng)網(wǎng)絡學過手寫數(shù)字及其對應標簽的聯(lián)系之后,我們拿 1000 個新的手寫數(shù)字(不帶標簽)來測試它,看看它是否能夠全部識別出來。
測試發(fā)現(xiàn),神經(jīng)網(wǎng)絡從 1000 個新的手寫數(shù)字中正確識別出了 922 個,即正確率達到了 92.2%。下圖是一張列聯(lián)表,可以用它來檢查神經(jīng)網(wǎng)絡的識別情況。
圖4 列聯(lián)表
圖4 列聯(lián)表總結(jié)了神經(jīng)網(wǎng)絡的表現(xiàn):第一行指出,共有 85 個“0”,神經(jīng)網(wǎng)絡正確識別出 84 個,最后一個“0”被錯誤地識別為“6”。最后一列是識別準確率。
從圖4 可以看到,“0”和“1”的手寫圖像幾乎全部被正確識別出來了,而“5”的手寫圖像最難識別。接下來詳細看看那些被識別錯的數(shù)字。
“2”被錯誤識別成“7”或“8”的情況大約占8%。雖然人能夠輕松識別出圖5 中的這些數(shù)字,神經(jīng)網(wǎng)絡卻可能被某些特征給難住,比如“2”的小尾巴。有趣的是,神經(jīng)網(wǎng)絡對“3”和“5”也比較困惑(如圖6 所示),識別錯誤的情況約占10%。
圖5 錯誤識別“2”
圖6 錯誤識別“3”和“5”
盡管出現(xiàn)了這些錯誤,但是神經(jīng)網(wǎng)絡的識別速度遠快于人類,并且從總體上看,神經(jīng)網(wǎng)絡的識別準確率很高。
3. 神經(jīng)網(wǎng)絡的構(gòu)成
為了識別手寫數(shù)字,神經(jīng)網(wǎng)絡使用多層神經(jīng)元來處理輸入圖像,以便進行預測。圖7 為雙層神經(jīng)網(wǎng)絡示意圖。
圖7 雙層神經(jīng)網(wǎng)絡示意圖。
輸入不同,但是輸出相同,其中紅色表示被激活的神經(jīng)元。
在圖7 雙層神經(jīng)網(wǎng)絡中,雖然輸入是“6”的兩幅不同形態(tài)的圖像,但輸出是一樣的,并且該神經(jīng)網(wǎng)絡使用不同的神經(jīng)元激活路徑。盡管每一個神經(jīng)元組合產(chǎn)生的預測是唯一的,但是每一個預測結(jié)果都可以由多個神經(jīng)元組合實現(xiàn)。
神經(jīng)網(wǎng)絡通常由如下幾部分組成。
輸入層:該層處理輸入圖像的每個像素。如此說來,神經(jīng)元的數(shù)量應該和輸入圖像的像素數(shù)一樣多。為簡單起見,圖7 把大量神經(jīng)元“凝聚”成一個節(jié)點。 為了提高預測準確度,可以使用卷積層。卷積層并不處理單個像素,而是識別像素組合的特征,比如發(fā)現(xiàn)“6”有一個圈和一條朝上的尾巴。這種分析只關(guān)注特征是否出現(xiàn),而不關(guān)注出現(xiàn)的位置,所以即使某些關(guān)鍵特征偏離了中心,神經(jīng)網(wǎng)絡仍然能夠正確識別。這種特性叫作平移不變性。
隱藏層:在像素進入神經(jīng)網(wǎng)絡之后,它們經(jīng)過層層轉(zhuǎn)換,不斷提高和那些標簽已知的圖像的整體相似度。標簽已知是指神經(jīng)網(wǎng)絡以前見過這些圖像。雖然轉(zhuǎn)換得越多,預測準確度就會越高,但是處理時間會明顯增加。一般來說,幾個隱藏層就足夠了。每層的神經(jīng)元數(shù)量要和圖像的像素數(shù)成比例。前面的示例使用了一個隱藏層,它包含 500 個神經(jīng)元。
輸出層:該層產(chǎn)生最終預測結(jié)果。在這一層中,神經(jīng)元可以只有一個,也可以和結(jié)果一樣多。
損失層:雖然圖7 并未顯示損失層,但是在神經(jīng)網(wǎng)絡的訓練過程中,損失層是存在的。該層通常位于最后,并提供有關(guān)輸入是否識別正確的反饋;如果不正確,則給出誤差量。 在訓練神經(jīng)網(wǎng)絡的過程中,損失層至關(guān)重要。若預測正確,來自于損失層的反饋會強化產(chǎn)生該預測結(jié)果的激活路徑;若預測錯誤,則錯誤會沿著路徑逆向返回,這條路徑上的神經(jīng)元的激活條件就會被重新調(diào)整,以減少錯誤。這個過程稱為反向傳播。 通過不斷重復這個訓練過程,神經(jīng)網(wǎng)絡會學習輸入信號和正確輸出標簽之間的聯(lián)系,并且把這些聯(lián)系作為激活規(guī)則編入每個神經(jīng)元。因此,為了提高神經(jīng)網(wǎng)絡的預測準確度,需要調(diào)整管理激活規(guī)則的部件。
4. 激活規(guī)則
為了產(chǎn)生預測結(jié)果,需要沿著一條路徑依次激活神經(jīng)元。每個神經(jīng)元的激活過程都由其激活規(guī)則所控制,激活規(guī)則指定了輸入信號的來源和強度。在神經(jīng)網(wǎng)絡的訓練過程中,激活規(guī)則會不斷調(diào)整。
圖8 展示了神經(jīng)元 G 的一條激活規(guī)則,它模擬的是圖7 中的第一個場景。經(jīng)過訓練,神經(jīng)網(wǎng)絡認識到神經(jīng)元 G 和上一層的神經(jīng)元 A、C、D 有聯(lián)系。這 3 個神經(jīng)元中的任何一個被激活,都會作為輸入信號傳遞給神經(jīng)元 G。
圖8 神經(jīng)元激活規(guī)則示例
這些聯(lián)系的強度各不相同,聯(lián)系強度也被稱為權(quán)重,記作w。在圖8 中,與神經(jīng)元 C 相比(w = 1),神經(jīng)元 A 激活后發(fā)送的信號更強(w = 3)。聯(lián)系也是有方向的,例如神經(jīng)元 D(w = –1)實際上會減弱傳送給神經(jīng)元G 的輸入信號。
在計算神經(jīng)元 G 的輸入信號總強度時,把上一層與之有關(guān)聯(lián)的所有激活神經(jīng)元的權(quán)重加起來。如果信號強度大于指定的閾值,神經(jīng)元 G 就會被激活。在圖8 中,最終的信號強度為2(即3 – 1),由于神經(jīng)元 G 的閾值為3,因此它仍然處于未激活狀態(tài)。
良好的激活規(guī)則有助于產(chǎn)生準確的預測結(jié)果,其關(guān)鍵在于確定合適的權(quán)重和閾值。另外,神經(jīng)網(wǎng)絡的其他參數(shù)也需要調(diào)整,比如隱藏層的數(shù)量、每層的神經(jīng)元數(shù)量等。(可以使用梯度下降法優(yōu)化這些參數(shù)。)
5. 局限性
盡管神經(jīng)網(wǎng)絡能在一定程度上模擬人腦,但其本身仍然存在一些缺點。為了克服這些缺點,人們提出了各種各樣的方法。
需要大樣本:
神經(jīng)網(wǎng)絡的復雜性使之能夠識別帶有復雜特征的輸入,但前提是我們能為它提供大量訓練數(shù)據(jù)。如果訓練集太小,就會出現(xiàn)過擬合問題(算法過度敏感,它把數(shù)據(jù)中的隨機波動錯誤地當成持久模式)。如果很難獲得更多訓練數(shù)據(jù),則可以使用如下幾種技術(shù)來最大限度地降低過擬合風險。
二次取樣:為了降低神經(jīng)元對噪聲的敏感度,需要對神經(jīng)網(wǎng)絡的輸入進行“平滑化”處理,即針對信號樣本取平均值,這個過程叫作二次取樣。以圖像處理為例,可以通過二次取樣縮小圖像尺寸,或者降低紅綠藍3 個顏色通道的對比度。
畸變:當缺少訓練數(shù)據(jù)時,可以通過向每幅圖像引入畸變來產(chǎn)生更多數(shù)據(jù)。每幅畸變圖像都可以作為新的輸入,以此擴大訓練數(shù)據(jù)的規(guī)模?;儜撃軌蚍从吃瓟?shù)據(jù)集的特征。以手寫數(shù)字為例,可以旋轉(zhuǎn)圖像,以模擬人們寫字的角度,或者在特定的點進行拉伸和擠壓(這叫作彈性變形),從而把手部肌肉不受控制而抖動的特點表現(xiàn)出來。
丟棄:如果可供學習的訓練樣本很少,神經(jīng)元就無法彼此建立聯(lián)系,這會導致出現(xiàn)過擬合問題,因為小的神經(jīng)元集群之間彼此會產(chǎn)生過度依賴。為了解決這個問題,可以在訓練期間隨機丟棄一半的神經(jīng)元。這些遭丟棄的神經(jīng)元將處于未激活狀態(tài),剩下的神經(jīng)元則正常工作。下一次訓練丟棄一組不同的神經(jīng)元。這迫使不同的神經(jīng)元協(xié)同工作,從而揭示訓練樣本所包含的更多特征。
計算成本高:
訓練一個由幾千個神經(jīng)元組成的神經(jīng)網(wǎng)絡可能需要很長時間。一個簡單的解決方法是升級硬件,但這會花不少錢。另一個解決方法是調(diào)整算法,用稍低一些的預測準確度換取更快的處理速度,常用的一些方法如下。
隨機梯度下降法:為了更新某一個參數(shù),經(jīng)典的梯度下降法在一次迭代中使用所有訓練樣本。當數(shù)據(jù)集很大時,這樣做會很耗時,一種解決方法是在每次迭代中只用一個訓練樣本來更新參數(shù)。這個方法被稱為隨機梯度下降法,雖然使用這個方法得到的最終參數(shù)可能不是最優(yōu)的,但是準確度不會太低。
梯度下降法:簡單地說,梯度下降法先初步猜測合適的權(quán)重組合,再通過一個迭代過程,把這些權(quán)重應用于每個數(shù)據(jù)點做預測,然后調(diào)整權(quán)重,以減少整體預測誤差。這個過程類似于一步步走到山底下。每走一步,梯度下降法都要判斷從哪個方向下是最陡峭的,然后朝著那個方向重新校準權(quán)重。最終,我們會到達最低點,這個點的預測誤差最小。
小批次梯度下降法:雖然使用隨機梯度下降法能夠提升速度,但最終參數(shù)可能不準確,算法也可能無法收斂,導致某個參數(shù)上下波動。一個折中方法是每次迭代使用訓練樣本的一個子集,這就是小批次梯度下降法。
全連接層:隨著加入的神經(jīng)元越來越多,路徑的數(shù)量呈指數(shù)增長。為了避免查看所有可能的組合,可以使初始層(處理更小、更低級的特征)的神經(jīng)元部分連接。只有最后幾層(處理更大、更高級的特征)才對相鄰層的神經(jīng)元進行全連接。
不可解釋:
神經(jīng)網(wǎng)絡由多層組成,每層都有幾百個神經(jīng)元,這些神經(jīng)元由不同的激活規(guī)則控制。這使得我們很難準確地找到產(chǎn)生正確預測結(jié)果的輸入信號組合。這一點和回歸分析不同,回歸分析能夠明確地識別重要的預測變量并比較它們的強弱。神經(jīng)網(wǎng)絡的“黑盒”特性使之難以證明其使用得當,在涉及倫理問題時尤其如此。不過,人們正在努力研究每個神經(jīng)元層的訓練過程,以期了解單個輸入信號如何影響最終的預測結(jié)果。
盡管存在上述局限性,但是神經(jīng)網(wǎng)絡本身擁有的強大能力使之得以應用于虛擬助手、自動駕駛等前沿領域。除了模擬人腦之外,神經(jīng)網(wǎng)絡在一些領域已經(jīng)戰(zhàn)勝了人類,比如谷歌公司的AlphaGo 在2015 年首次戰(zhàn)勝了人類棋手。隨著算法不斷改進,以及計算能力不斷提升,神經(jīng)網(wǎng)絡將在物聯(lián)網(wǎng)時代發(fā)揮關(guān)鍵作用。
6. 小結(jié)
神經(jīng)網(wǎng)絡由多個神經(jīng)元層組成。訓練期間,第 1 層的神經(jīng)元首先被輸入數(shù)據(jù)激活,然后將激活狀態(tài)傳播到后續(xù)各層的神經(jīng)元,最終在輸出層產(chǎn)生預測結(jié)果。
一個神經(jīng)元是否被激活取決于輸入信號的來源和強度,這由其激活規(guī)則指定。激活規(guī)則會根據(jù)預測結(jié)果的反饋不斷調(diào)整,這個過程被稱為反向傳播。
在大數(shù)據(jù)集和先進的計算硬件可用的情況下,神經(jīng)網(wǎng)絡的表現(xiàn)最好。然而,預測結(jié)果在大部分時候都是無法解釋的。
——本文節(jié)選自《白話機器學習算法》
-
神經(jīng)網(wǎng)絡
+關(guān)注
關(guān)注
42文章
4814瀏覽量
103631 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1224瀏覽量
25448
原文標題:這是我看過,最好懂的神經(jīng)網(wǎng)絡
文章出處:【微信號:AItists,微信公眾號:人工智能學家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
無刷直流電機單神經(jīng)元自適應智能控制系統(tǒng)
無刷直流電機單神經(jīng)元PI控制器的設計
【「芯片通識課:一本書讀懂芯片技術(shù)」閱讀體驗】從deepseek看今天芯片發(fā)展
BP神經(jīng)網(wǎng)絡的網(wǎng)絡結(jié)構(gòu)設計原則
BP神經(jīng)網(wǎng)絡與卷積神經(jīng)網(wǎng)絡的比較
什么是BP神經(jīng)網(wǎng)絡的反向傳播算法
BP神經(jīng)網(wǎng)絡的基本原理
如何訓練BP神經(jīng)網(wǎng)絡模型
深度學習入門:簡單神經(jīng)網(wǎng)絡的構(gòu)建與實現(xiàn)
人工神經(jīng)網(wǎng)絡的原理和多種神經(jīng)網(wǎng)絡架構(gòu)方法

評論