【導讀】本文是系列文章的第二部分,重點(diǎn)介紹卷積神經(jīng)網(wǎng)絡(luò )(CNN)的特性和應用。CNN主要用于模式識別和對象分類(lèi)。在第一部分文章《卷積神經(jīng)網(wǎng)絡(luò )簡(jiǎn)介:什么是機器學(xué)習?——第一部分》中,我們比較了在微控制器中運行經(jīng)典線(xiàn)性規劃程序與運行CNN的區別,并展示了CNN的優(yōu)勢。我們還探討了CIFAR網(wǎng)絡(luò ),該網(wǎng)絡(luò )可以對圖像中的貓、房子或自行車(chē)等對象進(jìn)行分類(lèi),還可以執行簡(jiǎn)單的語(yǔ)音識別。本文重點(diǎn)解釋如何訓練這些神經(jīng)網(wǎng)絡(luò )以解決實(shí)際問(wèn)題。
神經(jīng)網(wǎng)絡(luò )的訓練過(guò)程
本系列文章的第一部分討論的CIFAR網(wǎng)絡(luò )由不同層的神經(jīng)元組成。如圖1所示,32 × 32像素的圖像數據被呈現給網(wǎng)絡(luò )并通過(guò)網(wǎng)絡(luò )層傳遞。CNN處理過(guò)程的第一步就是提取待區分對象的特性和結構,這需要借助濾波器矩陣實(shí)現。設計人員對CIFAR網(wǎng)絡(luò )進(jìn)行建模后,由于最初無(wú)法確定這些濾波器矩陣,因此這個(gè)階段的網(wǎng)絡(luò )無(wú)法檢測模式和對象。
為此,首先需要確定濾波器矩陣的所有參數,以最大限度地提高檢測對象的精度或最大限度地減少損失函數。這個(gè)過(guò)程就稱(chēng)為神經(jīng)網(wǎng)絡(luò )訓練。本系列文章的第一部分所描述的常見(jiàn)應用在開(kāi)發(fā)和測試期間只需對網(wǎng)絡(luò )進(jìn)行一次訓練就可以使用,無(wú)需再調整參數。如果系統對熟悉的對象進(jìn)行分類(lèi),則無(wú)需額外訓練;當系統需要對全新的對象進(jìn)行分類(lèi)時(shí),才需要額外進(jìn)行訓練。
進(jìn)行網(wǎng)絡(luò )訓練需要使用訓練數據集,并使用類(lèi)似的一組測試數據集來(lái)測試網(wǎng)絡(luò )的精度。例如CIFAR-10網(wǎng)絡(luò )數據集為十個(gè)對象類(lèi)的圖像集合:飛機、汽車(chē)、鳥(niǎo)、貓、鹿、狗、青蛙、馬、輪船和卡車(chē)。我們必須在訓練CNN之前對這些圖像進(jìn)行命名,這也是人工智能應用開(kāi)發(fā)過(guò)程中最為復雜的部分。本文討論的訓練過(guò)程采用反向傳播的原理,即向網(wǎng)絡(luò )連續展示大量圖像,并且每次都同時(shí)傳送一個(gè)目標值。本例的目標值為圖像中相關(guān)的對象類(lèi)。在每次顯示圖像時(shí),濾波器矩陣都會(huì )被優(yōu)化,這樣對象類(lèi)的目標值就會(huì )和實(shí)際值相匹配。完成此過(guò)程的網(wǎng)絡(luò )就能夠檢測出訓練期間從未看到過(guò)的圖像中的對象。
圖1.CIFAR CNN架構。
圖2.由前向傳播和反向傳播組成的訓練循環(huán)。
過(guò)擬合和欠擬合
在神經(jīng)網(wǎng)絡(luò )的建模過(guò)程中經(jīng)常會(huì )出現的問(wèn)題是:神經(jīng)網(wǎng)絡(luò )應該有多少層,或者是神經(jīng)網(wǎng)絡(luò )的濾波器矩陣應該有多大?;卮疬@個(gè)問(wèn)題并非易事,因此討論網(wǎng)絡(luò )的過(guò)擬合和欠擬合至關(guān)重要。過(guò)擬合由模型過(guò)于復雜以及參數過(guò)多而導致。我們可以通過(guò)比較訓練數據集和測試數據集的損失來(lái)確定預測模型與訓練數據集的擬合程度。如果訓練期間損失較低并且在向網(wǎng)絡(luò )呈現從未顯示過(guò)的測試數據時(shí)損失過(guò)度增加,這就強烈表明網(wǎng)絡(luò )已經(jīng)記住了訓練數據而不是在實(shí)施模式識別。此類(lèi)情況主要發(fā)生在網(wǎng)絡(luò )的參數存儲空間過(guò)大或者網(wǎng)絡(luò )的卷積層過(guò)多的時(shí)候。這種情況下應當縮小網(wǎng)絡(luò )規模。
損失函數和訓練算法
學(xué)習分兩個(gè)步驟進(jìn)行。第一步,向網(wǎng)絡(luò )展示圖像,然后由神經(jīng)元網(wǎng)絡(luò )處理這些圖像生成一個(gè)輸出矢量。輸出矢量的最大值表示檢測到的對象類(lèi),例如示例中的"狗",該值不一定是正確的。這一步稱(chēng)為前向傳播。
目標值與輸出時(shí)產(chǎn)生的實(shí)際值之間的差值稱(chēng)為損失,相關(guān)函數則稱(chēng)為損失函數。網(wǎng)絡(luò )的所有要素和參數均包含在損失函數中。神經(jīng)網(wǎng)絡(luò )的學(xué)習過(guò)程旨在以最小化損失函數的方式定義這些參數。這種最小化可通過(guò)反向傳播的過(guò)程實(shí)現。在反向傳播的過(guò)程中,輸出產(chǎn)生的偏置(損失 = 目標值-實(shí)際值)通過(guò)網(wǎng)絡(luò )的各層反饋,直至達到網(wǎng)絡(luò )的起始層。
因此,前向傳播和反向傳播在訓練過(guò)程中產(chǎn)生了一個(gè)可以逐步確定濾波器矩陣參數的循環(huán)。這種循環(huán)過(guò)程會(huì )不斷重復,直至損失值降至一定程度以下。
優(yōu)化算法、梯度和梯度下降法
為說(shuō)明訓練過(guò)程,圖3顯示了一個(gè)包含x和y兩個(gè)參數的損失函數的示例,這里z軸對應于損失。如果我們仔細查看該損失函數的三維函數圖,我們就會(huì )發(fā)現這個(gè)函數有一個(gè)全局最小值和一個(gè)局部最小值。
目前,有大量數值優(yōu)化算法可用于確定權重和偏置。其中,梯度下降法最為簡(jiǎn)單。梯度下降法的理念是使用梯度算子在逐步訓練的過(guò)程中找到一條通向全局最小值的路徑,該路徑的起點(diǎn)從損失函數中隨機選擇。梯度算子是一個(gè)數學(xué)運算符,它會(huì )在損失函數的每個(gè)點(diǎn)生成一個(gè)梯度矢量。該矢量的方向指向函數值變化最大的方向,幅度對應于函數值的變化程度。在圖3的函數中,右下角(紅色箭頭處)由于表面平坦,因此梯度矢量的幅度較小。而接近峰值時(shí)的情況則完全不同。此處矢量(綠色箭頭)的方向急劇向下,并且由于此處高低差明顯,梯度矢量的幅度也較大。
圖3.使用梯度下降法確定到最小值的不同路徑。
因此我們可以利用梯度下降法從任意選定的起點(diǎn)開(kāi)始以迭代的方式尋找下降至山谷的最陡峭路徑。這意味著(zhù)優(yōu)化算法會(huì )在起點(diǎn)計算梯度,并沿最陡峭的下降方向前進(jìn)一小步。之后算法會(huì )重新計算該點(diǎn)的梯度,繼續尋找創(chuàng )建一條從起點(diǎn)到山谷的路徑。這種方法的問(wèn)題在于起點(diǎn)并非是提前定義的,而是隨機選擇的。在我們的三維地圖中,某些細心的讀者會(huì )將起點(diǎn)置于函數圖左側的某個(gè)位置,以確保路徑的終點(diǎn)為全局最小值(如藍色路徑所示)。其他兩個(gè)路徑(黃色和橙色)要么非常長(cháng),要么終點(diǎn)位于局部最小值。但是,算法必須對成千上萬(wàn)個(gè)參數進(jìn)行優(yōu)化,顯然起點(diǎn)的選擇不可能每次都碰巧正確。在具體實(shí)踐中,這種方法用處不大。因為所選擇的起點(diǎn)可能會(huì )導致路徑(即訓練時(shí)間)較長(cháng),或者目標點(diǎn)并不位于全局最小值,導致網(wǎng)絡(luò )的精度下降。
因此,為避免上述問(wèn)題,過(guò)去幾年已開(kāi)發(fā)出大量可作為替代的優(yōu)化算法。一些替代的方法包括隨機梯度下降法、動(dòng)量法、AdaGrad方法、RMSProp方法、Adam方法等。鑒于每種算法都有其特定的優(yōu)缺點(diǎn),實(shí)踐中具體使用的算法將由網(wǎng)絡(luò )開(kāi)發(fā)人員決定。
訓練數據
在訓練過(guò)程中,我們會(huì )向網(wǎng)絡(luò )提供標有正確對象類(lèi)的圖像,如汽車(chē)、輪船等。本例使用了已有的 CIFAR-10 dataset。當然,在具體實(shí)踐中,人工智能可能會(huì )用于識別貓、狗和汽車(chē)之外的領(lǐng)域。這可能需要開(kāi)發(fā)新應用,例如檢測制造過(guò)程中螺釘的質(zhì)量必須使用能夠區分好壞螺釘的訓練數據對網(wǎng)絡(luò )進(jìn)行訓練。創(chuàng )建此類(lèi)數據集極其耗時(shí)費力,往往是開(kāi)發(fā)人工智能應用過(guò)程中成本最高的一步。編譯完成的數據集分為訓練數據集和測試數據集。訓練數據集用于訓練,而測試數據則用于在開(kāi)發(fā)過(guò)程的最后檢查訓練好的網(wǎng)絡(luò )的功能。
結論
本系列文章的第一部分《人工智能簡(jiǎn)介:什么是機器學(xué)習?——第一部分》介紹了神經(jīng)網(wǎng)絡(luò )并對其設計和功能進(jìn)行了詳細探討。本文則定義了函數所需的所有權重和偏置,因此現在可以假定網(wǎng)絡(luò )能夠正常運行。在后續第三部分的文章中,我們將通過(guò)硬件運行神經(jīng)網(wǎng)絡(luò )以測試其識別貓的能力。這里我們將使用ADI公司開(kāi)發(fā)的帶硬件CNN加速器的 MAX78000 人工智能微控制器來(lái)進(jìn)行演示。
免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問(wèn)題,請聯(lián)系小編進(jìn)行處理。
推薦閱讀:
“可靠、創(chuàng )新、服務(wù)”,12年開(kāi)拓進(jìn)取 江波龍旗下品牌FORESEE迎來(lái)質(zhì)變
納芯微王升楊:中國模擬芯片公司為汽車(chē)產(chǎn)業(yè)蓬勃發(fā)展注入新動(dòng)能