01-深度學習入門課程初體驗
從對「機器學習」、「深度學習」一無所知,到現在能夠自己製作樣本訓練網路,感覺已經算是入門了。這三個月時間先後學習了吳恩達的Deeplearning.ai課程、斯坦福李飛飛的CS231n課程、台灣大學李宏毅的MachineLearning課程和DeepLearning「花書」的一部分。後者在理論層面的闡述能夠讓人對機器學習有更深刻的認識,但是較為晦澀難懂,應該算是通往高水平的進階之路吧。所以本文只針對初學階段,對前三門課總結一點感受。
由於深度學習的火爆再加上Python語言的開放性,網路上的相關資源實在太多。這幾門課的視頻和課件、作業都很容易找到,不再贅述。Deeplearning.ai和CS231n我基本把作業過了一遍,MachineLearning的作業沒碰(其實我還找到了一些比如強化學習的視頻課程,但是感覺自己應該跳出基礎課程走向下一步了)。前兩門課的課堂講解與課後作業比較獨立,單獨把作業拿出來也可以作為非常好的學習資料。但是課堂講解偏重理論,課後作業偏重實踐,不可偏廢。
1.Deeplearning.ai
吳恩達老師搞這麼個公開課的目的就是普及推廣人工智慧,內容做的非常用心,講解清晰語氣溫柔,彩筆板書重點突出,對小白十分友好,堪稱入門典範。對某一方面的技術,只講state of the art的一兩種方法,不講太多避免增加學生負擔,這與SC231n形成鮮明對比。很多方法用一個視頻介紹完之後,下一個視頻會緊跟著從直覺上解釋為什麼這個方法好使,「intuition」這個詞成了這門課的高頻辭彙。這些解釋與花書相比顯得沒那麼系統,但是最重要的是讓學生理解和接受。例如吳老師介紹優化演算法的時候,用氣溫統計方法引出指數加權平均進而引出Momentum優化演算法,令我印象深刻。他在介紹完CNN之後還進一步延伸出了三維的CNN,其他課程這點都沒提到。
由於篇幅限制,作業內容沒有完全展開,採用了「填空」的形式:在一套完整的YOLO程序中,只提出了threshold和non_max_suppression兩段讓學生完成,對於這個演算法來說其他更重要、更基礎的內容就都放在了引用文件里。
缺點是吳老師說話稍顯啰嗦,很多時候一句話重複好幾遍。用滑鼠在電腦里寫字作為板書,看的過程中還能夠識別出他寫的是什麼,等事後再找出課件來複習的時候可能根本看不懂他寫了神馬……作業缺少對網路進行訓練的內容。
2.CS231n
對很多方法以圖表形式進行歸納總結,參考價值很高。
以文獻綜述的思維講解一類方法,一堂課前邊花了大量時間講前人最先採用什麼方法、後來又發現什麼方法,最後才提到現在主流方法是BlaBlaBla,而前邊那些都已經被淘汰了!以科研的組織方式提供作業代碼,學生需要在引用文件里改代碼,而不是像Deeplearning.ai那樣只需要面對一個主文檔。這也許會讓初次接觸Python的學生感到阻力,但是對於機器學習工作者,作業有利於和課程之後的工作項目無縫銜接。
對LSTM、DeepReinforced、GAN講的過於粗糙,有片面追求課程內容覆蓋面的嫌疑。
李飛飛教授領銜這門課的講師名單,但2017年的課卻只在最開始以一段錄像的形式出現,其餘課程全部留給兩個研究生和兩位嘉賓,簡直掛羊頭賣狗肉。李教授在機器學習科研領域做出了重大貢獻,但是單從這門課來講,她很不負責任。
這門課課堂錄像包含大量斯坦福學生的隨堂提問與講師的解答,非常有助於看視頻學習的人加深理解。兩位主講博士生中男生Justin表現較好,女生Serena水平不夠擔任這門課的老師。
3.MachineLearning
看完以上兩門課,我本打算把台大李宏毅老師的課隨便過一遍,並沒抱過高期望。畢竟前邊的都是美帝名校人工智慧主流圈高端教授出身,台灣的一個老師又能怎樣呢?但是看過幾堂課之後我就完全被打臉了。
整個課程自始至終,李老師以數碼寶貝作為例子引出各種機器學習的概念,課程中穿插各種動漫、金庸小說、古詩詞、傳統藝術等內容,舉重若輕風趣幽默。比如用駕校開車技巧來比喻Over fitting,比如用「天下武功唯快不破」來解釋Stochastic Gradient Descent,比如用「各懷鬼胎」來形容GAN……為了把很多概念解釋得通俗易懂,李老師在PPT製作中下了大量功夫。
對我影響最大的是前邊關於「回歸」、「錯誤來源」等基本概念的幾堂課:之前在別的課程那裡大量接觸又在作業中實際操作了一下,所以對這些概念「面熟」而似懂非懂;到了李老師這裡一經點撥,我竟有一種「通透的快感」……
另外,現如今機器學習的幾個前沿研究方向包括:深度網路,序列網路,強化學習和生成對抗網路。李老師設想了這樣一個自然語言對話程序:兩個Deep的RNN通過Reinforced Learning進行模擬對話並作為Generator,第三個NN 作為Discriminator判別上述對話是否為人類的講話。
我概括成這個公式:GAN(Reinforced(DeepRNN1,DeepRNN2),DeepNN3)
他設想的這個東西不知道有沒有高人在做,這簡直是當今機器學習前沿技術的集大成。
對我而言這堂課的缺點是內容龐雜、相互關聯不緊密,無監督學習那部分感覺用處不大也聽不懂,有些就直接跳過了。另外講課時李老師常發現ppt里的一些小錯,但這些都瑕不掩瑜。
4.其他
如今深度學習編程語言幾乎被Python壟斷,對這門語言我一年前只看了一點廖雪峰的網頁教程,基本等於不會。但是,我認為一個機器學習初學者如果有其他語言編程的工作背景,那麼一邊學機器學習內容消化作業代碼,一邊了解Python語言是可行的。Tensorflow等程序包同理。
課程學習階段是在Windows系統下進行的,Python、Tensorflow的安裝也給我帶來了一些麻煩:Deeplearning.ai的作業要求Python3,所以我安裝的是Python3.6版本的anaconda。如果要用Tensorflow的話,需要給anaconda單獨創建一個Tensorflow的environment再安裝。到了CS231n這裡,CNN作業有一部分叫Fast layers,替代原始代碼使用能夠提高CNN運行速率,但它要用到一個程序包Cython進行C語言編譯,這個又是基於Python2.7。我試圖再創建一個Python2.7的environment運行但失敗了,最後直接放棄了。
另外Deeplearning.ai作業里YOLO演算法一節中yad2k程序與權重文件yolo.h的下載,CS231n作業CIFAR10數據集的下載,都需要花點時間在網上找。
看帖子的時候一位網友的話讓我印象深刻,大意是:以前也會編程,但通過學習Python和Linux讓他打開了一扇通往新世界的門,這個新世界的名字叫「開源」。Python語言的開放性,github源碼分享的興起,傳統行業某項技術從論文發表到受到關注再到落地應用大概至少要十年時間,但是人工智慧技術這幾年的突破式發展甚至無法忍受傳統文獻出版流程而需要arxiv了,凡此種種都讓我膚淺地領略到了互聯網行業的威力。這種開放性也應該成為以後各種技術發展的趨勢。
推薦閱讀:
※Hulu機器學習問題與解答系列 | 第七彈:非監督學習演算法與評估
※Valse2018參會小結——生成對抗網路系列1
※如何測量這個世界的混亂-1-定義混亂
※Fisher Linear Discriminant Analysis(Fisher線性判別分析)
TAG:機器學習 | TensorFlow |