Anonymous table, explicit mathematics

LimiX 到底学到了什么?

它没有稳定的 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,不是新模型本身,也不是新模型的证据。

01 · The apparent paradox

你不舒服,是因为把两种“泛化”放在了一起

语言模型和推荐系统依赖稳定身份;LimiX 依赖的是当前表格里的关系证据。它们都叫泛化,但跨越的东西并不相同。

语言模型

稳定对象:vocabulary token。

“dog”在不同句子里仍是同一个 token type,语义可跨语料积累。

推荐系统

稳定对象:user / item ID。

item 42 在不同用户、不同事件里仍是同一个 item,可以持续更新表示。

TabPFN / LimiX

稳定对象:只有当前 episode 的行列关系。

下一张表的第 3 列已经可能是另一个变量,模型不能靠全局 column ID 记忆语义。二者都符合这一点,但具体 tokenization 与 attention 架构并不相同;下文显微镜专说 LimiX。

它不是在没有语义的情况下理解世界;它是在没有对象语义的情况下,解一个局部概率拼图。

它拥有:relational meaning

当前表中,\(X_1\) 与 \((X_2,X_3)\) 怎样共同变化?哪些行相似?哪个变量可以预测另一个变量?

它缺少:referential meaning

\(X_1\) 在现实中是不是血压?单位是什么?由什么设备测量?两行是否属于同一个病人?

所以不是“完全没有 token”。
LimiX 的计算 token 来自一个个 cell:数值 \(x_{ij}\) 被映射成向量,再加上当前 episode 的匿名列标识。这个标识只绑定“哪些 cells 属于同一个变量”,可以随列换位或重新抽取;它既不是固定序列位置,也不表示“全世界统一的血压列”。

Cell token

每个标量 \(x_{ij}\) 都被编码到 \(\mathbb R^p\)。它是网络可处理的计算载体。

Dataset-local feature code

DFE 为当前列生成匿名地址 \(e_j\),再与 cell 表征相加。它保留同列关系,却不是固定 column-position table 或跨表 vocabulary。

Attention 现场赋义

网络沿 feature axis 和 sample axis 交换信息。某个 cell 的“含义”来自它与当前 rows / columns 的关系。

02 · From raw dtype to cell token

一个 cell 不是直接“分词”:它先被局部数值化,再变成向量

严格说,一个 cell 在一次观测中只有一个 raw value;“不同类型”来自不同列或不同 cells。LimiX 把真实表格送进主网络前,先经过一个 inference-time adapter,把 heterogeneous dtypes 压成浮点数或缺失标记。

01 · Raw cell “北京”

原始表格接口看到的 value 与 dtype。

02 · Local adapter 2.0

只对当前这次 predict 的表建立编码。

03 · Shared encoder gθ(2.0)

非缺失标量共用 numeric MLP;源码也支持 RBF 版本。

04 · Anonymous column ID gθ(2.0) + eⱼ

加入当前 episode 的 DFE;它绑定同列,不编码永久顺序或世界语义。

类别值:“北京”先在当前表内被 ordinal-encode 成一个临时 float code。它没有跨表的“北京 embedding”;编号可以在 ensemble 中被随机重排,稳定留下的是同值/异值关系。
\[ v_{ij}\xrightarrow{A_{\mathcal D}}z_{ij}\in\mathbb R\cup\{\mathrm{NaN}\}, \qquad t_{ij}= \begin{cases} g_\theta(z_{ij})+e_j,& z_{ij}\text{ observed},\\ m_{\mathrm{mask}}+e_j,& z_{ij}\text{ missing}. \end{cases} \]
02B · Shared Numeric Encoder microscope

同一个 scalar,究竟怎样变成 \(p\) 维向量?

不要把它想成一个“数值词汇表”。它更像一条所有 \(X\) cells 反复调用的向量值函数 \(g_\theta:\mathbb R\to\mathbb R^p\)。下面把论文公式与公开代码分开看。

“Shared”的准确含义:同一套 \(g_\theta\) 参数跨 rows、columns 与 datasets 复用;不是每列各有一个 encoder,更不是 \(X\) 与 \(Y\) 共用一个 encoder。单独的 \(g_\theta(0.7)\) 不知道 0.7 是年龄、收入还是 ordinal code。
01 · INPUT \(z\in\mathbb R\)

一个已数值化、可见的 \(X\) scalar。

02 · EXPAND Linear \(1\to96\)

LimiX-16M 中 \(p=192\),所以中间宽度是 \(p/2=96\)。

03 · NONLINEAR LN → ReLU

对 hidden channels 做 LayerNorm,再激活。

04 · PROJECT Linear \(96\to192\)

把中间表示投到 Transformer width \(p=192\)。

05 · OUTPUT LN → ReLU

得到一个 per-scalar 192 维表示。

公开 LimiX-16M 的 linear X 路径:官方 checkpoint 的内嵌配置给出 \(p=192\)、\(K=\texttt{features\_per\_group}=2\),且未覆盖 factory 的 numeric_embed_type="linear" 默认值。实际由 get_x_encoder() 接入的 MaskEmbEncoder 因而执行 \(1\to96\to192\),两段都采用 LayerNorm + ReLU。它与论文 §2.1 的 GELU 公式并不逐层相同。
\[g_\theta(z)=\operatorname{ReLU}\!\left(\operatorname{LN}\!\left(W_2\,\operatorname{ReLU}(\operatorname{LN}(W_1z+b_1))+b_2\right)\right)\in\mathbb R^p.\]

论文 §2.1 写的结构

scalar → Linear → LN → GELU → Linear → LN → GELU → \(\mathbb R^p\)

论文从已经数值化的 \(x^R_{ij}\in\mathbb R\) 出发,把 \(X^R:m\times d\) 变成 \(X:m\times d\times p\),并明确说 \(X^R\) 与 \(Y^R\) 使用不同 embedding modules。

公开代码实际接入的 X encoder

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。

Outside model 当前表 adapter

真实推理时把 dtype 转成 float / NaN,并在不同 ensemble branches 中选择 table-local 的 quantile、power、standardization 或 passthrough。它不是 \(g_\theta\) 的一层。

Before X encoder · config-controlled 列级 mean / std 与 outlier 处理

公开模型代码可用 context rows 估计每个 feature 的均值、标准差并压缩极端值,再把 scalar 交给 MaskEmbEncoder。LimiX-16M 配置启用 context-only normalization,但关闭 outlier removal。

Inside representation LayerNorm

它规范的是一个 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\)。

\([B,N,G,K]\xrightarrow{\text{shared scalar encoder}}[B,N,G,K,p]\xrightarrow{\text{concat}}[B,N,G,Kp]\xrightarrow{\text{fusion}}[B,N,G,p]\)

一句话收束: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\)。

Column permutation paradox

换顺序,不等于抹掉“同列身份”

这里需要修正一个容易误导的叫法:DFE 更接近当前 episode 的匿名 column identifier,而不是“第 \(j\) 个位置永远有固定意义”的普通位置编码。

Desired scalar output \(f(\pi X)=f(X)\) 分类或回归结果应不依赖列的序列化顺序。
Desired table-shaped output \(F(\pi X)=\pi F(X)\) 补全或生成结果应随列一起换位;严格说这是 equivariance。
先给判决:一半 exact,一半 approximate。完成 grouping 后,把 group tokens 与各自的匿名地址整体换位,后面的 feature-axis Transformer 具有标准的 permutation equivariance;但从 raw columns 开始,LimiX-16M 的 \(K=2\) 顺序拼接与 fusion 会改变配对和组内槽位,所以任意 raw-column permutation 并不是单次 forward 的精确对称。

精确成立:group-token layer

若 \(H\) 已经是完成 fusion 的 group tokens,\(A\) 是对应匿名地址,则把二者联合置换只会联合置换输出:

\(F_\theta(PH,PA)=P\,F_\theta(H,A)\)

只近似成立:raw-column layer

raw columns 重新排序后,\((X_1,X_2)\)、\((X_3,X_4)\) 这样的分组可能变成别的组合;fusion MLP 还区分组内第 1 / 第 2 槽位。

\[ \bar F_M(X) = \frac1M\sum_{m=1}^M P_{\pi_m}^{-1} F_\theta(P_{\pi_m}X;A_m). \]

为什么 ensemble 有用?如果对全部 permutations 做精确平均,上式会得到严格对称化的 predictor;实际只随机抽有限个 \(\pi_m\) 与匿名地址 \(A_m\),所以是 Monte Carlo approximation。\(M\) 越大通常越接近,但“用了 permutation ensemble”本身不等于“单次网络已严格 invariant”。标量分类 / 回归输出不需要式中的 \(P_{\pi_m}^{-1}\)。

匿名变量 A1.2 · 2.4 · 3.1
匿名变量 B8 · 9 · 10
匿名变量 C0 · 1 · 0

原始输入:地址没有告诉模型 A、B、C 在现实中是什么;它只让同一列跨 rows 保持可绑定。

Column order 可以没有意义,但“哪些 cells 属于同一个变量”不能被删除。

应当消失:order

整列连同 mask、metadata 与临时地址一起移动,只是同一张表换了一种 serialization。

必须保留:identity relation

模型仍需知道 \(x_{1j},x_{2j},x_{3j}\) 属于同一个匿名变量;否则整张二维表会退化成一袋数字。

论文与代码的精确边界:论文写 \(e_j=u_jE\),并把它类比为 feature-axis absolute positional encoding;公开代码的默认 subortho 路径却在每次 forward 临时生成并正交化低维地址,只有升维线性映射是训练参数。因此这里更准确的词是“随机匿名列地址”。在论文的一列一 token 抽象中,或在代码已经完成 group fusion 之后,feature tokens 与地址联合换位具有相应的等变结构。

令 \(H\) 为完成 grouping 后的 feature tokens,\(A=(e_1,\ldots,e_G)\):\(\quad F(\pi_G H,\pi_G A)=\pi_G F(H,A),\qquad A\overset{d}{=}\pi_G A\)

但不能据此声称任意 raw-column permutation 在单次 forward 中精确等变。features_per_group 会先按顺序拼接多个 raw scalars,再用 order-sensitive fusion MLP 形成一个 group token;组内重排或跨组重组都可能改变结果。随机地址、raw feature permutations 与 ensemble aggregation 的作用,是近似平均掉这些任意槽位依赖,而不是证明它们不存在。

X 侧没有什么?

没有 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,需要用户先拆成数值或类别特征。

如果一列有 1 万个类别:它能“吞进去”,但默认没有真正的 1 万类表示机制

假设这一列是商品 ID。当前表的 adapter 会先建立临时编号:

\[ \text{item\_7312}\longmapsto k_{\mathcal D}(\text{item\_7312})\in\{0,\ldots,9999\} \longmapsto g_\theta\!\bigl(k_{\mathcal D}(\text{item\_7312})\bigr), \qquad\text{而不是}\qquad \text{item\_7312}\longmapsto E_j[\text{item\_7312}]. \]

当前公开 predictor 的默认启发式在样本数达到门槛后,只把 distinct values 极少的列自动标为 categorical(默认阈值是小于 4);一万个类别不会进入这个低基数分支,随后很可能按 numerical column 处理。于是 \(7312\) 与 \(7313\) 会获得一种人为的邻近与顺序,而商品 ID 本来没有这种几何。

同一个高基数变量,两种完全不同的表示逻辑
问题LimiX 公开版默认路径推荐系统式路径
类别如何进入模型当前表 local code → shared numeric encodercategory 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”。

03 · Network anatomy

把 LimiX-16M 拆开:它是一张 cell-token 网格上的轴向 Transformer

先沿整条计算路径看一遍。点击任一阶段,会显示该阶段到底保存了什么信息。图中的结构依据论文 Figure 3、Section 2 与 Mask Embedding 小节重画。

④ 12× Axial Transformer:网络在 cell grid 上反复交换“同一行内的列关系”与“同一列上的样本关系”;论文没有声称 12 个 block 共享参数。

放大一个 Transformer block

Feature MHA ①Pre-LN · residual
FFN ①Pre-LN · residual
Feature MHA ②Pre-LN · residual
FFN ②Pre-LN · residual
Sample MHAPre-LN · residual
FFN ③Pre-LN · residual
\(H\leftarrow H+\operatorname{MHA}_{axis}(\operatorname{LN}(H))\),随后 \(H\leftarrow H+\operatorname{FFN}(\operatorname{LN}(H))\)。

12 个 blocks 合计包含 24 次 feature-attention passes 与 12 次 sample-attention passes。

Feature-axis:一行内跨 columnsSample-axis:一列内跨 rows

“沿哪个轴 attention”是什么意思?

Feature attention:固定第 2 行,让这一行的 \(X_1,\ldots,X_d,Y\) 相互读取;模型在这里理解 feature interaction。

关键:LimiX 有 cell hidden states,也有当前列的地址编码;但它没有为每个真实 feature 或每个 row 分配一个跨数据集持续存在的 semantic ID embedding。
04 · Multiple outputs, one abstract objective

三个输出头,不等于每一步都把三个 loss 加起来

Figure 3 把 classification、regression 与 masked-feature reconstruction 三条解码路径并列画出,容易让人误以为训练目标就是“CE + MSE + MSE”。公开证据并不支持这个写法:能确认的是 head 的输出形状与 task routing;论文只公开了统一的 masked conditional negative log-likelihood。

01 · Shared trunk Hθ(context, query)

同一个轴向 Transformer 产生 hidden states。

02 · Routed decoder classification head

由 task type 或被 mask 的位置选择解码路径。

03 · Output C class logits

推理 wrapper 再做 temperature scaling 与 softmax。

04 · Public loss status abstract NLL only

具体 per-head criterion 与权重没有公开。

Classification:公开代码确认 head 输出 \(C\) 个 raw logits,softmax 位于 inference wrapper。Cross-entropy 是自然推测,但官方仓库没有 training loop,论文也没有把抽象 NLL 展开成明确的 CE,因此不能把“训练使用 CE”写成已确认事实。

论文 Section 6 给出的训练对象是:对每个 episode 抽一个 mask \(\pi_i\),只要求模型提高真实 masked values 的条件概率:

\[ \widehat{\mathcal L}(\theta) =\frac1n\sum_{i=1}^{n} -\log q_\theta\!\left( x_{\pi_i}^{te,(i)} \mid x_{-\pi_i}^{te,(i)},x^{ct,(i)} \right). \]

这是一个统一的概率层写法。它没有进一步说明 \(q_\theta\) 是否对 masked cells 因子分解、连续变量使用 Gaussian NLL 还是 MSE、feature reconstruction 与 Y prediction 是否同一 episode 联合优化,也没有给出任何 \(\lambda_x,\lambda_{reg},\lambda_{cls}\) 权重。

公开资料能够确认

  • Classification head 输出 class logits;推理阶段才 softmax。
  • Regression head 只输出 一个 scalar,没有 variance、log-scale 或 mixture parameters。
  • Feature decoder 输出每个 feature group 的 数值点预测,再经过 inverse preprocessing。
  • Y 侧由 task_type 在 classification / regression 路径间路由。

公开资料不能确认

  • “classification 一定用 CE、regression 一定用 MSE”;
  • 三个 heads 每个训练 step 都同时产生监督;
  • \(\mathcal L=\lambda_x\mathcal L_x+\lambda_r\mathcal L_r+\lambda_c\mathcal L_c\) 以及这些权重;
  • mask-density statistics token 有独立 auxiliary loss。

最稳妥的理解:不同输出是对同一种 conditional-query interface 的不同解码方式。理论上由“当前 mask 中哪些变量需要预测”决定监督坐标;代码中 Y 的 classification / regression 明确按 task 路由,X mask 交给 feature decoder。mask_prediction=True 时 forward 可以同时返回多个 tensors,但“返回了”并不能证明训练时把相应 losses 全部加和。Mask-density token 只是 conditioning input,公开资料没有给它单独的 target。

05 · Interactive intuition

先看懂论文式 (4) 的直觉——但别把玩具当成网络

下面的系统显式枚举三个候选规律 \(S\),再用 context 更新 belief。它只把论文的 SCM mixture 写成可视化玩具;LimiX 网络本身没有这三个候选项,也没有显式的 \(S\)-posterior 输出。

隐藏世界实验室

真实世界 \(S\) 已隐藏。先看数据,再看 belief。

Context row\(X_1\)\(X_2\)\(Y\)
Posterior predictive mean: \(\mathbb E[Y\mid X^{ct},x]\):把各候选规律的答案按 belief 加权
06 · The mathematical object

论文确实有 \(S\);网络却没有显式的 \(S\)-推断模块

这两个陈述必须同时成立。第 6.1 节令 \(S\) 为“对应一个结构因果模型(SCM)的随机变量”,用它分解目标分布;模型训练部分则直接定义 masked conditionals \(q_\theta\),没有另外定义一个 \(q_\phi(S\mid X^{ct})\)。

论文假设\(X^{ct}\perp X^{te}\mid S\)
两个因子\(p(S\mid X^{ct})\,p(X^{te}\mid S)\)
边缘化\(\int_S(\cdot)\,dS\)
目标分布\(p(X^{te}\mid X^{ct})\)

论文原有的理论分解:

\[ p(X^{te}\mid X^{ct}) =\int p(S\mid X^{ct})\,p(X^{te}\mid S)\,dS. \tag{4} \]

这里的 \(p(S\mid X^{ct})\) 是论文所说的“给定 context 后关于 SCM 的后验”,\(p(X^{te}\mid S)\) 是给定 SCM 后测试样本的 likelihood。于是可以把式 (4) 读成:

\[ X^{ct}\longrightarrow p(S\mid X^{ct}) \longrightarrow p(X^{te}\mid X^{ct}). \]

但这是目标分布的潜变量分解,不是网络计算图。论文没有说 Transformer 先输出 \(p(S\mid X^{ct})\),再调用 \(p(X^{te}\mid S)\)。

论文理论层:\(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。这个词不是作者原话。

模型优化层:\(q_\theta\)

\(q_\theta(X^{te}_{\pi}\mid X^{te}_{-\pi},X^{ct})\)

给定 context 与可见 cells,预测被 mask 的 cells。

同一组参数跨任务直接做条件预测;称它为 “amortized predictor” 是本文的功能性解释,也不是论文用语。

论文没有建立的四件事:S-token、SCM classification head、显式 \(q_\phi(S\mid X^{ct})\) module,以及“某个 hidden state 等于真实 \(S\)”的证明。最严格的结论是:\(S\) 为目标分布提供理论解释,网络直接优化最终条件预测。

论文中的 \(S\) 是解释目标分布的变量;代码里的 \(q_\theta\) 才是被直接训练的预测器。二者有关,但不能画成已经实现的两个网络模块。
07 · Training versus inference

训练和推理的外层不同,题目格式故意相同

切换下面两个视角。预训练知道被遮住的答案并更新参数;真实推理不知道答案且通常冻结参数。但两者都采用 context + masked query 的输入格式。

08 · Why random masking matters

Label 没有天生特殊:换 mask 就是在换问题

LimiX 通过随机遮单元格、整列或一块区域,迫使同一个模型练习不同方向的条件分布。点击不同 mask,观察“任务”如何变化。

RoleAgeBPSmokeDisease

令 \(\mathcal M\) 表示允许的 cell、column 与 block mask patterns。随机 mask 让模型练习整族:

\[ \Bigl\{ P(X^{te}_{\pi}\mid X^{te}_{-\pi},X^{ct}) :\pi\in\mathcal M \Bigr\}. \]

LimiX 的 Proposition 6.1 在相应假设及足够丰富的 masks 下说明,相应的 conditionals 家族与联合条件分布 \(P(X^{te}\mid X^{ct})\) 一一对应。它学的不是某个固定 label predictor,而是匿名变量上的 conditional calculus。

09 · LimiX versus Unit-conditioned learning

它与你的 \(\{P_u(Y\mid X)\}\) 不在同一层

最容易混淆的地方,是把论文理论中的 SCM 变量 \(S\)、网络 hidden representation 与 persistent Individual \(u\) 合并成同一种 latent。它们不是同一个数学对象。

Unit-conditioned learning 与 LimiX 的数学对象对照
问题Unit-conditioned learningLimiX
理论中的隐藏对象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 论文的公式或架构:

\[ S\sim\Pi_S,\qquad U_a\mid S\sim\Pi_U(\cdot\mid S),\qquad X_{a,t,1:d}\sim P_\theta(\cdot\mid S,U_a,F_{1:d},C_{a,t}). \]

这里 \(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。

10 · Why it generalizes — and where it stops

它泛化的是匿名结构,不是世界指代

现实表格的名字不同,但统计结构常反复出现。更硬的说法是:预训练数据分布规定了模型反复看到的结构支持,由此形成可迁移的 inductive bias;把它称为模型的 “meta-prior” 只是 Bayesian-style 解读。

稀疏依赖线性与非线性函数阈值与树规则交互项聚类与类别 regime噪声冗余 feature人工 mask 形状

它可以做得很好

  • 在陌生表格中,从少量 context 快速归纳局部规律;
  • 把分类、回归、imputation、generation 写成统一条件查询;
  • 在变量匿名、列顺序改变时仍利用关系结构;
  • 跨任务复用同一个 context-conditioned predictor;其行为可以作 Bayesian-like 解读。

它没有因此自动获得

  • “这列是血压”的稳定世界语义;
  • 同一病人跨 rows 的 persistent identity;
  • 真实 SCM 或因果方向的可识别恢复;
  • 对超出预训练结构支持集的任意表格普遍泛化。

不要把理论结果读得过强

随机 mask 可以约束 conditionals,并在模型充分表达、分布匹配等假设下恢复 joint conditional;但预测正确不等于识别了真实因果 \(S\)。多个 observationally equivalent SCM 可以给出相同预测。网络的直接目标是 masked conditional,论文式 (4) 允许把相应 joint conditional 作 posterior-predictive 解读;这不要求网络知道世界“真正为什么如此”。

11 · Retrieval check

现在检查:你是否真的抓住了数学对象?

不用背术语。能答对下面八题,就已经把最核心的层级分开了。

1. 在论文式 (4) 的理论分解中,context \(X^{ct}\) 更新哪一项?

2. LimiX 网络直接逼近的对象是什么?

3. 为什么没有 feature 语义仍能预测?

4. 一列有 1 万个 category values,公开版 LimiX 默认会为它们建立什么?

5. 架构里并列三个输出头,能否推出训练 loss 就是 CE 与两个 MSE 的加权和?

6. 极好的 prediction 是否证明恢复了真实因果机制?

7. 列排列不变性是否意味着模型必须彻底删除列身份?

8. “Shared Numeric Encoder” 中的 shared 到底是什么意思?

离开页面前,只记住六句话

  1. Raw dtype 先被当前表的 adapter 数值化;X 侧没有跨表 category vocabulary 或 feature-type embedding。
  2. Shared Numeric Encoder 是所有 \(X\) scalars 共用一条 value-to-vector 函数,不是数值词表,也不与 \(Y\) 共用。论文写 GELU;公开 16M 实际是 \(1\to96\to192\) 的 ReLU MLP,并把两个 scalar embeddings 融成一个 token。
  3. Column order 应当无关,但 column identity relation 不能消失:group-token 与地址的联合换位可精确等变;任意 raw-column permutation 却会受 \(K=2\) grouping / fusion 影响,只能靠 permutation ensemble 近似对称化。
  4. 论文第 6.1 节确实引入随机 SCM \(S\) 并给出式 (4);“dataset-level latent”只是本文对其生成层级的解释。
  5. 它学的是:
    \((X^{ct},X^{te}_{-\pi},\pi)\mapsto q_\theta(X^{te}_\pi\mid X^{te}_{-\pi},X^{ct})\)
    论文把 loss 写成这个 conditional 的抽象 NLL,没有公开三个 heads 的具体加权式。
  6. 式 (4) 可以解释 context 如何更新 SCM posterior;但模型没有 \(S\)-token、\(q_\phi(S\mid X^{ct})\) 或 SCM head,更未证明 hidden state 恢复真实 \(S\)。

一手来源