dm-haiku: 一個為 JAX 設計、支援物件導向模型定義的類神經網路函式庫

dm-haiku: 一個為 JAX 設計、支援物件導向模型定義的類神經網路函式庫

它解決了什麼問題

JAX 是一個強大的數值計算函式庫,但為了使用其轉換功能(例如 jitgrad),它要求函數必須是純函數(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