吳恩達的網課 deeplearning.ai 到底適不適合自己呢?
快來看看學員 Thomas 怎么說的!
AI 科技評論按:本文的作者是 Thomas Treml,是一名具有社會學背景的數據科學自由職業(yè)者。他在 Medium 上分享了自己學習 deeplearning.ai 課程的經歷與感想。由 AI 科技評論進行編譯。
最近我剛剛完成了 Andrew Ng(吳恩達)在 Coursera 上的 deeplearning.ai 的專業(yè)化課程,所以我想與大家分享一下我在學習這套課程中的想法以及經驗。我之前發(fā)現由 Arvind N 撰寫的關于前三堂課程的回顧非常有用,尤其是幫助了我下定決心開始學習這門課程,所以我希望我所撰寫的這篇回顧也能對其他人有所幫助。
實話實說在學習了這五堂課之后我感到獲益良多。課程內容結構合理,并且對于那些只有一點點矩陣代數知識的人而言也非常友好。然后你必須具備有 Python 編碼的經驗,哪怕只有一點點。課程里大多數的編程任務都設置得恰到好處。除了它們富有啟發(fā)性的特性之外,嘗試去解決這些問題的過程也是相當令人享受。最后,在我看來,學習這門專業(yè)化課程是你開始深入探索深度學習各個領域分支的一條絕佳途徑。并且在學習完該課程之后,你將能夠找到自己想在深度學習中繼續(xù)深入研究的方向。
首先我必須承認,在學習這門課程之前,我對神經網絡一直保持著懷疑的態(tài)度。因為我具有傳統(tǒng)機器學習的知識背景,所以我一度不相信像神經網絡這種將一些函數(神經元)組合在一起的黑盒模型(無法進行單獨的訓練與評估),能夠超過一個經過精心調整和認真評估驗證過的模型。而另一方面,深度學習與人工智能的火爆現象也讓我對此更加疑慮重重。
盡管如此,我卻認真對待和考慮著每一位和我提起深度學習的朋友的建議,尤其是 Shoaib Burq 在蘇黎世舉行的 Apache Spark 聚會上的一次演講,那次演講是我一個很重要的轉折點。那之后,也就是去年,我決定要對深度學習進行一探究竟以解心中疑惑。首先,我開始觀看一些視頻、閱讀博客以及跟著一些教程學習。不幸的是,這些嘗試證明了我之前的假設——即深度學習背后的數學機理對我而言過于高深。盡管我深深地喜歡應用數學進行實踐,但是當涉及到求導推理和抽象理論的時候,我卻是一個十足的門外漢。
當我第一次聽說了 deeplearning.ai 專業(yè)化課程時我非常地興奮。因為在之前的其它課程學習中,我已經意識到了 Coursera 平臺的學習方式非常適合我。然后從 Andrew Ng 的第一個大型開放式網絡課程(Massive Open Online Course, MOOC)的視頻中,我了解到他是一位機器學習領域的好講師。但是由于當時課程任務采用的編程語言是 Octave,所以那時我并沒能完成那個課程上的任務。所以在了解到該課程任務現在采用了 Python 實現編程(這是我的主要編程語言)之后,我最終確信,該系列課程將能帶領我系統(tǒng)化學習深度學習。
但首先,我沒有足夠的時間來完成課程作業(yè)。
當我在去年年中遭遇(盡管不嚴重但是卻很麻煩)了身體健康問題之后,情況發(fā)生了轉變。當我感覺身體好一些之后,我最終下定決心參加第一門課程。通常情況下,我只在一門特定的課程中參加一個我想學習的特定主題,觀看視頻并快速完成作業(yè)。但是這一次,我決定要堅持從頭學到尾,并且循序漸進。我期望關于認知挑戰(zhàn)主題的工作可以幫助我盡快康復。然后完成那些編程任務也是我回歸編程和日常工作的一個好機會。事實上,在剛開始的頭幾周里出于身體健康原因,我被限制了只能在顯示器面前呆上非常短的時間。所以我不得不把作業(yè)打印出來,在紙上將它們解決了,之后再上網將這些答案錄入提交。此外,在剛開始時一個令人意想不到的積極的副作用發(fā)生了。在前三個課程中有一些可選的視頻,在這些視頻里 Andrew 分別采訪了那些深度學習領域的英雄(Hinton、Bengio 和 Karpathy 等)。這些視頻不僅內容豐富,而且對我來說非常具有激勵性,尤其是 Ian Goodfellow 的視頻。
在專業(yè)層面上,當你對這個主題相當陌生時,你可以通過學習 deeplearning.ai 而獲取到很多的知識。首先也是最重要的是,你學到了關于神經網絡的基本概念,在簡單的序列模型中一個前向傳播是如何進行的,以及什么是反向傳播等等。我曾經多次看到過并且聽說過神經網絡的這些基本構建塊。但是 Andrew Ng 所給出的定義和介紹卻是最清晰和最系統(tǒng)的。所以我認為這套課程是一個學習這些基礎的非常有效的途徑,并且比我之前學習過的那些教程、博客以及演講都來的有價值。
作為一個側面說明,第一堂課就立即證明了我之前的假設是錯誤的——即深度學習所涉及的數學知識對我而言過于高深。事實上,課程中大多數的概念都在我上學期間或者學習期間有接觸過——而我并沒有碩士文憑,所以不要讓那些公式中看起來很精致的希臘字母嚇到了。你所要具備的基礎知識只是知道一點點如何計算矩陣代數,懂得通過偏導來計算梯度,懂得基本的線性回歸模型以及梯度下降法,而剩下的其它知識 Andrew 都會教你的。
正如你在其它許多技術資料中接觸到一樣,你將在第一堂介紹課中學習到深度學習中的神經網絡結構在生物模型中并沒有對應物。神經元中的信號處理機制與深度學習中神經網絡的功能(先是線性計算然后通過激活函數引入非線性)非常不一樣。
對新手們而言非常有用的一點是去學習深度學習項目的不同方法。比如是采用預訓練模型進行遷移學習還是采用一種端到端的學習方法。此外數據增強的概念至少在方法論層面得到了解決。
在更高級的課程中,你將接觸到圖像識別(課程4)和序列模型(課程5)。這兩節(jié)課介紹了卷積神經網絡(CNN)和遞歸神經網絡(RNN)最常見的變體。而我認為這是專業(yè)化的一個主要優(yōu)勢,你可以學習到各種最先進的模型和方法。盡管它可能無法讓你成為深度學習的專家,但是你將認識到你可以進一步專注于該領域哪一個分支。
另外我發(fā)現對加深課程理解非常有用的是,通過 Fran?ois Chollet 編寫的書籍《深度學習與 Python》 來補充課程作業(yè)部分缺失的知識。這本書中缺失的技術方法論基礎在課程講座中得到了很好的解釋。另一方面,那些在本課程中提到但是卻沒有在作業(yè)中得到廣泛實施的深度學習項目,這些內容在本書中也有更詳細的介紹。特別是數據預處理部分在本課程的編程任務中明顯缺失。你可以在第二個以及第四個 MOOC 中獲取關于如何使用深度學習框架(Tensorflow 和 Keras)的教程,但是顯而易見的是,這本由 Keras 創(chuàng)建者編寫的書將教你如何更深入地實現深度學習模型。
接下來我將逐一介紹你可以期待從這五門課程中學習到什么,以及一些與課程作業(yè)有關的個人經驗。最后,我還將總結一下一些個人想法。
該課程將向你介紹神經網絡的基本構建模塊。你將學習到 Logistic 回歸、損失函數、激活函數以及梯度下降法(隨機梯度下降法和小批量梯度下降法)是如何工作的。同時還將快速介紹如何使用 Python 的 Numpy 庫進行矩陣代數計算。
對一張貓的圖像進行分類預測
該課程的主要任務是進行概覽式簡介。Andrew Ng 是一位出色的講師,即便是那些數學基礎較差的同學應該也能很好地理解上課所講的內容。
在這次作業(yè)中,你將首先采用單個感知機實現一個二元分類任務,然后升級為一個多層感知機來實現相同的任務目標,最后一項作業(yè)則是通過 Numpy 編碼實現一個深度神經網絡。尤其是這兩個圖像分類任務在某種意義上具有啟發(fā)性和回報性,因為你將最終實現一個喵咪分類器。正如你在上圖看到的那樣,它能夠判斷一張圖像上是否有貓存在。
正如標題所示,在本課程中,你將學習如何微調深度神經網絡。這幾節(jié)課程解決了最常見的問題,比如過擬合和梯度消失/爆炸。你將學習到如何找到合適的權重初始化、使用 dropouts 技術、正則化以及歸一化操作。當然,還將學習到不同的優(yōu)化算法變體都是如何進行工作的,以及該為自己的問題選擇哪一種優(yōu)化算法最為恰當。
對我而言,本課程最有用的一個知識是采用隨機值來調整超參數,而不是通過一種更加結構化的方法。事實證明,在定義的空間和正確的尺度上選取隨機值比使用網格搜索更加有效,如果你從事過傳統(tǒng)的機器學習,你應該對網格搜索非常熟悉。
這次課程的任務則有點枯燥,我猜這是因為他們有必須處理的內容。但是每一個作業(yè)都大有裨益——特別是關于優(yōu)化方法的作業(yè)。作為獎勵,你將在課程結束時獲得有關如何使用 Tensorflow 的教程,這對后續(xù)課程即將進行的作業(yè)而言非常有用。
這次課程絕對是一只黑天鵝。由于它被設計成為期兩周的課程學習,我期望在前兩個入門課程和之后的關于 CNN 和 RNN 的高級課程之間有一個快速的填充。此外,我本來認為我非常習慣于構建機器學習項目。但是事實證明,這對我來說是最有價值的課程。
在本課程中,你將學習開發(fā)深度學習模型的優(yōu)良實踐方法。對于大多數機器學習從業(yè)者而言,應該會對將數據集分解成訓練、校驗和測試三分部分這種操作感到熟悉。在開始項目之前,我們必須確認我們所要優(yōu)化的指標。而且,你應該針對人類層次誤差(Human-Level-Error, HLE)分別量化模型執(zhí)行域的貝葉斯最優(yōu)誤差(Bayes-Optimal-Error, BOE)。這是一個重要的步驟,而我之前卻一直沒有意識到(通常情況下,我將性能與基準模型進行了比較——這一點同樣重要)。當你必須評估模型性能時,你當然會將校驗誤差與 BOE(或 HLE)和訓練誤差進行比較。因此,你可以將可避免偏差(BOE 與訓練誤差)和模型方差(訓練誤差與校驗誤差)進行比較。而這兩者哪一個更大,將決定了你應該采取什么樣的策略來進一步提高性能。例如,如果方差存在問題,你可以嘗試獲取更多的數據、引入正則項或者嘗試一種全新的不同的方法(例如,替代架構或不同的超參數搜索方法)。
你還可以學習到創(chuàng)建項目的不同策略以及遷移學習與端到端學習的詳細內容。
由于我對計算機視覺不太感興趣,至少在我參加這次課程之前,我對計算機視覺這塊內容的期待并沒有太高。但是事實證明,這成為了我整個系列課程中最具有教育意義的一門課程。
在本課程中,你將主要學習 CNN 以及它是如何被應用于計算機視覺任務的。從課程視頻中,你可以了解 CNN 的構建模塊以及它們是如何能夠變換張量的。有些視頻也專門介紹了殘差網絡(Residual Network, ResNet)和 Inception 架構。
基于 YOLO 的動物檢測
我另外找到了一些有關 YOLO 算法的精彩視頻。YOLO 的基本功能在課程中被非常好地可視化了出來,這些都讓我耳目一新,也讓我意識到了物體檢測原來也可以是一件令人愉快的工作。但是光建立一個性能優(yōu)秀而復雜的模型有時候還不夠,因為很顯然,預測的速度也是一項非常重要的指標。
這應該是該系列課程的五個任務中最具有教育意義的一個,在這里你需要實現一個低層次抽象 CNN 架構。然后選做部分的編碼實現反向傳播,加深了我對這種反向學習過程的理解。
人臉識別中有兩個任務。在這個主題下的課程和作業(yè),給了我們一次很好的機會來認識 deeplearning.ai的團隊成員們——至少能見識到他們的照片。因為他們的照片被用來作為驗證用的圖像。
神經風格轉換
這里還有一個與藝術有關的任務,這就是神經風格轉換(Neural Style Transfer)?;旧?,你必須通過 Tensorflow 實現 Gatys 等人在 2015 年的論文中所提出的架構。除了課程的要求之外,我還用這個模型自娛自樂了一會,并且得到了一些既有趣又恐怖的結果。當你瀏覽中間記錄的結果時,你可以看到模型是如何學習并在每次迭代中將樣式應用到輸入圖像之上的。曾經有那么一瞬間我覺得就像科學怪人一般,因為我的模型從源圖像的眼睛區(qū)域進行了學習,并將該特征應用到了輸入圖像的人臉中,所以它一不小心就成了 DeepFake。
這是本系列最后一堂課,也是我認為最難的一部分。這里你將學到 RNN、門控重復單元(Gated Recurrent Unit, GRU)和長短時記憶(Long Short-Term Memory, LSTM)的基本概念,以及它們的雙向實現。雖然對我而言,實現專業(yè)化的理解和使用這些模型是我的最終目標,但是我依然覺得這些內容難以掌握。這可能是因為里邊復雜的概念,比如時間反向傳播(Back propagation through time)、詞嵌入向量(Word embeddings)或者束搜索(Beam search)。而且我認為,這些較難的主題應該劃分成四周時間進行學習會更好,而不是現在的三周。
另一方面,本次課程的測驗和編程作業(yè)都顯得非常簡單。你將學習如何構建 RNN,該 RNN 能夠從字符序列中學習以生成新的相似內容。例如,你必須編寫一個模型來為恐龍起名字。LSTMs 在各種各樣的任務中都能發(fā)揮作用。你構建一個能以莎士比亞風格寫詩的模型,只要給定一個序列作為開始。然后在另外一個項目中,你可以再次變得富有藝術性。你必須構建一個 LSTM,使它學習爵士樂音樂庫中的音樂模式,之后再使用這個模型來生成一個新的爵士即興創(chuàng)作。我的結果聽起來是這樣的,雖然差強人意,但是它聽起來至少還是有點爵士的感覺。然后接下來這個又是需要 LSTM,這次你需要把 LSTM 與一個嵌入層進行結合,這個模型可以檢測輸入序列的語義情緒,并在句尾添加最合適的表情符號。
通過詞嵌入和 LSTM 實現自動添加表情
很棒的是,你在第二周學習的不僅是關于詞嵌入,還有詞嵌入中所包含的社會偏見問題。而最重要的是,你將學習如何以三步走的方式來解決這個問題:識別(Identify)——抵消(Neutralize)——均衡(Equalize)。最后,一個非常有教育意義的任務是最后的一個編程作業(yè)。你可以構建一個觸發(fā)器單詞檢測器(Trigger Word Detector),正如你喚醒 Amazon Echo 和 Google Home 設備那樣。我鄭重承諾,我的模型比 Google 智能助理更了解我,并且它還有一個更加愉快的喚醒詞匯。
最后,我想說的是,如果你對深度學習相對陌生,你將可以從這個專業(yè)化課程中學到很多知識。如果你已經對神經網絡有了一定的了解,那么可以跳過前兩門課程。如果你對圖像識別和序列模型也非常熟悉了,那么建議你僅參加「構建機器學習項目」這個課程。
另一方面,要清楚地知道自己屬于哪一種學習類型。如果你是一個嚴格的動手實踐派,這種專業(yè)化課程可能并不適合你,你應該去尋找其它更合適的課程。據說,fast.ai 提供了更豐富的動手操作體驗。另外,如果你只對理論化的東西感興趣,而對實際動手實現不感興趣,那么你可能也不會對該課程感到滿意——那么我建議你選修當地大學所開設的一些相關課程。也許你只是對深度學習的某一特定領域感興趣,那么對你來說也可能存在其它更合適的課程。比如說,如果你只想了解自動駕駛,那么在 Udacity 上注冊不提供學位證書的「自動駕駛汽車」課程可能來的更有效率。盡管在 deeplearning.ai 的第三課中也介紹了自動駕駛,但是這些內容過于皮毛,而且缺乏實踐指導。但是,如果你更重視全面的介紹,并且希望將它與深度學習的各個領域的實踐經驗結合起來,那么我肯定會推薦 deeplearning.ai。
學習這個專業(yè)化課程可能不僅僅只是你進入深度學習領域的第一步。我會說,其中的每一門課程都引領著你朝著正確的方向邁出了一步,所以你最終總共邁出了五步。盡管如此,我也很清楚,那就是這樣也還不足以幫助你在人工智能領域追求更長遠的職業(yè)發(fā)展。我認為該系列課程幫你構建起了對該領域的一個基本理解。但是進一步說,你必須持之以恒進行實踐,最后還可以考慮閱讀更多有關于深度學習變體方法論的背景知識(例如在課程中提到的更高級的論文)。但是通過這門課程的學習,你可以開始以系統(tǒng)化的方式進入該領域——這是非常有價值的,尤其是當前深度學習領域存在著如此紛繁眾多的分支。
如果你想獲得關于 deeplearning.ai 專業(yè)化課程的更多資訊,并且還想知道其他人的觀點(與我相似):我推薦你去觀看 Christoph Bonitz 關于他參加該系列 MOOC 經歷的演講。你可以在這里觀看錄像視頻。
最重要的是,我絕不會后悔把時間花在 Coursera 的專業(yè)課上。因為我的大部分期待都已經得到了滿足,并且我在專業(yè)化層面上學習到了非常多知識。完成所有的課程包括選修部分,這也是一個不錯的選擇。我非常感謝 Andrew Ng 鼓勵我們去閱讀論文,以便于能在特定主題上深入探索。因此,你將從 MOOC 的課堂中獲得一份精選的閱讀列表,我認為這也是非常有用的。
最后,我對于這門專業(yè)化課程給出的關鍵要點是:現在我完全相信深度學習方法和它的強大功能。它的主要優(yōu)勢在于對大量數據的擴展性以及對相似任務泛化能力,而這些可能是傳統(tǒng)機器學習模型不具備的能力。所以,我想感謝 Andrew Ng,感謝整個 deeplearning.ai 團隊,感謝 Coursera 提供了如此有價值的內容。而且我絕對期待,不久的將來這門專業(yè)課可能會迎來第六門課程——關于深度強化學習的話題!
聲明:作者并不隸屬于 deeplearning.ai、Coursera 或其它 MOOC 供應商。這是作者在 2017-11 至 2018-02 期間撰寫的關于自己參加這次課程的個人經歷體驗。此外,本博客提到課程內容不具有普遍的參考意義,因為官方的課程設置在將來可能發(fā)生變化。
聯(lián)系客服