如何正確的學習Coursera上Andrew Ng的機器學習課程?

題主目前大三,數學基礎都有,編程語言會的有c,c++,java,python,現在開始自學機器學習。通過知乎搜「機器學習入門」開始了解到Andrew Ng的課程,已經看了好幾天了,雖然題主四級也過了,但是看視頻好有壓力,我從網上弄了中文字幕的視頻看,感覺比直接看效果好,但是看完了也沒什麼感覺。。。。就跟老師上似的,左耳朵進右耳朵出,效果十分不好,而且Andrew Ng的課不用python好不適應,求過來人給給經驗~~~


剛剛刷完這門課,過來答一下這個問題。

其實今年做畢設的時候我刷過其中一部分課程,當時在做deep learning,其中涉及到不少概念都與machine learning相關,於是就走馬觀花跳著看了一部分視頻,但總感覺只是懂個皮毛,所以這次決定從頭到尾完整地刷一遍,把一些概念再熟悉一遍,把習題和代碼作業都解決掉。在刷的過程中越來越愛上了Coursera這個平台,從lecture到notes到quiz到assignment,從概念和實現兩個層面來帶著你鞏固知識點,lecture視頻緩衝快,但感覺Ng語速節奏太慢,所以我一般調成1.5倍速來看,一開始我用中文字幕,但後來發現有的中文字幕翻譯的零零碎碎,句子被打碎影響理解,但英文字幕就好一些,而且Ng這門課就是給小白入門的,所以英文也很簡單,只要有一點英語基礎的,建議直接看英文字幕,畢竟之後搞ml的話,各種論文著作文檔都是英文的。notes也很全面,quiz難度不大但對於理解lecture的內容很有幫助,assignment的代碼基本框架都給你,你只需要把一些關鍵的公式向量化就可以了,所以我非常推薦做完assign把代碼(ex.m)完整的看一遍,而不是只看實現的那一個方法,完成代碼後可以通過序列號提交,終端會顯示每道題得分,這個贊爆了,不過coursera上不是每門課都有這個,希望以後更多的課可以配置上。當然,再強調一遍,這門課是給小白的,所以刷完這門課僅僅是初步入門(甚至連入門都算不上),因為為了照顧小白的數學底子,有些涉及到偏複雜的概率論的知識點都沒講(其實也不複雜,只不過需要更多時間做解釋),比如MDPs HMM,其實這門課就是CS 229: Machine Learning的簡化版,所以如果時間充裕,其實可以直接上手學cs299,那個講的更全面更細緻,難度也高一點,涉及比較多的公式推導.如果是想做computer vision的,stanford還有門精品課:Stanford University CS231n: Convolutional Neural Networks for Visual Recognition想做nlp的,stanford還有一門Stanford University CS224d: Deep Learning for Natural Language Processing這兩門課都有全套的lecture video slice assign。
下一步準備配合著台灣林軒田的《機器學習基石+技法》把李航的《統計學習方法》這本書走一遍,據說林軒田的教程要比ng難不止一個數量級,這門課雖然從coursera上撤下來了(據說是因為課程平台升級?),但從林老師個人網站Hsuan-Tien Lin還是可以找到video assign以及slice的,希望能抽時間刷完,等刷完我再開個『如何評價林軒田的機器學習教程?』問題聊一下。另外我把這門課的ppt截圖都弄下來了,方便以後複習查閱,需要自取。
傳送門:Yuliang"s Blog


3不知道樓主的數學基礎是什麼
我覺得這課的三大數學基礎是 微積分calculus 線代linear algebra 和 凸優化convex optimization
我不覺得這門課是零基礎的課程。

因為matlab的代碼 都是向量化的,沒有紮實的線代基礎難以完成assignment

其實如果你真的想了解 機器學習 我推薦以下這門課,這門課真的是零基礎。
好處是在於 你能快速了解 機器學習是幹嘛的,還能用python 寫出一些你馬上可以用到的小程序,
他用的都是編譯好的庫,你自己的編程任務很少。
缺點就是 學到的編程技術很少,
不過真的很適合入門。
https://www.coursera.org/learn/ml-foundations


如果你更關注如何在現實中如何應用,我並不推薦你去學習這門課,有更好的課程適合你,而不是被幾個Title蒙蔽了雙眼,失去了自己的判斷能力。事實上這個課更多的人是沖著StanFord和Andrew Ng教授的名氣去上的,拿到這個課程的證書能為為自己的形象加分不少。

課程確實非常的簡單易懂,幾乎稍微困難的地方就會很細緻的講解,講解非常的細緻,入門機械學習的,我上了大概5周,作業也都積極完成了,但發現一直在講演算法和如何在octave裡面進行數據處理,應用層面講得都是很基礎的例子沒有太強的實踐操作價值,因為實際情況要複雜的多。我簡單瀏覽了整個課程的內容,直到最後我也沒發現有在應用層面的具體講解,最後依然是在講演算法,所以我就去試著尋找其他更高效的課程了。

經過一段時間的搜尋,我發現了華盛頓大學開的機器學習課程

相比Andrew Ng的機器學習,華盛頓大學開的機器學習專項課程要系統全面得多,分為6個部分,每個部分大概都是6周得時間,學習時間大概是Andrew Ng課程的2.5倍,最後一個部分是一個綜合化的智能應用的畢業設計,會綜合你所有學到的,非常具有實戰性。

有以下幾個方面的原因我建議你去學習這門課

  • 並不比Andrew Ng差的老師

Carlos Guestrin是機器學習平台公司 Dato 的 CEO,同時也是亞馬遜資助的機器學習教授。2008 年,Carlos 被美國《大眾科學》雜誌評選為 2008 年「十大科學傑出人才」之一,還是 DARPA 信息科學與技術(ISAT)顧問小組的成員

  • 華盛頓的機器學習專業不亞於斯坦福

華盛頓的機器學習專業是美國前10之內,並不比斯坦福差,人工智慧一些關鍵的學派就誕生於華盛頓大學,機器學習領域也是人才輩出

  • 顛覆了傳統的教育方式

授課方式創了先例,整個課程的設計獨具匠心,是真正的從學生的角度出發,之前的機器學習的授課方式幾乎全部是從演算法開始的,講到最後講到具體應用。然而從理論到現實應用的鴻溝大家想必都清楚。

這個課直接從應用案例開始講起,回歸/分類/協同過濾/情感分析等都會具體去講怎麼實現應用,並且會告訴你如何在Python中利用網上一些現有的庫來實現特定的功能,也就是說基本上在課程的第一部分你就可以全面的知道機器學習能夠在現實生活中的應用,以及簡單方式去實現一些功能。這種部分顛倒的教育方式不僅會讓你學得非常有意義感、目標感而且為你後面做畢設帶來非常大的幫助,你能在學完第一部分的時候就開始構思你的畢設,然後第二到第五部分就會詳細講解你存在的知識漏洞,你會很清楚自己自己所需要的知識。

如上圖所描述的,Modelparmaeters和Optimization algorithm這個部分會暫時擱置,先講清楚這個機器學習系統的建立是怎樣的,讓你弄懂整個東西。

先建立完整概念就不會是盲人摸象,你能知道

在專項課程的2,3,4,5階段分領域進行深入講解在各種複雜的現實情況下如何實現你的機器學習任務,

最後說個題外話:希望這個教育方式能夠被教育界多多借鑒。

順便說一句,多去想想應用如何結合現實世界創造商業價值!
難有個屁用啊(看到有些人一上來就推薦各種對初學者難的教程,我只能呵呵了),當你真實的去想一個能應用在現實生活中的應用的時候你會發現難點真不是機器學習演算法,別覺得機器學習這東西多高大上,很多複雜的演算法根本就用不上,有價值數據需要自己想盡辦法獲取。最有價值的點和難點在於對現實世界的抽象能力和把想法變成程序的實現思路。

當然你想做數據科學家的話我沒話說,我想說絕大部分人達不到這個要求,並且這方面人才正趨於飽和,並且具有頭部效應,門檻很高。

這世界真不缺會按照各種教程學的人,中國尤其如此,缺的是創新,能用技術更好解決需求的人。

機器學習和編程在未來算是基礎工具,學了這個你能看見很多別人看不見的機會。

https://www.coursera.org/learn/ml-foundations附上傳送門,感興趣的可以去看看,期待你能做出你自己人工智慧應用,如果你有好的想法也歡迎私信我。


這個課裡面數學推導都模糊化了,對於直觀理解一些概念挺有幫助的,所以我會將它用於入門學習。

但是各概念make sense以後,我發現我並不能將裡面的知識串起來。比如最基礎的linear regression,為什麼用mean squared error做cost function,難道只是求梯度方便嗎?(初學時我就是這麼以為的)

後來讀了 統計學習方法,以及bengio的deep learning書(其中講解了機器學習的基礎部分,數學較多),我才知道之所以用mean squared error,是因為這是在假設p(y|x)是正態分布的情況下,通過maximum likelihood estimation(極大似然估計)推導出的。而之所以假設正態分布,是因為正態分布是已知均值和方差的條件下,熵最大的分布,也就是其中的先驗知識最少,最隨機。

所以學到這裡,我才不僅知道這個模型是什麼樣的,還大概知道是怎麼來的。如果有和我一樣的困惑,就推薦讀李航老師的 統計學習方法 以及bengio deep learning一書的 applied math and machine learning basics部分(加起來一百四十頁)。

還在入門。


看起來吃力主要原因不在於語言,而在於數學,機器學習的核心是數學而不僅是編程,計算機只是數學的延伸。線性代數矩陣運算要非常熟悉才行,這塊不熟的話基本就算是中文也沒有用,如果很熟的話看公式聽不懂也能理解。如果數學不是很強,建議去看麻省的線性代數。機器學習的學習曲線對於一般人來說還是非常陡峭的,編程自不必說,更難是數學,各種優化理論、概率論、線性代數、圖論,所以做這塊的都是計算機科學或者應用數學專業,而且都要到碩士之後才能稍微有點感覺,原因就是沒有過硬的數學基礎很難做出獨立研究或開發自己的演算法。而只會調用現成的包,含金量就跟計算機培訓差不多。
其實人工智慧在專業領域會細分很多,比如計算機專業就會偏向機器學習,統計學家偏向統計學習,這兩者的區別就在於學習時採用的方法不一樣。一般來說,機器學習更偏向於矩陣運算,會有大量的矩陣求逆、相乘、點乘等,所以Ng推薦使用Matlab或者Oracle(此處應為Octave,感謝指正),因為雖然Python也有相應的計算庫,但在自己設計演算法和調試的時候不如Matlab方便,因此我也建議使用Matlab,可以更好理解其背後的數學思想。而統計學習會偏向概率論,所以統計學習往往會有大量概率分布和模擬數,就不具體展開了。Coursera的機器學習課程其實還是偏入門的,可以跟著一起看上海交大張志華教授的機器學習概論和統計學習概論,另外推薦李航的統計學習方法,深入淺出。還是強調機器學習的本質是數學,所以不要糾結於聽英語還是看中字,有那個時間還不如找一些凸優化和概率論的書看。


雖然Coursera上的課我也上完了,我也很感激Ng為全世界的學生提供免費的學習資源,但是整體上來說,這門課只是大師通俗的幫我們把學過的知識與機器學習聯繫起來。而我們只是看到了山,離山頂還非常非常遠。


通過了課程但是沒買證書的路過……
整體上還是很通俗易懂的——一般理工科學生的線性代數和概率論基礎就足以支撐這門課的學習了。然後全套中文字幕翻譯質量也是很好的——可以直接幫助理解一些英語辭彙。
學這個課,只要記得認真記筆記做作業就行——建議Windows和OS X用戶都安裝MATLAB(Mathworks為這門課程提供了專用的免費License),比OCTAVE好用一些。然後MATLAB代碼的風格更接近於數學公式本身,還是要多練習一下。

最後,阻止我通過這門課的最大障礙是Coursera的小霸王伺服器。


謝邀。

看完視頻要做作業啊。(2015-11-13補充:如果不能理解做作業的重要性,建議用業餘時間刷一下Coursera上的Learning how to Learn)

多學一門編程語言累不死,慢慢你就習慣不寫冒號寫分號了。Matlab會比你想像的有用而且好用很多。


大二時候學過這門課,滿分結的,關於你的問題:
1. 不需要MatLab基礎,開頭有簡略的輔導,夠用,後期Lab遇到不知道的函數邊bing邊做不成問題
2. 英文開字幕,不會的單詞查出來,有些詞重複率非常高,幾次就記住了
3. 一定要通篇看一遍代碼,只是填空的話效果很差


幾點小建議:
1.請不要看中文字幕,聽不懂可以開英文,這樣對於之後不管是做作業也好,查資料也好,ML的內容很多都是英文的解釋,要給自己這樣的英文閱讀習慣而不是中翻英英翻中的習慣(曾經因為中文的語句理解強行翻譯導致對於英文概念的理解出錯的路過)
2.請善於Matlab這個工具,個人認為ML不是為了學習編程而存在的,是更進階的,結合數據統計和演算法知識的綜合應用,編程是基礎(務必掌握,掌握也不容易,掩面)
3.Ng老師講的挺通俗的,更多的閱讀和資料查閱需要自己去做,因為融會貫通更多得靠自己,多去質疑,然後找資料回答自己的質疑。


看視頻是沒什麼感覺,還是要動手做起來才行。那幾個編程作業一定要做做(這可是這門課的精髓),甚至可以先看作業,看看自己哪些點不懂,再看視頻,你就知道看視頻的時候要關注哪些點了。不會暈暈地左耳進右耳出。
做了那幾個作業我反而覺得octave很好用啊,更貼近矩陣運算,遠遠比python好啊。
雖然離工業界還有點遠,但學完這門課你能掌握機器學習的基本概念和套路。
我當年學的時候還沒中文字幕,現在貌似有了。一開始啃的還是cs229,那個還要難一點。


對於計算機系的來說,NG的做為啟蒙,然後,就可以拿著《機器學習實戰》,開始用pyhton這把鎚子,先做東西去了,為啥?因為python里有很多機器學習的庫,做為計算機的,可以先做東西,調用庫,做個東西出來,舉個簡單的栗子:以前開車的人很多是要懂修車的,現在開車的人有多少懂修車,當然,如果你懂修車更好,更好的方法是,先對機器學習有一個直觀的認識,然後,常用的演算法先有個印象,然後,再研究某一類問題時,知道要選哪一種演算法 ,先知道調用哪些機器庫,在熟悉後,然後再去研究別人的源碼,看看別人是怎麼實現的,看不懂,再去補充演算法的原理及相關的數學知識,不然,很有可能是入寶山而空手而回,很多人第一次吃自助餐,幾個大雞腿和豬蹄膀就把自己給塞飽了,而這兩個恰恰經常是自助餐里最便宜的,你心裡沒有一個菜譜,怎麼知道哪些東西最好吃呢?


  1. 視頻開兩倍速看,有驚喜
  2. 做作業啊。我這個暑假一開始也看了一個月視頻沒做作業,結果沒有卵用。後來去找VGG的CNN pratical來做了一發,效果拔群。
  3. 建議的學習方法:拿一個問題來,先試著解決一下。發現問題或者困難,再去研究為什麼。

coursera上不本身就有中文字幕嗎。。。
我覺得感覺左耳朵進右耳朵出是正常的,因為講得不深又太慢了。。。可以每章之後找個別人做的筆記(網上有的是)掃一眼整理下思路就好了
再說我覺得這門課離實際真正做還有點遠。。

================我又來更新了=================

牆裂推薦ufldl,也有中文版翻譯,簡潔明了,幾小時零基礎入門機器學習╮(╯▽╰)╭


我覺得Andrew Ng的語速已經比較慢了,而且講得很清楚,講後面的知識如果需要用到前面的知識也會再次給列出來,上Jeff Leek的Genomic Data Science才是崩潰,三分鐘的視頻我愣是看了一小時。
首先我覺得你要想好為什麼要學這門課、要學到多深。Machine learning的應用很廣泛,在涉及到數據的各個領域多少都會有些應用。我自己對於數學和統計比較了解,所以我更需要的是看他怎樣從最淺顯的數學統計知識出發,來應用到實際問題中,比如說我覺得neural network就和基因統計有著某種程度上的相通和一致,以後遇到類似的問題或許可以從機器學習中尋求答案神馬的。而且我不會去追求編程上的excellence,他assignment裡面提供的code我只是作為一種information去參考,不要求自己全部弄懂。
然後就是我自己的習慣,在看這種可以隨時暫停的視頻的時候(要知道這真是一種奢侈啊,對於沒有錄視頻習慣並且講義需要自己課上抄並且內容難懂到崩潰的學校來說),一定要做筆記,我覺得哪怕你和他的slides抄得一樣呢,在抄寫的過程中也一定會對知識進行理解和複習,而且最近這門課不是開認證了嘛,有了notes我就能很輕易地把之前未認證的quiz都重新快速過一遍,有遺忘的部分不用一個個去視頻里找答案。如果英語沒那麼好的話還可以在自己抄的講義旁邊進行中文批註,方便以後複習的時候進行再次理解。好記性不如爛筆頭嘛。
我覺得這門課還是很容易跟上的,另一個方法就是活用討論discussion這個版塊。如果覺得做exercise吃力的話討論版塊上有mentor的tutorial啊,基本上就是手把手教你寫code了。如果覺得自己熟悉matlab的話盡量不要先去看tutorial吧,比如可以想一下是用loop還是vectorisation,然後再去看tutorial,比較一下自己和他的方法,想一下為什麼他要這麼做,這樣自己對matlab的理解就能更上一層樓啦。
這門課是個很好的introduction,但是他講得實在是太簡略了,SVD都不教(我還想複習一遍啊啊啊),所以其實也是挺適合數學基礎沒有特別紮實的人,他主要提供的是idea,會讓我覺得:啊,原來還能這麼應用啊。


自薦一波我寫的gitbook,Introduction · 斯坦福機器學習筆記,排版做到了儘可能的好。部分課程補充了一些知識點,如 SVM 的 SMO 等,所有演算法沒有使用課後 octave 的 homework,個人不喜歡填空式的作業,所以使用了 python 進行了演算法的完整實現。


同大三,前幾日完成了coursera的machine learning。
說實話,我的英語不太好,剛剛開始看只能開著中文字幕聽著英文學,聽多了時間長了,會發現很多的辭彙都是重複的,會有很多的高頻詞,不用查google也就自然記住了詞義,時間長了,關掉所有字幕純粹聽英文也能聽得懂大部分,所以,語言關不是問題。還有一點,ng很喜歡在視頻開頭複述上次視頻講了什麼,本次會講什麼,典型的,他會這樣說:in last vedio,...in this vedio, we are going to talk about...(多麼簡明易懂:-) )

其次作為一個ml的初學者,ng的課程確實做到了通俗易懂,數學不會講得太深,很多是定性的講大致的變化趨勢,更為嚴格的數學證明略去了,用一種快速的而又不失全面性的方式講述ml中的各類演算法。

再說說關於ex的問題。在此之前我是接觸過python的numpy的,但是在使用matlab一段時間後發現matlab有一些python無法相比的優勢,matlab更直接,更容易上手,不過關於語言工具還是要見仁見智了,依自己的習慣特點,怎樣順手怎樣來。

ex的文檔真是詳細,說實話看著文檔step by step 的做編程練習一點都不像在做作業,更像是一個經驗豐富的老師寫好了解題步驟一步一步引導著你去完成習題。編程比較簡單,理解了基本的原理,再把公式進行向量化,這樣就能完成大部分的習題。所以編程作業的關鍵,我覺得應該是理解原理和向量化。

當然還有一點我覺得應該是好好讀易讀ex里提供的matlab代碼,因為在以後的實際工作學習中不會有這樣寫好的代碼,還是要我們自己根據實際情況自己寫,所以學習一下他人的思路和寫法還是很有好處的。ng的編程作業更像是填空題,填對正確答案能跑出正確結果即可,實際情況更像是給你一張白紙,讓你自己獨立的完成數據載入,歸一化,可視化,計算等等事情。

以上是我作為一個初學者的理解和感受,如有錯漏歡迎指正,相互交流。


已經把這個課程學完了,而且所有的練習都做了。

總體感覺這門課講的淺顯易懂,把那些比較複雜的數學推導都跳過了,是非常不錯的入門教程,但是如果想經過這門課馬上就入門機器學習是不可能的。這門課應該是算是以科普為主吧!

如果有刷這門課練習碰到問題的,可以參考下我之前上傳的答案,所有的題目都做好了。

附上鏈接:吳恩達機器學習課程練習實現


直接看CS229 Lecture notes吧,Andrew Ng的講義,一定一定要把涉及的數學過程弄清楚,親手驗算推導,看到想用python,那是極好的,你可以看看機器學習實戰這本書。我當時學習的一點心得,希望對你有用。


吳老師講得還是非常深入淺出的,BP那塊講的非常易懂。我的經驗是聽不懂的部分暫停視頻甚至反覆看直到消化(公開課的好處)。課後quiz一定要及時做,非常有助於知識點鞏固。assigment也不要害怕,每次都有詳細的說明,整個程序框架都已經給你了只需要完成重要介面的內部實現即可。另外Matlab十分容易上手的說。

總之就是不要幻想困難,要堅持。


這門課真的是很適合入門,我一個學機械工程的都表示難度可以接受,相信各位ee, cs的肯定沒啥問題…畢竟我的編程基礎極差,數學基礎也不咋地…

一般來講有工科數學的基礎,那麼不會很難,但是也僅僅是入門,真正要實現一個項目,還差的很遠


推薦閱讀:

如何系統地自學 Python?
兩台絕頂聰明的電腦下棋對弈,誰會贏? 理由是什麼?
哪些笑話只有程序員才能聽得懂?
《計算機網路》這門課為何如此之難?
你有哪些用計算機技能解決生活問題的經歷?

TAG:人工智慧 | 計算機 | 機器學習 | 概率論 | Coursera |