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

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


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


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