Introduction

作者在这篇文章中提出了一种新的特征交互方式。这种方式基于一种新型的图估计器,这种估计器可以自动估计特征之间的关系并通过连接相关特征来构造图像。一种特别的 跨层读取(Cross-level Readout) 收集了通过T2Gformer预测的不同层的突出特征并获取全局信息并作出预测。T2Gformer优于深度神经网络并与非深GBDT能力相近。
T2Gformer的优势在于特征交互项的提取,所以作者在引入中便提及:已有的特征选择方法可以被分为“软”与”硬”版本。”软”版本本质上运用特征间的全连接交互项,例如乘法交互项、特征交叉与基于注意力的交互。但是表格特征本质上就带有异质性,所以全连接交互是一个次优的选项因为其盲目地将所有特征融合在一起。DANets使用了”硬”版本,其将相关的特征分组并将交互限制在被分组的特征内,虽然DANets取得了非常有潜力的成果,他的特征选取操作依旧不能解决组内交互的问题,因此同一组的特征被无差别的融合,使得模型表达能力下降。
作者设计了Graph Estimator(GE)来组织表格特征为一个特征关联图(FR-Graph),更进一步的,作者通过堆叠GE融合块用于特征交互,并辅助以一个transformer架构的神经网络,这种新的架构被称为t2g-transformer。
GE通过以下几点构建特征交互图:

  1. 一个静态的可以描述任务的潜在知识的图拓扑结构。
  2. 适应数据的边权重。
    在作者提出的T2G-Former中,每层使用了FR-Graph来将输入特征转化为图特征,异质性特征交互是遵循图中边的指定结构来有序的进行。同时,一个特殊的跨层读取收集了每个分级的突出特征并获取全局表格语义以作出最终决策。
    作者这项工作的主要贡献如下:
    首次使用了特征图来处理特征异质性的问题,并提出了一个GE模块来进行特征相关性组织
    在Transformer架构中使用了FR-Graph并构建了特定的T2G-Former模型进行表格数据的分类与回归。
    T2G-Former的表现在许多数据库上优于SOTA tabular DNNs,并且可与GBDTs相抗衡。

Graph Estimator

GE将表格数据特征作为图节点、特征相关性作为边。其设计理念来自于知识图谱补全knowledge graph completion,也就是使用了两个实体的语义学相关性来估计关系的可信度。一个基础的式子被用于描述这样的语义学相关性:
$$f_{r}(h,t)=h^TM_{r}t$$
其中$h,t\in \mathbb{R}^n$是头实体节点的编码和尾实体节点的编码,$M_{r} \in \mathbb{R}^{n\times n}$是一个可学习矩阵,用于在知识图谱(KG, Knowledge Graph)中表示关系r。许多相关方法均来自于该公式,唯一不同的就是关系编码和评分函数。
不同于KGC模型只计算静态的关系可信度,GE借助可适应的边权重,借助静态的潜在图拓扑结构来估计特征的关系。我将每个特征作为一个节点,首先使用语义学上的匹配来估计每对特征关系的软可信度(这被作者称为数据适应的边权重);其次,一个静态知识拓扑结构基于数据列语义被学习并构建,其被用于保留重要特征对的交互项。最后,边权重与知识拓扑结构集成以形成FR-Graph.

FR-Graph Structure Components

为了挖掘表格数据的特征关联,我们通过将表格特征作为图节点的候选项并预测节点间的边来构建FR-Graph。边是来自于两个角度:自适应的边权重表示了特定数据的信息;静态的边拓扑结构展示了潜在的信息。其中,有部分节点与FR-Graph相独立,这是因为没有节点与之相连。

Adaptive Edge Weight

考虑两个表格数据特征嵌入向量$x_{i},x_{j}\in \mathbb{R}^n(i,j\in{1,2,\dots,N})$其中$N$为输入特征的数量,我们通过如下方式估计交互可信度:
$$G_{\omega}[i,j]=g_{\omega}(f_{i}^h, f_{j}^t)={f_{i}^h}^T \mathrm{diag}(r)f_{j}^t$$

$$
f_i^h = W^h x_i,\quad f_i^t = W^t x_i,\quad
$$

$$ \left \{ \begin{array}{ll} W^h = W^t & \text{if symmetric} \\ W^h \ne W^t & \text{if asymmetric} \end{array} \right. $$

其中,可学习的两个参数$W^h, W^t \in \mathbb{R}^{m\times n}$记为对于头特征和尾特征的转化,$\mathrm{diag}(r)\in \mathbb{R}^{m\times m}$(原文写的是$\mathbb{R}^{n\times n}$)是一个对角矩阵,该对角矩阵是由可学习的关系向量$r \in \mathbb{R}^n$参数化而来,其语义上表示了特征的关系。$W^h$与$W^t$如果是对称的(无向的),则共享参数,在非对称的例子中则不相等。出于书写的方便,所有偏置项都被省去。最终,自适应权重评分$g_{\omega}$构成了一个全连接的加权图,这样的一张图将会在diag(r)为单位阵时退化成一个注意力评分,因此,它也能计算加权特征相似性。

Static Knowledge Topology

静态相关拓扑评分可以如下计算:

$$G_{t}[i,j]=g_{t}(e_{i}^h, e_{j}^t)=\frac{{e_{i}^h}^Te_{j}^t}{||e_{i}^h||_{2}||e_{j}^t||_{2}}$$

$$e_{i}^h=E^h[:,i], e_{i}^t=E^t[:,i],$$
其中$E\in{ E^h, E^t}$时一个可学习的列嵌入,其被分为头嵌入与尾嵌入。$E={ e_{1}, e_{2},\dots,e_{N}}\in \mathbb{R}^{d\times N}$,d是嵌入的维度。相似的,相关拓扑评分有对称与非对称两个版本,与加权特征相似性计算一样,对称时相同而非对称时不同。作者使用二范数来保证同量纲与训练稳定性(这不就是余弦相似度).
我们通过一下式子获得静态关联拓扑结构:
$$A=f_{top}(G_{t})=\mathbb{1}[\sigma_{1}(G_{t}+b)>T]$$
其中$\sigma_{1}$是逐元素的激活函数,其具有一个可学习的参数b,$G_{t}$是一个邻接矩阵评分,由关联拓扑评分构成,T是一个常数阈值,$\mathbb{1}$记为指示函数,通过这种方法,我们获得了一种全局图拓扑结构来限制特征的交互,并且这样的拓扑结构可以被认为是整个任务上的静态知识。
这里原文讲得不是很清晰,后面对照代码来理解这一部分

Relation Graph Assembling

当我们从数据角度获得了软自适应边权重,从知识角度获得了硬静态关系拓扑图结构,我们将他们组合起来产生一个FR-Graph:
$$G=\sigma_{2}(f_{nsi}(A)\odot G_{\omega})$$
其中$\sigma_{2}$是一个竞争激活函数(例如$L_{p}$正则化、softmax、sparsemax)来限制每个节点的入度,$\odot$是Hadamard积(就是逐元素相乘)。最终的关系图G是一个同时基于适应性特征匹配与静态知识拓扑结构的加权图。为了让FR-Graph主要关注学习有意义的交互项,一个“非自我交互函数”$f_{nsi}$被使用用于精确排除G中的圈(self-loop)。我们使用FR-Graph来指导接下来的特征交互。同时,因为边权重与拓扑结构均有2种版本(非对称与对称),所以在实验中,我们也会讨论不同版本对于结果的影响。

T2G-Former

我们将GE结合到类注意力的模块,并且通过将多个块堆叠来构建T2G-Former。T2G-Former使用估计的FR-Graphs进行特征交互并获取高级特征,跨层读取按顺序被映射到每层的特征空间并选择性的收集特征性的特征以进行最终的预测。一条捷径被加入来从前一层中保留信息(残差),最终形成一个在不同特征级别间的有门控融合。

Basic Block

每个块都配有GE用于特征交互,输入特征$X^l\in \mathbb{R}^{n\times N}$,$l$代表第$l$-层,我们使用如下式子获取下一层输入$X^{l+1}$
$$G^l=GE(X^l), V^l=W_{v}X^l$$
$$H^l=G^lV^l+g(X^l), X^{l+1}=FFN(H^l)+g(H^l)$$
$W_{v}\in \mathbb{R}^{m\times n}$是一个可学习的参数,用于特征映射,$V^l$时映射后的特征输入,FFN为前馈神经网络。环已在$G^l$中排除,g为捷径,在实验中就是一个dropout层。值得注意的是,我们产生并使用FR-Graph用于特征交互,但是它并不影响那些通过残差连接进行的特征内部更新。在第一层中,我们将输入的表格数据通过一个简单的tokenizer编码为$X_{0}$,以下我给出一个简单的tokenizer帮助理解在表格数据中,如何进行”分词”

1
2
3
4
5
6
7
8
9
10
11
12
class FeatureTokenizer(nn.Module):
def __init__(self, cat_dims, num_dim, embed_dim):
super().__init__()
self.cat_embeds = nn.ModuleList([
nn.Embedding(num_cat, embed_dim) for num_cat in cat_dims
])
self.num_proj = nn.Linear(num_dim, embed_dim)

def forward(self, x_cat, x_num):
cat_vecs = [emb(x_cat[:, i]) for i, emb in enumerate(self.cat_embeds)]
num_vecs = self.num_proj(x_num)
return torch.stack(cat_vecs + [num_vecs], dim=1) # Shape: [B, #features, d]

通过这种方式,高级别的特征可以通过FR-Graph迭代的产生并选择性地交互。在使用过程中,层归一化的作用是保证稳定的训练。

Cross-level Readout

我们设计了一个全局读取节点来选择性的收集每层中重要的特征并获取全面的语义学信息以进行最终的预测。特别的一点是,我们使用注意力机制融合当前层选择的特征,同时将他们与前一层的特征的捷径结合,当前读出层的状态为$z^l\in \mathbb{R}^n$收集过程可以被描述为:
$$\alpha_{i}^l=g_{\omega}(h^l,f_{i}^t) \cdot f_{top}(g_{t}(e^l,e_{i}^t)),h^l=W^hz^l $$
$$r^l=\mathrm{softmax}(\alpha^l)^TV^l+z^l$$
$$z^{l+1}=\mathrm{FFN}(r^l)+r^l$$
$\alpha_{i}^l$记为第i个特征的权重,$\alpha^l\in \mathbb{R}^N$是由$\alpha_{i}^l$构成,$e^l\in \mathbb{R}^d$是一个可学习的向量,其表示读出层的节点在第l层的语义学信息,$f_{i}^t$是每层编码的特征,$e_{i}^t$是一个逐层的列嵌入,$V^l$是映射后的输入特征(似乎这里公式书写有些问题,后续看代码修正),这里,我们将$z^l$输入到相同的FFN中将当前的读出映射到第l+1层的特征空间。捷径直接被加入,没有任何信息丢失,收集过程从输入特征到最高级的特征一直被重复,这样的操作可以鼓励跨层的特征交互。

The Overall Architecture and Training

我们在每个块中默认使用8头GE,预测基于最后一层处理完成后的读出层状态
$$\hat{y}=\mathrm{FC}(\mathrm{\mathrm{Re}LU(LN)}(z^L))$$
其中LN和FC分别表示层归一化和一个全连接层。使用交叉熵和均方误差作为损失函数,在过去的DNN中,我们测试了多种任务并观测到持续最优化静态图拓扑结构会造成模型的不稳定,所以,在其收敛后,我们将其固定以进行进一步的训练。
我们引入了额外的超参数$d$与$T$,在实验中,我们适应性地设定$d=2\lceil \log_{2}N \rceil$,这是可以表示$N^2$
个二元元素的最小邻接矩阵的信息量,并保持$T=0.5$在所有数据集中相同,$\sigma_{1}$是sigmoid,$\sigma_{2}$是softmax,对于示性函数,我们使用straight-through trick来计算梯度


Cover image icon by Becris from Flaticon