華文網

Hinton「神經網路與機器學習」課程經驗與簡評

機器之心報導

Geoffrey Hinton 的「神經網路與機器學習」課程是機器學習領域長久不衰的經典之一,Arthur Chan 在 The Grand Janitor 發表了一篇關於 Hinton課程的回顧文章,機器之心對其做了編譯。

對我而言,完成 Hinton 的深度學習課程(https://goo.gl/GbC3qd)或者神經網路和機器學習(Neural Networks and Machine Learning,NNML)課程是一個期待已久的任務。要知道,該課程於 2012 年首次啟動。那時候,我還沒那麼相信深度學習的能力(https://goo.gl/eWVN2I)。當然,大約在 2013 年我改變了想法,卻發現停課了。直到 2 年以後我才決定去上吳恩達關於機器學習(https://goo.gl/CkmL7d)的課程,最後我終於可以再次去上 Hinton 曾經的課了。

但是他的課程直到去年 10 月份才再次恢復,我決定再聽一次,比如,把所有的視頻再看一次,完成所有的作業並且拿到課程學分。通過我的學習歷程,你會發現這門課很難。所以有些視頻我看了 4 到 5 次才弄明白 Hinton 到底在說什麼。有些作業我用了很多精力才想通。最後,我還是完成了所有 20 項作業。我甚至還買了一個可以炫耀的證書(https://goo.gl/cssHj8)。總的來說,這是一段讓人耳目一新、發人深省且令人滿意的經歷。

所以,本文是我對課程的回顧,以及為何、何時你應該修它。我也會討論一個在論壇上不時出現的問題:考慮到現在有那麼多深度學習課程,Hinton的版本會不會已經過時了?亦或是它仍舊是入門者的最佳選擇?我會最後解答這個問題。

困難的舊版本

我佩服那些用 Coursera 上的老版本完成該課程的人。眾所周知,NNML 比吳恩達的機器學習(https://goo.gl/gg9iSd)難得多,

也正如這裡的評論所言(https://goo.gl/EhfiAa ;https://goo.gl/BwAjSs)。我朋友中很多有博士學位的人都不太能跟得上 Hinton 課程的後半部分。

難怪:當 Kapathay 在 2013 年回顧它(https://goo.gl/u3Ycv7)的時候,他注意到該課程湧入了一群非機器學習人員。對新手來說,理解諸如像能量模型(energy-based model,EBM)這樣的主題會顯得非常吸引人,要知道能量模型非常難以理解。或者深度信念網路(deep belief network ,DBN)呢?今天人們依然將其與深度神經網路(deep neural network ,DNN)相混淆。老實說,由於深度信念網路如此難以理解,

我至今不能真正理解第 15 講裡的一些證明。

老版本只允許 3 次測試嘗試,而且時間很緊,你只有一次機會去完成課程。有個家庭作業要求從零開始反推反向傳播的矩陣形式。這一切都使這門課不適合於像我這樣很忙的人。但是對於那些 2 到 3 年級的研究生甚或是那些有充足時間的從業者來說更加不適合(但是,誰適合?)。

新版本更簡單,但仍然具有挑戰

當 Coursera 將大部分課程替換成新版本並允許學生重修以後,

我去年 10 月又修了一次新版課程,他們去掉了任務裡一些困難的部分,讓它更適合於時間不太充裕的人。但是這並不意味著這門課就會很輕鬆:大部分內容裡,你都需要反復研究課程內容,弄清裡的數學原理以及偽代碼等等。要求你推導反向傳播矩陣的家庭作業依然還在。優點是:你依然可以領略深度學習的快樂。(笑)缺點是:你不應該期盼自己一周不花個 10 到 15 小時就通過課程。

為何該課程具有挑戰(一):數學

不同于吳恩達的課程和 cs231(視覺識別的卷積神經網路:http://cs231n.stanford.edu/),NNML 對於沒有微積分背景的新手來說並不簡單。裡面的數學依然不是特別困難,大部分是鏈式微分,對 Hessian 原理的直觀理解,更重要的是,向量微分——但是如果你從未學過——這門課對於你而言就會很難。在你上課之前,至少去上上 微積分 1 和 2,並且從《矩陣食譜》(https://goo.gl/hG9iCq)中瞭解一些基本方程。

為何該課程具有挑戰(二):能量模型

這門課程困難另一個的原因是,課程的後半部分全部基於所謂的能量模型(EBM),例如霍普菲爾網路(HopfieldNet),波爾茲曼機(BM)和受限玻爾茲曼機(RBM)。即便你習慣於監督學習方法涉及的數學知識,比如線性回歸、邏輯回歸甚或是反向傳播,RBM 的數學知識也仍然可以虐爆你。難怪:這些模型中的很多有其物理來源,如 Ising 模型(https://en.wikipedia.org/wiki/Ising_model)。深度學習研究也頻繁使用使用來自貝葉斯網路的想法,比如: explaining away(https://goo.gl/IJ4cFc) 。如果沒有物理或貝葉斯網路的基本背景知識,你會感到相當困惑。

對我而言,我花了相當一部分時間在搜尋引擎上搜索資源,閱讀相關文獻,這個方法讓我通過了一些測試,但是我不會假裝我明白了那些主題,因為它們很深奧且反直覺。

為何該課程具有挑戰(三):迴圈神經網路

如果你最近想學習 RNN,可從 Socher 的 cs224d(http://cs224d.stanford.edu/)課程開始或者讀 Mikolov 的論文。LSTM(長短期記憶網路)會很容易成為你僅有的解決 RNN 梯度爆炸/消失的想法。當然,還有其它辦法:回聲狀態網路(echo state network,ESN)和 Hessian-free 方法。近來人們很少對它們進行討論。此外,它們的方程形式也和諸如反向傳播、梯度下降這樣對你們而言的標準方法相去甚遠。但是學習它們可以擴寬你的視野,而且可以讓你思考現在做的事情是否正確。

但是,它贊嗎?

當然了!待我在下章為你一一道來。

為什麼贊?

如果你想嘗試一下更酷一點的機器學習/深度學習研究工具,不妨去上吳恩達的課,嘗試一下各種應用,然後宣稱自己是這方面的專家——好吧,許多人都是這麼幹的。事實上,吳恩達的課就是為了讓你感受一下深度學習,而且事實上,課後你就能使用許多機器學習工具了。

也就是說,你應該意識到你對機器學習/深度學習的理解還是相當膚淺的。或許你認為,“哦,我有資料,把這些資料扔進演算法吧!”“噢,我想用 XGBoost,是的!它總能跑出最好的結果!”不過,你應該意識到,性能數位並非一切。重要的是理解模型的運行情況,缺乏理解的時候,你很容易做出短視的決定,代價高昂。很多同行都出現過這種情況,甚至一些導師也犯過這些錯誤。

不要犯錯!要總是尋求更好的理解!試著心意相通(grok)。如果只完成吳恩達的課後作業,那麼,你現在仍然會想知道如何將工具應用到其他任務中。參加 Hinton 的課程後,你會被他說的弄得迷惑不解,不斷重複這一過程。然後,你就可以開始更好地理解深度學習了。

還有一個技術小貼士:如果你想學習深度無監督學習,我認為也應該首先學習這個課程。Hinton 會教你理解這些機器的直覺方面的內容,你也有機會應用到它們。諸如 RBM 、Hopfield net 這類模型,如果你有基礎的 octave 程式設計經驗,還是可以做一下的。

這麼贊,不過,是不是過時了?

今天的學生幸運多了,有很多深度課程可以選擇,比如深度學習。看看我自己最愛的 5 個課程榜單吧(吳恩達的 Machine Learning 、李飛飛和 Karpathy 的j電腦視覺課程 Stanford cs231n 2015/2016、Richard Socher 的深度學習和自然語言處理 Standard cs224d、David Silver 的強化學習以及 Hinton 的神經網路)。

不過,我仍然推薦 NNML 這門課程,有四個原因:

比其他基礎可能要更深更難。NNML 不好學,不完全是數學的東西(Socher 和 Silver 課程的數學比重很大),而是概念性的,比如能量模型,訓練 RNN 的不同辦法也是一些案例。

機器學習或深度學習中的許多概念都可以從其他角度來觀察。比如,在頻率論者眼裡,偏差(bias)/方差(variance)就是一種權衡,不過,貝葉斯陣營的人將它們視為“頻率論的錯覺”。BP、梯度下降也有這樣的情況。一旦你嘗試思考,你會發現這些概念並不好懂。因此,這門課不是僅僅教你一些概念,而是讓你學會從不同角度看問題。從這個意義上來說,NNML 真的是不二之選。長時間散步時,我總是會思考 Hinton 的一些觀點。

Hinton 的視角——過去三十年中,他處於機器學習的不利的一方。但是,他堅持下來了,從這門課中,你將感受到他如何(以及為什麼)開始某項研究,或許以後你自己也能研究些東西。

他傳達知識的方式很幽默。比如,第 10 講中談及在上世紀八十年代,物理學家為什麼研究神經網路時,他講的很幽默。(注意:在研究神經網路前,他也是位元物理學家。)

結論與下一步打算

總的說來,Hinton 的「神經網路和機器學習」是一門必修課。無論是初學者還是專家們,都會從這本課的廣度和 Hiton 的觀點中受益良多。

如果你真的是小白,那麼,最好先上吳恩達的課,或許再學一下微積分 1 或 2 、線性幾何以及概率與統計學。這樣,上課就不會感覺吃力了。我認為,Kapathy 和 Socher 的課程可能比 Hinton 的課程要容易一些。

如果你已經修過了,不放看看其他值得一上的基礎課程,可以參考我的這篇文章"Learning Deep Learning - My Top 5 List",或許會知道接下來該學點什麼了。這裡需要特別提示一下:Daphne Koller 的概率圖模型也相當難,或許能讓你對非常深的問題(比如深度信念網路)有更清晰的理解。

還有一個建議:或許你可以再學一遍該課程。如上所述,我打算半年後就再學一遍,搞清楚之前沒有搞懂的一些細節。不過,可能要來個 6 到 7遍才能真正弄懂吧。

為何該課程具有挑戰(一):數學

不同于吳恩達的課程和 cs231(視覺識別的卷積神經網路:http://cs231n.stanford.edu/),NNML 對於沒有微積分背景的新手來說並不簡單。裡面的數學依然不是特別困難,大部分是鏈式微分,對 Hessian 原理的直觀理解,更重要的是,向量微分——但是如果你從未學過——這門課對於你而言就會很難。在你上課之前,至少去上上 微積分 1 和 2,並且從《矩陣食譜》(https://goo.gl/hG9iCq)中瞭解一些基本方程。

為何該課程具有挑戰(二):能量模型

這門課程困難另一個的原因是,課程的後半部分全部基於所謂的能量模型(EBM),例如霍普菲爾網路(HopfieldNet),波爾茲曼機(BM)和受限玻爾茲曼機(RBM)。即便你習慣於監督學習方法涉及的數學知識,比如線性回歸、邏輯回歸甚或是反向傳播,RBM 的數學知識也仍然可以虐爆你。難怪:這些模型中的很多有其物理來源,如 Ising 模型(https://en.wikipedia.org/wiki/Ising_model)。深度學習研究也頻繁使用使用來自貝葉斯網路的想法,比如: explaining away(https://goo.gl/IJ4cFc) 。如果沒有物理或貝葉斯網路的基本背景知識,你會感到相當困惑。

對我而言,我花了相當一部分時間在搜尋引擎上搜索資源,閱讀相關文獻,這個方法讓我通過了一些測試,但是我不會假裝我明白了那些主題,因為它們很深奧且反直覺。

為何該課程具有挑戰(三):迴圈神經網路

如果你最近想學習 RNN,可從 Socher 的 cs224d(http://cs224d.stanford.edu/)課程開始或者讀 Mikolov 的論文。LSTM(長短期記憶網路)會很容易成為你僅有的解決 RNN 梯度爆炸/消失的想法。當然,還有其它辦法:回聲狀態網路(echo state network,ESN)和 Hessian-free 方法。近來人們很少對它們進行討論。此外,它們的方程形式也和諸如反向傳播、梯度下降這樣對你們而言的標準方法相去甚遠。但是學習它們可以擴寬你的視野,而且可以讓你思考現在做的事情是否正確。

但是,它贊嗎?

當然了!待我在下章為你一一道來。

為什麼贊?

如果你想嘗試一下更酷一點的機器學習/深度學習研究工具,不妨去上吳恩達的課,嘗試一下各種應用,然後宣稱自己是這方面的專家——好吧,許多人都是這麼幹的。事實上,吳恩達的課就是為了讓你感受一下深度學習,而且事實上,課後你就能使用許多機器學習工具了。

也就是說,你應該意識到你對機器學習/深度學習的理解還是相當膚淺的。或許你認為,“哦,我有資料,把這些資料扔進演算法吧!”“噢,我想用 XGBoost,是的!它總能跑出最好的結果!”不過,你應該意識到,性能數位並非一切。重要的是理解模型的運行情況,缺乏理解的時候,你很容易做出短視的決定,代價高昂。很多同行都出現過這種情況,甚至一些導師也犯過這些錯誤。

不要犯錯!要總是尋求更好的理解!試著心意相通(grok)。如果只完成吳恩達的課後作業,那麼,你現在仍然會想知道如何將工具應用到其他任務中。參加 Hinton 的課程後,你會被他說的弄得迷惑不解,不斷重複這一過程。然後,你就可以開始更好地理解深度學習了。

還有一個技術小貼士:如果你想學習深度無監督學習,我認為也應該首先學習這個課程。Hinton 會教你理解這些機器的直覺方面的內容,你也有機會應用到它們。諸如 RBM 、Hopfield net 這類模型,如果你有基礎的 octave 程式設計經驗,還是可以做一下的。

這麼贊,不過,是不是過時了?

今天的學生幸運多了,有很多深度課程可以選擇,比如深度學習。看看我自己最愛的 5 個課程榜單吧(吳恩達的 Machine Learning 、李飛飛和 Karpathy 的j電腦視覺課程 Stanford cs231n 2015/2016、Richard Socher 的深度學習和自然語言處理 Standard cs224d、David Silver 的強化學習以及 Hinton 的神經網路)。

不過,我仍然推薦 NNML 這門課程,有四個原因:

比其他基礎可能要更深更難。NNML 不好學,不完全是數學的東西(Socher 和 Silver 課程的數學比重很大),而是概念性的,比如能量模型,訓練 RNN 的不同辦法也是一些案例。

機器學習或深度學習中的許多概念都可以從其他角度來觀察。比如,在頻率論者眼裡,偏差(bias)/方差(variance)就是一種權衡,不過,貝葉斯陣營的人將它們視為“頻率論的錯覺”。BP、梯度下降也有這樣的情況。一旦你嘗試思考,你會發現這些概念並不好懂。因此,這門課不是僅僅教你一些概念,而是讓你學會從不同角度看問題。從這個意義上來說,NNML 真的是不二之選。長時間散步時,我總是會思考 Hinton 的一些觀點。

Hinton 的視角——過去三十年中,他處於機器學習的不利的一方。但是,他堅持下來了,從這門課中,你將感受到他如何(以及為什麼)開始某項研究,或許以後你自己也能研究些東西。

他傳達知識的方式很幽默。比如,第 10 講中談及在上世紀八十年代,物理學家為什麼研究神經網路時,他講的很幽默。(注意:在研究神經網路前,他也是位元物理學家。)

結論與下一步打算

總的說來,Hinton 的「神經網路和機器學習」是一門必修課。無論是初學者還是專家們,都會從這本課的廣度和 Hiton 的觀點中受益良多。

如果你真的是小白,那麼,最好先上吳恩達的課,或許再學一下微積分 1 或 2 、線性幾何以及概率與統計學。這樣,上課就不會感覺吃力了。我認為,Kapathy 和 Socher 的課程可能比 Hinton 的課程要容易一些。

如果你已經修過了,不放看看其他值得一上的基礎課程,可以參考我的這篇文章"Learning Deep Learning - My Top 5 List",或許會知道接下來該學點什麼了。這裡需要特別提示一下:Daphne Koller 的概率圖模型也相當難,或許能讓你對非常深的問題(比如深度信念網路)有更清晰的理解。

還有一個建議:或許你可以再學一遍該課程。如上所述,我打算半年後就再學一遍,搞清楚之前沒有搞懂的一些細節。不過,可能要來個 6 到 7遍才能真正弄懂吧。