回覆列表
  • 1 # 科技行者

    籠統地說,機器學習技術不僅可以用於加速傳統軟體開發生命週期(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、精確估算。眾所周知,軟體開發常常遇到超出預算和超出時間表的問題。可靠的估算需要深厚的專業知識、對背景的瞭解以及對實施團隊的熟悉程度。機器學習可以訓練過去的專案資料,如使用者故事、特徵定義、估算資料和實際資料,更準確地預測工作量和預算。

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

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

  • 2 # Mario女陶

    人工智慧是如何變革軟體開發的。我認為人工智慧的出現會影響軟體開發的程序,還會不斷的探索人工智慧去代替軟體的開發,這就是說用機器人來程式設計。

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

  • 中秋節和大豐收的關聯?
  • 龔姓是怎麼得來的?