作者 | Jean-Louis Queguiner
來源 | 機(jī)器之心
「神經(jīng)網(wǎng)絡(luò)就像數(shù)數(shù)一樣簡單」,「卷積層只是一個(gè)蝙蝠信號(hào)燈」……在本文中,一位奶爸從手寫數(shù)字識(shí)別入手,用這樣簡單的語言向自己 8 歲的女兒解釋了一下「深度學(xué)習(xí)」。當(dāng)然,用這篇文章向女朋友(如果有的話)科普自己的工作也是可以的。
機(jī)器學(xué)習(xí),尤其是深度學(xué)習(xí)是一個(gè)熱門話題,你肯定會(huì)在媒體上看到流行語「人工智能」。
然而,這些并非新概念。第一個(gè)人工神經(jīng)網(wǎng)絡(luò)(ANN)是在 40 年代引入的。那么為什么最近的熱點(diǎn)話題都是關(guān)于神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的呢?我們將在 GPU 和機(jī)器學(xué)習(xí)的一系列博客文章中探討這些概念。

在 80 年代,我記得我父親構(gòu)建了用于銀行支票的字符識(shí)別工具。檢查這么多不同類型的筆跡真的是一件痛苦的事,因?yàn)樗枰粋€(gè)方程來適應(yīng)所有的變化。
在過去幾年中,很明顯,處理這類問題的最佳方法是通過卷積神經(jīng)網(wǎng)絡(luò)。人類設(shè)計(jì)的方程不再適合處理無限的手寫模式。
讓我們來看看最經(jīng)典的例子之一:構(gòu)建一個(gè)數(shù)字識(shí)別系統(tǒng),一個(gè)識(shí)別手寫數(shù)字的神經(jīng)網(wǎng)絡(luò)。
事實(shí) 1:神經(jīng)網(wǎng)絡(luò)就像數(shù)數(shù)一樣簡單
我們首先計(jì)算最上面一行的紅色形狀在每個(gè)黑色手寫數(shù)字中出現(xiàn)了幾次。

▲手寫數(shù)字的簡化矩陣
現(xiàn)在讓我們嘗試通過計(jì)算具有相同紅色形狀的匹配數(shù)來識(shí)別(推斷)新的手寫數(shù)字。然后我們將其與之前的表格進(jìn)行比較,以確定這個(gè)數(shù)字與哪個(gè)數(shù)字有最強(qiáng)的關(guān)聯(lián):

▲匹配手寫數(shù)字的形狀
恭喜!你剛剛構(gòu)建了世界上最簡單的神經(jīng)網(wǎng)絡(luò)系統(tǒng),用于識(shí)別手寫數(shù)字。
事實(shí) 2:圖像只是一個(gè)矩陣
計(jì)算機(jī)將圖像視為矩陣。一張黑白圖像是個(gè) 2D 矩陣。
我們來考慮一張圖像。為了簡單起見,我們拍攝一張數(shù)字 8 的小黑白圖像,方形尺寸為 28 像素。
矩陣的每個(gè)單元表示從 0(表示黑色)到 255(表示純白色像素)的像素強(qiáng)度。
因此,圖像將表示為以下 28×28 的像素矩陣。

▲手寫數(shù)字 8 的圖像和相關(guān)的強(qiáng)度矩陣
事實(shí) 3:卷積層只是一個(gè)蝙蝠信號(hào)燈
為了確定圖片中顯示的圖案(此處指手寫數(shù)字 8),我們將使用一種蝙蝠信號(hào)燈/手電筒。在機(jī)器學(xué)習(xí)中,手電筒被稱為過濾器(filter)。該過濾器用于執(zhí)行 Gimp 等常見圖像處理軟件中用到的經(jīng)典卷積矩陣計(jì)算。

過濾器將掃描圖片,以便在圖像中找到圖案,并在匹配成功時(shí)觸發(fā)正反饋。它有點(diǎn)像兒童形狀分類盒:三角形過濾器匹配三角形孔,方形過濾器匹配方孔等。

▲圖像過濾器像兒童形狀分類盒一樣工作。
事實(shí) 4:過濾器匹配是一項(xiàng)易并行任務(wù)
更科學(xué)地來講,圖像過濾過程看起來有點(diǎn)像下面的動(dòng)畫。如你所見,過濾器掃描的每個(gè)步驟都是相互獨(dú)立的,這意味著此任務(wù)可以高度并行化。
要注意,數(shù)十個(gè)過濾器將同時(shí)運(yùn)行,因?yàn)樗鼈儾幌嗷ヒ蕾嚒?/p>
事實(shí) 5:盡可能多次重復(fù)過濾操作(矩陣卷積)
我們剛剛看到,輸入圖像/矩陣使用多個(gè)矩陣卷積進(jìn)行過濾。
為了提高圖像識(shí)別的準(zhǔn)確率,只需從前一個(gè)操作中獲取過濾后的圖像,然后一次又一次地過濾......
當(dāng)然,我們過分簡化了一些事情,但通常你使用的過濾器越多,按順序重復(fù)這個(gè)操作的次數(shù)越多,你的結(jié)果就越精確。
這就像創(chuàng)建新的抽象層以獲得更清晰的對(duì)象過濾器描述,從原始過濾器到看起來像邊緣、輪子、正方形、立方體等的過濾器......
事實(shí) 6:矩陣卷積只是乘、加運(yùn)算
一圖勝千言:下圖是使用卷積過濾器(3×3)過濾的源圖像(8×8)的簡化視圖。手電筒(此處為 Sobel Gx 過濾器)的投影提供一個(gè)值。

▲應(yīng)用于輸入矩陣的卷積過濾器(Sobel Gx)示例
這就是這種方法的神奇之處,簡單的矩陣運(yùn)算是高度并行化的,完全符合通用圖形處理單元的用例。
事實(shí) 7:需要簡化和總結(jié)檢測到的內(nèi)容嗎?只需使用 max()
我們需要總結(jié)過濾器檢測到的內(nèi)容,以便學(xué)到概括性的知識(shí)。
為此,我們將對(duì)先前過濾操作的輸出進(jìn)行采樣。
此操作稱為池化或下采樣,但實(shí)際上它是為了減小矩陣的大小。
你可以使用任何縮小操作,例如:最大化,最小化,取平均值,計(jì)數(shù),取中位數(shù),求和等等。

▲最大池化層示例
事實(shí) 8:將輸出扁平化,得出最終結(jié)果
不要忘記我們正在研究的神經(jīng)網(wǎng)絡(luò)的主要目的:建立一個(gè)圖像識(shí)別系統(tǒng),也稱為圖像分類。
如果神經(jīng)網(wǎng)絡(luò)的目的是檢測手寫數(shù)字,那么輸入圖像最后將被映射到 10 個(gè)類:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]。
要在通過所有這些過濾器和下采樣層之后,才將此輸入映射到類,我們將只有 10 個(gè)神經(jīng)元(每個(gè)神經(jīng)元代表一個(gè)類),每個(gè)神經(jīng)元將連接到最后一個(gè)子采樣層。
以下是由 Yann Lecun 設(shè)計(jì)的原始 LeNet-5 卷積神經(jīng)網(wǎng)絡(luò)的概述,他是早期采用該技術(shù)進(jìn)行圖像識(shí)別的人之一。

▲原始論文中的 LeNet-5 架構(gòu)
事實(shí) 9:深度學(xué)習(xí)只是基于反饋回路的持續(xù)改進(jìn)
技術(shù)之美不僅來自卷積,而且來自網(wǎng)絡(luò)自身學(xué)習(xí)和適應(yīng)的能力。通過實(shí)現(xiàn)名為反向傳播的反饋回路,網(wǎng)絡(luò)將使用權(quán)重來減輕和抑制不同層中的一些「神經(jīng)元」。
我們來看看網(wǎng)絡(luò)的輸出,如果猜測(輸出 0, 1, 2, 3, 4, 5, 6, 7, 8 或 9)是錯(cuò)誤的,我們要看一下是哪個(gè)/些過濾器「出了錯(cuò)」,找到之后,我們給這個(gè)/些過濾器一個(gè)小小的權(quán)重,這樣它們下次就不會(huì)犯同樣的錯(cuò)誤。瞧!系統(tǒng)在學(xué)習(xí)并不斷改進(jìn)自己。
事實(shí) 10:這一切都說明,深度學(xué)習(xí)是易并行過程
提取數(shù)千個(gè)圖像,運(yùn)行數(shù)十個(gè)過濾器,采用下采樣,扁平化輸出...... 所有這些步驟可以并行完成,這使得系統(tǒng)易于并行。它只是 GPGPU(通用圖形處理單元)的完美用例,非常適合大規(guī)模并行計(jì)算。
事實(shí) 11:需要更精確?那網(wǎng)絡(luò)就再深一點(diǎn)
當(dāng)然這有點(diǎn)過于簡單化,但如果我們看一下主要的「圖像識(shí)別競賽」,即 ImageNet 挑戰(zhàn),我們就可以看到錯(cuò)誤率隨著神經(jīng)網(wǎng)絡(luò)的深度增加而降低。人們普遍認(rèn)為,排除其他因素,網(wǎng)絡(luò)深度的增加將帶來更好的泛化能力和準(zhǔn)確性。

▲Imagenet 挑戰(zhàn)賽獲勝者錯(cuò)誤率 VS 網(wǎng)絡(luò)中的層數(shù)
結(jié)論
我們簡要介紹了應(yīng)用于圖像識(shí)別的深度學(xué)習(xí)概念。值得注意的是,幾乎所有用于圖像識(shí)別的新架構(gòu)(醫(yī)療、衛(wèi)星、自動(dòng)駕駛......)都使用相同的原理,只是具有不同數(shù)量的層,不同類型的濾波器,不同的初始化點(diǎn),不同的矩陣大小,不同的技巧(如圖像增強(qiáng)、dropout、權(quán)重壓縮...)。概念都是一樣的:

▲手寫數(shù)字識(shí)別過程
深度學(xué)習(xí)模型的訓(xùn)練和推理可以歸結(jié)為并行完成的大量基本矩陣運(yùn)算,確切地說,這正是我們已有的圖形處理器(GPU)的用途。