1. 程式人生 > >BAT機器學習面試1000題系列(第1~305題)

BAT機器學習面試1000題系列(第1~305題)

引言

在今年的神經網路頂級會議NIPS2016上,深度學習三大牛之一的Yann Lecun教授給出了一個關於機器學習中的有監督學習無監督學習增強學習的一個有趣的比喻,他說:如果把智慧(Intelligence)比作一個蛋糕,那麼無監督學習就是蛋糕本體,增強學習是蛋糕上的櫻桃,那麼監督學習,僅僅能算作蛋糕上的糖霜(圖1)。


圖1. Yann LeCun 對監督學習,增強學習和無監督學習的價值的形象比喻

1. 深度有監督學習在計算機視覺領域的進展

1.1 影象分類(Image Classification)

自從Alex和他的導師Hinton(深度學習鼻祖)在2012年的ImageNet大規模影象識別競賽(ILSVRC2012)中以超過第二名10個百分點的成績(83.6%的Top5精度)碾壓第二名(74.2%,使用傳統的計算機視覺方法)後,深度學習真正開始火熱,卷積神經網路(CNN)開始成為家喻戶曉的名字,從12年的AlexNet(83.6%),到2013年ImageNet 大規模影象識別競賽冠軍的88.8%,再到2014年VGG的92.7%和同年的GoogLeNet的93.3%,終於,到了2015年,在1000類的影象識別中,微軟提出的殘差網(ResNet)以96.43%的Top5正確率,達到了超過人類的水平(人類的正確率也只有94.9%).
Top5精度是指在給出一張圖片,模型給出5個最有可能的標籤,只要在預測的5個結果中包含正確標籤,即為正確

 

圖2. 2010-2015年ILSVRC競賽影象識別錯誤率演進趨勢


1.2 影象檢測(Image Dection)

伴隨著影象分類任務,還有另外一個更加有挑戰的任務–影象檢測,影象檢測是指在分類影象的同時把物體用矩形框給圈起來。從14年到16年,先後湧現出R-CNN,Fast R-CNN, Faster R-CNN, YOLO, SSD等知名框架,其檢測平均精度(mAP),在計算機視覺一個知名資料集上PASCAL VOC上的檢測平均精度(mAP),也從R-CNN的53.3%,到Fast RCNN的68.4%,再到Faster R-CNN的75.9%,最新實驗顯示,Faster RCNN結合殘差網(Resnet-101),其檢測精度可以達到83.8%。深度學習檢測速度也越來越快,從最初的RCNN模型,處理一張圖片要用2秒多,到Faster RCNN的198毫秒/張,再到YOLO的155幀/秒(其缺陷是精度較低,只有52.7%),最後出來了精度和速度都較高的SSD,精度75.1%,速度23幀/秒。 


圖3. 影象檢測示例


1.3 影象分割(Semantic Segmentation)

影象分割也是一項有意思的研究領域,它的目的是把影象中各種不同物體給用不同顏色分割出來,如下圖所示,其平均精度(mIoU,即預測區域和實際區域交集除以預測區域和實際區域的並集),也從最開始的FCN模型(影象語義分割全連線網路,該論文獲得計算機視覺頂會CVPR2015的最佳論文的)的62.2%,到DeepLab框架的72.7%,再到牛津大學的CRF as RNN的74.7%。該領域是一個仍在進展的領域,仍舊有很大的進步空間。

 圖4. 影象分割的例子

1.4 影象標註–看圖說話(Image Captioning)

影象標註是一項引人注目的研究領域,它的研究目的是給出一張圖片,你給我用一段文字描述它,如圖中所示,圖片中第一個圖,程式自動給出的描述是“一個人在塵土飛揚的土路上騎摩托車”,第二個圖片是“兩隻狗在草地上玩耍”。由於該研究巨大的商業價值(例如圖片搜尋),近幾年,工業界的百度,谷歌和微軟 以及學術界的加大伯克利,深度學習研究重地多倫多大學都在做相應的研究。

圖5.影象標註,根據圖片生成描述文字


1.5 影象生成–文字轉影象(Image Generator)

圖片標註任務本來是一個半圓,既然我們可以從圖片產生描述文字,那麼我們也能從文字來生成圖片。如圖6所示,第一列“一架大客機在藍天飛翔”,模型自動根據文字生成了16張圖片,第三列比較有意思,“一群大象在乾燥草地行走”(這個有點違背常識,因為大象一般在雨林,不會在乾燥草地上行走),模型也相應的生成了對應圖片,雖然生成的質量還不算太好,但也已經中規中矩。


圖6.根據文字生成圖片

2.強化學習(Reinforcement Learning)

在監督學習任務中,我們都是給定樣本一個固定標籤,然後去訓練模型,可是,在真實環境中,我們很難給出所有樣本的標籤,這時候,強化學習就派上了用場。簡單來說,我們給定一些獎勵或懲罰,強化學習就是讓模型自己去試錯,模型自己去優化怎麼才能得到更多的分數。2016年大火的AlphaGo就是利用了強化學習去訓練,它在不斷的自我試錯和博弈中掌握了最優的策略。利用強化學習去玩flyppy bird,已經能夠玩到幾萬分了。

  圖7. 強化學習玩flappy bird

谷歌DeepMind發表的使用增強學習來玩Atari遊戲,其中一個經典的遊戲是打磚塊(breakout),DeepMind提出的模型僅僅使用畫素作為輸入,沒有任何其他先驗知識,換句話說,模型並不認識球是什麼,它玩的是什麼,令人驚訝的是,在經過240分鐘的訓練後,它不光學會了正確的接球,擊打磚塊,它甚至學會了持續擊打同一個位置,遊戲就勝利的越快(它的獎勵也越高)。視訊連結:Youtbe(需翻牆),優酷


圖8.使用深度增強學習來玩Atari Breakout 強化學習在機器人領域和自動駕駛領域有極大的應用價值,當前arxiv上基本上每隔幾天就會有相應的論文出現。機器人去學習試錯來學習最優的表現,這或許是人工智慧進化的最優途徑,估計也是通向強人工智慧的必經之路。

3深度無監督學習(Deep Unsupervised Learning)–預測學習

相比有限的監督學習資料,自然界有無窮無盡的未標註資料。試想,如果人工智慧可以從龐大的自然界自動去學習,那豈不是開啟了一個新紀元?當前,最有前景的研究領域或許應屬無監督學習,這也正是Yann Lecun教授把無監督學習比喻成人工智慧大蛋糕的原因吧。
深度學習牛人Ian Goodfellow在2014年提出生成對抗網路後,該領域越來越火,成為16年研究最火熱的一個領域之一。大牛Yann LeCun曾說:“對抗網路是切片面包發明以來最令人激動的事情。”這句話足以說明生成對抗網路有多重要。 
生成對抗網路的一個簡單解釋如下:假設有兩個模型,一個是生成模型(Generative Model,下文簡寫為G),一個是判別模型(Discriminative Model,下文簡寫為D),判別模型(D)的任務就是判斷一個例項是真實的還是由模型生成的,生成模型(G)的任務是生成一個例項來騙過判別模型(D),兩個模型互相對抗,發展下去就會達到一個平衡,生成模型生成的例項與真實的沒有區別,判別模型無法區分自然的還是模型生成的。以贗品商人為例,贗品商人(生成模型)製作出假的畢加索畫作來欺騙行家(判別模型D),贗品商人一直提升他的高仿水平來區分行家,行家也一直學習真的假的畢加索畫作來提升自己的辨識能力,兩個人一直博弈,最後贗品商人高仿的畢加索畫作達到了以假亂真的水平,行家最後也很難區分正品和贗品了。下圖是Goodfellow在發表生成對抗網路論文中的一些生成圖片,可以看出,模型生成的模型與真實的還是有大差別,但這是14年的論文了,16年這個領域進展非常快,相繼出現了條件生成對抗網路(Conditional Generative Adversarial Nets)資訊生成對抗網路(InfoGAN)深度卷積生成對抗網路(Deep Convolutional Generative Adversarial Network, DCGAN)更重要的是,當前生成對抗網路把觸角伸到了視訊預測領域,眾所周知,人類主要是靠視訊序列來理解自然界的,圖片只佔非常小的一部分,當人工智慧學會理解視訊後,它也真正開始顯現出威力了。

圖9 生成對抗網路生成的一些圖片,最後邊一列是與訓練集中圖片最相近的生產圖片


3.1條件生成對抗網路(Conditional Generative Adversarial Nets,CGAN)

生成對抗網路一般是根據隨機噪聲來生成特定型別的影象等例項,條件生成對抗網路則是根據一定的輸入來限定輸出,例如根據幾個描述名詞來生成特定的例項,這有點類似1.5節介紹的由文字生成影象,下圖是Conditioanal Generative Adversarial Nets論文中的一張圖片,根據特定的名詞描述來生成圖片。(注意:左邊的一列圖片的描述文字是訓練集中不存在的,也就是說是模型根據沒有見過的描述來生成的圖片,右邊的一列圖片的描述是訓練集中存在的)


圖10. 根據文字來生成圖片條件生成對抗網路的另一篇有意思的論文是影象到影象的翻譯,該論文提出的模型能夠根據一張輸入圖片,然後給出模型生成的圖片,下圖是論文中的一張圖,其中左上角第一對非常有意思,模型輸入影象分割的結果,給出了生成的真實場景的結果,這類似於影象分割的反向工程。
圖11. 根據特定輸入來生成一些有意思的輸出圖片生成對抗網路也用在了影象超解析度上,2016年有人提出SRGAN模型,它把原高清圖下采樣後,試圖用生成對抗網路模型來還原圖片來生成更為自然的,更逼近原影象的影象。下圖中最右邊是原圖,把他降取樣後採用三次差值(Bicubic Interpolation)得到的影象比較模糊,採用殘差網路的版本(SRResNet)已經乾淨了很多,我們可以看到SRGAN生成的圖片更為真實一些。

 

12.生成對抗網路做超解析度的例子,最右邊是原始影象

生成對抗網路的另一篇有影響力的論文是深度卷積生成對抗網路DCGAN,作者把卷積神經網路和生成對抗網路結合起來,作者指出該框架可以很好的學習事物的特徵,論文在影象生成和影象操作上給出了很有意思的結果,例如圖13,帶眼睛的男人-不戴眼鏡的男人+不帶眼睛的女人=帶眼睛的女人,該模型給出了圖片的類似向量化操作。

圖13. DCGAN論文中的例圖生成對抗網路的發展是在是太火爆,一篇文章難以羅列完全,對此感興趣的朋友們可以自己在網路搜素相關論文來研究
openAI的一篇描述生成對抗網路的部落格非常棒,因為Ian Goodfellow就在OpenAI工作,所以這篇部落格的質量還是相當有保障的。連結為:Open AI 生成對抗網路部落格

3.2 視訊預測

該方向是筆者自己最感興趣的方向,Yann LeCun也提出,“用預測學習來替代無監督學習”,預測學習通過觀察和理解這個世界是如何運作的,然後對世界的變化做出預測,機器學會了感知世界的變化,然後對世界的狀態進行了推斷。
今年的NIPS上,MIT的學者Vondrick等人發表了一篇名為Generating Videos with Scene Dynamics的論文,該論文提出了基於一幅靜態的圖片,模型自動推測接下來的場景,例如給出一張人站在沙灘的圖片,模型自動給出一段接下來的海浪湧動的小視訊。該模型是以無監督的方式,在大量的視訊上訓練而來的。該模型表明它可以自動學習到視訊中有用的特徵。下圖是作者的官方主頁上給出的圖,是動態圖,如果無法正常檢視,請轉入官方網站
視訊生成例子,下圖的視訊是模型自動生成的,我們可以看到圖片不太完美,但已經能相當好的表示一個場景了。 

 圖14. 隨機生成的視訊,沙灘上波濤湧動,火車賓士的場景條件視訊生成,下圖是輸入一張靜態圖,模型自動推演出一段小視訊。 圖15.根據一張草地靜態圖,模型自動推測人的移動場景,該圖為動圖,如果無法檢視,請訪問圖16.給出一張鐵道圖,模型自動推測火車跑過的樣子,該圖為動圖,如果無法檢視,請訪問MIT的CSAIL實驗室也放出了一篇部落格,題目是《教會機器去預測未來》,該模型在youtube視訊和電視劇上(例如The Office和《絕望主婦》)訓練,訓練好以後,如果你給該模型一個親吻之前的圖片,該模型能自動推測出加下來擁抱親吻的動作,具體的例子見下圖。 
 圖17. 給出一張靜態圖,模型自動推測接下來的動作哈佛大學的Lotter等人提出了PredNet,該模型也是在KITTI資料集上訓練,然後該模型就可以根據前面的視訊,預測行車記錄儀接下來幾幀的影象,模型是用長短期記憶神經網路(LSTM)訓練得到的。具體例子見下圖,給出行車記錄儀前幾張的圖片,自動預測接下來的五幀場景,模型輸入幾幀影象後,預測接下來的5幀,由圖可知,越往後,模型預測的越是模糊,但模型已經可以給出有參加價值的預測結果了。圖片是動圖,如果無法正常檢視,請訪問論文作者的部落格


圖18. 給出行車記錄儀前幾張的圖片,自動預測接下來的五幀場景,該圖為動圖,如果無法檢視,請訪問


4 總結

生成對抗網路,無監督學習視訊預測的論文實在是太多,本人精力實在有限,對此感興趣的讀者可以每天刷一下arxiv的計算機視覺版塊的計算機視覺和模型識別神經網路和進化計算人工智慧等相應版塊,基本上每天都有這方面新論文出現。影象檢測和分割,增強學習,生成對抗網路,預測學習都是人工智慧發展火熱的方向,希望對深度學習感興趣的我們在這方面能做出來點成果。謝謝朋友們的閱讀,對深度無監督學習感興趣的朋友,歡迎一起學習交流,請私信我。

5 參考文獻

在寫本文的過程中,我儘量把論文網址以連結的形式附著在正文中.本文參考的大部分部落格和論文整理如下,方便大家和自己以後研究檢視。

參考部落格

  • 參考論文