数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
- 线性模型
- 支持向量机
- 朴素贝叶斯
- 决策树
- knn
- 集成学习
- 梯度提升树
- 数据预处理
- 模型评估
- 降维
- 聚类
- 半监督学习
- EM 算法
- 最大熵算法
- 隐马尔可夫模型
- 概率图与条件随机场
- 边际概率推断
- 主题模型
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- CRF ++
- lightgbm
- xgboost
- xgboost 使用指南
- scikit-learn
- spark
- numpy
- matplotlib
- matplotlib 使用指南
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
四、FFM 模型 [2016]
-
$ \min_{\mathbf{\vec w}} \frac{\lambda}{2} \|\mathbf{\vec w}\|_2^2 + \sum_{i=1}^N \log \left(1 +\exp\left(-y_i \phi_\text{LM}\left(\mathbf{\mathbf{\vec w}},\mathbf{\vec x}_i\right)\right)\right) $click-through rate: CTR
点击率预估在计算广告中起着重要作用。逻辑回归可能是该任务中使用最广泛的模型。给定一个具有 $ N $ 个样本的数据集 $ \left\{\mathbf{\vec x}_i,y_i\right\}_{i=1}^N $ ,其中 $ \mathbf{\vec x }_i\in \mathbb R^K $ 为输入的 $ K $ 维特征向量, $ y_i $ 为label
。我们通过求解以下最优化问题从而得到逻辑回归模型:其中: $ \lambda\ge 0 $ 为正则化参数, $ \phi_\text{LM}\left(\mathbf{\vec w},\mathbf{\vec x}\right) =\mathbf{\vec w}\cdot \mathbf{\vec x} $ 。
学习特征交叉效应看起来对
CTR
预估至关重要。这里我们考虑下表中的人造数据集,以便更好地理解特征交叉,其中+
表示点击量、-
表示不点击量。Gucci
的广告在Vogue
上的点击率特别高,然而这些信息对于线性模型来说很难学习,因为线性模型分别学习Gucci
和Vogue
的两个权重。为了解决这个问题,已经有两个模型来学习特征交叉效应:
- 第一个模型是二次多项式映射
degree-2 polynomial mapping: Poly2
,为每个特征交叉学习专门的权重。 - 第二个模型是分解机
factorization machine: FM
,通过将特征交叉分解为两个潜在向量的乘积来学习特征交叉效应。
FM
的一种变体,称作成对交互张量分解pairwise interaction tensor factorization: PITF
,用于个性化的tag
推荐。在2012
年的KDD Cup
中,Team Opera Solutions
提出了一种称作因子模型factor model
作为PITF
的泛化,称作field-aware factorization machine: FFM
。PITF
和FFM
的区别在于:PITF
考虑了user
、item
、tag
三个特殊的字段field
,而FFM
更加通用。由于FFM
是针对比赛的整体解决方案,因此对它的讨论是有限的,主要包含以下结论:FFM
使用随机梯度SG
来解决优化问题。为了避免过拟合,Team Opera Solutions
只训练了一个epoch
。FFM
在Team Opera Solutions
尝试的六个模型中表现最好。
在论文
《Field-aware Factorization Machines for CTR Prediction》
中,作者旨在具体建立FFM
作为CTR
预估的有效方法。论文的主要结果如下:- 尽管
FFM
被证明是有效的,但是本文可能是唯一发表的、将FFM
应用于CTR
预估问题的研究。为了进一步证明FFM
在CTR
预估方面的有效性,作者使用FFM
作为主要模型,从而赢得由Criteo
和Avazu
主办的两场全球CTR
比赛。 - 论文将
FFM
和两个相关模型Poly2
和FM
进行比较。作者首先从概念上讨论为什么FFM
可能比它们更好,并通过实验来查看准确性和训练时间方面的差异。 - 论文提出了训练
FFM
的技术,包括用于FFM
的有效并行优化算法、以及早停以避免过拟合。 - 为了让
FFM
可以被大家使用,论文发布了一个开源软件。
- 第一个模型是二次多项式映射
4.1 模型
-
为便于讨论,这里忽略了全局
bias
项和一阶项。给定特征向量 $ \mathbf{\vec x}=(x_1,\cdots,x_K)\in \mathbb R^K $ ,-
$ \hat y(\mathbf{\vec x}) =\phi_\text{POLY2} (\mathbf{\vec w},\mathbf{\vec x})= \sum_{i=1}^K\sum_{j=i+1}^K w_{i,j}\times x_i\times x_j\\ $POLY2
模型为:参数个数为 $ O(K^2) $ ,计算复杂度为 $ O(K^2) $ 。
实际上计算复杂度为 $ O(\bar K^2) $ ,其中 $ \bar K $ 为平均非零特征数量。
-
$ \hat y(\mathbf{\vec x}) =\phi_\text{FM} (\mathbf V,\mathbf{\vec x})= w_0 + \sum_{i=1}^K w_i\times x_i + \sum_{i=1}^K\sum_{j=i+1}^K \hat w_{i,j}\times x_i\times x_j\\ \hat w_{i,j} = <\mathbf{\vec v}_i,\mathbf{\vec v}_j> = \sum_{l=1}^d v_{i,l}\times v_{j,l} $FM
模型为:参数个数为 $ O(K\times d) $ ,计算复杂度为 $ O(K^2\times d) $ 。
通过重写上式:
$ \hat y(\mathbf{\vec x}) =\phi_\text{FM} (\mathbf V,\mathbf{\vec x}) = \frac 12 \sum_{l=1}^d\left(\left(\sum_{i=1}^Kv_{i,l}\times x_i\right)^2 - \sum_{i=1}^K v_{i,l}^2\times x_{i}^2\right) $计算复杂度降为 $ O(K\times d) $ 。
实际上计算复杂度为 $ O(\bar K^2) $ ,其中 $ \bar K $ 为平均非零特征数量。
-
-
Rendle
解释了为什么当数据集稀疏时,FM
可以比Poly2
更好。这里我们用上述人工数据集给出类似的说明。例如,对于
pair (ESPN, Adidas)
只有一个负样本:- 对于
Poly2
,可能会为 $ w_\text{ESPN,Adidas} $ 学习一个非常负的权重。 - 对于
FM
,因为(ESPN, Adidas)
的预估取决于 $ \mathbf{\vec v}_\text{ESPN}\times \mathbf{\vec v}_\text{Adidas} $ ,并且 $ \mathbf{\vec v}_\text{ESPN} $ 和 $ \mathbf{\vec v}_\text{Adidas} $ 也可以从其它pair
中学习(如(ESPN,Nike), (NBC, Adidas)
),所以预测会更准确。
另一个例子是没有针对
(NBC, Gucci)
的训练数据:- 对于
Poly2
,对这个pair
的预测是无意义的trivial
。 - 但是对于
FM
,因为 $ \mathbf{\vec v}_\text{NBC} $ 和 $ \mathbf{\vec v}_\text{Gucci} $ 仍然可以从其它pair
中学习,因此仍然可以做出有意义的预测。
- 对于
-
注意,
$ \hat y(\mathbf{\vec x}) = \phi_\text{POLY2} (\mathbf{\vec w},\mathbf{\vec x})= \sum_{i=1}^K\sum_{j=i+1}^K w_{h(i,j)}\times x_i\times x_j\\ h(i,j) = \left(\frac{1}{2}(i+j)(1+j+1)+j\right)\mod B $Poly2
的一种朴素实现是将每一对特征视为一个新特征,这使得模型的参数规模为 $ O(K^2) $ 。由于CTR
预估任务中的特征数量通常很大,因此Poly2
不可行。Vowpal Wabbit: VW
这个广泛使用的机器学习package
通过哈希来解决这个问题。我们的实现方法也类似,具体而言:其中 $ B $ 是一个用户指定的超参数。
-
FFM
的思想来源于个性化tag
推荐的PITF
。PITF
假设有三个可用字段field
,包括User
、Item
、Tag
,并且在独立的潜在空间中分解(User, Item)
、(User, Tag)
、(Item, Tag)
。FFM
将PITF
推广到更多字段(如AdID
、AdvertiserID
、UserID
、QueryID
),并将其有效地应用于CTR
预估。由于
PITF
仅针对三个特定字段(User, Item, Tag
),而FFM
原始论文缺乏对FFM
的详细讨论,因此这里我们提供了对CTR
预估的FFM
的更全面的研究。 -
对于大多数
CTR
数据集,特征features
可以分组为字段fields
。在我们前面的示例中,ESPN, Vogue, NBC
三个特征属于Publisher
字段,另外三个特征Nike, Gucci, Adidas
属于Advertiser
字段。FFM
是利用字段信息的FM
变体。为了解释
FFM
的工作原理,我们考虑以下示例:xxxxxxxxxx
11 Publisher (P): ESPN; Advertiser (A): Nike; Gender (G): Male; Clicked: Yes考虑对于
$ \hat y(\mathbf{\vec x}) =\phi_\text{FM} (\mathbf V,\mathbf{\vec x}) = \mathbf{\vec v}_\text{ESPN}\cdot \mathbf{\vec v}_\text{Nike} +\mathbf{\vec v}_\text{ESPN}\cdot \mathbf{\vec v}_\text{Male} + \mathbf{\vec v}_\text{Nike}\cdot \mathbf{\vec v}_\text{Male} $FM
,有:在
FM
中,每个特征只有一个潜在向量来学习和其它特征的潜在效应latent effect
。以ESPN
为例, $ \mathbf{\vec v}_\text{ESPN} $ 用于学习和Nike
的潜在效应( $ \mathbf{\vec v}_\text{ESPN}\cdot \mathbf{\vec v}_\text{Nike} $ )、和Male
的潜在效应 ( $ \mathbf{\vec v}_\text{ESPN}\cdot \mathbf{\vec v}_\text{Male} $ ) 。然而,因为Nike
和Male
属于不同的字段,(EPSN, Nike)
和(EPSN, Male)
的潜在效应可能不一样。在
$ \hat y(\mathbf{\vec x}) =\phi_\text{FFM} (\mathbf V,\mathbf{\vec x}) = \mathbf{\vec v}_\text{ESPN,A}\cdot \mathbf{\vec v}_\text{Nike,P} +\mathbf{\vec v}_\text{ESPN,G}\cdot \mathbf{\vec v}_\text{Male,P} + \mathbf{\vec v}_\text{Nike,G}\cdot \mathbf{\vec v}_\text{Male,A} $FFM
中,每个特征有若干个潜在向量,这依赖于其它特征的字段数量。例如在这个例子中:其中:
(ESPN, NIKE)
的潜在效应由 $ \mathbf{\vec v}_\text{ESPN,A} $ 和 $ \mathbf{\vec v}_\text{Nike,P} $ 学习,因为Nike
属于Advertiser
字段、ESPN
属于Publisher
字段。(ESPN, Male)
的潜在效应由 $ \mathbf{\vec v}_\text{ESPN,G} $ 和 $ \mathbf{\vec v}_\text{Male,P} $ 学习,因为Male
属于Gender
字段、ESPN
属于Publisher
字段。(Mike, Male)
的潜在效应由 $ \mathbf{\vec v}_\text{Nike,G} $ 和 $ \mathbf{\vec v}_\text{Male,A} $ 学习,因为Male
属于Gender
字段、Nike
属于Advertiser
字段。
-
$ \hat y(\mathbf{\vec x}) =\phi_\text{FFM} (\mathbf V,\mathbf{\vec x})=\sum_{i=1}^K\sum_{j=i+1}^K \hat w_{i,j}\times x_i\times x_j\\ \hat w_{i,j} = <\mathbf{\vec v}_{i,f_j},\mathbf{\vec v}_{j,f_i}> = \sum_{l=1}^d v_{i,f_jl}\times v_{j,f_i,l} $FFM
模型用数学语言描述为:其中: $ f_i $ 表示第 $ i $ 个特征所属的
field
,一共有 $ F $ 个field
( $ 1\le F\le K $ )。参数数量为 $ O(K\times d\times F) $ ,计算复杂度为 $ O(\bar K^2\times d) $ ,其中 $ \bar K $ 是样本中平均非零特征数。
-
和
$ d_{\text{FFM}} \ll d_{\text{FM}} $FM
相比,通常FFM
中representation
向量的维度要低的多。即:.
4.2 优化算法
-
FFM
模型采用随机梯度下降算法来求解,使用AdaGrad
优化算法。在每个迭代步随机采样一个样本 $ (\mathbf{\vec x},y) $ 来更新参数,则 $ \mathcal L $ 退化为:
$ \mathcal L = \log (1+\exp(-y\phi_\text{FFM}(\mathbf V,\mathbf{\vec x}))) + \sum_{\theta\in \mathbf \Theta} \lambda_{\theta} \times \frac 12 \theta^2 $考虑全局
$ g_{w_0} =\frac{\partial \mathcal L }{\partial w_0} = \lambda w_0 + \kappa\\ \mathbf{\vec g}_{\mathbf{ w}} = \nabla_{\mathbf{\vec w}} \mathcal L = \lambda\mathbf{ \vec w} + \kappa\times \mathbf{\vec x}\\ \mathbf{\vec g}_{\mathbf{ v}_{i,f}} = \nabla_{\mathbf{\vec v}_{i,f }} \mathcal L = \lambda \mathbf{\vec v}_{i,f } + \sum_{f_j \ne f} \kappa \times \mathbf{\vec v}_{j,f_i}\times x_i\times x_j\\ i=1, \cdots,K;f=1,\cdots,F $bias
以及一阶项,并统一所有的 $ \lambda_\theta=\lambda $ ,则有:其中: $ \sum_{f_j\ne f} $ 表示
$ \kappa = \frac{\partial \log(1+\exp(-y\phi))}{\partial \phi_\text{FFM}} = -\frac{y}{1+\exp(y\phi_\text{FFM}(\mathbf{\vec x}))} $field f
内的所有其它特征; $ \kappa $ 表示:-
对梯度的每个维度,计算累积平方:
$ G_{w_0} \leftarrow G_{w_0} + g_{w_0}^2\\ G_{w_i} \leftarrow G_{w_i} + g_{w_i}^2 \\ G_{v_{i,f,l}} \leftarrow G_{v_{i,f,l}} + g_{v_{i,f,l}}^2\\ i=1,\cdots,K;\;f=1,\cdots,F;\;l=1,\cdots,d $其中 $ g_{w_i} $ 是 $ \mathbf{\vec g}_{\mathbf w} $ 的第 $ i $ 个分量, $ i=1,2,\cdots,K $ ; $ g_{v_{i,f,l}} $ 是 $ \mathbf{\vec g}_{\mathbf{ v}_{i,f}} $ 的第 $ l $ 个分量, $ l=1,2,\cdots,d $ 。
-
更新参数:
$ \theta \leftarrow \theta - \frac{\eta}{\sqrt{G_\theta}} g_{\theta} $其中 $ \eta $ 是用户指定的学习率, $ \theta \in \{w_0,\mathbf {\vec w},\mathbf{\vec v}_{i,f}\} $ 。
-
-
模型参数需要合适的初始化。论文推荐:
- $ \mathbf{\vec v}_{i,f} $ 从均匀分布 $ [0,1/\sqrt d] $ 中随机初始化。
- $ G_\theta $ 初始值为
1
,这是为了防止在迭代开始时 $ \frac {1}{\sqrt{G_\theta}} $ 太大,从而导致前进方向较大的偏离损失函数降低的方向。
原始论文并没有 $ w_0,\mathbf {\vec w} $ 的项,因此个人推荐采用 零均值、方差为 $ \sigma $ 的正态分布来初始化它们。
-
论文推荐采用样本级别的归一化,这可以提升模型泛化能力。
注:如果采用
Batch normalization
效果可能会更好。论文未采用BN
,是因为论文发表时BN
技术还没有诞生。 -
FFM
的AdaGrad
优化算法:-
输入:
- 训练集 $ \mathbb S $
- 学习率 $ \eta $
- 最大迭代步 $ T $
- 初始化 $ w_0,\mathbf{\vec w } $ 的参数 $ \sigma $
-
输出:极值点参数 $ \mathbf \Theta^* $
-
算法步骤:
-
初始化参数和 $ G_{\theta} $ :
$ G_\theta = 1\\ (w_0,\mathbf{\vec w}) \leftarrow \mathcal N(0,\sigma)\\ \mathbf{\vec v}_{i,f}\leftarrow [0,1/\sqrt d] $ -
迭代 $ T $ 步,每一步的过程为:
-
随机从 $ \mathbb S $ 中采样一个样本 $ (\mathbf{\vec x},y) $
-
计算 $ \kappa $ :
$ \kappa = -\frac{y}{1+\exp(y\phi_\text{FFM}(\mathbf{\vec x}))} $ -
计算 $ g_{w_0},G_{w_0} $ ,更新 $ w_0 $
-
遍历所有的项: $ i=1,\cdots,K $ :
-
计算 $ g_{w_i},G_{w_i} $ ,更新 $ w_i $
-
遍历所有的项: $ j=i+1,\cdots,K $
- 计算 $ \mathbf{\vec g}_{v_{i,f}} $
- 遍历所有的维度: $ l=1,\cdots,d $ :计算 $ G_{i,f,l} $ ,并更新 $ v_{i,f,l} $
-
-
-
-
4.3 field 分配
-
大多数数据集的结构是 :
xxxxxxxxxx
11 label feat1:val1 feat2:val2 ...,其中
(feat:value)
表示特征索引及其取值。对于FFM
,我们扩展上述格式为:xxxxxxxxxx
11 label field1:feat1:val1 field2:feat2:val2也就是我们必须为每个特征分配相应的字段。
为某些类型的特征分配字段很容易,但是对于其他一些特征可能比较困难。接下来我们在三种典型类型的特征上讨论这个问题。
-
离散型特征
categorical
:通常对离散型特征进行one-hot
编码,编码后的所有二元特征都属于同一个field
。例如,性别字段:G:G-Male:1
、G:G-Male:0
。 -
数值型特征
numuerical
:数值型特征有两种处理方式:-
不做任何处理,简单的每个特征分配一个
dummy field
。此时 $ F=K $ ,FFM
退化为Poly2
模型。例如论文引用量Cite:Cite:3
,其中分配的字段和特征名相同。 -
数值特征离散化之后,按照离散型特征分配
field
。例如,论文引用量Cite:3:1
,其中3
表示特征名(桶的编号)。论文推荐采用这种方式,缺点是:
- 难以确定合适的离散化方式。如:多少个分桶?桶的边界如何确定?
- 离散化会丢失一些信息。
-
-
离散集合特征
categorical set
(论文中也称作single-field
特征):所有特征都属于同一个field
,此时 $ F=1 $ ,FFM
退化为FM
模型。如
NLP
情感分类任务中,特征就是单词序列。- 如果对整个
sentence
赋一个field
,则没有任何意义,因为此时可能的特征范围是天文数字。 - 如果对每个
word
赋一个field
,则 $ F $ 等于词典大小,计算复杂度 $ O(FKd) $ 无法接受。
- 如果对整个
4.4 实验
-
这里我们首先提供实验配置的细节,然后我们研究超参数的影响。我们发现,和逻辑回归以及
Poly2
不同,FFM
对epoch
数量很敏感,因此我们提出了早停策略。最后我们将FFM
和包括Poly2, FM
在内的其它baseline
进行对比,除了预估准确性之外我们还对比了训练时间。 -
数据集:我们主要考虑来自
Kaggle
比赛的两个数据集Criteo
和Avazu
。对于特征工程,我们主要应用了我们的成功方案,但是移除了复杂的部分。例如,我们在Avazu
数据集的成功方案包含了20
个模型的ensemble
,但是这里我们仅使用最简单的一个。另外,我们使用哈希技巧里生成 $ 10^6 $ 个特征。这两个数据集的统计信息如下:对于这两个数据集,测试集中的标签都是不可用的,所以我们将可用的数据分为训练集和验证集,拆分方式为:对于
Criteo
,最后6040618
行用于验证集;对于Avazu
,最后4218938
行用于验证集。我们用以下术语来表示各个不同的数据集:Va
:上述拆分的验证集。Tr
:从原始训练集中剔除验证集之后,得到的新训练集。TrVa
:原始的训练集。Te
:原始的测试集,其label
未公布,所以我们必须将我们的预测结果提交给评估系统从而获得score
分。为了避免测试集过拟合,竞赛组织者将该数据集分为两个子集:public set
(竞赛期间score
可见)、private set
(竞赛期间score
不可见且只有竞赛结束后score
才公布)。最终排名由private set
决定。
-
配置:所有实验都是在
Linux
工作站上运行,该工作站配置为两个Intel Xeo E6-2620 2.0GHz
处理器、128GB
内存。 -
评估指标:我们考虑
$ \text{logloss} = \frac{1}{m}\sum_{i=1}^m \log(1+\exp(-y_i \phi(\Theta,\mathbf{\vec w}_i))) $logloss
作为评估指标,其中:其中:
- $ m $ 为测试样本数量, $ y_i $ 为测试样本
label
。 - $ \Theta $ 为模型参数, $ \phi(\cdot) $ 根据不同的模型可以为 $ \phi_\text{LM},\phi_\text{Poly2},\phi_\text{FM},\phi_\text{FFM} $ 。
- $ m $ 为测试样本数量, $ y_i $ 为测试样本
-
超参数影响:我们评估了超参数 $ d $ (
representation
向量维度)、 $ \lambda $ (正则化项系数)、 $ \eta $ (学习率)的影响。所有结果都是在验证集上得到。为了加快实验,我们从Criteo
新训练集中随机抽取10%
样本作为训练集、从Criteo
验证集中随机选择10%
样本作为测试集。-
超参数 $ d $ 的实验效果如下图所示。第一列为不同 $ d $ 的取值(论文中用
k
这个不同的符号),第二列为平均每个epoch
的计算时间,第三列为验证集的logloss
。可以看到:不同的
representation
向量维度,对模型的预测能力影响不大,但是对计算代价影响较大。所以在FFM
中,通常选择一个较小的 $ d $ 值。注意,由于采用了
SSE
指令集,所以 $ d=1,2,3 $ 时每个epoch
计算时间几乎相同。 -
超参数 $ \lambda $ 的实验效果如下图所示。可以看到:
- 如果正则化系数太小,则模型太复杂,容易陷入过拟合。
- 如果正则化系数太大,则模型太简单,容易陷入欠拟合。
一个合适的正则化系数不大不小,需要精心挑选。
-
学习率 $ \eta $ 的实验效果如下图所示:可以看到:
- 如果学习率较小,虽然模型可以获得一个较好的性能,但是收敛速度很慢。
- 如果学习率较大,则目标函数很快下降,但是目标函数不会收敛到一个较低的水平。
-
-
早停:
FFM
对于训练epoch
次数很敏感。为解决该问题,我们对FFM
执行早停策略:- 首先将数据集拆分为训练集、验证集。
- 在通过训练集训练的每个
epoch
结束时,计算验证集的logloss
。 - 如果验证集的
logloss
上升,则记录当前已训练的epoch
次数 $ \text{epoch}_{best} $ ,并停止当前训练。 - 最后用全量训练数据重新训练模型 $ \text{epoch}_{best} $ 个
epoch
。
该方案存在一个潜在的缺点:
logloss
对epoch
次数高度敏感,以及验证集上的最佳epoch
不一定是测试集上的最佳epoch
。因此早停得到的模型无法保证在测试集上取得最小的logloss
。我们也尝试了其它的避免过拟合的方法,比如
lazy update
和ALS-based
优化,但是这些方法效果都不如早停策略。 -
我们在
Criteo
和Avazu
数据集上比较了不同算法、不同优化方式、不同超参数的结果。我们选择了四种算法,包括
LM
模型(线性模型)、POLY2
模型、FM
模型、FFM
模型。我们选择了三种优化算法,包括SG
(随机梯度下降)、CD
(坐标下降)、Newton
(牛顿法)、ALS
。另外我们还选择了不同超参数。LIBFM
支持SG,ALS,MCMC
三种优化算法,但是我们发现ALS
效果最好。因此这里LIBFM
使用ALS
优化算法。FM
、FFM
都是基于SG
优化算法来实现的,同时对于SG
优化算法采取早停策略。- 对于非
SG
优化算法,停止条件由各算法给出合适的停止条件。
从实验结果可以看到:
FFM
模型效果最好,但是其训练时间要比LM
和FM
更长。LM
效果比其它模型都差,但是它的训练要快得多。FM
是一种较好的平衡了预测效果和训练速度的模型,这就是效果和速度的平衡。POLY2
比所有模型都慢,因为其计算代价太大。- 从两种
FM
的优化方法可见,SG
要比ALS
优化算法训练得快得多。 - 逻辑回归是凸优化问题,理论上
LM
和POLY2
的不同优化算法应该收敛到同一个点,但实验表明并非如此。原因是:我们并没有设置合适的停止条件,这使得训练过程并没有到达目标函数极值点就提前终止了。
-
我们比较了其它数据集上不同模型的表现。其中:
KDD2010-bridge,KDD2012,adult
数据集包含数值特征和离散特征,我们将数值特征执行了离散化。cod-rna,ijcnn
数据集仅仅包含数值特征 ,我们将数值特征进行两种处理从而形成对比:将数值特征离散化、每个数值特征作为一个field
(称作dummy fields
)。phishing
数据集仅仅包含离散特征。
实验结果表明:
-
FFM
模型几乎在所有数据集上都占优。这些数据集的特点是:- 大多数特征都是离散的。
- 经过
one-hot
编码之后大多数特征都是稀疏的。
-
在
phishing,adult
数据集上FFM
几乎没有优势。原因可能是:这两个数据集不是稀疏的,导致FFM,FM,POLY2
这几个模型都具有几乎相同的表现。 -
在
adult
数据集上LM
的表现和FFM,FM,POLY2
几乎完全相同,这表明在该数据集上特征交叉几乎没有起到什么作用。 -
在
dummy fields
的两个数据集上FFM
没有优势,说明field
不包含任何有用的信息。 -
在数值特征离散化之后,尽管
FFM
比FM
更有优势,但还是不如使用原始数值特征的FM
模型。这说明数值特征的离散化会丢失一些信息。
-
从实验中总结的
FFM
应用场景:- 数据集包含离散特征,且这些离散特征经过
one-hot
编码。 - 经过编码后的数据集应该足够稀疏,否则
FFM
无法获取较大收益(相对于FM
)。 - 不应该在连续特征的数据集上应用
FFM
,此时最好使用FM
。
- 数据集包含离散特征,且这些离散特征经过
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论