您現在的位置是:首頁 > 綜合

機器之心的進化——軟體2.0的崛起

  • 由 冰巴克 發表于 綜合
  • 2022-12-21
簡介當頂級軟體公司在瞭解大資料的商業潛力後,並開始使用 Machine Learning 構建資料產品時,這種狀態就出現了

左右心的輸出量相等嗎

轉自 INDIGO 的數字映象

未來的計算機語言將更多地關注目標,而不是由程式設計師來考慮實現的過程。——

Marvin Minsky

Software 2。0 概念的最早提出人是 Andrej Karpathy,這位從小隨家庭從捷克移民來加拿大的天才少年在多倫多大學師從 Geoffrey Hinton,然後在斯坦福李飛飛團隊獲得博士學位,主要研究 NLP 和計算機視覺,同時作為創始團隊成員加入了 OpenAI,Deep Learning 的關鍵人物和歷史節點都被他點亮。在 2017 年被 Elon Musk 挖牆腳到了 Tesla 負責自動駕駛研發,然後就有了重構的 FSD(Full Self-Driving)。

按照 Andrej Karpathy 的定義 - “軟體 2。0 使用更抽象、對人類不友好的語言生成,比如神經網路的權重。沒人參與編寫這些程式碼,一個典型的神經網路可能有數百萬個權重,用權重直接編碼比較困難”。Andrej 說他以前試過,這幾乎不是人類能幹的事兒 。。

機器之心的進化——軟體2.0的崛起

配圖09:Andrej Karpathy 和神經網路權重

2.1 正規化轉移

在建立深度神經網路時,程式設計師只寫幾行程式碼,讓神經網路自己學習,計算權重,形成網路連線,而不是手寫程式碼。這種軟體開發的新正規化始於第一個 Machine Learning 語言 TensorFlow,我們也把這種新的編碼方式被稱為軟體 2。0。在 Deep Learning 興起之前,大多數人工智慧程式是用 Python 和 JavaScript 等程式語言手寫的。人類編寫了每一行程式碼,也決定了程式的所有規則。

機器之心的進化——軟體2.0的崛起

配圖10:How does Machine Learning work?(TensorFlow)

相比之下,隨著 Deep Learning 技術的出現,程式設計師利用這些新方式,給程式指定目標。如贏得圍棋比賽,或透過提供適當輸入和輸出的資料,如向演算法提供具有 “SPAM” 特徵的郵件和其他沒有”SPAM” 特徵的郵件。編寫一個粗略的程式碼骨架(一個神經網路架構),確定一個程式空間的可搜尋子集,並使用我們所能提供的算力在這個空間中搜索,形成一個有效的程式路徑。在神經網路裡,我們一步步地限制搜尋範圍到連續的子集上,搜尋過程透過反向傳播和隨機梯度下降(Stochastic Gradient Descent)而變得十分高效。

神經網路不僅僅是另一個分類器,它代表著我們開發軟體的 正規化開始轉移,它是 軟體 2。0。

軟體 1。0 人們編寫程式碼,編譯後生成可以執行的二進位制檔案;但在軟體 2。0 中人們提供資料和神經網路框架,透過訓練將資料編譯成二進位制的神經網路。在當今大多數實際應用中,神經網路結構和訓練系統日益標準化為一種商品,因此大多數軟體 2。0 的開發都由模型設計實施和資料清理標記兩部分組成。這從根本上改變了我們在軟體開發迭代上的正規化,團隊也會因此分成了兩個部分: 2。0 程式設計師 負責模型和資料,而那些 1。0 程式設計師 則負責維護和迭代運轉模型和資料的基礎設施、分析工具以及視覺化介面。

Marc Andreessen 的經典文章標題《Why Software Is Eating the World》現在可以改成這樣:“軟體(1。0)正在吞噬世界,而現在人工智慧(2。0)正在吞噬軟體!

2.2 軟體的演化

軟體從 1。0 發展到軟體 2。0,經過了一個叫做“資料產品”的中間態。當頂級軟體公司在瞭解大資料的商業潛力後,並開始使用 Machine Learning 構建資料產品時,這種狀態就出現了。下圖來自 Ahmad Mustapha 的一篇文章《The Rise of Software 2。0》很好地呈現了這個過渡。

機器之心的進化——軟體2.0的崛起

配圖11:軟體產品演化的三種狀態

這個中間態也叫 大資料 和 演算法推薦。在現實生活中,這樣的產品可以是 Amazon 的商品推薦,它們可以預測客戶會感興趣什麼,可以是 Facebook 好友推薦,還可以是 Netflix 電影推薦或 Tiktok 的短影片推薦。還有呢?Waze 的路由演算法、Airbnb 背後的排名演算法等等,總之琳琅滿目。

資料產品有幾個重要特點:1、它們都不是軟體的主要功能,通常是為了增加體驗,達成更好的使用者活躍以及銷售目標;2、能夠隨著資料的增加而進化;3、大部分都是基於傳統 ML 實現的,最重要的一點 資料產品是可解釋的。

但有些行業正在改變,Machine Learning 是主體。當我們放棄透過編寫明確的程式碼來解決複雜問題時,這個到 2。0 技術棧 的轉變就發生了,在過去幾年中,很多領域都在突飛猛進。語音識別 曾經涉及大量的預處理、高斯混合模型和隱式 Markov 模型,但今天幾乎完全被神經網路替代了。早在 1985 年,知名資訊理論和語言識別專家 Fred Jelinek 就有一句經常被引用的段子:“

每當我解僱一個語言學家,我們的語音識別系統的效能就會得到提高

”。

機器之心的進化——軟體2.0的崛起

配圖12:圖解軟體 2。0 的代表應用

除了大家熟悉的影象語音識別、語音合成、機器翻譯、遊戲挑戰之外,AI 在很多傳統系統也看到了早期的轉型跡象。例如 The Case for Learned Index Structures 用神經網路取代了資料管理系統的核心元件,在速度上比 B-Trees 快取最佳化達快 70%,同時節省了一個數量級的記憶體。

所以,軟體 2。0 的正規化具備了這幾個新特徵:1、Deep Learning 是主體,所有的功能都是圍繞神經網路的輸入輸出構建的,例如語音識別、自動駕駛;2、可解釋性並不重要,一個好的大資料推薦廣告可以告訴客戶使用者看到這條廣告的理由,但你沒法從神經網路中找到規則,至少目前不行;3、高研發投入與低開發投入,現在大量的成功都來自大學和科技公司的研究部門,論文絕對比應用多 。。

2.3 軟體 2.0 的優勢

為什麼我們應該傾向於將複雜的程式移植到軟體 2。0 中?Andrej Karpathy 在《Software 2。0》中給出了一個簡單的答案:它們在實踐中表現得更好!

容易被寫入晶片

由於神經網路的指令集相對較小,主要是矩陣乘法(Matrix Multiplication)和閾值判斷(Thresholding at Zero),因此把它們寫入晶片要容易得多,例如使用定製的 ASIC、神經形態晶片等等(Alan Turing 在設計 ACE 時就這樣考慮了)。例如,小而廉價的晶片可以帶有一個預先訓練好的卷積網路,它們可以識別語音、合成音訊、處理視覺訊號。當我們周圍充斥著低能耗的智慧時,世界將會因此而大不同(好壞皆可)。

非常敏捷

敏捷開發意味著靈活高效。如果你有一段 C++ 程式碼,有人希望你把它的速度提高一倍,那麼你需要系統性的調優甚至是重寫。然而,在軟體 2。0 中,我們在網路中刪除一半的通道,重新訓練,然後就可以了 。。它的執行速度正好提升兩倍,只是輸出更差一些,這就像魔法。相反,如果你有更多的資料或算力,透過新增更多的通道和再次訓練,你的程式就能工作得更好。

模組可以融合成一個最佳的整體

做過軟體開發的同學都知道,程式模組通常利用公共函式、 API 或遠端呼叫來通訊。然而,如果讓兩個原本分開訓練的軟體 2。0 模組進行互動,我們可以很容易地透過整體進行反向傳播來實現。想象一下,如果你的瀏覽器能夠自動整合改進低層次的系統指令,來提升網頁載入效率,這將是一件令人驚奇的事情。但在軟體 2。0 中,這是預設行為。

它做得比你好

最後,也是最重要的一點,神經網路比你能想到的任何有價值的垂直領域的程式碼都要好,目前至少在影象、影片、聲音、語音相關的任何東西上,比你寫的程式碼要好。

2.4 Bug 2.0

對於傳統軟體,即軟體 1。0,大多數程式都透過原始碼儲存,這些程式碼可能少至數千行,多至上億行。據說,谷歌的整個程式碼庫大約有 20 億行程式碼。無論程式碼有多少,傳統的軟體工程實踐表明,使用封裝和模組化設計,有助於建立可維護的程式碼,很容易隔離 Bug 來進行修改。

但在新的正規化中,程式被儲存在記憶體中,作為神經網路架構的權重,程式設計師編寫的程式碼很少。軟體 2。0 帶來了兩個新問題:不可解釋 和 資料汙染。

因為訓練完成的神經網路權重,工程師無法理解(不過現在對理解神經網路的研究有了很多進展,第六章會講到),所以我們無法知道正確的執行是為什麼?錯誤又是因為什麼?這個和大資料演算法有很大的不同,雖然大多數的應用只關心結果,無需解釋;但對於一些安全敏感的領域,比如 自動駕駛 和 醫療應用,這確實很重要。

在 2。0 的堆疊中,資料決定了神經網路的連線,所以不正確的資料集和標籤,都會 混淆神經網路。錯誤的資料可能來自失誤、也可能是人為設計,或者是有針對性的投餵混淆資料(這也是人工智慧領域中新的 程式道德規範 問題)。例如 iOS 系統的自動拼寫功能被意外的資料訓練汙染了,我們在輸入某些字元的時候就永遠得不到正確的結果。訓練模型會認為汙染資料是一個重要的修正,一但完成訓練部署,這個錯誤就像病毒一樣傳播,到達了數百萬部 iPhone 手機。所以在這種 2。0 版的 Bug 中,需要對資料以及程式結果進行良好的測試,確保這些邊緣案例不會使程式失敗。

在短期內,軟體 2。0 將變得越來越普遍,那些沒法透過清晰演算法和軟體邏輯化表述的問題,都會轉入 2。0 的新正規化,現實世界並不適合整齊的封裝。就像明斯基說的,軟體開發應該更多的關心目標而不是過程,這種正規化有機會顛覆整個開發生態,軟體 1。0 將成為服務於軟體 2。0 周邊系統,一同來搭建 面向智慧的架構。有越來越清楚的案例表明,當我們開發通用人工智慧(AGI)時,它一定會寫在軟體 2。0 中。

Top