ACM/TOPCODER類程序設計能力對於想成為機器學習、數據挖掘類演算法工程師的學生來說的意義是什麼?

題主目前一方面在學習PRML類偏機器學習理論類的ML書籍、順路深化理解下用到的數學,一方面在學習《機器學習實戰》類偏實際應用的知識,也喜歡抽時間刷刷OJ,想更清晰的理解OJ、topcoder類的程序練習是在訓練哪方面的能力,對於想成為演算法工程師的CS本科生來說時間性價比是否划算,如果這麼做沒問題應該在刷題的過程中側重培養自己哪方面的能力?

題主目前大二,高中並沒有搞過信息競賽,目前打算今後從事將學術成果初級產品化的工種,應該叫演算法工程師吧,想知道相比於純學術或是純工程,考慮到工業界對這樣的角色的要求。我應該在OJ演算法題、ML理論基礎(包括數學擴展)、DM工程實踐中大概分配什麼樣的時間比?或者重要性、優先順序的關係?再進一層,DM項目的話,kaggle類比賽、跟學校老師做科研、名企實習的優先順序和性價比是什麼樣的呢?希望各位前輩給些學習建議。


我覺得各種online judge上的演算法題與機器學習、數據挖掘等可以算是計算機科學的不同領域。

Online judge上的演算法題強調的是基礎的演算法,如搜索、動態規則、圖論等等。刷演算法題有如下的好處:

1) 提高編碼實現的能力;

2) 學會分析、比較各種演算法時空複雜度,提高對演算法複雜度的敏感性;

3) 如果你參加OI、ACM等比賽,還可以鍛煉編碼的速度;

4) 由於公司面試往往以演算法題為主,所以在面試中可以獲得比較大的優勢。

不過,online judge為了能夠進行標準化的測試,上面的演算法題往往會有如下的局限性:

1) 題目往往要求最優解,而不只是一個較好的可行解;

2) 涉及的演算法大多都是確定性的,不會有隨機性成分;

3) 程序能夠在很短的時間(通常是幾秒鐘)內運行完畢。

實際應用中的演算法,有很多都是不滿足上面的三個條件的。比如機器學習,它常常涉及大數據集,訓練過程跑個幾天甚至幾周都是常事;它的目標函數往往不是凸的,因此無法求最優解,只能求一個較優的可行解;很多訓練演算法有隨機成分,比如模擬退火演算法,以及最常用的梯度下降法的初始化步驟。

所以說,刷演算法題不能代替機器學習、數據挖掘等專門領域的學習和訓練。但是熟練掌握基本演算法,可以掃除學習專用演算法時的各種障礙,讓你能夠專心去理解專用演算法的精髓。具體的精力分配,還需題主自己斟酌。


acm,tc之類,鍛煉的主要是代碼準確性,數學,邏輯能力,基礎演算法數據結構認知的深度和廣度。其中第一項是別的大學生學科競賽遇不著的方向,其他內容都有替代方案。

代碼準確性對任何編程相關的工作都有作用,但是acm中這個屬性屬於必要但大多數時候都不是決定性的(regional金銀分界線處除外)。

數學和邏輯能力涉及範圍廣因而鍛煉方式也很多。當然競賽涉及的更加貼近編程一些,而acm中這個也屬於重點考察範圍。

數據結構演算法認識廣度和深度,顯然有助於學習其它演算法,包括機器學習,主要是輔助。同樣是競賽重點考察範圍。

基本上acm與大多數編程相關工作關係不太大,但其鍛煉的能力是有通用性的。如果不是以regional金牌以上為目標,搞acm的必要性不是特別大。

本人前acm參賽者,不算強但也不渣,多少去過final,現在工作偏向科學計算。


我的體驗是機器學習的研究沒有對錯之分,只有方法是不是合理。

所以比起代碼能力,數學能力等等可以自學的東西,找一個牛B牛B的導師指導你,讓你學會應該怎麼做最重要。


在實際的工作中,從事機器學習相關工作的有四種角色(不一定對,算拋磚引玉吧)

1. 初級工具俠,在了解一定基礎甚至沒有基礎的情況下,按照模型訓練需要的格式處理好數據,輸入, 然後調優,最後離線跑全量數據或者在線實時調用模型

2. 高級工具俠,了解模型,知道多模型融合,模型調優和特徵工程功底爐火純青

3. 工具創造者,跟進最新的研究進展,結合公司具體數據規模和計算資源,將該模型進行工業化,實現大體量數據的快速訓練

4. 模型改造,結合具體業務,對實際的模型的優化目標和優化演算法進行調整,如排序時考慮綜合指標,可以構造多目標排序模型

那麼,題主如果僅僅是想停留在1-2,完全可以在ACM加大氣力,代碼能力提升必然有益於實際的工程能力,再者拿到ACM獎牌對於進頂級互聯網公司也大有裨益,此時本科畢業即可投身業界~

如果想去從事大規模分散式機器學習模型的研究開發,或者將業務和模型玩味的遊刃有餘,可以考慮在ML領域加大投入,當然ACM也不要放棄(代碼能力是終身受用的技能,不管是成為工程師還是科學家),比如刷完PRML之後,把模型寫一遍,然後找准你感興趣的方向(NLP或者RS),找相關的老師做指導,、本科發高水平論文甚至頂會我想也不是不可能。之後申請北美的Master,然後專註領域內研究,畢業進Google或者Facebook從事相關工作,我想也和你本科進BAT的難度差不太多.

大二能開始刷PRML,難能可貴,堅持哦~


應該沒什麼問題,機器學習演算法在實際應用中是比較注重速度的,因此可以注意提高對時間複雜度的控制


我現在是倒著來的,在線筆試編程題都過不了,搞ML基本做夢


這麼說,ICPC和真實工作內容差異比較大,性價比不高。如果硬要競賽的話,按你的目標,不應該參加ICPC,而是KDDCUP。 本人弱渣,大學弄了ACM三年,現在做機器學習,很多知識點都忘記了,簡歷上已刪除這項獲獎經歷(都怕被給問死)。當然,培養思維那又是另外一回事了。

但是如果給我重讀一次大學母校的機會,那我依舊選擇做ACM-ICPC。


Percy Liang

Starford 人工智慧實驗室教授

  • Programming contests: 2nd place at 2002 ACM ICPC World Finals, silver medalist at IOI 2000


肯定是有幫助的,側重點不同不能替代機器學習演算法。不過強大的代碼能力肯定是錦上添花的。雖然現在很多的機器庫可用。但多是單機版的。而機器學習很多都分散式的


推薦閱讀:

演算法工程師有哪些發展前景?
招行信用卡中心研發offer與大眾點評網研發工程師offer 怎麼選?

TAG:演算法 | 機器學習 | 學習方法 | ACM競賽 | 演算法工程師 |