談談機器學習與傳統程式設計之間的區別

dicksonjyl560101發表於2019-05-12
翻譯:瘋狂的技術宅
https://towardsdatascience.co...

clipboard.png

有些人認為 AI 和 ML 被過分誇大了,認為它們只不過是寫一些 if 語句,或者僅僅是和程式設計有關的玩意兒,但我建議你對這些觀點進行仔細的思考和分辨。在本文中,我將對它們涉及到的術語進行比較,並展示這兩個領域的專家之間的區別:他們究竟是做什麼的?軟體工程師、軟體開發人員、機器學習專家、資料科學家......有些人甚至用程式設計師或碼農稱呼他們,有些人甚至可以成為大佬、大師或明星!但是他們真的一樣嗎?如果是這樣的話,那機器學習和傳統程式設計之間究竟有什麼區別?

首先,什麼是機器學習?

clipboard.png

儘管說起來很容易,AI 和 ML 只不過是 if 程式設計,或者更深入一點,它只是簡單的統計資料。我們還能知道些什麼呢? ML 只是一個描述數學 + 演算法的新詞嗎?儘管有時這種簡化似乎很有趣,但很明顯,ML更復雜。

但是讓我們來看一個更合適的解釋。

因此,簡單來說,人工智慧是一個包含其他領域的大筐,如影像處理、認知科學、神經網路等等。機器學習也是這個大筐中的一個組成部分。它的核心思想是:計算機不只是使用了預先編寫的演算法,還學習如何解決問題本身。或者,換句話說,Arthur Samuel 給出了一個很好的定義(他實際上創造了ML的術語):

機器學習是一個研究領域,使計算機無需明確程式設計即可學習。

是的,ML 教一臺機器來解決難以通過演算法解決的各種複雜任務。那些任務是什麼?好吧,你可能已經在實踐中偶然發現了它們。例如它可以是你的手機上的面部識別或語音識別,駕駛汽車(Google自動駕駛汽車),按症狀診斷疾病(Watson),推薦商品(如:書籍(亞馬遜),電影(Netflix),音樂(Spotify) ),個人助理(Siri,Cortana)的功能......這個列表可以列的很長很長。

我希望說得已經足夠清楚了,接下來繼續談論關於 ML 的另一個重要的問題。

任何有效的 ML 技術都可以有條件地歸於三個級別的可訪問性。這是什麼意思?嗯,第一個層面是 Google 或 IBM 等這種科技巨頭的特殊用例。第二個層次是,比方說,具有一定知識的學生可以使用它。而最後一個也就是 ML 可訪問性的第三個層次是甚至一個老奶奶能夠應對它。

我們目前的發展階段是機器學習正處在第二級和第三級交界處。因此藉助這項技術,世界的變化將會日新月異。

關於 ML 最後還有一點點說明:大多數 ML 任務可以分為跟著老師學(監督學習)和沒有老師去教(無監督學習)。如果你想象一個程式設計師一隻手拿鞭子,另一隻手拿著糖,那就有點誤會了。

“老師”這個名字意味著人為干預資料處理的想法。在有老師參與培訓時,這是監督學習,我們有資料,需要在其基礎上預測一些事情。另一方面,當沒有老師進行教學時,這是無監督學習時,我們仍然有資料,但需要自己去找到它的屬性。

好的,那麼它與程式設計有什麼不同?

clipboard.png

在傳統程式設計中,你需要對程式的行為進行硬編碼。在機器學習中,你將大量內容留給機器去學習資料。

所以這些工作內容無法互換:資料工程師無法取代傳統程式設計的工作,反之亦然。儘管每個資料工程師都必須使用至少一種程式語言,但傳統程式設計只是他所做的一小部分。另一方面,我們不能說軟體開發人員正在用 ML 演算法來啟動網站。

ML 不是替代品,而是傳統程式設計方法的補充。例如,ML 可用於為線上交易平臺構建預測演算法,而平臺的 UI、資料視覺化和其他元素仍然用主流程式語言(如Ruby或Java)編寫。

所以最主要的是:ML 被用在傳統程式設計策略無法滿足的場景,而且它不足以獨立完全完成某項任務。

那麼這在實施中意味著什麼呢?我們用一個匯率預測的經典 ML 問題的需求來進行解釋:

傳統的程式設計方法

對於任何解決方案,第一個任務是建立最合適的演算法並編寫程式碼。之後必須設定輸入引數,如果實現的演算法沒問題,將會產生預期的結果。

軟體開發人員如何制定解決方案

clipboard.png

但是當我們要對某些東西進行預測時,需要用到有各種輸入引數的演算法。若要預測匯率,必須新增昨天的匯率的詳細資訊,以及發行貨幣的國家的外部和內部經濟變化等資料。

因此,我們需要設計一個能夠接受一組引數的解決方案,並能夠根據輸入的資料預測新的匯率。

我們需要新增成百上千個引數,用它們的有限集去構建一個非常基本同時不可擴充套件的模型。是的,任何人都很難處理如此龐大的資料陣列。

對於這個任務,我們可以用機器學習方法,那麼它是怎麼做的呢?

為了用 ML 方法解決相同的問題,資料工程師使用完全不同的過程。他們需要收集一系列歷史資料用於半自動模型的構建,而不是自己去開發演算法。

在得到一組令人滿意的資料之後,資料工程師將其載入到已定製的 ML 演算法中。結果會得到一個模型,這個模型可以接收新資料作為輸入並預測新結果。

資料工程師如何用機器學習設計解決方案

clipboard.png

ML 的一個顯著的特點是不需要建立模型。這種複雜但有意義的事由 ML 演算法完成。 ML 專家只會對其做一個小小的編輯。

ML 與程式設計的另一個明顯差異取決於模型能夠處理的輸入引數的數量。為了能夠準確預測,你必須新增數千個引數並以高精度執行,因為每個引數都會影響最終結果。人類很難以合理的方式使用所有這些細節去構建一種演算法。

clipboard.png

但是對於 ML 沒有這樣的限制。只要你有足夠的處理能力和記憶體,就可以根據需要使用盡可能多的輸入引數。毫無疑問,這一事實使得 ML 現在變得如此強大和廣泛。

總結一下:ML專家,資料科學家,程式設計師和軟體工程師......究竟誰是誰?

clipboard.png

根據 Wiki 上的定義,Data Science 是一個多學科領域,它使用科學方法、流程、演算法和系統從結構化和非結構化資料中提取知識和見解。

看上去並不是那麼酷。

但接下來還有一些有趣的東西:

使用最強大的硬體,最強大的程式設計系統,以及解決問題的最有效演算法。

後面還有更有趣的部分:

2012年,“哈佛商業評論”稱其為“21世紀最性感的工作”。

因此資料科學是另一個筐,就像電腦科學一樣,資料科學旨在處理資料並從中提取有用的資訊。

clipboard.png

那麼程式設計呢?現在的資料科學家為了研究的目的而而需要掌握這種技能。他們不僅是程式設計師,也應該具有應用統計或研究背景。有些人還從事軟體工程,特別是在他們的產品中提供資料科學或機器學習技術的公司。最有趣的是,資料科學可以不必程式設計,但是會被限定在 Matlab、SPSS、SAS等工具上。

機器學習工程師的職位是怎樣的?

機器學習工程師的位置更具有“技術性”。換句話說,機器學習工程師與傳統的軟體工程有著比資料科學更多的相同點。

ML 工程師的標準任務通常和資料科學家類似,但是你還需要處理資料,嘗試用不同的機器學習演算法來解決問題、建立原型和現成的解決方案。

我要強調一下關鍵的區別:

  • 一種或多種語言(通常是Python)的強大程式設計技能;
  • 不太重視在資料分析過程中工作的能力,而是更加重視機器學習演算法;
  • 能夠基於現成的庫使用不同的技術,例如,NumPy 或 SciPy;
  • 使用 Hadoop 建立分散式應用的能力等。

現在讓我們回到程式設計並仔細研究分配給程式設計師的任務。

程式設計師實際上就像資料分析師或業務系統開發人員。他們不必自己構建系統,只需針對現有系統編寫鬆散結構的程式碼。是的,我們可以將資料科學稱為新的程式設計浪潮,但編碼只是其中的一小部分。所以不要誤會。

但如果深入挖掘,我們會發現還有其他術語,如 Software EngineerSoftware Developer,兩者並不相同。例如軟體工程師必須設計工程。它們涉及生產應用程式、分散式系統、併發、構建系統、微服務等。而軟體開發人員需要了解軟體開發的所有周期,而不僅僅是實現(有時甚至不需要任何程式設計或編碼)。

那麼,你現在感受到程式設計和機器學習的不同了嗎?我希望本文可以幫你避免對這些術語產生混淆。毫無疑問,這些人都有一些共同點,那就是技術,但之間的差異要大得多。因此機器學習工程師、軟體工程師和軟體開發人員完全不可互換。

相關文章