什么是 Jev?
同一个问题,大语言模型给你一段话,Jev 直接给你一组可供程序使用的概率。
+ 3 个候选
并行评估
图 1 LLM 把计算铺在生成时间上,Jev 把候选判断铺在并行空间里
模型眼里的文字:Token 与 Embedding
神经网络不能直接读字。它先切分,再编号,最后把每个编号变成一串可计算的数字。
原始文字
Token
Token ID
1599, 2850,
11041 ]
图 2 Token 不一定等于“一个词”,也可能是一个字或词的一部分
Embedding 不是一个数,而是一整条向量
以 BERT 为例,一个位置送进第一层 Transformer 的向量,由三部分逐维相加。
图 3 图中只画 8 个格子。BERT Base 的 d=768,BERT Large 的 d=1024
Self-Attention:每个词都在找上下文
“Self” 表示同一段序列内部互相查看。模型会为不同位置分配不同权重。
图 3 理解“银行”时,“取钱”提供了强线索。图中的数值只用于解释概念。
当前 token 想寻找什么信息?
每个 token 能提供哪类信息?
真正汇总进新表示的内容是什么?
一次 Attention 的四个计算步骤
仍以“银行”为当前 token。下面从它的输入向量出发,走到新的上下文化表示。
线性投影得到 Q、K、V
每个 token 的向量分别乘三个可训练矩阵。Q 用来发问,K 用来匹配,V 携带内容。
发问K
匹配V
内容
Q 与所有 K 做点积
“银行”的 q 与“小明、去、银行、取钱”的 k 比较。点积越大,当前 head 认为越相关。
Mask 后做 Softmax
禁止读取的位置先变成 −∞。Softmax 再把剩余分数变成总和为 1 的权重。
0.2 −0.1 0.7 1.6→probabilities
.14 .09 .22 .55
按权重混合 V
模型把“取钱”的信息读得更多,把弱相关位置读得更少,得到“银行”的新表示。
“银行”读取谁?
从分数到新表示
raw scores
.14 .09 .22 .55
new y银行
双向与因果 Attention 的区别
核心差别来自 attention mask:当前 token 到底获准看哪些位置。
BERT:左右都能看
适合理解一整段已经存在的文字。
LLM:只看左边与自己
生成下一个 token 时,未来内容还不存在。
Transformer Block:读取上下文,再逐位置加工
一层通常包含 Attention、前馈网络、残差连接和归一化。不同模型主要在排列与细节上变化。
BERT 原始层 · Post-LN
现代 LLM 常见 · Pre-Norm
图 7 Post-LN 与 Pre-Norm 的顺序不同,但都在反复执行“沟通 + 独立加工”
[CLS]:给整句话预留的“汇总位置”
[CLS] 是一个特殊 token。经过多层双向 Attention 后,分类头读取它的最终向量。
Transformer Encoder
[CLS]
正面 94%
图 5 训练目标迫使 [CLS] 学会携带完成句级任务所需的信息
它只是一个固定位置。微调时,梯度让它逐渐成为有用的句子表示。
命名实体识别会读取每个 token 的输出,抽取式问答会预测答案起止位置。
12 层 · hidden 76812 heads
110M 参数
24 层 · hidden 102416 heads
340M 参数
BERT 先做预训练,再为具体任务微调
预训练提供通用语言表示;微调用较少标注数据,把这些表示连接到分类、抽取或检索任务。
MLM · 掩码语言模型
模型同时利用左右上下文,预测被遮住的位置。
0.82
0.09
0.04
NSP · 下一句预测
这是原始 BERT 的第二个目标。许多后续模型调整或移除了 NSP。
图 9 预训练学习语言规律,微调把模型适配到具体输出
LLM:把“预测下一个 token”循环很多次
一次前向给出下一个 token 的概率。选中后把它接回输入,再运行下一步。
+ MLP
Llama 3.1 参数量
Jev 的输入输出已公开,内部网络仍是黑盒
可以研究它的行为与接口,但不能把某个熟悉架构直接当成 Jev 的真实内部实现。
共享上下文
技术组 .09 · 其他 .05
图 7 多个问题共享 state,但官方语义要求它们相互独立
公开可确认
尚未公开
BERT、LLM、Jev 的结构与用途
三者都处理 token,但它们的可见范围、训练目标和输出接口服务于不同任务。
柱长只表达量级顺序,不按真实比例绘制。Jev 的低时延不能反推出参数量。
NanoJev:用 0.6B Qwen 复刻“直接判断”
NanoJev 是 MIT 开源的独立功能复刻:把每个候选编码成路径,再直接产出 logits。它无法揭示 Jev 的私有实现。
+ Question
+ Candidate A
+ Decision: <EOS>
+ Question
+ Candidate B
+ Decision: <EOS>
+ Question
+ Candidate C
+ Decision: <EOS>
放进一个 batch 前向
最后一个 token
的 hidden state
↓
Linear(hidden → 1)
↓
每个候选一个 scalar logit
Question type: choice
Question:\n{instruction}\n
Candidate:\n{name}: {description}\n
Decision: <EOS>
Qwen 是因果 backbone。最后的 <EOS> 位置可以看到前面完整的 state、question 和当前 candidate,所以它的 hidden state 用作该候选摘要。
图 13 NanoJev 的输入编码与 backbone readout,可由源码直接核对
Decision Head:先独立打分,再按题型归一化
每条候选路径先产生一个基础标量 z。Choice 还可以让同一题的候选互相比较,再修正这些分数。
1024 维
1024 维
1024 → 1
z₁, z₂, …, zₖ
Choice 的可选 Set Head
拼接 log(K)
1025 → 128
Set Attention
残差变换
得到 Δz
最终分数为 z + Δz。Set Attention 只在同一道 Choice 的候选之间运行,并使用 padding mask 忽略补齐位置。
logits = [0, z]
p(true)=sigmoid(z)源码只编码语义上的 true 路径,false 的 logit 固定为 0。
p = softmax(z₁…zₖ)所有候选概率相加为 1,K 可以在推理时动态变化。
score = Σ k·pₖ对 2–10 个有序等级归一化,再返回概率加权等级。
图 14 这部分来自 NanoJev 代码,仍不能代表商业 Jev 的内部 head
NanoJev 如何把游戏状态变成决策分布
当前统一 checkpoint 覆盖 Maze、Snake 与两个 ViZDoom 任务,训练单位是一道完整问题。
图 10 每个 target variant 共 18,760 道问题,训练 split 存 10,898 道,其中 10,893 道通过有效性过滤
NanoJev 在四个游戏里的表现
同一观察接口、候选动作和 seeded epsilon-greedy controller 下,项目作者报告了 274 个 test cases。
/10
/8
/128
/128
最值得优先验证的六个问题
研究目标不只是“答对多少”,还要知道概率是否可信、规模如何增长、失败发生在哪里。
概率校准
可靠性图、ECE、Brier、NLL。检查 0.9 是否真的约有 90% 正确。
候选数 K
从 2 扩到 255,观察准确率、时延、显存与 softmax 稳定性。
问题数 Q
同一 state 并行 1、4、16、64 道问题,测吞吐与问题隔离。
上下文长度
加入无关信息、长证据与冲突证据,观察性能和置信度漂移。
候选顺序与措辞
打乱候选、改写描述,检测位置偏差和语义脆弱性。
高置信错误
专门收集 confidence 高却错误的案例,建立拒答或人工复核阈值。