談談機器學習與傳統編程之間的區別

翻譯:瘋狂的技術宅
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,二者並不相同。例如軟件工程師必須設計工程。它們涉及生產應用程序、分佈式系統、併發、構建系統、微服務等。而軟件開發人員須要瞭解軟件開發的全部週期,而不只僅是實現(有時甚至不須要任何編程或編碼)。

那麼,你如今感覺到編程和機器學習的不一樣了嗎?我但願本文能夠幫你避免對這些術語產生混淆。毫無疑問,這些人都有一些共同點,那就是技術,但之間的差別要大得多。所以機器學習工程師、軟件工程師和軟件開發人員徹底不可互換。

相關文章
相關標籤/搜索