dm-haiku: 一個為 JAX 設計、支援物件導向模型定義的類神經網路函式庫
dm-haiku: 一個為 JAX 設計、支援物件導向模型定義的類神經網路函式庫
它解決了什麼問題
JAX 是一個強大的數值計算函式庫,但為了使用其轉換功能(例如 jit 和 grad),它要求函數必須是純函數(pure functions)。Haiku 解決了這個問題,它允許開發者使用熟悉的物件導向程式設計模型來定義類神經網路,同時自動將這些「不純」的物件導向定義轉換為 JAX 可以處理的純函數。
運作原理
Haiku 提供兩個主要工具來彌合物件導向設計與函數純度之間的差距:
hk.Module:一個用於定義網路層與組件的 Python 物件。這些模組持有參數與方法的引用,讓使用者可以編寫看起來像標準類神經網路函式庫的程式碼。hk.transform:一個函數轉換工具,可將使用hk.Module的函數轉換為一對純函數:init(負責收集初始參數值)與apply(負責將這些參數注入函數中進行計算)。
對於需要內部可變狀態的模型(例如 batch normalization),Haiku 提供 hk.transform_with_state,它可以分別管理參數與狀態。
目標對象
希望在建立類神經網路時擁有物件導向 API 的開發效率,同時又需要 JAX 完整的函數轉換功能與硬體加速能力的開發者與研究人員。
重點特色
- DeepMind 規模:經過 DeepMind 研究人員測試,可用於大規模的影像、語言與強化學習實驗。
- 函式庫而非框架:設計為輕量級函式庫,專注於參數與狀態管理,而不強加自定義的優化器或檢查點格式。
hk.next_rng_key():透過提供確定性的鍵值序列,簡化了 JAX 內部的隨機數生成過程。- JAX 相容性:完全相容於
jax.pmap,可用於跨多個加速器的分散式訓練。
Sources
- undefinedgoogle-deepmind/dm-haiku