1. 程式人生 > >人工智能改變開發軟件的6種方式

人工智能改變開發軟件的6種方式

周期 大量 工作原理 傳統 翻譯 戰略 方案 應用程序 安全

技術分享圖片

AI正在改變所有業務功能,軟件開發也不例外。機器學習技術不僅可以用於加速傳統的軟件開發生命周期(SDLC),它們為發明技術提供了一種全新的範例。

傳統上,開發計算機程序要求您事先準確指定系統要做的事情,然後手工設計技術的所有功能。以明確的方式編寫許多任務是可能的,因為在AI出現之前的計算機仍然非常強大。

然而,有許多任務和決定過於復雜,無法以嚴格的,基於規則的方式教給計算機。即使是一項看似簡單的活動,如識別互聯網上的照片或視頻是否屬於貓,也是傳統軟件開發無法實現的。鑒於貓照片可以采取的巨大排列,沒有任何工程師團隊可以列舉所有能夠可靠地識別貓的規則以及可能出現在媒體中的所有其他可能的對象。

機器學習從根本上改變了軟件開發範式

進入人工智能技術,如機器學習和深度學習。在這些方法中,工程師不會為如何制定決策和采取行動提供計算機規則。相反,她策劃並準備特定於域的數據,這些數據被輸入到學習算法中,這些算法經過叠代訓練並不斷改進。機器學習模型可以從數據中推斷出哪些特征和模式是重要的,而無需人類明確地編碼這些知識。ML模型的輸出甚至可以讓人類驚訝並突出我們自己沒有想到的觀點或細節。

因此,人工智能對計算機編程的最深刻影響是揭示人類如何感知,定義和執行軟件開發。作者,科學家和Google研究工程師Pete Warden相信,隨著知識在開發者社區中的傳播,將會有很長的一段時間,但十年後我預測大多數軟件工作都不會涉及編程。”

現任特斯拉人工智能總監的OpenAI前研究科學家Andrej Karpathy對此表示贊同,他說明了“未來很大一部分程序員不會維護復雜的軟件存儲庫,編寫錯綜復雜的程序或分析其運行時間。他們收集,清理,操縱,標記,分析和可視化為神經網絡提供數據的數據。“Karpathy用高度可引用的洞察力描述了海洋變化:”神經網絡不僅僅是另一個分類器,它們代表了我們如何根本轉變的開始編寫軟件。它們是軟件2.0 。 “

他將軟件1.0的“經典堆棧”描述為計算機的明確指令,由程序員使用Python或C ++等語言編寫。傳統的軟件開發生命周期通常從需求定義(即技術規範)開始,然後轉向設計和開發。一旦構建了可行的原型,就會進行QA測試。最後,一旦產品通過集合,它將被部署到生產中並且必須持續維護。敏捷流程可以使這個周期變得更快,因為工程師將選擇較小的功能集來專註於2-4周的沖刺,而不是試圖一次性構建整個軟件。無論是敏捷還是瀑布,這個過程基本上是相同的。

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

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

雖然機器學習開發有其自身的調試和維護挑戰,但Karpathy強調了這樣一個事實,即軟件2.0已經變得非常可行和有價值,因為“很大一部分現實問題具有收集數據更容易的特性”(或者更一般地說,確定一個理想的行為,而不是明確地編寫程序。“從軟件2.0中受益最多的領域包括計算機視覺,語音識別,機器翻譯,遊戲,機器人和數據庫。

Karpathy還引用了新範式的好處:

更加同質化,更易於管理
可以輕松烘焙成硬件
持續運行時間和內存使用
高度的便攜性
高度的敏捷性和可集成性
更容易為未來的開發人員學習
比某些功能/垂直(即圖像/視頻,聲音/語音和文本)中最好的人類編碼器更好

然而,專業人士並非沒有缺點。許多機器學習方法的關鍵局限性是我們人類無法完全理解這些復雜系統的工作原理,導致它們在我們看來是“黑匣子”。由於我們缺乏理解和控制而產生的另一個挑戰是由於算法偏差和偏執機器人等有缺陷的模型而產生的無意識和令人尷尬的後果。

傳統軟件從ML技術中獲得提升

然而,傳統的軟件開發並沒有消失。培養高性能機器學習模型只是產品化AI技術的一個步驟。正如一篇受歡迎的Google論文斷言,只有一小部分真實世界的機器學習系統由機器學習代碼組成。

數據管理,前端產品接口和安全性等關鍵組件仍需要由常規軟件處理。但是,使用傳統SDLC開發的技術仍然可以通過以下方式受益於機器學習方法:

1.快速原型制作。將業務需求轉變為技術產品通常需要數月甚至數年的計劃,但機器學習通過使技術領域較少的專家能夠使用自然語言或可視化界面開發技術來縮短此過程。

2.智能編程助手。開發人員將大部分時間用於閱讀文檔和調試代碼。智能編程助手可以通過提供即時支持和建議(例如相關文檔,最佳實踐和代碼示例)來縮短這一時間。此類助手的示例包括Kite for Python和Codota for Java。

3.自動分析和錯誤處理。編程助手還可以從過去的經驗中學習,以識別常見錯誤並在開發階段自動標記它們。一旦部署了技術,機器學習也可用於分析系統日誌,以快速甚至主動地標記錯誤。將來,還可以使軟件在沒有人為幹預的情況下動態地改變以響應錯誤。

4.自動代碼重構。清潔代碼對團隊協作和長期維護至關重要。隨著企業升級技術,大規模的重構是不可避免的,往往是痛苦的必需品。機器學習可用於分析代碼並自動優化代碼以實現可解釋性和性能。

5.精確估計。眾所周知,軟件開發超出了預算和時間表。可靠的估算需要深厚的專業知識,對環境的理解以及對實施團隊的熟悉程度。機器學習可以訓練過去項目中的數據 - 例如用戶故事,特征定義,估計和實際情況 - 以更準確地預測工作量和預算。

6.戰略決策。花費大量時間來討論哪些產品和功能要優先考慮哪些以及哪些要削減。針對過去的開發項目和業務因素培訓的AI解決方案可以評估現有應用程序的性能,並幫助業務負責人和工程團隊確定最大化影響並最大限度降低風險的工作。

根據Forrester Research關於AI對軟件開發影響的報告,將AI應用於軟件開發的大部分興趣在於自動化測試和錯誤檢測工具。

AI可以創建AI嗎?

最終的問題是人工智能是否可以創造人工智能,從而顛覆人類對技術開發的需求。實際上,我們已經看到AutoML解決方案的巨大增長,這些解決方案旨在實現機器學習模型培訓流程的自動化,減少數據科學家和工程師的工作量,並使領域專家能夠培訓生產質量模型。諸如H2O.ai的無人駕駛AI,Google Cloud的AutoML和Amazon Sagemaker等解決方案可自動化或簡化關鍵組件,例如數據準備,模型搜索和調整以及模型部署和擴展。

相關文章:http://www.ljswrj.com/8/546.html

以上由深圳邏輯思維軟件發布,轉載請註明出處。

人工智能改變開發軟件的6種方式