JAX核心设计解析:函数式编程让代码更可控

很多人刚接触JAX都会有点懵——参数为啥要单独传?随机数还要自己管key?这跟PyTorch的画风完全不一样啊。

其实根本原因就一个:JAX是函数式编程而不是面向对象那套,想明白这点很多设计就都说得通了。

先说个核心区别

PyTorch里,模型是个对象,权重藏在里面,训练的时候自己更新自己。这是典型的面向对象思路,状态封装在对象内部。

JAX的思路完全反过来。模型定义是模型定义,参数是参数,两边分得清清楚楚。函数本身不持有任何状态,每次调用都把参数从外面传进去。

这么做的好处?JAX可以把你的函数当纯数学表达式来处理。求导、编译、并行,想怎么折腾都行,因为函数里没有藏着掖着的东西,行为完全可预测。

 

https://avoid.overfit.cn/post/52fcdfd1d8054dcbb31783ed0547850e

posted @ 2025-12-07 22:01  deephub  阅读(5)  评论(0)    收藏  举报