普通程序員如何正確學習人工智能方向的知識?
“互聯(lián)網(wǎng)+”已經(jīng)發(fā)展的差不多了,應(yīng)有盡有,空間不大,下個浪潮會不會是“AI+”?那么作為一個普通程序員,如何提前向人工智能(AI)靠攏?
知乎用戶回答知乎用戶
1556人贊同了該回答
說說我學習深度學習的經(jīng)歷吧,從開始學習到現(xiàn)在大概有4個月,只能算新手,剛好可以回答新手問題。
先說編程:自認會用C++, 熟悉Python
英語水平:中等,能很快讀懂英文科學文獻
最開始對人工智能/深度學習感興趣是因為想用它試一試自然語言生成,后來想到一個物理方面的題目,預計可以用深度學習技術(shù)解決,開始接觸深度神經(jīng)網(wǎng)絡(luò)。記錄一下學習歷程,
1. 安裝 Tensorflow(google 開源的深度學習程序), 嘗試里面最簡單的例子MNIST 獲得激勵。
2. 之后嘗試通過讀書(看視頻)理解最簡單的全連接神經(jīng)網(wǎng)絡(luò)
先搜索找到答案:為什么要Go Deep?
(1)神經(jīng)網(wǎng)絡(luò)中輸入層,隱藏層,輸出層之間矩陣乘積的維度變化。
(2)Weight, Bias 這些是什么,改變它們有什么結(jié)果。
(3)激勵函數(shù)是什么,有什么作用,有哪些常用的激勵函數(shù)
(4)誤差如何向后傳遞,網(wǎng)絡(luò)如何通過最小化誤差函數(shù)更新,有哪些常用的優(yōu)化方法
以上這些在一本交互式電子書中可以找到答案:
Neural networks and deep learning
(5) 如何對權(quán)重正規(guī)化,L1, L2, BatchNormalization, (這些在以后真正應(yīng)用的時候再看)
Deep Learning chapter 7 for L1, L2 regulation.
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift (2015) original paper for BN
why does batch normalization help? Quora
Note for BN in Chinese
Implementing Batch Normalization in Tensorflow from R2RT
Layer normalization (2016) Replace Batch Normalization in RNN
Why Does Unsupervised Pre-training Help Deep Learning?
Summary and discussion on pre training
3. 選擇一種比較比較底層的神經(jīng)網(wǎng)絡(luò)開源庫,tensorflow 或 theano,
(1) 讀官方文檔 https://www.tensorflow.org/versions/r0.11/tutorials/index.html
(2) 看周莫凡的網(wǎng)絡(luò)教程 https://www.youtube.com/user/MorvanZhou
(3) 重復敲代碼,重復實現(xiàn)例子程序
4. 開始理解各種不同神經(jīng)網(wǎng)絡(luò)架構(gòu)所能處理的問題
(1) CNN 圖像識別,圖像處理,語音處理
(2) RNN,LSTM 自然語言理解與生成
(3) 增強學習,玩游戲 :)
5. 嘗試各種開源的有意思的神經(jīng)網(wǎng)絡(luò)項目,新手可以從下面這個列表開始
(1)Andrej Karpathy blog char-rnn, Deep Reinforcement Learning: Pong from Pixels
(2) Neural Style In tensorflow.
6. 如果能**,注冊 *******, ******** 賬號,follow 那些文章中經(jīng)常出現(xiàn)的大牛的名字。他們每天提供很多新動向及最新技術(shù),很多時候有很 Fancy的應(yīng)用。試試從這個大牛follow的人開始follow
https://*******.com/karpathy
當你對這些都很熟悉的時候,開始閱讀艱深的文獻:
1. CNN 的原始文獻
2. RNN 和 LSTM 的原始文獻
3. Reinforcement Learning 的原始文獻
4. Google DeepMind 發(fā)表在 Nature 上的幾篇經(jīng)典
最后推薦一個高級點的庫: Keras Documentation
雖然這個庫還在發(fā)展階段,里面仍有不少bug,但前途不可限量,可以很容易實現(xiàn)你之前讀文章時候見到的那些復雜的構(gòu)架。作為例子,這里有個教程:
Deep learning book in ipython-notebook and Keras Many example code in Keras.
這些學習歷程中遇到的資料都記錄在了我的個人note里,希望大家共勉:
http://web-docs.gsi.de/~lpang/
最后強調(diào)一個最最重要的事情:要有自己的想法,有將這種新技術(shù)用到自己項目中的強烈愿望,從開始就要Coding,不斷嘗試才能不斷進步。
(看了很多其他的回答,在這里想補充一段)
說實話,作為一個其他行業(yè)(物理,工程,化學,醫(yī)學,農(nóng)業(yè),衛(wèi)星地圖識別,網(wǎng)絡(luò)安全領(lǐng)域,社會科學)的普通程序員,在本行業(yè)有比較深的理論和實驗背景,能接觸到海量數(shù)據(jù)(無論是傳感器數(shù)據(jù),互聯(lián)網(wǎng)數(shù)據(jù)還是蒙特卡洛模擬數(shù)據(jù)),想做處一些創(chuàng)新***叉性的工作,這一輪人工智能的風絕對是要跟的。
作為一個計算機專業(yè)的人,可能覺得機器學習,人工智能,深度學習已經(jīng)炒的過熱了。但是對于其他領(lǐng)域,可能大部分人還沒有想到把最基本的機器學習算法如:PCA,SVM,k-means...運用到本行業(yè)積累的大數(shù)據(jù)上, 更不要說最近的深度學習。
作為其他行業(yè)的普通程序員(除了數(shù)學與理論物理),我們不要指望從理論上徹底解決深度學習現(xiàn)存的問題。我們的優(yōu)勢不在這里,我們的優(yōu)勢是計算機專業(yè)的人所沒有的專業(yè)知識,行業(yè)大數(shù)據(jù)。我們需要做的是把機器學習,深度神經(jīng)網(wǎng)絡(luò)當作工具,知道它們能做什么,如何去做。參考Andrew Ng 的機器學習筆記,
Machine Learning - complete course notes
舉幾個簡單的例子:
1. 使用深度學習中生成風格化圖片的技術(shù),制備具有特定功能的抗癌藥物
The cornucopia of meaningful leads: Applying deep adversarial autoencoders for new molecule development in oncology
2. 使用反常探測,尋找網(wǎng)絡(luò)攻擊 Cyber-attacks prediction
3. 對于國家來說,更加聰明的互聯(lián)網(wǎng)關(guān)鍵詞過濾
4. 自動探測衛(wèi)星地圖上道路,建筑,車輛,河流。。。
5. 環(huán)境科學中尋找霧霾與眾多可能因素的非線性關(guān)聯(lián)
我們用卷積神經(jīng)網(wǎng)絡(luò)來區(qū)分量子色動力學相變是crossover還是一階相變。(1年之后回來修改)回答這個問題的時候,文章剛剛寫好,最近文章已經(jīng)在《自然-通訊》Nature Communications 雜志發(fā)表,網(wǎng)上公開鏈接是 An equation-of-state-meter of quantum chromodynamics transition from deep learning , 希望能給堅持在這個方向,做 AI + X 交叉學科應(yīng)用的同學帶來精神上的激勵。
talk: http://starmeetings.physics.ucla.edu/sites/default/files/pang.pdf
編輯于 2021-01-23 13:55:10
子實
有趣的靈魂滿街都是,完美的肉體萬中無一
6449人贊同了該回答
本人碼農(nóng),從六月開始正式接觸機器學習(其實五年前的本科畢設(shè)就是在生物信息領(lǐng)域應(yīng)用神經(jīng)網(wǎng)絡(luò)的項目,但是非常淺薄),深吸一口氣,先要聲明“人之患在好為人師”,我用的步驟只是適合我,下面的內(nèi)容僅供參考。
第一步:復習線性代數(shù)。(學渣的線代忘了好多-_-||)
懶得看書就直接用了著名的——麻省理工公開課:線性代數(shù),深入淺出效果拔群,以后會用到的SVD、希爾伯特空間等都有介紹;
廣告:邊看邊總結(jié)了一套筆記 GitHub - zlotus/notes-linear-algebra: 線性代數(shù)筆記。
第二步:入門機器學習算法。
還是因為比較懶,也就直接用了著名的——斯坦福大學公開課 :機器學習課程,吳恩達教授的老版cs229的視頻,講的非常細(算法的目標->數(shù)學推演->偽代碼)。這套教程唯一的缺點在于沒有介紹最近大火的神經(jīng)網(wǎng)絡(luò),但其實這也算是優(yōu)點,讓我明白了算法都有各自的應(yīng)用領(lǐng)域,并不是所有問題都需要用神經(jīng)網(wǎng)絡(luò)來解決;
多說一點,這個課程里詳細介紹的內(nèi)容有:一般線性模型、高斯系列模型、SVM理論及實現(xiàn)、聚類算法以及EM算法的各種相關(guān)應(yīng)用、PCA/ICA、學習理論、馬爾可夫系列模型。課堂筆記在:CS 229: Machine Learning (Course handouts),同樣非常詳細。
廣告:邊看邊總結(jié)了一套筆記 GitHub - zlotus/notes-LSJU-machine-learning: 機器學習筆記
第三步:嘗試用代碼實現(xiàn)算法。
依然因為比較懶,繼續(xù)直接使用了著名的——機器學習 | Coursera ,還是吳恩達教授的課程,只不過這個是極簡版的cs229,幾乎就是教怎么在matlab里快速實現(xiàn)一個模型(這套教程里有神經(jīng)網(wǎng)絡(luò)基本概念及實現(xiàn))。這套課程的缺點是難度比較低,推導過程非常簡略,但是這也是它的優(yōu)點——讓我專注于把理論轉(zhuǎn)化成代碼。
廣告:作業(yè)參考 GitHub - zlotus/Coursera_Machine_Learning_Exercises: Machine Learning by Andrew Ng from Coursera
第四步:自己實現(xiàn)功能完整的模型——進行中。
還是因為比較懶,搜到了cs231n的課程視頻 CS231n Winter 2016 - YouTube ,李飛飛教授的課,主講還有Andrej Karpathy和Justin Johnson,主要介紹卷積神經(jīng)網(wǎng)絡(luò)在圖像識別/機器視覺領(lǐng)域的應(yīng)用(前面神經(jīng)網(wǎng)絡(luò)的代碼沒寫夠?這門課包你嗨到爆~到處都是從零手寫~)。這門課程的作業(yè)就更貼心了,直接用Jupyter Notebook布置的,可以本地運行并自己檢查錯誤。主要使用Python以及Python系列的科學計算庫(Scipy/Numpy/Matplotlib)。課堂筆記的翻譯可以參考 智能單元 - 知乎專欄,主要由知友杜客翻譯,寫的非常好~
在多說一點,這門課對程序員來說比較走心,因為這個不像上一步中用matlab實現(xiàn)的作業(yè)那樣偏向算法和模型,這門課用Python實現(xiàn)的模型同時注重軟件工程,包括常見的封裝layer的forward/backward、自定義組合layer、如何將layer組成網(wǎng)絡(luò)、如何在網(wǎng)絡(luò)中集成batch-normalization及dropout等功能、如何在復雜模型下做梯度檢查等等;最后一個作業(yè)中還有手動實現(xiàn)RNN及其**LSTM、編寫有助于調(diào)試的CNN可視化功能、Google的DeepDream等等。(做完作業(yè)基本就可以看懂現(xiàn)在流行的各種圖片風格變換程序了,如 cysmith/neural-style-tf)另外,這門課的作業(yè)實現(xiàn)非常推崇computational graph,不知道是不是我的幻覺……要注意的是講師A.K的語速奇快無比,好在YouTube有自動生成解說詞的功能,準確率還不錯,可以當字幕看。
廣告:作業(yè)參考 GitHub - zlotus/cs231n: CS231n Convolutional Neural Networks for Visual Recognition (winter 2016) (我的在作業(yè)的notebook上加了一些推導演算哦~可以用來參考:D)
因為最近手頭有論文要撕,時間比較緊,第四步做完就先告一段落。后面打算做繼續(xù)業(yè)界傳奇Geoffrey Hinton教授的Neural Networks for Machine Learning | Coursera,再看看NLP的課程 Stanford University CS224d: Deep Learning for Natural Language Processing,先把基礎(chǔ)補完,然后在東瞅瞅西逛逛看看有什么好玩的……
PS:一直沒提諸如TensorFlow之類的神器,早就裝了一個(可以直接在conda中為Tensorflow新建一個env,然后再裝上Jupyter、sklearn等常用的庫,把這些在學習和實踐ML時所用到的庫都放在一個環(huán)境下管理,會方便很多),然而一直沒時間學習使用,還是打算先忍著把基礎(chǔ)部分看完,抖M總是喜歡把最好的留在最后一個人偷偷享受2333333(手動奸笑
PS**2:關(guān)于用到的系統(tǒng)性知識,主要有:
線性代數(shù),非常重要,模型計算全靠它~一定要復習扎實,如果平常不用可能忘的比較多;
高數(shù)+概率,這倆只要掌握基礎(chǔ)就行了,比如積分和求導、各種分布、參數(shù)估計等等。(評論中有知友提到概率與數(shù)理統(tǒng)計的重要性,我舉四肢贊成,因為cs229中幾乎所有算法的推演都是從參數(shù)估計及其在概率模型中的意義起手的,參數(shù)的更新規(guī)則具有概率上的可解釋性。對于算法的設(shè)計和改進工作,概統(tǒng)是核心課程,沒有之一。答主這里想要說的是,當拿到現(xiàn)成的算法時,僅需要概率基礎(chǔ)知識就能看懂,然后需要比較多的線代知識才能讓模型高效的跑起來。比如最近做卷積的作業(yè), 我手寫的比作業(yè)里給出的帶各種trick的fast函數(shù)慢幾個數(shù)量級,作業(yè)還安慰我不要在意效率,豈可修!)
需要用到的編程知識也就是Matlab和Numpy了吧,Matlab是可以現(xiàn)學現(xiàn)賣的;至于Python,就看題主想用來做什么了,如果就是用來做機器學習,完全可以一天入門,如果想要做更多好玩的事,一天不行那就兩天。(貼一個Python/Numpy的簡要教程:Python Numpy Tutorial,是cs231n的課堂福利。)
我感覺機器學習的先修就這么點,記得Adobe的馮東大神也說過機器學習簡直是21世界的黑科技——因為理論非常簡單但是效果驚人的好。
====
既然提到好玩的,墻裂推薦 Kaggle: Your Home for Data Science ,引用維基上的介紹:
Kaggle是一個數(shù)據(jù)建模和數(shù)據(jù)分析競賽平臺。企業(yè)和研究者可在其上發(fā)布數(shù)據(jù),統(tǒng)計學者和數(shù)據(jù)挖掘?qū)<铱稍谄渖线M行競賽以產(chǎn)生最好的模型。這一眾包模式依賴于這一事實,即有眾多策略可以用于解決幾乎所有預測建模的問題,而研究者不可能在一開始就了解什么方法對于特定問題是最為有效的。Kaggle的目標則是試圖通過眾包的形式來解決這一難題,進而使數(shù)據(jù)科學成為一場運動。
編輯于 2016/12/5 15:09:11
知乎用戶
1226人贊同了該回答
排名較高的幾個回答有一些問題:1.起點較高,不適合題主所問的普通程序員;2.資源很多,但是沒有主次之分,全部學習的話時間久,難度曲線也高低不平;3.缺乏對AI領(lǐng)域的介紹,AI并不僅僅是機器學習。本人也算是一名普通程序員,也剛轉(zhuǎn)入AI領(lǐng)域,因此結(jié)合自身經(jīng)驗,想回答這個問題。我的回答有以下特色:較為簡單,介紹學習資源不多,但有主次之分。
一. 本文的目的
本文的目的是給出一個簡單的,平滑的,易于實現(xiàn)的學習方法,幫助“普通”程序員踏入AI領(lǐng)域這個門。這里,我對普通程序員的定義是:擁有大學本科知識;平時工作較忙;自己能獲取的數(shù)據(jù)有限。因此,本文更像是一篇 “from the scratch” 的AI入門教程。
二. AI領(lǐng)域的特點
AI,也就是人工智能,并不僅僅包括機器學習。曾經(jīng),符號與邏輯被認為是人工智能實現(xiàn)的關(guān)鍵,而如今則是基于統(tǒng)計的機器學習占據(jù)了主導地位。最近火熱的深度學習正是機器學習中的一個子項。目前可以說,學習AI主要的是學習機器學習。但是,人工智能并不等同于機器學習,這點在進入這個領(lǐng)域時一定要認識清楚。關(guān)于AI領(lǐng)域的發(fā)展歷史介紹推薦看周老師寫的《機器學習簡介》。下面一個問題是:AI的門好跨么?其實很不好跨。我們以機器學習為例。在學習過程中,你會面對大量復雜的公式,在實際項目中會面對數(shù)據(jù)的缺乏,以及艱辛的調(diào)參等。如果僅僅是因為覺得這個方向未來會“火”的話,那么這些困難會容易讓人放棄??紤]到普通程序員的特點,而要學習如此困難的學科,是否就是沒有門路的?答案是否定的。只要制定合適的學習方法即可。
三. 學習方法
學習方法的設(shè)定簡單說就是回答以下幾個問題:我要學的是什么?我怎樣學習?我如何去學習?這三個問題概括說就是:學習目標,學習方針與學習計劃。學習目標比較清楚,就是踏入AI領(lǐng)域這個門。這個目標不大,因此實現(xiàn)起來也較為容易?!斑^大的目標時就是為了你日后放棄它時找到了足夠的理由”。學習方針可以總結(jié)為 “興趣為先,踐學結(jié)合”。簡單說就是先培養(yǎng)興趣,然后學習中把實踐穿**來,螺旋式提高。這種方式學習效果好,而且不容易讓人放棄。有了學習方針以后,就可以制定學習計劃,也稱為學習路線。下面就是學習路線的介紹。
四. 學習路線
我推薦的學習路線是這樣的,如下圖:
這個學習路線是這樣設(shè)計的:首先了解這個領(lǐng)域,建立起全面的視野,培養(yǎng)起充足的興趣,然后開始學習機器學習的基礎(chǔ),這里選擇一門由淺入深的課程來學習,課程最好有足夠的實驗能夠進行實戰(zhàn)?;A(chǔ)打下后,對機器學習已經(jīng)有了充足的了解,可以用機器學習來解決一個實際的問題。這時還是可以把機器學習方法當作一個黑盒子來處理的。實戰(zhàn)經(jīng)驗積累以后,可以考慮繼續(xù)進行學習。這時候有兩個選擇,深度學習或者繼續(xù)機器學習。深度學習是目前最火熱的機器學習方向,其中一些方法已經(jīng)跟傳統(tǒng)的機器學習不太一樣,因此可以單獨學習。除了深度學習以外,機器學習還包括統(tǒng)計學習,集成學習等實用方法。如果條件足夠,可以同時學習兩者,一些規(guī)律對兩者是共通的。學習完后,你已經(jīng)具備了較強的知識儲備,可以進入較難的實戰(zhàn)。這時候有兩個選擇,工業(yè)界的可以選擇看開源項目,以改代碼為目的來讀代碼;學術(shù)界的可以看特定領(lǐng)域的論文,為解決問題而想發(fā)論文。無論哪者,都需要知識過硬,以及較強的編碼能力,因此很能考察和鍛煉水平。經(jīng)過這個階段以后,可以說是踏入AI領(lǐng)域的門了?!皫煾殿I(lǐng)進門,修行在個人”。之后的路就要自己走了。
下面是關(guān)于每個階段的具體介紹:
0. 領(lǐng)域了解:在學習任何一門知識之前,首先第一步就是了解這個知識是什么?它能做什么事?它的價值在什么地方?如果不理解這些的話,那么學習本身就是一個沒有方向的舟,不知道駛向何處,也極易有沉船的風險。了解這些問題后,你才能培養(yǎng)出興趣,興趣是最好的引**,學習的動力與持久力才能讓你應(yīng)付接下來的若干個階段。關(guān)于機器學習是什么,能做什么,它與深度學習以及人工智能的關(guān)系,可以看我寫的博客 從機器學習談起。
1. 準備工作:如果你離校過久,或者覺得基礎(chǔ)不牢,最好事先做一下準備復習工作?!肮び破涫拢叵壤淦鳌?。以下的準備工作不多,但足以應(yīng)付后面階段的學習。
數(shù)學:復習以下基本知識。線性代數(shù):矩陣乘法;高數(shù):求導;概率論:條件與后驗概率。其他的一些知識可以在后面的學習的過程中按需再補;
英文:常備一個在線英文詞典,例如愛詞霸,能夠不吃力的看一些英文的資料網(wǎng)頁;
**:可以隨時隨地上Google,這是一個很重要的工具。不是說百度查的不能看,而是很多情況下Google搜出來的資料比百度搜的幾十頁的資料還管用,尤其是在查英文關(guān)鍵字時。節(jié)省時間可是很重要的學習效率提升;
2. 機器學習:機器學習的第一門課程首推Andrew Ng的機器學習 (Machine Learning - Stanford University | Coursera)。這門課程有以下特點:難度適中,同時有足夠的實戰(zhàn)例子,非常適合第一次學習的人。在 @子實 的回答下首推了cs229 (斯坦福大學公開課 :機器學習課程) 這門課程,但我這里不推薦,為什么,原因有以下:
時間:cs229 的時間太早,一些知識已經(jīng)跟不上當今的發(fā)展,目前最為火熱的神經(jīng)網(wǎng)絡(luò)一筆帶過。而Cousera上神經(jīng)網(wǎng)絡(luò)可是用了兩個課時去講的!而且非常詳細;
教學:Ng在cs229 時候的教學稍顯青澀,可能是面對網(wǎng)絡(luò)教學的原因。有很多問題其實他都沒有講清楚,而且下面的人的提問其實也很煩躁,你往往不關(guān)心那些人的問題。這點在Coursera上就明顯得到了改善,你會發(fā)現(xiàn)Ng的教學水平大幅度改善了,他會對你循循善誘,推心置腹,由淺入深的教學,在碰到你不明白的單詞術(shù)語時也會叫你不要擔心,更重要的,推導與圖表不要太完善,非常細致清晰,這點真是強力推薦;
字幕:cs229 的字幕質(zhì)量比Coursera上的差了一截。Coursera上中文字幕翻譯經(jīng)過了多人把關(guān),質(zhì)量很有保證;
作業(yè):cs229 沒有作業(yè),雖然你可以做一些,但不會有人看。這點遠不如Coursera上每周有deadline的那種作業(yè),而且每期作業(yè)提交上去都有打分。更重要的是,每期作業(yè)都有實際的例子,讓你手把手練習,而且能看到自己的成果,成就感滿滿!
3. 實踐做項目:學習完了基礎(chǔ)課程,你對機器學習就有了初步了解?,F(xiàn)在使用它們是沒有問題的,你可以把機器學習算法當作黑盒子,放進去數(shù)據(jù),就會有結(jié)果。在實戰(zhàn)中你更需要去關(guān)心如何獲取數(shù)據(jù),以及怎么調(diào)參等。如果有時間,自己動手做一個簡單的實踐項目是最好的。這里需要選擇一個應(yīng)用方向,是圖像(計算機視覺),音頻(語音識別),還是文本(自然語言處理)。這里推薦選擇圖像領(lǐng)域,這里面的開源項目較多,入門也較簡單,可以使用OpenCV做開發(fā),里面已經(jīng)實現(xiàn)好了神經(jīng)網(wǎng)絡(luò),SVM等機器學習算法。項目做好后,可以開源到到 Github 上面,然后不斷完善它。實戰(zhàn)項目做完后,你可以繼續(xù)進一步深入學習,這時候有兩個選擇,深度學習和繼續(xù)機器學習;
4. 深度學習:深度學習是目前最火熱的研究方向。有以下特點:知識更新快,較為零碎,沒有系統(tǒng)講解的書。因此學習的資源也相對零散,下面是一些資源介紹。其中不推薦的部分并不代表不好,而是在這個初學階段不合適:
推薦,UFLDL: 很詳盡的推導,有翻譯,且翻譯質(zhì)量很高;
推薦,Deep learning (paper):論文,高屋建瓴,一覽眾山小;
推薦,Neural networks and deep learning:由淺入深;
推薦,Recurrent Neural Networks: RNN推導初步學習的最佳教程;
不推薦,Neural Networks for Machine Learning - University of Toronto | Coursera:太難;
不推薦,Deep Learning (book):面面俱到,但缺乏深入;
不推薦,CS231n:翻譯與字幕問題;
5. 繼續(xù)機器學習:傳統(tǒng)的機器學習有如下特點,知識系統(tǒng)化,有相對經(jīng)典的書。其中統(tǒng)計學習(代表SVM)與集成學習(代表adaboost)是在實踐中使用非常多的技術(shù)。下面是相關(guān)資源:
推薦,機器學習:如果是在以前,機器學習方面的經(jīng)典教材首推PRML,但現(xiàn)在周老師的書出來以后,就不再是這樣了。首先推薦讀周老師的書。這本書有一個特點,那就是再難的道理也能用淺顯精煉的語言表達出來。正如周老師的名言:“體現(xiàn)你水平的地方是把難的東西講容易了,而不是把容易的東西講難,想把一個東西講難實在太簡單”;
不推薦,Pattern Recognition And Machine Learning:當前階段不推薦。PRML是以貝葉斯的觀點看待很多機器學習方法,這也是它的一大特色。但對于初學者來說,這種觀點其實并無必要。而且此書沒有中文翻譯,當前階段硬啃很容易放棄;
6.開源項目:當知識儲備較為充足時,學習可以再次轉(zhuǎn)入實踐階段。這時候的實踐仍然可以分兩步走,學習經(jīng)典的開源項目或者發(fā)表高質(zhì)量的論文。開源項目的學習應(yīng)該以盡量以優(yōu)化為目的,單純?yōu)樽x代碼而學習效果往往不太好。好的開源項目都可以在Github 里搜索。這里以深度學習為例。深度學習的開源優(yōu)秀庫有很多,例如torch,theano等等,這里列舉其中的兩個:
推薦,DeepLearnToolbox:較早的一個深度學習庫,用matlab語言撰寫,較為適合從剛學習的課程轉(zhuǎn)入學習
推薦,tensorflow:Google的開源庫,時至今日,已經(jīng)有40000多個star,非常驚人。
7.會議論文:一般較好的課程都會推薦你一些論文。一些著名的技術(shù)與方法往往誕生于一些重要的會議。因此,看往年的會議論文是深入學習的方法。在這個階段,如果是在校學生,可以選擇某個課題,以發(fā)論文為目的來學習研究。一般來說,論文是工作的產(chǎn)物。有時候一篇基于實驗的論文往往需要你寫很多代碼,利用一些開源項目。因此開源項目的學習與讀會議論文的工作兩者之間是有相關(guān)的。兩者可以同時進行學習。關(guān)于在哪里看論文,可以看一下CCF推薦排名,了解一下這個領(lǐng)域里有哪些優(yōu)秀的會議。下面介紹兩個圖像與機器學習領(lǐng)域的著名頂級會議:
CVPR:與另兩個會議ICCV和ECCV合稱計算機視覺領(lǐng)域的三大會。
Conference on Neural Information Processing Systems:簡稱NIPS,許多重要的工作發(fā)表在這上面,例如關(guān)于CNN的一篇重要論文就是發(fā)表在上面。
8.自由學習:到這里了,可以說是進入這個門了。下面可以依據(jù)興趣來自由學習。前階段不推薦的學習資源也可隨意學習,下面是點評。
cs229 (斯坦福大學公開課 :機器學習課程):Ng寫的講義很不錯,其中關(guān)于SVM的推導部分很清晰,想學習SVM推薦;
Neural networks (Neural Networks for Machine Learning - University of Toronto | Coursera ):大牛的視角跟人就是不一樣,看看Hinton對神經(jīng)網(wǎng)絡(luò)是怎么看的,往往會讓你有種原來如此的感悟。其實看這門課程也等同于讀論文,因為幾乎每節(jié)課的參考資料里都有論文要你讀;
cs231n (CS231n: Convolutional Neural Networks for Visual Recognition):最新的知識,還有詳細的作業(yè)。國內(nèi)應(yīng)該有團隊對字幕進行了翻譯,可以找找;
PRML (Pattern Recognition And Machine Learning):作為一門經(jīng)典的機器學習書籍,是很有閱讀必要的,會讓你對機器學習擁有一個其他的觀察視角。
五. 總結(jié)
本文的目的是幫助對AI領(lǐng)域了解不深,但又想進入的同學踏入這個門。這里只說踏入,是因為這個領(lǐng)域的專精實在非常困難,需要數(shù)年的積累與努力。在進行領(lǐng)域?qū)W習前,充分認識自己的特點,制定合適的學習方法是十分重要的。首先得對這個領(lǐng)域進行充分了解,培養(yǎng)興趣。在學習時,保持著循序漸進的學習方針,不要猛進的學習過難資源;結(jié)合著學習與實踐相輔的策略,不要只讀只看,實際動手才有成就感。學習某個資源時要有充分的目的,不是為了學開源項目而看代碼,而是為了寫開源項目而看;不是為了發(fā)論文而寫論文,而是為了做事情而寫論文。如果一個學習資源對你過難,并不代表一定是你的問題,可能是學習資源的演講或撰寫人的問題。能把難的問題講簡單的人才是真正有水平的人。所以,一定要學習優(yōu)質(zhì)資源,而不是不分青紅皂白的學習。最后,牢記以興趣來學習。學習的時間很長,過程也很艱難,而只有興趣才是讓你持之以恒,攻克難關(guān)的最佳助力。