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

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.

相关推荐
热点推荐
中网战报,2-0,2-1,1-2,中国金花2胜1负,郑钦文对手出炉

中网战报,2-0,2-1,1-2,中国金花2胜1负,郑钦文对手出炉

南海浪花
2026-10-04 04:43:18
韩国大片遭遇强烈抵制,主演柳海真住宅被曝光,李敏镐活动取消

韩国大片遭遇强烈抵制,主演柳海真住宅被曝光,李敏镐活动取消

荒野老五
2026-10-03 14:58:55
七球狂胜克罗地亚,英格兰追平欧国联历史最大分差

七球狂胜克罗地亚,英格兰追平欧国联历史最大分差

懂球帝
2026-10-04 02:14:24
孙心然vs高芙对阵已定!CCTV5直播,16岁将直面世界排名TOP4

孙心然vs高芙对阵已定!CCTV5直播,16岁将直面世界排名TOP4

未来展望
2026-10-03 21:52:07
短视频媒体“武汉广电文体在线”把陈妤颉采访内容“爸爸我有出息了”改成“妈妈我有出息了”

短视频媒体“武汉广电文体在线”把陈妤颉采访内容“爸爸我有出息了”改成“妈妈我有出息了”

陈宜之
2026-10-02 12:03:54
国庆燃油SUV大跳水!最高直降49%,7万起买途岳真不是段子

国庆燃油SUV大跳水!最高直降49%,7万起买途岳真不是段子

刘哥谈体育
2026-10-03 00:31:52
万万没想到!俄选举落下帷幕,拉夫罗夫体面退场,梅德韦杰夫出局

万万没想到!俄选举落下帷幕,拉夫罗夫体面退场,梅德韦杰夫出局

井普独白
2026-10-03 14:30:09
几百万吨进口肉疯狂涌入中国,菜市场却看不到!原来我们天天都吃

几百万吨进口肉疯狂涌入中国,菜市场却看不到!原来我们天天都吃

房产衫哥
2026-10-02 14:20:27
送蛋横扫晋级!兹维列夫2-0轻取商竣程,中网八强将战德约

送蛋横扫晋级!兹维列夫2-0轻取商竣程,中网八强将战德约

全景体育V
2026-10-03 20:14:49
44岁姚笛独自在杭州豪宅家中煮泡面,眼神中难掩落寞

44岁姚笛独自在杭州豪宅家中煮泡面,眼神中难掩落寞

追影客栈
2026-10-03 16:08:17
华女在洛杉矶机场等飞机,被ICE“顺手”抓走!只因为当时她就站在……

华女在洛杉矶机场等飞机,被ICE“顺手”抓走!只因为当时她就站在……

华人生活网
2026-10-03 05:20:52
刘国梁一句话点透!虽然孙颖莎没拿到女单冠军,但影响力却超冠军

刘国梁一句话点透!虽然孙颖莎没拿到女单冠军,但影响力却超冠军

探源历史
2026-10-04 05:44:51
这哪是移动充电车,分明就是移动印钞机

这哪是移动充电车,分明就是移动印钞机

民间胡扯老哥
2026-10-03 03:24:35
周迅51岁素颜白发逛街:评论区吵翻的背后,藏着多少人的容貌焦虑

周迅51岁素颜白发逛街:评论区吵翻的背后,藏着多少人的容貌焦虑

可乐谈情感
2026-10-04 00:38:33
周恩来晚年坦言:若非毛主席拦下绝密军令,3万红军或全军覆灭?

周恩来晚年坦言:若非毛主席拦下绝密军令,3万红军或全军覆灭?

纪史行者
2026-10-03 03:50:06
敦煌鸣沙山游客坐满整座山宛如“拼豆”,游客称“感觉有一亿人在”,骆驼都要等红绿灯,景区:国庆新增了无人机表演

敦煌鸣沙山游客坐满整座山宛如“拼豆”,游客称“感觉有一亿人在”,骆驼都要等红绿灯,景区:国庆新增了无人机表演

极目新闻
2026-10-02 18:10:19
难绷啊,亚运会男足颁奖典礼,冠军韩国队国旗卡住没能升起

难绷啊,亚运会男足颁奖典礼,冠军韩国队国旗卡住没能升起

懂球帝
2026-10-03 21:37:06
亚运金牌榜之珠穆朗玛脚下的芸芸众生 孟加拉1铜朝鲜历史倒数第三

亚运金牌榜之珠穆朗玛脚下的芸芸众生 孟加拉1铜朝鲜历史倒数第三

劲爆体坛
2026-10-03 17:51:05
菲方急疯:破船25天没补给了,但更要命的是破船正在海底烂穿

菲方急疯:破船25天没补给了,但更要命的是破船正在海底烂穿

浯江孤舟
2026-10-03 10:35:32
92年高考前,班主任嘲笑我是去工厂的命,10年后同学会再见她懵了

92年高考前,班主任嘲笑我是去工厂的命,10年后同学会再见她懵了

白云故事
2025-04-05 19:55:04
2026-10-04 06:32:49
deephub incentive-icons
deephub
CV NLP和数据挖掘知识
2028文章数 1465关注度
往期回顾 全部

科技要闻

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

头条要闻

刚刚拿到绿卡 中国籍夫妻突发车祸身亡

头条要闻

刚刚拿到绿卡 中国籍夫妻突发车祸身亡

体育要闻

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

娱乐要闻

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

财经要闻

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

汽车要闻

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

态度原创

时尚
教育
旅游
数码
公开课

Chemena Kamali写给Chloé的又一封情书

教育要闻

广东一市试点取消中考分流,能减轻升学压力吗?

旅游要闻

美景添韵味 市集聚烟火 守护保平安

数码要闻

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

公开课

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

无障碍浏览 进入关怀版