如何評價 Coursera 的機器學習 (Andrew Ng) 課程?
本人統計學專業在讀小本一枚。
暑假想擴充一下知識面,正好看到了這門課對背景知識要求不高,感覺像是給非計算機專業的業餘愛好者開得課程,於是選了這門課。現在已經Week6結束了,現在已經介紹了線性回歸、logistic回歸、BP神經網路以及機器學習演算法中的一些常見問題(例如overfitting、underfitting等),以及一些解決方法(learning curve之類的)。接下來準備學習SVM、推薦系統 (recommend system) 設計和一些案例。小白有以下幾個問題:1. 這門課介紹的是非常基礎的基本思想,很顯然在實務中情況會複雜許多。那麼這個「複雜」指的是由於運算量龐大導致的演算法複雜化,還是有待解決的問題本身變得複雜了?由此引申的問題是1.1. 學了這門課,我們可以直接地將所學內容用在實踐中嗎?假設我能夠大部分理解教授slide中的內容(僅僅內容本身而已),80%地理解課程作業中的主程序內容(就是每章編程作業里的ex?.m,?為周數),能夠獨立地編寫、調試、完成作業。 2. 因為這門課是2011年開設的,教授課上提到的一些「前沿」內容但是在這三年中,數據分析領域有了很大的進步(我作為外行來看),這類的演算法是否已經有了替代品,或者直白地說,過時了?例如:在介紹到spam分類問題時,教授提到了porter stemmer英文分詞演算法,他認為這個演算法是很有用的,但我上網檢索了以後發現關於這個演算法的批判和改進方案還是挺多的。3. 這門課程對於機器學習的主流演算法、模型的介紹是否全面?例如:我只上到第六周,我看了syllabus他沒有直白地提到決策樹演算法,但我能夠經常地從研究機器學習的朋友口中聽到決策樹。教授把很大篇幅花在BP神經網路演算法的介紹上,是否可以理解為BP演算法是機器學習的主流演算法?4. 在實務中使用 Octave/MATLAB 來實現機器學習演算法是否是理想的選擇?除了免費開源與否以外, 在運算能力,尤其是針對於處理大規模數據時的性能、以及需要並行運算的情形等。
認識的做機器學習的朋友是用numpy和R來實現演算法,但教授對Octave的評價很高,並且說在矽谷大多數搞機器學習的程序員都是用Octave來做的。謝謝!
任何在科研上有所建樹的老師講課都是有個人偏見的。如果沒有這個認識,再加上對這個學門不了解,上所謂「牛」老師的課就會把某個人的偏見當作普遍現象。
但是反過來講,這些有偏見的私貨是很寶貴的,一般不會落在筆上,所以你看書看論文是看不到的,有選擇的吸取吧。
作為對比,請看Hastie的某張幻燈,什麼感覺?個人感覺ng的很多話都是用來鼓勵初學者的,不能全信。我也是初學者,來回答一下你的幾個疑問:1.更複雜的問題:你說的兩點都會出現,第一點就是複雜度上升問題,這個一般要gb級別的數據才會體現出來,解決辦法一般是分散式計算,比如Hadoop就是用來做這個的。第二個問題就複雜多了,比如現實中可能有數據質量問題(比如識別非結構化數據),數據維度問題(維數災),這時候可能就需要了解數據預處理技術;有些演算法可能因為實現對數據分布做了一些假設,在一些數據集上效果不好;有些演算法對初始化很敏感(kmeans),有些演算法對雜訊敏感(決策樹)等等,這時候需要對演算法作各種改進於是就會由一些經典的演算法衍生出一系列改進演算法。其他可能的問題暫時也想不到了。最後說一下編程問題,機器學習對編程的要求本身是不高的,當然我指的是初學階段,數據量不大時,而且更重要的是,ng的課對編程能力的要求似乎是做到了能降就降,幾乎每分programming作業都是只要求幾行代碼就OK了的那種。2.是不是有了替代品,作為初學者我不是特別熟悉這個領域的現狀和歷史,但是有一點可以肯定的是,ng介紹的都是演算法最簡單的應用情況,實際應用中肯定有各種各樣的改進演算法的。3.bp演算法的確是主流學習演算法的一種,但是本身也存在很多問題,我覺得ng只講bp的原因主要有兩點:一是它很簡單,基本上有高等數學基礎的都能理解;二點就是ng反覆強調的powerful,bp神經網路可以以任意精度逼近一個連續的非線性函數,這一點是被理論證明過的,這也是它成為經典的重要原因。也有很多其他的演算法,也是主流演算法,為什麼不講?可能就是不符合以上兩點吧,比如你說的決策樹,感覺在應用面上窄了點。模型的介紹肯定是不全面的。4.octave我一直覺得不好用,其實ng用octave主要是因為它開源每個人都下得到,而且作為腳本語言不需要太高的編程基礎,但是作為中國學生,我實在想不出用octave的意義何在,畢竟網上Matlab破解版想下就下。
首先,ML深究起來都是Stat Models + Causal Inference,所以題主學習ML的話是非常有優勢的。
針對Andrew這門課,其實我更欣賞的是一代神牛Tom Mitchell在CMU的ML公開課,他選的模型都比較經典(老),但是聽他講他對這些模型的理解,有時會有一種茅塞頓開撥雲見日的快感。
1. 現實中更複雜?
兩個方面,一,實際應用中面對的數據量無論從多樣性還是數量上來講都變得龐大,除卻工程角度本身不談,很難針對問題馬上就選擇出最合適的ML模型,通常的辦法是選擇通常善於處理該類型問題的諸多模型來分別測試,根據測試的結果再最終敲定相對來說最合適的模型來做tuning;二,每個模型都要實現,寫一個完成某作業的svm script跟實現一個足夠穩定足夠高效的svm tool/project是有很大區別的,除了代碼量本身的差異,甚至中間的參數差異都不是一個數量級的,設計與實現與維護帶來的諸多工程問題導致實際情況更加複雜。1.1. 直接應用?
完全可以,取決於你要處理什麼樣的問題。如果單純是對手中的小規模數據做些分析,更關注分析的結果,那其實除了直接implement模型之外,更推薦的辦法是使用一些現行的package來幫助你更簡單快速地完成任務。如果是對模型本身感興趣,想拿手中的數據來測試學習模型本身,那麼除了自己implement之外,請務必多看看書,對進一步理解模型非常有幫助。2. 模型過時?演算法過時?有朋友說演算法、模型永不過時,這句話也要從兩個側面看:
首先,大方向不同模型之間(e.g. SVM vs. DT)更多存在的是差異之分而非優劣之分,沒有所謂最好的模型,只有更適合面前問題的模型,這依賴於你對各類模型擅長解決怎樣的問題以及有什麼弊端的了解程度,以及你需要在怎樣的條件下解決這個問題,有時候結果並不總是那麼贊但是足夠輕量級快速便捷的分類模型反而會比結果贊但是耗時耗空間耗精力的模型更受歡迎。其次,針對同一類模型來說(e.g. DT vs. RandomForest),整體的趨勢是針對該模型的性能再不斷地被廣大研究者優化,這個更多地表現在可以解決的問題範圍的擴大、結果的正確程度提升、模型的魯棒性更加穩定、(有時)時間空間複雜度的優化這幾個方面。
如果說「過時」意味著「不夠好」,那麼也要看如何定義這個「不夠好」,這其實是個挺複雜的問題。
3. 課程全面?BP主流?
Andrew的這門課屬於intro-intro級別,所以大部分模型都是蜻蜓點水,重要地是灌輸模型的基本理念,所以說所有類型的模型都面面俱到是不太可能也不現實的。BP是否主流,看在哪個領域的應用吧,目前比較受關注的主流(濫用)模型應該是Deep Learning,其實所謂主流,也要分industry和academia,DL的瞬間爆紅更多還是幾個IT巨頭的帶動,YouTube用DL學貓固然效果不錯,不過任何問題都丟給DL還是未免太急功近利了些。
4. MATLAB?實現?如果想走ML這條路,還是挑一門趁手的語言找對應的包開始動手吧,MATLAB終究是要被你放棄的。題主問的很用心啊~我也是計算機視覺小白一枚,交流一下自己的看法。
1. 這門課介紹的是非常基礎的基本思想,很顯然在實務中情況會複雜許多。
那麼這個「複雜」指的是由於運算量龐大導致的演算法複雜化,還是有待解決的問題本身變得複雜了?都有。就拿課程里的房價預測問題舉例子,在現實中,一方面training samples數肯定很多,這導致運算量龐大,另一方面,此時考慮的特徵不再是課程里的3維或者2維,可能上百甚至成千上萬,這使待解決的問題很複雜。1.1. 學了這門課,我們可以直接地將所學內容用在實踐中嗎?可以。至少拿個線性SVM做個簡單的圖像的2分類是沒問題的。機器學習中想提高效果的話給對象找到適合的模型非常重要,換言之...任何一種模型都有其適合的數據群。2. 因為這門課是2011年開設的,教授課上提到的一些「前沿」內容但是在這三年中,數據分析領域有了很大的進步(我作為外行來看),這類的演算法是否已經有了替代品,或者直白地說,過時了?題主說到的porter stemmer我沒有研究。但是個人覺得演算法不會過時的。只能說現在找到了更好的方法來解這個問題,並不能說這個演算法永久的被我們拋棄。比如現在特別火的深度學習其實也就是前幾年沒有人用的神經網路堆了好幾層而已啦~。3. 這門課程對於機器學習的主流演算法、模型的介紹是否全面?相比較於他在斯坦福開的那門機器學習課,並不是很全面。題主如果感興趣的話可以搜斯坦福機器學習公開課看看。4. 在實務中使用 Octave/MATLAB 來實現機器學習演算法是否是理想的選擇?他們不用MATLAB的主要原因是不開源吧。。簡單的需求MATLAB肯定夠了!而且不要鄙視MATLAB哦,很強大的其實!
以上~要是有錯誤請各位指正。學統計的居然給自己定義成業餘的,學統計和數學的聽這門課比計算機系的輕鬆好么!計算機系才算是業餘的好么!1.兩種都有1.1能2.演算法不會過時,一是因為Ng講的都是基礎,懂了這些你學習更高級的演算法就會輕鬆,二是工業界都是用比較成熟的演算法,不會用比較前沿比較新的算.3.不全面,演算法多的是,BP不是主流。4.工業界很少用matlab和octave(matlab有版權問題,並且兩者都很慢),但是學習的時候用用無所謂,主要是快速實現關於語言,首先要搞清楚自己是做什麼任務什麼方向,是搞理論還是做應用的,做應用是在學術界混還是在工業界混,在工業界混是分做什麼應用,需要處理多大的數據,對速度的依賴程度如何,同樣是一個機器學習,要求是千差萬別的。
時至今日,我終於有這個資格來回答這個問題了。雖然樓主可能已經修完了,也回答了自己的部分問題,不過若我的回答能夠給後來人一些建議也不錯,先上圖:
我作為一名已工作的某二本的英語本科生說說自己的感受。
上這門課純碎是因為看到谷歌已經可以構建會自我學習的AI玩遊戲,感到很有趣,再加上今年3月的deepmind的圍棋大戰。所以純粹是興趣。首先語言方面的問題倒還好,雖然說我是英語專業的,但是為了保險起見,我還是帶著中文字幕一直在看,主要就是怕一些專業名詞,如果說沒有聽清楚,可能會造成理解上的誤解。
關於課程內容:在修這門課之前,我逛遍了幾乎所有關於智能課的題目,還記得其中有一個回答把這門課批得很入門,說甚至連入門都算不上。也許是我智商不夠吧…一開始剛上這門課的時候,我也覺得還算是比較簡單的,比如線性回歸,邏輯回歸之類的東西我還都是能聽得懂,所以還是能夠自己完成作業。但是,當上到神經網路這一段的時候,有很多的概念我就有點亂了。然後跳過了這個章節,看到後面的支持向量機,竟然更加不知道在講什麼東西了…
於是我放棄了一段時間…
回來後,我把後面的陸陸續續全部上完作業做完之後回過頭來,著重的啃我沒有看懂的神經網路以及支持向量機內容。
作業基本上都說只要三個小時就能完成……我可不是。光神經網路那一章(講解bp
網路的那一章節),我大概就花了好幾天的時間,反反覆復看樂視頻,做了筆記。參考了部分答案,才終於把那個作業寫完。是的,因為這門課很有名,所以說它的參考答案滿天飛…但是光看答案有什麼用呢我需要弄懂它才行。所以說我感覺這門課大部分的時間都花在課後理解它的原理上了---是模型構思的原理,不是數學原理。
現在針對性的回答一下提出的問題:
1.1. 學了這門課,我們可以直接地將所學內容用在實踐中嗎?這個,主要看你所謂的實踐是什麼?神經網路這一章節就有教你怎麼通過構建神經網路,來識別手寫數字的。 這個就可以用在再簡單的驗證碼識別上,算實踐么。支持向量機那一章就直接教你怎麼構建一個垃圾郵件分類器,算實踐么? 我覺得已經很實踐了。2. 因為這門課是2011年開設的,教授課上提到的一些「前沿」內容但是在這三年中,數據分析領域有了很大的進步(我作為外行來看),這類的演算法是否已經有了替代品,或者直白地說,過時了?
其實這個問題我覺得你不應該問。因為教給你的一定是至少經典的方法。也許現在不夠好使了,但了解它對你沒有壞處。總之,你不可能因為它過時而不去學它吧。3. 這門課程對於機器學習的主流演算法、模型的介紹是否全面?
不很全面。 因為我對強化學習很感興趣。所以當我上完後我驚訝的發現裡面只講了監督學習和非監督學習,沒有強化學習的內容。 但這個問題依然依然我覺得你不應該問。 因為沒有那個老師會把某個領域所有的知識都通過一套課程全部介紹給你的。4. 在實務中使用 Octave/MATLAB 來實現機器學習演算法是否是理想的選擇?
我不是這個領域的。但據我所知,Octave/MATLAB以及Python這類解釋性語言主要用來驗證演算法、模型。真的工業使用的話可能還得上C++。----------------------------我的總結:所謂師傅領進門,修行靠個人。 你只要知道這門課質量很高。適合有初級的高等數學知識的小白聽即可。然後上完後你對哪個部分感興趣,可以再自行谷歌。像我對強化學習很感興趣,接下來我會去聽edx上的cs118課程。優酷網-中國第一視頻網,提供視頻播放,視頻發布,視頻搜索
樓上說的都挺好的,我也來補充一些自己的認識吧:
這門課確實是非常入門級的課程,不過我覺得很好
1.複雜運算量龐大確實會導致演算法複雜化,這一點andrew在large scale machine learning中就提到了。用分散式系統做機器學習是個時髦值很高的東西。實踐中有待解決的問題本身也當然會比課程和作業里那些用於教學的問題更複雜。但即使沒那麼大運算量,想解決的問題也簡單,做一個機器學習系統還是有其他的事兒要做,即使不考慮怎麼獲取數據,怎麼把結果呈現出來等等實際問題,就談機器學習本身,就有比如feature selection, parameter tuning, error analysis一類的工作,甚至選什麼模型也是要費一番功夫的。就算這些都選好了,具體實現也有不同方法,就拿SVM來說,andrew也講了,我們作業里用的SVM性能是不行滴,只是兼容性好,實際中還是要用別的實現。1.1直接應用
看怎麼個應用法,如果眼前是學校中低級課程的作業那肯定能應用,如果說想用這門課所學做個有價值的東西,私以為還是不太可能,但這門課講的都是基礎,真正應用不管多高大上也不可能說這些基礎知識不起作用吧。2. 過時
(偷懶)「演算法不過時」3. 全面
明顯是不全面的,貝葉斯居然都沒講,決策樹也沒講,HMM也沒講4. Octave/Matlab做產品的話肯定是不用Octave/Matlab的,這玩意就是用來做prototype,其效率和對工業界產品的兼容性都不行,但也不要輕視,用人家先愉快地試驗,試驗好了再編程當然比直接硬上效率比較高。andrew不也講了,先用Matlab驗證演算法,然後用JAVA,C++實現云云。個人覺得聽他講的cs 229 或者tom mitchell 的10-601都比coursera版好多了
coursera裡面講的含糊其辭,讓人云里霧裡,相比之下,hinton的課程條理清晰,過程嚴謹,ppt詳實靠譜
Neural Networks for Machine Learning - University of Toronto | Coursera
ng的課明顯是導論級別的,只能說比科普深一點,面向的對象是想入門的同學。。。整個課程沒有加入貝葉斯,決策樹,隱式馬可夫等演算法就是很好的證明,因為講解這些需要聽眾有基本的概率,統計,隨機過程和多元統計分析的基礎。。。雖然我沒全看完,大致瀏覽了下syllabus,聽了幾節,發現基本都是不含概率分布的學習方法。。。不過他的課程還是非常值得一聽的
以目的為出發,如果是沒接觸過單單想入門,這個課程非常棒。如果在想深入了解下機制和原理,就需要自己推導些東西,另外找資料
我覺得不好。可能因為是面向小白的,所以很多地方講得太淺了,有時候會憑空給你一個公式,但是不告訴你它的推導過程、它表達的含義。我的建議是先找本書或者找幾篇博客,把機器學習的概念和基本的演算法了解一遍,然後直接上 cs229,哪怕你不聽課光看講義也行。
我也是一個初學者,雖然這門課雖然簡單,但是很重要,裡面有很多很好的細節,需要你去get到。
推薦閱讀:
※如何評價Deep and Hierarchical Implicit Models?
※已知兩個高斯分布及他們的關係,如何求條件期望?
※深度學習乃至機器學習和凸論有什麼本質聯繫?
※怎麼看待現在一些論文提出的新點子就只在mnist或者cifar上跑跑實驗?
※如何評價CVPR best paper simGAN?