理解卷積神經(jīng)網(wǎng)絡(luò)
人工智能 (AI) 世界正在快速發(fā)展,AI 越來越多地支持以前無法實(shí)現(xiàn)或難以實(shí)現(xiàn)的應(yīng)用。
神經(jīng)網(wǎng)絡(luò)是一種系統(tǒng),或者說是神經(jīng)元的結(jié)構(gòu),它使人工智能能夠更好地理解數(shù)據(jù),從而解決復(fù)雜的問題。雖然網(wǎng)絡(luò)類型多種多樣,但本系列文章將僅關(guān)注卷積神經(jīng)網(wǎng)絡(luò) (CNN)。CNN 的主要應(yīng)用領(lǐng)域是模式識別和對輸入數(shù)據(jù)中包含的對象進(jìn)行分類。CNN 是一種用于深度學(xué)習(xí)的人工神經(jīng)網(wǎng)絡(luò)。這種網(wǎng)絡(luò)由一個輸入層、幾個卷積層和一個輸出層組成。卷積層是最重要的組件,因為它們使用一組獨(dú)特的權(quán)重和過濾器,使網(wǎng)絡(luò)能夠從輸入數(shù)據(jù)中提取特征。數(shù)據(jù)可以有多種不同的形式,例如圖像、音頻和文本。這種特征提取過程使 CNN 能夠識別數(shù)據(jù)中的模式。通過從數(shù)據(jù)中提取特征,CNN 使工程師能夠創(chuàng)建更有效、更高效的應(yīng)用程序。為了更好地理解 CNN,我們將首先討論經(jīng)典的線性規(guī)劃。
經(jīng)典控制工程中的線性程序執(zhí)行
在控制工程中,任務(wù)在于從一個或多個傳感器讀取數(shù)據(jù),處理數(shù)據(jù),根據(jù)規(guī)則做出響應(yīng),并顯示或轉(zhuǎn)發(fā)結(jié)果。例如,溫度調(diào)節(jié)器通過微控制器單元 (MCU) 每秒測量一次溫度,微控制器單元從溫度傳感器讀取數(shù)據(jù)。從傳感器獲取的值用作閉環(huán)控制系統(tǒng)的輸入數(shù)據(jù),并在循環(huán)中與設(shè)定溫度進(jìn)行比較。這是由 MCU 運(yùn)行的線性執(zhí)行的示例。該技術(shù)根據(jù)一組預(yù)編程值和實(shí)際值提供結(jié)論性結(jié)果。相比之下,概率在 AI 系統(tǒng)的運(yùn)行中發(fā)揮著作用。
復(fù)雜模式和信號處理
還有許多應(yīng)用程序需要處理輸入數(shù)據(jù),這些數(shù)據(jù)首先必須由模式識別系統(tǒng)進(jìn)行解釋。模式識別可以應(yīng)用于不同的數(shù)據(jù)結(jié)構(gòu)。在我們的示例中,我們將自己限制在一維和二維數(shù)據(jù)結(jié)構(gòu)中。以下是一些示例:音頻信號、心電圖 (ECG)、光電容積描記器 (PPG)、一維數(shù)據(jù)和圖像的振動、熱圖像以及二維數(shù)據(jù)的瀑布圖。
在上述案例中使用的模式識別,將應(yīng)用程序轉(zhuǎn)換為 MCU 的傳統(tǒng)代碼極其困難。一個例子是識別圖像中的物體(例如貓)。在這種情況下,要分析的圖像是來自早期記錄還是剛剛由相機(jī)傳感器讀取的圖像都沒有區(qū)別。分析軟件會根據(jù)規(guī)則搜索可以歸因于貓的模式:典型的尖耳朵、三角形鼻子或胡須。如果可以在圖像中識別出這些特征,軟件就會報告發(fā)現(xiàn)了貓。這里出現(xiàn)了一些問題:如果只顯示貓的背面,模式識別系統(tǒng)會做什么?如果它沒有胡須或在事故中失去了腿,會發(fā)生什么?盡管這些例外不太可能發(fā)生,模式識別代碼必須檢查大量涵蓋所有可能異常的附加規(guī)則。即使在我們這個簡單示例中,軟件設(shè)置的規(guī)則也會很快變得繁瑣。
機(jī)器學(xué)習(xí)如何取代傳統(tǒng)規(guī)則
人工智能背后的想法是小規(guī)模地模仿人類的學(xué)習(xí)。我們不是制定大量的“如果-那么”規(guī)則,而是模擬一個通用的模式識別機(jī)器。這兩種方法之間的關(guān)鍵區(qū)別在于,與一組規(guī)則不同,人工智能不會提供明確的結(jié)果。機(jī)器學(xué)習(xí)不會報告“我在圖片中認(rèn)出了一只貓”,而是得出這樣的結(jié)果:“圖片中有一只貓的概率為 97.5%。它也可能是一只豹子(2.1%)或一只老虎(0.4%)?!边@意味著此類應(yīng)用程序的開發(fā)人員必須在模式識別過程結(jié)束時做出決定。為此使用決策閾值。
另一個區(qū)別是,模式識別機(jī)器沒有固定的規(guī)則。相反,它是經(jīng)過訓(xùn)練的。在這個學(xué)習(xí)過程中,神經(jīng)網(wǎng)絡(luò)會看到大量的貓圖像。最后,這個網(wǎng)絡(luò)能夠獨(dú)立識別圖像中是否有貓。關(guān)鍵是未來的識別并不局限于已知的訓(xùn)練圖像。這個神經(jīng)網(wǎng)絡(luò)需要映射到 MCU 中。
模式識別機(jī)器的內(nèi)部到底是什么樣的?
人工智能中的神經(jīng)元網(wǎng)絡(luò)與人類大腦中的生物神經(jīng)元網(wǎng)絡(luò)相似。一個神經(jīng)元有多個輸入和一個輸出?;旧?,這樣的神經(jīng)元只不過是輸入的線性變換——將輸入乘以數(shù)字(權(quán)重,w)并添加一個常數(shù)(偏差,b),然后是一個固定的非線性函數(shù),也稱為激活函數(shù)。[1] 作為網(wǎng)絡(luò)中唯一的非線性組件,此激活函數(shù)用于定義人工神經(jīng)元觸發(fā)的值范圍。神經(jīng)元的功能可以用數(shù)學(xué)方式描述為
其中 f = 激活函數(shù),w = 權(quán)重,x = 輸入數(shù)據(jù),b = 偏差。數(shù)據(jù)可以作為單個標(biāo)量、向量或矩陣形式出現(xiàn)。圖 1 顯示了一個具有三個輸入和一個 ReLU[2] 激活函數(shù)的神經(jīng)元。網(wǎng)絡(luò)中的神經(jīng)元總是按層排列。
圖 1. 一個具有三個輸入和一個輸出的神經(jīng)元。
如上所述,CNN 用于對輸入數(shù)據(jù)中包含的對象進(jìn)行模式識別和分類。CNN 分為多個部分:一個輸入層、多個隱藏層和一個輸出層。圖 2 中可以看到一個小型網(wǎng)絡(luò),該網(wǎng)絡(luò)具有三個輸入、一個具有五個神經(jīng)元的隱藏層和一個具有四個輸出的輸出層。所有神經(jīng)元輸出都連接到下一層的所有輸入。圖 2 中所示的網(wǎng)絡(luò)無法處理有意義的任務(wù),在此僅用于演示目的。即使在這個小型網(wǎng)絡(luò)中,用于描述網(wǎng)絡(luò)的方程中也有 32 個偏差和 32 個權(quán)重。
CIFAR 神經(jīng)網(wǎng)絡(luò)是一種廣泛用于圖像識別任務(wù)的 CNN。它由兩種主要類型的層組成:卷積層和池化層,這兩種層在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中都得到了很好的利用。卷積層使用一種稱為卷積的數(shù)學(xué)運(yùn)算來識別像素值數(shù)組中的模式。如圖 3 所示,卷積發(fā)生在隱藏層中。此過程重復(fù)多次,直到達(dá)到所需的準(zhǔn)確度。請注意,如果要比較的兩個輸入值(在本例中為圖像和過濾器)相似,則卷積運(yùn)算的輸出值總是特別高。這稱為過濾矩陣,也稱為過濾內(nèi)核或過濾器。然后將結(jié)果傳遞到池化層,池化層生成特征圖 - 識別重要特征的輸入數(shù)據(jù)的表示。這被視為另一個過濾矩陣。經(jīng)過訓(xùn)練后 - 在網(wǎng)絡(luò)的運(yùn)行狀態(tài)下 - 將這些特征圖與輸入數(shù)據(jù)進(jìn)行比較。由于特征圖包含與輸入圖像進(jìn)行比較的對象類別特定特征,因此只有當(dāng)內(nèi)容相似時,神經(jīng)元的輸出才會觸發(fā)。通過結(jié)合這兩種方法,CIFAR 網(wǎng)絡(luò)可用于高精度地識別和分類圖像中的各種對象。
圖 2。一個小型神經(jīng)網(wǎng)絡(luò)。
圖 3. 使用 CIFAR-10 數(shù)據(jù)集訓(xùn)練的 CIFAR 網(wǎng)絡(luò)模型。
CIFAR-10 是常用于訓(xùn)練 CIFAR 神經(jīng)網(wǎng)絡(luò)的一個特定數(shù)據(jù)集。它包含 60,000 張 32 × 32 彩色圖像,分為 10 個類別,這些圖像來自網(wǎng)頁、新聞組和個人圖像集等各種來源。每個類別有 6000 張圖像,在訓(xùn)練集、測試集和驗證集之間平均分配,使其成為測試新計算機(jī)視覺架構(gòu)和其他機(jī)器學(xué)習(xí)模型的理想數(shù)據(jù)集。
卷積神經(jīng)網(wǎng)絡(luò)與其他類型網(wǎng)絡(luò)的主要區(qū)別在于它們處理數(shù)據(jù)的方式。通過過濾,輸入數(shù)據(jù)被依次檢查其屬性。隨著串聯(lián)的卷積層數(shù)量的增加,可識別的細(xì)節(jié)級別也會增加。在第一次卷積之后,該過程從簡單的對象屬性(例如邊緣或點(diǎn))開始,在第二次卷積之后繼續(xù)到詳細(xì)結(jié)構(gòu)(例如角、圓、矩形等)。在第三次卷積之后,特征表示類似于圖像中對象部分的復(fù)雜模式,并且通常是給定對象類所獨(dú)有的。在我們最初的例子中,這些是貓的胡須或耳朵。特征圖的可視化(如圖 4 所示)對于應(yīng)用程序本身來說不是必需的,但它有助于理解卷積。
即使是像 CIFAR 這樣的小型網(wǎng)絡(luò),每層也包含數(shù)百個神經(jīng)元,并且有許多層串聯(lián)在一起。隨著網(wǎng)絡(luò)的復(fù)雜性和規(guī)模的增加,必要的權(quán)重和偏差的數(shù)量也會迅速增加。在圖 3 所示的 CIFAR-10 示例中,已經(jīng)有 200,000 個參數(shù)在訓(xùn)練過程中需要一組確定的值。可以通過池化層進(jìn)一步處理特征圖,從而減少需要訓(xùn)練的參數(shù)數(shù)量,同時仍保留重要信息。
圖 4。CNN 的特征圖。
如上所述,在 CNN 中,每次卷積之后,通常都會進(jìn)行池化(在文獻(xiàn)中也稱為子采樣)。這可以減少數(shù)據(jù)的維度。如果您查看圖 4 中的特征圖,您會注意到大區(qū)域幾乎不包含任何有意義的信息。這是因為對象不是整個圖像,而只是其中的一小部分。圖像的其余部分未在此特征圖中使用,因此與分類無關(guān)。在池化層中,指定池化類型(最大或平均)和窗口矩陣大小。在池化過程中,窗口矩陣以逐步方式在輸入數(shù)據(jù)上移動。例如,在最大池化中,取窗口中的最大數(shù)據(jù)值。所有其他值都將被丟棄。這樣,數(shù)據(jù)數(shù)量不斷減少,最終與卷積一起形成各自對象類別的獨(dú)特屬性。
然而,這些卷積和池化組的結(jié)果是大量的二維矩陣。為了實(shí)現(xiàn)我們實(shí)際的分類目標(biāo),我們將二維數(shù)據(jù)轉(zhuǎn)換為一個長的一維向量。轉(zhuǎn)換是在所謂的扁平層中完成的,其后跟著一個或兩個全連接層。最后兩層中的神經(jīng)元類型類似于圖 2 所示的結(jié)構(gòu)。我們的神經(jīng)網(wǎng)絡(luò)的最后一層的輸出數(shù)量與要區(qū)分的類別數(shù)量完全相同。此外,在最后一層,數(shù)據(jù)也被歸一化以產(chǎn)生概率分布(97.5% 為貓,2.1% 為豹,0.4% 為老虎等)。
至此,我們的神經(jīng)網(wǎng)絡(luò)建模就結(jié)束了。但是,內(nèi)核和濾波器矩陣的權(quán)重和內(nèi)容仍然未知,必須通過網(wǎng)絡(luò)訓(xùn)練來確定,才能使模型正常工作。