看懂這十步,8歲的小朋友都能理解深度學習

在對技術毫無瞭解的人看來,人工智能是什麼?

《流浪地球》裡的AI語音助手MOSS麼?還是《終結者》裡的天網?

如果對當今人工智能的主流技術——深度學習沒有了解,可能真的會有人覺得,當前的科學家們在創造無所不能、無所不知的電影AI形象。

那麼,如何用最淺顯的方式,給大眾解釋什麼是深度學習呢?

法國博主Jean-Louis Queguiner撰寫了這篇《給我8歲的女兒解釋深度學習》,以用深度學習技術搭建識別手寫數字的神經網絡為例,用清晰的方式,解釋了深度學習的原理。

看懂這十步,8歲的小朋友都能理解深度學習

這些數字每個人的寫法都不一樣,要如何讓計算機判斷出這些手寫體數字是幾呢?

1、和數數一樣簡單

首先,考慮到0~9這十個數字,本身也是存在各種筆畫的,那我們就拆解開來,看每個手寫體數字裡,有多少橫豎撇捺,曲折彎彎。

左邊豎著的一列是是個數字,上方橫著的紅色字符則是拆解出來的筆畫,用這個表格,來統計每個字符裡有多少個相應的筆畫。

看懂這十步,8歲的小朋友都能理解深度學習

現在,我們來寫一些新的數字,然後數一數,這些新寫的數字裡,有多少個紅色的筆畫,和上方的表格對比一下,就能判斷出這些新寫的數字是幾了。

看懂這十步,8歲的小朋友都能理解深度學習

比如,第一個數字裡,有一個“ / ”,一個“丨”,我們發現有這種特徵的,是“1”這個數字,而且完全符合,那第一個數字就是“1”。

第二個數字,上下左右半圓各有2個,另外還有一個“ / ”,一個“丨”,總共10個筆畫。比較之下,會發現上表中的數字“8”有8個筆畫符合,數字“9”有6個筆畫符合,那麼這第二個數字就是“8”。

看懂這一步,那恭喜你已經搭建了世界上最簡單的識別手寫數字神經網絡。

2、圖像即矩陣

矩陣這個概念,大部分8歲的小學生肯定是沒學過的,可以簡單的理解為一串橫豎的格子裡,每個放一個數。

對於計算機來說,每張照片都是細微的像素組成的,這些像素排列成矩陣格子,每個格子一個顏色,拼起來便是一副圖像。

比如這些紅紅綠綠的格子,你縮小來看,原來是一張草莓圖片的一部分。

看懂這十步,8歲的小朋友都能理解深度學習

而顏色,對於計算機來說,正是用數表示的,草莓圖片中彩色的顏色是紅綠藍三種色光,各自有一個數,總共三個數;而手寫數字都是黑白的,只要一個數,0表示純黑色,255表示純白色,兩者中間的數則是灰色,數字越小顏色越深,數字越大顏色越淺。

看懂這十步,8歲的小朋友都能理解深度學習

所以,看這個手寫數字,一共28行28列,784個像素格子,沒有筆畫的黑色格子就是0,有筆畫的部分,筆畫中心是更淺的白色,數字在一兩百左右,筆畫邊緣則是灰色,數字只有幾十,這就構成了這個手寫數字的矩陣。

3、卷積層:找到筆畫輪廓

現在,我們知道了圖片的每個像素格子都是數字,但如何找出這些數字中的筆畫呢?

深度學習的神經網絡是有許多許多“層”組成的,找輪廓這一步需要用到卷積層,本質上就是在前面用數字表示的圖像上加一個過濾器,把沒有筆畫的部分過濾掉,留下有筆畫的部分。

過濾器就像下面這個玩具一樣,識別出圖案的輪廓,如果輪廓匹配,就可以放進盒子裡,輪廓不匹配,那就放不進去,三角形的過濾器匹配三角形的木塊,正方形的過濾器匹配正方形的木塊

看懂這十步,8歲的小朋友都能理解深度學習

4、獨立過濾

過濾器過濾的過程就像這張動畫一樣,每一次掃描都是獨立的,所以可以同時進行許多次掃描,每次掃描互不干擾。

看懂這十步,8歲的小朋友都能理解深度學習

5、重複卷積

前面的過程,是我們的手寫數字圖像被多個過濾器過濾,但是為了提高準確性,只要把前一次過濾的圖像再拿來過濾就好了,用的過濾器越多,過濾的次數越多,結果越準確。

而且,由於手寫的數字並不像玩具中的三角形、五角星一樣規整,每個人寫數字“8”都可能寫成不同的樣子,因此筆畫的佈局都不一樣。

為了讓過濾出來的筆畫更清晰,需要不斷創建新的過濾器,直到過濾器被精確到我們前面看到的那些紅色橫豎撇捺半圓的形狀。

6、卷積:乘法和加法

但過濾中具體的掃描過程是怎樣的呢?

涉及到卷積運算,比如下圖,左邊是一張8×8的圖像,中間是一個3×3的卷積濾波器,3×3的格子在8×8的圖像上逐一移動,挨個進行卷積。

看懂這十步,8歲的小朋友都能理解深度學習

這裡,需要告訴大家卷積是怎樣算的。比如上圖,左邊的3×3格子的左上角是3,中間卷積過濾器的左上角是-1,那就需要把3和-1乘起來,得到-3。以此類推,同一位置的兩個數相乘,得到9個乘積,再把9個乘積加起來,得到-3,就是卷積的結果。

當然,圖上這個例子中涉及了負數,如果小朋友還沒有學會負數的運算,可以先不要理它,當做一個整數就好啦。

7、池化層:把圖片變小,易於總結

經過了複雜的卷積過程,我們現在需要進行總結采樣,首先要把矩陣縮小,這裡用到的是池化層。

看懂這十步,8歲的小朋友都能理解深度學習

比如,把四個格子縮成一個格子,可以取四個格子的最大值、最小值、平均值、求和等,這樣矩陣的大小就只有原來的四分之一了。

8、神經網絡

我們整個過程,是為了識別手寫的數字是幾,這個過程叫做圖像分類,因為數字只有10個,所以需要把每個不同的手寫數字分到0~9十類中。

經過了上面的多層處理,現在需要把它放進類中,需要準備10個神經元,每個代表一類,連接到最後一個池化層之後。

下面是Yann LeCun設計的最早的LeNet-5卷積神經網絡,這是圖像識別領域的幾個早期成果之一。

看懂這十步,8歲的小朋友都能理解深度學習

9、靠反向傳播實現自我改進

不過,整個過程不只靠卷積完成,還需要依靠神經網絡自身學習和適應的能力,比如藉助一種叫做反向傳播的方法,靠權重來減少神經元的數量。

簡單來講,我們看神經網絡的輸出的結果,如果輸出的這個分類是錯的,比如把手寫的6認成了9,我們就認為,其中有一個過濾器犯了個錯誤,是個不靠譜的過濾器,擔不起自己的責任,就把它的權重降低,下次神經網絡就不會犯同樣的錯誤了。

這樣,整個神經網絡系統就擁有了學習能力,保持自我提升。

10、寫在最後

找了數千張圖片,運行了數十個過濾器,採樣輸出……所有的步驟都可以完美的同時搞定,因此適合在GPU上運行。

另外,我們還沒有討論準確率的問題,在圖像識別競賽ImageNet中,根據歷年的結果,我們可以看出,隨著神經網絡層數的增加,準確率在不斷提升。

看懂這十步,8歲的小朋友都能理解深度學習

最後,本文講得雖然是識別手寫字母,但所有的圖像識別,無論是用於醫療還是用於自動駕駛,原理都是一樣的,靠很多層神經網絡、各種濾波器,在不同的矩陣上做各種變換。

也就是說,所有圖像識別都是在GPU上運行的矩陣運算。


分享到:


相關文章: