中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

深度揭秘:機器學習對軟件開發(fā)帶來哪些影響?

2019-04-08    來源:raincent

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

機器學習有望從根本上改變軟件開發(fā)的本質,這也許是自FORTRAN和LISP被發(fā)明以來軟件開發(fā)領域改變最大的一次。這些變化對數百萬正在從事軟件開發(fā)的人而言,意味著什么呢?失業(yè)?裁員?現有的軟件開發(fā)將變得面目全非?

 

fractal_1280081_1920_crop_325b83619dd2106a199b87e2443c9aee

 

自20世紀70年代以來,我們盡可能的構建了足夠多的軟件。我們有高級語言,低級語言,腳本語言以及用于構建和測試軟件的工具,但我們利用這些工具做的事情卻沒有發(fā)生太大變化。我們現在擁有的語言和工具比50年前要好得多,但它們本質上是一樣的。我們仍然使用代碼編輯器,但這些編輯器變得更花哨了:他們有彩色的高亮,變量名補全,它們有時可以幫助我們完成重構等任務,但他們仍然是emacs和vi的后代。面向對象編程代表了一種不同的編程風格,但從某種本質上而言并不是“全新”的事物,對于函數式編程我們可以一直追溯到50年代。

未來我們將專注于機器學習而不是人工智能。機器學習曾經被稱為“AI最管用的那一部分”,更重要的是,“機器學習”這種提法可以避開類似“通用智能”這種叫法。因為這樣的系統(tǒng)目前不存在,并且可能永遠不存在,目前來看只有人類才能做到這一點。而機器學習可能只比模式識別多一點點,但我們已經看到模式識別可以完成很多工作。實際上,手工編碼的模式識別是我們當前工具集的核心:這真的是現代優(yōu)化編譯器所正在做的。

麥肯錫估計“使用現有技術,只有不到5%的職業(yè)可以完全自動化。然而,大約有60%的職業(yè)工作活動中,具有30%或更多的組成部分能夠被自動化。”軟件開發(fā)和數據科學不會成為完全被自動化的職業(yè)之一。但優(yōu)秀的軟件開發(fā)人員一直在尋求對于繁瑣,重復的任務的自動化,毫無疑問,軟件開發(fā)本身將日益變得可以被自動化。這并不是一個激進的愿景,因為我們在過去的半個世紀里持續(xù)的為了自動化工具而努力。編譯器對編寫機器代碼的過程進行了自動化。腳本語言通過將更大,更復雜的程序粘合在一起來自動執(zhí)行許多枯燥無味的任務。軟件測試工具、自動部署工具、容器和容器編排系統(tǒng)等等,這些都是為了對開發(fā)、部署、管理軟件系統(tǒng)的過程進行自動化的工具。而且這些都沒有利用機器學習,但這肯定是下一步它們要做的。

機器學習會不會吞并軟件?

畢竟,“軟件吞噬世界”是一個日益抽象和普遍化的過程。筆記本電腦,手機或智能手表已經逐漸取代收音機,電視機,鎖和鑰匙,電燈開關,這是因為我們并沒有將計算機僅僅看成數字計算器而是通用機器。從這個角度來看,很容易將機器學習想象成下一個抽象層次,這是我們迄今為止發(fā)現的最通用的問題解決工具。當然,神經網絡已經證明了它們可以執(zhí)行許多特定任務。由資深人士樂觀地表示,對于許多任務而言,收集數據比編寫程序更容易。對于一些非常有趣且困難的程序,這無疑是正確的,比如說收集圍棋或國際象棋的訓練數據很容易,但很難寫一個程序成功地玩這些游戲。另一方面,數據收集并不總是那么容易。我們無法設想自動標記圖片的程序,特別是在Facebook和阿里巴巴這樣收集了數十億張圖片的網站,而且其中許多圖片已被人類標記過。對于像人臉識別這樣的任務,我們不知道如何編寫軟件,而且很難收集數據。對于其他任務,例如計費,可以很容易地根據一些簡單的業(yè)務規(guī)則編寫程序。如果你能夠收集數據,你編寫的程序將更好地適應不同的情況,還能夠檢測異常,這一點當“將人類納入軟件迭代的循環(huán)”時,尤為如此。

正在代替代碼的機器學習

機器學習正在使代碼變得高效:Google的Jeff Dean說,500行TensorFlow代碼已經取代了谷歌翻譯中的500000行代碼。雖然代碼行數是一個值得質疑的指標,但無論是從編程工作量角度來看還是從需要維護的代碼量來看,這個突破都是可稱贊的。更重要的是這段代碼是如何工作的:相比于五十萬行的代碼,這是一個經過訓練以用于翻譯的神經網絡。神經網絡可以隨著語言的變化和使用場景的變化,在新數據上被重新訓練,而且整個代碼都不需要重寫。雖然我們不應低估訓練任何復雜度的神經網絡的難度,但我們同樣也不應低估管理和調試一個巨大代碼庫帶來的問題。

研究表明,神經網絡可以通過組合現有模塊來創(chuàng)建新程序。雖然以這種方式構建的程序很簡單,但是讓單個神經網絡能夠學習執(zhí)行幾個不同的任務是很重要的,每個任務通常都需要一個單獨的程序。

Pete Warden認為:“開發(fā)人員必須成為一名教師(教機器),一名訓練數據的策劃人。”我們發(fā)現,這種說法非常具有啟發(fā)性。軟件開發(fā)不會消失,但開發(fā)人員必須以不同的方式來思考自己。你如何構建一個解決一般問題的系統(tǒng),然后教該系統(tǒng)解決一個特定的任務?這貌似聽起來像是一個風險很高又麻煩的場景。但這意味著我們的系統(tǒng)將變得更加靈活,具有很強的適應性。Warden設想的未來,更多是關于產出的,而不是關于撰寫代碼行數。Peter經過更加系統(tǒng)的思考,認為機器學習可以從訓練數據中產生短程序,而不是很大的程序。

數據管理和基礎設施

早期的跡象表明,機器學習有著可以勝過傳統(tǒng)的數據庫索引的性能:它可以學習預測數據的存儲位置或者預測數據是否存在。機器學習明顯更快,并且需要更少的內存,但也有著相當大的限制性:當前基于機器學習的工具不包括多維索引,并假設數據庫不經常更新。重新訓練比重建傳統(tǒng)數據庫索引需要更長的時間。盡管如此,研究人員正在研究如何學習到多維索引,查詢的優(yōu)化,重新訓練的性能。

機器學習已經進入了數據基礎設施的其他領域。數據工程師正在使用機器學習來管理Hadoop,從而可以更快地響應Hadoop集群中的內存不足等問題。 Kafka工程師使用機器學習來診斷問題,從而簡化了管理許多配置的問題,這些配置會影響數據庫的性能。數據工程師和數據庫管理員不會過時,但他們可能需要發(fā)展一下他們的機器學習技能。機器學習將幫助他們使困難的問題變得更簡單,管理數據基礎架構這個工作,將不會像正確設置數百個不同的配置參數那樣,它會更像是在訓練一個系統(tǒng),讓整個管理工作運行的更有條理。

使困難問題變得可管理是數據科學最重要的問題之一。數據工程師負責維護數據管道:提取數據、清理數據、特征工程和模型構建。同時他們還需要負責在非常復雜的環(huán)境中部署軟件,一旦部署了這些基礎架構,還需要不斷監(jiān)視它,以檢測(或防止)資源用盡,確保模型正確運行。這些都是非常適合用機器學習處理的任務,我們越來越多地看到像MLFlow這樣的軟件能夠被用于管理數據管道。

數據科學

在自動化編程的早期表現形式中,工具旨在使數據分析師能夠執(zhí)行更高級的分析任務。Automatic Statistician是一種更新的工具,可自動進行探索性數據分析,并為時間序列類型的數據提供統(tǒng)計模型,且附有詳細說明。

隨著深度學習的興起,數據科學家發(fā)現自己需要尋找合適的神經網絡架構和參數。讓神經網絡學著找到合適自己架構的過程,也可能被自動化。畢竟,神經網絡就只是單純的自動化學習工具:雖然構建神經網絡結構需要大量的人力工作,但是不可能手動調整模型的所有參數。未來的場景應該是使用機器學習來探索所有可能的神經網絡架構:正如一篇文章指出的,10層網絡可能就有10的10次方種可能性。已經有其他研究人員使用強化學習來讓神經網絡架構開發(fā)變得更加容易。

模型創(chuàng)建不是一勞永逸的事情:數據模型需要不斷進行測試和調整。我們開始看到的用于持續(xù)監(jiān)控和模型調整的這些工具并不是特別新穎,比如用于A/B測試的老虎機算法已經存在了一段時間,對于許多公司來說,老虎機算法算是強化學習的第一步。機器學習同樣也可以用來查找軟件中的漏洞,有些系統(tǒng)會瀏覽代碼,并尋找已知的缺陷。這些系統(tǒng)不一定需要能夠修復代碼,也不承諾找到所有潛在的問題。但是他們可以很容易地對危險的代碼進行高亮顯示,并且他們可以允許在大型代碼庫上進行開發(fā)的程序員提出諸如“還有類似這樣的問題存在于其他地方嗎?”之類的問題。

游戲開發(fā)者也正在探索利用機器學習來降低游戲開發(fā)成本以及創(chuàng)造更多有趣的游戲。機器學習可以用來制作看起來更逼真的背景和場景嗎?游戲開發(fā)者都知道對逼真的場景和圖像進行繪制和建模又耗錢,又費時。目前,非玩家角色(NPC)所做的一切都必須明確編程。機器學習可以用來模擬NPC的行為嗎?如果NPC可以學習到行為,我們可以期待更有創(chuàng)意的游戲玩法出現。

展望未來

軟件開發(fā)人員的未來是什么樣的?軟件開發(fā)是否會同樣走上麥肯錫為其他行業(yè)預測的演化路徑呢?在軟件開發(fā)和數據科學中所涉及的30%的工作是否會被自動化?也許,剛剛我們所談的只是對未來某種情況的簡單解讀。但毫無疑問,機器學習將改變軟件開發(fā)。如果未來我們現在所認為的“編程”中很大一部分被自動化了,那也沒什么好驚訝的。編譯器不進行機器學習,但他們通過自動生成機器代碼來改變軟件行業(yè),這在未來可能并不是什么新鮮事。

重要的問題是軟件開發(fā)和數據科學將如何變化。一種可能性,實際上是一種事實:軟件開發(fā)人員會在數據收集和準備方面投入更多精力。沒有數據訓練,機器學習就什么都不是。開發(fā)人員必須做的,不僅僅是收集數據; 他們必須構建數據管道,以及構建管理這些管道的基礎設施,我們稱之為“數據工程”。在許多情況下,這些管線本身將使用機器學習來監(jiān)控和優(yōu)化自己。

我們可以看到訓練機器學習算法成為一個獨特的子專業(yè);我們可能很快會有一個新職業(yè)-“訓練工程師”,就像我們目前談論的“數據工程師”一樣。Andrew Ng在他自己的《機器學習渴望》一書時中說:“這本書的重點不是教你ML算法,而是教你如何讓ML算法有效。沒有編碼,也沒有復雜的數學。本書幾乎完全側重于模型訓練過程,而不僅僅是編碼,訓練才是讓機器學習有效工作的本質。”

我們提出的想法都涉及一種能力:它使人類能夠生產出更快、更可靠、更好的能夠生效的產品。開發(fā)人員將能夠將更多時間花在有趣且更重要的問題上,而不是把基本工作做好。那些問題可能是什么問題呢?

在一篇關于智能增強的討論里,Nicky論證了,計算機在針對一個問題尋找最佳答案上表現出色。因為計算機的本質是計算工具。但是他們不是很擅長“找到一個值得回答的有趣問題”,這件事是人類做的。那么,我們需要提出哪些重要的問題呢?

這些重要的問題已經在不斷的被發(fā)現了,比如我們剛剛開始認識到道德在計算中的重要性,才開始考慮更好的用戶界面,包括會話界面:它們將如何運作?即使在人工智能的幫助下,我們的安全問題也不會消失。先不管安全問題怎樣,我們所有的設備都在變得“聰明”。這意味著什么?我們希望它們做什么?人類不會編寫盡可能多的低級代碼。但是正因為他們將不會去編寫那些代碼,所以他們可以自由地思考代碼應該做什么,以及它應該如何與人交互。需要解決的問題永遠不會少。

很難想象“人類不再創(chuàng)建軟件”的未來,但很容易想象“將人納入軟件研發(fā)的循環(huán)”中在未來將占越來越多的比重。

文章原標題《what-machine-learning-means-for-software-development》作者:Ben Lorica,O'Reilly Media的首席數據科學家

譯者:虎說八道

標簽: [db:TAGG]

版權申明:本站文章部分自網絡,如有侵權,請聯系:west999com@outlook.com
特別注意:本站所有轉載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權歸原作者所有,如需使用,請與原作者聯系。

上一篇:揭開對機器學習的七點誤解

下一篇:上海電信投資3.9億,開啟第一批工程建設招標