阅读量 ,评论量
函数变换
q_adjuster
有时模型预估值分布得较为密集,为了让不同的item更有区分性,方便下游使用,经常用一些函数变换来分布。这里列一些常用的。
一种是拉伸q值较小部分的: \[
q_{adjust} = \frac{q * (1+\text{factor})}{1+\text{factor} * q}
\]
其中factor越接近于0,变换后的分布越等价于不变,越大越拉伸q值较小的部分,一般用1.5就差不多了。
norm
1、除以q的均值
- TODO:尝试从data_norm的角度去理解一下
2、batch norm
3、layer norm
4、group layer norm
门控机制
element-wise multi
做gate时,用于计算gate的特征一般要先freeze掉:避免互相影响。
gate输出的值,一般都用[-15,
15]截断后过sigmoid再乘个2:正则化&保持输出的期望在1上。
feild gate
poso
senet
ppnet、epnet都属于这种。
cgc
attention
MHA的计算逻辑为: \(\text{softmax}(Q \times
K^T + mask) \times V\)
- Q、K、V的形状均为 [batch_size, num_heads, seq_len, head_dim]
- 简略为 \((QK^T)V\) 以便说明:
- 括弧外为第一部分,即attention的操作,其实就是对V中的向量做各种不同权重的线性组合(V中的行向量为各位置的”原始向量”);attention_weights的第i行代表的是,计算(输出)第i个位置的表征时,对V中各位置原始向量的线性组合系数(因为softmax的存在,实际上是各位置原始向量的加权平均)。
- 括弧内为第二部分,即attention_weights(『各种不同权重的线性组合』中的权重,形为
[batch_size, num_heads, seq_len,
seq_len]),通过对Q、K选择不同的src,实现不同效果的注意力机制。
- 第i行中的权重值
由Q的第i行向量与K中各向量分别做内积得到,即计算(输出)第i个位置的表征时所使用的信息更多的来自于V中哪个位置的向量,需要看Q中第i个位置的向量与K中哪个位置的向量内积更大。
- 对V的信息提取由Q的维度决定,Q有多少行 便是
提取多少个维度的结果。
- 一些例子:
- self-attention中QKV都用输入本身,自注意力的特征提取,每个位置的输出都融合上其它位置的信息,捕捉到每个位置间的依赖关系;
- target-attention中Q用target,KV用memory,代表要从memory中提取target维度的信息,至于要不要有残差结构,各有说法,具体任务具体实验;
- cross-attention中Q用target,KV用memory,与target-attention相同,代表的是从memory中提取target维度的信息,不同的是残差结构用Q做为加和项,即预期输出的主体是target,而target-attention预期输出的主体是memory;
几种掩码:
- full visible:常见于encoder。
- casual:常见于decoder。
- 对角线:常见于单点训练的并行化。
一些技巧:
- 增加一个槽位,并塞一个CLS(任一不随样本变化的token即可),可将该位置的输出用于对序列信息的汇总,
- 分析时,看attention_weights的均值、方差以及直方图分布。比如如果发现所有权重的均值都差不多,说明attention压根就没起作用,要么是序列特征出问题了,要么是target_item构造的emb有问题。
hstu
hstu的计算逻辑为: \(\text{FFN}
\textcolor{red}(((\text{sigmoid}(Q \times K^T+bias) \odot mask) \times
V) \odot (mask \times U)\textcolor{red}) + X\)
- Q、K、V的形状均为 [batch_size, num_heads, seq_len,
head_dim],经过mask后的U的形状为 [batch_size, seq_len,
num_heads*head_dim]
- 对该结构有几种不同的理解
- 视角1:本质上是resnet版的senet在序列特征上的适配。通过MTA产出各位置的权重,对(经过线性变换后的)原向量U做reweight;即让V去学特征重要度,但V只有当前位置的视角,建模能力有限,故通过QK的attention_weight实现更个性化的带权pooling。
- 视角2:高低阶特征交叉,DCN在序列特征上的适配。类似DCNv2的逻辑(用『左乘一个行向量(线性加权组合)的结果与要交叉的特征做哈达玛积
\(x_0 \odot (w^T x_0) + x_0\)
』来等价『与要交叉的特征做外积后的结果 内积一个列向量 \((x_0 x_0^T) w + x_0\)
』的操作),MHA完成线性加权组合的操作,与(经过线性变换后的)原向量U做哈达玛积,实现序列特征的隐式交叉。
- 使用时,若只基于该结构,用用户的历史序列预测target(item)的action,user和item的交叉不够显式,只有隐式地将其它位置的信息线性加权到item上来,可能难以训好。
ID系统
离散ID
语义ID
向量量化变分自动编码器(VQ-VAE)
残差量化变分自动编码器RQ-VAE
局部敏感哈希(LSH)