人工智能如今已滲入到生活中的各個(gè)方面。從引人關(guān)注的圍棋、象棋對(duì)手,到手機(jī)支付、手機(jī)解鎖中的人臉識(shí)別,都運(yùn)用了人工智能。
圍棋人工智能
人工智能具備很多人類(lèi)的感知和識(shí)別能力,能自動(dòng)完成一定的任務(wù),例如識(shí)別聲音、認(rèn)出人臉和做出決策等等。
人工智能 AI
如何自動(dòng)完成任務(wù)?以圖像識(shí)別為例,在以前,我們會(huì)給計(jì)算機(jī)輸入一系列規(guī)則讓它推理(rule-basedreasoning),它采用特征點(diǎn)歸類(lèi)的方法來(lái)辨別圖像,但這很難能準(zhǔn)確地識(shí)別。
如果我們告訴計(jì)算機(jī)左邊是蘿卜,那它可能會(huì)以為右邊的甜筒也是胡蘿卜。
要想實(shí)現(xiàn)真正的人工智能,人們研究出了機(jī)器學(xué)習(xí)。
機(jī)器學(xué)習(xí)簡(jiǎn)單說(shuō)就是,編寫(xiě)出一套算法,使計(jì)算機(jī)能“自動(dòng)”地進(jìn)行學(xué)習(xí)。我們不需要輸入大量規(guī)則,只需用少量的規(guī)則建造一個(gè)模型,計(jì)算機(jī)就可以通過(guò)學(xué)習(xí)來(lái)創(chuàng)造新的數(shù)據(jù),從而對(duì)新事物做出分析和判斷。
通過(guò)學(xué)習(xí)左邊的 1,可以判斷出右邊也是 1
之前我們示范過(guò),如何用一個(gè)神經(jīng)網(wǎng)絡(luò),寫(xiě)出一套機(jī)器學(xué)習(xí)算法,來(lái)自動(dòng)識(shí)別未知的圖像。
一個(gè) 4 層的神經(jīng)網(wǎng)絡(luò)
輸入層經(jīng)過(guò)幾層算法得到輸出層
實(shí)現(xiàn)機(jī)器學(xué)習(xí)的方法有很多,近年被人們討論得多的方法就是深度學(xué)習(xí)。
深度學(xué)習(xí)是一種實(shí)現(xiàn)機(jī)器學(xué)習(xí)的技術(shù),它是用深度神經(jīng)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)機(jī)器學(xué)習(xí),網(wǎng)絡(luò)深度比原始網(wǎng)絡(luò)加深了數(shù)十甚至上百倍。
增強(qiáng)學(xué)習(xí)也可以達(dá)到機(jī)器學(xué)習(xí)的效果,感興趣的小伙伴可以上網(wǎng)搜索,在此暫時(shí)沒(méi)有推薦的書(shū)籍。
一個(gè) 34 層的深度神經(jīng)網(wǎng)絡(luò)
這種網(wǎng)絡(luò)可以解決什么問(wèn)題呢? 其中最熱門(mén)的就是圖像識(shí)別問(wèn)題。
比如計(jì)算機(jī)拿到一些貓的照片后,可以識(shí)別出中華田園貓和其他種類(lèi)的貓,然后分類(lèi)。這種看似很廢的用處,如果運(yùn)用到醫(yī)療領(lǐng)域,比如分辨好的和病變的器官,或是目前大熱的人臉識(shí)別,都將改變?nèi)祟?lèi)的生活。
人臉識(shí)別
從 2010 年開(kāi)始,為了更好地發(fā)展圖像識(shí)別技術(shù),人們建立了圖像數(shù)據(jù)庫(kù) ImageNet,甚至舉辦了基于數(shù)據(jù)庫(kù)的識(shí)別大賽 ILSVRC,比比看誰(shuí)的圖像識(shí)別方法更好。
ImageNet 數(shù)據(jù)庫(kù)
深度學(xué)習(xí)在比賽上得到了很好的成績(jī),因此受到更多人的重視并發(fā)展。在這之前,發(fā)展受限主要是因?yàn)樾酒惋@卡帶不動(dòng)(運(yùn)算量實(shí)在太大了)。
舊的圖像識(shí)別方法
無(wú)論在深度學(xué)習(xí)普及之前還是之后,對(duì)于圖像處理大都是將圖像轉(zhuǎn)換成一個(gè)向量之后進(jìn)行計(jì)算,從而進(jìn)行分類(lèi)。根本的問(wèn)題就是,如何用一個(gè)高維的向量來(lái)表示一個(gè)圖片。
表示方法有很多,比如采用提取圖像的定向梯度直方圖得到特征,并對(duì)所提取的特征進(jìn)行處理。這樣確保能盡量保留每一類(lèi)物體圖片的特征,從而區(qū)分出不同的圖片。
然而,采用這種特征提取方法的計(jì)算機(jī)識(shí)別率并不高,錯(cuò)誤率仍然接近 28%,比人類(lèi)笨太多了。下面介紹幾種深度學(xué)習(xí)的方法,它們使識(shí)別錯(cuò)誤率極大地降低。
卷積神經(jīng)網(wǎng)絡(luò):AlexNet
在 2012 年,深度學(xué)習(xí)第一次被運(yùn)用到 ImageNet 比賽中。其效果非常顯著, 錯(cuò)誤率從前一年的 26% 直接降低到 16%。
那一年,奪冠的圖像識(shí)別神經(jīng)網(wǎng)絡(luò)被稱為 AlexNet,本質(zhì)是卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeural Network)。
AlexNet 結(jié)構(gòu)
卷積神經(jīng)網(wǎng)絡(luò)是一類(lèi)采用卷積層,池化層和全連接層的神經(jīng)網(wǎng)絡(luò)。它不去具體地查看每一個(gè)像素點(diǎn)之間的關(guān)系,而是對(duì)每一小塊區(qū)域進(jìn)行編碼。
多層神經(jīng)網(wǎng)絡(luò)的編碼復(fù)雜程度較高,所以分類(lèi)的結(jié)果也比較準(zhǔn)確。我們以識(shí)別字母 A 為例,簡(jiǎn)單地解釋一下原理。
C:卷基層;S:池化層;F:全連接層
假設(shè)我們要編碼 A ( INPUT )的右下角,那被指向的 C1(第二個(gè)框)的點(diǎn)就代表了 A 被選出的區(qū)域。C1 一共有 6 張,每張的同一個(gè)位置都在編碼這個(gè)區(qū)域。S2(第三個(gè)框)是池化層,對(duì)上一層(C1 )進(jìn)行簡(jiǎn)化。C2 上有一個(gè)小框指向 S2,說(shuō)明這塊區(qū)被簡(jiǎn)化。S2 又被選出一塊指向 C3(第四個(gè)框),表示這塊區(qū)域在C3上被編碼。
全連接層用幾個(gè)數(shù)字表示一塊區(qū)域。F6(右二)用 84 個(gè)數(shù)據(jù)來(lái)代表前面的 120 個(gè)數(shù)據(jù),最后 OUTPUT 則為輸出 10 個(gè)數(shù)據(jù),這 10 個(gè)數(shù)據(jù)就代表了一開(kāi)始的 A。(此處應(yīng)有掌聲!!!)
卷積相當(dāng)于兩個(gè)圖像之間、像素點(diǎn)與像素點(diǎn)之間一一對(duì)應(yīng)的乘法,再進(jìn)行求和。
圖形處理器-GPU(Graphics ProcessingUnit)
由于采用多層的神經(jīng)網(wǎng)絡(luò),且每一層的結(jié)果都是一個(gè)高維的特征圖像,所以計(jì)算量也相當(dāng)大,在 AlexNet 中就需要確定 6 千萬(wàn)個(gè)參數(shù)來(lái)確定這個(gè)網(wǎng)絡(luò)。
那么多的網(wǎng)絡(luò)光靠 CPU 可能算不來(lái),只能借助 GPU 來(lái)計(jì)算。GPU是什么呢?
GPU 工作原理
看不懂就掠過(guò)吧,不重要
CPU 只有 8 個(gè)可以計(jì)算的核,一次只能運(yùn)行 8 個(gè)進(jìn)程,而 GPU 中帶有成百上千個(gè)核,一次可以進(jìn)行成百上千次計(jì)算(也叫并行計(jì)算),可以確定網(wǎng)絡(luò)和參數(shù)。
更深更精確的網(wǎng)絡(luò):GoogleNet 與 VGGNet
2014 年,又誕生了兩種經(jīng)典的深度神經(jīng)網(wǎng)絡(luò),GoogleNet 和 VGGNet。他們都是基于卷積神經(jīng)網(wǎng)絡(luò)的深度神經(jīng)網(wǎng)絡(luò),和 AlexNet 的基本原理基本一致。這兩個(gè)網(wǎng)絡(luò)除了深度不一樣,自身也各有特色。
GoogleNet
網(wǎng)絡(luò)參數(shù)量過(guò)多會(huì)導(dǎo)致訓(xùn)練時(shí)的效果好,但測(cè)試時(shí)的效果差(這也叫過(guò)擬合現(xiàn)象),GoogleNet 可以解決這個(gè)問(wèn)題。它采用了“InceptionModule”卷積結(jié)構(gòu),可以得到一個(gè)稀疏的網(wǎng)絡(luò)結(jié)構(gòu)來(lái)緩解這種現(xiàn)象,提高測(cè)試時(shí)的準(zhǔn)確率。
Inception Module
其總的架構(gòu)如下圖:
VGGNet
和 GoogleNet 不一樣的是,VGGNet 采用了更傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò),結(jié)構(gòu)也比較簡(jiǎn)單。其卷積核全部采用了小卷積核,可以盡量減少參數(shù)的數(shù)量和計(jì)算量。
VGGNet
這兩種網(wǎng)絡(luò)都將錯(cuò)誤率降低至 7.5% 以下,但是仍然和人類(lèi)的錯(cuò)誤率有一點(diǎn)差距。
理論上,在一定的深度范圍內(nèi),網(wǎng)絡(luò)越深,準(zhǔn)確率就會(huì)越高(這點(diǎn)在 VGG 的論文中有實(shí)驗(yàn)的證明,文末附有相關(guān)閱讀)。但若超出范圍,即使網(wǎng)絡(luò)再深下去,準(zhǔn)確率也沒(méi)有明顯提高。那么,網(wǎng)絡(luò)深度真的到頭了么?
將網(wǎng)絡(luò)深度發(fā)揮到極致:ResNet
事實(shí)證明并沒(méi)有。2015 年,ILSVRC 中一個(gè)更深的網(wǎng)絡(luò)誕生了——ResNet。
ResNet 的網(wǎng)絡(luò)基本原理和卷積神經(jīng)網(wǎng)絡(luò)一樣,但直接將原來(lái)最深 22 層的深度神經(jīng)網(wǎng)絡(luò)擴(kuò)展到了 152 層。
ResNet-34 網(wǎng)絡(luò)的卷積核基本都和 VGGNet 一樣采用小卷積核,它最大的特點(diǎn)是用到了余項(xiàng)函數(shù),在兩層的卷積層之間有直接的神經(jīng)網(wǎng)絡(luò)連接。這樣的好處是,當(dāng)我們使用反向傳播算法來(lái)計(jì)算卷積層變化率時(shí),梯度變化不會(huì)減小到 0。
梯度也是偏微分,它越大就說(shuō)明需要越大的力度優(yōu)化網(wǎng)絡(luò),所以我們要不斷地減小梯度,但若小到等于 0,它就相當(dāng)于無(wú)效了。
ResNet 的誕生也得益于 GPU 的并行計(jì)算越來(lái)越先進(jìn),GPU 的顯存從原來(lái)的 4G 級(jí)別擴(kuò)展到了 12G 級(jí)別,可以完成更大的計(jì)算量。
一塊先進(jìn)的 GPU
ResNet 的圖像識(shí)別錯(cuò)誤率低至 3.6%,這是什么概念?這么說(shuō)吧,人類(lèi)測(cè)試的錯(cuò)誤率是 5%,也就是人工智能比人類(lèi)更智能了!
無(wú)監(jiān)督學(xué)習(xí)的實(shí)例:GAN 網(wǎng)絡(luò)
以上的深度學(xué)習(xí)方法都是監(jiān)督學(xué)習(xí),籠統(tǒng)地說(shuō),就是給計(jì)算機(jī)一些例子和答案,讓它去學(xué)習(xí)。但有時(shí),例子根本就沒(méi)有答案,這就需要用到無(wú)監(jiān)督學(xué)習(xí)了。最近比較受矚目的是 GAN (生成對(duì)抗網(wǎng)絡(luò)),它不屬于圖像識(shí)別,而是可以生成圖像!
網(wǎng)絡(luò)生成圖像
一般別人只使用單個(gè)的深層神經(jīng)網(wǎng)絡(luò),而 GAN 用了兩個(gè)相互競(jìng)爭(zhēng)的網(wǎng)絡(luò),互相通過(guò)零和游戲進(jìn)行競(jìng)爭(zhēng),最后還會(huì)給出判定,如果一方勝利,那另一方就失敗。
這兩個(gè)網(wǎng)絡(luò)如何 “ 畫(huà) ” 出我們想要的圖像呢?
假設(shè)我們要生成一個(gè)藝術(shù)風(fēng)格的圖像,這兩個(gè)網(wǎng)絡(luò)就可以看作是生成器和判別器。生成器的任務(wù)就是生成一個(gè)藝術(shù)的圖像,判別器的任務(wù)就是判斷這個(gè)圖像到底藝不藝術(shù)。
生成器對(duì)比真實(shí)數(shù)據(jù)和生成數(shù)據(jù)
GAN 完成訓(xùn)練的標(biāo)志就是,它無(wú)法相對(duì)于另一個(gè)網(wǎng)絡(luò)取得進(jìn)步(就是沒(méi)辦法畫(huà)得更好了!)。完成得最理想的效果就是,判別器沒(méi)辦法區(qū)分出真實(shí)的數(shù)據(jù)和生成器產(chǎn)生的數(shù)據(jù)。
GAN 的對(duì)抗其實(shí)和人類(lèi)很像。比如熊孩子在學(xué)寫(xiě)字,老師在旁邊檢查,那熊孩子就是生成器,老師就是判別器。如果有一天,老師再也挑不出熊孩子寫(xiě)字的毛病了,熊孩子就榮升乖孩子,寫(xiě)字訓(xùn)練就結(jié)束了。
上面為樣本,下面為生成圖
最終會(huì)被對(duì)比和判別
深度學(xué)習(xí)的運(yùn)用
比較常見(jiàn)的深度學(xué)習(xí)應(yīng)用就是圖像識(shí)別。在監(jiān)控領(lǐng)域,我們可以自動(dòng)識(shí)別人臉和汽車(chē),人臉識(shí)別也是用了深度學(xué)習(xí)之后才有較高的準(zhǔn)確率。
監(jiān)控識(shí)別
另一個(gè)應(yīng)用就是機(jī)器翻譯。傳統(tǒng)的機(jī)器翻譯是將語(yǔ)言規(guī)則提取出來(lái),然后再人工去添加各種特征,永遠(yuǎn)無(wú)法覆蓋所有的語(yǔ)言現(xiàn)象。比如,北方的機(jī)器翻譯不出南方人的話。
近年來(lái),各大翻譯軟件都用了深度學(xué)習(xí)技術(shù),利用神經(jīng)網(wǎng)絡(luò)改進(jìn)關(guān)鍵模塊,通用性大大地增強(qiáng),南北差異再也不是問(wèn)題了!
◆◆◆
可以看出,深度學(xué)習(xí)不僅作用于圖像,還可以延伸到更廣的領(lǐng)域。
隨著學(xué)界對(duì)深度學(xué)習(xí)研究越來(lái)越成熟,更深層且功能更強(qiáng)大的神經(jīng)網(wǎng)絡(luò)不斷地被開(kāi)發(fā)。并且,各種計(jì)算器件比如 CPU 和 GPU 在不斷強(qiáng)化,甚至出現(xiàn)了更高效的器件比如 FPGA,相信未來(lái),這項(xiàng)技術(shù)會(huì)帶我們進(jìn)入一個(gè)更智能的世界。
本期作者
新加坡南洋理工大學(xué) 許悅聰
深圳職業(yè)技術(shù)學(xué)院 RoboMaster 戰(zhàn)隊(duì)顧問(wèn)
沒(méi)事愛(ài)造無(wú)人機(jī),熱愛(ài)機(jī)器學(xué)習(xí)的博士生
- 專(zhuān)業(yè)不枯燥,解讀機(jī)器人信息 -