關於機器學習,這可能是目前最全面最無痛的入門路徑和資源!
2017-12-22
編者按:本文來自微信公衆號小白AI之路」(ID:AI-Learning),作者李傑克。
最近有不少童鞋給李傑克留言,說自己對機器學習很感興趣卻無從下手,想知道我的學習路徑,也希望我可以分享一些適合入門的學習資源給到大家。
在踩過坑、撞過牆、走過彎路之後,我這個本科學渣、非計算機專業、不懂編程的前互聯網產品經理,也積累了些乾貨可以跟大家share,而且因爲有段時間沒更新了,李傑克決定好好補償一下大家,所以把能夠寫七八篇專題的乾貨都融入到了這篇文章,總計1萬+字……
但是,各位童鞋,不要慌也不要怕......李傑克有自信這應該是目前你在網上能夠讀到的最全面、最良心、最友好的關於機器學習入門路徑和資源分享的文章了。
說它「全面」是因爲我爲大家梳理了Python及常用庫、機器學習算法、深度學習框架的學習路徑和資源,就算你不打算根據推薦的資源進入更深的學習,讀完文章後,你也應該大致瞭解機器學習技術的初步輪廓了。
說它「良心」是因爲這篇文章我大概構思了一個月,利用工作之餘的時間,陸陸續續寫了兩個星期40餘小時,自己都快把自己寫得無聊和煩躁的那種......
說它「友好」是因爲李傑克做過產品經理,對於大家的學習體驗這件事情還是非常在意的,本着no experience no bb的原則,分享的學習路徑和資源都是自己各種嘗試後篩選出來的、比較適合大家入門的資源。
這篇文章其實有點工具書性質,你大可以在入門的不同時期都來看看,比如這個時期的學習路徑是什麼樣的、有哪些還不錯的資源等等。
如果你耐心看下去(當然是可以分多次看甚至反覆看啦),李傑克相信你讀完這篇文章後肯定會毫不吝嗇地給我點個贊,甚至還會在朋友圈幫我轉發,而且是本着「好東西要大家分享」的那種心態去轉發……好吧,李傑克承認自己今天早上忘記吃藥了......
1、學習資源獲取渠道
對於在網上可以輕易找到的資源,我會直接貼出相關鏈接,大家可點開鏈接,閱讀或下載;
對於不容易找到的資源,我已經整理打包放到雲盤中了,大家只需要前往雲盤下載即可。
雲盤中三份之二資源,是李傑克已經看過並且覺得對於大家有幫助才放進去的,那些對現階段的大家沒有太大幫助的資料我都過濾掉了,畢竟爲了看起來全而各種塞大家可能永遠都不會用上的資源沒有任何意義,我想做的是降低大家篩選學習資源的成本。
另外三份之一資源,是李傑克沒來得及看、又被很多人奉爲機器學習經典的書籍,我考慮再三,還是放進去了,雖然我還沒怎麼看過,但大家以後可能還是會有用到的場景。
李傑克也還在持續地學習,將來還會把持續遇到的優質學習資源不斷地整合進去,放張目前雲盤裏資料的截圖勾引下大家,點開大圖先粗粗瞄下里面的學習資源,看看李傑克是不是很良心(驕傲臉):
至於如何獲取這些資源的下載鏈接呢?在本文結尾的地方,我會分享給大家:)
下面內容,會從四個方面展開:
1、機器學習第一語言Python
2、機器學習中數學基礎
3、機器學習算法基礎
4、深度學習框架基礎
再次強調,我本文中提及所有知識點和資源,僅僅是讓你入門機器學習,如果想要走更遠,那肯定是遠遠不夠的,我們還是要繼續努力纔可以呢!
話不多說,我們出發吧!
2、機器學習第一語言Python
講真,曾經中二的李傑克一直很傻地跟身邊朋友說「編程是幫別人實現想法工具,而特立獨行善於思考如我(二得不行...)的人要去做策略和方案才能體現出價值嘛!」
當然除了中二之外,李傑克還是一個表裏如一的人,所以大學裏真的是一點編程都沒有去學......直到李傑克上手編程後才發現編程其實也可以是件很有意思很有效率的事情嘛。
我也終於能夠理解在自己產品經理時期的某一次深夜發佈後,我的程序猿好友王建國一臉昇天的樣子跟我說他剛剛寫了一段無比漂亮美麗還略帶性感風騷的代碼的心情。
我知道,那一刻,他滿臉抖動的肉牽扯出來的笑就像一個兩百多斤的孩子那般純粹。
我也知道,那一刻,他驕傲得就像自己是整個代碼世界裏流淌着最高貴血液的王。
我還知道,他如果一直保持從代碼中獲得快樂和滿足的話,他們老王家怕是永遠抱不上孫子了......
說到學習編程就不得不提到我們的大主角Python了,其實包括Java、lua、MATLAB、Julia、R、Perl、python、Ruby在內的多種語言都能搞機器學習,那爲什麼只有Python獨佔鰲頭,被推向了機器學習第一語言的神壇呢?
李傑克覺得主要有兩個原因:
1、之前搞機器學習的那幫人都喜歡用Python,所以Python慢慢就積攢了很多優秀的機器學習庫,所謂的庫,你就理解爲別人封裝好的一些具有某些功能的模塊,我們可以通過調用這些模塊來實現某些功能,而不用自己從頭寫代碼;
2、Python真的是一個極易上手的語言,語法很簡單,容易理解,且實現同一功能的代碼量會比一般語言要少一些,李傑克上手python的過程除了最開始熟悉語法的階段比較無聊煩躁外,後面都沒有太不適的感覺。
就算你不搞機器學習,如果要學編程,那Python也是個極佳選擇,因爲Python這貨實在膩害,機器學習、數據分析、爬蟲、Web 網站、遊戲、後臺服務、運維都能做,因爲什麼事情都能摻和上一腳的特性,江湖人稱「萬能膠水」。
話說現在都有小學都把Python列爲必修課了,浙江還把Python列爲高考內容,就問一句你怕不怕,反正我已經是瑟瑟發抖了,坐等被拍死......
迴歸正題,下面我們來說下,在機器學習這一領域,需要掌握哪些基本的Python知識。
一、Python的基本語法和應用
1、基本元素
基本上就是整數、浮點數、字符串、變量、布爾值、list、tuple、dict和常用格式文件等元素的操作和使用。
2、判斷和循環
你可以理解爲把上面說的一些基本元素通過if..else...., for和while等來做一些判斷和循環。判斷很簡單,在某個節點上,如果是A,下面一步應該怎麼走,如果是B,下面應該怎麼走。循環也不難理解,比如說我們有一個list[1,2,3],我們把裏面的每個元素都取出來做某些處理。
3、函數和類
你可以理解爲我們故意把某些邏輯做成類或函數,在某些需要用到這端邏輯的場景下,我們可以直接調用相關函數,而不用重新去寫這段邏輯的代碼,其實就是程序猿常說的不要重複造輪子的事情。
聰明的你是不是感覺有點熟悉似曾相識啊,對的哇,前面說的庫裏的模塊,其實就是一個個封裝好的函數哈。
再次強調,這只是你需要掌握的最最基本的東西,Python的世界可是大着呢!
二、科學計算庫numpy和pandas
numpy和pandas是非常出名兩個科學計算庫,很多做數據分析和金融的童鞋都會用到。
那爲什麼機器學習會用到這兩個庫了?
我們先來無腦吟唱下這句話:在機器的世界裏,萬物皆可爲向量。向量其實也算是一維的矩陣,我們的訓練數據和要預測的數據也都是以矩陣的形式餵給機器的。
而numpy和pandas可以說是處理矩陣的好手,所以通常會用numpy和pandas對數據進行處理後再餵給機器,就我目前的實踐經驗來說,numpy應用的場景會比pandas多些。
其實好一些機器學習框架(如TensorFlow和Mxnet)也有自己處理數據的模塊,但大多是通過封裝numpy得到的,使用的方法也很像,所以無腦去上手numpy肯定不虧。
關於numpy和panda,我給大家提供一個PPT《機器學習numpy與pandas基礎》,大概100來頁,兩個庫的基本知識都說到了,感覺還不錯,已經放在雲盤裏了。
另外,網上有一篇叫《十分鐘搞定pandas》的文章梳理得還算清晰到位,大家不妨也去讀讀,反正也花不了多少時間。
《機器學習numpy與pandas基礎》獲取方式:詳見文末
《十分鐘搞定pandas》閱讀地址:http://t.cn/RpYFh6h
三、畫圖庫matplotlib
在搞機器學習過程中,畫圖不是必須的,但通過畫圖能夠讓我們可視化一些數據,從而能夠更直觀地觀察數據特徵和訓練過程。
我們可以把每一個數據樣本都理解爲其特徵空間中的一個點。當我們把這些數據樣本在其特徵空間中畫出來後,就可以瞭解到數據的分佈了。
通過觀察數據分佈是可以發現一些規律的,比如下圖的是機器學習中著名的手寫識別體數據集mnist(手寫的0到9十個數字的圖片)的數據經過處理後的可視化效果。
是不是有發現相同數字的數據都分佈得比較近?其實不難理解,兩個數據樣本在特徵空間中的距離越近,就說明它們越像。
我們不妨再微微展開一下,話說我的好友王建國童鞋是個二次元妹紙顏控,在他眼中每一個二次元妹紙都可以被量化爲四個維度的數據樣本:臉萌的程度(0-100)、聲音萌的程度(0-100)、胸大的程度(0-100)、腿長的程度(0-100),所以每個二次元妹紙都是以上四個維度構成特徵空間中的一個點。
聰明的你知道三維以內的空間是可以畫出來的,那如果一個模型裏的數據超過三維,那我們是不是就不能可視化了?
好問題,數據超過三維後的確是不能夠可視化,因爲我們根本就畫不出來的嘛。
但你可能還記得我們之前說過有一類機器學習算法,是可以在保證數據信息損失儘可能小的前提下壓縮數據維度的,所以我們可以通過這類算法先把數據壓到三維以內,再做可視化處理。
有點抽象?那李傑克說具體點,我們把王建國童鞋認識的所有二次元妹子的數據樣本都餵給機器,機器撲哧撲哧研究後,發現臉比較萌的妹紙通常聲音也比較萌,然後就搞出一個新的維度來代替了臉萌程度和聲音萌程度兩個維度。所以我們這些二次元妹紙的數據就被壓成了三個維度的數據,這個時候我們就可以通過可視化來看數據分佈了。
另外,我們還可以通過matplotlib來畫出訓練過程中一些數據的變化,比如下圖這個最簡單的線性迴歸訓練擬合的過程:
matplotlib的基本操作學習成本並不高,基本一到兩天,可以把裏面基礎常用函數模塊搞得差不多懂,建議可以學學。下面這篇文章《matplotlib繪圖可視化知識點整理》,是李傑克覺得基本知識點梳理得還不錯的的,各位同學可做參考。
《matplotlib繪圖可視化知識點整理》閱讀地址:http://t.cn/RqDxDo8
四、一些Python學習的建議
Python有2和3的兩個版本,我最開始用的是Python2,因爲在網上看到的信息都是說有些機器學習的庫不支持Python3,後來發現其實基本上都是支持的,所以我又遷移到Python3,總體上Python2和Python3的區別不大。
但諸如numpy等一些庫已經宣佈停止對Python2的更新,Python的未來大勢也是向Python3遷移,所以建議各位童鞋直接上手Python3。
關於Python安裝,建議大家使用anaconda版本的Python,因爲anaconda有強大的庫和環境管理功能。通常一個庫的安裝會依賴一些相聯的庫,anaconda可以幫你直接把所有相關聯的庫都一步到位安裝了,而不用你自己一個一個手動安裝。相信我,這很重要,至少你不會因爲裝一個庫裝了一兩天還裝不對而暴躁得想砸電腦.....而且大家以後機器學習常用來寫代碼的jupyter和spyder也已經內置在了完全版的anaconda中,會很方便。
anaconda下載地址:http://t.cn/RW92Dcn
請選擇Python3:
李傑克這裏也簡單說下自己學習Python的過程,因爲之前不具備編程基礎,也擔心自己學到半路放棄,所以我特意找了一個比較容易和甚至看起來略low的切入方式。
有一本書叫做《笨辦法學Python》,這本書名副其實,確實很笨......你需要做的就是下一個Python,然後老老實實地跟着把書上的代碼都敲上一遍,偶爾敲煩了,我會去看看《廖雪峯Python教程》。
《廖雪峯Python教程》講得不復雜,比較適合初學者。如果你時間有限,下圖紅框內部分知識可以先不學習,因爲在機器學習領域基本上很少會用到的,當然如果你是個時間充裕又喜歡學習的孩子,那都去學了吧。
《笨辦法學Python》敲上一遍和《廖雪峯Python教程》看上兩三遍後(反正李傑克第一遍是看得比較懵逼),基本上Python的基本語法就沒什麼大問題了,剩下的就是一個熟能生巧的事情了,不斷地去練習,不斷地發現問題,不斷地去百度。
另外,李傑克剛開始學習Python的時候,有人建議我去刷《Python100例》,對熟悉基本知識的應用的確是有幫助,但個人覺得沒有必要全刷,你可以隨機挑二十來個練練手就好了。
《笨辦法學Python》獲取方式:詳見文末。李傑克也提供了PDF電子版給大家,同樣放在了雲盤中。
《廖雪峯Python教程》閱讀地址:http://t.cn/RK0qGu7
《Python100例》閱讀地址:http://t.cn/RfOJSc5
基本語法我們都搞定了後,我們就可以去做一件看起來很酷炫的事情了——爬蟲!
但你可能不知道,Python爬蟲也可以是一個上手快、出活易的東西。
爬蟲也算是跟機器學習有那麼一點關係的;機器學習需要數據,我們可以通過爬蟲爬取一些需要使用到的數據,所以建議還是學一學,以備不時之需。
同時,爬蟲是一個可深可淺的東西,請注意我們的目的用來練手,所以我們只需要學會使用最基礎的requests、beautifulsoup等庫來實現抓取數據的目的即可,暫時不要去折騰什麼多線程、scrapy框架之類的東東。
你應該用不了幾天就可以盡情地去爬小說、爬音頻、爬評論、爬一些不可描述的闊愛的女孩子的圖片......但是答應我,好東西記得要分享好不好?
在李傑克看過的所有爬蟲相關文章裏,知乎上有一個叫「從零開始寫爬蟲」的專欄是最棒最適合入門噠,我把當中的最適合大家的幾篇挑出來了。
這些文章滿足我們需求:
1、只用最簡單的兩三個庫;
2、手牽手一步一步地教學,想不學會都難的那種;
如果你已經具備了Python基礎,按着我分享出來的資料折騰的話,李傑克保證你兩三天可以折騰出一個爬蟲,意不意外,驚不驚喜,刺不刺激,開不開心!
《從零開始寫Python爬蟲》
《 1.1 requests庫的安裝與使用》閱讀地址:http://t.cn/RTuUuf7
《1.2 BS4庫的安裝與使用》閱讀地址:http://t.cn/RTu4PLz
《1.5 爬蟲實踐: 獲取百度貼吧內容》閱讀地址:http://t.cn/RTu4ZbV
《1.7 爬蟲實踐: 排行榜小說批量下載》閱讀地址:http://t.cn/RTu4UHw
《1.8 爬蟲實踐: 電影排行榜和圖片批量下載》閱讀地址:http://t.cn/RTu45gz
3、機器學習數學基礎
對於數學知識,李傑克知道很多童鞋都很關心也很憂慮,我也深深地明白數學知識是機器學習從入門到放棄的重要節點。
李傑克也有朋友一開始就撲哧撲哧各種啃高數線代概率論,幾天後硬是把自己啃絕望了,從此棄坑。
那我這篇文章的目的就是幫你釐清入門機器學習需要的最最最基本的數學知識以及它們在機器學習中可能出現的地方,讓大家不要太糾結數學,可以儘快進入到機器學習的學習中。
需要強調的是,機器學習中數學遠遠不止這些,我也有意爲大家過濾了很多在入門時不需要太關注的知識點,基本上,大家把我下面提到的知識點搞明白得差不多,入門機器學習也算夠了。再之後,我們在機器學習過程中遇到不懂的數學知識點,再倒回去補補即可,這應該是更符合我們這些苦逼工作黨的學習方式。
下面,相關的數學知識點我基本都不會展開講,大家自己去補齊,以後李傑克會考慮做一篇這塊的專題文章。我已經完全腦補出還沒開始學習的你看得一臉懵逼的樣子,一如以前的我......
一、高等數學
1、導數及偏導數,對應機器學習中的梯度,機器學習中學習的參數需要通過梯度下降進行更新;
2、複合函數的鏈式法則,同1一樣,目的也是爲了求出梯度更新參數,但因爲深度學習網絡有多層,所以模型的預測函數是個複合函數,我們需要通過鏈式法則從後往前求出每層參數的梯度,進而更新每層裏的參數,這也就是大名鼎鼎的「反向傳播法」;
3、同時可以去了解下數學中的最優化問題,大概就是目標函數在什麼條件下能夠取到最值的問題,因爲機器學習的問題到最後都是要轉化爲一個損失函數最優化的問題。
二、線性代數
1、標量、向量、矩陣及張量的定義及運算,讓我們再回顧下,在機器的眼裏,萬世間物即可爲矩陣,機器學習的過程其實也就是矩陣計算的過程。這也就是NVIDIA的GPU在近兩年那麼火的原因,因爲GPU在矩陣計算上天然有很大的優勢。
2、範數,對應機器學習中正則項,正則項通常會加在已有的損失函數上用來減少訓練的過擬合問題;
3、常見的距離計算方式:歐式距離、曼哈頓距離、餘弦距離等,我們之前說過數據樣本可以表示爲其特徵空間裏的點,而距離可以用來衡量他們的相似度。
三、概率論
1、條件概率、貝葉斯,基於概率論的分類方法經常會用到;
2、期望與方差,機器學習裏一般都會對數據進行normalized的處理,這個時候很可能會用到期望和方差;
3、協方差,能夠表徵兩個變量的相關性,在PCA降維算法中有用到,變量越相關,我們越可能對他們進行降維處理;
4、常見分佈:0-1分佈、二項分佈、高斯分佈等,高斯分佈很重要,數據normalized跟它有關,參數的初始化特跟它有關;
5、最大似然估計,在推導邏輯迴歸的損失函數時會用到。
四、信息論
這塊東西其實應該不屬於數據知識,沒有太多東西就姑且也放到一塊吧。你暫時只需要去了解下交叉熵的概念即可,大概知道這東西跟分類問題的損失函數有關即可哈。
李傑克溫馨提示:
大家一開始能把這些知識點搞懂是最好,沒搞懂也不要慌,因爲貼心的我給大家推薦的機器學習資源裏都會通常都會用通俗淺顯的方式去做相關推導,即使你沒有搞懂這部分數學知識也不會特別懵逼,當然,用心準備總是最好噠!
4、機器學習算法基礎
我勒個去!你居然堅持看到這裏,真是沒想到呢!快給你自己狠狠地點贊打call吧!
這可能是大家最關心的章節了,也可能是這篇文章最優價值的部分,畢竟李傑克也算是替大家提前嚐了些百草(好在我還沒掛),接下來李傑克會告訴大家比較適合進補的草藥以及較優化的進補順序。
現在有種風氣,但凡說到機器學習入門,大家基本上都在無腦推薦:啊,你要入門機器學習啊?Ng的視頻不錯哇,入門就看它好了!
Ng這個名字大家可能不熟悉,但吳恩達你大抵是聽過的吧,不就是那個前百度的AI負責人麼?
bingo!Ng就是吳恩達哈,不過在機器學習圈子裏大家都喜歡叫他Ng。
其實最開始別人讓我推薦入門資源時,我也會不假思索地推薦Ng的《Machine Learning》,因爲這也是我完整看下來的第一套視頻教程......
但我現在回望自己學習過程中看過的所有視頻、書籍、文檔後,我並不認爲Ng的《Machine Learning》是最適合用來入門的資源!
爲什麼呢?聰明的你一臉好奇。那當然是李傑克我有更友好更容易更無痛的入門資源推薦給你啦!
首先,我們再次界定下需要學習的知識範圍,我知道各位童鞋大概率是對「讓我們感覺AI馬上就要改變世界取代人類」的那一部分知識感興趣,這一塊知識其實是機器學習中深度學習這一分支。
所以, 接下來,我會給大家分享更偏向於深度學習的學習資源,當然傳統機器學習的資源也會涉及到一部分。
李傑克給大家推薦的視頻資源基本上都能到B站上直接觀看,額......我也是對自己居然到B站去學習機器學習這件事情感覺有點有不可思議,但神奇的B站上,的確是有些童鞋在以我不能想象的趣味和毅力去各種搬運機器學習的資源。
另一個推薦大家用B站的原因是,視頻播放速度可以調整,對於部分英文教授的視頻大家可以根據自己的情況適當調節速度,比如說如果你覺得吳恩達語速較慢,可以考慮加加速,如果你覺得李飛飛的博士生JJ語速有點快,那你可以減減速!
還有.....B站視頻沒廣告,講真,比那些開頭給你放90s廣告、中間還有本事給你插個45s廣告的妖豔賤貨是不大一樣的!
額.....你不直到B站是什麼東東?童鞋你去搜下「bilibili」吧。
感覺這波B站要給我廣告費了.......
李傑克覺得學習一個有一定信息量的新知識時,一個不錯的方式是先花不多的時間把這個東西大體上過一遍,不管能看懂多少。
所以,最開始的三份資源的目的,就是讓大家先建立起一個感性認知和知識框架,這一階段過了後我們再利用更詳細的資源進入下一步的學習。
李傑克給大家推薦的第一個學習資源是臺灣李宏毅老師的《一天搞懂深度學習心得》。
《一天搞懂深度學習心得》觀看地址:http://t.cn/RTukvY6
關於機器學習的英文資料比較多,國語的除了臺灣的李宏毅、林軒田老師的課程外就是一票輔導機構在那裏折騰了,從我看過李宏毅的部分視頻來看,他講得的確是非常淺顯易懂,用來入門再合適不過了。
而且這個視頻只有36分鐘,你買不了吃虧,買不了上當,卻能大概瞭解到深度學習裏一些比較重要的概念。
李傑克給大家推薦的第二個學習資源是共計20集的視頻教程《DeepLearning.TV》。
《DeepLearning.TV》視頻觀看地址:http://t.cn/RTuDdSQ
你心裏可能沒忍住冒了句mmp:李傑克,你推薦個鬼?單單是建立感性認知和知識框架,你TM就要我去看一部連續劇長度的視頻啊!
額....童鞋們,不要急,且聽李傑克爲你慢慢道來。
《DeepLearning.TV》雖然有20集的長度,但每集只有3到4分鐘。
這套視頻基本覆蓋了深度學習裏的最基本知識,李傑克個人的學習體驗是即使看得一臉懵逼,也絲毫不影響自己biubiu地看完一集換下一集時獲得的成就感!
你再想一想?一個半小時也就是兩局吃雞的時間、四局農藥的時間,一個半小時你陪不了妹紙看一部電影(前提你懂的.....),約不了基友吃一頓火鍋。但是......你去把這組視頻看了,以後去跟別人談笑風生的時候吹牛逼的底氣都要足很多了對不對?
兩套視頻刷完後,李傑克還給你準備了一份300頁PPT的大禮包——李宏毅老師的《深度學習介紹-李宏毅》,這算是我見過最全面最清晰的PPT,你可以花上一些時間自己去啃一遍。
《深度學習介紹-李宏毅》PPT下載地址:詳見文末
大家經過以上三份資源的折騰後,應該也大概知道深度學習是個什麼東東了,接下來,李傑克再給大家推薦一些同樣優質的資源,大家可以進一步學習更深一點的東西。
接下來我們終於要開始接觸Ng的《Machine Learning》了。其實在很多機器學習大拿眼中,Ng最大成就不是在學術上,而是作爲AI佈道者讓更多人知道了機器學習,他也是目前和工業界互動得最好的AI科學家,最近不是又剛成立了個landing.ai要推動企業轉型麼?
《Machine Learning》視頻觀看地址:http://t.cn/RYpskDe
大家需要注意的一點是,《Machine Learning》講的更多的還是傳統機器學習,深度學習知識作爲其中很小的部分一帶而過,有多麼少,李傑克沒記錯的話大概也就是100多章節裏花了兩三個章節說講了下神經網絡吧。
你要是問李傑克資次不資次你通過《Machine Learning》學習傳統機器學習的算法,我當然是資次的,Ng講課講得確實是一流,聽課體驗很棒!
李傑克的建議是,大家可以通過《Machine Learning》去學習機器學習中的基礎知識,我拎些重要的出來:損失函數、梯度下降、線性迴歸、邏輯迴歸、SVM、反向傳播法、正則化、KNN、K-Means、PCA,大家可以優先重點搞懂這些東西,你進入到深度的知識儲備算是基本夠了。
當然時間充裕的情況下李傑克建議大家把所有章節都好好學習下,《Machine Learning》絕對是你可以看上幾遍的課程,李傑克也打算等稍微沒那麼忙了再去重溫一遍呢。
另外,《Machine Learning》是通過一個類似Matlab的軟件Octave來教學,時間有限的情況下可以考慮不學,因爲到目前爲止李傑克就沒有在第二個地方見到過這個軟件的使用,大家學了估計也很難用上.......
《Machine Learning》有兩版,一版是斯坦福教室裏錄製的版本,一版是Ng後來錄製的版本,李傑克這裏給大家推薦的是後者,相信我,前者直接上手真的可能會看哭的,別問我怎麼知道......
如果非常簡要地把深度學習概括爲兩個方向,那就是圖像處理和語音處理,看過我前一篇文章的童鞋會知道兩者分別主要對應的是卷積神經網絡和遞歸神經網絡的應用。
李傑克雖然也對遞歸神經網絡有過接觸,自己也通過遞歸神經網絡寫過一個能夠寫古詩的AI,但確實沒有系統學習過什麼資源,本着no experience no bb的原則,遞歸神經網絡方面的資源暫不做推薦。
說到圖像處理領域,有些童鞋可能已經聽聞過李飛飛的大名,妥妥的計算機視覺領域的大牛,接下來給大家推薦的學習資源也就是由李飛飛和她的兩位博士生Justin和Serena教授的《Stanford CS231N 2017》。
額......話說李飛飛在第一節課出現了一會後就人間蒸發了,但並不影響我們安靜地坐下來欣賞Serena小姐姐的美顏。
講真,第一次聽這個華裔的小姐姐說話的時候,李傑克還是被驚豔到了,她說話的感覺簡直就是Ivanka大公主的翻版。
一下沒忍住,給小姐姐加了個美顏和濾鏡.......
《Stanford CS231N 2017》觀看地址:http://t.cn/RTueAct
那個啥,我猜你肯定是點開了圖,並且還放大了來看......
當然,有些童鞋可能會說,李傑克你推薦的都是些英語視頻,我的英語水平去看這些視頻可能會有些吃力怎麼辦?
這當然不是問題啦!別忘了李傑克可是做過產品經理的哇,怎麼可能考慮不到這種需求呢?對於英語一臉懵逼,不要慌,李傑克仍然有不錯的資源推薦給你——李宏毅老師的《機器學習》和《深度學習》。
《李宏毅機器學習2017》觀看地址:http://t.cn/RpO3VJC
《李宏毅深度學習2017》觀看地址:http://t.cn/RpO3VJK
如果你英語能力還能支撐你看英文視頻的話,李傑克當然建議你優先看推薦的英文資源!
有童鞋也許會問,李傑克你給我們推薦的都是視頻,有沒有什麼書要推薦哇?
講真,網上推薦的那些大家都認爲是經典的書李傑克基本都買了紙質版,但其實並沒有看掉多少。李傑克還是跟大家說一下自己或多或少讀過的一些書,畢竟也都是些被別人列爲經典的書,僅供參考。
首先要說的是周志華的《機器學習》,江湖人稱西瓜書,因爲它的封面是個大西瓜.....周志華算是國內機器學習的權威了,李傑克粗粗看了一兩個章節後就果斷棄坑,選擇了Ng的視頻來學習入門,因爲我感覺自己看這部書效率並沒有看Ng的《Machine Learning》高。
李傑克還看過Peter Harrington的《機器學習實戰》,其核心是教你用python來實現機器學習中的算法,我看了一半多一些的時候也棄坑了,一方面是自己漸漸明確自己的興趣所在是深度學習,另一方面是我接觸到了Tensorflow等深度學習框架,啦啦啦......從此可以開心地當一個調包俠了!
李傑克目前還在看的是Ian Goodfellow等一票人合著的《Deep Learning》,Ian Goodfellow就是那個搞出了對抗式生成網絡(類似於左右手互搏術的東西)的傢伙,大概率李傑克不會棄坑,畢竟這也是本被稱之爲深度學習聖經的書。
我的建議是入門階段可以不用購買書籍,除非你跟我一樣頸椎不大好需要買個七八本書來墊墊電腦......
說正經的,不用買書是因爲我把這些被大家被奉爲機器學習經典的書籍(PDF版,包含上述三本)都打包放在了雲盤裏,大家直接去下載就好了。
畢竟大家出門在外養家餬口都不容易,能省一點算一點了,而且萬一你的頸椎比較爭氣一直都還比較好那你買的書不就一直派不上用場了麼對不對?
最後,無比貼心的李傑克還給大家準備了兩個可以輔助大家學習和理解deep learning的工具。對你來說絕對是有用還好玩的東東,一般人我還不告訴他的呢(傲嬌臉)!
一個是TensorFlow出的網頁工具playground,其實就是遊樂場,我們可以去玩一玩,相信對大家學習深度學習一定會有些幫助的。
playground提供了幾種簡單類型的data,你可以去調節網絡結構、學習率、激活函數、正則項等參數,你可以非常直觀地看到每個神經元和相關輸出的變化,體會到簡化的深度學習模型調參的過程。
下面這個其實是張動圖,來,用心感受下......
tensorflow playground使用網址:http://t.cn/RqJTH47
另一個工具是ConvNetJS,它把一些經典數據集(如Mnist和Cifar-10)每層網絡的輸出可視化出來,對你去理解不同網絡做了什麼事情有大大的幫助滴!
ConvNetJS使用網址:http://t.cn/8kFEqvU
工具介紹完了,那李傑克的問題也來了:
請各位童鞋摸胸自問,李傑克推薦的工具有沒有超級貼心!
5、深度學習框架基礎
我的天啦,你居然還在看?旁友,你不用工作的麼?你們公司還差不差人啊,會打dota玩農藥的那種?
不開玩笑,講真,我知道你一路看起來不容易,畢竟李傑克也是花了兩個禮拜工作之餘的時間寫的,還是水分比較少容易消化不良的那種.....
所以,努力的你晚上一定要去吃頓好的犒勞下自己纔對得起自己嘛!
什麼?你晚飯吃過了?
晚飯吃過了還可以再吃頓宵夜嘛,反正不吃你也是瘦不下去的對不對。
我們再次回到正題哈童鞋們(嚴肅臉),現在來說說機器學習框架的事情,同樣的,這裏我們專指深度學習框架。講真,我寫得有點累了,就放張cs231課程裏的圖吧,大家自己看看這些框架與大學和企業的關係。
不同框架間的比較見下圖,李傑克暫時也不打算展開說:
李傑克嘗試過Tensorflow、Mxnet和Keras三種框架,以使用Tensorflow爲主,其他框架暫時沒怎麼接觸。
今天重點要跟大家說的Tensorflow這個框架,Tensorflow背靠Google大樹,是目前最火的框架,如果你想做一名AI工程師,那學Tensorflow一定是最好的選擇,類似於一招鮮吃天下的意思。
如果你是產品經理,並不想花太多時間在框架上,但又想自己去實現一個神經網絡模型的話,那李傑克建議去學習Keras。
Keras基於Tensorflow又進行一層封裝,當然也有基於Theano版本的,因爲高度封裝,使用起來異常簡單,簡單到什麼程度呢?
你只需要十來行代碼就能搞出來一個簡單神經網絡模型,但與此對應的是靈活度並不高,但對於產品經理一類的童鞋來說已經妥妥地夠用了,再貼一下我之前寫過的一個模型代碼給大家看看有多簡單:
關於框架的學習,李傑克同樣有一些不錯的視頻資源推薦給大家,大家可以通過看視頻入門,但之後實踐過程中碰到問題更多的是需要去查看文檔去解決問題哈。
對於Tensorflow,推薦大家看的第一個資源是視頻《不用博士學位玩轉Tensorflow深度學習》。
這個視頻應該是Google雲大會上的一個演講,全程約兩個小時,估計下面也坐了很多小白,所以講得還是蠻容易接受的。
視屏中的小哥基本上是全程手把手地帶你用Tensorflow分別搭建一個CNN模型(卷積神經網絡)和RNN模型(遞歸神經網絡),基本上看完你也算是有點入門了。
《不用博士學位玩轉Tensorflow深度學習》觀看地址:http://t.cn/RTuemTK
另外,我的雲盤裏還有一份《三天速成Tensorflow PPT-香港科技大學》的PPT,講得也是非常簡明易懂,估計你花費大半天時間就可以過完了,也是一份非常好的入門資料,大家可以自行去下載學習。
《三天速成Tensorflow PPT-香港科技大學》下載地址:詳見文末
網上還有一個叫莫煩的童鞋做的《Tensorflow教程》視頻教程不錯,每集長度也就幾分鐘,但相關基本深度學習的知識和Tensorflow實現都講到了,可以說是非常棒,用來入門是妥妥的不錯的!
莫煩《Tensorflow教程》觀看地址:http://t.cn/RTuDxFT
最後一個很棒的資源是《 Deep Learning With Tensorflow》,其實裏面Tensorflow的介紹得並不多,更多的是用簡明的方式把Deep Learning裏重要的知識都給你過了一遍,全長也就一個小時左右,用你可能玩不了一局吃雞的時間去再次鞏固下知識還是不錯的呢!
《 Deep Learning With Tensorflow》觀看地址:http://t.cn/RTuDcjC
至於keras,它比較簡單啦,產品經理童鞋可以學完深度學習基本知識後,直接上手下面這個視頻,給大家推薦的是莫煩童鞋的《Keras快速搭建神經網絡》,教程視頻約兩個小時,一部電影的時間就可以把它消滅掉,有沒有很開心!
《 Keras快速搭建神經網絡》觀看地址:http://t.cn/RTuDLKD
一路下來,python我們提到了,數學和算法也說到了,深度學習框架我們也說到了,李傑克你TM該結束這篇文章了吧?
各位童鞋稍安勿躁,真的是最後一點點東西了,我不騙你的......因爲我也快把自己寫得快崩潰了.....
我們都知道深度學習可能會用到比較大的數據,而CPU是很難帶動大數據的訓練的,GPU這個大殺器就不一樣了,它會讓訓練的速度提升很多,所以,我們往往願意選擇GPU來訓練模型。
但是,我們小白哪來的GPU啊?
當然我們可以去買,但性能還不錯的GPU的價格可是一點都不比我們用的筆記本便宜喲......
但你也不要慌,作爲前產品經理的李傑克顯然也考慮到了這一點,且聽我告訴你解決方案。
世界上有一種神奇的服務叫......不好意思,不是你所想的大寶劍......而是雲服務。
我們不想買GPU,但我們可以去租人家的的GPU來用嘛,其中Amazon 的AWS是個不錯的選擇。
我們需要訓練的時候去臨時租用它就好了,使用期間一個入門級GPU競價實例也就是0.2刀每小時,這個性價比自然是棒棒噠!不過最近競價示例似乎有時候會連不上,這時可以考慮用普通GPU實例,不過價格就需要0.9刀每小時了。
具體怎麼使用AWS李傑克不展開講了,提供一篇說的還算詳細的攻略文章《在AWS上配置深度學習主機》給各位童鞋參考,以備大家不時之需。
《在AWS上配置深度學習主機》閱讀地址:http://t.cn/RxdOFOb
尾聲
我的天吶,終於寫完了啦!
講真,李傑克以前屬於那種學習知識過後很少會再把知識寫出來的人,因爲從功利的角度來說,去重複已經掌握的東西對自己並沒有太大幫助。
同時,李傑克也是一個有點處女座性格的人,總是希望能夠呈現給大家儘可能有價值有意思的東西,所以經常覺得自己沒寫好,然後重新寫,寫的過程也會比較糾結和費時。
但是,李傑克還是願意把這件事情堅持下去,因爲李傑克覺得爲大家寫東西是有意義的,跟大家交流探討是有意思的,與大家一起共同進步是開心的。
如果這篇文章能夠對大家有那麼一些些幫助,李傑克會覺得很有成就感!畢竟我也是耗費了不少心血和時間的東西也有了些反饋,你敢信,我給部分文字標粗標色就花了一個多小時(生無所戀臉).....希望大家多多支持!
額.....突然想起我好像把最重要的事情忘了:各位美貌與智慧並重、英雄與狹義的化身的童鞋們,如果你覺得本文對你還有些許幫助的話,歡迎通過後文的二維碼關注李傑克的公衆號「小白AI之路(AI-Learning)」(請再次腦補我無比大寫的諂媚臉)!
哦不,李傑克差點忘了之前醞釀的小心機,溫馨提示:
如果童鞋你想要獲得李傑克精心收集和整理並驗證有用的以上各種學習資料,請轉發此文章到朋友圈後再截圖發送到公衆號「小白AI之路」後臺,李傑克會在一天之內給到你提供下載地址和密碼。
注:不是發截圖給本公衆號,而是發給公衆號「小白AI之路(AI-Learning)」——對於轉發支持的童鞋,李傑克也將提供自己的私人微信號,如果你有需要,我們可以做更多的交流和探討哈!
感謝@黃釗hanniman童鞋 對本文提供的寶貴建議。
注1:一個不懂編程、非計算機專業、本科學歷、大學學渣的前互聯網產品經理的AI之路,李傑克希望能用盡可能簡單、有趣、無痛的方式跟大家分享和探討AI知識,將會陸續更新更多的乾貨,快快關注「小白AI之路」吧!歡迎轉載文章,請與李傑克聯繫!歡迎點擊閱讀我的上一篇文章《轉型AI產品經理,原來不需要學那麼深的算法和數學模型》。最近有不少童鞋給李傑克留言,說自己對機器學習很感興趣卻無從下手,想知道我的學習路徑,也希望我可以分享一些適合入門的學習資源給到大家。
留言
張貼留言