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