网易首页 > 网易号 > 正文 申请入驻

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

0
分享至

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

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



先说个核心区别

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

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

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

代码对比一下就明白了

PyTorch这么写:

import torch
import torch.nn as nn
class Model(nn.Module):
def __init__(self):
super().__init__()
self.linear = nn.Linear(10, 1)
def forward(self, x):
return self.linear(x)
model = Model()
x = torch.randn(5, 10)
output = model(x)

权重在self.linear里,模型自己管自己。

JAX配Flax是这样:

import jax
import jax.numpy as jnp
from flax import linen as nn
class Model(nn.Module):
@nn.compact
def __call__(self, x):
return nn.Dense(1)(x)
model = Model()
key = jax.random.PRNGKey(0)
dummy = jnp.ones((1, 10))
params = model.init(key, dummy)['params']
x = jnp.ones((5, 10))
output = model.apply({'params': params}, x)

参数要先init出来,用的时候再apply进去。麻烦是麻烦了点,但参数流向一目了然,想做什么骚操作都很方便。

随机数那个key是怎么回事

这个确实是JAX最让新手头疼的地方。不能直接random.normal()完事,非得带个key:

key = jax.random.PRNGKey(42)
x = jax.random.normal(key, (3,))

原因还是那个——函数式编程不允许隐藏状态。

普通框架的随机数生成器内部维护一个种子状态,每次调用偷偷改一下。JAX不干这事。你得显式给它一个key,它用完就扔,下次想生成随机数再给个新的。

好处是随机性完全可控可复现。jit编译、多卡训练、梯度计算,不管代码怎么变换,只要key一样结果就一样。调试的时候不会遇到那种"明明代码没改怎么结果不一样了"的玄学问题。

key不能复用,用之前要split

还有个规矩:同一个key只能用一次。要生成多个随机数,得先split:

key = jax.random.PRNGKey(0)
key, subkey = jax.random.split(key)
a = jax.random.normal(subkey)
key, subkey = jax.random.split(key)
b = jax.random.uniform(subkey)

每次split出来的subkey都是独立的随机源。这套机制在分布式场景下特别香,不同机器拿不同的key,随机性既独立又可追溯。

合在一起看个完整例子

def forward(params, x):
w, b = params
return w * x + b
def init_params(key):
key_w, key_b = jax.random.split(key)
w = jax.random.normal(key_w)
b = jax.random.normal(key_b)
return w, b
key = jax.random.PRNGKey(0)
params = init_params(key)
x = jnp.array(2.0)
output = forward(params, x)

forward是纯函数,输入决定输出,没有副作用。随机性在init_params里一次性处理完。参数独立存放,想存哪存哪。

这种代码JAX处理起来特别顺手——jit编译、自动微分、vmap批处理、多卡并行,都是开箱即用。

什么场景下JAX更合适

说实话JAX学习曲线是陡了点。但有些场景下它的优势很明显:做研究需要魔改模型结构的时候;物理仿真对数值精度和可复现性要求高的时候;大规模分布式训练不想被隐藏状态坑的时候;想自己撸optimizer或者自定义layer的时候。

适应了这套显式风格之后其实挺舒服的。参数在哪、随机数哪来的、函数干了啥,全都摆在明面上。没有黑魔法,debug的时候心里有底。

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

作者:Ali Nawaz

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
女人强烈渴望发生“关系”,绝不可能告诉你需求,会忍不住这么做

女人强烈渴望发生“关系”,绝不可能告诉你需求,会忍不住这么做

云端小院
2026-01-22 09:25:48
黑社会去哪了?原来都藏在这4个场所,老百姓千万别惹

黑社会去哪了?原来都藏在这4个场所,老百姓千万别惹

小鹿姐姐情感说
2026-01-18 11:59:56
江湖缘劫7:广佛聚义,千骑踏尘

江湖缘劫7:广佛聚义,千骑踏尘

金昔说故事
2026-01-23 16:00:45
不止690元/月,马斯克称特斯拉FSD将涨价,因为无监督版可睡觉

不止690元/月,马斯克称特斯拉FSD将涨价,因为无监督版可睡觉

识礁Farsight
2026-01-23 13:32:31
印度为何突然老实了呢?真实原因开始浮出水面

印度为何突然老实了呢?真实原因开始浮出水面

兴史兴谈
2026-01-22 13:40:39
别踩坑!这 3 种手术再有钱也不能乱做,小心落下后遗症

别踩坑!这 3 种手术再有钱也不能乱做,小心落下后遗症

医学科普汇
2026-01-21 10:17:03
U23国足外出聚餐,拜合拉木身穿曼联球衣,吾米提江身穿利物浦Polo

U23国足外出聚餐,拜合拉木身穿曼联球衣,吾米提江身穿利物浦Polo

懂球帝
2026-01-22 16:09:15
30万存款被妻子拿回娘家后续:已协商离婚,只赔10万,交出抚养权

30万存款被妻子拿回娘家后续:已协商离婚,只赔10万,交出抚养权

通鉴史智
2026-01-22 08:51:00
上海一小区业主发现:家中落地窗竟属玻璃幕墙!装修更换被阻引发矛盾

上海一小区业主发现:家中落地窗竟属玻璃幕墙!装修更换被阻引发矛盾

上观新闻
2026-01-23 11:47:18
很多人低估了一万块的威力

很多人低估了一万块的威力

洞见
2026-01-12 20:34:37
载有美国对台首批军售武器货轮于1月13日从美国正驶往台湾方向

载有美国对台首批军售武器货轮于1月13日从美国正驶往台湾方向

南权先生
2026-01-23 15:42:38
库里38+8记3分创NBA历史第1神迹!弗拉格21+11创纪录,库明加伤退

库里38+8记3分创NBA历史第1神迹!弗拉格21+11创纪录,库明加伤退

一将篮球
2026-01-23 12:41:49
三位大人物骨灰被移出八宝山,他们分别是谁?其中一人是开国上将

三位大人物骨灰被移出八宝山,他们分别是谁?其中一人是开国上将

文史达观
2025-09-08 20:13:26
一口气搞懂16种酒,吹牛更显学问

一口气搞懂16种酒,吹牛更显学问

混知
2026-01-09 12:27:20
腾讯集团发布反舞弊通报

腾讯集团发布反舞弊通报

每日经济新闻
2026-01-23 12:12:08
网友:朋友说他听“听风的蚕”涨了好多见识,我果断与他断了往来

网友:朋友说他听“听风的蚕”涨了好多见识,我果断与他断了往来

读鬼笔记
2026-01-22 19:46:15
光明邨首推线上熟食大礼包!快把淮海路年味带回家吧

光明邨首推线上熟食大礼包!快把淮海路年味带回家吧

上海黄浦
2026-01-23 09:32:12
又一演员为李亚鹏发声!泰国巨星托尼贾发视频:我敬佩你,李亚鹏

又一演员为李亚鹏发声!泰国巨星托尼贾发视频:我敬佩你,李亚鹏

小徐讲八卦
2026-01-22 10:58:33
沉睡两千万载,三门峡发现大型油田,背后功臣竟是一口寻常地热井?

沉睡两千万载,三门峡发现大型油田,背后功臣竟是一口寻常地热井?

老杉说历史
2026-01-14 19:59:18
比恒大还惨!中国第二大民企倒了,负债7500亿,创始人被带走

比恒大还惨!中国第二大民企倒了,负债7500亿,创始人被带走

芳芳历史烩
2025-12-25 20:32:52
2026-01-23 16:44:49
deephub incentive-icons
deephub
CV NLP和数据挖掘知识
1898文章数 1443关注度
往期回顾 全部

科技要闻

TikTok守住了算法"灵魂" 更握紧了"钱袋子"

头条要闻

涉发文侮辱记者 上市公司及实控人一审被判道歉并赔偿

头条要闻

涉发文侮辱记者 上市公司及实控人一审被判道歉并赔偿

体育要闻

跑个步而已,他们在燃什么?

娱乐要闻

刘大锤曝料 将王星越的“体面”撕粉碎

财经要闻

茂名首富,这次糟了

汽车要闻

主打家庭大六座 奕境首款SUV将北京车展亮相

态度原创

教育
艺术
手机
本地
公开课

教育要闻

初中必须数形结合大招

艺术要闻

现在的春联太俗了,还是过去的“老对联”高雅!

手机要闻

iQOO 15 Ultra塞行业最大风扇,配7400mAh电池2月初亮相

本地新闻

云游中国|格尔木的四季朋友圈,张张值得你点赞

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版