當前位置:
首頁 > 最新 > 做 ML 有關的工作,需要哪些技能?

做 ML 有關的工作,需要哪些技能?

編譯: Python開發者 - Agatha

http://blog.jobbole.com/113592/

【導讀】:有位網友在 Quora 上提問:做與機器學習有關的工作,需要些什麼技能呢?

我是一個自學者,現在家中自學線性代數。希望有天能在機器學習領域工作,但是我不太確定:

a) 這種工作/面試需要什麼技術上的技能?

b) 有沒有什麼(做這種工作)必須的相關工作經歷

比起空想,我至少開始行動了。任何的建議/指導對我來說都很有用。十分感謝!

本文摘編了 2 位 Quora 網友的回答。

Jonathan A. Cox(機器學習和應用物理研究人員)的回答:

這裡有很多回復都提到了一些創業公司常用的工具。值得注意的是,在你 35 歲以上的職業生涯中,這些工具會變得完全不同。所以最好的辦法是熟悉基本概念和數學。

其次,機器學習領域太過繁雜,根本不可能真正深入理解幾十種不同的演算法。我覺得你可以先深究幾個最有前景的演算法。說是這麼說,你也要很了解一些基礎的東西才行,比如說樸素貝葉斯、支持向量機、感知器、決策樹。

最後,很多創業公司,或者非研究領域的人會告訴你要專註於那些快要老掉牙的演算法(比如支持向量機 (SVM))和大數據的資料庫工具(比如說Hadoop)。考慮到你剛剛起步,我覺得你可以專註於那些很快會發展起來的架構:神經網路,單指令流多數據流(SIMD)向量計算(比如說GPU)。神經網路最近 10 年內開始革命性地顛覆自然語言處理、機器視覺、語音識別和其他領域。鑒於它的強大,這個影響還會繼續下去。

綜上,我會選擇諸如 GPU 加速這類演算法來自學和實現,再加一些分散式資料庫的知識。以下是值得考慮的演算法:

1. 深度置信網或者層疊降噪自動編碼機 / Deep Belief Nets or Stacked Denoising Autoencoders

2. 卷積神經網路(CNN)

3. 長短記憶(LSTM)時間遞歸神經網路

4. 結構遞歸神經網路(通常用於自然語言處理)

5. word2vec 神經網路以及相關通過上下文學習詞語的相關演算法

另外一個很有前景的領域是強化學習,尤其是 Deep Mind 的 Q-learning。當你用到延遲獎勵功能(比如玩 Atari 遊戲時的得分),並且不能在你的網路中直接計算參數梯度時,你會用到強度學習。當你熟悉了上述的演算法之後,你大約會想探索一下這個領域。這個領域跟機器人以及,更現實一點,關於人和動物是怎麼學習的模擬,很有關聯。

補充:我現在有這樣的想法:過去的一年中,結合不同的神經演算法,得到一個「深度「系統的方法逐漸顯露出重大進步;因為這個方法的整體大於它的組成部分。鑒於奠基石已經鋪下,我預計最顯著的進步很可能會落在這個方向。一定程度上,細緻整頓整個系統之前訓練好個體模塊,以及更快的計算群讓這種進步成為了可能。(然而我們仍會在單個的演算法中看到進展。)

換句話說,現在結合了卷積神經網路和多層感知器(MLP)的 LSTM,可以做到用句子描述圖像之類的事情(來源:Goolge/Stanford)。類似地,已經有了具備強化學習能力的卷積神經網路和 MLP 組成的 Atari 遊戲競技網路。

往這個清單加上新東西同樣很容易:把通過 word2vec/GloVe/skip-gram 訓練出來的詞向量輸送給這樣的複合網路,或者甚至是用遞歸神經網路訓練的情感分析層。

有了神經網路和反向傳播,在任意幾何體上結合/疊加層,以及把組合作為整體系統來訓練都變得容易了,它們可以擴展出強大的能力。

由許多不同種類的神經網路組成,用各種技術連接在一起,單獨訓練,協同微調,這些混合系統將繼續向我們展示充滿戲劇性的新能力。

二、Joseph Misiti 的回答分享,4400+ 頂

個人認為,以下是部分必需技能:

更新:我在 Github 創建了一個 repo,裡面有上百的資源鏈接能夠幫你起步。

https://github.com/josephmisiti/awesome-machine-learning

1. Python/C++/R/Java

假如你想在機器學習領域裡找一份工作,你大概遲早要學會這些語言。Python 的 Numpy 和 Scipy 庫 [2] 非常有用,因為這些庫不僅有跟 MATLAB 相似的功能,而且將其整合進Web Service,或者在 Hadoop(見下)里使用的時候也十分簡單。在加快代碼運行速度的時候會用到C++。R [3] 在統計和畫圖的時候非常好用。Hadoop [4] 是用 Java寫的,所以當你實現 mappers 和 reducers 的時候可能需要用到 Java(雖然你也可以通過 Hadoop streaming [5] 使用腳本語言)。

2. 概率和統計

學習演算法里的很大一部分都基於概率和統計理論,比如說樸素貝葉斯 [6]、高斯混合模型 [7]、隱 Markov 模型 [8]。 想要理解這些模型,就需要紮實的概率和統計功底。測度論 [9] 怎麼拚命學都不過分。把統計作為模型的評價指標,比方說混淆矩陣、ROC 曲線、p值等等。

3. 應用數學和演算法

對於 SVM [10] 這些判別模型,就需要演算法理論的紮實基礎了。即便你不需要從頭開始實現SVM,學習演算法理論也可以幫助你理解演算法。需要學習的東西有凸優化 [11],梯度下降 [12],二次規劃 [13],拉格朗日 [14],偏微分方程等等。要習慣看求和符號 [16]。

4. 分散式計算

如今大部分的機器學習工作都要求使用大型數據集(見《數據科學》)[17]。處理這些數據並不能憑藉一台機器,而是需要把工作分派給整一個集群。像 Apache Hadoop [4] 這樣的項目和亞馬遜的 EC2 [18] 這樣的雲服務就能以合理的成本方便地處理這些數據。雖然 Hadoop 把很多硬核的分散式計算問題隱去了,對 map-reduce [22] 和分散式文件系統 [19] 等方面有透徹的理解還是十分必要的。Apache Mahout [20] 和 Apache Whirr [21] 也很值得一看。

5.精通 Unix/Linux 工具

除非你運氣好,不然你總是需要修改你數據集的格式來載入到 R、Hadoop、HBase 等。Python這些腳本語言(使用 python 里的 re)也能用來完成這個事情,但是最好的方法大約還是掌握專門為此設計的 unix 工具:cat [24]、grep [25]、find [26]、awk [27]、sed [28]、sort [29]、cut [30]、tr [31]等。因為最有可能在基於 Linux 的機器上處理這些數據(我記得 Hadoop 並不能在 Windows 上運作),你一定可以用到這些工具。要學會熱愛並儘可能地使用這些工具。這些工具讓事情簡單多了,比如這個例子 [1]。

6.熟悉Hadoop的子項目

HBase、Zookeeper [32]、Hive [33]、Mahout 等。這些項目可以儲存或讀取數據,而且他們可擴展。

7. 了解高級信號處理的技術

特徵提取是機器學習最重要的部分之一。如果你的特性提取得不好,那不論你使用什麼演算法,性能都不會好。根據具體情況,你可能可以應用一些很酷炫的高級信號處理演算法,比方說 wavelets [42]、shearlets [43]、curvelets [44]、contourlets [45]、bandlets [46]。了解並嘗試應用時間-頻率分析方法 [47]。如果你還沒有了解傅里葉分析和卷積的話,這些東西也值得學習。後面提到的這倆是信號處理的基礎知識。

最後,盡量多練習、多閱讀。有空的時候可以讀讀像 Google Map-Reduce [34]、Google File System [35]、Google Big Table [36]、The Unreasonable Effectiveness of Data [37] 上的論文。網上也有很多關於機器學習的好書的免費資源,這些也應該多讀。[38][39][40] 我找到了一個很好的課程,並且在轉發到Github了 [41]。與其直接使用開源的擴展包,不如自己寫一份並且對比結果。如果你能從頭寫一個支持向量機,你就會明白像支持向量、gamma、cost、hyperplanes 等的概念。載入數據並開始訓練並不難,難的是理解這所有的概念。

祝好運!

前文提到的參考鏈接:

提醒:

1. 微信中不支持外鏈,並且網址很多,手機端閱讀體驗不好;

2. 推薦收藏本文,在網頁版(http://blog.jobbole.com/113592/)跳轉查看。

[1] http://radar.oreilly.com/2011/04…

[3] http://www.r-project.org/

[5] http://hadoop.apache.org/common/…

[6] http://en.wikipedia.org/wiki/Nai…

[7] http://en.wikipedia.org/wiki/Mix…

[8] http://en.wikipedia.org/wiki/Hid…

[9] http://en.wikipedia.org/wiki/Mea…

[10] http://en.wikipedia.org/wiki/Sup…

[11] http://en.wikipedia.org/wiki/Con…

[12] http://en.wikipedia.org/wiki/Gra…

[13] http://en.wikipedia.org/wiki/Qua…

[14] http://en.wikipedia.org/wiki/Lag…

[15] http://en.wikipedia.org/wiki/Par…

[16] http://en.wikipedia.org/wiki/Sum…

[17] http://radar.oreilly.com/2010/06…

[18] http://aws.amazon.com/ec2/

[19] http://en.wikipedia.org/wiki/Goo…

[21] //incubator.apache.org/whirr/

[22] http://en.wikipedia.org/wiki/Map…

[24] http://en.wikipedia.org/wiki/Cat…

[25] http://en.wikipedia.org/wiki/Grep

[26] http://en.wikipedia.org/wiki/Find

[27] http://en.wikipedia.org/wiki/AWK

[28] http://en.wikipedia.org/wiki/Sed

[29] http://en.wikipedia.org/wiki/Sor…

[30] http://en.wikipedia.org/wiki/Cut…

[31] http://en.wikipedia.org/wiki/Tr_…

[34] http://static.googleusercontent….

[35]http://static.googleusercontent….

[36]http://static.googleusercontent….

[37]http://static.googleusercontent….

[38] http://www.ics.uci.edu/~welling/…

[39] http://www.stanford.edu/~hastie/…

[41] https://github.com/josephmisiti/…

[42] http://en.wikipedia.org/wiki/Wav…

[44] http://math.mit.edu/icg/papers/F…

[47 ]http://en.wikipedia.org/wiki/Tim…

[48] http://en.wikipedia.org/wiki/Fou…

[49 ]http://en.wikipedia.org/wiki/Con…

提醒:

1. 微信中不支持外鏈,並且網址很多,手機端閱讀體驗不好;

2. 推薦收藏本文,在網頁版(http://blog.jobbole.com/113592/)跳轉查看。

看完本文有收穫?請轉發分享給更多人

關注「大數據與機器學習文摘」,成為Top 1%


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 大數據與機器學習文摘 的精彩文章:

TAG:大數據與機器學習文摘 |