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