日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编程就是压缩

發布時間:2024/4/11 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编程就是压缩 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Programming?is?Compression

業務需求會不斷扔各種案例過來,這樣的情況下,應該怎樣怎樣。編程的過程就是把各種各樣的具體case進行壓縮表達的過程。除了需求,各種 bug report 也是輸入。

首先我們來看一下目標函數的問題

靜態壓縮 v.s. 泛化能力

Static Compression v.s. Generalization Ability

static compression 的目標:給定所有的當前需求,最小化整體的實現代碼量。方法就是能復用就復用,不能簡單的復用的,創造條件也要強行復用。

generalization ability 的目標:給定過去的需求,進行合理的預測,最小化遷移到未來可能的新需求的成本。其實現手段就是保持代碼整潔,有結構。但是問題在于什么叫“有結構”很難學習。相反,最小化整體的實現代碼量是一個更容易銷售,也更容易學習的目標。

《業務邏輯拆分模式》所描述的“主板+插件”的結構,就是給“有結構”提供一個易于學習的目標函數。在給定如下條件的前提下:

  • 主板不反向依賴插件

  • 插件之間不互相編譯期依賴,運行時依賴必須通過主板開 SPI 來實現數據互通

  • 實現了業務的需求

  • 用戶體驗的一致性

這些條件都滿足之后,讓“主板的代碼行數”越少,就是越好。

這里“合理的預測”似乎和不要預先設計是矛盾的。然而所有的“泛化”都是某種預測。整潔有結構的代碼“賭”的是什么呢?賭的就是新需求大概率是 localized 的。

規律性 v.s. 特異性

Regularity v.s. Specificity

壓縮的前提是對象本身具有內在的規律性。壓縮的過程就是把規律性的部分和特異性的部分分離出來。這個也就體現在了各種“中臺”,“低代碼”,“DSL”的說辭之中,所謂一部分人搞定 80%,剩下的領域專家(也就是處理特異性的人)去搞定特異性的 20%。

然而這里的前提是處理 20% 的人要先知道之前的工序做了哪部分的 80%,才能知道自己要做哪 20%。wetware 相比 hardware 就是自然進化的速度太慢,千兆網,萬兆網,升級速度杠杠的。但是人與人的溝通還是要靠非常低效率的文字理解和聲波通信。

無論這 20% 怎么補齊,是 DSL 傳參也好,是給生成的代碼打個補丁也好。只要代碼量比較大,和那 80% 部分的溝通就會越多。除非需求內在的 Regularity 非常強,可以用極其少量的參數組合已有功能來表達新需求,否則大概率寫這 20% 代碼的人會非常痛苦。這也是為什么“低代碼”無法流行的根本原因。

機器學習

一部分人處理 Regularity,一部分人處理 Specificity:這就是所謂“中臺”,“低代碼”,“DSL”。核心是 specificity 部分要足夠小,才能彌補溝通成本。

人類來提供 Regularity,機器處理 Specificity:一開始是 logical programming,人類要提供非常多的 regularity。后來是 probabilistic programming,人類需要提供 generating function 來編碼專家經驗到概率分布里。到后來 deep neural network,人類需要用 convolution filter 來用所謂 inductive bias 的方式 encourage 神經網絡往某個方向學習

hinton 提出的 capsule network 的理想就是能把人類提供的 inductive bias 最小化,只提供

  • recursive:這個世界是層次化組織的,迭代的

  • part-whole:一個child僅從屬于一個parent

然后來機器去自監督學習到剩余的部分。但是要把“這個世界是層次化組織的”這樣的 regularity 表達出來是及其困難的。

  • CNN 本身是一層堆一層的,但是其學習到的特征并非如人所愿那么層次化。CNN堆了96層,也未必就能確定96層的 part-whole 就是足夠了的。

  • Autoencoder 號稱要搞個 bottleneck,就是要把 bottleneck 體現為中間 layer 的參數數量要更少一點上。這樣的表達太“直白”了,效果并不好。GAN 等一眾后續就是把這個 bottleneck 的參數限制給去掉了。

樸素直白地拿 architecture 的幾何形狀表達 inductive bias 是不 work 的。AGI 所需的 inductive bias 不太可能那么快被找到表達的方式。即便找到了,也未必能在當前的硬件下展示其威力而被 bechmarker 們所忽略。

所以更可能的情況是讓人類來表達“規律性”,所謂專家經驗。然后由機器來處理“特異性”。probabilistic programming 這樣的人機混合的編程方式會得到更廣泛的應用。越來越多的程序員會從直接編碼規則來駕馭機器,變成“聲明式編程”。把規律性的部分提取成 what,讓機器去找到 how。

點擊”閱讀原文“,訪問《業務邏輯拆分模式》電子書?https://autonomy.design

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的编程就是压缩的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。