隐式特征组合主要特点是对连续值特征非常友好,最成功的应用场景是语音和图像。在这些原始信号是像素或是声波的问题里面,深度学习通过神经元网络产生底层的Filter以及层次化的特征组合,获得了远超人类手工特征工程的效果。但是深度神经网络并不是万能的,在深度学习中,高维离散特征的变量处理非常复杂,同时缺乏可解释性,过于黑盒化也是神经网络大家关注的焦点。这样会导致深度学习出来的特征组合相对难用到其他算法之上,也很难给人明确的信息反馈。 针对NN难以处理离散特征的问题,我们需要Large Scale Embedding的技术进行解决。Embedding最早在NN上的应用是在NLP的问题上,当时研究者们使用Embedding的技术将每个单词映射到一个低维空间,通过concat,sum,poolling,convolution等方式形成等长的最底层输入,然后使用标准的深度神经网络进行训练。随后在越来越多的领域用上了Embedding技术,推荐是一个典型的场景,限制波尔兹曼机(RBM)在提出之初就曾使用Embedding尝试解决协同过滤问题。最近,谷歌发表描述如何使用大规模Embedding技术在Youtube上向数以十亿计的用户推荐数以亿计的视频,在他们的工作中,他们同时对每个用户与视频进行Embedding,之后把用户观看历史、搜索历史等视频的向量通过求和变成特征,继而进行深度学习,获得了比较大的成功。 Large Scale Embedding在现在依然是一个比较热门的研究领域,其中的成果包括Discrete Factorization Machine,FNN, PNN, DeepFM等,上图显示了这些算法的异同,简单来讲这些模型既能找到特征之间的推理关系,同时也能去记忆比较细的特征。在这个领域,第四范式提出了DSN(Deep Sparse Network)的算法,它是一个非常宽且深的模型,里面同样会做大规模Embedding,用神经网络做自动学习组合,目标解决高维模型(上万万亿VC维度)的正则化以及并行计算问题。 半显式特征组合 第二个是半显式的组合,主要基于的是树模型。为什么说是“半显式”呢?因为大家可能认为树模可解释或者做特征组合是很自然的事情,但其实并不是:叶子节点的每一个分支并不是一种显式、直接的特征组合,而是这些特征在特定取值区间的组合。所以从结果上来说我们做到了特征组合,有一定可解释性,但是同样也没有办法直接看特征相关性或者特征之间组合关系。作为非线性模型,树模型主要的特点是容易理解,效果也是非常好的。但是类似的,它对离散的精细特征非常难处理,传统上训练一棵m个特征n个训练数据k层深t棵树的模型需要O(mntk)的时间,即使对系数特征进行优化,也很难降低特征分裂中分桶上的空间与传输消耗。在这个方面,第四范式提出了一系列算法,包括HE-TreeNet和GBM系列算法,通过Embedding,Ensemble、Stacking,General Boosting等方式让树模型可以在大规模特征的情况下可以进行特征组合。 显式特征组合 第三个介绍一下显式的组合,算法的输出会明确指定哪些特征组合起来(笛卡尔积)作为基础特征。整体思路沿着搜索与搜索优化这条路,也有一些地方使用正则化加贪心。由于显式特征组合的问题求解空间大,寻找最优特征组合是个非常难的问题。我们对比AlphaGo下围棋,19乘19的棋盘上每个点上有黑子/白子/无子三种状态,它的状态空间最大是。考虑显式特征组合要做的事情,我们要有个特征,限制高阶组合阶数不超过,从中选取个特征,那么2到特征的总量是,最终再从其中选取个特征,其空间是 ,即使将不大的中带入,量级会远远大于,从解空间大小的角度看显示特征组合比下围棋还要更难。 显式特征组合还有一个问题是如何做连续值的组合,比如说一个人的年龄是30,收入是10000,应该怎么做组合特征呢?是乘、是加还是平方和?在NN中,是通过线性组合加上非线性变化,在GBDT中使用过特征值分裂,但是对限时特征组合,实际上没有一个好的现有方法去直接组合。 (责任编辑:本港台直播) |