比等青蛙旅行回家還漫長的事情:吳恩達的深度學習第五節課程

  大數據文摘作品

  編譯:黨曉芊、元元、龍牧雪

  等待吳恩達放出深度學習第5課的時候,你還能做什麼?今天,大數據文摘給大家帶來了加拿大銀行首席分析師Ryan Shrott的吳恩達深度學習第4課學習筆記,一共11個要點。在等待第5門課推出的同時,趕緊學起來吧!

  這兩天,聽說大家都被一款叫做“旅行青蛙”的遊戲刷屏了,還有許多人在票圈喊著“養男人不如養蛙”。

  在這個“雲養蛙”的佛系遊戲裡,只有兩種狀態:蛙兒子在家和不在家。蛙兒子在家的時候,你只能一心盼他出門,啥也幹不了。蛙兒子出門了,你也不知道他要多久才能回家,只能等著他回來——還是啥也幹不了。

  當然,青蛙出門在外的日子裡,他偶爾會給等待中的你寄張明信片回來。

  還有什麼等待比等青蛙旅行回家還漫長嗎?

  有的。那就是等吳恩達的deeplearning.ai放出第5門課。

  自從去年8月吳恩達的深度學習系列課程在Coursera上線(戳藍字看大數據文摘相關測評《票圈被吳恩達新開的深度學習課程刷屏?到底如何,我們幫你做了個測評》、《免費!你們要的吳恩達深度學習課程【漢化】視頻來了!》),這門Sequence Models課程一直處於coming soon的狀態,上線日期從去年底一直跳票到今年一月。

  在漫長的等待過程中,已經有不少童鞋學完了這一系列的前4門課,大數據文摘也發佈過前3課的學習筆記《我從吳恩達深度學習課程中學到的21個心得:加拿大銀行首席分析師“學霸“筆記分享》。

  今天,我們再次給大家帶來了這位國際友人的吳恩達深度學習第4課學習筆記,一共11個要點。邊學習邊等待的過程,又何嘗不是一種幸福呢。同時,課程筆記裡還有狗糧放出,請大家注意接收!

  ***

  我最近學完了吳恩達在Coursera上關於計算機視覺的課程。吳恩達的課程非常精彩,他詳細解釋了很多用來優化計算機視覺的複雜的概念。我最喜歡的是關於神經風格遷移的部分(見第十二課),這個方法可以讓你用任意內容的繪畫創造出莫奈風格的藝術作品。請看下面的例子:

  這篇文章中,我將會討論我在課程中學到的12個關鍵點。請注意,這個課程是deeplearning.ai所發佈的深度學習系列課程的第四部分。

  

  第一課:為什麼計算機視覺能夠發展迅速

  

  大數據以及算法開發將會使智能系統的測試誤差逐漸趨近於貝葉斯最優誤差。這個結果將會導致人工智能的表現全方位超越人類,其中包括自然識別方面的工作。像TensorFlow這樣的開源軟件,就可以幫助你用遷移學習的方法迅速實現其任何物體的探測器。用遷移學習的方法你只需要大約100-500個訓練實例就可以得到很好的結果。手動標記100個實例的工作量並不太,所以你可以很快得到一個最小化可用模型。

  

  第二課:卷積是如何工作的?

  

  吳恩達解釋瞭如何實現卷積算符並展示瞭如何用它檢測物體邊緣。他同時還解釋了其他的過濾器,比如說索貝爾過濾器(Sobel filter),這種過濾器在圖像邊緣中部採用更大的比重。然後,吳恩達解釋了這些過濾器的比重並不是靠人為設計的,而是依靠類似於梯度下降的這樣的爬山算法由計算機自行訓練出來的。

  

  第三課:為什麼要用卷積?

  

  吳恩達透徹的解釋了卷積適用於圖像識別的原因。其中有兩個具體的原因。第一個是參數共享。大體的想法是如果一個特徵探測器對於圖像的某一部分很有效,這個探測器很可能對圖像的其他部分也有效。比如說,一個邊緣探測器可能對圖像的很多部分都有用。特徵分享的方法能夠降低系統參數的數量,同時能夠帶來穩健的平移不變性(translation invariance)。平移不變性是一個概念,意思是比如說有一張貓的圖片,即使是經過了移動和旋轉,依舊是一隻貓的圖片。

  第二個原因被稱作稀疏連結性,即每個輸出層僅僅由很小一部分輸入結點計算得到(更具體一些,輸入的數量是過濾器數量的平方)。用這個方法可以極大的減少網絡中參數的數量,提高訓練速度。

  

  第四課:為什麼使用填充(Padding)?

  

  填充通常用來保持輸入的數量(也就是說,使得輸入輸出的維度相同)。用這個方法也可以保證在進行訓練時,來自圖片邊緣的貢獻和來自中心的貢獻相當。

  

  第五課:為什麼使用最大池化層(Max Pooling)?

  

  實證研究證明,最大池化層對於CNN非常有效。通過對圖像向下取樣,我們減少了參數數量,同時也確保圖像特徵在圖像尺度變化或者方向變化時保持不變。

  

  第六課:經典網絡架構

  

  吳恩達展示了3種經典的神經網絡架構,包括LeNet-5, AlexNet 和VGG-16。他所展示的主要觀點是一個有效的神經網絡通常是通道的數目不斷上升,寬度和高度不斷下降。

  

  第七課:為什麼ResNets 有效?

  

  對於一般的神經網絡,由於梯度的消失和爆炸,訓練誤差並不會隨著網絡層數的增加而單調遞減。然而對於ResNets而言,可以通過向前跳躍性連接,讓你在訓練一個很大的神經網絡時,誤差單調下降,性能單調遞增。

  

  第八課:使用遷移學習!

  

  如果從頭開始訓練一個像inception這種結構巨大的神經網絡,即使在GPU上訓練也可能需要好幾周的時間。你可以下載經過預訓練得到的權重,然後只重新訓練最後的softmax層(或者最後幾個層)。這個會極大縮短訓練時間。這種方法有效的原因是前幾層所訓練的特徵很可能是諸如邊界或者彎曲線條之類的所有圖像的共同特徵。

  

  第九課:如何在計算機視覺競賽中獲勝

  

  吳恩達解釋說,你需要獨立的訓練多個神經網絡然後取結果的平均值,來獲得更好的結果。一些數據增強的技術,比如說隨機裁剪圖片,沿水平垂直軸翻轉圖像可以幫助提升模型表現。總之,你一開始應該使用開源軟件庫和預訓練模型,然後根據自己要解決的問題不斷細化模型,調整參數。

  

  第十課:如何實現對象檢測

  

  首先,吳恩達解釋了從圖片中檢測標誌性物體的思路。基本上來說,這些標誌性物體將成為最終輸出結果的一部分。通過一些有效的卷積操作,你會得到一個輸出值,表示一個物體出現在某個區域的概率和區域的位置。同時,他解釋瞭如何通過交集並集商評估對象檢測器的有效性。最後,吳恩達結合所有構成要素,解釋了著名的YOLO算法。

  

  第十一課:如何實現面部識別

  

  面部識別是一個單樣本學習(one-shot learning)問題,因為你有可能只能根據一張示例圖片來辨別一個人。解決問題的方法是使用相似性函數,這個函數可以給出兩個圖像之間的相似程度。所以,如果兩張圖像是同一個人,你希望這個函數輸出一個較小的數值;不同人的兩張圖像則輸出較大的數值。

  吳恩達給出的第一個解決方案被稱作siamese網絡。它的基本思路是將兩張不同的圖片輸入到同一個神經網絡然後比較結果。如果輸出相似性很高,那麼很有可能是同一個人。神經網絡訓練的目標就是如果兩個輸入的圖片是同一個人,那麼輸出的結果距離相對很小。

  對於第二種解決方案,他給出了一個三元損失方法(triplet loss method)。這個方法是,從三張圖片(Anchor (A), Positive (P) and Negative (N))訓練得到一個神經網絡,使得 A與P 的結果相似程度遠遠高於A與N的結果相似程度。

  注意,此圖中有狗糧!(為什麼說這是狗糧?請看大數據文摘此前報道《吳恩達CNN新課上線!deeplearning.ai 4/5解鎖,6日開課》)

  

  第十二課:如何用神經風格遷移(Neural Style Transfer)的方法創造藝術作品

  

  吳恩達解釋瞭如何結合風格和內容創造新的圖畫。示例如下。神經風格遷移方法的核心在於充分理解神經網絡中每一個卷積層對應的具體的視覺表徵。實際表明,網絡當中前幾層通常學習簡單的特徵,比如圖像邊緣。後幾層通常學習一些複雜的對象,比如臉,腳,汽車等。

  為了創建一個神經風格轉移圖畫,你只需要定義一個結合風格和內容相似性的凸函數作為損失函數。具體而言,這個函數可以寫成:

  在這個方程中,G是被創造出的圖像,C是圖像內容,S是圖像風格。簡單的採用梯度下降法來對損失函數就生成圖像求最小值。

  基本步驟如下:

  1. 隨機生成G。

  2. 使用梯度下降方法最小化J(G),通過這個等式: G:=G-dG(J(G))

  3. 重複第二步。

  結論:

  完成這門課程之後,你會對大量計算機視覺方面的文獻有一個直觀的認識。同時課後作業讓你有機會自己實現部分算法。完成這門課程後,你不會很快成為一個計算機視覺方面的專家,但是它可能會開啟你計算機視覺相關的想法和事業。

  你也學完了吳恩達深度學習系列課的前4門課嗎?還是仍停留在第一課第一講?歡迎留言和我們分享。

  https://www.kdnuggets.com/2017/12/ng-computer-vision-11-lessons-learnied.html

《更多精彩内容,按讚追蹤Gooread·精選!》
喜歡這篇文章嗎?立刻分享出去讓更多人知道~

    相關閱讀


您可能感興趣