當前位置:
首頁 > 知識 > 想要自學深度學習?不用GPU,瀏覽器就夠了

想要自學深度學習?不用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 的魅力所在,並帶來學習的動力。學習這個課程並不能讓你了解深度學習的現狀,但可以快速上手具體的項目,這或許正是作者說的「目標導向、產品導向」的意義所在。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

明年AI學術會議投稿規模炸裂!注意ICML 2019的這些變化
百聯X機器之心新零售人工智慧實驗室合作夥伴招募計劃啟動!

TAG:機器之心 |