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