神探Sherlock如何用AI破案?教你在Excel中搭建一我的臉識別CNN網絡


做者 | Dave Smithgit

譯者 | 劉暢緩存

編輯 | 阿司匹林、Jane網絡

出品 | AI科技大本營機器學習


【導讀】人臉識別技術已經有了很是普遍的應用,國內大規模監控系統背後運用的技術就是人臉識別。函數


與你們常規見到的搭建人臉識別的神經網絡方法不一樣,本文做者 Dave Smith 走了一次不一樣尋常路,他在 Excel 中用 9 步就搭建了一我的臉識別的CNN 神經網絡,讓神探 Sherlock 識別出世界的終結者 「Elon」!在這篇文章中,做者試圖以直觀的可視化方式呈現出代碼背後發生的事情,但願能夠幫助你們消除學習過程當中的一些疑慮,工具


本文的目標就是爲您提供一個簡單的機器學習入門,將涵蓋下圖所示的 9 個步驟。學習


補充工具:幫助你們瞭解如何在 30 秒左右的時間將任意一張圖片轉換爲有條件格式的Excel 文件動畫

http://think-maths.co.uk/spreadsheetgoogle



終結者視角—在電子表格中建立卷積神經網絡編碼



背景


咱們首先假設,在終結者的大腦中有一個名叫'Sherlock Convolution Holmes'的特殊偵探。他的工做就是仔細查看證據(輸入圖像)並使用敏銳的眼睛和推演能力(特徵檢測),預測圖片中的人物是誰以此來破案(正確分類圖像)。


注:爲了減小你們對後面內容的疑惑,首先劇透一點,這篇文章的「男主」實際上是 Sherlock Convolution Holmes 。做者多是神探夏洛克的粉絲,整篇文章都是圍繞 Sherlock 是如何破案來展開的。


咱們將用電子表格模型來查看圖片,分析像素值,並預測它是不是 Elon Musk,Jeff Bezos 或者 Jon Snow,顯然這三我的是 Skynet 最大的威脅。用圖像化來比喻,CNN就像 Sherlock Holmes。這個過程當中會使用到一些數學公式,咱們在這裏給出了參考連接,方便你們學習。


參考連接:

https://drive.google.com/open?id=1TJXPPQ6Cz-4kVRXTSrbj4u4orcaamtpGvY58yuJbzHk


如下9個步驟中的每一個步驟都是這個圖像化比喻的一部分。


卷積神經網絡體系結構



第一步



輸入:一張圖片就像是成千上萬的數字


下面是咱們的輸入圖片,咱們是如何對這張照片進行操做的呢?



將數碼照片看做3個電子表格(1個紅色,1個綠色,1個藍色)堆疊在一塊兒,每一個電子表格都是一個數字矩陣。拍攝照片時,相機會測量每一個像素的紅色,綠色和藍色光量。而後,按 0-255 的等級對每一個像素進行排名,並將它們記錄在電子表格中:



在上面的 28x28 圖像中,每一個像素由 3 行(1個紅色,1個藍色和1個綠色)表示,其值爲 0-255。其中像素已根據其值進行了格式化。


沒有看到真實的眼睛,看到的只是一堆數字


若是咱們將每種顏色分紅單獨的矩陣,就會獲得 3 個 28x28 矩陣,而每一個矩陣都是訓練神經網絡的輸入:


模型輸入


訓練概述


在你剛出生的時候並不認識什麼是狗。但在你成長的過程當中,你的父母會在書中,動畫片,現實生活中向你展現狗的照片,最終你能夠指着那些四條腿毛茸茸的動物說「這是隻狗」。這是因爲大腦中數十億神經元之間的聯繫變得足夠強大,讓你能夠識別狗。

終結者也是以一樣的方式學會誰是 Elon。經過一個監督訓練的過程,咱們給它展現成千上萬張 Elon Musk,Jeff Bezos 和 Jon Snow 的照片。起初,它有三分之一的機會猜中,但就像一個小孩,隨着時間的推移這個概率會提升。網絡的鏈接或「權重/誤差」就會隨着時間更新,使得它能夠基於像素級的輸入去預測圖片輸出。



那麼是什麼使卷積神經網絡與普通神經網絡不一樣呢?


5個字:平移不變性。讓咱們來簡單解析它一下:


  • 平移 = 從一個地方移動到另外一個地方

  • 不變性 = 保持不變


對於計算機視覺,這意味着不管咱們把目標移動到哪一個位置(平移),它都不會改變目標的內容(不變性)。


平移不變性(還可加上尺度不變性)


不管他在圖像中什麼位置(平移),什麼大小(尺度不變),卷積神經網絡通過訓練都能識別到 Elon 的特徵。CNN 擅長識別圖像任何部分的模式,而後將這些模式疊加在一塊兒,以構建更復雜的模式,就像人類同樣。

在普通神經網絡中,咱們將每一個單獨的像素視爲咱們模型的輸入(而不是3個矩陣),但這忽略了相鄰像素是具備特殊的意義和結構。對於 CNN,咱們關注彼此相鄰的像素組,這容許模型學習像形狀,線條等的局部模式。例如,若是 CNN 在黑色圓圈周圍看到許多白色像素,它會將此模式識別爲眼睛。

爲了讓 CNN 實現 translation variance,他們必須依靠特徵檢測,也就是Sherlock Convolution Holmes 。



第二步


▌特徵檢測:碰見 Sherlock Convolution Holmes


Sherlock 使用放大鏡,仔仔細細地檢查每一張圖像,找到該圖像的重要特徵或「線索」。而後將這些簡單的線條和形狀特徵堆疊在一塊兒,就能夠開始看到像眼睛或鼻子這樣的面部特徵。



每一個卷積層都會包含一堆特徵圖或相互構建的「線索」。在全部卷積完成事後,他將全部這些線索放在一塊兒,就破解了案件並正確識別出目標。


每一個特徵圖都像是另外一個「線索」


網絡的每一個卷積層都有一組特徵圖,這些特徵圖使用分層方式來識別愈來愈複雜的圖案/形狀。CNN 使用數字模式識別來肯定圖像最重要的特徵。它使用更多的層將這些模式堆疊在一塊兒,所以能夠構建很是複雜的特徵圖。



卷積神經網絡檢測特徵


讓人吃驚的是,CNN 他們能夠本身學習到這些特徵,而不須要工程師編寫代碼教他學習什麼是2隻眼睛,1個鼻子,嘴巴等等。


在這種方式下,工程師更像是建築師。他們告訴 Sherlock,「我給你 2 個空白特徵圖(「線索」)的堆棧(「卷積層」),你的工做是分析圖片並找到最重要的線索。第一個堆棧包含 16 個特徵圖(「線索」),第二個堆棧包含 64 個特徵圖.。接下來就能夠利用這些偵探技巧去解決問題吧!」



第三步:



爲了讓 Sherlock 找到案件中的「線索」(即「計算一張特徵圖」),他須要使用幾個工具,咱們將一一介紹:


  • 濾波器——sherlock 的放大鏡

  • 卷積數學——濾波器的權重x輸入圖像的像素

  • 步長——在輸入圖像上移動濾波器

  • 填充——像「犯罪現場的警惕線」,用來保護線索


Sherlock 的放大鏡(濾波器)


Sherlock 毫無疑問很是敏銳且具備極高的洞察能力。但若是沒有他的特殊放大鏡或「濾波器」,他就沒法完成他的工做。所以他使用不一樣的放大鏡來幫助他填充每一個空白特徵圖的細節。 因此,若是他有 16 張特徵圖,他就會用 16 個放大鏡。

每一個放大鏡由多層玻璃組成,每層玻璃重量不一樣。玻璃層的數量,也就是咱們的「濾波器深度」,老是與觀察的神經網絡層的深度相匹配。


一開始,Sherlock查 看的輸入圖像,它有3層,紅色,綠色和藍色。因此,咱們的放大鏡也有 3 層。當咱們構建 CNN時,隨着層深度增長,咱們的放大鏡也會變得更厚。

爲了創建 1 個特徵圖或「線索」,Sherlock 首先取出 1 個放大鏡並將其放在輸入圖像的左上部分。紅色玻璃層只能看到紅色輸入圖像,綠色玻璃看到綠色圖像,而藍色玻璃看到的是藍色圖像。

接下來是進行數學計算。


卷積數學



咱們特徵圖中的每一個像素都是線索的一部分。爲了計算每一個像素,Sherlock 必須運用一些基本的乘法和加法。

在下面的例子中,咱們將使用 5x5x3 的輸入圖像和 3x3x3 的濾波器,每一個像素點須要 27 次乘法:


  • 3 層 x 每層 9 次卷積= 27

  • 將 27 個數字加在一塊兒。

  • 將 27 個計算結果加在一塊兒以後,咱們再加上1個數字—也就是偏置(bias)。



卷積計算——創建特徵地圖


讓咱們放大來看。一個像素由27次乘法組成,下面圖片顯示了 27次 乘法中的 9 次:

就偏置而言,您能夠將其視爲每一個放大鏡的手柄。與權重同樣,它是模型的另外一個參數,每次訓練都會調整這些參數以提升模型的準確性並更新特徵圖。

濾波器權重——在上面的例子中,將權重保持在1 和 0 是爲了計算更方便; 可是,在正常神經網絡中,可使用隨機較低的值來初始化權重,如使用(0.01)和(0.1)之間的鐘形曲線或正態分佈類型方法。


元素乘法—用來計算1條線索


步長:移動放大鏡


在計算了特徵圖中的第一個像素後,Sherlock 會怎樣移動他的放大鏡?

答案就是步長參數。做爲神經網絡的建築師/工程師,在 Sherlock 計算特徵圖下一個像素以前,咱們必須告訴他應該向右移動多少像素。在實踐中,2 或 3 的步長是最多見的,爲了便於計算咱們這裏設置步長爲 1。這意味着 Sherlock 將他的放大鏡向右移動 1 個像素,而後再執行與以前相同的卷積計算。

當放大鏡到達輸入圖像的最右邊時,他會將放大鏡向下 1 個像素並移動到最左邊。


爲何步長會超過 1?


優勢:經過減小計算和緩存,使模型訓練速度更快。

缺點:步長大於 1 時,你會由於跳過一些像素從而致使丟失圖片的信息,並可能錯過一些學習模式。


可是設置步幅爲 2 或 3 也是合理的,由於緊鄰的像素一般具備類似的值,可是若是它們相距 2-3 個像素,則更有多是對於特徵圖/模式更重要的像素值變化。

如何防止信息丟失(丟失線索)


爲了破解這個案子,Sherlock 在一開始的時候就須要不少線索。在上面的例子中,咱們採用了一張 5x5x3 圖像,也就是 75 位像素的信息(75 = 5 x 5 x 3)。在第一個卷積層後,咱們只獲得了一個 3x3x2 圖像,也就是 18 位像素(18 = 3 x 3 x 2)。這意味着咱們丟失了部分證據,這將會讓他的搭檔John Watson 很是生氣。


在 CNN 的前幾層中,Sherlock 會看到不少細微的模式,這是一個增長線索的過程。而在後面的層中,能夠經過「下采樣」的方法來減小線索,Sherlock會將細微的線索堆積起來以便查看更清晰的模式。


那麼咱們如何防止信息丟失呢?


1:填充:咱們必須在圖像周圍進行「填充」來保護犯罪現場。



在咱們的例子中,在到達右邊緣以前須要移動濾波器 3 次,從上到下都是同樣的。這意味着咱們獲得的輸出高度/寬度爲 3x3,那咱們從左到右時丟失了2 個像素,而從上到下移動時咱們又損失了 2 個像素。

爲了防止這種信息丟失,一般用零填充原始圖像(稱爲「零填充」或「相同填充」),就像犯罪現場佈置的警惕線同樣,來保證沒有人篡改線索。


在填充以後,若是 Sherlock 再次使用相同的放大鏡,那他的 2 個特徵圖將是 5x5 而不是 3x3。這意味着咱們將留下 50 個像素的信息,由於這個卷積的新輸出是 5x5x2 = 50。50 像素比 18 像素要好。可是,咱們是從 75 像素開始的,因此咱們仍然丟失了一些線索。



除此以外咱們還能作些什麼呢?

2:使用更多的濾波器—經過在卷積層中添加至少 1 個特徵圖,爲 Sherlock提供更多線索

咱們模型的特徵圖或「線索」數量是沒有限制,這是一個能夠控制的參數。

若是咱們將特徵圖從 2 增長到 3(5x5x2 到 5x5x3),那麼總輸出像素(75)與輸入像素(75)恰好匹配,能夠確保沒有信息丟失。若是咱們將特徵圖增長到 10,那麼就會有更多的信息(250像素= 5 x 5 x 10)讓Sherlock 篩選以找到線索。



總之,前幾層中的總像素信息一般高於輸入圖像,是由於咱們但願爲Sherlock 提供儘量多的線索/模式。在咱們網絡的最後幾層中,一般作法是下采樣獲得少許的特徵。由於這些層是用來識別圖像更明確的模式。



第四步


ReLU:非線性模式識別


給 Sherlock 提供充足的信息是很是重要的,但如今是時候進行真正的偵探工做了——非線性模式識別!像識別耳廓或鼻孔等。


到目前爲止,Sherlock 已經作了一堆數學來構建特徵圖,但每一個計算都是線性的(取輸入像素並對每一個像素執行相同的乘法/加法),所以,他只能識別像素的線性模式。


爲了在 CNN 中引入非線性,咱們使用稱爲 Relu 的激活函數。從第一個卷積計算咱們的特徵圖以後,激活函數會檢查每一個值來確認激活狀態。若是輸入值爲負,則輸出變爲零。若是輸入爲正,則輸出值保持不變。ReLU 的做用相似於開/關,每一個特徵圖的像素值通過 Relu 後,就獲得了非線性的模式識別。

回到咱們最初的 CNN 示例,咱們將在卷積後當即應用 ReLU:



雖然有許多非線性激活函數可用於將非線性引入神經網絡(好比 sigmoids,tanh,leakyReLU 等),但 ReLU 是 CNN 中最經常使用的,由於它們計算效率高,並能夠加速訓練過程。



第五步


Max Pooling:保留關鍵的少數信息在大腦中


如今,Sherlock 已經有了一些特徵圖或「線索」,那麼他如何肯定哪些信息是不相關的細節,哪些是重要的?答案就是最大池化!


Sherlock 認爲人腦就像一個記憶宮殿。傻瓜會存儲各類各樣的信息,最終有用的信息卻在雜亂無章中丟失了。而聰明人只存儲最重要的信息,這些信息能夠幫助他們迅速作出決定。Sherlock 採起的方法就是 Max Pooling,使他只保留最重要的信息,從而能夠快速作出決定。



最大池化就像Sherlock Holmes 記憶宮殿


經過最大池化,他能夠查看像素的鄰域並僅保留「最大」值或「最重要」的證據。


例如,若是他正在觀察 2x2 的區域(4個像素),那隻保留最高值的像素並丟掉其餘 3 個。這種技術使他可以快速學習還有助於概括出能夠存儲和記憶將來圖像中的線索。

與以前的放大鏡濾波器相似,咱們還能夠控制最大池化的步長和池的大小。在下面的示例中,咱們假設步長爲 1,最大池化爲 2x2:


最大池化—在定義的值鄰域中選擇「最大」值


在最大池化作完以後,咱們就完成了 1 輪卷積 / ReLU / 最大池化的過程。


在典型的CNN中,進入分類器以前,咱們通常會有幾輪卷積 / ReLU / 池的過程。每一輪,咱們都會在增長深度的同時擠壓高度/寬度,這樣咱們就不會丟失一些證據。

前面的這 1-5 步,重點就是收集證據,接下來就是 Sherlock 查看全部線索並破案的時候了:





第六步


當 Sherlock 訓練循環結束時,他有不少零散的線索,而後他須要一個方法能夠同時看到所有的線索。其實每條線索都對應一個簡單的二維矩陣,可是有成千上萬條這樣的線索堆積在一塊兒。


如今他必須得到的所有線索都收集並組織起來,以便在法庭上展現給陪審團。


拉平前的特徵圖


他採用了 Flatten Layer 來完成這項工做(Flatten Layer 經常使用在從卷積層到全鏈接層的過渡),簡單來講這個技術的作法就是:



  1. 每一個 2 維像素矩陣變成 1列像素

  2. 將 2 維矩陣進行疊加

下圖展現了人眼識別的示例:



回到咱們的例子,下面是計算機看到的



如今 Sherlock 已經組織完了他的證據,接下來他須要讓陪審團相信他的證據最終都指向同一個嫌疑人。



第七步


在全鏈接層中,咱們將證據與每一個嫌疑人相連。換句話說就是咱們在展現證據與每一個嫌疑人之間的聯繫。


全鏈接層—鏈接證據與每一個嫌疑人

如下是計算機看到的內容:


全鏈接層


在 Flatten Layer 和 3 個輸出的每一個證據之間是權重和誤差。與網絡中的其餘權重同樣,當咱們首次開始訓練 CNN 時,這些權重將以隨機值初始化,而且隨着時間的推移,CNN 會「學習」如何調整這些權重/誤差來獲得愈來愈準確的預測結果。

如今是 Sherlock 破解案件的時候了!



第八步


在 CNN 的圖像分類器階段,模型的預測結果就是最高分數的輸出。

這個評分函數有兩部分:


  1. Logit Score:原始分數

  2. Softmax:每一個輸出的機率在 0-1 之間。全部分數的總和等於 1。

▌第1部分:Logits ——邏輯分數


每一個輸出的 logit 分數是基本的線性函數:

Logit分數 =(證據x權重)+ 誤差

每個證據乘以鏈接證據與輸出的權重。全部這些乘法都加在一塊兒,而後在末尾添加一個誤差項,獲得的最高分就是模型的猜想。


Logit 分數計算

爲何獲得了最高分數卻不是最終結果? 有 2 個直觀的緣由:


  1. Sherlock 的置信水平咱們想知道 Sherlock 有多麼自信。當他很自信而且結果是對的時候,咱們能夠對他進行獎勵;但當信他很自信,結果倒是錯誤的時候,咱們要對他進行懲罰。當咱們在最後計算損失(「Sherlock的準確性」)時,Sherlock 會得到相應的獎勵/懲罰。

  2. Sherlock 的置信加權機率咱們但願用一種簡單的方法,經過 0 到 1 之間的機率來描述這些結果,並獲得與實際輸出(0或1)相同的預測分數。正確匹配的圖像(Elon)爲 1,其餘不正確的圖像(Jeff和Jon)爲 0。將正確輸出轉換爲 1 並將錯誤輸出轉換爲 0 的過程稱爲獨熱編碼。

Sherlock 的目標是讓他的預測儘量接近 1,以此得到正確的輸出。

▌第2部分:Softmax——Sherlock 的置信度加權機率分數


2.1.Sherlock 的置信水平:


爲了找到 Sherlock 的置信水平,咱們取字母 e(等於2.71828)爲底,並計算 logit 得分作冪運算。讓高分值越高,而低分值越低。

在進行冪運算中還保證了沒有負分數。因爲 logit 分數「可能」爲負數,因此下圖是置信度曲線:



置信度曲線


2.2. Sherlock 的置信加權機率:


爲了找到置信加權機率,咱們將每一個輸出的置信度量除以全部置信度得分的總和,就能夠獲得每一個輸出圖像的機率,全部這些加起來爲 1。用 Excel 示例以下:



Softmax

這個 softmax 分類器很是直觀。Sherlock 認爲,終結者看到的照片是 Elon Musk 的機率是97%(置信度加權)。咱們模型的最後一步是計算損失。損失值告訴咱們偵探 Sherlock 的辨識能力究竟有多好(或者多差)。



第九步

損失函數


每一個神經網絡都有一個損失函數,咱們將預測結果與實際狀況進行比較。當訓練 CNN 時,隨着網絡權重/誤差的調整,咱們的預測結果會獲得改善(Sherlock的偵探技能變得更好)。

CNN 最經常使用的損失函數是交叉熵損失函數。在 Google 上搜索交叉熵會出現不少希臘字母的解釋,很容易混淆。儘管描述各不相同,但它們在機器學習的背景下都是相同的,咱們將覆蓋下面最多見的3個。

  • 比較正確類(Elon,1.00)的機率與 CNN 預測 Elon (his softmax score,0.97)的機率

  • 當CNN的預測接近1時,獎勵 Sherlock

  • 當CNN的預測接近0時,懲罰 Sherlock


以上獲得的答案都相同!存在 3 種不一樣的解釋


▌解釋 1:實際機率與預測機率之間距離的度量


直覺是,若是咱們的預測機率接近 1,則咱們的損失接近 0。若是咱們的預測接近於 0,那麼將受到嚴厲的懲罰。目標是最小化預測結果(Elon,0.97)與實際機率(1.00)之間的「距離」。


交叉熵 1.距離解釋


▌解釋 2:最大化對數似然或最小化負對數似然


在 CNN 中,「log」 實際上意味着「天然對數(ln)」,它是在 softmax 的步驟1中完成的「指數/置信度」的倒數。


咱們不是用實際機率(1.00)減去預測機率(0.97)來計算損失,而是經過log 來計算損失,當 Sherlook 的預測結果離 1 越遠的時候,損失是指數級增加的。


交叉熵 2.對數損失解釋


▌解釋 3:KL 散度Kullback–Leibler divergence)


KL 散度是用來衡量預測機率(softmax得分)與實際機率的差別程度。


該公式分爲兩部分:


  1. 實際機率不肯定的數量。在監督學習的不肯定量始終爲零。咱們 100% 確定訓練圖像是 Elon Musk。

  2. 若是咱們使用預測機率,會損失多少的「信息」。


交叉熵 3.KL散度解釋



總結


在偵探 Sherlock Holmes 的幫助下,咱們給了終結者一雙眼睛,因此他如今有能力尋找並摧毀自由世界的保護者 Elon Musk。(Sorry Elon!)

雖然,咱們只訓練終結者來辨別 Elon,Jeff 和 Jon,可是 Skynet 擁有無限多的資源和訓練圖像,它能夠利用咱們構建的網絡去訓練終結者來識別世間萬物!



原文連接:

https://towardsdatascience.com/cutting-edge-face-recognition-is-complicated-these-spreadsheets-make-it-easier-e7864dbf0e1a

相關文章
相關標籤/搜索