大圖類比:CNN就像夏洛克
讓我們首先假裝在終結者的心靈中生活著一個名叫夏洛克的特殊偵探。他的工作是仔細查看證據(輸入圖像)並使用他敏銳的眼睛和演繹能力(特徵檢測),預測誰在圖片中並破解案例(正確分類圖像)。
以下9個步驟中的每個步驟都將成為這個大圖片類比的一部分。
輸入:一張圖片勝過一千個數字
當我看這張照片時,我看到了一個有遠見的人。 一個人正在同時改善地球並建造一個逃脫它的火箭,以防終結者試圖炸掉它。與計算機不同,我看不到像素值,我看不出圖片是由紅色、綠色和藍色疊加組合形成:
另一方面,計算機(即天網)是隻能看到數字。
將數碼照片看作3個電子表格(1個紅色、1個綠色、1個藍色)堆疊在一起,每個電子表格都是數字矩陣。拍攝照片時,相機會測量到每個像素的紅色、綠色和藍色光量。 然後,按0-255的等級對每個像素進行排名,並將它們記錄在電子表格中:
在上面的28x28圖像中,每個像素由3行(1個紅色,1個藍色和1個綠色)表示,其值為0-255。 像素已根據其值有條件地格式化。
如果我們將每種顏色分成單獨的矩陣,我們會有3個28x28矩陣,每個矩陣都是我們用來訓練神經網絡的輸入:
*補充工具欄:如果您想了解如何在大約30秒內將任何圖片轉換為有條件格式的Excel文件,請點擊:
http://think-maths.co.uk/spreadsheet
你將學習如何使用你的電子表格同事喜歡的“Ex-celfie”...相信我,他們會在電子表格中看到你的杯子(或他們的杯子)good笑(small小圖片效果最好))。
訓練概述 - 像計算機一樣,像孩子一樣
你出生的時候,你知道狗是什麼嗎? 當然不知道。 但隨著時間的推移,你的父母會在書中、卡通片、現實生活中向你展示狗的照片,最終,你可以指著那些四條腿的毛茸茸的動物,認出它們是“狗”。大腦中數十億神經元之間的聯繫變成了讓你可以識別狗。
終結者將會以同樣的方式看到Elon Musk。 通過一個稱為監督訓練的過程,它展示了成千上萬的Elon Musk、Jeff Bezos和Jon Snow的照片。 起初,它有三分之一的機會猜測它是誰......但就像一個孩子的成長,它會隨著時間的推移而改善,因為它在訓練期間看到了更多的圖像。 網絡的連接或“權重/偏差”隨時間更新,使得它可以基於像素輸入預測圖像輸出。 這是第1部分討論的學習過程(梯度下降)。
那麼是什麼使卷積神經網絡與普通神經網絡不同?
用2個詞:平移不變性。
讓我們解構下它的意思:
對於計算機視覺,這意味著無論對象在圖像中的移動位置(平移)是什麼樣子,它都不會改變該對象的內容(不變性)。
卷積神經網絡必須經過訓練才能識別出Elon的特徵,無論他在圖像中的位置,無論他的大小。
CNN擅長識別圖像任何部分的圖案,然後將這些圖案疊加在一起,以構建更復雜的圖案,就像人類一樣。
在普通神經網絡中,我們將每個單獨的像素視為我們模型的輸入(而不是3個矩陣),但這忽略了這樣的事實:像素靠近在一起具有特殊的意義和結構。有了CNN,我們可以查看彼此相鄰的像素組,這樣模型就可以瞭解到局部的圖案,比如,形狀、線條等。如果CNN在黑色圓圈周圍看到許多白色像素,它會將此模式識別為 眼睛。
為了讓CNN實現平移不變性,他們依靠偵探福爾摩斯的特徵檢測。
《福爾摩斯探案集》——特色偵探
“夏洛克生活在終結者的心中”。 使用他的放大鏡,他一次次去仔細檢查一張圖像,找到該圖像的重要特徵或“線索”。當他收集簡單的線條和形狀的線索時,他會將它們堆疊在一起,就會漸漸看到像眼睛或鼻子這樣的面部特徵。
每個卷積層都包含一堆特徵映射或相互構建的“線索”。在案件結束時,他將所有這些線索都放在一起,才能夠破解案件並正確識別他的目標。
網絡的每個卷積層都具有一組特徵圖,這些特徵圖可以以下面的分層方式來識別越來越複雜的圖案、形狀。
CNN使用數字模式識別來確定圖像的最重要的特徵。 由於它將這些模式堆疊在一起,層次更多,因此可以構建非常複雜的特徵映射。
現實生活中的CNN也和夏洛克完全一樣:
卷積神經網絡檢測特徵
CNN如此驚人的原因是他們自己可以自己學習這些功能。工程師就像是架構師,他們告訴夏洛克,“我給你2張空白的特徵圖(”線索“)堆棧(”卷積層“),你的工作是分析圖片並找到最重要的線索。第一個堆棧有16個特徵映射(“線索”),第二個堆棧有64個特徵映射,現在使用你的偵探技能去解決案例吧。”
為了讓Sherlock找到案件中的“線索”(即“計算一張特色地圖”),他會在他的“偵探”套件中選擇幾個工具,我們將一一介紹:
夏洛克的“放大鏡”/濾鏡
夏洛克毫無疑問具有敏銳的觀察能力,但如果沒有他的特殊放大鏡或“過濾器”,他就無法完成他的工作。他會使用不同的放大鏡來幫助他填寫每個空白特徵圖的細節。所以,如果他有16張特色地圖,就會有16個放大鏡。
每個放大鏡由多層玻璃組成,每層玻璃由不同重量的玻璃組成。玻璃層的數量,我們的“過濾器深度”,總是與他正在觀察的輸入層的層深度相匹配。
起初,Sherlock正在查看我們的輸入圖像,它有3層,紅色、綠色和藍色。所以...我們的放大鏡也有3層。
當我們建造CNN時,我們的層深度增加,所以放大鏡也會變厚。
為了讓夏洛克建立1個特徵地圖或“線索”,他首先取出1個放大鏡並將其放在輸入圖像的左上部分。紅色玻璃層只能看到紅色輸入圖像,綠色玻璃看到綠色圖像,藍色玻璃看到藍色圖像。
現在進行數學計算。
卷積數學
我們的要素圖中的每個像素都是線索的一部分。為了計算每個像素,夏洛克必須執行一些基本的乘法和加法。
在下面使用5x5x3輸入圖像和3x3x3濾波器的示例中,1像素需要27次乘法:
讓我們放大並查看數學。一個像素由27次乘法組成(每層3層×9次乘法),下面的屏幕截圖顯示了27次乘法中的9次:
就偏見而言,您可以將其視為一個放大鏡的手柄。與權重一樣,它是模型的另一個參數,每次訓練都會調整以提高模型的準確性並更新要素圖的詳細信息。
過濾權重——在上面的例子中,我將權重保持為1和0以使數學更容易;但是,在普通神經網絡中,您可以使用隨機較低的值初始化起始權重。使用鐘形曲線或正態分佈類型方法,如(.01)和0.1之間的值。
Striding——移動“放大鏡”
在計算了特徵圖中的第一個像素後,夏洛克在哪裡移動他的放大鏡?
答案取決於參數。作為架構師、工程師,在計算他的特徵圖中的下一個像素之前,我們必須告訴夏洛克他應該移動多少像素或大步向右移動多少的像素。在實踐中,2或3的步幅是最常見的,但我們將堅持使用1以保持簡單。這意味著夏洛克將他的“放大鏡”向右移動1個像素,然後他將執行與之前相同的卷積計算。
當他的玻璃到達輸入圖像的最右邊時,然後他將放大鏡向下移動1個像素,一直向左移動。
為什麼你會超過1?
優點:
通過減少計算和減少存儲在內存中的計算,使模型更快。
缺點:
您丟失了有關圖片的信息,因為您會跳過像素並可能錯過看到的圖案。
2或3的步幅通常是有意義的,因為緊鄰的像素通常具有相似的值,但是如果它們相距2-3個像素,則更有可能是對於特徵圖、圖案重要的像素值的變化。
如何防止信息丟失(丟失線索)
為了讓夏洛克破解他的案子,他在案件開始時需要很多線索。在上面的例子中,我們採用了一個5x5x3圖像,或75像素的信息(75 = 5 x 5 x 3),我們只得到了一個3x3x2圖像,或18像素(18 = 3 x 3 x 2)在第一個卷積層之後。這意味著我們失去了證據,這讓他的搭檔John Watson非常沮喪。
在CNN的前幾層中,夏洛克更喜歡一些微小的模式(更多線索)。在後面的圖層中,可以“down-sample”(降採樣),並減少像素的總體積(減少線索),因為夏洛克會堆疊微小的線索並查看較大的圖案。
那麼我們如何在CNN開始時防止這種信息丟失呢?
#1:填充 - 我們必須在圖像周圍“填充”來保護犯罪現場。
在我們的例子中,我們只能在我們到達右邊緣之前移動過濾器3次...並且從上到下都是相同的。這意味著我們得到的輸出高度/寬度為3x3,我們從左到右丟失了2個像素,從上到下移動我們的濾鏡時又損失了2個像素。
為了防止這種信息丟失,通常用零填充原始圖像(稱為“零填充”或“相同填充”)...這有點像犯罪現場磁帶,這樣才能確保沒有人篡改這樣的線索:
在填充之後,如果Sherlock再次使用相同的放大鏡,他的2個特徵圖將是5x5而不是3x3。
這意味著我們將留下50個像素的信息,因為這個卷積的新輸出是5x5x2 = 50。
50像素比18好。但我們從75像素開始的,所以我們仍然缺少一些線索。
那麼我們還能做些什麼?
#2:更多過濾器 - 通過向卷積層添加至少1個特徵映射,為夏洛克提供更多線索
我們的模型具有的特徵映射數或“線索”沒有限制,這是我們控制的參數。
如果我們將要素圖從2增加到至少3(5x5x2 ...到... 5x5x3),那麼我們的總輸出像素(75)與輸入像素(75)匹配,我們確保沒有信息丟失。如果我們將地圖增加到10,那麼當我找到他的線索時,我們會有更多的信息讓夏洛克排序(250像素= 5 x 5 x 10)。
總之,前幾層中的總像素信息通常高於我們的輸入圖像,因為我們希望為夏洛克提供儘可能多的微小線索/模式。在我們網絡的最後幾層中,下采樣具有較少的像素是常見的,因為這些層正在識別圖像的較大圖案。
非線性模式識別 - ReLUs
在一個案例中為夏洛克提供足夠的信息很重要,但現在是時候進行真正的偵探工作了——非線性模式識別!就像耳朵的曲率或鼻子的鼻孔。
到目前為止,夏洛克已經做了一堆數學運算來構建他的特徵映射,但每個計算都是線性的(採用輸入像素並對每個像素執行相同的乘法/加法),因此,他只能識別像素的線性模式。
為了在CNN中引入非線性,我們使用稱為整流線性單元的激活函數或簡稱為“ReLU”。在我們從第一個卷積計算我們的特徵映射之後,每個值都通過此函數運行,以查看它是否亮起或“激活”。
如果輸入值為負,則輸出變為零。如果輸入為正,則輸出值保持不變。 ReLU的作用類似於開/關開關,在通過ReLU運行要素圖的每個值後,您將創建非線性模式識別。
回到我們最初的CNN示例,我們將在卷積後立即應用ReLU:
雖然有許多非線性激活函數可用於將非線性引入神經網絡,但ReLU是當今CNN中最常用的,因為它們具有計算效率, 可以更快的學習。 查看Andrej Karpathy對非線性激活函數的概述,以瞭解每個函數的優缺點。
Max Pooling - 保持大腦中的關鍵
現在,夏洛克有一些功能圖或“線索”,開始查看,他如何確定哪些信息對於不相關的細節至關重要?
夏洛克認為人腦就像一個空閣樓。傻瓜才會在那裡存放各種各樣的傢俱和物品,這樣有用的信息最終會在所有混亂中丟失。 聰明人只存儲最重要的信息,因為這些信息可以讓他們在被召喚時快速做出決定。這樣一來,《神探夏洛克》裡的“腦閣樓”(brain attic)就變成了“max pooling”。為了讓他迅速做出決定,他只保留最重要的信息。
通過最大池化,他查看像素的鄰域並且僅保留“最大”值或“最重要”的證據。
例如,如果他正在觀察2x2區域(4個像素),他只保留具有最高值的像素並丟棄其他3個。這種技術使他能夠快速學習並且還幫助他概括(而不是“記憶”) 他可以存儲和記住未來圖像的線索。
與之前的放大鏡過濾器類似,我們還控制最大池的跨度和池大小。 在下面的示例中,我們假設步長為1和2x2池大小:
在最大池化之後,我們完成了1輪卷積/ ReLU /最大池化。
在典型的CNN中,在我們進入分類器之前,會有幾輪卷積/ ReLU /池。 每一輪,我們都會在增加深度的同時擠壓高度/寬度,這樣我們就不會丟失一些證據。
第1-5步的重點是收集證據,現在是夏洛克查看所有線索並解決案例的時候了:
現在我們有了證據,讓我們開始理解這一切......
當夏洛克到達訓練循環結束時,他有一大堆散落在整個地方的線索,需要一種方法來同時查看所有這些線索。 每條線索都是一個簡單的二維價值矩陣,但我們有成千上萬的堆疊在一起。
作為一名私人偵探,夏洛克需要在這種混亂中茁壯成長,也必須將他的證據帶到法庭並組織他們作陪審團。
它採用的是這樣一種方法:
這就是人類眼睛的轉變......
回到我們的例子,這是計算機看到的......
既然夏洛克已經組織了他的證據,他現在是時候讓陪審團相信證據明確指出了1個嫌疑人。
在完全連接的層中,我們將證據連接到每個嫌疑人。 從某種意義上說,我們通過向他們展示證據以及與每個嫌疑人之間的聯繫,為陪審團“連接點”:
以下是計算機使用我們的數值示例看到的內容:
完全連接的層
在展平層和3個輸出中的每個證據之間是一堆權重和偏差。 與網絡中的其他權重一樣,當我們首次開始訓練CNN時,這些權重將以隨機值初始化,並且隨著時間的推移,CNN將“學習”如何調整這些權重/偏差以導致越來越準確的預測。
現在是夏洛克破解案件的時候了!
在CNN的圖像分類器階段,模型的預測是具有最高分數的輸出。目標是獲得正確輸出的高分和不正確輸出的低分。
這個評分函數有兩部分:
第1部分:Logits - 邏輯分數
每個輸出的logit分數是基本的線性函數:
Logit分數=(證據x權重)+偏差
每一個證據乘以連接證據與輸出的權重。所有這些乘法都加在一起,我們在末尾添加一個偏差項,最高分是模型的猜測。
那我們為什麼不就此止步呢? 2個直觀原因:
夏洛克的目標是讓他的預測儘可能接近1,以獲得正確的輸出。
第2部分:Softmax - 夏洛克的置信度加權概率分數
2.1.夏洛克的自信程度:
為了找到他的置信水平,我們取字母e(等於2.71828 ......)並通過logit得分提高或“取冪”它。分數越高,自信心越高,分數越低,自信心越低。
此取冪計算還確保我們沒有任何負分數。由於我們的logit分數“可能”為負數,所以這是取冪後假設logit分數發生的情況:
2.2夏洛克的置信加權概率:
為了找到置信加權概率,我們將每個輸出的置信度量除以所有置信度得分的總和,這給出了每個輸出圖像的概率,所有這些都加起來為1。使用我們的Excel示例:
這個softmax分類器很直觀。 夏洛克認為,終結者看到的照片是伊隆馬斯克的97%(置信度加權)機會。
我們模型的最後一步是計算我們的損失。
每個神經網絡都有一個損失函數,我們將預測與實際情況進行比較。當我們訓練CNN時,隨著我們調整網絡的權重/偏差,我們的預測得到改善(夏洛克偵探技能變得更好)。
CNN最常用的損耗函數是交叉熵損失。谷歌對交叉熵的搜索引發了許多希臘字母的解釋,因此很容易混淆。儘管描述各不相同,但它們在機器學習的背景下都是相同的,所以我們將覆蓋下面最常見的3個,這樣它就會為你“點擊”。
在處理每個公式變體之前,以下是他們各自做的事情:
#1解釋 - 實際概率與預測概率之間距離的度量
距離捕獲的直覺是,如果我們的預測對於正確的標籤接近1,則我們的成本接近0。如果我們的預測接近於0以獲得正確的標籤,那麼我們將受到嚴厲懲罰。目標是最小化正確類別預測(Elon,0.97)與正確類別(1.00)的實際概率之間的“距離”。
在解釋#2中討論了獎勵/懲罰“對數”公式背後的事情
#2解釋 - 最大化對數似然或最小化負對數可能性
在CNN中,“log”實際上意味著“自然對數(ln)”,它是在softmax的步驟1中完成的“取冪/置信度”的倒數。
日誌計算不是採用實際概率(1.00)並減去預測概率(0.97)來計算成本,而是夏洛克將他的預測距離1.00更遠。
#3解釋 - KL分歧
KL(Kullback-Leibler)發散度衡量我們的預測概率(softmax得分)與實際概率的差異程度。
該公式分為兩部分:
在我們特殊的卷積偵探夏洛克的幫助下,我們給了終結者一雙眼睛,所以他現在有能力尋找並摧毀自由世界的保護者“ Elon Musk”(對不起Elon!)。
雖然,我們只訓練終結者來區分Elon、Jeff和Jon ......但天網其實擁有無限多的資源和訓練圖像,因此它可以利用我們構建內容並訓練終結者來查看任何人或物。
其他資源 - 互動
畫一個數字然後用CNN預測它
使用Google +您的網絡攝像頭訓練您自己的CNN(或只是觀看)
Andreij Karpathy的實時圖像分類模型
查看Fast.AI在CNN上的YouTube視頻(非互動,但有精彩的講座和深度學習系列)
我們未來的命運掌握在與機器的戰爭中
閱讀更多 AI中國 的文章