语言模型
稳定对象:vocabulary token。
“dog”在不同句子里仍是同一个 token type,语义可跨语料积累。
它没有稳定的 user token,没有跨表 feature vocabulary,却能在陌生表格上预测。这个页面只解决一个问题:这种泛化到底在数学上发生在哪里?
10 Paper Portfolio · P11 研究项目入口 · 参考资料汇总 · LimiX 资料页
P11 antecedent reader:这份架构审计暴露了 LimiX 缺少稳定 feature semantics 与 explicit Unit token 的边界,并促成当前“LLM-derived feature token + evidence-abducted Unit token”的方向;但它解释的是 LimiX,不是新模型本身,也不是新模型的证据。
语言模型和推荐系统依赖稳定身份;LimiX 依赖的是当前表格里的关系证据。它们都叫泛化,但跨越的东西并不相同。
稳定对象:vocabulary token。
“dog”在不同句子里仍是同一个 token type,语义可跨语料积累。
稳定对象:user / item ID。
item 42 在不同用户、不同事件里仍是同一个 item,可以持续更新表示。
稳定对象:只有当前 episode 的行列关系。
下一张表的第 3 列已经可能是另一个变量,模型不能靠全局 column ID 记忆语义。二者都符合这一点,但具体 tokenization 与 attention 架构并不相同;下文显微镜专说 LimiX。
它不是在没有语义的情况下理解世界;它是在没有对象语义的情况下,解一个局部概率拼图。
当前表中,\(X_1\) 与 \((X_2,X_3)\) 怎样共同变化?哪些行相似?哪个变量可以预测另一个变量?
\(X_1\) 在现实中是不是血压?单位是什么?由什么设备测量?两行是否属于同一个病人?
每个标量 \(x_{ij}\) 都被编码到 \(\mathbb R^p\)。它是网络可处理的计算载体。
DFE 为当前列生成匿名地址 \(e_j\),再与 cell 表征相加。它保留同列关系,却不是固定 column-position table 或跨表 vocabulary。
网络沿 feature axis 和 sample axis 交换信息。某个 cell 的“含义”来自它与当前 rows / columns 的关系。
严格说,一个 cell 在一次观测中只有一个 raw value;“不同类型”来自不同列或不同 cells。LimiX 把真实表格送进主网络前,先经过一个 inference-time adapter,把 heterogeneous dtypes 压成浮点数或缺失标记。
原始表格接口看到的 value 与 dtype。
只对当前这次 predict 的表建立编码。
非缺失标量共用 numeric MLP;源码也支持 RBF 版本。
加入当前 episode 的 DFE;它绑定同列,不编码永久顺序或世界语义。
不要把它想成一个“数值词汇表”。它更像一条所有 \(X\) cells 反复调用的向量值函数 \(g_\theta:\mathbb R\to\mathbb R^p\)。下面把论文公式与公开代码分开看。
一个已数值化、可见的 \(X\) scalar。
LimiX-16M 中 \(p=192\),所以中间宽度是 \(p/2=96\)。
对 hidden channels 做 LayerNorm,再激活。
把中间表示投到 Transformer width \(p=192\)。
得到一个 per-scalar 192 维表示。
numeric_embed_type="linear" 默认值。实际由 get_x_encoder() 接入的 MaskEmbEncoder 因而执行 \(1\to96\to192\),两段都采用 LayerNorm + ReLU。它与论文 §2.1 的 GELU 公式并不逐层相同。
论文从已经数值化的 \(x^R_{ij}\in\mathbb R\) 出发,把 \(X^R:m\times d\) 变成 \(X:m\times d\times p\),并明确说 \(X^R\) 与 \(Y^R\) 使用不同 embedding modules。
get_x_encoder → MaskEmbEncoder → linear / RBF → group fusion官方 LimiX-16M checkpoint 确认走 linear branch:逐 scalar 的 \(1\to96\to192\) 之后,每两个 scalar embeddings 拼成 384 维,再经 \(384\to192\to192\) fusion 成一个 attention token。其他 checkpoint 仍可能由配置改写。
RBF 是公开源码支持的可选分支,不是 LimiX-16M 的实际默认路径。
仓库还定义了一个接近论文 GELU 写法的 generic MLPEncoder,但这个固定 commit 的 get_x_encoder() 并未返回它。
Y 侧也不调用这条 X numeric MLP:classification 使用当前 context 的局部 class embeddings;regression 使用另一条 linear encoder。
它们发生在不同层级,统计对象也不同。尤其要区分 raw-column standardization 与 hidden-vector LayerNorm。
真实推理时把 dtype 转成 float / NaN,并在不同 ensemble branches 中选择 table-local 的 quantile、power、standardization 或 passthrough。它不是 \(g_\theta\) 的一层。
公开模型代码可用 context rows 估计每个 feature 的均值、标准差并压缩极端值,再把 scalar 交给 MaskEmbEncoder。LimiX-16M 配置启用 context-only normalization,但关闭 outlier removal。
它规范的是一个 scalar 已展开后的 hidden channels,不是在样本轴上重新标准化整列;论文与代码两条 MLP 路径都使用它。
最容易漏掉的 shape 变化:公开实现可把每 \(K=\texttt{features\_per\_group}\) 个 raw scalars 先各自编码成 \(p\) 维,再拼成 \(Kp\) 维并压回一个 group token。因此进入 attention 的 X token 数是 \(G=\lceil d/K\rceil\),而不是永远等于 raw column 数 \(d\)。官方 LimiX-16M 配置为 \(K=2,p=192\)。
一句话收束:numeric encoder 给 value shape,DFE 给匿名变量地址,attention 才根据当前表的共同变化赋予 relational meaning。于是同一个 scalar 在两列中先有相同 base value embedding,加入不同地址后才可区分:\(g_\theta(0.7)+e_\alpha\neq g_\theta(0.7)+e_\beta\)。
这里需要修正一个容易误导的叫法:DFE 更接近当前 episode 的匿名 column identifier,而不是“第 \(j\) 个位置永远有固定意义”的普通位置编码。
若 \(H\) 已经是完成 fusion 的 group tokens,\(A\) 是对应匿名地址,则把二者联合置换只会联合置换输出:
raw columns 重新排序后,\((X_1,X_2)\)、\((X_3,X_4)\) 这样的分组可能变成别的组合;fusion MLP 还区分组内第 1 / 第 2 槽位。
为什么 ensemble 有用?如果对全部 permutations 做精确平均,上式会得到严格对称化的 predictor;实际只随机抽有限个 \(\pi_m\) 与匿名地址 \(A_m\),所以是 Monte Carlo approximation。\(M\) 越大通常越接近,但“用了 permutation ensemble”本身不等于“单次网络已严格 invariant”。标量分类 / 回归输出不需要式中的 \(P_{\pi_m}^{-1}\)。
原始输入:地址没有告诉模型 A、B、C 在现实中是什么;它只让同一列跨 rows 保持可绑定。
Column order 可以没有意义,但“哪些 cells 属于同一个变量”不能被删除。整列连同 mask、metadata 与临时地址一起移动,只是同一张表换了一种 serialization。
模型仍需知道 \(x_{1j},x_{2j},x_{3j}\) 属于同一个匿名变量;否则整张二维表会退化成一袋数字。
论文与代码的精确边界:论文写 \(e_j=u_jE\),并把它类比为 feature-axis absolute positional encoding;公开代码的默认 subortho 路径却在每次 forward 临时生成并正交化低维地址,只有升维线性映射是训练参数。因此这里更准确的词是“随机匿名列地址”。在论文的一列一 token 抽象中,或在代码已经完成 group fusion 之后,feature tokens 与地址联合换位具有相应的等变结构。
但不能据此声称任意 raw-column permutation 在单次 forward 中精确等变。features_per_group 会先按顺序拼接多个 raw scalars,再用 order-sensitive fusion MLP 形成一个 group token;组内重排或跨组重组都可能改变结果。随机地址、raw feature permutations 与 ensemble aggregation 的作用,是近似平均掉这些任意槽位依赖,而不是证明它们不存在。
没有 type_id、没有 feature-type embedding、没有跨数据集 category vocabulary,也没有每列一张 \(E_j[\text{category}]\) 查找表。
公开实现里的 classification-label embedding 属于 Y 侧;可选 RBF encoder 中的 sign / exponent embeddings 也只是编码数字结构,不是 X 的类别语义。
论文从已经数值化的 \(X^R\in\mathbb R^{m\times d}\) 开始预训练;真实推理的公开 wrapper 才额外处理 float、integer、category、string、bool 与 NaN。
官方仓库没有开放完整 pretraining pipeline,因此不能反过来声称预训练也使用了这套 sklearn dtype parser。Datetime 没有专用 encoder,需要用户先拆成数值或类别特征。
假设这一列是商品 ID。当前表的 adapter 会先建立临时编号:
当前公开 predictor 的默认启发式在样本数达到门槛后,只把 distinct values 极少的列自动标为 categorical(默认阈值是小于 4);一万个类别不会进入这个低基数分支,随后很可能按 numerical column 处理。于是 \(7312\) 与 \(7313\) 会获得一种人为的邻近与顺序,而商品 ID 本来没有这种几何。
| 问题 | LimiX 公开版默认路径 | 推荐系统式路径 |
|---|---|---|
| 类别如何进入模型 | 当前表 local code → shared numeric encoder | category ID → 独立或可推断 embedding |
| 是否有 1 万个参数向量 | 没有 | 通常有,或由该 entity 的 evidence 生成 |
| 可利用的稳定信息 | 重复、频率、与其他 cells 的局部关系 | 同一 item 跨事件持续积累的 identity evidence |
| 主要风险 | 人为 ordinal geometry;稀有类别几乎没有重复证据 | 冷启动与超大 embedding table |
这正是一个结构性边界:如果类别代表 user、item、医院等 persistent entity,真正缺少的可能是“从该类别出现过的全部 evidence 中 abduce 一个 representation”,而不只是把一个 scalar cell 编码得更复杂。
代码层补充:论文最清楚的心智模型仍是 cell scalar → embedding;官方 LimiX-16M 实际先逐 scalar 做 numeric / mask encoding,再按 features_per_group=2 把两个 scalar representations 融合成一个最终 X token。因此“cell embedding”是正确的中间表示,但不能绝对写成“每个 raw scalar 永远独占一个 attention position”。
先沿整条计算路径看一遍。点击任一阶段,会显示该阶段到底保存了什么信息。图中的结构依据论文 Figure 3、Section 2 与 Mask Embedding 小节重画。
12 个 blocks 合计包含 24 次 feature-attention passes 与 12 次 sample-attention passes。
Feature attention:固定第 2 行,让这一行的 \(X_1,\ldots,X_d,Y\) 相互读取;模型在这里理解 feature interaction。
Figure 3 把 classification、regression 与 masked-feature reconstruction 三条解码路径并列画出,容易让人误以为训练目标就是“CE + MSE + MSE”。公开证据并不支持这个写法:能确认的是 head 的输出形状与 task routing;论文只公开了统一的 masked conditional negative log-likelihood。
同一个轴向 Transformer 产生 hidden states。
由 task type 或被 mask 的位置选择解码路径。
推理 wrapper 再做 temperature scaling 与 softmax。
具体 per-head criterion 与权重没有公开。
论文 Section 6 给出的训练对象是:对每个 episode 抽一个 mask \(\pi_i\),只要求模型提高真实 masked values 的条件概率:
这是一个统一的概率层写法。它没有进一步说明 \(q_\theta\) 是否对 masked cells 因子分解、连续变量使用 Gaussian NLL 还是 MSE、feature reconstruction 与 Y prediction 是否同一 episode 联合优化,也没有给出任何 \(\lambda_x,\lambda_{reg},\lambda_{cls}\) 权重。
task_type 在 classification / regression 路径间路由。最稳妥的理解:不同输出是对同一种 conditional-query interface 的不同解码方式。理论上由“当前 mask 中哪些变量需要预测”决定监督坐标;代码中 Y 的 classification / regression 明确按 task 路由,X mask 交给 feature decoder。mask_prediction=True 时 forward 可以同时返回多个 tensors,但“返回了”并不能证明训练时把相应 losses 全部加和。Mask-density token 只是 conditioning input,公开资料没有给它单独的 target。
下面的系统显式枚举三个候选规律 \(S\),再用 context 更新 belief。它只把论文的 SCM mixture 写成可视化玩具;LimiX 网络本身没有这三个候选项,也没有显式的 \(S\)-posterior 输出。
真实世界 \(S\) 已隐藏。先看数据,再看 belief。
| Context row | \(X_1\) | \(X_2\) | \(Y\) |
|---|
这两个陈述必须同时成立。第 6.1 节令 \(S\) 为“对应一个结构因果模型(SCM)的随机变量”,用它分解目标分布;模型训练部分则直接定义 masked conditionals \(q_\theta\),没有另外定义一个 \(q_\phi(S\mid X^{ct})\)。
论文原有的理论分解:
这里的 \(p(S\mid X^{ct})\) 是论文所说的“给定 context 后关于 SCM 的后验”,\(p(X^{te}\mid S)\) 是给定 SCM 后测试样本的 likelihood。于是可以把式 (4) 读成:
但这是目标分布的潜变量分解,不是网络计算图。论文没有说 Transformer 先输出 \(p(S\mid X^{ct})\),再调用 \(p(X^{te}\mid S)\)。
\(S\) 是随机 SCM;式 (4) 用 \(p(S\mid X^{ct})\) 与 \(p(X^{te}\mid S)\) 解释 \(p(X^{te}\mid X^{ct})\)。
称它为 “dataset-level latent” 是本文的解释性术语:同一个 \(S\) 同时支配 context 与 test。这个词不是作者原话。
给定 context 与可见 cells,预测被 mask 的 cells。
同一组参数跨任务直接做条件预测;称它为 “amortized predictor” 是本文的功能性解释,也不是论文用语。
论文没有建立的四件事:S-token、SCM classification head、显式 \(q_\phi(S\mid X^{ct})\) module,以及“某个 hidden state 等于真实 \(S\)”的证明。最严格的结论是:\(S\) 为目标分布提供理论解释,网络直接优化最终条件预测。
切换下面两个视角。预训练知道被遮住的答案并更新参数;真实推理不知道答案且通常冻结参数。但两者都采用 context + masked query 的输入格式。
LimiX 通过随机遮单元格、整列或一块区域,迫使同一个模型练习不同方向的条件分布。点击不同 mask,观察“任务”如何变化。
| Role | Age | BP | Smoke | Disease |
|---|
令 \(\mathcal M\) 表示允许的 cell、column 与 block mask patterns。随机 mask 让模型练习整族:
LimiX 的 Proposition 6.1 在相应假设及足够丰富的 masks 下说明,相应的 conditionals 家族与联合条件分布 \(P(X^{te}\mid X^{ct})\) 一一对应。它学的不是某个固定 label predictor,而是匿名变量上的 conditional calculus。
最容易混淆的地方,是把论文理论中的 SCM 变量 \(S\)、网络 hidden representation 与 persistent Individual \(u\) 合并成同一种 latent。它们不是同一个数学对象。
| 问题 | Unit-conditioned learning | LimiX |
|---|---|---|
| 理论中的隐藏对象 | Individual \(u\in\mathcal U\) | 论文第 6.1 节的随机 SCM \(S\) |
| 跨什么共享 | 同一 \(u\) 跨多个 events / queries | 理论生成过程里,同一 \(S\) 支配 \(X^{ct}\) 与 \(X^{te}\) |
| 直接学习对象 | Unit-indexed response laws;计算上可采用 direct Unit、point token,或按任务需要显式建模 which-Unit belief | 共享参数映射 \((X^{ct},X^{te}_{-\pi},\pi)\mapsto q_\theta(X^{te}_{\pi}\mid X^{te}_{-\pi},X^{ct})\) |
| Belief 是否显式输出 | 不是必选;只有 identity attribution / uncertainty contract 明确要求时才输出 which-Unit belief | 没有 \(S\)-posterior head;式 (4) 是理论分解 |
| Evidence 的解释 | 可直接读取已知 Unit,也可据 evidence 产生 point representation,或更新 which-Unit belief | 可用式 (4) 解释 context 如何改变 SCM posterior;网络只需给出最终 conditional |
| Rows 的默认含义 | events 可归属于不同 units | 给定 \(S\) 后的 samples |
| 输出 | Unit-conditioned response;belief 只是可选 inference branch,不是统一默认输出 | context-conditioned masked-cell prediction |
下面是本文为 Unit 问题写的扩展草图,不是 LimiX 论文的公式或架构:
这里 \(a\) 是 unit,\(t\) 是 event;同一个 \(U_a\) 跨多个 \(t\) 持续。\(S\) 解释“这张表是什么规律”,\(U_a\) 解释“当前是谁”,\(F_{1:d}\) 解释“当前测量什么”。这个扩展是为了把两种问题摆在同一张图里,并不是 LimiX 论文自己的模型。对 LimiX 最严格的说法仍是:论文用 \(S\) 分解目标分布,但网络直接学 \(q_\theta\),没有显式 which-\(S\) belief;Unit-conditioned learning 则把 Unit-indexed response law 放在一等位置,计算时可以直接访问 Unit、从 evidence 得到 point token,或在任务确实需要时推断 which-Unit belief。P11 v1 的默认分支是 deterministic Unit token,statistical Unit belief 只是独立 alternative。
现实表格的名字不同,但统计结构常反复出现。更硬的说法是:预训练数据分布规定了模型反复看到的结构支持,由此形成可迁移的 inductive bias;把它称为模型的 “meta-prior” 只是 Bayesian-style 解读。
随机 mask 可以约束 conditionals,并在模型充分表达、分布匹配等假设下恢复 joint conditional;但预测正确不等于识别了真实因果 \(S\)。多个 observationally equivalent SCM 可以给出相同预测。网络的直接目标是 masked conditional,论文式 (4) 允许把相应 joint conditional 作 posterior-predictive 解读;这不要求网络知道世界“真正为什么如此”。
不用背术语。能答对下面八题,就已经把最核心的层级分开了。
numeric_embed_type="linear"。features_per_group=2;配置没有覆盖 numeric_embed_type,与固定源码的 linear default 合并确定本文画出的 \(1\to96\to192\) 与 \(384\to192\to192\) 路径。features_per_group reshape 与 scalar representations 的融合入口。subortho 实现(固定 commit):每次 forward 生成并正交化低维匿名地址,再通过可学习线性层升维并广播到所有 rows;论文 §5 说明 inference pipelines 还会随机排列 feature columns。