1. 程式人生 > >人工智慧工程師學習路線及具備的5項基本技能

人工智慧工程師學習路線及具備的5項基本技能

摘要

學習路線

這裡寫圖片描述

你是否對機器學習充滿興趣呢?其實到目前為止,每天有越來越多的工程師開始將好奇的目光轉向機器學習領域。實際上,你會發現現在沒有哪一個領域比機器學習能引起更多的曝光率和關注度。機器學習已經以一種高調姿態闖入廣大民眾的意識當中,無論是採用機器學習等相關技術的Google AlphaGo以5局4勝的戰績打敗人類世界的圍棋冠軍,還是採用了機器學習技術的Twitter能夠鑑定是否你在酩酊大醉的時候釋出了推文,無論你通過怎樣的方式發現並知道機器學習技術的存在,有一件事不言而喻:機器學習的時代已經到來。 
這裡寫圖片描述

儘管機器學習技術看起來這般神器,但是對於機器學習技術的好奇心是一碼事兒,而想要讓該技術在相關產業當中發揮作用實際上又是另外一碼事兒。這篇文章將會幫助你瞭解作為一名機器學習工程師具備怎樣的思維方式以及需要什麼樣的專業技能才可以開展工作。 
如果你正在考慮投身機器學習工程師的職業生涯,那麼在一開始的時候,你必須弄清楚兩件非常重要的事情。首先,機器學習工程師的崗位並不是一個“純粹的”學術角色,你不需要具備科學研究經驗或者專業的學術教育背景。其次,如果你僅僅具備軟體工程師的能力或者僅僅具備資料科學的經驗還遠無法成為一名合格的機器學習工程師,除非你同時掌握以上兩方面的技術經驗。

資料分析 Vs. 機器學習工程師

如果想成為一名機器學習工程師,那麼你必須弄清楚前者和資料分析師之間的區別,而且這非常重要。簡單來講,兩者之間最為關鍵的區別就是他們最終的目標大相徑庭。作為一位資料分析師,你的主要職責就是分析資料,並從這些抽象的資料當中提煉出具體的能讓大家明白的故事,並從中產生具有可行性的洞察。資料分析工作的重點就是向公眾傳播並展示圖表、模型已經視覺化效果。資料的分析和展示由人類執行,並且其他人會根據你展示的資料做出商業決策。尤其是這一點必須引起你足夠的重視——你資料分析後產生的結果的“受眾”是人。但是從機器學習工程師的角度來看的話,他們最終輸出的結果是一種可以工作的軟體(而不是你一路以來建立的分析結果或者視覺化圖形),並且你所輸出結果的“受眾”通常由其他軟體外掛組成,只需很少在少量人力勞動的監護下這些軟體外掛就可以自行運轉。軟體的智慧性意味著可行性,但是在機器學習模型中,決策的制定由系統來決定,並且系統可以影響產品或者服務的行為方式。這就是軟體工程技術為什麼對機器學習工程師而言如此重要。 
  

Understanding The Ecosystem——弄懂軟體的生態系統

在你開始著手學習具體技能之前,我還要再向大家闡明另外一個概念。成為一名機器學習工程師必須要求你自己能夠清楚地瞭解你所設計的整個軟體系統。 
  讓我們打個比方,如果你正在為一個連鎖店專案工作,並且公司需要根據客戶以往的購買歷史開始有針對性的發放優惠券,目的是想生成能夠讓消費者可以實際使用的優惠券。在資料分析模型當中,你可以收集消費者的採購資料,對這些資料分析之後可以觀察出消費者的採購行為趨勢,並據此提出響應的策略。機器學習的方法是編寫一個可以自動生成優惠券的系統。但是學習採取什麼方式才能編寫出這樣一種系統呢?這種方式奏效嗎?你不得不去通盤瞭解專案開發所處的生態系統——包括商品庫存、商品類目、價格、採購訂單、銷售點終端軟體、CRM管理系統等等。 
  歸根結底,專案的處理流程和機器學習演算法的理解關係不大,或者和應用他們的方式和時間也沒有太多關係,但是卻需要你能夠對系統的相互關聯性有很深入的瞭解,並需要你可以成功編寫一個具有高度整合和介面功能的軟體。請切記,機器學習輸出的結果實際上是一個可以有效執行的軟體! 
  現在,就讓我們開始瞭解成為一名機器學習工程師所需要注意的各種細節方面的事宜。我們會把這些資訊分成兩個基本點進行闡述:技能簡介以及語言和庫。首先我們將從技能介紹開始,在日後的內容中我們將介紹機器學習的語言和庫。

技能簡介

1. Computer Science Fundamentals and Programming

電腦科學基礎和程式設計

對機器學習工程師而言,電腦科學基礎的重要性包括資料結構(資料堆疊、佇列、多位陣列、樹形以及影象等等)、演算法(搜尋、分類、優化、動態程式設計等)、科計算性與複雜性(P對NP、NP完全問題、大O符號以及近似演算法等)和計算機架構(儲存、快取、頻寬、死鎖和分散式處理等等)。 
  當你在程式設計的時候必須能夠對以上提到的這些基礎知識進行應用、執行、修改或者處理。課後練習、編碼競賽還有黑客馬拉松比賽都是你不可或缺的磨練技能的絕佳途徑。 
  

2. Probability and Statistics

概率論和數理統計

概率的形式表徵(條件概率、貝葉斯法則、可能性、獨立性等)和從其中衍生出的技術(貝葉斯網、馬爾科夫決策過程、隱藏式馬可夫模型等)是機器學習演算法的核心,這些理論可以用來處理現實世界中存在的不確定性問題。和這個領域密切相關的還有統計學,這個學科提供了很多種衡量指標(平均值、中間值、方差等)、分佈(均勻分佈、正態分佈、二項式分佈、泊松分佈等)和分析方法(ANOVA、假設實驗等),這些理論對於觀測資料模型的建立和驗證非常必要。很多機器學習演算法的統計建模程式都是可以擴充套件的。

3. Data Modeling and Evaluation

資料建模及評估

資料建模就是對一個給定的資料庫的基本結構進行評估的過程,目的就是發現其中所蘊含的有用模式(相互關係,聚合關係、特徵向量等)和/或者預測以前案例(分類,迴歸、異常檢測等)的特徵。評估過程的關鍵就是不斷地對所給模型的優良效能進行評價。根據手中的任務,你需要選取一種恰當的精準/誤差衡量指標(比如日誌分類的損失、線性迴歸的誤差平方和等等)和求值策略(培訓測試、連續Vs. 隨機交叉驗證等)。通過對演算法的反覆學習,我們可以發現其中會存在很多誤差,而我們可以根據這些誤差對模型(比如神經網路的反相傳播演算法)進行細微的調整,因此即使你想能夠運用最基本的標準演算法,也需要你對這些測量指標有所瞭解。 
  

4. Applying Machine Learning Algorithms and Libraries

應用機器學習演算法和庫

儘管通過程式庫/軟體包/API(比如scikit-learn,Theano, Spark MLlib, H2O, TensorFlow等)可以廣泛地實現機器學習演算法的標準化執行,但是演算法的應用還包括選取合適的模型(決策、樹形結構、最近鄰點、神經網路、支援向量機器、多模型整合等)、適用於資料的學習程式(線性迴歸、梯度下降法、基因遺傳演算法、袋翻法、模型特定性方法等),同時還需要你能夠了解超引數對學習產生影響的方式。你也需要注意不同方式之間存在的優勢和劣勢,以及那些可能會讓你受牽絆的大量陷阱(偏差和方差、高擬合度與低擬合度、資料缺失、資料丟失等)。對於資料科學和機器學習所帶來的這些方面的挑戰,大家可以去Kaggle網站獲取很多學習參考,你可發現不同的問題當中存在的細微差別,從而可以讓你更好的掌握機器學習的演算法。

5. Software Engineering and System Design

軟體工程和系統設計

在每天工作結束的時候,機器學習工程師通常產生的成果或者應交付的產品就是一種軟體。這種軟體其實也是一種小型外掛,它可以適用於相對更大型的產品或者服務的生態系統。你需要很好地掌握如何才能讓這些彼此不同的小外掛協同工作,並與彼此進行流暢的溝通(使用庫函式呼叫、資料介面、資料庫查詢等)的方法,為了讓其他的外掛可以依附你的外掛進行很好的工作,你也得需要為你的差價建立合適的介面。精心設計的系統可以避免以後可能出現的瓶頸問題,並讓你的算法系統滿足資料量激增時候的擴充套件效能。軟體工程的最佳的實踐經驗(需求分析、系統設計、模組化、版本控制、測試以及歸檔等)對於產能、協作、質量和可維護性而言是不可獲取的無價之寶。

Machine Learning Job Roles——機器學習的工作角色

由於現在越來越多的公司開始嘗試採用新興技術為自己挖掘更多的利潤,於是和機器學習相關的崗位需求也在不斷的增加。下面這幅圖片為大家展示了和資料分析師相比,對於一名典型的機器學習工程師而言,相對重要的核心技能包含以下內容: 
這裡寫圖片描述

The Future of Machine Learning——機器學技術的發展展望

機器學習工程師最讓人慾罷不能的特徵或許就是這個崗位角色擁有看起來無所不能的廣泛適應性。包括教育行業、電腦科學還有更多領域在內的很多行業已經受到了機器學習的積極影響。實際上你會發現沒有哪個領域不會應用機器學習技術。對於某些行業案例而言,他們對機器學習技術有極其迫切的需求。健康醫療產業就是一個顯而易見的例子。機器學習技術已經在健康醫療長夜中的很多重要領域得到了廣泛的應用,無論是致力於減少護理差異,還是醫學掃描分析,機器學習技術正在潛移默化地為這些領域帶來改變。來自紐約大學的數學科學克朗學院和資料科學中心的助理教授David Sontag先生最近發表了關於機器學習技術和健康醫療系統的演講,在演講中他討論了機器學習是如何通過自己的潛力改變了整個醫療產業。 
  毫無疑問,這個世界正在發生著快速和戲劇性的轉變。對於機器學習工程師的需求正在呈現指數型的增長趨勢。世間充滿了複雜的挑戰,並因此需要更加複雜的系統才可以將這些挑戰迎刃而解。而機器學習工程師們就是可以建造這些系統的最佳人選。如果你的未來需要藉助機器學習技術獲得更好的發展,那麼此時此刻就是你邁出腳步掌握相關技能並開發你思維的最佳時機!