【ML基础】从特征组合及其权重的角度对常用模型做统一解释 - 2022H1
总思路
如果把机器学习理解为对输入X的组合空间的表征,那该表征主要包括「特征组合方式」和「其对应权重(weight)」两个核心要素。另外,表示特征方式包括:原始特征值(
常用模型的统一解释
基于上述两个核心要素的算法对比:
-
树模型/gbdt:每棵树的leaf node对应的预测结果(response),可以理解为从根节点到该leaf node的路径上所有特征的交叉的weight。 -
mlp/lr:不具有直接原始特征值交叉的能力(所以需要人工交叉),但可以理解为通过线性加权(weight)的方式做全部特征的“弱”交叉,需要使用非线性激活函数来解决非线性问题。 -
fm/ffm:直接的二阶原始特征值交叉(* ),weight为 ,即由特征向量embvec内积得到,和self-attention一样( )。 fm也可称为二阶特征向量embvec的交叉(, 一般为1,可忽略)。 -
transformer 或 self-attention:token/特征的交互方式为 。与fm相比都是基于特征向量,但 transformer除了有和fm一样的,又做了 softmax归一化和对v_i的weighted sum(fm没有做softmax且换成了 * );而且 transformer是多层+FFN(获取更深、泛化性更好的交互),fm为一层。- 适用场景:组合空间大 且 链接稠密(共现性高)、数据多且质量高
- 一层
transformer也是二阶交叉,多层则“变相”实现了多阶交叉。cnn、gnn也类似,rnn相当于横向多层 - 替换统计特征的难点:1.模型训练batch小,而统计特征是基于全局的统计。2.一些组合特征的共现性低(比如个性化特征),容易过拟合,并会被共现性高的特征影响,而用统计的方式很容易做
-
cnn:image每个pixel/特征的embvec为feature map的channel维(即, )。filter卷积操作即为weighted sum 和 (而self-attention的weight来自 ,且 cnn非全局而是local的)。 -
ViT:因为做pixel级embvec的计算量和存储太大,改为一个patch做为一个embvec,然后用self-attention。 -
lstm(假设激活函数为relu和不考虑bias):和 的交叉部分可简化为 和 , 为 forget gate参数,为 input gate参数,为 的参数。 -
gat/gnn:类似cnn的filter的field,基于特定node()的 neighbor nodes做。 -
DCN:construct all the cross terms( 次幂原始特征值的交叉,非特征向量或embvec交叉) with degree | |>2。理论上基于泰勒公式的幂级数可以拟合任何数据分布或函数,该方法理论基础很好。
讨论环节
问题1:fm是有效的?
- 对特征
在样本中出现的频次做过滤,保证每个embvec均可训练。 - 只会通过 样本中出现的特征组合 对 相关的特征表征embvec做BP训练。(如果样本存在模式坍塌或非完备的特征组合分布,会容易过拟合,所以这类方法对样本量的要求远大于基于原始特征值的方案,如lr等)。
- 特征表征交叉的方式需要训练的参数量远小于「原始特征值笛卡尔积交叉」的方式,从N^2降到N*k,N为特征field的个数。
欢迎补充。希望基于这种串联加深对各算法的理解和作为平时算法选型的参考。
欢迎交流与合作
目前主要兴趣是探索agent的真正落地,想进一步交流可加微信(微信号:cleezhang),一些自我介绍。