未來的IT系統:DITS – Differentiable IT System

weixin_34337265發表於2016-12-21

不是我不明白,這世界變化快 ——《不是我不明白》崔健

IT系統的困境

IT技術是用來管理和處理資訊的技術,IT系統是使用IT技術構建的系統。經過幾十年的發展,IT系統越來越複雜,動輒幾百萬上千萬行程式碼。然而,現代IT系統依然非常脆弱,一個業務上的變化,就可能導致一個子系統的重新設計;而一個顛覆性業務模式的出現,可能會導致整個IT系統被替換。

2267652-da1a5022263a540d.png

當我們在觀察或瞭解昆蟲以及其他低等生物時,會產生一種毛骨悚然的感覺:活動熱鬧非凡,可家裡一個人都沒有!——丹尼爾·丹尼特

設計實現IT系統的最大挑戰來自於需求的變化。各種程式語言、設計模式,以及軟體工程實踐等,都在試圖解決這個挑戰。當前,用效率最高的軟體開發方式——使用具有高階抽象能力的程式語言,採用響應式程式設計(Reactive Programming)正規化和微服務架構,引入DevOps和持續交付等工程實踐等開發一個新需求,也要以天為單位;如果要開發一個新的元件,可能需要以周為單位;而如果要開發一個全新的業務模式,至少要以月為單位。

對大部分程式設計師來說,各種新技術層出不窮,每一項都打著提高開發效率的旗號,然而事實是:程式設計師的工作並沒有因為技術的進步而減少,相反,我們感覺自己越來越累,不僅要學習新技術,同時還要應對越來越頻繁的需求變化。

於2000年左右出現的電子商務顛覆傳統零售行業大概用了10年時間,2006年左右出現的社交網路顛覆入口網站大概用了五六年的時間,2012年左右出現的共享經濟顛覆傳統商業模式大概用了3年時間。一個合理但未經驗證的猜想是:顛覆性業務模式的出現頻率以及顛覆速度似符合摩爾定律,即每18個月,顛覆性業務模式的出現頻率和顛覆速度會提高一倍。

2267652-fb55d117e5130c29.jpg

不管我們使用什麼樣的程式語言,採用什麼樣的架構,引入什麼樣的工程實踐,一個業務需求的生命週期都要包含產品規劃、業務分析、方案設計、開發、測試、上線。這樣的研發週期,在不遠的未來,將無法跟上業務需求變化的速度。

自然的啟示

《自私的基因》一書提到,基因為了將自己的遺傳資訊傳遞下去,進化出各種載體——即生物體——以應對環境的變化,讓基因得以生存並傳遞下去。對於一些早期的生物載體,基因通過硬編碼的方式,將一些複雜功能固化到生物體的遺傳資訊中。比如有一種名為“掘地蜂”的昆蟲,在產卵時會嚴格遵照預定的程式:

  • 用自己的刺麻痺一隻蟋蟀;
  • 將蟋蟀拖到挖好的洞口;
  • 進洞檢視,確保安全;
  • 回到洞口,把麻痺的蟋蟀拖進洞;
  • 產卵;
  • 密封洞口,走人。

這套程式看起來非常複雜,我們不禁要感嘆,一個簡單的生物體,竟然可以完成這麼複雜的事情。然而,當掘地蜂進入洞穴檢視時,實驗人員將麻痺的蟋蟀移動幾英寸,等掘地蜂從洞口出來,並不會直接將移動過的蟋蟀拖進洞,而是將其拖到洞口,然後再一次進洞檢查。如果期間蟋蟀又一次被移動,哪怕只是一英寸,掘地蜂也會重複前面的過程。正如丹尼特所說:看起來“活動熱鬧非凡,可家裡一個人都沒有!”

2267652-fb6c2808efada637.jpg

《機器人叛亂》對這一觀點提出了進一步的擴充套件。為了讓生物載體能夠更好地適應快速變化的環境,基因發展出了弱約束目標。相比硬編碼複雜行為,基因只是給其載體下達要完成的目標,而不再是具體的操作計劃,由載體針對當時的環境做出符合目標的最佳選擇。如果基因會說話,基因會給我們的大腦發出類似的指令:“事情發展太快,沒辦法一一詳述,大腦,你只需在考慮我們的通用目標(生存和繁殖)前提下,做你認為最好的選擇。”

生物體適應能力越來越強,同時也導致環境變化越來越快,反過來迫使我們不得不發展出更強的適應能力,就像進入正反饋的自動控制系統,系統開始進入不穩定狀態,直到崩潰,然後重新尋找平衡。

IT系統的轉折點

程式設計師之於IT系統,就如同基因之於載體。基因在生物進化早期也遇到過這樣的困難,儘管進化出了非常複雜的生物載體,但是對於顛覆性的環境變化(比如火山爆發、地殼運動、彗星撞地球等),這些載體依然表現的不堪一擊。

5億年前的寒武紀大爆發,大量生物出現在地球上,基因像是想通過這樣的方式,發展出複雜的載體,來應對變化的環境,然而,複雜並沒有帶來期望的適應能力。結果大家都知道了,6500萬年前,基因進化出來的最複雜、最具有統治力的載體——恐龍——滅絕了。今天我們發明了新語言、新框架、新實踐,期望通過這樣的方式可以更快的開發出更復雜的系統。然而,再複雜的系統,面對不停變化的混沌世界,依然不堪一擊。

2267652-22ed682af5c54a64.gif

是時候換個思路了。

我們也該考慮類似基因的弱約束目標,讓IT系統具備一定的自主性,可以根據人類制定的目標,做出它認為最優的決策。具備自主性的IT系統,能夠根據人類制定的目標,針對複雜業務變化,做出認為的最優選擇。 這就是未來的IT系統。

DITS - Differentiable IT System

目前最有希望能夠讓IT系統具備自主性的技術,來自深度學習。深度學習通過建立層級化表徵的方式,讓計算機可以從經驗中學習並理解這個世界。

[^1]深度學習和經典機器學習方法的最大區別在於,深度學習不需要某個領域的專家來設計特徵提取規則,可以在輸入資料和業務目標之間實現端到端的模型訓練。對於深度學習的使用者來說,只需要準備好訓練資料,設定好訓練目標(即設定Loss Function,損失函式),確定深度神經網路的結構,然後進行訓練,就可以得到滿足目標的神經網路模型。

這其中的魔法發生在訓練過程中。我們可以將複雜的神經網路用計算圖的方式表達出來。在神經網路的末端,也就是輸出層,通過損失函式計算出實際值和目標值之間的差別。得益於微積分中的鏈式法則,損失函式的結果誤差可以在計算圖中反向傳播(Back Propagation),一層一層的調整神經網路引數,讓神經網路在下一次的計算中距離目標更近一步。[^2]

2267652-bc710f9c898664fa.jpeg

在反向傳播的過程中,每一層網路引數的修正值是通過計算誤差和引數之間的梯度得到的。一個函式在某個點存在梯度,需要在這一點保證函式可微分,也就是本文題目中的Differentiable。所以,深度神經網路的學習能力,來自神經網路的可微分性(Differentiable)

如果我們能夠讓IT系統具備可微分性,IT系統就可以基於人類指定的業務目標,從歷史資料中學習,並不斷更新自己,從而具備自主性。當變化來臨,系統可以在沒有人類參與的情況下自主學習並調整,最終適應變化。寫出具有可微分性程式的程式設計方式,叫做可微分程式設計(Differentiable Programming)。[^3]這樣的IT系統,稱之為“可微分IT系統”,即DITS,Differentiable IT System。

當前,大部分AI技術只是作為獨立的服務存在,用來輔助傳統IT系統,比如影像識別、語音識別、自然語言處理等。而DITS本身就是一個AI系統,或者說,是一個內建AI能力的IT系統。

現在,我們經常使用A/B測試來改程式序,然而開發A/B測試程式碼、設計策略、收集反饋、分析、修改程式碼,一系列過程下來我們發現,使用者點選紅色按鈕的比例比藍色按鈕多出30%,於是我們決定按鈕使用紅色。這就是所謂資料驅動的產品運營。

而對於DITS來說,我們可以設定弱約束目標為提高使用者點選按鈕的比例。每當使用者執行一次操作,DITS就會計算這次操作和期望目標之間的差別,調整內部神經網路引數,從而自主地改進使用者體驗。更進一步,DITS甚至還可以對不同的使用者展示不同的顏色,比如對於喜歡點紅色按鈕的使用者展示紅色,對於喜歡點藍色按鈕的使用者展示藍色。

這還只是一個具備自我學習能力的IT系統所做事情的一個簡單例子,對於更復雜的業務場景,DITS所能做的,會超出我們的想象。

實現DITS

基於可微分性構造計算機程式,讓計算機具備學習能力,目前是深度學習領域的熱點。早期的嘗試來自於DeepMind在2014年發表的神經圖靈機(Neural Turing Machine,NTM)[^4],2016年DeepMind在Nature上發表了NTM的更新版本,可微分神經計算機(Differentiable Neural Computer,DNC)[^5]。DNC已經可以根據一些零散的路線資訊,推測出地圖上個點之間的連線情況,並計算最短路徑。

2267652-dc968259553b74e8.jpg

另外一些基於記憶網路(Memory Network)的嘗試也已經取得一些突破,比如Facebook在ICLR 2017上發表的遞迴實體網路(Recurrent Entity Network)[^6]可以通過所有Facebook提出的bAbI測試。

倫敦大學學院(University College London,UCL)的研究人員實現了一種具有可微分性的Forth語言直譯器[^7],程式設計師編寫Forth程式時,可以留下一些空白(slot),這些空白會被直譯器在執行時填充,並且在執行過程中,直譯器會根據程式的輸入和輸出調整這些空白部分的邏輯。

在工程領域,這一程式設計方式還處於早期階段,尚不成熟,但已經有很多人在這一方向上做出嘗試[^8],以及ThoughtWorks的開源專案DeepLearning.scalaDeepDarkFantasy

要想完整的實現DITS,還需要很多努力,尤其是要想用DITS替代目前已有的複雜IT系統,還需要很長的一段路。不過,變革已然在醞釀之中。

在計算機被建造出來的早期,大部分人認為那只是學術領域的玩具,是隻有書呆子模樣的黑客們才能掌握的黑科技。然而,不過幾十年的時間,計算機就完全改變了我們的生活。

今天的AI技術,包括Differentiable Programming和DITS,就像50年前的程式設計技術一樣,還處於黑科技的範疇。然而,我們也許不用再等50年,就會看到今天的黑科技,將再一次改變世界。

One More Thing

《機器人叛亂》一書提到,“某些行為服務於載體的目標,它們未必有助於實現基因的目標”。那麼,作為人類未來的資訊載體——DITS——也會出現目標衝突的情況,到時候,我們人類要何去何從呢?

2267652-bea583f3b666dd0f.jpg

相關文章