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