原文 How computers got shockingly good at recognizing images 做者 Timothy B. Lee 譯者 李平海git
圖片如無標示亦出自原文程序員
文末附有專業詞彙對照表github
囿於專業知識水平,譯文若有不達之處,望留言斧正。算法
現在,我能夠在GooglePhotos裏輸入「沙灘」,就能夠看到過去一段時間裏我去過的各個沙灘。我並無管理過個人照片,給它們打標籤。其實是Google根據照片內容識別出沙灘。這個看似普通的功能基於深度卷積神經網絡技術,此技術容許軟件以一種複雜的方式理解圖像,這是之前的技術作不到的。數據庫
這些年來研究人員發現,隨着他們創建更深層的網絡,積累更大的數據集來訓練它們,軟件的準確性愈來愈高。這致使了對算力的需求幾乎沒法知足,讓英偉達(Nvidia)和AMD等GPU製造商大賺一筆。Google幾年前開發了本身定製的神經網絡芯片,其餘公司爭相效仿。網絡
例如在特斯拉,深度學習專家Andrej Karpathy被任命爲負責自動駕駛項目。這家汽車製造商在開發定製的芯片,以加速將來的自動駕駛版本中的神經網絡操做。又例如蘋果公司,最近幾款的iPhone中的A11/A12芯片就包含「神經引擎」,能夠加速神經網絡運行,以提供更好的圖像識別/語音識別應用。架構
那些我爲了寫本文而採訪的專家們認爲,現在深度學習的熱潮能夠追溯到一篇專業論文——AlexNet(以該文首要做者Alex Krizhevsky的暱稱命名)。機器學習
「在我看來,AlexNet論文發表的2012年可謂里程碑。」機器學習專家、《智能機器如何思考》(How Smart Machines Think)做者Sean Gerrish如是說。函數
2012年以前,深度神經網絡只是機器學習領域中的死水泥潭。但隨即Krizhevsky和他的多倫多大學團隊向一個備受矚目的圖像識別競賽提交了做品,準確率突破性地超越了以往任何技術。一晚上之間,深度神經網絡成爲了圖像識別的領銜技術。其餘研究人員很快地利用這項技術使圖像識別精度飛躍發展。性能
在這篇文章中,咱們將深刻探討深度學習。我會解釋神經網絡到底是什麼,它如何被訓練,以及它爲何須要那麼大的算力。而後我將解釋一種特殊神經網絡——深層卷積網絡——爲何它特別擅長理解圖像。別擔憂,咱們會有不少配圖。
「神經網絡」這個詞可能比較含糊,讓咱們從一個簡單例子開始吧。假設你想要一個根據紅綠黃交通燈決定車子是否能走的神經網絡。此神經網絡能夠用一個神經元來完成這項任務。
這個神經元接收每一個輸入(1表明打開,0表明關閉),乘以各自權重(weight),而且把加權值(weighted value)相加。而後此神經元會加上偏置(bias),這決定了神經元「激活(activate)」的閾值。此狀況下若是輸出值爲正,咱們認爲此神經元「激活」了,不然沒「激活」。這個神經元至關於不等式「green - red - 0.5 > 0」。若是計算結果爲true,就意味着綠燈亮了,紅燈滅了,車子能夠經過。
在真正的神經網絡中,虛擬神經元會有額外的一步。在加權值加上偏置求和後,神經元會調用非線性激活函數(Non-linear activation function)。一種流行的作法是sigmoid函數,一個S型函數,它老是產生一個0~1間的值。
在咱們簡單的交通燈模型中,使用激活函數並不會改變結果(但不能用0,例子中咱們用0.5)。但激活函數的非線性是讓神經網絡模擬更復雜函數的關鍵。沒有了激活函數,不管多複雜的神經網絡均可以簡化爲它的輸入的線性組合。並且線性函數不可能模擬複雜的真實現象。非線性激活函數可讓神經網絡更接近任何數學函數。
固然,有不少辦法能夠近似函數。神經網絡之因此特別,是由於咱們知道如何用一些算式,一堆數據,以及海量算力來「訓練」它們。咱們能夠建造一個合適的通用神經網絡來替代用人類程序員專門寫來執行特定任務的神經網絡。刷過一堆打過標籤的數據後,它會修改神經網絡自己,讓本身能儘量打出正確的標籤。咱們但願得出的神經網絡具備通用性,能爲不在訓練數據中的樣本也正確地打標籤。
在AlexNet發表以前,這個努力已經開始了。1986年,三位研究人員發表了一篇關於反向傳播(backpropagation)的里程碑式論文。該技術是一種有助於訓練複雜神經網絡的數學方法。
爲了直觀地瞭解反向傳播如何工做,讓咱們來看看Michael Nielsen在他傑出的在線深度學習教程中描述的一個簡單神經網絡。目標是讓神經網絡從28X28像素的圖片上正確地識別一個手寫的數字(例如0,1,2)。
每一個圖片有28x28=784個輸入值,每一個都用0或1表明這個像素是深色仍是淺色。Nielsen 構建了一個這樣的神經網絡:
插圖裏中層和右層每一個圓圈表明咱們上一段說的那種神經元。每一個神經元爲輸入值加權求平均,而後加上偏置,而後調用一個激活函數。值得注意的是左層的圓圈不是神經元,它們表明的是輸入值。雖然只畫了8個輸入圈,但實際上有784個輸入——每一個表明一個像素。
右層的10個神經元表明「亮燈」猜想不一樣的數字:假如是0,首個神經元應該被激活(其餘神經元不激活),假如是1則是第二個神經元被激活(其他的不激活),如此類推。
每一個神經元接收上一層全部神經元的輸入。因此中層的15個神經元都是收784個輸入值。它們每一個都爲784個輸入值設置權重。這意味着在此層有15X784=11760個權重參數。同理,輸出層有10個神經元,每一個都從中層的15個神經元接收輸入值,因此又多了15*10個權重參數。與此同時,整個網絡25個神經元共有25個偏置。
咱們目標是調整這11935個參數,儘量正確地得讓表明對應手寫數字的輸出神經元亮燈。咱們能夠用一個叫MNIST的著名數據集來訓練,它提供了60000個已經正確標註的28X28像素圖像:
此圖是 MNIST 數據集裏60000個圖像種的160個Nielsen 示範瞭如何不依賴任何機器學習庫,僅用74行正常Python代碼來訓練這個神經網絡。訓練從選取11935個隨機的權重/偏置參數開始。軟件將遍歷每張圖片樣本,完成兩步過程:
根據輸入圖像和網絡的當前參數,前饋步驟計算網絡的輸出值。
反向傳播步驟將計算結果與正確輸出值的誤差,而後修改網絡種的參數,以略微提升其在特定輸入圖像上的性能。
下例中,假設網絡收到了這張圖片:
若是網絡通過良好調校,網絡中「7」的輸出值應該接近1,其餘9個輸出值應該都接近0。但假如收到此圖時「0」值是0.8。那就太離譜了!訓練算法會改變輸入「0」輸出神經元的各個權重,好讓下次輸入這張圖片時,輸出值會更接近0。
爲此,反向傳播算法會爲各個權重參數算出一個偏差梯度。這是一個衡量輸出錯誤有多大程度被輸入權重所被改變的維度。算法會依照這個梯度決定多大程度改變每一個輸入值的權重——梯度越大,這個參數修改越多。
換句話說,這個訓練過程「教會」輸出神經元更少地注意導向錯誤的輸入方(即中層的神經元),更多地注意正確方向的輸入方。
算法一直爲每一個輸出神經元重複此步驟。它將下降 "1," "2," "3," "4," "5," "6," "8," 和 "9" 神經元(除了神經元「7」)的輸入方的權重,使輸出神經元的值下降。輸入值越大,反映此輸入值的權重參數的偏差梯度就越大,所以這個權重會減小越多。
同理,訓練算法會增長輸出神經元「7」的輸入值的權重。令下次遇到這個圖像時,此神經元會產生更大的輸出值。一樣的,輸入值越大,加權後的增長值也越大,這使得輸出神經元「7」在之後的幾輪學習中更加關注這些輸入。
接下來,算法須要對中層執行相同的計算:改變每一個輸入值的權重以減小網絡的錯誤——一樣,使「7」輸出更接近1,其餘輸出更接近0。但每一箇中層神經元都會對向所有10個輸出層神經元進行輸出,這會致使兩個方向的矛盾。
首先,中層的偏差梯度,不只僅取決於輸入值,也同時取決於下一層的偏差梯度。
這個算法之因此被稱爲反向傳播,是由於網絡裏後層的偏差梯度會反向傳到前面層級(沿着算式中的關係鏈)並用來計算梯度。
同時,每一箇中層神經元也是所有10個輸出層神經元的輸入源。所以,訓練算法計算的偏差梯度,必須反映輸入權重的變化如何影響全部輸出的平均偏差。
反向傳播是一種爬坡算法:該算法的每一輪都會使輸出結果更接近訓練圖像的正確結果,但只會更接近一點。隨着算法經歷愈來愈多的樣本,它會「爬坡」到一個最優參數集,該參數集可以正確地分類儘量多的訓練樣本。要得到較高的準確率,須要成千上萬的訓練樣本,算法可能須要對訓練集中的每一個圖像進行數十次循環,才能達到最優。
Nielsen展現瞭如何用74行Python代碼實現上述所言。值得注意的是,使用這個簡單程序訓練的神經網絡可以識別MNIST數據庫中95%以上的手寫數字。經過一些額外的改進,像這樣一個簡單的兩層神經網絡可以識別98%以上的數字。
你可能覺得,上世紀80年代反向傳播的發展會開啓一段基於神經網絡的機器學習的快速發展時期,但事實並不是如此。在90年代和21世紀初,有一些人在研究這項技術。但對神經網絡的熱潮直到2010年代初才真正興起。
咱們能夠在由斯坦福大學計算機科學家李飛飛組織的年度機器學習競賽《ImageNet》的結果中看到這一點。在每一年的比賽中,參賽者都會獲得一組由100多萬張訓練圖片組成的通用圖片,每張圖片上都手工標註着1000種可能的分類,好比「消防車」、「蘑菇」或「獵豹」。參賽者的軟件根據其對未被歸入訓練集的其餘圖像進行分類的能力進行評判。程序能夠進行屢次猜想,若是前五次對圖像的猜想中有一次與人類選擇的標籤相匹配,則該軟件被認爲是成功的。
比賽從2010年開始舉辦,在前兩屆比賽中,深度神經網絡並無發揮主要做用。頂級團隊使用了各類其餘機器學習技術,但結果平平無奇。2010年獲勝的那支球隊,top5錯誤率(即五輪皆猜錯)爲28%。2011年度則是25%。
而後就到了2012年。這個來自多倫多大學的團隊提交了一份參賽做品,不啻於將選手們從死水泥潭中拖出。該參賽做品即後來以主要做者Alex krizhevsky名字命名的AlexNet。經過使用深度神經網絡,該研究小組得到了16%的top5錯誤率。當年最接近的競對手錯誤率達到26%。
前文所說的手寫識別網絡有兩層,25個神經元,以及將近12000個參數。AlexNet更大更復雜:8個可訓練的層、65萬個神經元和6000萬個參數。訓練這樣規模的網絡須要大量的算力,而AlexNet的設計就是利用現代GPU提供的大量並行算力。
研究人員想出瞭如何在兩個GPU之間分配網絡訓練的工做,從而使他們的算力提升了一倍。儘管進行了積極的優化,使用2012年水平的硬件(兩個Nvidia GTX 580 GPU,每一個有3GB內存)對網絡訓練依然耗費了5到6天。
看看AlexNet結果的一些例子,對咱們理解這是一個多麼引人矚目的突破頗有幫助。如下是那篇論文的插圖,展現了一些圖片樣本和AlexNet對應的top5分類猜想:
AlexNet可以識別出第一張圖片中包含了一隻蟎蟲,儘管這隻蟎蟲只是圖片邊緣的一小塊。該軟件不只能正確識別美洲豹,它的其餘先行猜想——美洲虎、獵豹、雪豹和埃及貓——都長得很像。AlexNet將蘑菇的圖片標註爲「傘菌」——蘑菇的一種。官方正確的標籤「蘑菇」是AlexNet的第二選擇。
AlexNet的「錯誤結果」一樣使人驚訝。照片上,一隻斑點狗站在櫻桃後面,旁邊寫着「斑點狗」,而官方的標籤是「櫻桃」。AlexNet意識到這張照片上有某種水果——「葡萄」和「接骨木果」是它的前五種選擇——但它沒有徹底意識到它們是櫻桃。
給AlexNet展現一張馬達加斯加貓在樹上的照片,它會猜一系列的小型爬樹哺乳動物。不少人(包括我)都會一樣地猜錯。這確實是一個引人矚目的表現,代表軟件能夠識別各類方向和排布中的常見對象。深度神經網絡迅速成爲圖像識別任務中最受歡迎的技術,機器學習的世界今後邁上快車道不回頭。
ImageNet的發起人寫道:「隨着基於深度學習的方法在2012年取得成功,2013年的絕大多數參賽做品都使用了深度卷積神經網絡。」這種模式持續了好幾年,後來的優勝者都是創建在AlexNet團隊開創的基本技術之上。到2017年,使用深度神經網絡的參賽者將top5錯誤率降至3%如下。考慮到這項任務的複雜度,能夠說這使得計算機比許多人更擅長這項任務。
這張來自ImageNet團隊的條形圖顯示了每一年top-5分類比賽中獲勝團隊的錯誤率。從2010年到2017年,錯誤率穩步降低。
從技術上講,AlexNet是一個卷積神經網絡。在本節中,我將解釋卷積網絡的做用,以及爲何這項技術對現代圖像識別算法相當重要。
咱們以前研究的簡單手寫識別網絡是全鏈接的:第一層的每一個神經元都是第二層神經元的輸入源。此結構比較適合相對簡單的任務,例如識別28×28像素圖像中數字。但進一步擴展就很難了。
在MNIST手寫數字數據集中,字符老是居中的。這大大簡化了訓練,由於這意味7在圖像的頂部和右側老是有一些黑色像素,而左下方老是白色的。0老是中間白塊,四周的像素則較暗。一個簡單的、全鏈接的網絡能夠至關容易地檢測這些類型的模式。
可是假如你想創建一個神經網絡來識別可能位於大圖中的任何位置的數字。一個全鏈接的網絡不擅長於此,由於它沒有一種有效的方法來識別位於圖像不一樣部分的形狀之間的類似性。若是你的訓練集的左上角剛好有大部分的7,那麼你會獲得一個網絡,它比圖像中其餘地方更善於識別左上角的7。
從理論上講,你能夠經過確保你的訓練集在每一個可能的像素位置上都有不少數字的樣原本解決這個問題。但在實踐中,這將是巨大的浪費。隨着圖像的大小和網絡的深度的增長,鏈接的數量——也就是輸入權重參數的數量——將會激增。你須要更多的訓練圖像和算力來達到足夠的準確性。
當神經網絡學習識別圖像中某個位置的形狀時,它應該可以將這種學習應用於識別圖像中其餘位置的相似形狀。卷積神經網絡爲這個問題提供了一個優雅的解決方案。
「這就像拿一個模板或模式,而後將其與圖像上的每個點進行匹配,」人工智能研究員唐傑(音)說。「你有一個狗的模板輪廓,而後發現右上角和你的模板基本匹配——那裏有條狗吧?」若是沒有,能夠稍微移動一下模板,遍歷整張圖片。狗出如今在圖像哪一個位置並不重要。模板會匹配到它。你不會想讓網絡的每一個子部分都學習本身單獨的狗識別器。
試想一下,若是咱們把一幅大圖像分紅28*28像素的小塊。而後,咱們能夠將每一個小塊輸入到以前所述的全鏈接的手寫識別網絡中。若是這些小塊中的「7」輸出至少有一個被點亮,就意味着整個大圖中可能有7的存在。這就是卷積網絡的本質。
在卷積網絡中,這些「模板」被稱爲特徵檢測器(feature detector),它們所觀察的區域被稱爲接受域(receptive field)。真正的特徵檢測器的接受域每每比邊長28像素小得多。在AlexNet中,第一個卷積層具備接受域爲11×11像素的特徵檢測器。它隨後的卷積層有3到5個單位寬的接受域。
當特徵檢測器掃過輸入圖像時,它會生成一個特徵圖(feature map):一個二維網格,表示該檢測器被圖像的不一樣部分激活的強度。卷積層一般有多個特徵檢測器,每一個檢測器掃描輸入圖像以尋找不一樣的模式。在AlexNet中,第一層有96個特徵檢測器,生成了96個特徵圖。
爲了更具體地說明這一點,如下是通過網絡訓練的AlexNet第一層中的96個特徵檢測器所學習的視覺模式的可視化表示。特徵檢測器能夠尋找水平或垂直的線條、從亮到暗的漸變、棋盤圖形和其餘形狀。
彩色圖像用像素分佈格式表示,每一個像素有三個值:紅值、綠值和藍值。AlexNet的第一層會將紅綠藍三位表示的像素概括爲96個類型值之一。圖像中的每一個「像素」(指第一層分割的單元)有96種可能的值,對應96種特徵檢測器。
在本例中,這96個值中的第一個值指示圖像中的某個特定點是否與此模式匹配:
第二個值指示某個特定點是否與此模式匹配:
第三個值表示某個特定點是否與此模式匹配:
如此類推,在AlexNet的第一層中,其餘93個特徵檢測器也是如此。第一層將圖像的每一個「像素」用一種新表現形式輸出——表示爲96個值(相似96進制?)的向量(我稍後將解釋,這個新表示形式也被按比例縮小四倍)。
這是AlexNet的第一層。接下來是另外四個卷積層,每一個層的輸入都是前一層的輸出。
正如咱們所看到的,第一層檢測基本的模式,如水平和垂直的線,光到暗的變化,以及曲線。而後,第二層使用第一層的結果做爲構建塊來檢測稍微複雜一些的形狀。例如,第二層可能有一個特徵檢測器,它經過組合第一層特徵檢測器的輸出來查找曲線,從而查找圓。第三層經過結合第二層的特徵找到更復雜的形狀。第4層和第5層能夠找到更復雜的模式。
研究人員Matthew Zeiler和Rob Fergus在2014年發表了一篇出色的論文,爲可視化相似ImageNet的五層神經網絡所識別的模式提供了一些有用的方法。
在下列插圖中,每張圖片(第一張除外)都有兩個部分。在右邊,你將看到一些縮略圖圖像,它們高度匹配了特定的特徵檢測器。它們9個分爲一組,每組對應一個不一樣的特徵檢測器。在左邊是一個地圖,它顯示了縮略圖圖像中的哪些特定像素產生了高度匹配。你能夠在第5層中最顯著地看到這一點,由於有一些特性檢測器能夠高度匹配爲狗、企業標識、獨輪車輪子等。
瀏覽這些圖像,你能夠看到每一層都可以識別比前一層更復雜的模式。第一層識別簡單的像素模式,看起來也並不十分相像。第二層識別紋理和簡單的形狀。在第三層,咱們能夠看到可識別的形狀,如汽車輪子和紅橙色的球體(多是西紅柿、瓢蟲或其餘東西)。
第一層的感覺域爲11X11單位大小,然後面的層的感覺域大小則爲3X3單位到5X5單位不等。可是請記住,後面的這些層接收的是前面的層生成的特徵圖,這些特徵圖中的每一個「像素」表示原始圖像中的n個像素。因此每一層的感覺域都包含了原始圖像中比前一層更大的部分。這就是爲何後期圖層的縮略圖看起來比早期圖層更復雜的緣由之一。
感覺域示意圖,from 深度神經網絡中的感覺野網絡的第五層也是最後一層可以識別這些圖像中最顯眼的大尺度元素。例如這張圖片,我從上面第5層圖片的右上角截取的:
右邊的9張圖片看起來可能不太類似。可是若是你看一下左邊的9張熱圖,你會發現這個特定的特徵檢測器並無聚焦於每張圖像前景中的物體。相反,它關注的是每一個圖像背景中的綠色部分!
顯然,若是你要識別的類別之一是「草」,那麼用「草檢測器」就合適了,可是它同時也可能檢測其餘東西。在五個卷積層以後,AlexNet有三個層是全鏈接的,就像咱們手寫識別網絡中的層同樣。這些層會利用第五卷積層生成的每一個特徵圖,嘗試將圖像分類爲1000個類別中的一個。
因此若是一幅畫的背景是草,那麼它更有多是野生動物。另外一方面,若是這幅畫的背景是草,那麼它不太多是一幅室內傢俱的畫。其餘位於第五層的特徵探測器提供了豐富的信息可用於猜想照片內容。網絡的最後幾層將這些信息綜合起來,對整個圖片所描繪的內容進行有理據的猜想。
咱們已經看到卷積層中的特徵檢測器執行了牛逼的模式識別,可是到目前爲止,我尚未解釋卷積網絡其實是如何工做的。
卷積層是一層神經元。像任何神經元同樣,這些神經元取其輸入的加權平均值,而後應用一個激活函數。用咱們討論過的反向傳播技術來訓練當中的參數。
但與上面的神經網絡不一樣,卷積層沒有全鏈接。每一個神經元只接受前一層神經元的一小部分輸入。更重要的是,卷積網絡中的神經元共享輸入權重。
讓咱們放大AlexNet的第一個卷積層中的第一個神經元。這一層的接受域大小是11×11像素,因此第一個神經元接收某角落的11×11像素。這個神經元接受這121個像素的輸入,每一個像素有三個值——紅、綠、藍。神經元總共有363個輸入。和任何神經元同樣,這個神經元取363個輸入值的加權平均值,而後應用一個激活函數。由於它有363個輸入值,它也須要363個輸入權重參數。
AlexNet第一層中的第二個神經元與第一個神經元很是類似。它一樣接收11×11像素,但它的接受域是從第一個神經元的接受域平移4個像素開始。這就在兩個接受域之間產生了7個像素的重疊,這就避免了遺漏兩個神經元之間的有趣模式。第二個神經元一樣接收描述11×11像素的363個值,每一個值乘以權重參數,求和,並調用一個激活函數。
特殊的是,第二個神經元沒有本身的一組363個輸入權重,而是使用與第一個神經元相同的輸入權重。第一個神經元的左上角像素使用與第二個神經元的左上角像素相同的輸入權重。因此這兩個神經元在尋找徹底相同的模式。它們的接受域之間有4個像素的偏移。
固然實際遠不止兩個神經元——圖片分爲55×55格共3025個神經元。這3025個神經元中的每個都使用與開始兩個神經元相同的363個輸入權重。全部這些神經元共同「掃描」圖像中可能存在的特定模式,組成一個特徵檢測器。
請記住,AlexNet的第一層有96個特性檢測器。我剛纔提到的3025個神經元組成了96個特徵探測器中的一個。其餘95個特徵探測器則是由各自的一組3025個神經元組成。每組3025個神經元與組內其餘神經元共享其363個輸入權重,但不是和其餘95個特徵檢測器的神經元共享。
卷積網絡的訓練使用與訓練全鏈接網絡相同的基礎反向傳播算法,可是卷積結構使得訓練過程更加高效。
「使用卷積很是有用,由於能夠重用參數,」機器學習專家和做家Sean Gerrish告訴Ars(本文原做者機構)。這大大減小了網絡須要學習的輸入權重的數量,這使得網絡能夠用更少的訓練樣本產生更好的結果。
從圖像的一個部分學到的識別模式,能夠轉化用於識別其餘圖像的其餘位置的相同模式。這使得網絡能夠經過更少的訓練實例來實現高性能。
AlexNet的論文在學術機器學習社區引發了轟動,它的重要性也很快獲得了業界的承認。谷歌對這項技術特別感興趣。
2013年,谷歌收購了AlexNet論文做者創辦的一家初創公司。他們利用這項技術爲谷歌照片添加了一個新的圖像搜索功能。谷歌的Chuck Rosenberg寫道:「咱們直接從一個學術研究實驗室進行了前沿研究,並在短短6個多月的時間裏啓動了它。」
與此同時,谷歌2013年的一篇論文描述了它如何使用深度卷積網絡從谷歌街景(Google Street View )的照片中讀取地址碼。「咱們的系統幫助咱們從街景圖像中提取了近1億個實體街道編號,」做者寫道。
研究人員發現,隨着神經網絡的發展,其性能不斷提升。谷歌街景團隊寫道:「咱們發現這種方法的性能隨着卷積網絡的深度而提升,在咱們訓練層級最多的架構中,性能最好。咱們的實驗代表,更深層次的架構可能得到更好的準確性,但效率會逐漸下降。」
因此在AlexNet以後,神經網絡變得愈來愈深。一個谷歌的團隊在2014年ImageNet競賽中提交的做品得到了優勝——就在2012年AlexNet獲勝的兩年後。和AlexNet同樣,它也是基於一個深度卷積神經網絡,可是谷歌使用了一個更深層的22層網絡,從而得到了6.7 %的top5錯誤率——這比AlexNet的16%錯誤率有了很大的提升。
不過,更深層的網絡只對大型訓練集有用。基於這個緣由,Gerrish認爲ImageNet數據集和競爭對深度卷積網絡的成功起到了關鍵做用。你們還記得嗎?ImageNet競賽給了參賽者一百萬張圖片,要求他們從1000個不一樣的類別中選擇一個。
Gerrish說:「擁有100萬張圖片來訓練你的神經網絡,意味着每一個類別有1000張圖片(1m/1000 = 1000)。」他說,若是沒有這麼大的數據集,「你訓練網絡的參數就多得多。」
近年來,人們聚焦於收集更大的數據,以便訓練更深刻、更準確的網絡。這是自動駕駛汽車公司如此專一於在公共道路上積累里程的一大緣由——來自測試的圖像和視頻被送回總部,用於培訓公司的圖像識別網絡。
更深層次的網絡和更大的訓練集能夠提供更好的性能,這一發現對更多的算力產生了沒法知足的需求。AlexNet成功的一個重要緣由是意識到,神經網絡訓練涉及矩陣運算,可使用顯卡高度並行的算力高效地執行這些運算。
「神經網絡是可並行的,」機器學習研究員唐傑說。顯卡原本是爲視頻遊戲提供大規模並行算力的,結果很是適合神經網絡使用。
「GPU的核心運算是極快的矩陣乘法,最終成爲神經網絡的核心運算,」唐說。
這爲英偉達(Nvidia)和AMD這兩家行業領先的GPU製造商帶來了滾滾財源。這兩家公司都致力於開發適應機器學習應用程序獨特需求的新芯片,而人工智能應用程序目前在這些公司的GPU銷售中佔據了至關大的比例。
2016年,谷歌公開了一個定製芯片,稱爲張量處理單元(TPU),專門用於神經網絡操做。谷歌2017年寫道,雖然他們早在2006年就考慮過爲神經網絡構建專用集成電路(ASIC),但2013年這種狀況變得緊迫起來。
「就在那時,咱們意識到神經網絡快速增加的計算需求可能要求咱們將運營的數據中心數量增長一倍。」最初,TPU僅容許谷歌本身的專有服務使用,但後來,谷歌開始容許任何人經過它的雲計算平臺使用這項技術。
固然,谷歌並非惟一一家致力於人工智能芯片的公司。一個小例子是,iPhone最新版本的芯片就包括一個爲神經網絡操做優化的「神經引擎」。英特爾正在開發本身的針對深度學習的優化芯片系列。特斯拉最近宣佈放棄英偉達的芯片,轉而採用自制神經網絡芯片。亞馬遜聽說也在開發本身的AI芯片。
我已經解釋了深度神經網絡是如何工做的,但我尚未真正解釋它們的工做何以那麼出色。大量的矩陣運算可讓計算機區分美洲虎和獵豹,接骨木和醋栗,這真使人驚訝。
但也許神經網絡最值得注意的地方是它們作不到的事。卷積使神經網絡可以理解平移——它們能夠判斷一幅圖像的右上角的模式是否與另外一幅圖像的左上角的模式類似。
但除此以外,卷積網絡並無真正的理解幾何圖形。若是圖像旋轉45度或放大2倍,他們就沒法識別出這兩幅圖像是否類似。卷積網絡並無嘗試去理解三維物體的結構,並且它們也不能識別不一樣的光照條件。
然而,深度神經網絡可以識別狗的圖片,不管它們是正面仍是側面拍攝的,不管它們是佔據了圖片的一小部分仍是很大一部分。
神經網絡是怎麼作到的?事實證實,有了足夠的數據,暴力統計方法就足以完成這項工做。卷積網絡的設計初衷並非「想象」若是從不一樣的角度或在不一樣的環境下,一張特定的圖像會是什麼樣子,可是有了足夠多的標記樣本,它能夠經過純粹的重複來學習全部可能的排列。
有證據代表,人類的視覺系統其實是以相似的方式工做的。咱們來看這兩張圖片(在看第二張圖片以前,確保你仔細看了第一幅圖片):
顯然,這張照片的創做者把人像的眼睛和嘴巴顛倒過來,再把整張照片翻過來。當你把圖像倒過來看時,它看起來相對正常,由於人類的視覺系統已經習慣了在這個方向上看眼睛和嘴。可是當你看後者時,就會發現人像面容變得畸形。
這代表人類視覺系統依賴於一些與神經網絡相同的粗糙模式匹配技術。若是咱們看到的東西幾乎都是同一個方向的——就如人類的眼睛——咱們就能更好地識別出它們一般的方向。
神經網絡善於利用圖片中的全部環境來理解它所顯示的內容。例如,汽車一般出如今道路上。裙子一般要麼出如今女性的身體上,要麼掛在衣櫥裏。飛機要麼在藍天的陪襯下出現,要麼在跑道上滑行。沒有人明確地教神經網絡這些相關性,但有足夠多的標記樣本,網絡能夠自動學習它們。
2015年,谷歌的一些研究人員試圖經過「反向操做」來更好地理解神經網絡。他們不是用圖像來訓練神經網絡,而是用訓練過的神經網絡來修改圖像。
好比,他們從一幅包含隨機噪聲的圖像開始,而後逐漸修改它,使其強烈地「點亮」神經網絡的輸出之一——要求神經網絡高效地「繪製」一個它被訓練識別的類別。在一個有趣的例子中,他們用一個被訓練用來識別啞鈴的神經網絡來畫圖。
研究人員在研究報告中寫道:「這些是啞鈴沒錯,但彷佛都畫出了肌肉發達的舉重運動員來舉啞鈴。」
乍一看,這彷佛很奇怪,但實際上這與人類的行爲並無太大的不一樣。若是咱們在一幅圖像中看到一個小的或模糊的物體,咱們就會觀察周圍的環境,尋找圖片中可能發生的事情的線索。很明顯,人類經過不一樣的方式對圖像進行推理,利用咱們對周圍世界複雜的概念理解。
總而言之,深層神經網絡擅長於圖像識別,是由於它們充分利用了圖片中顯示的全部環境,這與人類的識別方式並無太大的不一樣。(完)