機器學(xué)習(xí)有望從根本上改變軟件開發(fā)的本質(zhì),這也許是自FORTRAN和LISP被發(fā)明以來的第一次。 它對我們幾十年來的編程范式提出了第一個真正的挑戰(zhàn)。 這些變化對數(shù)百萬正在實施軟件開發(fā)的人而言,會意味著什么? 我們是否會看到失業(yè)和裁員,或者會看到編程演變成不同的東西,也許會是一種更關(guān)注于滿足用戶的東西?
自20世紀70年代以來,我們已經(jīng)或多或少地構(gòu)建了軟件。 我們有高級語言,低級語言,腳本語言以及用于構(gòu)建和測試軟件的工具,但這些工具需要我們做的事情沒有發(fā)生太大變化。 我們的語言和工具比50年前要好得多,但它們本質(zhì)上是一樣的。我們?nèi)匀挥兄a編輯器。這些編輯器變得更花哨了:他們有彩色的高亮,變量名補全,它們有時可以幫助我們完成重構(gòu)等任務(wù),但他們?nèi)匀皇?a >emacs和vi的后代。 面向?qū)ο蟠砹艘环N不同的編程風(fēng)格,而不是某種本質(zhì)上而言“全新”的東西 —— 當(dāng)然,函數(shù)式編程可以一直追溯到50年代(除非我們不知道它曾經(jīng)被叫作這個名字)。 我們可以做得更好嗎?
我們將專注于機器學(xué)習(xí)而不是人工智能。 機器學(xué)習(xí)曾經(jīng)被稱為“AI管用的那一部分”,但更重要的是,“機器學(xué)習(xí)”這種提法避開了類似“通用智能”這種叫法。我們不討論針對某個待解決的問題,設(shè)計解決方案,并自己實現(xiàn)該解決方案的系統(tǒng)。 這樣的系統(tǒng)不存在,并且可能永遠不存在。 我們需要人類才能做到這一點。 機器學(xué)習(xí)可能只比模式識別多一點點,但我們已經(jīng)看到模式識別可以完成很多工作。 實際上,手工編碼的模式識別是我們當(dāng)前工具集的核心:這真的是現(xiàn)代優(yōu)化編譯器所正在做的。
我們還需要設(shè)定我們的期望。 麥肯錫估計“使用現(xiàn)有技術(shù),只有不到5%的職業(yè)可以完全自動化。 然而,大約60%的職業(yè)的工作活動中,具有30%或更多的組成部分能夠被自動化?!?span id="ws0oaigkoc" class="Apple-converted-space">? 軟件開發(fā)和數(shù)據(jù)科學(xué)不會成為完全被自動化的職業(yè)之一。 但優(yōu)秀的軟件開發(fā)人員一直在尋求對于繁瑣,重復(fù)的任務(wù)的自動化; 這也剛好是計算機的用途。 毫無疑問,軟件開發(fā)本身將日益變得可以被自動化。
這不是一個激進的新愿景。 因為我們在過去的半個世紀里持續(xù)的為了自動化工具而努力,因此這并不激進。 編譯器對編寫機器代碼的過程進行了自動化。 腳本語言通過將更大,更復(fù)雜的程序粘合在一起來自動執(zhí)行許多枯燥無味的任務(wù)。 軟件測試工具,自動部署工具,容器和容器編排系統(tǒng),這些都是為了對開發(fā)、部署、管理軟件系統(tǒng)的過程進行自動化的工具。 這些都沒有利用機器學(xué)習(xí),但這肯定是下一步它們要做的。
機器學(xué)習(xí)會不會像Pete Warden和Andrej Karpathy所說的那樣吞并了軟件?畢竟,“軟件吞噬世界”是一個日益抽象和普遍化的過程。 筆記本電腦,手機或智能手表可以取代收音機,電視機,報紙,彈球機,鎖和鑰匙,電燈開關(guān)以至于更多物品。 所有這些技術(shù)都是可能的,因為我們將計算機視為通用機器,而不僅僅是數(shù)字計算器。
從這個角度來看,很容易將機器學(xué)習(xí)想象成下一個抽象層次,這是我們迄今為止發(fā)現(xiàn)的最通用的問題解決工具。 當(dāng)然,神經(jīng)網(wǎng)絡(luò)已經(jīng)證明了它們可以執(zhí)行許多特定任務(wù):能夠構(gòu)建一組訓(xùn)練數(shù)據(jù)的幾乎任何任務(wù)都可以。 Karpathy樂觀地表示,對于許多任務(wù)而言,收集數(shù)據(jù)比明確地編寫程序更容易。 對于一些非常有趣且非常困難的程序,他無疑是正確的:收集圍棋或國際象棋的訓(xùn)練數(shù)據(jù)很容易(各種級別的玩家已經(jīng)記錄了超過150年的游戲),但很難寫一個明確的程序成功地玩這些游戲。 因此,當(dāng)您不知道如何編寫軟件,但您可以收集數(shù)據(jù)時,機器學(xué)習(xí)是一種選擇。 另一方面,數(shù)據(jù)收集并不總是那么容易。 我們甚至無法設(shè)想自動標記圖片的程序,直到像Flickr,F(xiàn)acebook和Google這樣收集了數(shù)十億張圖片的網(wǎng)站,而且其中許多圖片已被人類標記過。 對于像人臉識別這樣的任務(wù),我們不知道如何編寫軟件,并且很難收集數(shù)據(jù)。 對于其他任務(wù),例如計費,可以很容易地根據(jù)一些簡單的業(yè)務(wù)規(guī)則編寫程序。 很難想象收集訓(xùn)練機器學(xué)習(xí)算法所需的數(shù)據(jù) – 但是如果你能夠收集數(shù)據(jù),你編寫的程序?qū)⒏玫剡m應(yīng)不同的情況,還能夠檢測異常,這一點當(dāng)“將人類納入軟件迭代的循環(huán)”時,尤其如此。
正在代替代碼的機器學(xué)習(xí)
機器學(xué)習(xí)已經(jīng)使代碼更高效:Google的Jeff Dean 報告說,500行TensorFlow代碼已經(jīng)取代了谷歌翻譯中的500,000行代碼。 雖然代碼行數(shù)是一個值得質(zhì)疑的指標,但無論是從編程工作量角度來看還是從需要維護的代碼量來看,千倍的減少都是巨大的。不過,更重要的是這段代碼是如何工作的:相比于五十萬行統(tǒng)計意義上的代碼,這是一個經(jīng)過訓(xùn)練以用于翻譯的神經(jīng)網(wǎng)絡(luò)。 隨著語言的變化和使用場景的變化,隨著偏差和偏見被發(fā)現(xiàn),神經(jīng)網(wǎng)絡(luò)可以在新數(shù)據(jù)上被重新審視和重新訓(xùn)練。 它的代碼不需要重寫。 我們不應(yīng)低估訓(xùn)練任何復(fù)雜度的神經(jīng)網(wǎng)絡(luò)的難度,但我們同樣也不應(yīng)低估管理和調(diào)試一個巨大代碼庫帶來的問題。
我們已經(jīng)看到研究表明,神經(jīng)網(wǎng)絡(luò)可以通過組合現(xiàn)有模塊來創(chuàng)建新程序。 使用對其他程序執(zhí)行的跟蹤,系統(tǒng)得到了訓(xùn)練。 雖然以這種方式構(gòu)建的程序很簡單,但是讓單個神經(jīng)網(wǎng)絡(luò)能夠?qū)W習(xí)執(zhí)行幾個不同的任務(wù)是很重要的,每個任務(wù)通常都需要一個單獨的程序。
Pete Warden將編程的未來描述為成為一名教師教學(xué)的過程:“開發(fā)人員必須成為一名教師,一名訓(xùn)練數(shù)據(jù)的策劃人,以及一名結(jié)果分析師?!蔽覀儼l(fā)現(xiàn),這種特性的描述非常具有啟發(fā)性。 軟件開發(fā)不會消失; 開發(fā)人員必須以不同的方式來思考自己。 你如何構(gòu)建一個解決一般問題的系統(tǒng),然后教導(dǎo)該系統(tǒng)解決一個特定的任務(wù)? 一方面,這聽起來像一個充滿風(fēng)險,充滿麻煩的場景,就像拉繩子一樣。 但另一方面,它假設(shè)我們的系統(tǒng)將變得更加靈活,具有柔韌性和很強的適應(yīng)性。 Warden設(shè)想的未來,更多是關(guān)于產(chǎn)出的,而不是關(guān)于撰寫代碼行數(shù)的:訓(xùn)練一個通用系統(tǒng),并測試它是否符合您的要求,包括公平等問題。
Peter Norvig經(jīng)過更加系統(tǒng)地思考后論證了機器學(xué)習(xí)可以用來從訓(xùn)練數(shù)據(jù)中產(chǎn)生短程序(而不是長程序); 優(yōu)化較大程序的小部分,而不是整個程序; 并且可能(在人類的幫助下)成為初學(xué)程序員的更好的輔導(dǎo)員。
數(shù)據(jù)管理和基礎(chǔ)設(shè)施
早期的跡象表明,機器學(xué)習(xí)有著可以勝過傳統(tǒng)的數(shù)據(jù)庫索引的性能:它可以學(xué)習(xí)預(yù)測數(shù)據(jù)的存儲位置,或者預(yù)測數(shù)據(jù)是否存在。 機器學(xué)習(xí)似乎明顯更快,并且需要更少的內(nèi)存,但這里也有著相當(dāng)大的限制性:當(dāng)前基于機器學(xué)習(xí)的工具不包括多維索引,并假設(shè)數(shù)據(jù)庫不經(jīng)常更新。 重新訓(xùn)練比重建傳統(tǒng)數(shù)據(jù)庫索引需要更長的時間。 盡管如此,研究人員正在研究如何學(xué)習(xí)到多維索引,查詢的優(yōu)化,重新訓(xùn)練的性能,以及其他問題。
機器學(xué)習(xí)已經(jīng)進入了數(shù)據(jù)基礎(chǔ)設(shè)施的其他領(lǐng)域。 數(shù)據(jù)工程師正在使用機器學(xué)習(xí)來管理Hadoop,從而可以更快地響應(yīng)Hadoop集群中的內(nèi)存不足等問題。 Kafka工程師還報告了如何使用機器學(xué)習(xí)來診斷問題,從而簡化了管理許多配置的問題,這些配置會影響數(shù)據(jù)庫的行為。數(shù)據(jù)工程師和數(shù)據(jù)庫管理員不會過時,但他們可能需要發(fā)展一下他們的機器學(xué)習(xí)技能。 接下來,機器學(xué)習(xí)將幫助他們使困難的問題變得更易于管理。 管理數(shù)據(jù)基礎(chǔ)架構(gòu)這個工作,將不會像正確設(shè)置數(shù)百個不同的配置參數(shù)那樣,它會比較像是訓(xùn)練一個系統(tǒng),使得它在您的典型工作負載上工作良好。
使困難問題變得可管理,仍然是數(shù)據(jù)科學(xué)最重要的問題之一。 數(shù)據(jù)工程師負責(zé)維護數(shù)據(jù)管線:提取數(shù)據(jù),清理數(shù)據(jù),特征工程和模型發(fā)現(xiàn)。 他們負責(zé)在非常復(fù)雜的環(huán)境中部署軟件。 一旦部署了所有這些基礎(chǔ)架構(gòu),就需要不斷監(jiān)視它,以檢測(或防止)資源用盡,并仍然確保模型正確運行。 這些都是非常適合用機器學(xué)習(xí)處理的任務(wù),我們越來越多地看到像MLFlow這樣的軟件能夠被用于管理數(shù)據(jù)管線。
數(shù)據(jù)科學(xué)
在自動化編程的早期表現(xiàn)形式中,工具旨在使數(shù)據(jù)分析師能夠執(zhí)行更高級的分析任務(wù)。 Automatic Statistician是一種更新的工具,可自動進行探索性的數(shù)據(jù)分析,并為時間序列類型的數(shù)據(jù)提供統(tǒng)計模型,且附有詳細說明。
隨著深度學(xué)習(xí)的興起,數(shù)據(jù)科學(xué)家發(fā)現(xiàn)自己需要尋找合適的神經(jīng)網(wǎng)絡(luò)架構(gòu)和參數(shù)。 讓神經(jīng)網(wǎng)絡(luò)學(xué)著找到自己架構(gòu)的過程,也是可能被自動化的。畢竟,神經(jīng)網(wǎng)絡(luò)就只是單純的自動化學(xué)習(xí)工具:雖然構(gòu)建神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)仍然需要大量的人力工作,但是不可能手動調(diào)整進入模型的所有參數(shù)。 一種應(yīng)用場景是,使用機器學(xué)習(xí)來探索所有可能的神經(jīng)網(wǎng)絡(luò)架構(gòu); 正如這篇文章指出的那樣,10層網(wǎng)絡(luò)很容易有10的10次方種可能性。 其他研究人員使用強化學(xué)習(xí)來讓開發(fā)神經(jīng)網(wǎng)絡(luò)架構(gòu)變得更加容易。
更進一步:像DataRobot這樣的公司可以自動化整個機器學(xué)習(xí)過程,包括同時使用多個模型,并對結(jié)果進行對比。 這個過程被稱為“自動化機器學(xué)習(xí)”; 亞馬遜的Sagemaker和Google的AutoML提供基于云的工具,來自動創(chuàng)建機器學(xué)習(xí)模型。
模型創(chuàng)建不是一勞永逸的事情:數(shù)據(jù)模型需要不斷進行測試和重新調(diào)整。 我們開始看到了用于持續(xù)監(jiān)控和模型調(diào)整的工具。 這些工具并不是特別新穎:用于A / B測試的老虎機算法已經(jīng)存在了一段時間,對于許多公司來說,老虎機算法將是強化學(xué)習(xí)的第一步。 Chatbase是一家Google投資的初創(chuàng)公司, 它負責(zé)監(jiān)控聊天應(yīng)用程序,以便開發(fā)人員了解其性能。 應(yīng)用程序是否理解用戶提出的問題? 是他們真的能夠解決問題,還是用戶經(jīng)常要求提供尚未被支持的功能? 這些問題可以通過手動完整地對聊天日志進行瀏覽和標記問題來解決,但即使創(chuàng)造哪怕一個用于這樣任務(wù)的機器人也是很難的。Chatbase設(shè)想,未來許多機構(gòu)都會有數(shù)十甚至數(shù)百個復(fù)雜的機器人用于客戶服務(wù),咨詢臺支持,和許多其他應(yīng)用。
也可以使用機器學(xué)習(xí)來查找軟件中的漏洞。 有些系統(tǒng)會瀏覽代碼,并尋找已知的缺陷。 這些系統(tǒng)不一定需要能夠修復(fù)代碼,也不承諾找到所有潛在的問題。 但是他們可以很容易地對危險的代碼進行高亮顯示,并且他們可以允許在大型代碼庫上進行開發(fā)的程序員提出諸如“還有類似這樣的問題存在于其他地方嗎?”之類的問題。
游戲開發(fā)者希望通過多種方式進行機器學(xué)習(xí)。機器學(xué)習(xí)可以用來制作看起來更逼真的背景和場景嗎? 對逼真的場景和圖像進行繪制和建模又耗錢,又費時。 目前,非玩家角色(NPC)所做的一切都必須明確編程。 機器學(xué)習(xí)可以用來模擬NPC的行為嗎? 如果NPC可以學(xué)習(xí)到行為,我們可以期待更有創(chuàng)意的游戲玩法出現(xiàn)。
展望未來
軟件開發(fā)人員的未來是什么樣的? 軟件開發(fā)是否會同樣走上麥肯錫為其他行業(yè)預(yù)測的演化路徑? 在軟件開發(fā)和數(shù)據(jù)科學(xué)中所涉及的30%的工作是否會被自動化?
也許,盡管這是對情況的簡單解讀。 毫無疑問,機器學(xué)習(xí)將以顯著的方式改變軟件開發(fā)。 如果我們現(xiàn)在所認為的“編程”中很大一部分被自動化了,那也沒什么好驚訝的。這并不是什么新鮮事:編譯器不進行機器學(xué)習(xí),但他們通過自動生成機器代碼來改變軟件行業(yè)。
重要的問題是軟件開發(fā)和數(shù)據(jù)科學(xué)將如何變化。 一種可能性 —— 實際上是一種事實 —— 是, 軟件開發(fā)人員會在數(shù)據(jù)收集和準備方面投入更多精力。 沒有訓(xùn)練數(shù)據(jù),機器學(xué)習(xí)就什么都不是。 開發(fā)人員必須做的,不僅僅是收集數(shù)據(jù); 他們必須構(gòu)建數(shù)據(jù)管線,以及構(gòu)建管理這些管線的基礎(chǔ)設(shè)施。 我們稱之為“數(shù)據(jù)工程”。在許多情況下,這些管線本身將使用機器學(xué)習(xí)來監(jiān)控和優(yōu)化自己。
我們可以看到訓(xùn)練機器學(xué)習(xí)算法成為一個獨特的子專業(yè); 我們可能很快會談?wù)摗坝?xùn)練工程師”,就像我們目前談?wù)摗皵?shù)據(jù)工程師”的方式一樣。Andrew Ng在描述他自己的《機器學(xué)習(xí)渴望》一書時 ,他說:“這本書的重點不是教你ML算法,而是教你如何讓ML算法有效。“沒有編碼,也沒有復(fù)雜的數(shù)學(xué)。 本書幾乎完全側(cè)重于模型訓(xùn)練過程,而不僅僅是編碼,訓(xùn)練才是讓機器學(xué)習(xí)有效工作的本質(zhì)。
我們提出的想法都涉及增強人的能力:它們使人類能夠生產(chǎn)出更快,更可靠,更好的能夠生效的產(chǎn)品。 開發(fā)人員將能夠?qū)⒏鄷r間花在有趣,重要的問題上,而不是把基本工作做好。那些問題可能是什么問題呢?
在“如何成為一只半人馬”一文中,關(guān)于智能增強的討論里,Nicky Case論證了,計算機在針對一個問題尋找最佳答案上表現(xiàn)出色。它們本質(zhì)上是計算工具。但是他們不是很擅長“找到一個值得回答的有趣問題”,這件事是人類做的。那么,我們需要提出哪些重要的問題呢?
我們才剛剛開始理解道德在計算中的重要性。 公平等基本問題并不簡單,需要加以強調(diào)。 我們剛剛才開始考慮更好的用戶界面,包括會話界面:它們將如何運作? 即使在人工智能的幫助下,我們的安全問題也不會消失。 先不管安全問題怎樣,我們所有的設(shè)備都在變得“聰明”。這意味著什么? 我們希望它們做什么? 人類不會編寫盡可能多的低級代碼。 但是正因為他們將不會去編寫那些代碼,所以他們可以自由地思考代碼應(yīng)該做什么,以及它應(yīng)該如何與人交互。 需要解決的問題永遠不會少。
很難想象一種“人類不再需要創(chuàng)建軟件”的未來。 但很容易想象“將人納入循環(huán)”的軟件研發(fā),在未來將占重要比重。
相關(guān)內(nèi)容 :
- Peter Norvig關(guān)于“軟件工程工作流中的人工智能”的文章
- “如何思考人工智能和機器學(xué)習(xí)技術(shù)及其在自動化中的作用”
- 人工智能是下一個數(shù)字化前沿領(lǐng)域嗎?:麥肯錫全球研究院Michael Chui的概述
- “為未來的AI應(yīng)用構(gòu)建工具”
- “RLlib簡介:可組合且可擴展的強化學(xué)習(xí)庫”
- “強化學(xué)習(xí)在工業(yè)中的實際應(yīng)用”: 強化學(xué)習(xí)的商業(yè)和工業(yè)應(yīng)用概述
- “機器學(xué)習(xí)需要機器教學(xué)”:Mark Hammond將強化學(xué)習(xí)應(yīng)用于制造業(yè)和工業(yè)自動化。
- “釋放強化學(xué)習(xí)的潛力”:Danny Lange關(guān)于強化學(xué)習(xí)如何加速軟件開發(fā)以及如何能夠?qū)崿F(xiàn)其全民化的文章



