習翔宇
人工智能已經成為一個具有眾多實際應用和活躍研究課題的領域,并且正在蓬勃發展。尤其是近幾年深度學習發展迅猛,取得了很好的效果。很多基于深度學習的應用也進入我們生活中,例如圖像目標識別、機器翻譯、自動駕駛系統等。今天就讓我們一同走進深度學習的世界,看看擁有如此強大能力的深度學習是如何工作的吧!
神經網絡是深度學習的基礎,深度學習的發展也是以神經網絡模型的發展為基礎的,而神經網絡的發展可謂經歷了漫長的過程。
1958年,計算機科學家弗蘭克·羅森布拉特(Frank Rosenblatt)提出了兩層神經元組成的神經網絡,稱之為感知器。一個感知器接受若干個二進制輸入,并產生一個二進制輸出,因此能夠對輸入的多維數據進行二分類。其中的計算方法為通過加權與閾值比較,如果加權大于閾值,就輸出1,否則輸出0。該方法使用梯度下降法從訓練樣本中自動學習更新權值。
但感知器本質上是一種線性模型,只能處理線性問題,就連最簡單的異或問題都無法進行正確分類。例如,小紅和小麗是好朋友,有一天老師讓她們一起打掃教室。我們用x1=1來表示小紅打掃教室,x1=0表示小紅沒打掃教室,x2=1來表示小麗打掃教室,x2=0來表示小麗沒打掃教室;用y=1表示只有一個人打掃了教室,否則為0,那么結果只有四種情況如右頁表1所示。但是采用感知器模型卻無法對此進行正確分類,因此神經網絡的研究也陷入了20年的停滯,直到“神經網絡之父”杰弗里·辛頓(Geoffrey Hinton)在1986年發明了適用于多層感知器的反向傳播算法,并且引入了Sigmoid函數對加權結果進行非線性變換,才解決了這個問題。
2012年,亞歷克斯參加ImageNet圖像識別比賽,構建了基于卷積神經網絡(CNN)的AlexNet模型并取得了冠軍,且準確率遠超第二名,使得CNN成為在圖像識別分類的核心算法模型,帶來了深度學習的大爆發。從此,深度學習吸引了學術界和工業界的關注,在不同領域內逐漸開始應用,不同的神經網絡模型和架構也層出不窮,并取得了極好的效果。

我們用全連接神經網絡進行圖像分類的例子,來說明深度學習是如何工作的。比如在寄快遞的時候,人們會寫電話或者手機號碼(均由數字0~9組成),如果我們能讓電腦識別出人手寫的數字是什么,就能夠自動通知收件人來收取快遞。
假設對圖像進行掃描切割,每次都對包含一個數字的圖像進行識別,可能是1,也可能是8,總共有0~9十個數字。若每個圖片長、寬均為28個像素,并且是黑白圖像,則該圖片包含28×28=784個像素點,每個像素點范圍在0和1之間,0表示白色,1表示黑色,0~1之間表示灰色。


全連接的前饋神經網絡(人工神經網絡的一種)通常包括三層:輸入層(input layer)、隱藏層(hidden layer)和輸出層(output layer)。其中,輸入層是接收原始輸入;隱藏層可能有多層,每層隱藏層都對輸入進行非線性運算,然后輸出給下一層隱藏層,作為下一層隱藏層的輸入繼續運算,直到遇到輸出層;輸出層對隱藏層進行運算分類,得到最終的分類結果。每一層都包含了多個神經元(神經元是一個運算單元,執行最基本的運算操作),通常每個神經元對自己的輸入進行非線性運算,并將結果傳遞給它連接到的所有下一層神經元。
具體到我們的圖像分類任務中,輸入層的輸入是每幅圖像,也就是784個像素點;中間是一個隱藏層,包含了15個神經元來進行非線性運算;輸出層包含了10個神經元,對隱藏層的輸出進行運算和分類,第n個神經元就代表這個圖片是第n個數字的概率。例如,輸出層第一個神經元的輸出表示這個圖像包含了數字0的概率,第5個神經元的輸出表示該圖像包含了數字4的概率。其中哪個神經元輸出值最大,就作為模型預測到的結果。若輸出概率如下表2所示,那么就認為圖像包含數字為5,概率最大為0.6。


圖像由像素點組成,一般用長、寬所具有的像素點來描述圖像,例如一張黑白圖片長為900像素(即px),寬為700像素,則該圖片共有900×700=630000個像素點。如果該圖片是彩色圖片,每個像素均由R、G、B三個分量組成,則該圖像共有900×700×3=1890000個像素點。
在卷積神經網絡出現以前,人們使用全連接網絡處理圖像,但它存在一些問題,比如參數數量太多導致計算速度減慢、沒有利用像素之間的位置信息、網絡層數限制等。而卷積神經網絡有效減少了這些問題,因此在圖像處理上有非常突出的表現。
人觀察圖像時,往往會只關注局部信息,例如我們觀察一張貓的照片,看到貓的額頭或者貓爪就能夠知道這是貓的照片了,而不需要每個部分都看完了才知道,因此圖像的局部信息能夠提供大量的有效特征?;谶@個基本概念,卷積神經網絡采用卷積層和池化層兩種計算來提取相關信息。
卷積層采用一個小的矩陣窗口來對圖像進行處理,例如長和寬均為3像素的矩陣,我們稱之為過濾器或者內核。每次在圖像中選擇長為3像素、寬為3像素的區域,總共有3×3=9個像素點,然后進行按位乘法之后相加。在卷積完第一個局部信息之后,卷積核往右挪一位,然后繼續進行該操作,繼續往右挪動,直到挪動到了最右邊;然后挪動到下一行,從左往右繼續進行卷積操作,如右頁上圖所示。
右頁上圖中左邊為圖像信息,中間為卷積核矩陣,兩者計算之后得到新的矩陣如圖右邊所示。大家可以手動計算一遍哦!
在卷積層之后,得到融合了局部信息的隱藏層,然后我們需要挑選最優的局部信息,一般采用最大池化(max-pooling)或者平均池化(average-pooling)來進行操作。假設我們采用最大池化操作,并且過濾器大小為2×2,那么對于一個5×5大小的矩陣我們最大池化之后得到4×4大小的矩陣,如右二圖所示。例如藍色部分中,包括四個點分別是0、1、1、2,那么最大的就取2;再比如紅色部分中,包括四個點是1、3、1、0,那么取最大就是3。
池化操作與卷積操作類似,也是需要從左往右、從上往下進行移動,這樣遍歷完了整個卷積結果。隨后池化的結果會往后傳播,進行分類、識別等操作。采用多個卷積層+池化層的方式來提取特征,最后將提取到的特征“喂”給一個分類層進行圖像識別,例如AlexNet就是采用了多層卷積神經網絡來進行圖像識別,并在ImageNet上取得了非常好的效果。
在AlphaGo中,卷積神經網絡就起到了很大的作用,這款人工智能圍棋程序由DeepMind公司開發,戰勝了眾多人類圍棋高手,包括曾獲世界圍棋冠軍的李世石和排名人類圍棋世界第一的柯潔。
AlphaGo主要由卷積神經網絡和蒙特卡洛樹搜索組成。其中卷積神經網絡如上介紹,對棋盤進行卷積運算,并采用蒙特卡洛樹進行評估,得到當前應該下的棋的位置。通過機器和機器對弈的方法來創造足夠多的棋局,在這個過程中,AlphaGo越來越強大,也就從絲毫不會下棋,成長到可以輕松戰勝人類中最頂尖的棋者。