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