想要自学深度学习?不用GPU,浏览器就够了
機器之心整理
參與:劉曉坤、思源
今天要介紹一個近期開源的自學深度學習 GitHub 項目,作者為每種具體算法提供了 Jupyter notebook 實現,可以輕易地在 Google Colab 上運行(免費提供云端 GPU 或 TPU)。所以想自學深度學習,不需要價格幾千美元的 GPU,有一個 Chrome 瀏覽器就夠了。
項目地址:https://github.com/GokuMohandas/practicalAI
該項目作者是 Goku Mohandas,是一名硅谷的 AI 研究員,曾就職于蘋果公司,并在 O'Reilly Media 從事過教學工作。他開發的這個 GitHub 項目——PracticalAI 目前已經有大約 2500 的收藏量,覆蓋了 Jupyter Notebook 和 Google Colab 的使用教程、Python 編程基礎、深度學習基礎(PyTorch 框架和 CNN、RNN 等算法),以及更高層次的算法和 AI 研究課題。
作者指出,他開發這個教程的目的是讓人們能學習到目標導向、產品導向的機器學習思維,而不會停留在課堂。
課程簡介
下表概括了整個項目的課程大綱,分成 4 個主要部分:基礎、深度學習、高級深度學習算法和 AI 研究課題(藍色是已經寫好 notebook 的部分,可以直接鏈接到 Colab 頁面,黑色是尚未寫的部分)。
基礎:包括 Jupyter Notebooks 簡介、Python 編程基礎和基礎機器學習算法。作者會介紹 Jupyter Notebooks 的單元格編程界面和操作、執行單元格的方法;然后是 Python 以及兩個重要的 Python 庫——NumPy、Pandas 的入門;最后是線性回歸、邏輯回歸等基礎 ML 算法的講解,這些算法覆蓋面很窄,不包含 SVM、樸素貝葉斯、隱馬爾科夫模型等更復雜的算法。但該項目并不是為經典機器學習而設計的課程,讀者可以在學習這些簡單算法的過程中了解到 AI 算法的訓練、數據集、評估、推理、正則化等基本概念,然后進入深度學習課程。
深度學習:包括 PyTorch 框架介紹和多種經典的深度學習算法。PyTorch 的介紹主要涉及張量計算和梯度計算。深度學習算法涉及多層感知機、CNN、RNN、詞嵌入等,作者還寫了兩個較高層面的主題,分別是數據和模型的關系,以及目標導向的機器學習,讓讀者對如何利用這些算法有個基本理解。每種算法針對的任務都比較單一,也沒有涉及生成模型,但通過深入的理解單個模型應用的每一個過程,可以讓你在進階學習時不被細節拖后腿。
高級深度學習算法:包括高級 RNN 模型、殘差網絡、自編碼器、生成對抗網絡、空間變換網絡等。這些算法的模型架構設計建立在基礎的深度網絡之上。作者目前只寫了高級 RNN 模型,涉及條件 RNN、編碼器-解碼器架構以及注意力機制等,其它模型還需等作者更新。或許作者還可以考慮加上基于流的模型、圖神經網絡等高級算法。
AI 研究課題:包括計算機視覺、時間序列分析、主題建模、推薦系統、預訓練語言模型、多任務學習、小樣本學習、強化學習等。這些課題不對應具體的模型架構,但會隨當前研究現狀有所偏好,如計算機視覺領域的主要模型架構就是 CNN 和編碼器-解碼器,作者目前只寫了計算機視覺部分。要把握這些課題,需要讀者對要解決的問題本身有很好的理解,從而不限于方法層面的視角。或許作者還可以考慮加上 AutoML、自監督學習、遷移學習、AI 游戲等課題。
可以跑的教程
這一套實踐教程都能直接在 Colab 上運行,因此結合解釋與代碼,我們能更好地入門機器學習。那么小白是不是也能看得懂這個教程?我們可以從最基礎的 Python 和 NumPy 出發,看看它們都介紹了些什么,純小白是不是能在較短的篇幅里了解最核心的思想與技術。
在 Pyhon 實踐中,作者給出了一個非常精簡的教程,其僅涉及 Python 最核心的模塊,包括變量、數據結構、基本語句與結構等。即使沒有什么基礎的小白,了解這些核心模塊后至少能看懂大部分代碼,剩下困難的只需要在遇到時谷歌一下就行了。
首先對于最基礎的變量,它們就像函數中的自變量一樣傳遞不同的值。如下所示,Python 中的變量可以傳遞整數、浮點數、字符串和布爾值,它們可以用于不同的運算:
而對于 Python 中主要的數據結構,即組織整數、浮點數、字符串和布爾值的結構,主要可以分為列表、元組和字典。其中列表是最常見的數據結構,我們可以想象為一個表格中的一行,表格每一個單元格都是列表中的一個元素,這樣的元素不論存放數值、列表還是字典都沒問題,它相當于一個容器。
以下展示了如何取列表中存儲的元素,第一個表示取列表中所有元素,第二個表示從第三個元素開始取后面所有的元素:
元組和列表非常類似,只不過元組里面的元素不能修改。最后是字典,字典中每一個元素都由 Key 和 Value 組成,即一個鍵值對。在字典中,我們需要使用 Key 才能取到對應的 Value。
如下所示字典的構建與索引,它會通過「name」這一個鍵取對應的值 Goku:
隨后對于基礎語句,例如條件和循環語句,該教程也給出了很直觀的解釋。最后,如果我們利用數據結構組織變量、利用基礎語句組織數據結構,再用函數或類等程序邏輯組織基礎語句,那么我們就能得到完整的程序。
如下所示為基礎的類,它能將函數和變量統一在一起,并構建完整的流程。在類中,賦值的變量可以稱為屬性,而函數則稱為方法。下圖構建了一個 Pets 類,當我們使用狗或貓實例化這個類時,就能直接調用 change_name 方法以實現改名。入門者跑一跑這幾段代碼就能知道類的大概作用了:
當然除了這些最基礎的 Pyhon 語句,機器學習另外一個很重要的基礎就是數值計算。我們需要計算大量的數據以獲得最終的分析結果,這就少不了 NumPy,可以說入門機器學習第一個學習的包就是 NumPy。
我們可以使用 NumPy 實現大多數機器學習算法,現在很多深度學習框架都繼承了 NumPy 的核心概念或數據結構等。了解了它,學習 DL 框架就沒什么阻礙了。在 NumPy 中,最重要的是多維數組這個數據結構,它能以向量、矩陣或高階張量的形式組織大量的數值,并實現高效的運算。此外,NumPy 還有很多針對多維數組所構建的運算,例如索引、矩陣乘法、矩陣轉置或廣播機制等。
入門讀者首先需要了解多維數組,尤其是矩陣的概念,當然要是數學上不了解矩陣,NumPy 也就愛莫能助了。以下代碼構建了一個 3×3 矩陣,并輸出它的元素類型、矩陣維度形狀和矩陣大小等。所有機器學習中的數據都是以多為數組存儲的,它們的計算流也都以數組為媒介,所以先搞定最基礎的 NumPy 數組吧!
關于理論基礎的學習,只跑這些算法肯定是不夠的,小編還是建議結合經典教材和課程視頻一起學習。但先在瀏覽器上跑一跑,或許能讓你更快體驗到 AI 的魅力所在,并帶來學習的動力。學習這個課程并不能讓你了解深度學習的現狀,但可以快速上手具體的項目,這或許正是作者說的「目標導向、產品導向」的意義所在。
點擊閱讀原文,進入大賽官網報名參與 JDD-2018?京東數字科技全球探索者大賽。
總結
以上是生活随笔為你收集整理的想要自学深度学习?不用GPU,浏览器就够了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kubernetes log 流式数据处
- 下一篇: 这些AI应用不简单,Keep首场技术开放