機器學習應該準備哪些數學預備知識?

數據分析師,工作中經常使用機器學習模型,但是以調庫為主。
自己一直也在研究演算法,也裸寫過一些經典的演算法。
最近在看PRML這類書籍,感覺有點吃勁,主要是公式推導看不懂,很多數學符號不知其意。
也特地學過線性代數、微積分等,但是然並卵,還是看不懂大段的公式以及那些神奇的矩陣計算~
機器學習新手,想前來問下,有沒有哪些數學知識是可以彌補這一類缺陷的?
能否具體的說一些知識點或者相關的文章和書籍?

感謝~~


最近在給幾位程序員朋友培訓機器(深度)學習,而且10月份剛把數學基礎部分培訓完,看到這個問題,結合培訓的感受,趁熱寫一點小小的心得體會。

看了一下題主的問題,的確,現在很多想從事於機器學習的朋友都存在類似的困惑,主要是很多相關的書看不懂,尤其是數學部分,包括題主提到的PRML,還有最近的深度學習聖經。不得不說,這些書籍其實都很經典,但經典的書未必都適合每個人,畢竟這些著作其實是有一些門檻的,所以如何把這個門檻降低,或者換一個說法,如何把其中的數學基礎用通俗易懂的語言解讀出來,也是很有意義的一件事。我在培訓當中也是深有體會。

以下我假定讀者跟題主情況類似:希望從事於機器學習,但數學多年不用,在閱讀演算法書籍的過程中,數學部分理解起來有難度。

同時也歡迎業內朋友提供寶貴建議和意見。

對於絕大多數從事於機器學習的人來說,學數學的目的,主要是便於(深入)理解演算法的思路。那麼問題來了,我們到底要把數學學到什麼程度?

我這裡舉幾個例子:

1.線性最小二乘法

大家可以隨意搜索一下,相關的文章很多。長篇大論的不少,剛入門的朋友一看到那些公式可能就看不下去了。比如下面的解釋:

毫無疑問,這樣的解釋是專業的,嚴謹的。事實上,這是深度學習聖經里的解釋。我並沒有詆毀大師的意思,只是覺得用一個具體的例子來說明,可能會讓讀者更加容易理解:

小明是跑運輸的,跑1公里需要6塊,跑2公里需要5塊(那段時間剛好油價跌了),跑3公里需要7塊,跑4公里需要10塊,請問跑5公里需要多少塊?

如果我們有初中數學基礎,應該會自然而然地想到用線性方程組來做,對吧。

這裡假定x是公里數,y是運輸成本(β1和β2是要求的係數)。我們把上面的一組數據代入得到這麼幾個方程:

如果存在這樣的β1和β2,讓所有的數據(x,y)=(1,6),(2,5),(3,7),(4,10)都能滿足的話,那麼解答就很簡單了,β1+5β2就是5公里的成本,對吧。

但遺憾的是,這樣的β1和β2是不存在的,上面的方程組很容易,你可以把前面兩個解出來得到一組β1和β2,後面兩個也解出來同樣得到一組β1和β2。這兩組β1和β2是不一樣的。

形象地說,就是你找不到一條直線,穿過所有的點,因為他們不在一條直線上。如下圖:

可是現實生活中,我們就希望能找到一條直線,雖然不能滿足所有條件,但能近似地表示這個趨勢,或者說,能近似地知道5公里的運輸成本,這也是有意義的。

現實生活當中,有很多這樣的例子,想起以前在某公司上班的時候,CEO說我們研發部做事有個問題:一個研發任務,要求三個月做完,因為周期太短,完成不了,就乾脆不做,這顯然是不對的,要盡全力,哪怕三個月完成了80%,或者最終4個月完成,總比不作為的好。

其實最小二乘法也是這樣,要盡全力讓這條直線最接近這些點,那麼問題來了,怎麼才叫做最接近呢?直覺告訴我們,這條直線在所有數據點中間穿過,讓這些點到這條直線的誤差之和越小越好。這裡我們用方差來算更客觀。也就是說,把每個點到直線的誤差平方加起來:

(如果上面的四個方程都能滿足,那麼S的值顯然為0,這是最完美的,但如果做不到完美,我們就讓這個S越小越好)

接下來的問題就是,如何讓這個S變得最小。這裡有一個概念,就是求偏導數。這裡我想提一下,在培訓的過程中,我發現機器學習的數學基礎課程當中,微積分是大家印象最深刻的,而且也最容易理解:比如導數就是求變化率,而偏導數則是當變數超過一個的時候,對其中一個變數求變化率。如果這個概念也忘了,可以參考我在深度學習回答里那個王小二賣豬的例子。這裡就不細講了:

Jacky Yang:深度學習如何入門?

要讓S取得最小值(或最大值,但顯然這個函數沒有最大值,自己琢磨一下),那麼S對於β1和β2分別求偏導結果為0,用一個直觀的圖來表示:

我們看到這條曲線,前半部分是呈下降的趨勢,也就是變化率(導數)為負的,後半部分呈上升的趨勢,也就是變化率(導數)為正,那麼分界點的導數為0,也就是取得最小值的地方。這是一個變數的情況,對於多個變數的情況,要讓S取得最小值,那最好是對β1和β2分別求導(對β1求導的時候,把β2當常量所以叫求偏導),值為0:

看到這個我們就熟悉了,兩個變數,剛好有兩個方程式,初中學過,那麼很容易得出:

其實也就意味著

這個函數也就是我們要的直線,這條直線雖然不能把那些點串起來,但它能最大程度上接近這些點。也就是說5公里的時候,成本為3.5+1.4x5=10.5塊,雖然不完美,但是很接近實際情況。

在培訓的過程中,一直在思考一個問題,也就是上面提到的那個,機器學習到底要把數學掌握到什麼程度?首先我們得搞清楚我們到底要拿機器學習幹什麼,機器學習本來就是要通過分析現實生活中的數據得出其中的規律,以便為將來各方面提供指導意義。既然是這樣,為何不直接從現實中來到現實中去,直接用數據和案例來講解數學呢。我們顯然不是為了學數學才學的機器學習,那就沒必要堆砌哪些晦澀的公式了。除非我們要做純理論研究。

當然,數學的一些理念,思想或者精髓是需要掌握的,其實很多時候,我們都是在做不到完美的情況下,求那個最接近完美的解,別忘了機器學習很多情況下其實是在做擬合,所以說最小二乘法對於機器學習非常重要,這也是我把它當做第一個例子的原因。其實深度學習里的反向傳播不也是一樣么?剛開始不完美,但我要想辦法讓它越來越接近完美,預測值與實際值差距越來越小。所謂訓練,其實也就是不斷追求完美的一個過程。

2.拉格朗日乘子法

聽到拉格朗日乘子法這個名字的時候,很多人的第一反應是:這玩意兒是不是很高深啊,先入為主地有了畏難的情緒。但我把它講完以後,大部分人表示並不難,而且現實生活中,我們經常潛移默化會用到拉格朗日乘子法。甚至可以說,不用拉格朗日乘子法的人生都是不完整的人生。

我們來看一下定義:

雖然這個定義應該說是很簡潔明了的,但對於大部分人來說,依然還是有點懵。不太清楚為什麼要這麼做。拉格朗日到底要搞什麼飛機?

我們還是舉個例子:某工廠在生產過程中用到兩類原材料,其中一種單價為2萬/公斤,另一種為3萬/公斤,而工廠每個月預算剛好是6萬。就像下面的公式:

經過分析,工廠的產量f跟兩種原材料(x1,x2)具有如下關係(我們暫且不管它是如何來的,而且假定產品可以按任意比例生產):

請問該工廠每個月最少能生產多少?

其實現實生活中我們會經常遇到類似的問題:在某個或某幾個限制條件存在的情況下,求另一個函數的極值(極大或極小值)。就好比你要在北京買房,肯定不是想買什麼房子就買什麼房子,想買多大就買多大,而是跟你手頭的金額,是否有北京戶口,納稅有沒有滿五年,家庭開支/負擔重不重,工作單位穩不穩定都有關係。

回到工廠的例子,其實就是求函數f的極值。上面我們提到,極值點可以通過求偏導(變化率為0的地方為極值點)來實現,函數f(x1,x2)對x1,x2分別求偏導,那麼得出的結論是:x1,x2都為0的時候最小,單獨看這個函數,這個結論對的,很顯然這個函數的最小值是0(任何數的平方都是大於或等於0),而且只有x1和x2同時為0的時候,取得最小值。但問題是它不滿足上面的限制條件。

怎麼辦呢?拉格朗日想到了一個很妙的辦法,既然h(x1,x2)為0,那函數f(x1,x2)是否可以加上這個h(x1,x2)再乘以一個係數呢?任何數乘以0當然是0,f(x1,x2)加上0當然保持不變。所以其實就可以等同於求下面這個函數的極值:

我們對x1,x2以及λ分別求偏導(極值點就是偏導數均為0的點):

解上面的方程組得到x1=1.071,x2=1.286 然後代入f(x1,x2)即可。

這裡為什麼要多加一個乘子λ呢,試想一下,如果λ是個固定的數(比如-1),我們也能通過上面的方程式1,2求解得到x1,x2,但是我們就得不到方程式3,其實也就是沒有約束條件了。所以看到沒有,拉格朗日很聰明,他希望我們在求偏導(極值點)以後,還能保留原有的約束條件。我們上面提到,單獨對函數求極值不能保證滿足約束條件,拉格朗日這麼一搞,就能把約束條件帶進來,跟求其他變數的偏導結果放在一起,既能滿足約束條件,又能保證是約束條件下的極值。借用金星的一句話:完美!

當然這是一個約束條件的情況,如果有多個約束條件呢?那就要用多個不同的λ(想想為什麼),正如最上面的那個定義那樣,把這些加起來(這些0加起來也是0)。

機器學習里的數學,我感覺只需要掌握裡面這個核心思想即可,就像拉格朗日乘子法,求條件極值---》轉化為求(函數+條件)的極值,每一步都很妙。其實我想說的是,體會這種妙處以後,再看SVM的演算法,會感覺舒服很多,數學主要是為了讓人更好地理解演算法,並不是為了數學而學數學。人生苦短,還成天被晦澀的書籍所困擾,「感覺身體好像被掏空」,這樣真的好么?

3.樸素貝葉斯

之所以把這個拎出來,是因為我一直想吐槽一下那個公式:

我想吐槽,是因為幾乎沒有一篇文章解釋這個公式是怎麼來的。很多文章一上來就是這個

公式。對於已經對條件概率沒多少概念的朋友來說,腦子裡其實一直有疑問。其實要解釋並不難,把P(B)放到左邊,除法改成乘法就容易理解多了。

P(A|B) x P(B) = P(B|A) x P(A)

也就是:B發生的概率 x B已經發生的情況下A發生的概率 = A發生的概率 x A已經發生的情況下B發生的概率。

如果這個不好理解,我們還是舉個例子:

如上圖所示,口袋裡有5個球(2個藍色,3個紅色),每次取一個,可能的結果如下圖所示:

第一次取出來是藍色球的概率是2/5,我們把這個概率叫P(A),然後在A發生的情況下,再取出一個紅球的概率是多少?顯然是3/4,因為只剩下3個紅球一個藍球,這個3/4就是P(B|A),也就是在A發生的情況下,B發生的概率,這叫條件概率。我們把他們相乘得到:

(2/5) x (3/4)=3/10

接著我們換另一個方式算:如果第一次取到紅球,第二次取到藍球。同理,P(B)為3/5,P(A|B)為2/4,兩個相乘:(3/5) x (2/4)=3/10

他們是相等的。也就是說:P(A|B) x P(B) = P(B|A) x P(A)

這個並不是特例,看下面的公式:

事實上,P(A and B) 和P(B and A)是一樣的,只是一前一後發生的順序不同。

我們把這個公式P(A|B) x P(B) = P(B|A) x P(A)的P(B)拿到另一邊,這就是樸素貝葉斯的公式。

除了上面幾個例子,其實還有很多方面,都可以用不那麼晦澀的方式去解讀。比如高斯分布,很多文章,包括一些經典書籍,一上來就是那個公式:

然而很多人並不太明白,為何要用這樣的分布,為什麼叫正態分布,而不叫變態分布。其實它是大自然的一種普遍規律。

其實可以用這個圖:

這是統計學生兩門學習成績總和(總分200分),橫軸是分數,縱軸是所佔的比例。我們發現,學霸和學渣都比較少,大部分人都集中在150分左右(很顯然,大部分人都是你我這種普通人嘛),如果統計樣本足夠大,以至於達到無窮,那就變成了鐘形曲線。普通人的平均分數,就是高斯分布里的那個μ,也就是均值,而那個σ怎麼解釋呢?就是你這個曲線越陡,σ越小,這個叫方差。試想一下,如果大家都擠成一坨,成績都差不多,差別小,也就是方差小,中間的方塊占的比例就越高,當然就越陡了。如下圖:

另外,還有一些概念,比如正交,很多朋友問起過這個問題:Jacky,向量正交的概念我在大學裡學過,但就是不知道為啥要正交?

其實我們要理解正交,可以先理解什麼是相交,兩條直線相交表明存在一定的夾角,但這個夾角可大可小,如果是0的情況下,他們是在一條線上的(向量都是過原點的,這裡我們不考慮不過原點的情況),180度的時候也是在一條直線上,這個兩種情況我們都可以認為他們是線性相關的,那麼什麼時候,最不相關呢,很顯然是90度的時候,也就是垂直的時候。除了垂直和平行的情況,夾角在0-90度或者90度到180度之間的情況,相關性介於垂直和平行之間。

我們試想一下,如果我們要把一組數據分解成不同的特徵,我們希望每個分量各自具有獨立的特點呢?還是希望每個分量,你中有我,我中有你好呢?顯然是越無關越好,如果他們之間太「曖昧」,就沒有特點了。最好是各個分量,兩兩互相垂直。當然,垂直是幾何上的解釋,對於向量來說,更嚴謹的說法(多維)就是正交。

關於機器學習中數學的通俗化表達,限於篇幅(太長看了也累),先聊到這裡,目前還在繼續整理當中,想到哪說到哪,思路還不夠清晰,希望在本次培訓結束以後,能整理出一個完整的版本。同時也請業內朋友多提寶貴意見和建議。

如果在閱讀PRML和deep learning的過程中,對有些數學部分不太清楚,也請在評論區留言或者私信給我也可以。請列出具體的內容或對應的書的頁數。最近在寫一本小冊子,也很希望收到朋友們的需求,痛點及反饋。謝謝。

關於數學基礎課程列表,幾個高票答案總結的很全了,這裡我就不重複貼了。不過有人總結了一份文檔,裡面列出了機器學習中用到的數學基礎,雖然沒有詳細描述,但思路清晰,簡潔明了,可以參考:

http://www.cogsci.ucsd.edu/~ajyu/Teaching/Cogs118A_wi10/Refs/basic_math.pdf


--2015-10-13 再更新--

哦對了,正文裡面提到了三種矩陣變換,下面給大家玩一個趣味題目(????)

以下兩個圖分別對應了「三種矩陣變換」里的哪種矩陣變換,然後,你可以猜猜這兩個變換矩陣具體值是多少,提示:很特殊的矩陣哦~~~~

--2015-10-13 更新--

感謝那麼多童鞋的點贊,第一次在知乎上拿到100+的贊,O(∩_∩)O~~

有加我微信的童鞋有好多問我要機器學習資料的,我就在這裡統一回復一下:


書籍的話大家自行百度「書名+pdf+微盤」應該都有,當年我就是這麼下的


機器學習:

斯坦福大學公開課 :機器學習課程

Pattern Recognition and Machine Learning


線性代數:

麻省理工公開課:線性代數

Introduction to Linear Algebra, 4th edition ,GILBERT STRANG


凸優化

Convex Optimization,Stephen Boyd


概率這邊我就不單獨推薦書籍了,一方面自己沒有遇到非常驚艷的相關書籍(大家可以推薦給我),另一方面無論ng的公開課,還是prml,概率部分還是蠻詳細的,個人經驗是概率部分不是非常需要單獨學習。

----------------------------


題主好,關注你已經有些時間了,是一個執著於數據領域的人。恰好我本人的業餘時間幾乎都用來學習prml了,目前大概看了8個章節,每個章節大概精讀(較好地理解)三分之二的內容,所以就回答一下這個問題。

首先,題主說的沒錯,線性代數和微積分都是必要的,但是初學者容易割裂地看待它們以及機器學習,不清楚哪些線性代數微積分的知識才是掌握機器學習數學推導的關鍵。一樣,我也走過並繼續在走很多彎路,就說說我的感受吧,大家一起探討探討。


線性代數內容:

推薦Introduction to Linear Algebra,4th edition

網易公開課地址:麻省理工公開課:線性代數

作者講課者:麻省理工的一個非常有趣幽默,人格魅力爆棚解析集聚洞察力直指根本,把國內大部分線性代數教材轟的渣也不剩的老教授Gilbert Strang。


1 理解矩陣變換

矩陣變換簡單的說就是x-&>Ax,A矩陣把原空間上的向量x映射到了Ax的位置,看似簡單實在是奧妙無窮。

1.1 A可以是由一組單位正交基組成,那麼該矩陣變換就是基變換,簡單理解就是旋轉坐標軸的變換,PCA就是找了一組特殊位置的單位正交基,本質上就是基變換。

1.2 A可以是某些矩陣,它們在某些特殊的方向上只對x做了收縮拉伸變換而沒有改變方向,簡單來說就是Ax=lambda x,這些特殊的方向x就是特徵向量,而lambda 就是收縮拉伸的量,描述了這些特殊的方向上的變換後,其實我們很容易畫出這種矩陣變換的幾何圖解。

1.3 A可以是投影矩陣,把x投影到某個直線上,或者某個subspace上,線性回歸模型有最小二乘解釋,最小二乘可以由極大似然函數推得,當然還能用投影矩陣解釋。


2 理解(對稱)矩陣的特徵向量特徵值分解

2.1 對稱矩陣特徵分解是理解多維高斯分布的基礎

要理解多維高斯分布需要四個知識:等值面,對稱矩陣特徵分解,正交基變換,多維橢圓方程

2.2 對稱矩陣特徵分解

對稱矩陣特徵分解可以直截了當的導出矩陣對角化的公式,而對協方差矩陣的對角化又是PCA的核心數學知識

理解PCA的數學基礎:協方差矩陣對角化,基變換矩陣。


3 一些線性代數的嗅覺素養

其實很多感覺是逐步形成的,

比如n維向量x乘以x的轉置就是一個對稱矩陣等…


4 本質
洞悉本質

下面拋開機器學習,回歸到線性代數本身,

我現在回顧,還是可以清晰的感覺到,理解掌握線性代數的幾個不同的階段(或者說坎在哪裡),我把它們總結成幾個小問題,大家也可以自測一下,如果你捫心自問能夠很好的回答其中的某個問題,那麼相當於你在線性代數的某一塊知識領域裡已經相對純熟洞悉到非常基礎但是最核心的本質思想。

這種東西大學教材真的給不了,也不是你做幾張線性代數試卷,考個100分能夠比擬的,本質的東西需要思考,體會,頓悟,瞭然一笑,一切盡在不言中…話也說回來我痴迷機器學習原理,痴迷數學,說到底還是想要多體驗這種感覺,會上癮的…


問題一,你有感覺到某一類矩陣和矩陣相乘,其實就是解方程時的消元嗎?


問題二,

你有發現解方程時對矩陣的操作,與消元法解方程的對應關係嗎?

你有發現行列式的定義和性質,與消元法解方程的對應關係嗎?

你有發現求逆矩陣與消元法解方程的對應關係嗎?而奇異矩陣與這個消元法解方程又有什麼關係呢?

你有發現非常自然的消元法解方程,是連結矩陣、行列式、逆矩陣這些概念線索和紐帶嗎?這麼普普通通的消元法解方程是多少線性代數基礎概念的核心啊!所有的東西都不是無中生有的,

線性代數的設定真的不是像國內那些垃圾教材裡面描述的好像一隻孫猴子一樣,像直接從石頭縫裡蹦出來的啊!


問題三,

前面已經提到了,三種「理解矩陣變換」,你理解了嗎?


問題四,

為什麼行秩和列秩是一樣的?涉及四個基本子空間(列空間,零空間,行空間,左零空間),這個東西是我最近才感悟到的。


線性代數部分先總結到這裡,後面還有概率統計和微積分部分,就簡略說一下,以後有時間再補充。


概率統計:

(1)
極大似然思想

(2)
貝葉斯模型

(3)
隱變數混合概率模型,EM思想

基礎的典型分布是逃不過的,尤其高斯分布。


微積分:

主要體現在
極值問題 與 (條件)最優化問題

偏導數,梯度這兩個概念必須深入人心

還有就是凸優化和條件最優化問題,這個是理解SVM,或者線性回歸等等模型正則化的基礎。。。


我的微信號mubing_s,我平日里如果某一塊知識點(面)想清楚了,一遍會用白紙黑字寫下來記錄備忘,有機器學習 數學方面的,有興趣想看的、想探討同學,都歡迎加我哦,:-D


先總結到這裡了,歡迎大家拍磚!以後有時間詳細補充。


線性代數在深度學習領域有著舉足輕重的作用,它是深度學習各種演算法的基本數學工具。雲棲君給題主推薦的這篇文就是對深度學習中會用到的一些線性代數的基本概念和運算操作進行了介紹,希望能讓有興趣的同學一起來進行學習。

作者Brendan Fortuner 是一名在西雅圖的亞馬遜的軟體工程師,目前自己在人工智慧方面進行研究。

上過Jeremy Howard的深度學習課程後,我意識到我在線性代數方面的不足,而這大大影響我對類似反向傳播這樣的概念的理解。因此我決定在這個方面花點時間,以補全這方面的知識。 本文是對線性代數的基本介紹,用於深度學習中會使用到的一些常見的線性代數操作。

什麼是線性代數?

在深度學習的背景下,線性代數是一個數學工具,它提供了有助於同時操作數組的技術。 它提供了像向量和矩陣(電子表格)這樣的數據結構用來保存數字和規則,以便進行加,減,乘,除的運算。

線性代數為什麼有用?

線性代數可以將複雜的問題簡單化,讓我們能夠對問題進行高效的數學運算。 以下是線性代數如何達到這些目標的一個例子。

# Multiply two arrays
x = [1,2,3]
y = [2,3,4]
product = []
for i in range(len(x)):
product.append(x[i]*y[i])
# Linear algebra version
x = numpy.array([1,2,3])
y = numpy.array([2,3,4])
x * y

初始化這兩個數組後,用線性代數的方法會快3倍。

如何在深度學習中使用線性代數?

神經網路將權重存儲在矩陣中。 線性代數使矩陣運算變得更加快捷簡便,尤其是在GPU上進行訓練的時候。 實際上,GPU是以向量和矩陣運算為基礎的。 比如,圖像可以表示為像素數組。視頻遊戲使用龐大且不斷發展的矩陣來產生令人炫目的遊戲體驗。 GPU並不是處理單個像素,而是並行地處理整個像素矩陣。

向量

向量是1維數組。 在幾何中,向量將大小和方向的潛在變化存儲到一個點。 例如,向量[3,-2]表示向右移3個單位距離和向下移2個單位距離。而具有多個維度的向量稱為矩陣。

向量表示

我們可以以不同的方式來表示向量。 這裡有幾個常見的表示方式。

幾何中的向量

向量通常表示從一個點出發的運動。 它們將大小方向的潛在變化存儲到一個點。 向量[-2,5]表示左移2個單位,向上5個單位。 參考資料

向量可以應用於任何空間點。 向量的方向就是向上5個單位和向左2個單位的斜線,它的大小等於斜線的長度。

標量操作

標量運算涉及向量和某個數字。 我們可以通過對向量中的所有項進行加,減,乘,除操作來對其進行修改。

Scalar addition

元素操作

在諸如加法,減法和除法的元素操作中,相應位置的值被重新組合以產生新的向量。 向量A中的第一個值與向量B中的第一個值配對。第二個值與第二個值配對,依此類推。也就是說,這兩個向量必須有著相同的尺寸,才能完成元素操作*。

Vector addition

y = np.array([1,2,3])
x = np.array([2,3,4])
y + x = [3, 5, 7]
y - x = [-1, -1, -1]
y / x = [.5, .67, .75]

*請參閱下面關於numpy 中的broadcasting方法詳細信息。

向量乘法

向量乘法有兩種類型:點積和Hadamard乘積。

點積

兩個向量的點積是一個標量。 向量和矩陣的點積(矩陣乘法)是深度學習中最重要的操作之一。

y = np.array([1,2,3])
x = np.array([2,3,4])
np.dot(y,x) = 20

Hadamard乘積

Hadamard乘積是元乘法,它的輸出是一個向量。

y = np.array([1,2,3])
x = np.array([2,3,4])
y * x = [2, 6, 12]

向量場

如果我們對一個點(x,y)應用一個加法或乘法的向量函數,向量場則表示了該點可能會移動多遠。 給定空間中某一個點,向量場顯示了圖中各個不同點可能的變化力度方向

參考

向量場是非常有趣的,因為它根據不同的起點可以向不同的方向移動。 這是因為向量場背後的向量存儲著2x或x2這樣的函數關係,而不是像-2和5這樣的標量值。對於圖上的每個點,我們將x值代入2x或x2,並從起始點繪製箭頭指向新的位置。向量場對於類似梯度下降(Gradient Descent)這類的機器學習技術的可視化是非常有用的。

矩陣

矩陣是數字或字元的矩形網格(如Excel表格),並具有加,減,乘等運算規則。

矩陣維度

我們用列和行來描述矩陣的維度。

a = np.array([
[1,2,3],
[4,5,6]
])
a.shape == (2,3)
b = np.array([
[1,2,3]
])
b.shape == (1,3)

矩陣標量運算

矩陣的標量運算與向量一樣。 簡單地將標量應用於矩陣中的每個元素進行加,減,乘,除等操作。

Matrix scalar addition

矩陣單元操作

為了對兩個矩陣進行加,減或除法,它們必須具有相等的維度。*我們以元素組合的方式產生對應的值,得到新的矩陣。

a = np.array([
[1,2],
[3,4]
])
b = np.array([
[1,2],
[3,4]
])
a + b
[[2, 4],
[6, 8]]
a — b
[[0, 0],
[0, 0]]

Numpy 的broadcasting方法*

這是個不得不提的話題,因為它在實踐中非常重要。 在numpy中,元素操作的維度要求通過稱為broadcasting的機制來擴展。 如果每個矩陣(行與行,列與列)中的相應維度滿足以下要求,則這兩個矩陣是兼容的:

1.? ? ? ? 兩個矩陣維度相等,或

2.? ? 一個矩陣的維度為1

a = np.array([
[1],
[2]
])
b = np.array([
[3,4],
[5,6]
])
c = np.array([
[1,2]
])
# Same no. of rows
# Different no. of columns
# but a has one column so this works
a * b
[[ 3, 4],
[10, 12]]
# Same no. of columns
# Different no. of rows
# but c has one row so this works
b * c
[[ 3, 8],
[5, 12]]
# Different no. of columns
# Different no. of rows
# but both a and c meet the
# size 1 requirement rule
a + c
[[2, 3],
[3, 4]]

但在更高的維度上(3維或4維),事情會變得有點奇怪,但是現在我們不用擔心。 了解二維上的操作是個很好的開始。

矩陣Hadamard乘積

矩陣的Hadamard乘積是一個元素運算,就像向量一樣。 相應位置的值通過乘法運算來產生一個新的矩陣。

a = np.array(
[[2,3],
[2,3]])
b = np.array(
[[3,4],
[5,6]])
# Uses python"s multiply operator
a * b
[[ 6, 12],
[10, 18]]

只要矩陣維度符合broadcasting要求,就可以用Numpy對矩陣和向量進行Hadamard乘積運算。

矩陣轉置

神經網路經常處理維度不符合要求的矩陣。 而矩陣轉置提供了一種方法來「旋轉」其中一個矩陣,以使其操作符合乘法要求。 轉置矩陣有兩個步驟:

1. 矩陣旋轉90°

2.反轉每行元素的順序(例如[a b c]變為[c b a])

例如,將矩陣M轉置為T:

a = np.array([
[1, 2],
[3, 4]])
a.T
[[1, 3],
[2, 4]]

矩陣乘法

矩陣乘法規定了一組對矩陣進行乘法運算,以產生新矩陣的規則。

規則

並不是所有的矩陣都能進行乘法運算的。 並且,對輸出矩陣的維度也存在要求。參考資料

1.? ? ? ? 第一矩陣的列數必須等於第二個矩陣的行數

2.? ? M×N矩陣和N×K矩陣的乘積是M×K矩陣。 新矩陣取第一個矩陣的行和第二個矩陣的列。

步驟

矩陣乘法依賴於點積與行列元素的各種組合。 以下圖為例(取自Khan學院的線性代數課程),矩陣 C中的每個元素都是矩陣A中行與矩陣B中列的點積。

操作a1·b1表示我們取矩陣A中第一行(1,7)和矩陣B中第1列(3,5)的點積。

這裡是另一種方法:

為什麼矩陣乘法以這種方式工作?

矩陣的乘法運算非常有用。但背後並沒有太深奧的數學規律。 之所以數學家發明了這種運算,完全是因為它簡化了以前乏味的計算。 這是一個人為的產物,但卻非常有效。

用一下幾個例子自我測試一下

矩陣乘法與Numpy

Numpy使用函數np.dot(A,B)進行向量和矩陣乘法運算。 它有一些其他有趣的功能和問題,所以我希望大家能在使用前閱讀一下相關文檔。

更多英文教程

Khan Academy Linear Algebra

Deep Learning Book Math Section

Andrew Ng』s Course Notes

Explanation of Linear Algebra

Explanation of Matrices

Intro To Linear Algebra

Immersive Math

文章原標題《Linear algebra cheat sheet for deep learning》,作者:Brendan Fortuner,譯者:friday012,審閱:李烽

文章為簡譯,更為詳細的內容,請查看原文

更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎


Andrew Ng的課算是有良心了。 簡單版去coursera上看,每周會有optional的section,就是補基礎知識。

同樣內容廣度深度更野一點搜CS229 Stanford。這是coursera那門課的真正形態。

網站里有個鏈接叫handouts。section notes裡面都是周五TA section的東西。這門課每周五會有一個TA帶著大家補基礎知識的section。 基礎知識和目標知識不要分開來看,看到問題了,再去補,不然干看基礎知識沒有實際應用的理解效果很不好。想想高中數學和後來的高數,哪些不是好東西,但不配合應用去學沒什麼效果。

這門課相當成熟,每堂課都有完全拿你當SB一樣詳細的note pdf。強烈推薦。

不建議系統的看數學書,如果你上過數學課的話。看書太費時間了,而且還是那句話,不是learn by doing,看十成記五成,理解也就三成吧。


利益相關:樓主 @Robin Shen 以本科應用數學和碩士運籌學、優化理論的背景轉到德國海德堡大學讀博,主要從事機器學習、計算機視覺的研究,希望自己的一些經驗可以對想入門機器學習的朋友們有點借鑒作用。

此回答的部分答案摘自我另外一個相關回答:

Robin Shen:想轉專業機器學習(人工智慧)需要學哪些課程?

首先對人工智慧、機器學習一個綜述:

大話「人工智慧、數據科學、機器學習」--綜述 - 知乎專欄

籠統地說,原理和基礎都在數學這邊,當然有很多偏應用和軟體使用的技術,例如「深度學習調參」等,這些報個培訓速成班就能學會的技術含量不那麼高的東西,不在討論範圍內。

這裡要討論的,是如何系統的學習,然後自己能編出這機器學習或深度學習的程序或軟體--我想,這才能稱為一個合格的機器學習、數據科學家。

入門基礎

1, 微積分(求導,極限,極值)和線性代數(矩陣表示、矩陣運算、特徵根、特徵向量)是基礎中的基礎,某篇圖像分割1w+引用的神文核心思想便就求解構造矩陣的特徵向量;

2, 數據處理當然需要編程了,因此C/C++/Python任選一門(推薦Python,因為目前很多庫和Library都是用python封裝),數據結構可以學學,讓你編程更順手更高效,但是編程不是數據處理的核心。

當然了,樓主所在的圖像處理界,熟練使用matlab或者Python調用opencv庫是必要條件,但是again他們只是工具,業餘時間自學,多練練就沒問題。有同學問用R行不行,補充一點,用什麼編程語言很大部分取決於你的核心演算法會調用什麼已有的庫函數,比如樓主的科研裡面核心演算法往往是MIP(混合整數規劃)問題需要調用Cplex或Gurobi庫函數,因此C/C++/Python/Java這些和Cplex介面良好的語言都可以拿來用,這時候R就別想了。(更新:最新Gurobi版本支持R)

另外雖然圖像處理界一些open-source的code都用C++寫的,但是鑒於使用方便都會提供Python的介面,因此需要用到這些code的話,用Python調用比較方便;但是,如果是高階骨灰級玩家,需要修改甚至自己寫源代碼,那麼還是推薦C/C++,因為他們的速度最快。

3,演算法

通常高校都會有演算法類的課程,會概述各類演算法的基礎和應用,其中包括:精確演算法、近似演算法、啟發式演算法、演化演算法、遞歸演算法、貪婪演算法等待,還有各類優化演算法。

演算法非常核心,想必大家都聽說過演算法工程師這個職位。

關於數學模型和演算法的區別、聯繫,參見:

【學界】整數規劃精確演算法/近似演算法/(元)啟發演算法/神經網路方反向傳播等演算法的區別與關聯

中級教程

1,概率論+統計(很多數據分析建模基於統計模型)、統計推斷、隨機過程等

2,線性規劃+凸優化(或者只學一門叫numerical optimization,統計、機器學習到最後就是求解一個優化問題)、非線性規劃等

3,數值計算、數值線代等

當年我是在數學系學的這門課,主要是偏微分方程的數值解。

但我覺得其開篇講的數值計算的一些numerical issue更為重要,會顛覆一個數學系出身小朋友的三觀。(原來理論和現實差距可以這麼大!)

Conditional number, ill-conditioned problem,會讓你以後的編程多留個心眼。

恭喜你,到這裡,你就可以無壓力地學習Machine Learning這門課了(其實機器學習,通篇都是在講用一些統計和優化來做clustering 和 classification這倆個人工智慧最常見的應用)。並且你就會發現,ML課中間會穿插著很多其他課的內容。恩,知識總是相通的嘛,特別是這些跨專業的新興學科,都是在以往學科的基礎上由社會需求發展而來。

到這裡,其實你已經能看懂並且自己可以編寫機器學習裡面很多經典案例的演算法了,比如regression,clustering,outlier detection。

關於優化類課程的綜述,歡迎關注我的專欄:

[運籌帷幄]大數據和人工智慧時代下的運籌學 - 知乎專欄

運籌學(最優化理論)如何入門? - 知乎

學到Mid-level,就已經具備絕大部分理論基礎了。然後做幾個實際項目,就能上手然後就可以「吹噓」自己是搞機器學習的,就能找到一份工作了。

但是要讀Phd搞機器學習的科研,那麼高階課程必不可少,而且同一個topic你需要上好幾門課,並且你博士的課題,很可能只是一本書中一個章節裡面一小節里講的演算法,去改進他。

比如,樓主的博士課題就是mixed linear programming + discrete graphical models + markov random fields + regression + clustering + segmentation。

高階課程

再高階的課程,就是比較specific的課程了,可以看你做的項目或者以後的concentration再選擇選修,比如:Probabilistic Graphical Models(概率圖模型), Integer Programming(整數規劃) ,計算機視覺,模式識別,視頻追蹤,醫學圖像處理,增強學習,深度學習, 神經網路,自然語言處理,網路信息安全,等等等等。

深度學習:目前非常火,打敗了非常多幾十年積累起來的經典方法。

增強學習:也很火,遊戲AI、自動駕駛、機器人等等,它都是核心。

概率圖模型:深度學習之前非常popular的「學習」方法,有嚴格的數學模型和優美的演算法,雖然目前被前倆者蓋過了風頭,但是依然有它的立足之處。什麼?你不知道最近用PGM發了篇Nature,打敗了CNN?快看下面:

Robin Shen:如何評價 Vicarious 在 Science 上提出基於概率圖模型(PGM)的 RCN 模型?

再比如有用偏微分方程做圖像處理的(比較小眾),那麼這時候你肯定要去學一下偏微分方程了,大都是以科研為主導的。

科研嘛,為了發文章,就是要嘗試前人沒嘗試過的方法,萬一效果不錯呢,就是一篇好paper了,對吧。

附上頂尖會議排名,共勉:

國際「頂尖」計算機視覺、機器學習會議大搜羅--附排名接收率

互聯網教學資源

書目沒有特別推薦的,但是建議看英文原版。

另外直接翻牆Youtube看視頻課程,很多國際知名教授都很無私地把自己上課的視頻放在youtube上免費學習(搜索我上面列出的科目名字)。如果確實要樓主推薦,那就推薦海德堡大學歷史上最年輕的教授 Fred的機器學習視頻(我基本都看過):

另外一個教授給你上課的時候,開頭一般是會推薦書給你的(如果你確實喜歡看書的話)。當然了,翻牆是樓主suppose你們需要擁有的基本生存技能。

(註:以下再推薦一些視頻,僅受之以漁,多為graduate course)

1,Machine Learning by Prof. Nando de Freitas, 此視頻是其在UBC時13年所錄,後來跳槽去牛津計算機系了。

2,Deep learning at Oxford 2015 by Prof. Nando de Freitas, 跳槽到牛津所錄。

3,Probabilistic Graphical Models by Daphne Koller, 斯坦福大學計算機系教授


更多人工智慧、優化理論的知識,盡在:

[運籌帷幄]大數據和人工智慧時代下的運籌學

關於入行後就業前景(包括第三條運籌學、演算法工程師),參見:

國內(全球)TOP互聯網公司、學術界超高薪的攬才計劃有哪些? - 知乎

關於機器學習在諮詢行業的應用,參見

Data Science/Analytics 出身,可以在諮詢行業做些什麼? - Ruobing Shen 的回答

最後是通往大洋彼岸高薪博士職位,以及人工智慧數據科學家的傳送門:

歐洲、北美、全球留學及數據科學深度私人定製諮詢,從此DIY - Ruobing Shen的文章 - 知乎專欄


機器之心整理

本文作者依據自身經驗給出了一套快速上手的可行方法及學習資源的分類匯總,機器之心在其基礎上做了增益,希望對讀者有所幫助。

先決條件
機器學習的基礎是數學。數學並非是一個可選可不選的理論方法,而是不可或缺的支柱。如果你是一名計算機工程師,每天使用 UML、ORM、設計模式及其他軟體工程工具/技術,那麼請閉眼一秒鐘,忘掉一切。這並不是說這些概念不重要,絕不是!但是機器學習需要一種不同的方法。如今 Python 如此流行的原因之一是其「原型設計速度」。在機器學習中,一種使用幾行代碼即可建模演算法的語言絕對是必要的。

微積分、線性代數、概率論在機器學習幾乎所有演算法中不可或缺。如果你的數學背景很紮實,請跳過這一章節。如若不然,那麼重新溫習一下這些重要概念也不錯。考慮到理論的數量,我並不建議大家從大部頭開始。儘管一開始可以用它查詢具體概念,但是初學者先關注簡單的話題比較好。網上有很多好的在線資源(比如 Coursera、可汗學院或優達學城),實用且適合各種背景的人群。但是我建議從提綱之類的簡明書籍上手,其中所有核心概念均被涉及,次要概念可在需要的時候自行查詢。這種方法雖然不夠系統,但卻避免了這樣的缺陷:大量晦澀概念使得沒有紮實理論背景的人望而卻步。

初學者最好先學習下列內容:

概率論

  • 離散型和連續型隨機變數
  • 主要分布(伯努利分布、二項式分布、正態分布、 指數分布、 泊松分布、Beta 和 Gamma 分布)
  • 矩估計和最大似然估計
  • 貝葉斯統計
  • 相關性係數和協方差(Correlation and Covariance)

線性代數

  • 向量和矩陣
  • 矩陣的行列式
  • 特徵向量和特徵值
  • 矩陣分解(如 SVD)

微積分

  • 極限與導數
  • 微分和積分
  • 數值計算與最優化方法

網上有很多免費資源,比如

  • 《概率論入門》,Grinstead、Snell 著(https://www.dartmouth.edu/~chance/teaching_aids/books_articles/probability_book/amsbook.mac.pdf)
  • 《線性代數入門》,Wise、Gallagher 著(http://www.stat.columbia.edu/~liam/teaching/4315-spr06/LinAlg.pdf)
  • 《微積分入門》,Heinbockel 著(http://www.math.odu.edu/~jhh/Volume-1.PDF)

維基百科上也有很多好資源,對方程、定理等進行了清晰易懂的解釋。

機器之心也介紹過許多數學基礎與概念:

  • 基礎入門:深度學習矩陣運算的概念和代碼實現
  • 想了解概率圖模型?你要先理解圖論的基本定義與形式
  • 深度神經網路中的數學,對你來說會不會太難?
  • Reddit 熱門話題:如何閱讀並理解論文中的數學內容?

機器學習主要需要的數學基礎就是微積分、線性代數、概率論,我們感覺只需要掌握大學中常見的高數、線性代數、概率論與數理統計三門課程,基本上概念的理解就沒什麼問題了。如果再學一點數值計算和最優化等,我們基本上就能理解機器學習的學習過程推導。

機器學習方法建議(面向初學者)

特徵工程

開始機器學習的第一步是理解如何評估和改進數據集的質量。管理特徵的類別和缺失、歸一化和降維(PCA、ICA、NMF)是大幅提高演算法性能的基本技術,而且還有助於研究如何將數據集分割成訓練集和測試集、如何採取交叉驗證來取代傳統的測試方法。

機器之心也曾詳解過特徵工程如 PCA 降維演算法的詳細理論與推導,當然我們還介紹了其它有關特徵的概念:

  • 從特徵分解到協方差矩陣:詳細剖析和實現PCA演算法
  • 基於TensorFlow理解三大降維技術:PCA、t-SNE 和自編碼器
  • 似乎沒區別,但你混淆過驗證集和測試集嗎?

Numpy:Python 數值計算之王!

使用 Python 時,Numpy 不僅僅是一個庫。它是幾乎所有機器學習實現的基礎,因此了解它的工作原理、關注向量化和廣播(broadcasting)是非常必要的。這些技術可以幫助加速大多數演算法的學習過程,利用多線程和 SIMD、MIMD 架構的力量。

官方文檔已經很完整了,不過,我還建議大家看一下以下資源:

  • 《Python 數據科學手冊:數據使用的核心工具》,VanderPlas J. 著
  • 《Python 科學編程入門書》,LangTangen P. H. 著
  • 維度、廣播操作與可視化:如何高效使用TensorFlow

數據可視化

Matplotlib 即使不是純粹的機器學習話題,了解如何可視化數據集也很重要。Matplotlib 可能是最廣泛使用的解決方案:Matplotlib 易用,允許繪製不同種類的圖表。Bokeh 和 Seaborne 提供了有趣的替代方案。不必要徹底了解所有包,但是了解每一個包的優點和弱點還是很有用的,可以幫助你選擇合適的包。

了解 Matplotlib 細節的資源:《掌握 Matplotlib》,McGreggor D. 著

線性回歸

線性回歸是最簡單的模型之一,可以把它作為一個優化問題來研究,該問題可通過最小化均方誤差而得到求解。該方法雖然有效,但是限制了可利用的可能性。我建議還可以把它當作貝葉斯問題,使用之前的可能性展示參數(比如,高斯分布),優化變成了最大似然估計(Maximum Likelihood Estimation,MLE)。即使這看起來更加複雜,但該方法提供了一個可供幾十個其他複雜模型共享的新方法。

Coursera 上介紹貝葉斯統計的課程:

  • 《貝葉斯統計:從概念到數據分析》(https://www.coursera.org/learn/bayesian-statistics/)
  • 《貝葉斯統計:技術與模型》(https://www.coursera.org/learn/mcmc-bayesian-statistics)

以及這兩本書:

  • 《思考貝葉斯》,Downey B. A. 著
  • 《黑客的貝葉斯方法》Davidson-Pilon C. 著

包括線性回歸在內,機器之心曾介紹了一些解決回歸問題的方法(後文提供了 CART 演算法進行回歸分析):

  • 初學TensorFlow機器學習:如何實現線性回歸?
  • 回歸、分類與聚類:三大方向剖解機器學習演算法的優缺點(附Python和R實現)

線性分類

通常情況下,Logistic 回歸是最佳起始點,也是研究資訊理論進而了解信息熵、交叉熵和互信息的好機會。類別交叉熵(Categorical cross-entropy)是深度學習分類中最穩定、使用最廣泛的代價函數,一個簡單的 logistic 回歸可以展示它是如何加速學習過程的(與均方差相比)。另一個重要的話題是正則化(Ridge、Lasso 和 ElasticNet)。很多情況下,人們認為它是一種提高模型準確率的深奧方式,但是它的真實意義是更準確,在具體實例的幫助下變得易於理解。我還建議剛開始的時候,把 logistic 回歸當作一個簡單的神經網路,可視化(以 2D 實例為例)權重向量在學習過程中的移動軌跡。

我還建議本節應包括超參數網格搜索。網格搜索不在沒有完整了解的情況下嘗試不同的值,而是評估不同的超參數集的性能。因此,工程師可以將注意力集中在可達到最高準確率的組合上。當然還有更加強大的貝葉斯優化方法,即利用先驗知識逼近未知目標函數的後驗分布從而調節超參數的方法。

  • 從頭開始:用Python實現帶隨機梯度下降的Logistic回歸
  • 如何通過牛頓法解決Logistic回歸問題
  • 擬合目標函數後驗分布的調參利器:貝葉斯優化

支持向量機(SVM)

支持向量機提供了不同的分類方法(包括線性和非線性方法)。該演算法非常簡單,具備基礎幾何知識的人也可以學會。不過,了解核支持向量機的工作原理非常有用,因為它會在線性方法失敗的時候展示出其真正實力。

一些有用的免費資源:

  • 《支持向量機簡明教程》,Law 著
  • 核函數方法,維基百科詞條
  • 詳解支持向量機SVM:快速可靠的分類演算法
  • 詳解支持向量機(附學習資源)

決策樹

決策樹提供了另一種分類和回歸的方法。通常,它們不是解決複雜問題的首選,但它們提供了完全不同的方法,即使是非技術人員也可以很容易理解,該方法還可以在會議或演示中可視化。

  • 教程 | 從頭開始:用Python實現決策樹演算法
  • 從決策樹到隨機森林:樹型演算法的原理與實現

集成學習一覽

在理解了決策樹的動態特性以後,研究集成訓練樹的集(集成)來提高整體準確率的方法很有用。隨機森林、梯度樹提升和 AdaBoost 都是強大的演算法,且複雜度較低。對比簡單的樹和提升方法與 bagging 方法採用的樹的學習過程挺有趣的。Scikit-Learn 提供了最常見的實現方法,但是如果你想更好地駕馭這些方法,我還是建議你在 XGBoost 上多花些時間,XGBoost 是一個既適用於 CPU 又適用於 GPU 的分散式框架,即使在較大的數據集上也能加速學習過程。

  • 從Boosting到Stacking,概覽集成學習的方法與性能

聚類

當開始聚類方法的學習時,我的建議是從高斯混合演算法(基於期望最大化/EM)學起。雖然 K-均值聚類要更加簡單易懂(也是必須要學習的),但是高斯混合演算法為我們提供了純粹的貝葉斯方法,在其他類似任務中也十分實用。其它必學的演算法還有層次聚類(Hierarchical Clustering)、譜聚類(Spectral Clustering)和 DBSCAN。這對你了解基於實例的學習或研究 K-近鄰演算法(既適用於有監督又適用於無監督任務)也是有幫助的。譜聚類的一個有用的免費資源是:

  • 《譜聚類教程》,Von Luxburg U 著

聚類演算法是無監督學習中的代表,機器之心也曾詳細地介紹過各種聚類方法與實現:

  • 機器理解大數據的秘密:聚類演算法深度詳解
  • 綜述分類、聚類和信息提取演算法在文本挖掘領域內的應用
  • 如何用Python和機器學習炒股賺錢?

神經網路入門

神經網路是深度學習的基礎,你可以在單獨的課程中學習神經網路。但是,我認為理解感知機、多層感知機以及反向傳播演算法的概念也很有幫助。Scikit-Learn 提供了一個實現神經網路的簡單方法,但是,開始探索 Keras 也是一個好主意,Keras 是一個基於 Tensorflow、Theano 或 CNTK 的高級架構,允許使用最少的努力對神經網路進行建模和訓練。開始神經網路學習的一些好資源:

  • 《人工神經網路基礎》Hassoun M 著
  • 《Keras 深度學習》Gulli A.、 Pal S. 著

目前最好的深度學習書籍可能就是:

  • 《深度學習》,Goodfellow I.、 Bengio Y.、Courville A. 著
  • 最全的DNN概述論文:詳解前饋、卷積和循環神經網路技術
  • 機器之心GitHub項目:從零開始用TensorFlow搭建卷積神經網路
  • 深度神經網路全面概述:從基本概念到實際模型和硬體基礎
  • 訓練的神經網路不工作?一文帶你跨過這37個坑
  • TensorFlow從基礎到實戰:一步步教你創建交通標誌分類神經網路
  • 神經網路快速入門:什麼是多層感知器和反向傳播?
  • 教程 | 如何用30行JavaScript代碼編寫神經網路異或運算器
  • 神經網路調試手冊:從數據集與神經網路說起
  • 神經網路基礎:七種網路單元,四種層連接方式
  • 如何從信號分析角度理解卷積神經網路的複雜機制?
  • 神經網路架構演進史:全面回顧從LeNet5到ENet十餘種架構(附論文)
  • 麻省理工解讀神經網路歷史,三篇論文剖析基礎理論

最後,我們將介紹部分機器之心曾發過的綜述性技術文章或論文,並希望這些文章能對大家全面理解各種方法有所幫助:

  • 自動駕駛計算機視覺研究綜述:難題、數據集與前沿成果
  • 一文幫你發現各種出色的GAN變體
  • 深度強化學習綜述:從AlphaGo背後的力量到學習資源分享
  • 從FPS到RTS,一文概述遊戲人工智慧中的深度學習演算法
  • 視覺問答全景概述:從數據集到技術方法
  • 神經風格遷移研究概述:從當前研究到未來方向
  • 從語言學到深度學習NLP,一文概述自然語言處理
  • 遷移學習全面概述:從基本概念到相關研究
  • 一文綜述所有用於推薦系統的深度學習方法
  • 一文讀懂遺傳演算法工作原理(附Python實現)
  • 從自編碼器到生成對抗網路:一文縱覽無監督學習研究現狀

互聯網時代下怎樣自學成data scientist

http://datasciencemasters.org

更多資源:
http://dk-techlogic.blogspot.in/2012/05/best-machine-learning-resources.html?utm_medium=emailutm_source=otherutm_campaign=notifications.auto._wVEyo0LEeWu9QquNtf_Cwm=1

-----------------割線------------------

再推薦一下兩本書
Introduction to statistical learning

Elements of statistical learning
都是斯坦福出的書,前者很基礎,後者是前者的高階版。還都有免費下載。

現在正在追這本
Mining of Massive Datasets
又是斯坦福的,感覺難度中等偏上。


泛函分析,凸優化。


取決於你想學的程度,只是想混口飯吃沒有太多必要花很多時間補別的東西,不用看懂證明,你知道的大概,能用軟體做出個結果就夠了。

想認真學的話:
1. 數學方面:微積分、矩陣論
矩陣這一塊,了解的越多對你推倒計算方面能力的提升提高非常多。當然,只想看懂不要求證明的話,本科的線性代數夠用了(我指的是真的好好學線性代數...)

2. 凸優化
這一塊的重要性非常顯然了,比如你連牛頓法、梯度下降法、一維搜索等基本的凸優化都不了解 的話會非常吃力。但短期來說的話,基本上Boyd的convex optimization懂前三章就夠用了。

3.概率、統計
對基本的期望啊mean啊之類的計算,極大似然,bayes,多元正太等很多相關方面的統計一定要比較熟悉,否則對涉及統計和對數據的直覺上會差很多。

4.泛函
我本科沒好好學泛函,到學到一些ML的方法比如kernel相關的方法的時候就凸顯出來對泛函不熟,對函數空間理解不夠的話會比較吃力。但重要性上比如前面幾個方面。

但我整體想說的是,對於大多數只學過微積分線性代數+基本統計的人不大會有時間和精力說把上面這些一門一門學了才開始學ML,大多數時候都是慢慢去補的。比如上面有人提到Andrew Ng的coursera課程上會有一些hangouts。這是一個很好的比較快速掌握急切所需的東西的方面。畢竟上面每一門課都需要花很多時間去學。但是,如果你能真的好好學了之後,再回過頭來把ML再學一遍,你收穫一定會多的多!


優化方面,nocedal的最優化和boyd的凸優化。
矩陣方面,矩陣分析六講還不錯。
概率統計,能力不足夠做推薦。


這本書我覺得完全可以覆蓋你說的問題了http://book.douban.com/subject/25788483/


實際上除了微積分線代你啥都不會也能學,這課在某些專業是必修課,很多選這門課的同學數學水平[1]爛的不堪入目,當然這麼上這門課痛苦很多就是了……
按照我正在上機器學習的同學的說法,可能有幫助的數學知識有:

數學分析
實分析(測度論)
泛函分析
概率論
數理統計
隨機過程
凸優化
博弈論(我也不知道為啥有這個……)
拓撲學(這好像是那老師說著玩的……)

不負任何責任。

Notes:
[1] 可以認為我說的是分析、代數、幾何的水平。再具體一點,分析只學過微積分,最多再學過一點弱智版的復變。代數只學過線代、抽代(比較簡單的那種)。幾何一竅不通。


答主們已經列出了許多相關課程及其對應的教科書,但是要把一門或幾門課程都系統地學習一遍無疑會耗費大量的時間和精力,同時效率也不見得高。另外這些課程中所教授的內容有相當一部分與機器學習關係不大。我自己在學校講授一些演算法課程,團隊里也有同事專門從事機器學習演算法和求解器的開發。在這裡從優化和演算法的角度出發,擇出幾個比較重要的知識點,供大家參考。

1線性代數

矩陣的各種運算要熟練(如乘積,內積,跡等),半正定矩陣的性質與各種判定條件(與凸函數的關係)。

2微積分

多元函數的求導(梯度,Hessian矩陣),泰勒展開,中值定理等。從我自己的教學經歷來看,很多同學對多元微積分似乎有著天生的抗拒心理。我自己就見過不少已經學過微積分的同學,不會對由矩陣二次型表達的多元二次函數進行求導。其實,通過總結與一元微積分的對應關係, 完全可以做到輕鬆掌握多元微積分的諸多結果。

3數值線性代數

與線性代數相比,這門課程更偏重數值計算。其討論的奇異值分解, Cholesky 分解, QR 分解等矩陣分解方法一般會用在主演算法的子問題求解中,因此是決定程序的運行速度的關鍵因素之一。當然這些分解演算法現今都有一些現成的軟體包可以調用,但是在特定的場合,我們仍然需要對問題結構進行具體分析,提高分解演算法的運行效率。

4非線性規劃

主要是各種優化演算法,大致可以分為一階演算法和二階演算法兩類:一階演算法中只用到了函數的一階導數(梯度),典型代表是梯度下降法;二階演算法還用到了函數的二階導數(Hessian矩陣)信息,典型代表是牛頓法。世上無完事,其實每種演算法都有自己的好處和弊端。例如一階演算法的優勢是子問題求解的代價小,但是收效速度慢並且得到解的精度不高;另一方面,二階演算法的收斂速度很快,但是子問題的求解代價較高(一般會涉及到矩陣求逆)。為了克服上述缺點,學者們又提出了梯度法和牛頓法的諸多變種,例如:隨機(stochastic)梯度法,共軛(conjugate)梯度法,鄰近(proximal)梯度法,擬牛頓法等。在許多機器學習演算法包或求解器中,能經常看到他們的身影。

5凸分析

最優性條件(大家比較熟知的是KKT條件),對偶理論。對偶理論使得我們能從另一個角度來描述原問題,從而設計一些新的演算法如對偶演算法,原始對偶演算法 (primal-dual algorithm)等。前一段時間很火的交替方向乘子法(alternating direction method of multiplier)便是原始對偶演算法的典型代表。另外就是凸優化問題的所特有的性質需要清楚,比如:局部最優等價於全局最優,強對偶定理成立,最優性條件變成了充分必要條件。

6 其他一些進階知識

現在做研究的一個趨勢就是做交叉,有些學者運用其他學科的工具對機器學習演算法進行了研究,往往會有新的發現。因此,若要從事演算法研究的話,其他數學知識當然是多多益善。比如根據運算元理論可以推導出一大堆運算元分裂方法,而這些方法與交替方向乘子法又有很緊密的聯繫;又比如機器學習大神Michael Jordan的group最近的研究工作就是用微分方程將Nesterov加速法,三次正則化方法等演算法統一起來。


針對這個問題,引用騰訊雲技術社區的文章《機器學習入門書籍簡介》系統性的回答下這個問題。

在這篇文章中,我摘選出機器學習中涉及數學相關的書籍。其中數學可分為分析+概率,以下主要針對這兩方面給出筆者看過覺得比較優質的一些書籍供大家參考,希望對你有所幫助。

一、分析

數學分析:首推北大張築生版的數學分析新講一套三冊;全面深入細緻講解了數學分析的方方面面,如果覺得實數系構造這一塊不夠嚴謹,可以參考陶哲軒的實分析前面一兩章;如果不求嚴謹,無力啃下完整的數學分析又想學習演算法的同學,則推薦浙大版高等數學;再次一點可以看華中科技大出版的一元分析學多元分析學這兩本書;名字雖然叫分析學,實際比浙大高數還要簡單一些。

優化理論:滿分推薦《最優化導論》這本書,作者是Edwin.K.P.Chong,亞馬遜有中譯本;這本書是我苦尋很久才找到的一本,填補了從高數到學習演算法之間那一環的不二法本;第二本推薦是凸優化,不過目前只有英文版,門檻稍高,但是內容清晰簡練,非常值得一讀。

線性代數:推薦Gilbert Strang的Introduction to linear algebra;不解釋,網易上有對應的視頻,滿分推薦。

二、概率

概率論:這裡推薦陳希孺的教材吧。

貝葉斯:當之無愧的經典是james OBerger的《統計決策理論與貝葉斯分析》,微盤上有中文版的pdf;國內比較好的是茆詩松寫的《貝葉斯統計》這本書;這裡有個奇怪的現象,似乎八十年代貝葉斯在國內火過一段時間,然後就沉寂下去了,導致這塊我們實際理論知之甚少,如果不是研究 lda 的時候反覆查找才找到這兩本書,估計我也是傻乎乎的停留在貝葉斯公式的基礎上了。

以上是針對機器學習中需建立的數學入門基礎知識書籍的相關推薦,若想了解更多機器學習的書籍,歡迎 閱讀原文,另外個人的感受就是機器學習不嫌你懂得數學多;有精力、有實力的同學可以在分析的基礎上繼續往上攀爬:實分析、泛函分析、微分幾何、拓撲。 下面,推薦下相關的機器學習的文章:

機器學習從入門到出家

機器學習:基於層次的聚類演算法

【機器學習入門系列】Regression 回歸:案例研究

【機器學習入門系列】 Error 的來源:偏差和方差

【機器學習入門系列】梯度下降法

【機器學習入門系列05】分類、概率生成模型


1.英語
2.數學
線性代數 linear algebra and its applications (看過lay寫的還不錯據說gilbert寫的更好,國內藍以中 高等代數簡明教程 也不錯,看上冊就夠了,下冊是抽代,藍以中這本對於機器學習來講很不錯,提了行列式求導和正定二次型,線性代數的書一般不講這塊)
高等數學 數學分析新講 張築生 (第三冊看看級數,國外的據說托馬斯微積分不錯 沒看過。矩陣向量求導是著名的沒書講領域,貌似很多人在這裡上火,一篇深度美文 機器學習中的矩陣,向量求導)
統計 概率論和數理統計 陳希孺 (至少看完前四章)
多元統計 applied multivariate statiatical analysis richard johnson (至少看完前四章 pca和factor analysis也應該看一看,其實pca和fa在機器學習中本身就是無監督學習的演算法)
最優化 convex optimization stephen boyd (至少看1-5 9 章,看完第五章的時候看一下pattern recognization and machine learning這本書附錄的拉格朗日運算元,這一章是svm的基礎)

珍愛生命,遠離rudin

我看完這些看的prml覺得沒什麼問題。手頭還有周志華和李航的書,建議當做補充材料,不太適合建立知識架構。

數學進階:(入門用不上的)
蒙特卡洛 introducing monte carlo methods with r Christian Robert(prml裡面11章就是講抽樣方法的,不妨先看下)
拓撲 topology without tears sidney a. morris
泛函 introductory functional analysis with applications kreyszig
流形還有李群李代數沒看過
3.機器學習
pattern recognization and machine learning Bishop
the elements of statistical learning hastie(據說挺難的 沒看過)
machine learning yearning 吳恩達(面向工程的小冊子,沒看過,不過吳恩達寫的,不會有問題)
4.深度學習
deep learning lan goodfellow(面向工程的,有難度,全搞懂估計要對著裡面給的論文看)
neural networks and deep learning (太簡單)http://neuralnetworksanddeeplearning.com
5.編程python(python核心編程)主 c++(c++ primer 5 lippman)為輔
python那幾個庫 底層的scipy numpy matplotlib sympy(python科學計算 張若愚),機器學習的scikit-learn(scikit-learn cookbook),深度學習的tensorflow(tensorflow實戰 黃文堅),資料庫的(expert oracle database architecture thomas),圖像識別還要用圖像處理(數字圖像處理 gonzalez)的那些東西opencv cuda什麼的

建了一個小群,大家互相幫助嘛 看書看不懂了一起研究,有好資料一起分享 qq群436142301


如果真心希望學好機器學習,那麼數學自然是非常有必要的,這邊我提供一個個非常好的機器學習路線的培養方案,JustFollowUs/Machine-Learning,可以看看您還缺什麼數學知識,這個github上面的內容基本是機器學習必備的,所以建議一步一步的全都學完,因為基本每個課程都提供了大家公認的好視頻,能幫助更好的學習。
當然如果僅僅只是希望找個工作過日子,這個上面的資料可能不太適合您,請忽略這條回答。


1、線性代數和矩陣理論,具體到機器學習裡面就是線性變換,svd之類,pca和lda都會用到;

2、高等數學,具體到機器學習就是求導,鏈式法則,積分思想等等;

3、優化理論,有兩本書不錯《Convex Optimization》和《Numerical Optimization》,具體到機器學習就是給定目標函數,求解參數的過程,什麼拉格朗日乘數法,對偶問題,kkt條件,梯度下降法,牛頓法,擬牛頓法等等。

4、概率與統計,機器學習的模型多與概率,統計有一些關係,比如概率圖模型。

這是最基礎的,其他要用到的數學知識,碰到了再去學。


矩陣論、概率論、凸優化、微積分、梯度


進入特定技能之前,要先解決多一個的概念。作為一個機器學習的工程師就必須了解整個生態系統,你的設計和 語言和庫的機器學習

要跳到這個作業中有一個需要具備以下技能:

1.計算機科學基礎知識和編程

2.概率統計

3.數據模擬和評價

4.將機器學習演算法與程序庫

5.軟體工程和系統設計


最基礎的部分包括基本的高等數學,比如分析、代數(尤其是矩陣論)、數值優化演算法、概率論與數理統計等。
更進階的需要掌握實分析(比如測度論)、圖論、時間序列、回歸分析等等。
再深入的你還可以掌握微分方程、流形幾何等等基礎機器學習涉及不到的內容,這個時候你就可以挖別人挖不出來的坑了。
另外雖然嚴格來說不屬於數學,但是演算法的概念和數據結構的相關知識也是一定要掌握的


推薦閱讀:

Matlab 中高維數組怎麼做 PCA?
谷歌智能車的難點在哪裡?模式識別,還是分析、控制演算法?

TAG:人工智慧 | 數據挖掘 | 數據分析 | 機器學習 | 模式識別 |