神經網絡引領“軟件2.0”,傳統程序員真的要失業了

jopen 7年前發布 | 26K 次閱讀 神經網絡

隨著近年來深度學習取得的突破,其應用也開始不斷開疆拓土。比方說在圖像識別、語音識別乃至于圍棋游戲等方面 AI 都已經比人厲害。但是這些大部分是把神經網絡當成分類器來用。Tesla AI 總監,OpenAI 前研究科學家 Andrej Karpathy 認為這種看法是一葉障目,其實神經網絡的作用比這要大得多,它將是我們編寫軟件方式變革的開始,跟它引領的軟件 2.0 相比,傳統程序員寫出來的代碼將沒有任何優勢。而且我們如果將來能實現通用人工智能的話,一定會是軟件 2.0 寫出來的。

神經網絡引領“軟件2.0”,傳統程序員真的要失業了

我有時候看見有人把神經網絡稱為是“你的機器學習工具箱的又一個工具”。我們認為這東西有利有弊,有時候你可以用來贏下 Kaggle 競賽(注:大數據競賽平臺,已被 Google 收購)。不幸的是,這種解釋完全是只見樹木不見森林。神經網絡不僅僅只是又一個分類器,而且還代表了我們編寫軟件方式的一個根本性轉變的開始。它們是軟件 2.0。

軟件 1.0 的“典型技術棧”我們都很熟悉——筒倉都是用我們熟悉的語言比如 Python、C++等編寫的。它包含有明確指令,那是程序員寫給計算機的。但程序員寫下的每一行代碼都是在程序空間中一個特定的點,會產生某種我們希望看到的行為。

軟件 2.0 就不一樣,它是用神經網絡權值編寫的。這一代碼的編寫過程并沒有任何人的參與,因為權值太多了(通常會有幾百萬),而且直接對權值進行編碼是比較困難的(我試過)。相反,我們對想要的程序的行為指定了一些約束(比如樣例輸入輸出對的數據集),然后利用我們可以調配的計算資源在程序空間中尋找能滿足該約束的程序。在神經網絡的情況下,我們把搜索限制在該程序空間的連續子集里面,通過反向傳播和隨機梯度下降搜索過程可以非常有效(多少有點令人驚訝)。

結果表明,很大一部分的現實世界問題都具備那種屬性,即收集數據要比顯式編程容易得多的屬性。將來很大一部分的程序員都不在需要維護復雜的軟件庫,編寫犬牙交錯的程序或者分析其運行時。他們的工作將變成收集、清洗、操縱、標記和分析提供給神經網絡的數據,并對其進行可視化。

軟件 2.0 不會取代 1.0(的確,“編譯”2.0 代碼需要大量 1.0 的基礎設施來進行訓練和推理),但會逐步接管軟件很大一部分過去是 1.0 負責的事。我們可以看看其中一些具體的例子:

視覺識別過去一般包含有一些設計好的功能,最好再加上一點機器學習的東西(比如 SVM)。從此之后,我們開發出發現更強大圖像分析程序的機制(ConvNet 架構家族),最近我們已經開始搜索架構了。

語音識別過去往往牽涉到大量處理,高斯混合模型以及隱馬爾科夫模型,但今天的語音識別幾乎全都是神經網絡的東西。

語音合成過去一度采用了各種拼接機制,但今天的最新模型是可生成裸音頻信號輸出的大型卷積網絡(比如 WaveNet)。

機器翻譯過去曾經采用基于短語的統計技術,但神經網絡正在迅速占據統治地位。我喜歡的架構是在多語言設定中受訓的,也就是一個單模型可以將任何源語言翻譯成任何目標語言,并且監督很少(或者徹底無監督)。

機器人有著悠久的問題分解傳統,也就是把問題分解為傳感模塊、姿態估計、規劃、控制以及不確定建模等,利用的是顯式表示和算法而不是中間表示。我們跟目標還有相當的距離,但加州大學伯克利分校和 Google 的研究已經在提示我們,在表示所有這些代碼方面,軟件 2.0 也許能夠做得好很多。

游戲。圍棋程序久已有之,但 AlphaGo Zero (一種查看棋盤裸狀態然后走一步棋的卷積網絡)現在已經成為有史以來最強大的圍棋程序。我預計我們即將在 DOTA2 或者星際爭霸等領域看到類似的結果。

你也許會注意到上述很多工作都是在 Google 完成的。這是因為在用軟件 2.0 代碼重寫自身大部分這件事情上,Google 目前走在最前列。“統治一切的模型”讓我們對這種做法未來可能的樣子可以先睹為快,那就是個體領域的統計強度被融入到對世界的一致理解當中。

軟件 2.0 的好處

為什么我們應該優先考慮將復雜程序移植到軟件 2.0?一個容易想到的答案顯然是在實踐中它表現得更出色。然而,優選這種技術棧還有很多其他的便利性理由。下面我們就來看看其中一些軟件 2.0 的好處:

計算同構性。典型的神經網絡是由兩種操作構成的:矩陣乘法以及閾值轉換(ReLU)。這跟典型軟件的指令集相比,后者異構性顯然更強且更復雜。由于你只需要針對少量核心計算基元(比如矩陣乘法)提供軟件 1.0 的實現,保證程序的正確性/性能會變得容易許多。

容易變成硬件。作為推論,既然神經網絡的指令集相對較小,把該網絡實現成更接近硅片的東西,比如定制化 ASIC、神經形態芯片等就容易多了。當低功耗智能變得無所不在時,世界也會發生改變。比方說,小型廉價的芯片可以內置預先訓練好的 ConvNet、語音識別器,WaveNet 語音合成網絡等,所有這些都可以集成到一個小型的 ProtoBrain(游戲《最高指揮官》中信息大腦化地球人的原腦)內,然后附著到任何東西上面。

恒定的運行時。典型神經網絡每一次迭代的爭相傳遞都需要完全相同的 FLOPS(浮點運算時間)。不管你的代碼在龐大的 C++ 代碼庫中的執行路徑怎么變,其可變性依然為0。當然,你的計算圖可能是動態的,但執行流通常仍然受到顯著約束。這樣一來我們幾乎就能保證永遠也不會陷入到意外的無限循環之中。

恒定的內存使用。這條跟上一條相關,由于沒有了任何動態分配的內存,所以交換到磁盤,或者內存泄露這些導致你需要對代碼追根溯源的可能性也幾乎沒有了。

高度可移植。相對于典型的二進制或者腳本,矩陣乘法序列在任何計算配置中運行起來都要容易得多。

非常敏捷。如果你的程序是 C++ 代碼,有人希望你把它的執行加快一倍(必要的話可以性能為代價)的話想把系統調優到新的要求是非常困難的。不過在軟件 2.0 中我們可以把神經網絡的通道撤掉一半然后重新進行訓練——這樣一來網絡的速度就可以提高 1 倍,只是表現會稍微糟糕一點。這簡直就像變魔法一樣。相反,如果你正好拿到了更多的數據/計算,你馬上就能通過追加通道然后對網絡進行再訓練來讓程序表現更出色。

模塊可以融合實現全局最優。我們的軟件往往解耦為通過公共函數、API 或者端點相互通信的模塊。然而,如果兩個原先是獨立訓練的軟件 2.0 模塊交互的話,我們很容易就可以通過整體來進行反向傳播。如果你可以對 web 瀏覽器 10 層以下的底層系統指令自動進行重新設計來實現頁面加載的更高效率的話,想想看這會有多么驚艷。有了 2.0,這將變成默認之舉。

很容易學。我喜歡開玩笑說深度學習很膚淺。它不是核物理,需要你有博士學位才能做出點有用的東西來。其基本概念只需要一點基礎的線性代數、微積分、Python,然后聽聽 CS231n 的課程即可。當然,大量的專業知識和直覺掌握起來是需要時間的,所以準確點的說法是軟件 2.0 技術棧入門容易精通很難。

比你厲害。最后,也是最重要的一點,在很大一部分的有價值的垂直領域應用中,至少在圖像/視頻,語音/語言以及文本方面,神經網絡要比你我任何人能想出的代碼都要好。

軟件 2.0 的局限

2. 0 技術棧也存在一些缺點。優化到最后我們會得到一個工作得很好的大型神經網絡,但是我們卻很難說出它是怎么做到的。在很多的應用領域中,我們都只能在我們可以理解的精確度為 90% 的模型與我們無法理解但精確度達到 99% 的模型之間做出選擇。

2. 0 技術棧可能會以不夠直觀且令人尷尬的方式失效,或者更糟,2.0 軟件可能會“悄悄地失效”,比方說默默地接受訓練數據中的偏見,這個是很難進行正確的分析和檢查的,因為大多數情況下其規模都會輕易達到數百萬之巨。

最后,我們還在探索這一技術棧的某些特殊屬性。比方說,對抗和攻擊例子的存在就聚焦了這一技術棧的不直觀性。

最后一點思考

如果你把神經網絡看成是軟件棧而不是僅僅只是個很好的分類器的話,很快你就會發現它在變革整個軟件方面具有龐大的優勢和潛能。

從長期來看,軟件 2.0 的未來是光明的,因為很多人都越來越清楚,如果有朝一日我們能開發出 AGI(通用人工智能)的話,那一定是用軟件 2.0 寫成的。

軟件 3.0 會是啥樣?那就完全得看 AGI 了。

來自: 36kr.com

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!