標籤:

吳恩達deeplearning.ai的深度學習課程怎麼樣?DT君親測後為你劃重點

想上手吳恩達深度學習最新課程的同學可以先看看這篇。

許多人認為機器學習太專業化,入門門檻高。但事實證明,機器學習是一個公共的、開放的、活躍的領域,學習機器學習的不僅有來自計算機專業、人工智慧專業、自動化專業的專業人士,更有許多來自金融、物理、材料甚至藝術領域的其他人士,這些人一樣能夠精通機器學習——關鍵在於如何入門機器學習,怎樣更快地掌握機器學習的本質。

吳恩達的機器學習課程在 Coursera 平台上已上線 5 年左右,選課人數已達180多萬人。該門課程是國內,乃至全球許多機器學習愛好者、專家學者的入門課程。整門課程深入淺出、簡潔易懂。

8月9日,吳恩達又宣布 deeplearning.ai 在 Coursera 平台上開設系列全新深度學習課程,包括神經網路和深度學習概述、神經網路參數調整及優化、如何搭建機器學習項目、卷積神經網路、神經網路序列模型。從課程設置上來看,涵蓋了深度學習的基礎理論和簡單實操。這也是 deeplearning.ai 三大項目的第一個項目。

據說該課程火爆到 deeplearning.ai 的官網多次出無法訪問。目前,課程中文版已於8月29日在網易公開課上線。這門課如何?難易程度如何?是不是如吳所說的那樣面向普通大眾?為了搞清楚這些問題,DT君親測了這5門課中的3門,並按難(kao)易(pu)程度給每門課打出分數,划出重點。

下面就跟著DT君來了預覽一下這個課程吧。

第一門課

評分:4.8分(滿分5分)

結論:如果在該門課程中新增一個完全由自己設計解決的編程項目,那就完美了!一句話,「最本質的東西往往是最簡單的」。

第一門課程是《神經網路與深度學習》。該門課程持續時間四周,視頻內容包括了深度學習發展的必要性、神經網路基礎知識、淺層神經網路、深層神經網路以及對深度學習名人的採訪;編程作業則從Numpy庫中最常見的函數開始、然後以神經網路的觀點看待邏輯回歸,接著又訓練了僅含一個隱藏層的神經網路,最後以深層神經網路的應用結束。

在學習整門課程的過程中,我最喜歡的是編程題的設計。我認為這些設計非常有助於學習者對模型的理解,能抓住深度學習模型和演算法的本質,降低了學習者完成該門課程的難度。這樣既能保證學習者學到知識,也不會打擊學習者的信心。該門課程非常適合於機器學習入門者,即使是機器學習小白,只要能理解最基本的概率和矩陣運算、能快速學會python編程,也能跟著編程指導順利地完成課程。

第二門課

評分: 4.9 分

結論:該課程非常適合於已完成第一門課的學習者,也適合於對神經網路有一定基礎的學習者。希望在新一輪次的課程中,增加對Tensorflow 的指導。

第二門課程是《改善神經網路:調參、正則化和優化》。該課程持續時間三周,視頻內容主要包括如何避免模型的過擬合、選擇合適的優化演算法、選擇模型的超參數、介紹最流行的深度學習框架以及對深度學習名人的採訪。編程部分則包括了權重初始化、正則化方法、梯度檢查(檢驗反向傳播演算法是否正確運行)、不同的優化演算法以及利用當前最流行的深度學習框架Tensorflow實現多分類項目。

該門課程延續了第一門課程的優良傳統,內容豐富、難度不大、很實用、有助於提高學習者對深度學習的興趣(我最喜歡的仍然是其編程作業,所有編程作業都給出了極其清晰的解答提示,你不需要寫太多代碼就能使模型運行,這大大地降低了完成、理解這門課的難度,會增強你進行深度學習的信心!)。

第三門課

評分: 4.7分

結論:該課程非常適合於已完成第一門課的學習者,也適合於對神經網路有一定基礎的學習者。希望在新一輪次的課程中,增加對Tensorflow 的指導。

第三門課程是《構建機器學習項目》。該門課程持續兩周,是這個專項課程的一個特色,希望每個構建機器學習項目的人都去汲取前輩的經驗教訓,以後少走彎路!這門課程不僅僅是針對機器學習、深度學習小白,也是針對所有在構建機器學習系統中有困惑的各類人士。本文後半部分是DT君學完了吳恩達深度學習專項課程的第三門課程的一份簡單的總結,如果你對機器學習感興趣,立志從事機器學習、深度學習的研究工作,希望這份總結對你有幫助。不完善之處,還望大家多多交流,共同進步!

要想成為一名優秀的機器學習工程師,你不僅需要熟練地掌握機器學習的核心演算法,更需要掌握機器學習的「基本」策略。那麼,有哪些因素能保證我們的機器學習系統會更快、更有效地工作?第三課提供的經驗總結非常寶貴,是許多大學裡深度學習課程里講不到的,這些經驗總結將為你構建高性能的複雜機器學習系統指明方向,節約時間、成本。

註:此圖是我在學完了這三門課程後用 Tensorflow 構建的一個深層神經網路,用於分類62種不同的交通標誌對象,600 次循環後準確率在 92% 左右;在學習這課程之前,我曾嘗試構建卷積神經網路、包含三個隱藏層的深層神經網路解決這個問題,但 600 次循環後準確率不到 85% (這可能與我的神經網路權重初始化不同有關)。

試想一下,當你構建了一個準確率已達90%的機器學習系統,我們應該怎樣進一步改進系統以取得實際應用?可能你有很多想法:收集更多的訓練數據;保持訓練數據集的多樣性;使用更大規模的神經網路;使用不同的優化演算法;採用dropout層或使用L2正則化;更改神經網路的架構等。面對如此多的選擇,我們究竟應該如何抉擇?哪一種選擇是最有希望改善系統性能的?如果你的團隊花費了近半年的時間去收集數據,結果發現更多的數據並不是該系統性能提升的決定性因素,這樣你們就浪費了大量如同你生命一樣寶貴的時間。

策略一:正交化過程

構建機器學習系統的最大挑戰包括調參,調參的過程中你有許多種選擇,如果時間允許的話,你可以各種嘗試。但是經驗表明,最高效的機器學習人員他們很清楚什麼樣的方式最有效,這就要用到正交化的思想。舉個例子,一台老式的電視機,上面有很多旋鈕,你可以採用各種方式調整照片。但是,最有效的調整方式就是,每個旋鈕只擁有一個功能,然後再調整旋鈕。電子工程師已經花費了大量的時間來保證每個設計的旋鈕都有相對可解釋的功能:一個旋鈕控制圖像的高度,一個旋鈕控制圖像的寬度,一個旋鈕控制視頻的左右位置,其它的分別控制圖像的旋轉、平移——這樣的設置確保了人能更加容易地操縱圖像;如果一個旋鈕控制著所有的功能,你幾乎不可能調整電視圖像。這就是正交化的設計思維,它能確保我們的操作簡單、具有可解釋性。那麼,這與機器學習有什麼關係呢?

在構建有監督機器學習的系統中,我們也在做類似的過程。首先,我們必須確保我們的系統能在訓練集上表現很好,然後在交叉驗證集上,最後是測試集。如果你的演算法在訓練集上表示不好,這時你需要一個專用的「旋鈕」來解決這個問題,這可能是你需要訓練更大的神經網路,也或許是要採用更好的優化演算法,如 Adam 優化演算法;如果你的系統在交叉驗證集上表示不好,那麼你也需要開發出另一組正交化的「旋鈕」來解決這個問題,這可能需要你採用更大的訓練集,這有助於你的機器學習演算法更好地泛化到交叉驗證集上;如果你的系統在交叉驗證集上也表現很好,但測試集上性能較差又怎麼辦呢?在這種情況下,你應該調整旋鈕得到一個更大的交叉驗證集;如果你的系統在測試集上也表現不錯,但是用戶體驗較差,這意味著你可能需要回去重新選擇交叉驗證集或成本函數。

在構建高性能的機器學習系統時,我們應該清楚哪個模塊出現了問題,針對這些不同的模塊採取不同的措施,機器學習系統的構建應充分考慮正交化的概念,確保各個流程、各個功能不交叉,保持相對的獨立性,具有可解釋的功能性。

策略二:確定單一的模型性能評價指標和選擇合適的訓練集、交叉驗證集/測試集

無論你是調整超參數,還是嘗試不同的學習演算法,甚至是使用不同的機器學習模型,你都需要確定一個模型性能的評價指標。有了性能評價指標,你能快速地判斷出新的嘗試是否有效,這會加速你構建機器學習系統的步伐。應用機器學習需要豐富的經驗,一個比較好的做法是,先編寫代碼,然後運行代碼查看實驗結果,並據此來繼續改進你的演算法。比如,你先建立了一個簡單的分類器A,然後通過調整模型中的某些超參數或一些其它東西,你可以訓練出一個新的分類器B,然後根據性能評估指標評估你分類器的優劣。

採用精確率和召回率評估分類器的性能可能是合理的,但是可能會出現這樣的問題:分類器A上的精確率更高,這意味著分類器A的預測結果準確率更高;分類器B的召回率更高,意味著分類器B的誤分類概率更低。那麼分類器A和分類器B誰更優呢?另外,如果你嘗試許多想法,採用不同的參數,這通常會得到更多的分類器,如何從這些分類器中選擇最好的分類器呢?這時如果仍然使用兩個指標衡量模型性能,就顯得不太合理,所以最好的方式是綜合考慮精確率和召回率,如F1分數就是這樣的一個指標。採用這樣的評估指標,會加速機器學習的迭代過程。

有時,我們並不能只是關注精確率、召回率,甚至是F1分數,我們需要考慮訓練機器學習系統的更多限制因素,如時間、金錢。這時,單一的性能評估指標並不能滿足我們的要求。更一般地說,我們需要在多個目標中確定出一個最合理的優化目標,將其它目標或條件作為限制性因素,然後在訓練集或交叉驗證集上或測試集上進行評估或計算,選出在有限制的條件下的最優演算法。

訓練集、交叉驗證集和測試集的選擇對構建機器學習應用產品具有巨大的影響。那麼,我們應該怎樣選取這些數據集來提高團隊開發機器學習系統的效率?訓練機器學習模型時,通常會嘗試許多不同的想法,在訓練集上訓練不同的模型,然後使用交叉驗證集驗證你的想法並選擇一個模型。繼續保持訓練,在驗證集上提高你的模型,最後在測試集上評估模型。

事實證明,交叉驗證集和測試集應該來自於同一數據分布。確定好單一的性能評估指標和交叉驗證集後,機器學習團隊就可以快速地進行創新,嘗試不同的想法,運行實驗,選擇最好的模型。所以建議是,在劃分數據集前,先將數據均勻混洗,再劃分交叉驗證集和測試集,這樣就能保證兩個數據集來自相同的分布。

事實證明,驗證集和測試集的規模選擇也正在改變機器學習領域。你可能聽說過機器學習領域內70/30的經驗法則之一,即將所有的數據按70:30的比例劃分為訓練集和測試集,或者將數據集的60%劃為訓練集,20%劃為交叉驗證集,20%劃為測試集。這在早期的機器學習領域相當合理,尤其是當數據量很少的時候。

但是,現代的機器學習領域,數據集的規模極其龐大,這種情況下 70/30 的經驗規則不再適用。假如你有 100 萬個樣例,可以選取其中的 98% 作為訓練集, 1%作為交叉驗證集,剩餘 1%作為測試集才合理。這是因為其中的 1% 也有 10000 個樣例,對於測試集和交叉驗證集已經足夠了。所以在現代大規模數據集的機器學習或深度學習過程中,測試集和交叉驗證集的劃分比例遠遠小於 20%。另外,深度學習演算法對數據的需求量極大,所以大部分的數據都可以劃分入訓練集。而使用測試集的目的就是驗證最終機器學習系統的可靠性,增加你對機器學習系統整體性能的信心。除非你需要非常準確地衡量系統的最終表現,否則你的測試集不需要數以百萬計的樣例,成千上萬的數據足矣。

策略三:調整性能評估指標和交叉驗證集/測試集

選擇交叉驗證集和評估指標就如同打靶。很多時候,你的項目已經進行了一部分,你才發現你將目標選錯了,這如同你在打靶過程看錯了靶子的位置。因此,建立機器學習系統時,第一步應該是確定評估指標,哪怕確定的評估指標並不一定最好,但你要有這個意識;然後採用正交化過程中的各個步驟,使演算法能很好地工作。

例如,你建立了兩個識別貓的分類器A和B,它們在交叉驗證集上的分類錯誤率分別是3%,5%,但當你在實際中測試你的演算法的時候,你發現分類器B卻做的更好——這可能是你選擇的交叉驗證集是高質量的貓圖片,而建立的機器學習應用程序要處理的卻是大量低質量的貓圖像,這些圖片不僅模糊,也可能包含各種奇怪的貓表情。這種情況下,你就需要改變你的交叉驗證集以使你的數據能更好地反映出你實際情況。

總而言之,如果目前的評估指標和數據不能很好地應對你真正關心的事情,這就是改變你的評估指標和/或交叉驗證集/測試集的好時機。這會使你的演算法更好地捕獲你所關心的信息;這對於確定演算法的優劣,加速想法的迭代過程,提高演算法效率很有幫助。

策略四:將系統的表現與人類的表現相比,確定提升系統性能的方法

我們經常發現,當機器學習系統在某些方面超越人之前,系統的性能提升最快,在超越人之後,進步就變得緩慢。人類非常擅長分類,識別事物,聽音樂,做閱讀理解。當系統的性能超越人之前,人類總能使用特定的策略幫助改善系統的性能。這些策略包括使用更多標籤化的數據;從誤差分析中獲得啟示;進行偏差和方差分析。當系統的表現超越人之後,這些策略將更難奏效。

這就是為什麼要將機器學習系統的表現行為與人類的表現行為相比,尤其是在人類擅長的任務上。

一個監督的機器學習系統要正常工作,從根本上來說,要保證兩個方面:第一,很好地擬合訓練集,低偏差;第二,訓練的系統要有很強的泛化能力,即要在交叉驗證集或測試集上很好地工作,低方差。

在提升機器學習系統性能之前,首先要明白機器學習系統的訓練誤差與人類誤差之間的差異,辨別是否存在高偏差。解決高偏差可以使用以下幾種方法:使用更大的神經網路模型;訓練更長的時間;使用 ADAM,Momentum,NAG,Adagrad, Adadelta,RMSProp 等更好的演算法;調整神經網路架構,這包括神經網路的層數、神經元的連接方式、神經元個數,激活函數等超參數。然後,比較交叉驗證集或測試集與訓練集上的誤差,確定是否具有高方差。方差的高低意味著你的模型是否具有很好的泛化能力。遇到高方差,可以採用以下幾種方式解決:收集更多的數據訓練模型;使用正則化方法,這包括採用dropout,數據增強,權重正則化等;調整神經網路結構等。

希望 DT 君的親測總結能幫助解決大家在構建機器學習系統中的某些疑惑,節約時間、成本,加快構建機器學習系統的步伐。

作者:Steven


推薦閱讀:

為什麼我們看不到特別亮的星星?
如果小米躋身世界五百強,大家會如何看待小米?
2017 年還在堅持寫博客的人〡輕芒
中國的科技水平到底有多高?
科技領域有沒有(過)難以傳世的事物?

TAG:科技 |