銜接抽象數學與系統工程:用於 Rust Tiny ML 的範疇論

高階數學抽象與低階系統程式設計的交集,鮮少成為實用軟體工程的沃土。通常,範疇論被歸類於 Haskell 等純函數式語言的領域,而機器學習 (ML) 則被視為一系列數值線性代數運算。然而,一個名為 Category Theory for Tiny ML in Rust 的新專案,試圖透過將 ML 不僅視為計算,而是視為由物件、轉換與約束組成的結構化管線來彌合這一差距。

由 Hamze Ghalebi 與 Farzad Jafarranmani 開發,這份工作草案提出了一個框架,其中範疇論的數學嚴謹性可作為工程工具,用於在 Rust 中構建可靠、可稽核且易於維護的 ML 系統。透過將數學概念直接映射到 Rust 的型別系統,作者旨在使範疇論的「抽象胡言」變得可執行且具體。

概念映射:從數學到 Rust

該專案的核心在於將範疇概念轉換為 Rust 程式語言的慣用法。目標是擺脫將 ML 視為張量「黑盒」的做法,轉而將其視為態射 (morphisms) 的組合。

領域物件作為 Rust 型別

在範疇論中,一個範疇由物件與態射組成。在此框架下,領域物件被直接映射到 Rust 型別。這確保了流經 ML 管線的數據是嚴格型別化的,從而減少執行時錯誤,並使系統架構在程式碼中顯得明確。

態射作為型別化轉換

態射(物件之間的箭頭)被實作為型別化轉換。在 ML 的情境下,一個態射可以是一個神經網路層或是一個預處理步驟。透過將這些定義為態射,系統強調了這些函數的組合,確保一個轉換的輸出在數學與程式層面上都與下一個轉換的輸入相容。

訓練作為自同態

書中較具啟發性的想法之一是將訓練視為自同態 (endomorphism)。自同態是一種將物件映射回自身的態射。在此框架下,訓練被視為模型狀態的重複轉換,其中狀態是正在被轉換以隨時間提升性能的物件。

從理論到生產

該專案由兩個截然不同的視角驅動:由 Farzad Jafarranmani 提供的數學基礎(專精於證明論與指稱語義學),以及 Hamze Ghalebi 的生產工程視角(專注於 GenAI 與可稽核的 AI 系統)。

這種雙重性旨在解決 AI 開發中的一個常見問題:原型與生產就緒系統之間的差距。透過使用 Rust,作者利用了記憶體安全與性能,而範疇論則為建立可評估、可監控且保持在人類問責範圍內的系統提供了藍圖。

批判性視角與社群辯論

與任何結合高階數學與系統程式碼的專案一樣,社群的回應褒貶不一,並對此類抽象層的實用性提出了重要問題。

「裝飾性抽象」的批評

一些批評者認為,範疇論可能只是「貼」在實作上的裝飾。一位評論者指出,常規的型別化程式設計已經在使用型別來處理領域物件與函數來處理轉換,這暗示了範疇術語可能僅具描述性而非規範性:

"I don't understand, this looks to me like regular Rust, or regular programming for that matter... Category Theory terminology can be used to describe the structure of a regular typed program."

缺失的環節:HKTs 與定理

從更技術性的角度來看,一些開發者指出了 Rust 型別系統的限制。具體而言,Rust 缺乏 Higher-Kinded Types (HKTs),這使得實作某些範疇模式(如 Functors 或 Monads)時,難以像在 Haskell 中那樣優雅。

此外,一些研究人員認為,若要讓範疇論在 ML 中真正發揮作用,它應該允許推導出關於實作的定理。他們建議框架應朝向 Markov categories 或使用 adjunctions 來描述 ML 演算法,這將為系統行為提供更強的數學保證。

結論

Category Theory for Tiny ML in Rust 代表了一種將機器學習「管線工程」形式化的雄心嘗試。雖然懷疑論者質疑增加的數學層是否比標準型別化程式設計提供實質益處,但該專案對可稽核性與結構的關注,為可靠 AI 的未來提供了一個引人入勝的願景。透過將數學結構轉化為可執行的 Rust 程式碼,作者正挑戰開發者不要將 ML 管線視為一系列矩陣乘法,而是視為型別化轉換的嚴謹組合。

Sources