2019最新實戰!給程式設計師的7節深度學習必修課,最好還會Python!
整理 | 琥珀
出品 | AI科技大本營
從 2017 年開始,fast.ai 創始人、資料科學家 Jeremy Howard 以每年一迭代的方式更新“針對程式設計者的深度學習課程”(Practical Deep Learning For Coders)。這場免費的課程可以教大家如何搭建最前沿的模型、瞭解深度學習的基礎知識。直到今年已經是第三個年頭了。
1 月 24 日,fast.ai 上線 2019 版深度學習新課程。據介紹,該課程 100% 全新,包括以前從未涵蓋過的深度學習入門課程,甚至其中某些技術成果還尚未發表學術論文。
如以往一樣,Jeremy Howard 公開了本次課程將涵蓋的所有細節內容。他表示,本次課程共有七節,每節課大約 2 小時,當然,預計完成課後作業的時間將有 10 小時。
課程將涉及的應用案例
本次課程設計關鍵應用包括:
計算機視覺(例如按品種分類寵物照片)
影像分類
影像定位(分割和啟用圖)
影像關鍵點
NLP(如電影評論情緒分析)
語言建模
文件分類
表格資料(如銷售預測)
分類資料
連續資料
協作過濾(如電影推薦)
課程涵蓋的基礎
課程連結傳送:https://course.fast.ai
目標人群:至少有一年的程式設計經驗,且最好是 Python,fast.ai 還提供了Python 相關的學習資源。
第 1 課:影像分類
該系列課程第一課,是訓練一個能以最高精準度識別寵物品種的影像分類器。其中,遷移學習的使用時本次課程的基礎。我們將瞭解如何分析模型,以瞭解其失效模型,或許還能發現,模型出錯的地方與育種專家犯了相同的錯誤。
訓練和分析寵物品種分類器
我們將討論課程的整體方法,這與先理論再實際應用的方式不同,課程旨在先進行實際應用再深入研究。
我們還將討論如何在訓練神經網路時設定最重要的超引數:學習率(這主要基於 Leslie Smith 的 learning rate finder)。最後,還會介紹“標籤”的問題,並瞭解 fast.ai 所提供的功能,如可以輕鬆將標籤新增到影像中。
第 2 課:資料清洗與構建;梯度下降法(SGD)
本節課程將學習如何使用自己的資料構建影像分類模型,主要包括以下幾方面:
影像收集
並行下載
建立驗證集
資料清洗,通過模型找到資料問題
如下圖所示,我們可以建立一個可區分泰迪熊和灰熊任務的模型。
將模型投入生產
課程後半部分,將完整訓練一個較為簡單的模型,同時建立一個梯度下降迴圈。(注:在此過程中,將學習到很多新的術語,所以請確保做好筆記,因為在整個課程中都會引用這個新術語。)
第3課:資料塊;多標籤分類;分割
本節課開始將主要研究一個有趣的資料集,叫做 “Planet’s Understanding the Amazon from Space”。為了將這些資料轉化為模型需要的形式,將使用 fast.ai 工具之一的資料塊 API。
Planet 資料集的一個重要特徵是,它是一個多標籤資料集。也就是說,每個Planet 影像可包含多個標籤,而之前看過的資料集,每個影像只有一個標籤。此外,可能還需要對多標籤資料集進行修改。
影像分割模型的結果
接下來的影像分割,是一個標記影像中每個畫素的過程,其中一個類別顯示該畫素描繪的物件型別。將使用與早期影像分類類似的技術,所以不需要太多調整。
本課程中還會使用到 CamVid 資料集,該模型誤差遠低於在學術文獻中找到的任何模型。
假設:如果你的因變數是連續值而不是類別怎麼辦?我們將重點回答這個問題,檢視關鍵點資料集,並構建一個精準預測面部關鍵點的模型。
第 4 課:NLP;表格資料;協同過濾;嵌入(Embeddings)
使用 IMDb 電影評論資料集深入研究自然語言處理(NLP)。在這項任務中,目標是預測電影評論是積極的還是消極的,這稱為“情緒分析”。此前,在 fast.ai 2018 課程裡提到的 ULMFit 演算法,對 NLP 的發展起著重要作用。紐約時報曾報導:“新系統開始瓦解自然語言的程式碼。”ULMFiT 被認為是當今最準確的情緒分析演算法。
基本步驟如下:
(首選)建立(或下載預訓練的)語言模型,該模型在大型語料庫(如維基百科)上訓練。(“語言模型”指的是學習預測句子下一個單詞的任意一種模型。)
使用目標語料庫(案例為 IMDb 電影評論)微調該語言模型。
在微調語言模型中刪除編碼器,並用分類器進行替換。然後對微調該模型以完成最終分類任務(情緒分類)。
在學習 NLP 的過程中,我們將通過覆蓋表格資料(如電子表格和資料庫表格)以及協作過濾(推薦系統)來完成使用的編碼器深度學習的實際應用。
對於表格資料,我們還將看到如何使用分類變數和連續變數,以及如何使用 fast.ai. tabular 模組來設定和訓練模型。
在課程中期,我們主要研究瞭如何在每個關鍵應用領域中構建和解釋模型,包括:計算機視覺、NLP、表格資料、協同過濾等。
在課程的後半部分,我們將瞭解這些模型如何真正起作用、如何從頭開始建立的過程,會涉及以下幾部分:
啟用
引數
圖層(仿射和非線性)
損失函式
第 5 課:反向傳播;加速SGD;構建神經網路
本節課程中,將所有的訓練融合在一起,以便討論反向傳播時準確理解發生了什麼,並利用這些只是從頭構建一個簡單的神經網路。
在這個過程中,可以看到嵌入層的權重,以找出模型從分類變數的中學到了什麼。
儘管嵌入在 NLP 的單詞嵌入環境中最廣為人知,但它們對一般的分類變數也同樣重要,例如表格資料或協同過濾。它們甚至可以與非神經模型一起使用並取得巨大成功。
第 6 課:正規化;卷積;資料倫理
本節課主要討論一些改進訓練和避免過度擬合的技術:
Dopout:在訓練期間隨機刪除啟用,使模型正規化
資料增強:在訓練期間修改模型輸入,以便有效增加資料大小
批量標準化:調整模型的引數化,使損失表面更加平滑
單個影像的資料增強示例
接下來,我們將學習有關卷積的所有內容,卷積可被視為矩陣乘法的一種變體,也是現代計算機視覺模型的核心操作基礎。
我們將建立一個類啟用圖。這是一個熱圖,顯示影像的哪些部分在進行與測試時最重要。
卷積如何運作
最後,我們還將提到:資料倫理。同學們將瞭解到模型出錯的一些方法,尤其是反饋迴圈,其原因以及如何避免這些問題。我們還將研究資料偏差可能導致偏向演算法的方式,並討論資料科學家可以而且應該提出的問題,以確保他們的工作不會導致意外的負面結果。
美國司法系統中演算法偏差的例子
第 7 課:構建 ResNet、U-Net;生成對抗網路
在最後一講中,我們將研究現代架構中最重要的技術之一:跳躍連線(skip connection)。跳躍連線是 ResNet 最重要的應用,其主要在課程中用於影像分類,同樣它還是很多前沿成果的基石。
我們還將研究 U-Net 架構,使用不同型別的跳躍連線極大改善了分段結果。
ResNet跳躍連線對損失表面的影響
然後,使用 U-Net 架構來訓練超解析度模型。這是一種可以提高低質量影像解析度的模型,該模型不僅會提高解析度,還會刪除 jpeg 圖片上偽跡和文字水印。
為了使我們的模型產生高質量的結果,需要建立一個自定義損失函式,其中包含特徵損失(也稱為感知損失)以及 gram 損失。這些技術可用於許多其他型別的 影像生成模型,例如影像著色。
使用特徵損失和 gram 損失的超解析度結果
我們將瞭解到一種稱為生成性對抗性損失(用於生成性對抗性網路 GAN)的損失函式,可以在某些情況下以犧牲速度為代價來提高生成模型的質量。
例如,上文提到的還未發表的一些論文中所涉及的應用:
利用遷移學習,更快更可靠地訓練 GAN
將架構創新和損失函式方法以前所未有的方式進行結合
結果令人驚歎,只需要幾個短短几小時便可進行訓練(與以前需要幾天的方法相比)。
一個迴圈神經網路
最後,我們還將學到如何從頭開始建立遞迴神經網路(RNN)。實際上,RNN 不僅是整套課程中 NLP 應用的基礎模型,還被證明是規則的多層神經網路的一個簡單重構。
課前須知:
1、Google Cloud 和微軟 Azure 作為贊助方,已將課程所需的全部功能整合到基於 GPU 的平臺上,並且提供“一鍵式”平臺服務,如 Crestle 和Gradient 服務。
2、完成第一堂課後,學生可以在自己的資料上訓練影像分類模型。整個上半部分重點是實用技術,僅展示在實踐中用到的技術相關理論知識;課程的後半部分,將深入研究理論。直到最後一節課,將學習構建和訓練一個 Resnet 的神經網路,以求接近最佳準確性。
3、 課程使用 PyTorch 庫進行教學,可更輕鬆訪問推薦的深度學習模型最佳實踐,同時也可以直接使用所有底層的 PyTorch 功能。
4、學習內容同樣適用於 TensorFlow/keras、CNTK、MXnet 或者任何其他深度學習庫的任何任務。
5、電腦需要連線到安裝了 fast.ai 庫的雲 GPU 供應商服務,或設定一個適合自己的 GPU。同時,還需要了解執行深度學習訓練的 Jupyter Notebook 環境的基礎知識。
6、課程筆記本提供了新的互動式 GUI,用於使用模型查詢和修復錯誤標記或錯誤收集的影像。
7、(強烈)建議學院參加該課程的線上社群。
(本文為 AI科技大本營原創文章,轉載請微信聯絡 1092722531。)
徵稿推薦閱讀
相關文章
- 送給程式設計師:最好的程式設計名言程式設計師
- 程式設計成為英國小學生的必修課程式設計
- 程式設計師給女友最好的禮物是....程式設計師
- 寫給程式設計師的有效學習方法程式設計師
- 學習Python程式設計的最好的幾本書Python程式設計
- 學會提示-AI時代職場必修課AI
- 寫給前端程式設計師的英文學習指南前端程式設計師
- 非程式設計師選擇學習C++還是Python?程式設計師C++Python
- 寫給Java程式設計師學習路線圖Java程式設計師
- 深度學習Tensorflow實戰,新課進行曲!深度學習
- 【深度學習-基於Tensorflow的實戰】公開課實況深度學習
- 《深度學習Python》核心技術實戰深度學習Python
- 學習Python除了做程式設計師之外,還可以做什麼工作?Python程式設計師
- 給 Python程式設計師的函數語言程式設計實踐經驗Python程式設計師函數
- 學習python第六節課Python
- 寫給程式設計師的管理入門課程(轉)程式設計師
- 90後iOS開發者的出路,如何規劃30歲前的自己(程式設計師必修課)iOS程式設計師
- 風變程式設計——小白也能學會的程式設計課!程式設計
- 人人都能學會的python程式設計教程7:元祖(tuple)Python程式設計
- PHP程式設計師7小時學會Kotlin系列PHP程式設計師Kotlin
- 給年輕程式設計師的7個建議程式設計師
- Python程式設計師學習路線圖Python程式設計師
- 程式設計師,你會從 Bug 中學習麼?程式設計師
- 萬萬沒想到,學習風變程式設計Python課程還有這個用處程式設計Python
- 【1024程式設計師節】程式設計師,你學程式設計的初衷是什麼?程式設計師
- 程式設計師程式設計生涯中會犯的7個錯誤程式設計師
- 分享 程式碼大全 節選 -- 程式設計師的習慣程式設計師
- 成為最好的程式設計師的迷茫程式設計師
- 每個程式設計師都需要學習 JavaScript 的7個理由程式設計師JavaScript
- 文案策劃必修課(3):遊戲情節的塑造遊戲
- PHP 程式設計師的堆學習PHP程式設計師
- 小小程式設計師的學習方法程式設計師
- 程式設計師的有效學習策略程式設計師
- 《程式設計師健康指南》:給程式設計師的健康書程式設計師
- 戰神系列戰鬥設計師:給遊戲設計師的 50 條建議遊戲設計師
- 低效程式設計師的7個壞習慣程式設計師
- 程式設計師必看,這本深度學習寶典刷爆IT圈!程式設計師深度學習
- 好程式設計師web前端分享想要學習前端需要學那些課程程式設計師Web前端