理論、演算法、工具、實踐在機器學習/DM工程師的學習成長過程不同階段分別應占什麼比例?扮演什麼角色?

本題已加入知乎圓桌 ?「機器學習 · 學以致用」,更多「機器學習」相關話題討論歡迎關注。

1.自己是從演算法入門的PRML、andrew的cousera課程等來源,也寫過一些基礎演算法的腳本。

2.之後接觸了一些理論(演算法的合理性、演算法之間的關係、背後相通的模型···)。

3.了解了一些工具(分散式工具、爬蟲工具、NLP工具、caffe、torch···)。

4.正在整理(準備上手)一些kaggle案例。

學弟今年大三 打算混工業界 NLP、DM、IR方向

現在對他們的性質 和 應花費的精力 有一些問題想向各位前輩請教:

1.有時候會聽人吐槽 「DM、ML不就是選選特徵、調調參數」 ,有時會覺得是實踐性很強的東西,複雜的演算法或許在工程上價值不高, 那麼理解演算法,甚至深入了解理論基礎 【功利的來講】 是否有意義?意義何在?

2.對各種工具的學習,是應該順其自然,在項目中用到再說,還是先理解掌握再考察項目?有時候感覺割裂開項目學工具,很空泛,但是遇到項目再學工具,又恐有認識上的偏差。

3.題外話,有時候覺得這個方向創造的價值很間接,應該是我還沒有很好的理解,學弟想了解這個方向價值創造的方式和原理。


每個專業領域 說到底都是專業知識加通用分析能力的結合 高手和普通人的差別絕對能是幾十倍到上百倍 工程中重要的東西 你在學校里很多學不到 所以好好把握你現在能學到的東西 都挺有用 好好學就是了 功不唐捐

理論有用嗎?有兩個用途

1 學了理論之後不會被各種模型的表面差別所迷惑 更敢於採用簡單的模型 使用複雜模型的時候 也更清楚自己獲得了什麼 又犧牲了什麼

2 可以跟上學界的發展 領先別人一步 deep learning火的時候 你先別人一步做出來 那就是升官發財 晚一步沒人在乎

除了理論之外,這個領域是不是很淺?絕對不是

Dm/ml入門的專業知識是什麼?說的最粗淺一點那就一文不值 就是給你一個能夠自動調參的模型 常見的就那麼幾個 10分鐘入門 稍微複雜一點也不過就是知道避免overfitting

這些確實簡單。

但是我想要介紹一系列的其他知識與能力。越來越不是狹隘的dm/ml,但是很重要

1 對模型的應用化理解。複雜的模型有沒有用?有用。但往往和論文講的不一樣。比如對於我來說深度學習最重要的不是能夠刷個記錄,提高几個點。因為提高那幾個點很多時候公司不在乎。對我來說重要的是幾個東西 首先,免去了自己手寫feature,這對於我的工作效率就是幾十倍的提升。其次,避免了一堆dependency,nlp中一個word embedding的效果有的時候可以避免我使用別人的tagging工具 領域相關的詞典 真的發布產品的時候麻煩事少很多 再次是速度。lr要實現深度學習同樣的效果往往要升維 unigram bigram trigram,我的模型存放在一個和查詢次數成正比的系統里,升維帶來的查詢次數增加 直接就導致我的模型發布不出去 性能瓶頸全在這了

2 通用的數據分析工具和數據可視化工具和習慣。好好學pandas和matplotlib。他們簡單的要死,但是請一定練習到形成下意識反應。就是因為數據分析不熟練,好多人喜歡拿具體例子說話,這非常不科學,絕對會誤導你。

3 良好的編程習慣。不要手工做事,盡量寫代碼。不要寫一堆用了就扔的代碼,多總結,盡量抽象出可重用的代碼。日積月累,很多事情你隨便寫兩行代碼就搞定了,別人要麼就花幾十倍的時間,要麼就出於畏難而不做。但是簡單的事情誰都會做,難做的事情里才有不同的風景。

4 分析問題的能力。這個能力我也不知道怎麼練。多想吧

5 對美的追求。機器學習領域裡面有一個很少聽人談論的東西就是模型的優雅程度。你亂加feature,加了幾十個feature後模型就不可理解了,然後你再也無法提升這個模型了。怎麼正確的分解問題,抽取子模型,怎麼乾淨的做事,遵循軟體工程中的kiss原則,減緩模型中的壞味道,這是工程實踐中的重要經驗。這也是我喜歡深度學習的原因,簡單可理解。

6

至於工具的學習 你感覺到用途就學 學的下去就學 學不下去就拉倒 項目中用上了 只鱗片爪的學一點 真覺得有用了 擠出時間也要系統的學一下 並無一定之規


1. 混工業界做應用,理解業務本身,是投入產出比最高的。你通過理解,抽出有用的特徵,效果往往要比直接塞給機器要好得多,出成果也快得多。

2. 理論的理解程度,決定了你的天花板高度。不說很深刻的理解,可能是某種程度的理解就可以讓你少做很多工作而得到比較理想的結果。你理解得越淺知道得越少,為了達到同等的效果,實驗的次數就要越多;理解得越深知道得越多,你就可以直接猜到(有理有據的推測)很多實驗的結果,就不用去試了,技術選型直接就比你優、無腦調參和試模型的工作量比你少。我用更低的成本和少得多的時間就可以完爆你的效果。

對於工具,如果你懂理論,自己寫工具都不難何況學工具。對於較通用和預測未來使用概率較高的工具,平時抽時間掌握是值得的。對於比較專用的比較低頻使用的工具,當然是一邊做項目一邊熟悉會比較值得。這要是靠自己平衡。再重複前面說的,懂理論再學工具是很低成本的。反過來,如果理論零理解而企圖通過學習工具去學習理論,這條路是很難走的。

關於創造價值很間接的問題。金融行業都是間接創造價值的,但是賺錢比什麼行業都多。

而且像廣告這些演算法,已經好直接了啊,你今晚優化了演算法,明天賺的錢就多了。還有那些購買預測之類的,直接就影響庫存成本、營銷成本。這些都是影響決策的,而且離現實數據又那麼近,所 以你是離老闆和用戶都很近,你站的角度就會高得多,思考問題的角度就會高得多。

說回創造價值間接的問題,在過去的大組織方式下,離創造價值近的往往離分享價值遠,一線員工創造價值,老闆和管理層卻分享更多價值;搞生產的也賺不過搞金融的。


DM的實踐性很強,數據處理、做feature、調參都是必不可少的,其實這些東西也不枯燥,都是和現實非常貼近的,很有樂趣。

理論也非常重要,有了足夠的理論知識,該放什麼樣的數據,該用什麼模型,會出來什麼結果,都會心裡有數。

工具應該通過實踐來學習,否則和實際應用會有差距。可以特意在實踐中用一些平常自己不會用的工具,脫離自己原本熟悉的工具。


推薦閱讀:

演算法研究屬於數學專業還是計算機專業?
當初的生物熱,和如今的全民CS全民AI,讓你想到了什麼?
情感分類(sentiment classification)推薦使用什麼演算法和軟體包?
如何用通俗的語言解釋CTR和推薦系統中常用的Feature Hashing技術以及其對應的優缺點?
darknet源碼該如何解讀?

TAG:數據挖掘 | 機器學習 | 自然語言處理 | 學習方法 | 演算法工程師 |