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

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.

相关推荐
热点推荐
APEC深圳开会在即,高市头衔被摘!中方拒给“首相级”外交承认

APEC深圳开会在即,高市头衔被摘!中方拒给“首相级”外交承认

凡知
2026-10-03 14:27:44
中日对峙若继续拖延下去,越来越多国家终将意识到:中日一旦开战,不会像俄乌冲突那样给第三方留下渔利空间,而注定是一场惨烈血战

中日对峙若继续拖延下去,越来越多国家终将意识到:中日一旦开战,不会像俄乌冲突那样给第三方留下渔利空间,而注定是一场惨烈血战

人生录
2026-10-02 20:33:29
突发!王传福出任比亚迪董事长!

突发!王传福出任比亚迪董事长!

财经要参
2026-10-03 16:55:52
女选手晒马拉松个人最好成绩,称“前15km跑得很舒服”,结果被拍到坐自行车比赛!当事人凌晨道歉

女选手晒马拉松个人最好成绩,称“前15km跑得很舒服”,结果被拍到坐自行车比赛!当事人凌晨道歉

南方都市报
2026-10-03 15:32:29
创历史!“小孩姐”孙心然2-0爆冷27号种子 成中网最年轻32强

创历史!“小孩姐”孙心然2-0爆冷27号种子 成中网最年轻32强

醉卧浮生
2026-10-03 19:50:32
原来大佬都是这样换大运的!网友:我老板就是这样越来越成功的

原来大佬都是这样换大运的!网友:我老板就是这样越来越成功的

夜深爱杂谈
2026-10-02 21:04:47
花旗重磅报告:中国住房供应下降 30%!第三轮房价上涨很快开启

花旗重磅报告:中国住房供应下降 30%!第三轮房价上涨很快开启

专业聊房君
2026-10-02 18:51:25
大批中国精英移民美国后,集体消失!朋友圈彻底停更,太真实了

大批中国精英移民美国后,集体消失!朋友圈彻底停更,太真实了

史之铭
2026-10-03 02:22:30
国足夺季军仅1小时,阵容大换血:这8人将正式退队,真正原因揭晓

国足夺季军仅1小时,阵容大换血:这8人将正式退队,真正原因揭晓

侃球熊弟
2026-10-03 16:49:27
美国、法国、德国、英国、意大利、日本、加拿大,将立即启动行动

美国、法国、德国、英国、意大利、日本、加拿大,将立即启动行动

政知新媒体
2026-10-03 08:13:21
2026国庆节黄金周,全国最堵的十大景区出炉:一眼望不到边的人头

2026国庆节黄金周,全国最堵的十大景区出炉:一眼望不到边的人头

小嵩
2026-10-03 13:53:55
上任第一刀,先砍印度制造!苹果新CEO不惯着印度了?

上任第一刀,先砍印度制造!苹果新CEO不惯着印度了?

北向财经
2026-10-02 23:27:05
太冲动了!200万砸进深圳臭豆腐火锅:450平大店日营收仅302元,每日亏6900,95后女孩哭诉创业遭滑铁卢

太冲动了!200万砸进深圳臭豆腐火锅:450平大店日营收仅302元,每日亏6900,95后女孩哭诉创业遭滑铁卢

火山詩话
2026-10-03 10:26:33
Google前高管预言:2027年AI将引发15年失业潮

Google前高管预言:2027年AI将引发15年失业潮

火锅局
2026-10-02 22:17:16
安东尼奥:中国球员潜力巨大,但需要有人推他们一把

安东尼奥:中国球员潜力巨大,但需要有人推他们一把

澎湃新闻
2026-10-03 18:34:13
康奈尔兄弟会性侵案细节曝光,州长换掉检察官:自愿醉酒非“性侵许可证”

康奈尔兄弟会性侵案细节曝光,州长换掉检察官:自愿醉酒非“性侵许可证”

澎湃新闻
2026-10-03 19:08:27
普京说可能在下个月APEC峰会期间举行俄中美三方会晤,外交部:中方愿同各方一道,共同推动APEC“中国年”取得丰硕成果

普京说可能在下个月APEC峰会期间举行俄中美三方会晤,外交部:中方愿同各方一道,共同推动APEC“中国年”取得丰硕成果

都市快报橙柿互动
2026-10-03 20:04:55
中国近代史百年风雨,为何唯独1976年,被称作“最诡异”的一年?

中国近代史百年风雨,为何唯独1976年,被称作“最诡异”的一年?

文史达观
2026-10-01 09:23:26
记者:李昊的下家听说已经差不多确定了

记者:李昊的下家听说已经差不多确定了

懂球帝
2026-10-03 17:32:22
刚拿到绿卡!30多岁中国夫妇澳洲车祸身亡

刚拿到绿卡!30多岁中国夫妇澳洲车祸身亡

看看新闻Knews
2026-10-04 00:23:54
2026-10-04 01:15:00
deephub incentive-icons
deephub
CV NLP和数据挖掘知识
2028文章数 1465关注度
往期回顾 全部

科技要闻

英伟达盘中创历史新高,市值逼近6万亿美元

头条要闻

东航就空姐下跪事件报案 视频拍摄者:会积极配合调查

头条要闻

东航就空姐下跪事件报案 视频拍摄者:会积极配合调查

体育要闻

这个讨论了一夏天的问题,马刺有答案了吗

娱乐要闻

马思纯一家爬山祈福!素颜出镜笑容甜

财经要闻

4亿台电视挂墙落灰 为何没人愿意开了?

汽车要闻

方程豹9月热销破4万 首款皮卡鲨鱼将于四季度上市

态度原创

健康
房产
数码
亲子
教育

刷酸祛痘,为什么有人翻车?

房产要闻

保利大爆发,冲到榜一!海南楼市前三季度,热销榜出炉!

数码要闻

开发者将iPhone 17 Pro Max变成MacBook Pro的第二块GPU

亲子要闻

大脑为什么要删除三岁前的记忆?网友的回答让我泪目了!

教育要闻

录取线不等于咨询线,为什么现场问的分数总比最后公布的要高

无障碍浏览 进入关怀版