「機器學習和大數據計算都是學數學應該乾的,學計算機的相比毫無優勢」這種說法是否正確?為什麼?

陳懷臨前輩今天在微博上說的,各位是否贊同這種觀點?
我在本科階段學的軟體,學的數學確實不多,後來發現機器學習是自己的樂趣所在,看到陳懷臨前輩的言論,讓我比較擔憂是否計算機出身是否不好、是否出現瓶頸。


工業界情況一目了然,學術界我不清楚,我就搬磚吧,來自周志華師兄。

大家正好對比題主截圖中的最後一段話,挺有意思。總體來說我覺得沒啥好爭的,要是有時間,多學點數學沒壞處,奈何任何一個方向要做出成績,都需要太多時間。

機器學習現在是一大熱門,研究的人特多,越來越多的新人湧進來。

不少人其實並沒有真正想過,這是不是自己喜歡搞的東西,只不過看見別人都在搞,覺著跟大伙兒走總不會吃虧吧。

問題是,真有個「大伙兒」嗎?就不會是「兩伙兒」、「三伙兒」?如果有「幾伙兒」,那到底該跟著「哪伙兒」走呢?

很多人可能沒有意識到,所謂的machine learning community,現在至少包含了兩個有著完全不同的文化、完全不同的價值觀的群體,稱為machine learning "communities"也許更合適一些。


第一個community,是把機器學習看作人工智慧分支的一個群體,這群人的主體是計算機科學家。

現在的「機器學習研究者」可能很少有人讀過1983年出的「Machine Learning: An Artificial Intelligence Approach」這本書。這本書的出版標誌著機器學習成為人工智慧中一個獨立的領域。它其實是一部集早期機器學習研究之大成的文集,收羅了若干先賢(例 如Herbert Simon,那位把諾貝爾獎、圖靈獎以及各種各樣和他相關的獎幾乎拿遍了的科學天才)的大作,主編是Ryszard S. Michalski(此君已去世多年了,他可算是機器學習的奠基人之一)、Jaime G. Carbonell(此君曾是Springer的LNAI的總編)、Tom Mitchell(此君是CMU機器學習系首任系主任、著名教材的作者,機器學習界沒人不知道他吧)。Machine Learning雜誌的創刊,正是這群人努力的結果。這本書值得一讀。雖然技術手段早就日新月異了,但有一些深刻的思想現在並沒有過時。各個學科領域總有 不少東西,換了新裝之後又粉墨登場,現在熱火朝天的transfer learning,其實就是learning by analogy的升級版。

人工智慧的研究從以「推理」為重點到以「知識」為重點,再到以「學習」為重點,是有一條自然、清晰的脈絡。人工智慧出身的機器學習研究者,絕大部分 是把機器學習作為實現人工智慧的一個途徑,正如1983年的書名那樣。他們關注的是人工智慧中的問題,希望以機器學習為手段,但具體採用什麼樣的學習手 段,是基於統計的、代數的、還是邏輯的、幾何的,他們並不care。

這群人可能對統計學習目前dominating的地位未必滿意。靠統計學習是不可能解決人工智慧中大部分問題的,如果統計學習壓制了對其他手段的研 究,可能不是好事。這群人往往也不care在文章里show自己的數學水平,甚至可能是以簡化表達自己的思想為榮。人工智慧問題不是數學問題,甚至未必是 依靠數學能夠解決的問題。人工智慧中許多事情的難處,往往在於我們不知道困難的本質在哪裡,不知道「問題」在哪裡。一旦「問題」清楚了,解決起來可能並不 困難。


第二個community,是把機器學習看作「應用統計學」的一個群體,這群人的主體是統計學家。

和純數學相比,統計學不太「乾淨」,不少數學家甚至拒絕承認統計學是數學。但如果和人工智慧相比,統計學就太乾淨了,統計學研究的問題是清楚的,不象人工智慧那樣,連問題到底在哪裡都不知道。在相當長時間裡,統計學家和機器學習一直保持著距離。

慢慢地,不少統計學家逐漸意識到,統計學本來就該面嚮應用,而機器學習天生就是一個很好的切入點。因為機器學習雖然用到各種各樣的數學,但要分析大 量數據中蘊涵的規律,統計學是必不可少的。統計學出身的機器學習研究者,絕大部分是把機器學習當作應用統計學。他們關注的是如何把統計學中的理論和方法變 成可以在計算機上有效實現的演算法,至於這樣的演算法對人工智慧中的什麼問題有用,他們並不care。

這群人可能對人工智慧毫無興趣,在他們眼中,機器學習就是統計學習,是統計學比較偏嚮應用的一個分支,充其量是統計學與計算機科學的交叉。這群人對統計學習之外的學習手段往往是排斥的,這很自然,基於代數的、邏輯的、幾何的學習,很難納入統計學的範疇。

兩個群體的文化和價值觀完全不同。第一個群體認為好的工作,第二個群體可能覺得沒有技術含量,但第一個群體可能恰恰認為,簡單的才好,正因為很好地 抓住了問題本質,所以問題變得容易解決。第二個群體欣賞的工作,第一個群體可能覺得是故弄玄虛,看不出他想解決什麼人工智慧問題,根本就不是在搞人工智 能、搞計算機,但別人本來也沒說自己是在「搞人工智慧」、「搞計算機」,本來就不是在為人工智慧做研究。

兩個群體各有其存在的意義,應該寬容一點,不需要去互較什麼短長。但是既然頂著Machine Learning這個帽子的不是「一夥兒」,而是「兩伙兒」,那麼要「跟進」的新人就要謹慎了,先搞清楚自己更喜歡「哪伙兒」。

引兩位著名學者的話結尾,一位是人工智慧大獎得主、一位是統計學習大家,名字我不說了,省得惹麻煩:

「I do not come to AI to do statistics」

「I do not have interest in AI」


學術界存在這樣的鄙視鏈:數學家 鄙視 統計學家,統計學家 鄙視 機器學習,機器學習 鄙視 數據挖掘,等等。所以,數學搞得好的是不屑於去做機器學習的。玩笑。:)


我只講工業界的應用
我們招人,特別喜歡計算機專業出身的學生,因為動手能力強(編程)
很多數學畢業的學生,理論知識真的很強,尤其是一線學校的~ 但是工程應用能力太差,很多連SQL都不會寫,更別說寫map reduce。 要知道,工業上講究的是應用,是產生效益。如果你只會說一大堆理論,卻沒有辦法來實現,那等於0。 機器學習不是一味的高大上模型,更多的時間是進行數據的清晰,掌握常規的計算機知識有助於你更好的整理數據。

計算機專業的學生有著天然的優勢,資料庫,編程,數據結構,計算機原理等,都是進行機器學習的必要條件,這些知識很難在短時間內掌握明白。但是,機器學習演算法在工業上能用的就那麼十來種,一個計算機背景的學生只要肯下工夫,半年到一年就能搞定!(我說的是工業上)

那麼這並不是說數學不重要。數學也很重要,但是如果不是為了理論研究,我個人覺得沒必要搞的那麼深,很多優化或者矩陣變換都是通過工具包來實現(除非閑 的蛋疼,自己手寫)。

工業上講究應用,機器學習演算法再高深複雜,你最後都得想法子用編程來實現~

當然,像我這樣既不是計算機也不是數學出身的人,感覺兩個都挺重要的~


看到這個問題,想起一位著名教授的話,翻譯成中文 「自詡數學很好並且刻意在機器學習里秀數學的人,你選錯場地了,你應該去陶哲軒、張益唐的陣地里,解決他們所關心的數學問題。」


首先想說的是別把學計算機的和學數學的劃分的太清。學數學的可以不了解計算機,但如果你想在計算機科學(注意是科學)領域做出點成就的話不可能不精通數學。

另外,機器學習和大數據也分很多方面啊,最簡單的分類就可以分成理論研究和工程應用。
理論研究來說,比如說提出新的演算法啦,改善核函數,研究概率模型之類的工作,肯定是數學感覺好的人佔優勢。
而對工程應用來說,計算機工程師需要考慮的就不僅僅是演算法的問題了,還要考慮整個系統的種種因素。現在這些大的網站哪個不是大數據多層分散式架構,哪個沒有一些機器學習的應用?讓純玩數學的人來做能搞好?

最後補充一點,記得在微博上看到MSRA的一個大牛(對不起我忘了是哪位了)解釋為什麼科研中提出的新(好)演算法,在工程應用中不一定好用。他說,因為工程中不僅僅是一個機器學習的模塊在跑,而是整個系統在跑,整個系統的各個模塊之間的配合需要考慮很多因素,而不僅僅是一個模塊。

------------------------------------------------------------
半夜從床上爬起來答的,講的凌亂見諒。。。


不成立,正是因為是數學學計算機的才有優勢:現在除了計算機系的都在編程,只有計算機系的不編程在學數學……


恰恰相反,在工業領域實現機器學習演算法解決實際問題,沒有堅實的計算機基礎才寸步難行。

比如我遇到一個問題要把億級別的複雜網路,拆分成很多社團結構。現成的演算法很多,但是能達到線性速度的就那麼幾種。看完論文選定演算法一共花了三天。而另外一個月你猜在幹嘛,在不斷優化代碼。從數組到堆到哈希表,嘗試不同的數據結構,最終把一個百萬級別的測試用例的計算時間從三分鐘縮減到12秒。最終乾脆自己用c寫了一個專用數據結構。

然而和一位開發聊完我的需求,人家直接就告訴了最優的答案。其實我這一個月是在補人家大學的數據結構課。

隨便一答居然被贊同,誠惶誠恐地補充一點:

為什麼說計算機知識更加重要(當然其實和數學與計算機知識相比,業務才最重要,但是這裡不提)。

因為演算法別看說得高大上,但是真正的好的演算法,新一點的也出來5~6年了,早被研究透了,paper里別看寫好幾十頁,特么90%是領域背景、概述、演算法來源、性能對比總結,真正演算法核心的部分就兩段話一般。是個人都能看懂,機器學習方面的數學知識,最多到達泛函分析、最優化方法就夠了,這些都是數學系大三的課程而已,你實在不懂也無所謂,因為你不需要懂得希爾伯特空間就可以理解為什麼要在svm里使用核函數。

但是把 paper演算法實現到集群上,應用到實際業務項目中,卻需要非常強大的計算機知識。首先你別說你用sas、R,那種現成的包是不可能解決億級別數據的。所以你要自己寫map red甚至寫C。這需要你對底層的數據結構和各種搜索演算法有深刻地理解,否則有無數的坑等著你。因為各種優化演算法歸根結底是在一定數據結構空間上的搜索演算法,不理解這兩樣東西,會撞得頭破血流。因為一旦問題要並行化,就沒那麼簡單了。

而且大學的數據結構課那點知識只是告訴了你:有數組、鏈表、哈希表等等數據結構。但是這些結構上的搜索演算法怎麼設計,什麼情況下用什麼結構,用這些結構會在實際工作中遇到什麼坑,書上都沒有。。。。

當然不是說數學不重要,因為我本人是學數學的,學數學的人,知道一些比較深刻的知識比如測度空間、希爾伯特空間、各種變換的等價性、對偶性問題等等會讓你對機器學習演算法的理解比沒學過的人更深刻。只是我認為對計算機或者說計算數學的深刻理解也是工業界里搞數據挖掘的人非常需要的技能。

另外對於數學基礎較差的同學我推薦一本書:《統計學習方法》,薄薄一本精讀一遍,一般的機器學習演算法就都能懂了。


我們搞的是玄學,數學家玩不來的。

來吃我一記陰陽調參法:
http://arxiv.org/abs/1509.00913


如果是學計算機的,這時候不應該說我們要和新演算法剛正面,而應該說:「老闆,我們上並行試試?」


計算機出身的,假設只學過理工科級別的數理統計,線性代數和微積分。如果想讀機器學習的博士,要把數學水平補到跟統計碩士一個檔次(分析,統計推理,測度理論,統計建模四門課必不可少)。 如果不想讀博士,可以嘗試去讀PRML,能把整本書通讀下來,就意味著理解了最常見的各類機器學習演算法。


做理論,數學和物理出身大概有優勢。工程實現上還是專業碼農比較靠譜。當然如果是學數學出身的碼農,那肯定牛逼嘛。


要說數學功底,大學裡計算機系和數學系本來就是一牆之隔,CS學生的數學功底一般還不錯,如果不是去搞特別高深的理論研究,再加上一點自學肯定是夠用的了。 計算機系的學生絕不應該與數學絕緣,即使離開校園,數學的充電也不能間斷。

另外,機器學習並不涉及數學的各個方面,與數學的交集主要是統計學(嚴格講,統計學也不完全屬於數學)、線性代數、應用數學(如運籌學),一部分數學分析等,當然不排除對其他數學分支的深入研究會有助於機器學習理論的突破,但數學絕不是機器學習的全部(就像數學之於物理學)。

如果簡單的把機器學習分成理論和應用,起碼在目前階段,理論還只是它的一小部分,而且我覺得很長一段時間內機器學習都將是一個實驗性質很強的學科,所以計算機系的學生不僅是沒有優勢,而且還有很大的優勢。多去交一些統計系、數學系、心理學系、社會學系、 經濟學系的朋友,偉大的成就總是在那些交叉口產生的。


在自然科學的鄙視鏈條上,數學的排位是非常靠前的,所以不要奇怪被數學的人鄙視。

但是實際中解決問題能力誰更強就完全是一個個體性的問題了


根據個人經歷來看出身於數學專業或者是計算機專業並沒有太大關係,因為機器學習和並行計算這塊涉及到的數學並不需要太多時間去掌握,甚至使用coursera等在線課程平台學到能用能靠著文獻撐下去大概也只需要二十來周的時間,而且CS出身的數學一般是弱不了的,靠著這種夾生飯現學現賣的方法,發paper什麼的困難,把工程推進下去是完全可以的,畢竟在工程中遇到的問題很多前人已經有了解決方案了,拿來稍微改一改就能跑起來,比自己提出一個要容易很多,再者,在實踐中做了幾次之後對機器學習等等地方的認識也會逐漸地變深刻的,到時再細細研究,深挖基礎,事半功倍(希望沒用反,這詞錯的太多了。。。)。
另外,計算機科學從來都不是計算機的科學,除非想當一輩子Coder,否則任何一個方向學下去的數學基礎都是少不了的,而在解決計算機的具體問題的時候有意無意地,你的數學也會跟著提高。


不贊同這種說法!

而且,也不用擔心什麼出身問題吧,覺得你有點想太多了。既然你覺得現在做機器學習有興趣,那麼這個就是最大的動力。說實話,即使是學數學的,在看機器學習的很多演算法的時候,裡面的數學知識都是聽都沒有聽過的,都是靠自己學的。你有興趣,就可以靠這興趣去推動自己,去學習。

至於別人說什麼,不用太往心裡去,自己去做就好了啊。


之所以覺得學數學的有優勢不是因為數學知識,而是學數學專業的人本來就比學計算機的智商高(逃


作為一個學數學的,身邊不少人都跟我說機器學習是計算機人搞的,你們學數學的摻和什麼......


本人雖畢業剛出道半年,但就我目前的認識,就業界而言,在大部分情況下,編程能力還是更重要的而且對於公司而言更看重,首先,工業界不會立即就去用最先進的理論和模型,除了像google和facebook這樣擁有最頂尖數據科學家和工程師能立馬將複雜模型高效率實現的公司,其他絕大部分公司都是先用以前成熟的模型演算法然後再慢慢試驗遷移,舉個簡單例子,我司目前用的是神經網路,就用一層隱藏層,複雜的模型也就是做一些模型的組合,之前也試驗用過深度模型,效果會好一些,但隨之而來的問題是模型參數多很多,對於那種要求實時性高的線上系統,你不可能給一個模型太多時間去judge,一條數據最多只能幾個毫秒就得出結果,否則用戶體驗就會很差,所以再好的模型也必須符合你的應用場景和底層架構,我記得andrew ng說過,更好的演算法往往不如更多的數據,這是對的,我還想補充的是,更好的演算法往往也不如更多的特徵工程以及對數據的深入理解,不要天真以為拿個深度學習的模型不做數據預處理和特徵抽取就能跑贏一個簡單的經過特徵選擇的神經網路,所以我覺得研究機器學習理論的phd數學好是必須的,做機器學習工程的編程能力強則是王道,搞理論的也大可沒必要鄙視做工程的,本就是兩條不同的路,google沒有吳恩達照樣能搞機器學習,當你能想像google沒有jeff dean嗎?


名校計算機系還是很注重基礎尤其是數學。像北大南大計算機系都是理科而不是工科學位。


整個計算機就是一條可計算方程,所以你說學計算機和學數學有啥區別?
不記得在哪看到的說,最早自稱計算機科學家的人都是一群穿了為了去Darpa騙錢穿了馬甲的數學家。


推薦閱讀:

如何用一個公平的硬幣模擬 1/Pi 的概率?
什麼是狄利克雷分布?狄利克雷過程又是什麼?
怎樣證明0.9循環(0.999999...) = 1?
數學的本質是什麼?

TAG:數學 | 計算機 | 機器學習 | 計算機科學 |