終于有人把卷積神經(jīng)網(wǎng)絡(luò)(CNN)講明白了
傳統(tǒng)神經(jīng)網(wǎng)絡(luò)層之間都采用全連接方式,如果采樣數(shù)據(jù)層數(shù)較多,且輸入又是高維數(shù)據(jù),那么其參數(shù)數(shù)量可能將是一個天文數(shù)字。
比如訓(xùn)練一張1000×1000像素的灰色圖片,輸入節(jié)點數(shù)就是1000×1000,如果隱藏層節(jié)點是100,那么輸入層到隱藏層間的權(quán)重矩陣就是1000000×100!如果還要增加隱藏層,進行反向傳播,那結(jié)果可想而知。不止如此,采用全連接方式還容易導(dǎo)致過擬合。
因此,為更有效地處理圖片、視頻、音頻、自然語言等數(shù)據(jù)信息,必須另辟蹊徑。經(jīng)過多年不懈努力,人們終于找到了一些有效方法及工具。其中卷積神經(jīng)網(wǎng)絡(luò)就是典型代表。
01 卷積網(wǎng)絡(luò)的一般架構(gòu)
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是一種前饋神經(jīng)網(wǎng)絡(luò),最早在1986年BP算法中提出。1989年LeCun將其運用到多層神經(jīng)網(wǎng)絡(luò)中,但直到1998年LeCun提出LeNet-5模型,神經(jīng)網(wǎng)絡(luò)的雛形才基本形成。
在接下來近十年的時間里,對卷積神經(jīng)網(wǎng)絡(luò)的相關(guān)研究一直處于低谷,原因有兩個:一是研究人員意識到多層神經(jīng)網(wǎng)絡(luò)在進行BP訓(xùn)練時的計算量極大,以當(dāng)時的硬件計算能力完全不可能實現(xiàn);二是包括SVM在內(nèi)的淺層機器學(xué)習(xí)算法也開始嶄露頭角。
2006年,Hinton一鳴驚人,在《科學(xué)》上發(fā)表名為Reducing the Dimensionality of Data with Neural Networks的文章,CNN再度覺醒,并取得長足發(fā)展。2012年,CNN在ImageNet大賽上奪冠。
2014年,谷歌研發(fā)出20層的VGG模型。同年,DeepFace、DeepID模型橫空出世,直接將LFW數(shù)據(jù)庫上的人臉識別、人臉認(rèn)證的正確率提高到99.75%,超越人類平均水平。
卷積神經(jīng)網(wǎng)絡(luò)由一個或多個卷積層和頂端的全連接層(對應(yīng)經(jīng)典的神經(jīng)網(wǎng)絡(luò))組成,同時也包括關(guān)聯(lián)權(quán)重和池化層(Pooling Layer)等。與其他深度學(xué)習(xí)架構(gòu)相比,卷積神經(jīng)網(wǎng)絡(luò)能夠在圖像和語音識別方面給出更好的結(jié)果。這一模型也可以使用反向傳播算法進行訓(xùn)練。
相比其他深度、前饋神經(jīng)網(wǎng)絡(luò),卷積神經(jīng)網(wǎng)絡(luò)可以用更少的參數(shù)獲得更高的性能。圖3-1就是一個簡單的卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)。
▲圖3-1 卷積神經(jīng)網(wǎng)絡(luò)示意圖
如圖3-1所示,該架構(gòu)包括卷積神經(jīng)網(wǎng)絡(luò)的常用層,如卷積層、池化層、全連接層和輸出層;有時也會包括其他層,如正則化層、高級層等。接下來我們就各層的結(jié)構(gòu)、原理等進行詳細說明。
圖3-1是用一個比較簡單的卷積神經(jīng)網(wǎng)絡(luò)對手寫輸入數(shù)據(jù)進行分類的架構(gòu)示意圖,由卷積層、池化層和全連接層疊加而成。下面我們先用代碼定義這個卷積神經(jīng)網(wǎng)絡(luò),然后介紹各部分的定義及實現(xiàn)原理。
02 增加通道的魅力
增加通道實際就是增加卷積核,它是整個卷積過程的核心。比較簡單的卷積核或過濾器有垂直邊緣過濾器(Vertical Filter)、水平邊緣過濾器(Horizontal Filter)、Sobel過濾器(Sobel Filter)等。
這些過濾器能夠檢測圖像的垂直邊緣、水平邊緣,增強圖片中心區(qū)域權(quán)重等。下面我們通過一些圖來簡單演示這些過濾器的具體作用。
1. 垂直邊緣檢測
垂直邊緣過濾器是3×3矩陣(注意,過濾器一般是奇數(shù)階矩陣),特點是有值的是第1列和第3列,第2列為0,可用于檢測原數(shù)據(jù)的垂直邊緣,如圖3-2所示。
▲圖3-2 過濾器對垂直邊緣的檢測
2. 水平邊緣檢測
水平邊緣過濾器也是3×3矩陣,特點是有值的是第1行和第3行,第2行為0,可用于檢測原數(shù)據(jù)的水平邊緣,如圖3-3所示。
▲圖3-3 過濾器對水平邊緣的檢測
以上兩種過濾器對圖像水平邊緣檢測、垂直邊緣檢測的效果圖如圖3-4所示。
▲圖3-4 過濾器對圖像水平邊緣檢測、垂直邊緣檢測后的效果圖
上面介紹的兩種過濾器比較簡單,在深度學(xué)習(xí)中,過濾器除了需要檢測垂直邊緣、水平邊緣等,還需要檢測其他邊緣特征。
那么,如何確定過濾器呢?過濾器類似于標(biāo)準(zhǔn)神經(jīng)網(wǎng)絡(luò)中的權(quán)重矩陣W,W需要通過梯度下降算法反復(fù)迭代求得,所以,在深度學(xué)習(xí)中,過濾器也需要通過模型訓(xùn)練得到。卷積神經(jīng)網(wǎng)絡(luò)計算出這些過濾器的數(shù)值,也就實現(xiàn)了對圖片所有邊緣特征的檢測。
03 加深網(wǎng)絡(luò)的動機
加深網(wǎng)絡(luò)的好處包括減少參數(shù)的數(shù)量,擴大感受野(Receptive Field,給神經(jīng)元施加變化的某個局部空間區(qū)域)。
感受野是指卷積神經(jīng)網(wǎng)絡(luò)每一層輸出的特征圖(Feature Map)上的像素點在輸入圖片上映射的區(qū)域大小。通俗點說,感受野是特征圖上每一個點對應(yīng)輸入圖上的區(qū)域,如圖3-5所示。
▲圖3-5 增加網(wǎng)絡(luò)層擴大感受野示意圖
由圖3-5可以看出,經(jīng)過幾個卷積層之后,一個特征所表示的信息量越來越多,一個s3表現(xiàn)了x1、x2、x3、x4、x5的信息。
此外,疊加層可進一步提高網(wǎng)絡(luò)的表現(xiàn)力。這是因為它向網(wǎng)絡(luò)添加了基于激活函數(shù)的“非線性”表現(xiàn)力,通過非線性函數(shù)的疊加,可以表現(xiàn)更加復(fù)雜的內(nèi)容。
不同層提取圖像的特征是不一樣的,層數(shù)越高,表現(xiàn)的特征越復(fù)雜,如圖3-6所示。
▲圖3-6 不同層表現(xiàn)不同的特征
從圖3-6可以看出,前面的層提取的特征比較簡單,是一些顏色、邊緣特征。越往后,提取到的特征越復(fù)雜,是一些復(fù)雜的幾何形狀。這符合我們對卷積神經(jīng)網(wǎng)絡(luò)的設(shè)計初衷,即通過多層卷積完成對圖像的逐層特征提取和抽象。
在ELMo預(yù)訓(xùn)練模型中也會存在類似情況,如圖3-7所示,隨著層數(shù)的增加,其表示的內(nèi)容越復(fù)雜、抽象。
▲圖3-7 ELMo模型
04 殘差連接
網(wǎng)絡(luò)層數(shù)增加了,根據(jù)導(dǎo)數(shù)的鏈?zhǔn)椒▌t,就容易出現(xiàn)梯度消散或爆炸等問題。例如,如果各網(wǎng)絡(luò)層激活函數(shù)的導(dǎo)數(shù)都比較小,那么在多次連乘后梯度可能會越來越小,這就是常說的梯度消散。對于深層網(wǎng)絡(luò)來說,傳到淺層,梯度幾乎就沒了。
在解決這類問題時,除了采用合適的激活函數(shù)外,還有一個重要技巧,即使用殘差連接。圖3-8是殘差連接的簡單示意圖。
▲圖3-8 殘差連接示意圖
如圖3-8所示,圖中的每一個導(dǎo)數(shù)都加上了一個恒等項1,dh/dx = d(f + x)/dx = 1 + df/dx。此時就算原來的導(dǎo)數(shù)df/dx很小,誤差仍然能夠有效地反向傳播,這也是殘差連接的核心思想。
關(guān)于作者:吳茂貴,資深大數(shù)據(jù)和人工智能技術(shù)專家,在BI、數(shù)據(jù)挖掘與分析、數(shù)據(jù)倉庫、機器學(xué)習(xí)等領(lǐng)域工作超過20年。在基于Spark、TensorFlow、PyTorch、Keras等的機器學(xué)習(xí)和深度學(xué)習(xí)方面有大量的工程實踐實踐,對Embedding有深入研究。
王紅星,高級數(shù)據(jù)科學(xué)家,任職于博世(中國)投資有限公司蘇州分公司,負責(zé)BOSCH數(shù)據(jù)湖,數(shù)據(jù)分析與人工智能相關(guān)的產(chǎn)品與服務(wù)的設(shè)計和開發(fā)。在大數(shù)據(jù)、機器學(xué)習(xí)、人工智能方面有豐富的實踐經(jīng)驗。
本文摘編自《深入淺出Embedding:原理解析與應(yīng)用實踐》,經(jīng)出版方授權(quán)發(fā)布。