實際工作中,演算法工程師需要哪些技能?
- 2020 年 2 月 23 日
- 筆記
對機器學習感興趣是一回事,實際上開始在現場工作是另一回事,實際中,真正開始從事機器學習工程師工作的整體思維方式和具體技能,又是怎樣的呢?
需要了解
如果你正在考慮一個機器學習工程師的職業生涯,那麼你應該明白兩件非常重要的事情。
首先,這不是一個「純粹的」學術角色。你不一定要有研究或學術背景。
其次,只有軟體工程或數據科學的經驗還不夠。理想的情況下,你需要同時擁有這兩種技能。
了解數據分析師和機器學習工程師之間的差異也至關重要。簡單來說,他們關鍵的區別與最終目標有關。作為數據分析師,您需要分析數據,以便講述故事,併產生可操作的見解。重點是傳播圖表,模型,可視化。分析由人類執行並呈現給其他人,然後他們可以根據所呈現的內容進行業務決策。這一點尤為重要 – 您的輸出的「觀眾」是人。
另一方面,作為機器學習工程師,您的最終「輸出」是工作軟體,您的「受眾」對於此輸出通常由其他軟體組件以最少的人力監督自主運行。產生出的智慧仍然是可操作的,但在機器學習模型中,機器正在做出決策,影響產品或服務的行為。這就是為什麼軟體工程技能對於機器學習的事業來說非常重要。
理解生態
在進入具體的技能之前,還有一個要解決的概念。作為機器學習工程師需要了解您正在設計的整個生態系統。假設您正在為一家雜貨連鎖店工作,該公司希望根據以往購買客戶的歷史記錄開始發行目標優惠券,目的是產生購物者實際使用的優惠券。在數據分析模型中,您可以收集採購數據,進行分析以確定趨勢,然後提出策略。機器學習方法將是編寫自動優惠券生成系統。但是寫這個系統需要什麼,並且有效嗎?您必須了解整個生態系統的庫存,目錄,定價,採購訂單,單據生成,銷售點軟體,CRM軟體等。
現在,我們來了解一下機器學習工程師所需要的真實細節。分為三個主要部分:技能摘要,語言和庫,工程實現。
技能摘要
電腦基礎和編程。電腦科學基礎對於機器學習工程師來說重要,包括數據結構(堆棧,隊列,多維數組,樹,圖等),演算法(搜索,排序,優化,動態規劃等),可計算性和複雜性(P vs NP,NP完整問題,大O符號,近似演算法等)和電腦體系結構(記憶體,快取,頻寬,死鎖,分散式處理等)。
編程時,您必須能夠應用,實施,調整或解決它們(如適用)。練習問題和編碼比賽是磨練你的技能的好方法。
概率統計。概率(條件概率,貝葉斯規則,似然性,獨立性等)和從其衍生的技術(貝葉斯網路,馬爾可夫決定過程,隱馬爾可夫模型等)的形式表徵是許多機器學習演算法的核心; 這些是處理現實世界不確定性的手段。
統計學領域提供各種措施(平均值,中位數,方差等),分布(統一,正態,二項式,泊松等)和分析方法(方差分析,假設檢驗等) 這是從觀測數據建立和驗證模型所必需的。許多機器學習演算法本質上是統計建模過程的擴展。
數據建模和評估。數據建模是估計給定數據集的基礎結構的過程,其目的是找到有用的模式(相關性,聚類,特徵向量等)和/或預測以前看不見的實例(分類,回歸,異常檢測等)的屬性。這個估計過程的關鍵部分是不斷評估給定模型的好壞。
根據手頭的任務,您將需要選擇適當的準確度/誤差測量(例如分類的對數損失,回歸的平方誤差等)和評估策略(訓練分析,順序 vs.隨機交叉驗證等)。
迭代學習演算法通常直接利用產生的錯誤來調整模型(例如神經網路的反向傳播),所以理解這些措施相比於僅僅應用標準演算法是非常重要的。
應用機器學習演算法和庫
機器學習演算法的標準實現通過庫/包/ API廣泛提供(例如,scikit-learn,Theano,Spark MLlib,H2O,TensorFlow等),但是有效地應用它們涉及選擇合適的模型(決策樹,最近鄰,神經網路,支援向量機,混合模型等),擬合數據的學習過程(線性回歸,梯度下降,遺傳演算法,bagging,boosting和其他模型特定方法),以及了解超參數如何影響學習。
還需要了解不同方法的相對優點和缺點,以及一些其他的概念(偏差和方差,過擬合和欠擬合,缺失數據,數據泄漏等)。數據科學和機器學習的挑戰,如Kaggle的挑戰,是一個接觸不同種類的問題及其細微差別的很好的方式。
軟體工程和系統設計
在任務結束時,機器學習工程師的典型輸出或可交付成果是軟體。通常它是一個適合更大的產品和服務生態系統的小部件。當然,大的公司,這部分可能交付給軟體研發工程師來做。
您需要了解這些不同的部分如何協同工作,與他們進行溝通(使用庫調用,REST API,資料庫查詢等),並為您的組件構建適合的介面以供其他人依賴。這可能需要謹慎的系統設計以避免瓶頸,並且隨著數據量的增加,您的演算法可以很好地擴展。軟體工程最佳實踐(包括需求分析,系統設計,模組化,版本控制,測試,文檔等)對於生產力,協作,品質和可維護性是無價的。