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

2021-02-20 ThoughtWorks洞見

不是我不明白,這世界變化快。

IT系統的困境

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

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

設計實現IT系統的最大挑戰來自於需求的變化。

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

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

於2000年左右出現的電子商務顛覆傳統零售行業大概用了10年時間,2006年左右出現的社交網絡顛覆門戶網站大概用了五六年的時間,2012年左右出現的共享經濟顛覆傳統商業模式大概用了3年時間。

一個合理但未經驗證的猜想是:顛覆性業務模式的出現頻率以及顛覆速度近似符合摩爾定律,即每18個月,顛覆性業務模式的出現頻率和顛覆速度會提高一倍。

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

自然的啟示

《自私的基因》一書提到,基因為了將自己的遺傳信息傳遞下去,進化出各種載體——即生物體——以應對環境的變化,讓基因得以生存並傳遞下去。對於一些早期的生物載體,基因通過硬編碼的方式,將一些複雜功能固化到生物體的遺傳信息中。比如有一種名為「掘地蜂」的昆蟲,在產卵時會嚴格遵照預定的程序:用自己的刺麻痺一隻蟋蟀、將蟋蟀拖到挖好的洞口、進洞查看並確保安全、回到洞口把麻痺的蟋蟀拖進洞、產卵、密封洞口、走人。

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

《機器人叛亂》對這一觀點提出了進一步的擴展。為了讓生物載體能夠更好地適應快速變化的環境,基因發展出了弱約束目標。相比硬編碼複雜行為,基因只是給其載體下達要完成的目標,而不再是具體的操作計劃,由載體針對當時的環境做出符合目標的最佳選擇。

如果基因會說話,基因會給我們的大腦發出類似的指令:「事情發展太快,沒辦法一一詳述,大腦,你只需在考慮我們的通用目標(生存和繁殖)前提下,做你認為最好的選擇。」

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

IT系統的轉折點

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

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

是時候換個思路了。

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

DITS - Differentiable IT System

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

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

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

在反向傳播的過程中,每一層網絡參數的修正值是通過計算誤差和參數之間的梯度得到的。一個函數在某個點存在梯度,需要在這一點保證函數可微分,也就是本文題目中的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已經可以根據一些零散的路線信息,推測出地圖上個點之間的連接情況,並計算最短路徑。

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

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

在工程領域,這一編程方式還處於早期階段,尚不成熟,但已經有很多人在這一方向上做出嘗試8,以及ThoughtWorks的開源項目DeepLearning.scala和DeepDarkFantasy。

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

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

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

One More Thing

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


- 相關閱讀 -

點擊[閱讀原文]查看文章全部內容&綠字部分。

本文版權屬ThoughtWorks公司所有,如需轉載請在後臺留言聯繫。

相關焦點

  • NIOS II CPU系統中的system id和system timestamp功能、意義、作用介紹
    今天遇到一個有網友提問:在qsys系統中,system id加了,下載的時候systemid這一項校驗也通過了,但是system timestamp
  • 《RHEL7專題系列》之systemctl控制系統服務
    systemd是一種新的Linux管理系統和服務的進程,它可以在系統啟動時和運行時激活系統資源、伺服器守護進程和其他進程。在RHEL 7中systemd取代了init系統,成為新的默認初始化系統,用systemd初始化工具來啟動系統,優勢在於並發讀取、管理服務。
  • Base stock system-基礎庫存系統
    APICS詞典定義base stock system–A method of inventory
  • uCareSystem:Ubuntu/Linux Mint 的一體化系統更新和維護工具
    uCareSystem Core[1] 是一種能夠自動執行基本的系統維護活動的輕型實用程序,另一方面它可以通過多種方式減少系統管理員的任務,節省大量時間
  • 【怪獸叔叔丨世界1分鐘】北鬥衛星導航系統 BeiDou Navigation Satellite System
    6月23日,中國成功發射北鬥衛星導航系統的最後一顆衛星上太空,將會成為世界上第四個導航定位系統China launched the last satellite
  • systemctl和nmcli
    Centos 7.x開始,Centos開始使用systemd服務,systemd是 Linux 系統工具,用來啟動守護進程,是Linux系統最新的初始化系統
  • Møffenzeef 發布 Eurorack 鼓機系統 Møffenzeef System
    模塊合成器的優點就是你可以自由組建你自己想要的系統,Møffenzeef Modular 的 Møffenzeef System 系統可以滿足你瘋狂的實驗型合成器夢想
  • The Endomembrane System Regulation
    The endomembrane system includes different membrane-bound organelles. Various tasks are being performed in this system, for instance, the transportations of protein.
  • 內核探測工具systemtap簡介
    什麼是systemtap假如現在有這麼一個需求:需要獲取正在運行的 Linux 系統的信息,如我想知道系統什麼時候發生系統調用,發生的是什麼系統調用等這些信息,有什麼解決方案呢?最原始的方法是,找到內核系統調用的代碼,加上我們需要獲得信息的代碼、重新編譯內核、安裝、選擇我們新編譯的內核重啟。
  • 利用maltab的system identification獲取系統的傳遞函數加速你的環路設計
    前言:昨天晚上發了一篇用手動添加零極點來模擬系統傳遞函數的文章,今天跟大神請教了一番,利用system identification來識別bode
  • 10、The introduction of RF system
    了解RF可以產生plasma後,接下來介紹RF system的構成。關於plasma基本知識可移步1、等離子體基礎知識介紹圖1 不同頻率、波長的電磁波一般的RF powder system由三大部分組成,分別為:(1)射頻電源(RF generator),(2)傳輸線(transmission line),(3)阻抗匹配系統(impedance matching system)。
  • 使用 Systemctl 命令 來管理系統服務
    使用像poweroff、shutdown命令一樣,systemctl命令可以關閉系統,重啟或進入休眠狀態。Systemd具有Targets的概念,這些Targets的目的與sysVinit系統中的運行級別相似。sysVinit中的運行級別主要是數字(0,1,2,-6)。
  • 第358天:systemctl命令
    根據是否指定了--system、--user、--runtime或--global,這將為系統、僅為調用用戶、僅為系統的此引導、所有用戶的所有將來登錄或僅為此引導啟用該單元,請注意,在最後一種情況下,不會重新加載systemd守護程序配置。
  • Guideline for air conditioning system use during the epidemic
    Before using, the air conditioning system need to be cleaned strictly, and it can be put into use only if the cleaning effect passes the hygiene test..
  • 如何用 systemtap 排查問題
    但是系統編程,就不能狂打日誌,而且很多調用棧都處於 kernel space,那麼普通的調試手段就顯得捉襟見肘了。此時 systemtap 就能派上用場,他會在內核函數加 probe 探針,對 kernel space 函數調用進行統計匯總,甚至可以對其進行幹預。但是對 user space 調試支持不是很好。
  • 內核調試神器SystemTap — 簡介與使用(一)
    (3) 獲取源碼git clone git://sourceware.org/git/systemtap.git安裝(1) Ubuntu發行版1. 安裝systemtap包apt-get install systemtap2.
  • 蘋果新機首次明確支持北鬥導航系統|Apple Tunes Into China's Homegrown Nav System
    這四款機型將兼容北鬥導航系統。這是蘋果iPhone系列手機首次在定位功能技術規格中明確使用北鬥導航系統。s new iPhone 12 series smartphones are now all compatible with China’s GPS alternative BeiDou, marking the first time the iconic U.S. technology company has implicitly endorsed the Chinese navigation system
  • Linu中SLUB的調試 [二] - 使用Systemtap
    SLUB的調試,展現systemtap的其他一些功能。相比起近兩年才出現的bpftrace,自2005年就作為RHEL 4.2中technology preview推出的systemtap算是歷史悠久。伴隨這麼多年的發展,systemtap積累了豐富且成熟的功能,但同時它也是一個相對「重型」的工具。
  • 一起學IC驗證 SystemVerilog 110題(四)
    [ SV 032 ] $realtime是指Linux伺服器系統時間嗎?A:$time型變量會按照時間單位進行取整,$realtime可以保留小數部分。A:其實並不用真的去數,在systemverilog裡,有系統函數$countbits(32'h53AC1043, '1)或者$countones(32'h53AC1043)。[ SV 036 ] 下面代碼中的$random受sv seed控制嗎?