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 LiangStarford 人工智慧實驗室教授
- Programming contests: 2nd place at 2002 ACM ICPC World Finals, silver medalist at IOI 2000
肯定是有幫助的,側重點不同不能替代機器學習演算法。不過強大的代碼能力肯定是錦上添花的。雖然現在很多的機器庫可用。但多是單機版的。而機器學習很多都分散式的
推薦閱讀: