dm-haiku: 一个为 JAX 设计的、支持面向对象模型定义的神经网络库
dm-haiku: 一个为 JAX 设计的、支持面向对象模型定义的神经网络库
它解决了什么问题
JAX 是一个强大的数值计算库,但它要求函数必须是纯函数才能使用其变换功能(如 jit 和 grad)。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