機器學習怎麼系統的入門?
推薦好的學習方法和入門進階書籍,或是其他學習渠道
書:要有好幾本,最好是角度差異大、深淺程度不同,比如系統的導論式的、深入的有推導的、淺出的手把手的。它要充當不同學習過程中的工具書。
網路教程:比如Andrew Ng的、各種專題的博客,有針對地找相應的教程,相對著看,網路資源跟書的表達方式畢竟是不一樣的,所以也是很有益的信息源paper:比如學CNN的時候,就搜一堆論文來,集中一段時間看一輪,一定要有針對性,帶著很明確的問號去看。
開源資源:很多很多東西,其實都有人做出來開源了,直接拿來用,一邊用一邊理解,甚至可以學習源碼關注這個領域:關注相關的會議期刊,關注大牛們(Hinton、Bengio、LeCun等)的動向,微博加一堆領域大牛每天看一眼他們分享什麼上來至於視頻學習,我個人不太喜歡,信息密度太低,效率太低,還不如多看些書和論文(當然,你如果想瞻仰大神們,還是可以看看的)。
基礎知識:線代、統計、概率、數學分析;資訊理論方面基本概念要理解,比如要知道相對熵是什麼意思和怎麼算;凸優化和最優估計相關內容,在各種各樣問題中都會遇到,學好了可以幫大忙。
機器學習主要就是找到目標函數並且做參數估計,雖然有很多現成工具,但是不熟悉優化問題的話,會很抓瞎。模型總要熟悉幾個吧,神經網路(SAE、RBM、CNN等)、SVM、最大熵、CRF、隨機森林、GMM等等。了解不同應用場景下各種模型有什麼優劣,挑一些自己以後可能常用到的多練習。統計,模式識別,凸優化,當然,凸優化隨意,做純數學研究的人還是少
最好可以把矩陣也學了談談我的機器學習的入門
2011年大學畢業,棄了兩個公司的Offer,打算去外面看看,因為覺得自己對計算機的學術研究還有一點熱情。很幸運的去了台灣一所知名高校,當時想做很奇特的人機交互——通過人的手勢給機器下達指令。但是不知道是什麼原理,如何去實現,於是就選擇了機器人實驗室(這個實驗室也不是專門做機器學習研究的,更多的是應用機器學習的方法),作為自己的碩士研究方向。
大學的畢設做了一個自己也不是很明白的課題——通過進化演算法優化反應面的問題。什麼是進化演算法,什麼是反應面,什麼是優化?對這些前提的理解在當時只是停留在字面的解釋。寫到這裡,發現坑到了自己,因為目前我也無法用通俗的語言來描述這個進化演算法;而反應面方法,是在統計學裡的一個專門術語,對應y=f(x)中的y值(當x為2維及以上的時候,整個函數的圖像就像一個面);優化是什麼?它不是讓程序運行更快,而是一個最優值的求解問題。什麼是最優值,就是模型的預測結果和真實的觀察值之間差距最小的值。
第一個涉及人機交互的演算法是Dynamic Time Wraping(DTW). 那時需要識別一些簡單的手勢,例如畫圈,畫橫線,畫豎線這些,用於機器人的實時控制。當時學長學姐推薦我用這個演算法,於是我就自己錄了一些樣本(自己比划動作,並且標記動作名稱),大概一個動作錄10到20組樣本吧。把這些數據存入機器人,相當於是讓它學習了這些動作。然後實際操作時,機器人通過攝像頭(我們採用kinect捕捉手臂的位置並且在三維坐標系中標記坐標位置)捕捉手的運動軌跡,然後與之前的樣本比對,通過DTW找出與當前動作最相似的動作。當時就覺得機器學習不過如此。
後來上了一門課,叫做Convex Optimization. 翻譯成中文叫做凸優化。又是優化,突然聯想到了大學畢設的反應面優化的問題。當時並不知道這門課是幹什麼的,只是上課的老師特別有名,他開發了libsvm. 是機器學習中使用最普遍的工具。一開始的上課內容,就是求解各種凸函數,比如已知一個凸函數y=f(x), 並且x通常有一些限制g(x)&<=0,求出另y最小的那一個,或者那一些x. 然後講近似,擬合。反正到後面是聽不懂在講什麼了,只知道就是用各種方法求解一個參數矩陣,比如在線性規劃中f(x) = wx, 給定一些已知的x和y, 求解w,使得f(x) 與 y的差值最小,就是求解一個最優化問題。到了學期快結束的時候,就厲害了,老師終於亮出了大招,利用之前所學的知識,推導了一遍Support Vector Machine(SVM). 當時就覺得自己也很厲害,雖然大半學期的課沒聽懂,但是也能推導出SVM. 那時覺得機器學習就是一個分類問題,在兩類樣本中,找出一個平面,把這些樣本分為兩群,而我們所要做的,就是求解矩陣,找出這個平面的參數。
在台灣念碩士只要2年,很快到了碩二,畢業論文也提上了日程。自己的研究方向是識別人的動作,人的動作是動態的,連續的,後一個動作是跟前一個動作相關的。需要有個模型來建立前後動作之間的關係,也就是建立視頻中前一幀和後一幀之間的關係。於是接觸到了Hidden Markov Model(HMM) 和 Conditional Random Field(CRF) 這兩個圖模型,這兩個模型很相似,但是HMM只需要計算前後兩個狀態之間的轉換概率,而CRF是計算在一些前提下的,前後兩個狀態之間轉換的條件概率。我大學時的概率論學的也不怎樣,在研究這兩個模型之間,花了不少功夫。那時機器學習對我來講,就是一堆狀態的轉移,概率的計算。然而導師也是一個牛逼的人物(IEEE Fellow),對我的碩士論文要求也很高,他說要把自己當成是愛因斯坦那樣的人物來做事情,換句話講就是寫個隨隨便便的論文在他那裡肯定是不能畢業的。於是我在無數次打擊之中,終於提出了令他滿意,也坑了自己的題目——同時物體識別與動作識別。所以機器學習只是一個方法,如何去解決現實中的問題,也是非常重要的。
在處理機器學習的問題上,如何收集樣本,如何提取特徵,是一個非常麻煩的問題。比如很常見的邏輯回歸(Logistic Regression),當有很好的樣本,和很好的特徵的時候,它的效果會變得很好。但是如果學習樣本取的不合適(比如正樣本和負樣本的比例不均衡,不同特徵之間關聯性很高),最終會導致模型歪了,學習出來也沒有什麼應用價值。
後來接觸了深度學習(Deep learning),深度學習,神經網路和機器學習之間又是什麼關係?首先從神經網路開始,這是一個機器學習的分支,就是模擬人的神經元,構成一個網路,把輸入層的信號,通過隱藏層,映射到輸出層。由於神經網路的學習方式,導致了中間的隱藏層不能太深,太深了會導致模型出問題,就是說機器學不到什麼東西。後來有人改進了神經網路的學習方式,從而使得隱藏層變得很多的時候,學習也不這麼難了。在深度學習中,常見的CNN和RNN都是很好的模型。CNN在圖像識別中有很廣泛的應用(Alpha go在識別棋局的時候,也用到了CNN)。而RNN特別適合應用在有上下文關係的場景中,其實有點類似HMM.
深度學習的最大特點就是不用特別關心如何做特徵工程,比如CNN去識別物體,不用自己設計特徵(比如原始圖像識別中常用的HOG, SIFT特徵),用最底層的像素作為特徵的CNN,在有大量的樣本的前提下,設定合適的神經元和層數,就能做出非常有效的模型。比如識別手寫數字(MINST數據集),識別率能達到97%以上。當然,如果再加上一些學習前的預處理(比如物體集中在畫圖像中間),效果會更加好。
目前離開學校也好多年了,對於模型上的研究也越來越少,工作中的機器學習,更多的是如何去收集數據,清洗數據,提取樣本,選擇特徵,選擇模型和實驗評估。在互聯網公司,用戶和系統的交互都會以日誌的形式記錄下來,機器學習的難點,已經轉移到了對於數據的處理和分析。
謝邀。無論如何。一定要做。一定要用。否則沒門可入,最多也就是可以說得天花亂墜而已。要那麼多花幹什麼呢?
推薦閱讀:
※為何總感覺人工智慧和神經科學(神經網路)被綁在一起?
※深度學習(如100層)為什麼不過擬合?
※如何評價 MIT Deep Learning 這本書?
※如何評價「膠囊理論」和其論文 Dynamic Routing Between Capsules?
※如何用c++在mnist上實現一個簡單的卷積神經網路,有哪些參考資料?