籠統(tǒng)地說,機器學習技術不僅可以用于加速傳統(tǒng)軟件開發(fā)生命周期(SDLC),而且還為創(chuàng)造技術提供了一種全新的范例。
傳統(tǒng)開發(fā)計算機程序的方式需要你事先確切地指定系統(tǒng)要執(zhí)行哪些操作,然后手動設計所有技術功能。因為在人工智能出現(xiàn)之前,計算機的功能仍然是非常強大的,因此可以用明確的方式來編碼許多任務。
然而,有許多任務和決定太過復雜,不能以嚴格的、基于規(guī)則的方式向計算機傳達。即使是識別互聯(lián)網(wǎng)上的照片或視頻是不是一個關于貓的照片或者視頻,這么一個看似簡單的活動,也是傳統(tǒng)軟件開發(fā)所無法企及的??紤]到不同的貓照片可能存在巨大的差異,所以沒有一個工程師團隊可以列舉出所有可以可靠地識別出是貓、而不是其他可能出現(xiàn)在照片或者視頻中所有物體的規(guī)則。
一方面,機器學習從根本上改變了軟件開發(fā)的范式。
引入人工智能技術,例如機器學習和深度學習。在這些技術方法中,工程師不會給出關于如何做出決定和采取行動的計算機規(guī)則。相反,人工智能策劃并準備了特定領域的數(shù)據(jù),并將這些數(shù)據(jù)輸入到學習算法中,這些算法經(jīng)過反復訓練不斷地改進。機器學習模型可以從數(shù)據(jù)中推導出哪些特征和模式是重要的,不需要人類明確地編碼這些知識。機器學習模型的輸出甚至可以給人類帶來驚喜,突出我們沒有想到的一些觀點或者細節(jié)。
因此,人工智能對計算機編程最深刻的影響,是解開了人類如何感知、定義和執(zhí)行軟件開發(fā)的謎團。作者、科學家和谷歌研究工程師Pete Warden認為,“隨著知識在開發(fā)人員社區(qū)中的擴散,我們還要等上相當長一段時間,但我預測,10年內(nèi)大多數(shù)軟件工作將不涉及編程”。
前OpenAI研究科學家、現(xiàn)任特斯拉人工智能總監(jiān)的Andrej Karpathy表示認同,他說“未來很大一部分程序員不會維護復雜的軟件庫,編寫復雜的程序或分析其運行時間。他們收集、清理、操作、標記、分析和可視化提供給神經(jīng)網(wǎng)絡的數(shù)據(jù)?!盞arpathy用一種非常引人矚目的見解描述了這種巨大的變化:“神經(jīng)網(wǎng)絡不僅僅是另一個分類器,神經(jīng)網(wǎng)絡還代表了我們?nèi)绾螐母旧细淖兙帉戃浖姆绞剑@就是軟件2.0。”
他把軟件1.0的“經(jīng)典堆?!倍x為由程序員使用諸如Python或C 等語言編寫給計算機的明確指示。傳統(tǒng)的軟件開發(fā)生命周期通常始于需求定義(即技術規(guī)范),然后是設計和開發(fā)。一旦建立了可行的原型,就有質(zhì)保測試。最后,一旦產(chǎn)品通過審核,將被部署到生產(chǎn)中,而且得到持續(xù)的維護。敏捷流程可以讓這個循環(huán)加快速度,因為工程師會選擇一個較小的功能集,專門用2-4周的時間沖刺,而不是一次性構建整個軟件。然而,無論是敏捷式還是瀑布式,過程本質(zhì)上都是相同的。
隨著時間的推移,這些系統(tǒng)變得非常復雜,需要多個依賴關系和集成,以及層層的功能和接口。所有這些組件必須由人工手動管理和更新,而這會導致不一致和無法解決的錯誤。
相比之下,機器學習模型可以推斷出數(shù)據(jù)中的重要特征和模式。用Karpathy的話來說,軟件2.0是以“神經(jīng)網(wǎng)絡權重”的形式編寫代碼,不是由人類編寫,而是由機器學習方法如反向傳播和隨機梯度下降編寫的。更新模型需要使用新數(shù)據(jù)重新訓練算法,這將改變模型的行為方式和執(zhí)行方式。
盡管機器學習在開發(fā)和維護方面面臨挑戰(zhàn),但Karpathy強調(diào)了這一事實:軟件2.0正在變得高度可行且具有價值,因為“大部分現(xiàn)實世界的問題都具有易于收集數(shù)據(jù)的特性(或者更一般地說,確定一個理想的行為),而不是明確編程?!睆能浖?.0中受益最大的領域包括計算機視覺、語音識別、機器翻譯、游戲、機器人和數(shù)據(jù)庫。
Karpathy還提到了這種新范式的好處:
更同構,更易于管理
然而,有得也有時失。很多機器學習方法的關鍵局限性,是我們?nèi)祟悷o法完全理解如此復雜的系統(tǒng)如何工作,導致這種機器學習方法在我們看來就是一些“黑盒子”。由于我們?nèi)狈斫夂涂刂贫鴮е碌牧硪粋€挑戰(zhàn),是由于有缺陷的模型(例如算法偏差和機器人僵尸)而產(chǎn)生一些意外的、令人尷尬的后果。
另一方面,傳統(tǒng)軟件從機器學習技術中獲益。
傳統(tǒng)的軟件開發(fā)并未就此消失。訓練一個高性能的機器學習模型,這只是人工智能技術產(chǎn)品化的一個步驟。正如谷歌的一篇論文所指出,只有一小部分真實世界的機器學習系統(tǒng)是由機器學習代碼組成的。
諸如數(shù)據(jù)管理、前端產(chǎn)品接口和安全等關鍵組件仍然需要由常規(guī)軟件來處理。然而,使用傳統(tǒng)SDLC開發(fā)的技術仍然可以通過以下途徑從機器學習方法中受益:
1、快速原型化。將業(yè)務需求轉(zhuǎn)化為技術產(chǎn)品通常需要幾個月的時間,但機器學習通過讓較少的技術專家使用自然語言或可視界面開發(fā)技術縮短了這一過程。
2、智能編程助理。開發(fā)人員大部分時間都在閱讀文檔和調(diào)試代碼。智能編程助手可通過提供即時支持和建議(如相關文檔、最佳實踐和代碼示例)縮短這部分時間,例如Kite for Python和Codota for Java。
3、自動分析和錯誤處理。編程助理還可以從過去的經(jīng)驗中學習,以發(fā)現(xiàn)常見的錯誤并在開發(fā)階段自動標記這些錯誤。某項技術一旦被部署,機器學習還可以用于快速分析系統(tǒng)日志,甚至主動標記錯誤。未來,還可以在不需人工干預的情況下,讓軟件動態(tài)變化以應對各種錯誤。
4、自動代碼重構。對于團隊協(xié)作和長期維護來說,清除代碼至關重要。隨著企業(yè)逐步升級技術,大規(guī)模重構是不可避免的,而且往往是痛苦的過程。機器學習可用于分析代碼并自動優(yōu)化其可解釋性和性能表現(xiàn)。
5、精確估算。眾所周知,軟件開發(fā)常常遇到超出預算和超出時間表的問題??煽康墓浪阈枰詈竦膶I(yè)知識、對背景的了解以及對實施團隊的熟悉程度。機器學習可以訓練過去的項目數(shù)據(jù),如用戶故事、特征定義、估算數(shù)據(jù)和實際數(shù)據(jù),更準確地預測工作量和預算。
6、戰(zhàn)略決策。我們有相當一部分時間花在討論哪些產(chǎn)品和功能需要優(yōu)先考慮,哪些功能需要削減掉。針對以往開發(fā)項目和商業(yè)因素訓練的人工智能解決方案,可以評估現(xiàn)有應用的性能,并幫助業(yè)務負責人和工程團隊確定如何最大限度地發(fā)揮影響以及降低風險。
根據(jù)Forrester Research關于人工智能影響軟件開發(fā)的報告:企業(yè)將人工智能大量應用于軟件開發(fā)的興趣,主要集中在自動化測試和缺陷檢測工具方面。
最后,一個終極問題是,人工智能能否創(chuàng)造人工智能,從而顛覆人類參與技術開發(fā)的需要。實際上,我們已經(jīng)看到AutoML解決方案的大幅增長,這種解決方案旨在實現(xiàn)機器學習模型訓練流程各個部分的自動化,以減少數(shù)據(jù)科學家和工程師的工作量,讓領域?qū)<夷軌蛴柧毘錾a(chǎn)質(zhì)量模型。諸如H2O.ai的無人駕駛?cè)斯ぶ悄?,Google Cloud的AutoML和Amazon Sagemaker等解決方案,可自動化或精簡關鍵組件,如數(shù)據(jù)準備、模型搜索和優(yōu)化、模型部署和擴展。
聯(lián)系客服