今天早上吃完飯,在去往實驗室的路上,腦袋了突然冒出一個奇怪的想法,就是萬一將來有機會去心儀神往的百度、阿里這些深度學習的尖端企業去工作的話,人家公司的HR問我“既然你是做DeepLearning研究的,那你對深度學習有什么個人體會?”,我該怎么說呢?不要覺得自己將來進不了百度、進不了阿里,一切皆有可能,因此為了這一丟丟的可能性,我就在食堂去往實驗室的路上,用這二十分鐘的時間稍稍把自己腦子中的想法總結總結,現在到了實驗室了,寫篇博客和大家交流交流,這篇博客純屬我個人一時的頭腦風暴,沒有圖沒有代碼,稍顯枯燥,麻煩大家多給點耐心吧。搞了一年多的深度學習理論,回過頭來想想,有三點值得一提:深度學習的特征提取能力為什么會強?深度學習應該用什么設備?深度學習和人工智能有何緊密聯系?
這個問題困擾著很多深度學習的領域的大牛,很多人都希望能夠解決這個問題,對應的就是試圖從理論層面解讀深度學習結構的優勢所在以及產生這種優勢的原因。畢竟ImageNet都快被完爛了,CNN的參數也幾乎被調遍了,但本質問題依然沒有解決,人類的求知本能迫使我們去想:“DeepLearning為什么 這樣厲害”?我覺得有一篇文章堪稱DeepLearning理論探索的代表之作,那就是湯曉鷗教授團隊的“DeepID三部曲”中的第三篇文章,文章中對卷積神經網 絡中各個卷積核的形式、卷積層輸出特征的特點都做了很詳細的研究分析,可以算是卷積神經網絡理論分析的開端。不過由于我目前沒有硬件條件去運行一個一二十 層的CNN,但這并不能阻止我去思考問題的本質,因此我準備從我的研究生課題“子空間方法深度化改造”的角度來對這個問題進行一點點解讀。
子空間深度化是2015年才提出的一個概念,目的就是將經典的子空間特征提取方法和識別方法(如Eigenface和Fisherface)進行堆疊, 重點對比分析深度化改造前后的模型在特征提取能力方面的改進,這個研究方向的鼻祖當屬魯繼文和馬毅兩位深度學習領域的大牛,他們提出的PCANet算法一 鳴驚人,提醒了我們深度學習原來還可以這樣研究,他們在《PCANet: A Simple Deep Learning Baseline for Image Classification?》一文中說的明白“我們提出一個簡單的深度學習框架,為后續的深度學習研究提供一個基準”,我也是在這篇文章的啟發下開始做這個方向。
我個人認為子空間深度化改進研究得出的研究成果(PCANet、LDANet、RandNet)雖然在識別率方面與卷積神經網絡相比沒有明顯的優勢,但其更容易去回答“深度學習的特征提取能力為何如此之強?”這個問題。因為單層的PCA、Fisher特征識提取識別模型大家都再熟悉不過,深度化改造之 后,加深了結構(兩層或者多層),但基本的映射核、映射方式都沒變,從單一變量法的角度分析,改造之后模型特征提取能力的提升只能歸功于改造之后的深度結 構。至于模型的特征提取能力到底提升了多少,大家可以查閱那篇文獻,我這里給出一個通俗的比喻,改造前,這個單層模型只是Eigenface和 Fisherface,改造之后它們就搖身一變,成了能夠在某些領域甚至可以與CNN媲美的DeepLearning。因此我認 為,DeepLearning之所以強,很大程度上就是得益于它的深度結構,這也正好印證了Hinton的觀點:多隱層神經網絡具有更為優異的特征學習能力。
做深度學習就得想辦法加速,這個沒得商量(當然PCANet這樣的模型除外),加速的手段有兩個,一是專用神經網絡芯片,而是英偉達的N卡。
想想當時自己之所以關注這個加速問題,說真的主要還是羨慕。由于我剛剛入手深度學習時,也是一腔熱血,立志研究CNN,調得一手好試,但很快發現我目前的硬件條件是達不到的,沒有一兩塊泰坦級別的顯卡(必須是英偉達的),一切都是浮云。人就是這樣,越羨慕什么就越想了解什么。因此在平時看到有關神經網絡加速方面的資料時都會格外注意,一個偶然的機會看了一本CCF的專刊,題名就叫《類腦計算與神經網絡加速》,從而對深度學習的加速設備問題有了一定的、系統的理解。
首先,神經網絡加速的手段有兩個,一是專用神經網絡芯片,二是英偉達的N卡。說實話這兩個手段都是雙刃劍,各有利弊。神經網絡芯片的加速比非常高,實驗證明其加速比是同品級英偉達N卡的2.5倍甚至更高,對應的缺點就是神經網絡芯片對算法的要求比較苛刻,具體說就是一種型號的神經網絡芯片只能加速幾種甚至一種神經網絡算法,這也是芯片的硬件結構限制。相應的英偉達的GPU雖然在加速性能上比神經網絡芯片差一點,但是其泛化性能巨強,一塊GPU幾乎可以加速所有的神經網絡算法,畢竟有CUDA編程,GPU本身并不直接接觸DeepLearning,因此無論何種神經網絡算法,在GPU看來都是一樣的,加速矩陣運算就可以了。綜上,我個人認為,在算法研究開發、調試的過程中可以用GPU加速,在產品實用階段就考慮用神經網絡芯片了。舉個例子,2014年谷歌的VGG模型,主題是“把CNN搞得更深”,8層到16層層層測試,在這個測試過程中顯然要用GPU來干,等測試完成了,知道多少層最優,什么參數設置最合理,再放到專用神經網絡芯片上生產就可以了。
之所以提這一點,主要是受最近阿爾法狗人機大戰的影響。在我寫這篇博客的時候阿爾法狗已經以4:1的比分贏得勝利。當年IBM的深藍,靠著大規模集群的超級計算能力,用暴力搜索的方式在國際象棋上戰勝了人類,如今阿爾法狗靠著深度學習在圍棋上戰勝了人類。不得不說,21世紀DeepLearning成為了人工智能的核心,說到這里就可以扯一點點類腦計算的知識。深度學習火了,就有人開始想用它來造機器人,來模擬人腦。其中在類腦計算過程中給我印象最深的就是神經擬態計算機。所謂神經擬態,就是最原始、最大化的模擬人腦的神經元,但是生物系統是模擬的,沒錯,人腦也是模擬系統,所以神經擬態計算機也拋棄了數字形式,改用模擬計算機。你人腦中的神經元怎么連我這里的模擬神經元就怎么連,你人腦有多少神經元我這里就造多少神經元,因此有大牛推測:假如規模是唯一瓶頸的話,機器人將會把人類當寵物。原因很明確:人類經過幾萬年的進化才達到現在的腦容量,而計算機中芯片的規模只需幾年就可以翻番。而且這里我也發現了一個有趣的現象:只要什么技術火了,總會有人第一時間把它往人工智能方面用,當年的超級計算機、現在的極深層DeepLearning,看來只要是人工智能不統治世界,人類就永遠不會放棄研究。
注:各位有什么好的想法可以來探討下,大家共同進步!
移動一小步,視界大不同!
更多程序員技術交流,奇聞軼事,
歡迎掃描下面二維碼下載CSDN
Android、iOS移動客戶端。