本文篇幅較長,干貨較多,建議收藏慢慢看。
談到人工智能(AI)算法,常見不外乎有兩方面信息:鋪天蓋地各種媒體提到的高薪就業【販賣課程】、知乎上熱門的算法崗“水深火熱 灰飛煙滅”的梗【販賣焦慮】。
其實,這兩方面都是存在的,但都很片面,這里不加贅述。客觀地說,數字化、智能化是人類社會發展的趨勢,而當下人工智能無疑是一大熱門,那是藍海還是火海?我們回到老道理—水的深度,只有你自己去試試水才知道。
當你對上面情況有了初步的了解并想試試水,需要面對的問題是:AI入門容易嗎?
答案其實是否定的,難!AI領域需要鉆研算法原理、大量復雜的公式及符號、無所適從的項目都是勸退一時熱度初學者的原因。但這些原因對于一個初學者,根本上是面對這樣困難的學科卻缺乏合適方法導致的。反問一個玩笑,程序員怎么會沒有方法呢?隨手就定義一個Python方法(funtion)
def funtion():
return 'haha,往下繼續看'
回到筆者,一名普普通通的程序員,當初也是誤打誤撞學習Python入門到機器學習、深度學習,至今有4個年頭,踩了很多坑,下文說到的學習方法、路徑也就填坑試錯的經驗罷了。
本文面向于AI領域了解不深、有些(高中+)基礎知識且有自學興趣的同學,以下為正文。
一、學習方法
說到學習方法,其實我們談到的人工智能之所以智能,核心在于有學習能力。而人工智能學習過程有兩個要素:
1、學習目標是什么(--什么目標函數)?
2、如何達到目標(--什么算法)?
人工智能領域很多思路和人類學習是很共恰的!可以發現這兩個問題也是我們學習這門學科需要回答的。
- 學習目標是什么?
我們的學習目標比較清楚,就是入門人工智能領域,能完成一個AI相關的任務,或者找到相關的工作。
- 如何達到目標?
1、入門人工智能是個寬泛的目標,因此還得 將目標拆分成階段性目標才易于執行,可以對應到下面--學習路線及建議資源的各個節點。
2、學習人工智能這門學科,需要提醒的是這本來就是件難事,所以實在搞不懂的知識可以放在后面補下,不要奢求一步到位(當然天賦了得另說),不要想一下子成為專家,可以從:懂得調用現成的算法模塊(scikit-learn、tensorflow)做項目 -進階-》懂得算法原理進一步精用、調優算法 -進階-》領域專家。保持學習,循序漸進才是啃硬骨頭的姿勢。
3、啃硬骨頭過程無疑是艱難的,所以慢慢地培養興趣和及時的結果反饋是很重要的。這方面上,邊學邊敲代碼是必須的,結合代碼實踐學習效率會比較高,還可以及時看到學習成果,就算是啃硬骨頭看到牙印越來越深,不也是成果,也比較不容易放棄!
二、學習路線及建議資源
本學習路線的基本的框架是:
寬泛了解領域,建立一定興趣 --》基礎知識、工具準備 --》機器學習|深度學習的入門課程、書籍及項目實踐 --》(面試準備)--》自行擴展:工作中實戰學習 或 學術界特定領域鉆研,經典算法原理、項目實踐
2.1 了解領域,建立一定興趣
首先對人工智能領域有個寬泛的了解,有自己的全局性的認識,產生一些判斷,才不會人云亦云地因為“薪資高、壓力大等” 去做出選擇或者放棄。你做的準備調研越多,確認方向后越不容易放棄。
人工智能(Artificial Intelligence,AI)之研究目的是通過探索智慧的實質,擴展人類智能——促使智能主體會聽(語音識別、機器翻譯等)、會看(圖像識別、文字識別等)、會說(語音合成、人機對話等)、會思考(人機對弈、專家系統等)、會學習(知識表示,機器學習等)、會行動(機器人、自動駕駛汽車等)。一個經典的AI定義是:“ 智能主體可以理解數據及從中學習,并利用知識實現特定目標和任務的能力。
從技術層面來看(如下圖),現在所說的人工智能技術基本上就是機器學習方面的(其他方面的如專家系統、知識庫等技術較為沒落)。關于人工智能的發展歷程,可以看看我之前一篇文章人工智能簡史。
機器學習是指非顯式的計算機程序可以從數據中學習,以此提高處理任務的水平,機器學習常見的任務有分類任務(如通過邏輯回歸模型判斷郵件是否為垃圾郵件類)、回歸預測任務(線性回歸模型預測房價)等等。深度學習是機器學習的一個子方向,是當下的熱門,它通過搭建深層的神經網絡模型以處理任務。
從應用領域上看,人工智能在眾多的應用領域上面都有一定的發展,有語言識別、自然語言處理、圖像識別、數據挖掘、推薦系統、智能風控、機器人等方面。值得注意的的是,不同應用領域上,從技術層面是比較一致,但結合到實際應用場景,所需要的業務知識、算法、工程上面的要求,差別還是相當大的。回到應用領域的選擇,可以結合技術現在的發展情況、自己的興趣領域再做判斷。
2.2 基礎知識、工具準備
學習人工智能需要先掌握編程、數學方面的基本知識:AI算法工程師首先是一名程序員,掌握編程實現方法才不將容易論知識束之高閣。而數學是人工智能理論的奠基,是必不可少的。
編程語言方面
編程語言之于程序員, 如寶劍之于俠士。編程語言就是程序員改變、創造數字虛擬世界的交互工具。
先簡單介紹信息技術(IT)行業的情況,IT領域廣泛按職能可以分為前端、后端、人工智能、嵌入式開發、游戲開發、運維、測試、網絡安全等方面。前端常用技術棧為js\css\html,后端常用技術棧有Java\go\C++\php\Python等。
在人工智能領域,Python使用是比較廣泛的,當然其他的語言也是可行的,如Java、C++、R語言等。語言也就工具,選擇個適合的就好。結合自己的歷程及語言的特性,AI小白還是建議可以從Python學起,理由如下:
1、因為其簡單的語法及靈活的使用方法,Python很適合零基礎入門;
2、Python有豐富的機器學習庫,極大方便機器學習的開發;
3、Python在機器學習領域有較高的使用率,意味著社區龐大,應用范圍廣,市場上(具體可到招聘軟件了解下)有較多的工作機會;
- 學習編程語言的兩點建議:
1、多敲代碼:只看書、視頻而不敲代碼是初學者的一個通病。要記住的是“紙上得來終覺淺”,程序員是一個工匠活,需要動手敲代碼實踐,熟能生巧。
2、 多谷歌: 互聯網的信息無所不包的,學會利用互聯網自己解決問題是一項基本功。不懂可以谷歌,業界一句有趣的話:程序員是面向谷歌/stackoverflow編程的;
- 建議資源:
以下資源只是一些個人的一些偏好推薦,挑一兩種適合自己的資源學習就可以,不用全部都學浪費精力。如果都覺得不合適,按照自己的學習方式即可。
1、【Python入門書】首推Python經典書《Python編程從入門到實踐.pdf(https://github.com/aialgorithm/AiPy/》,知識點通俗易懂,而且結合了項目實踐,很適合初學者。注:Python在爬蟲、web開發、游戲開發等方向也有應用,推薦本書主要學習下Python語法,而書后面的項目實戰像有游戲開發\web開發,和機器學習關系不大,可以略過\自行了解下就好。
2、【Python入門教程】廖雪峰的Python在線學習教程,一個很大的特色是可以直接在線運行Python代碼。
3、【Python入門視頻】如果看書過于枯燥,可以結合視頻學習,Python入門學習報培訓班學習有點浪費,可以直接網易云課堂、Bilibili搜索相關的Python學習視頻。我之前是看小甲魚零基礎入門學習Python課程,邊看邊敲敲代碼,覺得還不錯。
4、【Python機器學習庫】學習完Python語法,再學習了解下Python上現成的機器學習庫(模塊包),了解基本功能學會調用它們(熟練掌握它們,主要還是要結合后面項目邊學邊實踐才比較有效的。),一個初級的算法工程師(調包俠)基本就練成了。重要的機器學習庫有:
pandas 數據分析、numpy 數值計算庫、matplotlib可視化工具,推薦《利用pandas數據分析》有涵蓋了這幾部分內容。
scikit-learn 包含機器學習建模工具及算法,可以了解下官方文檔https://scikit-learn.org.cn。
用于搭建深度學習的神經網絡模型的庫有:keras、tensorflow、Pytorch等,其中keras更為簡單易用,可以參考Keras官方文檔https://keras.io/zh,以及Keras之父寫的《Python深度學習》
5、【Python進階書】《Python Cookbook》、《流暢的Python》 這兩本內容難度有提升,適合Python語法的進階。
數學方面
1、數學無疑是重要的,有良好的數學基礎對于算法原理的理解及進階至關重要。但這一點對于入門的初學者反而影響沒那么大,對于初學者如果數學基礎比較差,有個思路是先補點“數學的最小必要知識”:如線性代數的矩陣運算;高等數學的梯度求導;概率的條件、后驗概率及貝葉斯定理等等。這樣可以應付大部分算法的理解。
2、如果覺得數學有難度,數學公式、知識的理解建議不用硬啃,不懂時再反查,遇到再回來補效果會好很多。(如果你的數學沒有問題,忽略這些,直接復習大學教材補下基礎)
- 建議資源
【數學基礎知識】推薦黃博翻譯整理的機器學習相關的數學基礎知識,內容簡要,還是挺不錯的。
工具準備
對于程序員,好的工具就是生產力!
1、 搜索引擎:學習開發的過程,很經常搜索問題、解決bug。搜索引擎的內容質量 首推谷歌,其次bing,再者才是百度、知乎等。谷歌如果使用不了,試試谷歌助手、科學翻墻、谷歌鏡像網站,網上有教程自行了解。
2、翻譯:AI領域最新的研究成果、論文基本都是英文的,而如果英文閱讀比較一般,可以備個有道詞典、wps文檔翻譯。
3、Python編輯器:首推JupyterLab,JupyterLab很方便數據分析操作,可以單元格中逐步運行代碼驗證結果。建議直接下載安裝個anaconda,里面都有。
2.3 機器學習\深度學習入門
深度學習是機器學習的子分支,與傳統機器學習有些差異的地方(如特征生成、模型定義方面), 因此兩者可以分開學習。都學習的話,建議可以先學機器學習再學深度學習。
機器學習\深度學習的內容可以分為兩部分,一部分是算法原理的理解,如神經網絡模型正向反向傳播原理、SVM原理、GBDT原理等等,這部分內容的理解相對較難,學習周期較長。另一部分是算法工程實現的知識,如現實問題的理解、如何清洗數據、生成特征、選擇模型及評估,具體可以看我之前的文章《一文全覽機器學習建模流程(Python代碼)》,這部分是比較通用的一套操作流程,學習周期比較短且容易看到實際成果。
對于初學者的建議,可以“先知其然,再知其所以然”,跟著課程\書學習,明白大致的算法原理及工程上是如何做的。再用簡單的算法整個流程走一遍,結合實踐過程中不斷的比較和嘗試各種算法,更容易搞透算法原理,而且這樣可以避免云里霧里地學習各種算法原理。
以下相關資源推薦,同樣找一兩種合適的資源學習即可。
- 建議資源
1、【機器學習視頻】《吳恩達的機器學習課程》github.com/aialgorithm/AiPy/,很經典的入門課程,附筆記解析及代碼。
2、【機器學習書】[《machine learning yearning_吳恩達》 ] (https://github.com/aialgorithm/AiPy/tree/master/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0) 是吳恩達歷時兩年,根據自己多年實踐經驗整理出來的一本機器學習、深度學習實踐經驗寶典。
3、【機器學習書】《統計學習方法》 李航老師經典的機器學習書,書中的算法原理講解還是比較細的。鏈接的資源有附上書中算法的代碼實現、課件及第一版的書。(現在已經有第二版的書,可以買一本慢慢看)
4、【機器學習書】《機器學習(西瓜書)_周志華》 機器學習經典教材,難度適合進階,里面的一些概念公式還是要有一定基礎的,不太適合入門自學。(可搭配datawhale的南瓜書本理解難點公式)
5、【深度學習視頻】《吳恩達的深度學習課程》github.com/aialgorithm/AiPy/應該是國內大多數人的入門課程,附筆記解析及代碼。
6、【深度學習書】《深度學習(花書)》 AI大佬Ian Goodfellow的深度學習領域經典著作,知識點很系統全面,但還是需要一定基礎才好看懂,初學者可以結合視頻、花書筆記輔助理解。
7、【深度學習書】《python深度學習》keras之父的經典著作,通俗易懂適合入門。
8、【深度學習書】《深度學習實戰》 這本書的結果和《花書》有些相似之處,原理講解比較通俗,還有詳細的代碼實踐。不足的地方是代碼是用Python2寫的有些過時。
9、【深度學習書】《動手學深度學習》 李沐大佬合著的深度學習入門教程及代碼實踐。
10、【深度學習論文】深度學習綜述 :2015年Nature上的論文,由深度學習界的三巨頭所寫,讀這一篇論文就可以概覽深度學習了。這篇論文有同名的中文翻譯。
注:要全面了解一個技術領域,找找這個領域的綜述論文是一個超實用的技巧。
11、【實戰項目】 推薦實戰下國外的Kaggle、國內天池等競賽項目。從頭到尾地參加一兩個機器學習項目,并取得不錯的分數,基本上就差不多了。安利個Datawhale小隊整理的國內外經典競賽的項目方案及代碼實現 https://github.com/datawhalechina/competition-baseline
2.4 工作面試準備
對于大部分入門的初學者,要真正算入門人工智能領域,找一份相關的工作是必不可少的,當你有(哪怕一點點)相關的工作經驗后,這個領域工作面試就比較好混得開了。
很多初學者可能有個困惑,學習到什么樣程度、多久才能找到相關的工作機會呢?這個不好回答,和學習準備的程度、市場招聘情況、運氣等有關,只能說覺得學得差不多了就可以找面試機會試下水(以個人學習為例,學習了Python+吳恩達機器學習\深度學習視頻+幾個書本\數據競賽項目+刷面試題,前前后后差不多用了半年。)
準備面試找工作,首先要了解下市場情況及招聘要求,通常無非要求有相關的論文著作、工作經歷、項目經驗、對算法的理解。撇開第一、二項的論文、工作經歷不談。對于初學者,面試的主要比重是項目經驗及算法的理解。
項目經驗就結合項目實戰的做法和理解(這些最好有博客記錄)。而算法原理除了平時的積累,刷下面試題是很關鍵的,畢竟面試內容與實際工作內容很多時候像是“造火箭與擰螺絲的關系”。
- 推薦些經典的面試題庫
1、 基礎數據結構與算法,LeetCode算法題庫:https://github.com/apachecn/Interview/tree/master/docs/Algorithm;
2、Python基礎算法實現: https://github.com/TheAlgorithms/Python;
3、Python面試題 https://github.com/taizilongxu/interview_python
4、Datawhale小隊整理的面試寶典,內容包括基礎算法數據結構、機器學習,CV,NLP,推薦,開發等。https://github.com/datawhalechina/daily-interview
5、機器學習面試題,這倉庫后面就沒有更新了,有些內容可能有點過時https://github.com/DarLiner/Algorithm_Interview_Notes-Chinese
6、面試技巧:推薦閱讀程序員面試完全指南
總結
學習到這里,可以說是踏入AI領域的門了。俗話說“師傅領進門,修行在個人”,本文僅能幫助有興趣的同學簡單入門這個領域,而要在這領域成為專家是很困難的,是需要長期的努力積累的。再者,IT行業技術更新迭代快,保持學習才是王道。
最后,希望這篇文章可以幫助到大家,共同學習進步吧。
碼字不易,如覺得本文有幫助,您的關注點贊是最大的支持!
文章首發于算法進階,公眾號閱讀原文可訪問--學習資源推薦--