人工智能如何變革軟件開發?

暴君蘿莉醬

籠統地說,機器學習技術不僅可以用於加速傳統軟件開發生命週期(SDLC),而且還為創造技術提供了一種全新的範例。

傳統開發計算機程序的方式需要你事先確切地指定系統要執行哪些操作,然後手動設計所有技術功能。因為在人工智能出現之前,計算機的功能仍然是非常強大的,因此可以用明確的方式來編碼許多任務。

然而,有許多任務和決定太過複雜,不能以嚴格的、基於規則的方式向計算機傳達。即使是識別互聯網上的照片或視頻是不是一個關於貓的照片或者視頻,這麼一個看似簡單的活動,也是傳統軟件開發所無法企及的。考慮到不同的貓照片可能存在巨大的差異,所以沒有一個工程師團隊可以列舉出所有可以可靠地識別出是貓、而不是其他可能出現在照片或者視頻中所有物體的規則。

一方面,機器學習從根本上改變了軟件開發的範式。

引入人工智能技術,例如機器學習和深度學習。在這些技術方法中,工程師不會給出關於如何做出決定和採取行動的計算機規則。相反,人工智能策劃並準備了特定領域的數據,並將這些數據輸入到學習算法中,這些算法經過反覆訓練不斷地改進。機器學習模型可以從數據中推導出哪些特徵和模式是重要的,不需要人類明確地編碼這些知識。機器學習模型的輸出甚至可以給人類帶來驚喜,突出我們沒有想到的一些觀點或者細節。

因此,人工智能對計算機編程最深刻的影響,是解開了人類如何感知、定義和執行軟件開發的謎團。作者、科學家和谷歌研究工程師Pete Warden認為,“隨著知識在開發人員社區中的擴散,我們還要等上相當長一段時間,但我預測,10年內大多數軟件工作將不涉及編程”。

前OpenAI研究科學家、現任特斯拉人工智能總監的Andrej Karpathy表示認同,他說“未來很大一部分程序員不會維護複雜的軟件庫,編寫複雜的程序或分析其運行時間。他們收集、清理、操作、標記、分析和可視化提供給神經網絡的數據。”Karpathy用一種非常引人矚目的見解描述了這種巨大的變化:“神經網絡不僅僅是另一個分類器,神經網絡還代表了我們如何從根本上改變編寫軟件的方式,這就是軟件2.0。”

他把軟件1.0的“經典堆棧”定義為由程序員使用諸如Python或C ++等語言編寫給計算機的明確指示。傳統的軟件開發生命週期通常始於需求定義(即技術規範),然後是設計和開發。一旦建立了可行的原型,就有質保測試。最後,一旦產品通過審核,將被部署到生產中,而且得到持續的維護。敏捷流程可以讓這個循環加快速度,因為工程師會選擇一個較小的功能集,專門用2-4周的時間衝刺,而不是一次性構建整個軟件。然而,無論是敏捷式還是瀑布式,過程本質上都是相同的。

隨著時間的推移,這些系統變得非常複雜,需要多個依賴關係和集成,以及層層的功能和接口。所有這些組件必須由人工手動管理和更新,而這會導致不一致和無法解決的錯誤。

相比之下,機器學習模型可以推斷出數據中的重要特徵和模式。用Karpathy的話來說,軟件2.0是以“神經網絡權重”的形式編寫代碼,不是由人類編寫,而是由機器學習方法如反向傳播和隨機梯度下降編寫的。更新模型需要使用新數據重新訓練算法,這將改變模型的行為方式和執行方式。

儘管機器學習在開發和維護方面面臨挑戰,但Karpathy強調了這一事實:軟件2.0正在變得高度可行且具有價值,因為“大部分現實世界的問題都具有易於收集數據的特性(或者更一般地說,確定一個理想的行為),而不是明確編程。”從軟件2.0中受益最大的領域包括計算機視覺、語音識別、機器翻譯、遊戲、機器人和數據庫。

Karpathy還提到了這種新範式的好處:

  • 更同構,更易於管理

  • 可以輕鬆集成到硬件中
  • 持續的運行時間和內存使用
  • 高度便攜性
  • 高度靈活性和可集成性
  • 對於未來的開發人員來說更容易學習
  • 比某些功能/垂直領域(例如圖像/視頻、聲音/語音、文本)中最好的人類編碼器還要好。


然而,有得也有時失。很多機器學習方法的關鍵侷限性,是我們人類無法完全理解如此複雜的系統如何工作,導致這種機器學習方法在我們看來就是一些“黑盒子”。由於我們缺乏理解和控制而導致的另一個挑戰,是由於有缺陷的模型(例如算法偏差和機器人殭屍)而產生一些意外的、令人尷尬的後果。

另一方面,傳統軟件從機器學習技術中獲益。

傳統的軟件開發並未就此消失。訓練一個高性能的機器學習模型,這只是人工智能技術產品化的一個步驟。正如谷歌的一篇論文所指出,只有一小部分真實世界的機器學習系統是由機器學習代碼組成的。

諸如數據管理、前端產品接口和安全等關鍵組件仍然需要由常規軟件來處理。然而,使用傳統SDLC開發的技術仍然可以通過以下途徑從機器學習方法中受益:

1、快速原型化。將業務需求轉化為技術產品通常需要幾個月的時間,但機器學習通過讓較少的技術專家使用自然語言或可視界面開發技術縮短了這一過程。

2、智能編程助理。開發人員大部分時間都在閱讀文檔和調試代碼。智能編程助手可通過提供即時支持和建議(如相關文檔、最佳實踐和代碼示例)縮短這部分時間,例如Kite for Python和Codota for Java。

3、自動分析和錯誤處理。編程助理還可以從過去的經驗中學習,以發現常見的錯誤並在開發階段自動標記這些錯誤。某項技術一旦被部署,機器學習還可以用於快速分析系統日誌,甚至主動標記錯誤。未來,還可以在不需人工干預的情況下,讓軟件動態變化以應對各種錯誤。

4、自動代碼重構。對於團隊協作和長期維護來說,清除代碼至關重要。隨著企業逐步升級技術,大規模重構是不可避免的,而且往往是痛苦的過程。機器學習可用於分析代碼並自動優化其可解釋性和性能表現。

5、精確估算。眾所周知,軟件開發常常遇到超出預算和超出時間表的問題。可靠的估算需要深厚的專業知識、對背景的瞭解以及對實施團隊的熟悉程度。機器學習可以訓練過去的項目數據,如用戶故事、特徵定義、估算數據和實際數據,更準確地預測工作量和預算。

6、戰略決策。我們有相當一部分時間花在討論哪些產品和功能需要優先考慮,哪些功能需要削減掉。針對以往開發項目和商業因素訓練的人工智能解決方案,可以評估現有應用的性能,並幫助業務負責人和工程團隊確定如何最大限度地發揮影響以及降低風險。

根據Forrester Research關於人工智能影響軟件開發的報告:企業將人工智能大量應用於軟件開發的興趣,主要集中在自動化測試和缺陷檢測工具方面。

最後,一個終極問題是,人工智能能否創造人工智能,從而顛覆人類參與技術開發的需要。實際上,我們已經看到AutoML解決方案的大幅增長,這種解決方案旨在實現機器學習模型訓練流程各個部分的自動化,以減少數據科學家和工程師的工作量,讓領域專家能夠訓練出生產質量模型。諸如H2O.ai的無人駕駛人工智能,Google Cloud的AutoML和Amazon Sagemaker等解決方案,可自動化或精簡關鍵組件,如數據準備、模型搜索和優化、模型部署和擴展。


科技行者

人工智能是如何變革軟件開發的。我認為人工智能的出現會影響軟件開發的進程,還會不斷的探索人工智能去代替軟件的開發,這就是說用機器人來編程。

總之,人工智能的出現會導致軟件大部分向那邊進行,也相當於一種方向。後來幾乎所有的軟件,我認為都會擁有人工智能的小應用,在裡面通過分析你們的數據給你更好的服務。


分享到:


相關文章: