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

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.

相关推荐
热点推荐
两年了,为何许家印迟迟不判刑?真相比你想象的更复杂!

两年了,为何许家印迟迟不判刑?真相比你想象的更复杂!

李云飞Afey
2026-01-20 11:43:34
央视曝光毒红薯!商户主动投毒本地不吃,流窜各地,利益链曝光

央视曝光毒红薯!商户主动投毒本地不吃,流窜各地,利益链曝光

揽星河的笔记
2026-01-22 23:25:37
数十次点名中国,特朗普大闹达沃斯到底想干吗?

数十次点名中国,特朗普大闹达沃斯到底想干吗?

看看新闻Knews
2026-01-23 19:21:01
最快几天内,恐要开战!伊朗革命卫队开始转移大量导弹和无人机

最快几天内,恐要开战!伊朗革命卫队开始转移大量导弹和无人机

青青子衿
2026-01-23 02:15:44
刚刚,杨兰兰本人澳洲出庭!正式低头承认!

刚刚,杨兰兰本人澳洲出庭!正式低头承认!

澳洲红领巾
2026-01-23 11:40:24
上海市政府发布一组人事任免信息:陈殷华任中共一大纪念馆馆长

上海市政府发布一组人事任免信息:陈殷华任中共一大纪念馆馆长

澎湃新闻
2026-01-23 18:17:07
孙涛发声,闫学晶失去了她最后的一个“盟友”……

孙涛发声,闫学晶失去了她最后的一个“盟友”……

麦杰逊
2026-01-23 20:11:42
朱拉尼恐怖色彩的“大一统”:库尔德“娘子军”被排队爆头画面

朱拉尼恐怖色彩的“大一统”:库尔德“娘子军”被排队爆头画面

瞩望云霄
2026-01-23 10:17:27
嫣然医院房东心态崩了?从强硬要李亚鹏道歉,到开始求过个好年

嫣然医院房东心态崩了?从强硬要李亚鹏道歉,到开始求过个好年

安宁007
2026-01-22 23:02:37
向华强曝李亚鹏曾在香港办派对为嫣然天使基金筹款:自己捐了几百万,王菲、刘嘉玲等众星捧场

向华强曝李亚鹏曾在香港办派对为嫣然天使基金筹款:自己捐了几百万,王菲、刘嘉玲等众星捧场

扬子晚报
2026-01-22 21:34:18
泽连斯基达沃斯演讲,很大胆,很自信

泽连斯基达沃斯演讲,很大胆,很自信

名人苟或
2026-01-23 14:37:33
“当妈妈后,真的很怕死……”千万粉丝网红“一栗小莎子”疑患淋巴瘤并停工化疗,儿子还不到两岁

“当妈妈后,真的很怕死……”千万粉丝网红“一栗小莎子”疑患淋巴瘤并停工化疗,儿子还不到两岁

极目新闻
2026-01-23 13:31:27
大陆一锤定音,开出两岸对话条件,郑丽文将赴陆,马英九给出忠告

大陆一锤定音,开出两岸对话条件,郑丽文将赴陆,马英九给出忠告

策略述
2026-01-22 17:17:13
回族党员茉莉发声:共产党员不能在宗教问题上“打擦边球”!

回族党员茉莉发声:共产党员不能在宗教问题上“打擦边球”!

西域都护
2026-01-22 20:34:53
2-0爆冷!澳网首位前8种子出局 16强诞生6席 王欣瑜比赛时间确定

2-0爆冷!澳网首位前8种子出局 16强诞生6席 王欣瑜比赛时间确定

侃球熊弟
2026-01-23 17:32:10
高铁车厢二氧化碳超标一倍,12306岂能只让乘客“自行吸氧”

高铁车厢二氧化碳超标一倍,12306岂能只让乘客“自行吸氧”

极目新闻
2026-01-23 13:51:26
董方卓强硬回击:U23国足进决赛又如何?就算夺冠也掩盖不了问题

董方卓强硬回击:U23国足进决赛又如何?就算夺冠也掩盖不了问题

念洲
2026-01-23 18:35:58
带状疱疹致死病例增多!倡议:1不喝、3不碰、2坚持,别马虎了!

带状疱疹致死病例增多!倡议:1不喝、3不碰、2坚持,别马虎了!

垚垚分享健康
2026-01-19 20:30:10
现场直击! 刚刚, 兰兰终于现身澳洲法庭! 正式低头承认

现场直击! 刚刚, 兰兰终于现身澳洲法庭! 正式低头承认

澳微Daily
2026-01-23 13:16:55
特朗普:美国正调集重兵前往伊朗

特朗普:美国正调集重兵前往伊朗

界面新闻
2026-01-23 13:11:44
2026-01-23 20:36:49
deephub incentive-icons
deephub
CV NLP和数据挖掘知识
1899文章数 1443关注度
往期回顾 全部

科技要闻

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

头条要闻

阿姨和未离婚男子同居四十年 晚年只求分居被索要25万

头条要闻

阿姨和未离婚男子同居四十年 晚年只求分居被索要25万

体育要闻

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

娱乐要闻

演员孙涛澄清闫学晶言论 落泪维护妻子

财经要闻

2026年,消费没有新故事?

汽车要闻

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

态度原创

家居
健康
数码
亲子
军事航空

家居要闻

在家度假 160平南洋混搭宅

耳石脱落为何让人天旋地转+恶心?

数码要闻

苹果1月27 - 29日活动曝光,或推M5 Pro/Max芯片MacBook Pro

亲子要闻

“都吃成碳水脸了!”三男孩宝妈,做了一桌子素菜却嫌孩子吃的多

军事要闻

美军首艘“高超导弹战舰”出海测试

无障碍浏览 进入关怀版