常用知识点
1 介绍下什么是Word2vec
在介绍Word2Vec之前需要先理解Word Embedding,它是将无法直接计算的、非结构化的单词转化为可计算的、结构化的数据-向量;
那么什么是Word2Vec呢?
Word2vec 是 Word Embedding 的方法之一。他是 2013 年由谷歌的 Mikolov 提出了一套新的词嵌入方法;
Word2Vec有两种训练模式:CBOW(Continuous Bag-of-Words Model)和Skip-gram (Continuous Skip-gram Model);
CBOW:根据上下文信息预测当前值(单词)
Skip-gram :根据当前值(单词)预测上下文信息
2 Word2vec负采样如何实现?
现在我们看下Word2vec如何通过Negative Sampling负采样方法得到neg个负例;如果词汇表的大小为V,那么我们就将一段长度为1的线段分成V份,每份对应词汇表中的一个词。当然每个词对应的线段长度是不一样的,高频词对应的线段长,低频词对应的线段短。每个词w的线段长度由下式决定:
在word2vec中,分子和分母都取了3/4次幂如下:
在采样前,我们将这段长度为1的线段划分成M等份,这里M>>V,这样可以保证每个词对应的线段都会划分成对应的小块。而M份中的每一份都会落在某一个词对应的线段上。在采样的时候,我们只需要从M个位置中采样出neg个位置就行,此时采样到的每一个位置对应到的线段所属的词就是我们的负例词。
在word2vec中,M取值默认为10^8。
3 Widedeep 为什么要分wide deep,好处?
Wide & Deep 设计了一种融合浅层(wide)模型和深层(deep)模型进行联合训练的框架。
Wide部分:通过线性模型 + 特征交叉,使模型具有“记忆能力(Memorization)”,通常非常有效、可解释较强。但其”泛化能力(Generalization)“需要更多的人工特征工程。
Deep部分:只需要少量的特征工程,深度神经网络(DNN)通过对稀疏特征进行学习,可以较好地推广到训练样本中未出现过的特征组合,使模型具有“泛化能力”。但当user-item交互矩阵稀疏且高阶时,例如特定偏好的用户和小众产品,容易出现过拟合,导致推荐的item相关性差。
好处:结合Wide与Deep模型各自的优势:Memorization 与 Generalization,Wide & Deep模型比各自模型更加有效。
4 Wide&Deep的Deep侧具体实现
deep部分是Embedding+MLP前馈神经网络。高维离散特征会首先被转为低维稠密向量,通常被称为Embedding vectors,Embedding 被随机初始化,并根据最终的loss来反向训练更新。隐藏层为全连接网络:
其中,
分别为第l层的输入、偏置项、参数项与激活函数。
Deep部分的主要作用是让模型具有“泛化能力”。“泛化能力”可以被理解为模型传递特征的相关性,以及发掘稀疏甚至从未出现过的稀有特征与最终标签相关性的能力。深度神经网络通过特征的多次自动组合,可以深度发掘数据中潜在的模式,即使是非常稀疏的特征向量输入,也能得到较稳定平滑的推荐概率。
5 DeepFM为了解决什么问题?
在处理CTR预估问题中,传统的方法有一个共同的缺点:对于低阶的组合特征,学习到的比较少;但是低阶特征对于CTR也非常重要,于是Google为了同时学习低阶和高阶组合特征,提出了 Wide&Deep 模型:混合了一个 线性模型(Wide part)和 Deep 模型 (Deep part);这两部分模型需要不同的输入,其中Wide part部分的输入仍然依赖人工特征工程;
此时模型存在两个问题:
- 偏向于提取低阶或者高阶的组合特征,不能同时提取这两种类型的特征;
- 需要专业的领域知识来做特征工程;
DeepFM 在 Wide&Deep 的基础上进行改进,成功解决了上述这两个问题,并做了一些优化;
优点如下:
- 不需要预训练FM得到隐向量;
- 不需要人工特征工程;
- 能同时学习低阶和高阶的组合特征;
FM模块和Deep 模块共享 Feature Embedding 部分,可以更快、更精确的训练;
Q1: 线下提升线上效果不好。
A: 原因是多样的,主要原因在于样本与评估指标、环境。
在样本上,线下样本为历史数据,而线上样本难免出现新数据,同理还有新特征等,如线上时间特征在线下是无法训练的。
在评估指标上表现为评估指标不对等,线下评估指标需要更贴近业务才能更好地表示真实推荐结果(或线上指标)。例如AUC表示的是所有user对所有item的评估指标,而线上更多需要单个user对其所有item的评估作为推荐结果,这时可以采用GAUC,即对每个user的AUC做量权求和作为评估指标。
另外即是线下训练很难还原线上环境。可以理解为线下训练无法捕获到全部的线上特征。
Q2: XGBoost和GBDT是什么?有什么区别?
A: GBDT:关键点在于Gradient和Boosting和DT(回归树)。在BDT中:Boosting——阶梯状训练,每棵树学习的是之前的树学习结果的残差。通过多棵树的预测结果求和,作为最终预测结果。而在GBDT中,采用损失函数梯度作为每棵树需要学习的预测结果(y)。
为什么使用损失函数的梯度?——基于残差的模型无法处理分类模型(类别数据无法取残差);基于损失函数梯度的模型,由于梯度是优化方向,那么就具备和残差同样的性质(使模型输出结果向着正确方向靠近),且损失函数类型多,可以根据模型业务选择合适的损失函数。实际上,BDT是GBDT的特例。
GBDT容易过拟合,故在推荐中采用GBDT+LR的模型,使GBDT的输出结果作为LR的特征输入。
关于回归树:叶子节点输出值常见采用的是当前叶子节点划分领域的值的均值,划分方式同分类树一样,根据特征划分计算当前指标(决策树的划分指标),选择最佳的特征作为当前划分。在推荐的GBDT+LR模型中,训练的是回归树,输出的是表示每棵回归树落到的节点的特征向量([1,0,0,...,0,1,0,0])。
GBDT是一种机器学习算法,而XGBoost是GBDT最广为人知的工程实现。XGB相对于GBDT,对实现方式更为详尽,能够得到更准确的结果。在实现方式上,相对于GBDT在损失函数构造上添加了二阶泰勒展开和正则项,并根据最小化损失函数构造了决策树的划分标准。
XGB相对于GBDT有以下优化:加入正则项(与叶子节点个数与节点输出权值有关)防止过拟合;采用二阶泰勒展开,相对于GBDT的一阶导数(梯度)更为准确;支持多种基分类器,不限于GBDT的CART决策树;XGB有缺失值处理方案,能够自动学习缺失值处理策略;Shrinkage(衰减)策略,每次迭代的新模型乘以一个衰减率降低优化速度,避免过拟合;借鉴了随机森林(RF)的两种抽样策略;并行处理。
Q3: 偏差与方差。延伸知识(集成学习的三种方式: Bagging、Boosting、Stacking)。
A: 偏差表示模型预测结果的期望与真实结果的区别。方差表示模型预测结果偏离真实预测结果的程度。
偏差小方差大的模型为强模型;偏差大方差小的模型为弱模型。强模型和弱模型是集成学习模型的基模型。
Bagging的基模型是强模型,常用投票法基于所有基模型预测结果输出最终结果,比较常见是的对每个基模型预测赋予相同的权重。Bagging能有效降低模型方差。
Boosting训练过程为阶梯状,基模型训练时有序的,每个基模型都会基于前一个基模型进行训练,使用的是弱模型。
Stacking将基模型的输出结果作为新的特征进行预测。使用的是强模型。
Q4: 随机森林是什么?
A: 随机森林是一种Bagging集成模型,基模型是决策树。随机森林的随机体现在:随机选择样本(Bootstrap自助法,有放回抽样),随机选择特征(每颗树使用不同的特征子集)。相当于综合了一群有偏见的分析师做决策。
随机森林的优点在于:算法表现优秀,易于并行,且在处理高维度数据上不需要做特征筛选。
Q5: Word2Vec常见的加速训练的方式有哪些?
A: 对高频词抽样,对于部分高频词(如“the”),很难对语义贡献有针对意义的信息,而学习高频词的样本又远远超过了训练该高频词emb所需的样本数。故通过“抽样”的方式,对于每个词都有一定概率被删除掉,而删除的概率与该词的词频有关。
负采样提高训练效率。在Word2Vec训练中,word词表(ont-hot向量)中每个训练样本会更新所有权重,如输出样本数据为[0,0,...,0,1,...,0,0],其中1代表正样本,而0代表其他的所有的负样本。此时对负样本的0进行筛选再反向传播。假设词表大小为1W,而负样本集合为10,则计算复杂度至少缩减到千分之一。出现频次高的样本更容易被选为负样本。
Hierarchical(层级) SoftMax。预测的输出词采用哈夫曼树编码表示(从[0,0,..,1,..0,0]转化为00..1的形式),词频高的位于哈夫曼树浅层,词频低的位于深层。此时输出层由原来的V分类(V代表词典大小,V分类指将隐层输出的值通过Softmax转化为预测的one-hot词向量结果)转为了logV次的二分类。该方法没有明显优于负采样方法,故较少采用。
Q6: LightGBM是什么?
A: LightGBM是一个基于决策树的Boosting(实现GBDT算法)的框架,对比于XGBoost具有更快的训练效率与更低的内存消耗。
Q7: AdaBoost思想?
A: Adaboost思想是对分类错误的样本提高权重,且在模型融合时,错误率低的模型具有更高权重。
Q8: 损失函数无法求导该怎么样进行优化?
A: 使用次梯度。
Q9: 召回模型中,评价指标怎么设定?
A: 召回的好坏决定模型的上限,召回的指标主要分为两部分:单路召回的效果;单路召回对剩余整体的影响。评价指标有:
1. 对召回集的直接评价指标:召回率、精确率和综合两者的F1。
2. 熵:Entropy=∑pi*log(pi)。pi表示类别i在召回集出现的次数,熵越大,代表该路召回的类别越多(多样性)。
3. 召回集和精确率这类指标会受到user-item交互的频数影响,可以使用F1 score作为替代(主要为了解决Recall和Precision受到N(TopN)的影响),另一方面,可以在评价召回模型时,对于不同的用户设置根据交互频数设置不同的N。
4. 另外,可以对于不同位置的召回集与未召回集,取少量数据进行排序模型的训练,使用精排评价指标判断该召回是否有明显优势。
Q10: 多路召回的作用?
A: 交叉与互补,满足用户兴趣多元化。
Q11: Skip-grim和Cbow的区别?Skip-grim优势在哪?
A: 使用中心词预测上下文与使用上下文预测中心词的区别。使用Sg的训练更为细致,从BP的角度看待,Sg的输出节点为Cbow的K倍,则在反向传播时的计算次数时Cbow的K倍(Cbow原理上对上下文向量做了Average)。对于数据量较少或生僻词较多的时候,Sg能展现出明显优势。简单而言,Cbow训练速度更快,但Skip-grim更为准确,实际上论文中也指出了Sg效果更好。
Q12: FTRL是什么?
A: FTRL是一种参数更新的优化算法,该算法保证了模型的稀疏度与精度。在推荐场景中,FTRL常用与LR模型的实时更新上。FTRL的提出是为了解决:在实时更新中,单个(少量)样本对模型的更新容易使模型丧失稀疏性(LR+L1正则化很难解决这个问题)。FTRL的本质是参数截取,即某一条件下直接使权重参数置为0。
Q13: 梯度下降方法。
A: 从普通梯度下降来讲,采用学习率*梯度的方式进行权重的增量更新,很容易使模型优化停留在局部最优解。于是产生了基于动量的梯度下降,基本思路是将历史梯度值添加到增量更新的计算中,使模型在陷入局部最优解时更有可能跳出来。
自适应梯度算法(Adagrad)的梯度更新公式表达的是,对于梯度更新得越多,将要更新的越少。这使稀疏的特征将会得到更多机会进行更新。
RMSProp的提出解决了Adagrad更新缓慢的问题,Adagrad的公式使得梯度更新越多,梯度更新的就更慢。
Adam(自适应矩估计)兼具RMSProp的优点。Adam从动量获得了模型更新速度(增量更新更大)和跳脱局部最优的能力,从RMSProp获得了不同方向梯度的适应能力。Adam是近年来深度模型的首选。
Q14: 推荐系统中常见的Embedding方法有哪些?
A: word2vec是最经典的词向量embedding方式,基于word2vec思想,item2vec使用item向量代替词向量。这类方法无法处理网络化的数据,于是出现了大量Graph Embedding技术。
DeepWalk使用用户行为序列构建物品关系图,然后通过随机游走生成新的序列数据,继而通过word2vec训练。DeepWalk可以看做序列embedding到Graph embedding的过度方法。
Node2vec核心思想在于同质性与结构性的权衡。同质性指的图中距离近的节点应该尽量相似(倾向于DFS),结构性指图中节点所处结构位置相似的应该尽量相似(倾向于BFS)。Node2vec设置了跳转概率,使当前游走过程可能朝着更深的方向(同质性),或是返回之前的方向(结构性)。
EGES(基于边信息的增强图Embedding)引入边信息作为物品embedding的补充信息,边信息可以是基于知识图谱获得的信息(这类信息包括特征信息)。EGES的方法是对Item及其特征一起进行embedding建模,最终得到的单个Item的embedding向量是该item及其特征的加权平均。EGES对缺少历史数据的Item更为亲切。
Q15: 简述Embedding与推荐系统的结合。
A:
- 高维稀疏向量向低维稠密向量的转换;
- 预训练Embedding向量作为网络输入(使embedding向量携带更多信息;提高网络计算效率);
- 基于embedding相似度的推荐(如Youtube推荐召回层直接利用了Embedding相似度进行候选Item召回,而值得品味的一点是,Youtube对于单个用户的召回,采用了该用户的embedding与物品embedding计算相似度从而召回物品候选集,这点是很有意思的一个trick)。
Q16: 介绍FM和FFM。
A: 首先需要避免的一个误区:FM是通过embedding向量的内积构造二阶特征。诚然,embedding向量构造二阶特征确实是一种有效的方式,与FM也有相似点。但是FM提出的时候,基于embedding的推荐还没有应用于推荐系统中。
FM是构造二阶交叉特征的一种算法。FM的提出是因为,传统的构造二阶特征的方式,使原本就稀疏的特征变得更为稀疏(例如篮球and女的群体相对于篮球群体而言,样本更少),且计算参数量级别由n提升到了n^2(能表示n个特征的one-hot向量维度为n,他们的二阶交叉特征有n^2个)。
FM的核心在于引入了隐向量来控制需要更新的权重参数量,形式如下:假设一共有n个一阶特征,则二阶特征的LR模型有n^2的参数量(w),若使每个参数为两个向量的内积,则使用n×k个权重即可计算得到所有n^2的参数。这n×k个权重被称为隐权重向量(W)。即wi,j=Wi · Wj。对W进行参数更新可以参考矩阵分解。
FM将n^2级别的参数量减少到nk,但丢失了对某些具体特征组合的精确记忆能力。另一方面,从参数更新的方式来看,POLY2只有组合特征同时出现在一个样本时,才能学习到对应的权重。而在FM中,通过隐向量进行更新,可以学习到组合特征分别的权重,这对于稀疏数据是友好的。
而FFM相对于FM,引入了特征域的概念。首先在业务上,我们需要明白特征域是什么:当特征为男、女时,特征域是性别;当学历为本科、硕士、博士时,特征域是学历。假设特征域个数为f,则FFM中每个隐向量维度由原来的1×k变为f×k,每次进行两个隐向量内积而得到权重时,内积双方的特征所在的特征域同样得到了关注。这显然是更合理的,因为谈到特征是离不开特征域的,FM的做法反而将特征域和特征割裂开了。但FFM增加了计算复杂度。
Q17: 介绍FNN。
A: FNN采用FM的权重参数初始化输入层到embedding层之间的权重。这是属于预训练,相当于在训练之前就引入了有价值的先验信息。假设在FM中隐权重向量维度为k,则连接输入层的每个神经元(也是单个特征,相当于one-hot向量的每个单值)的权重初始化方案为:[该特征在FM中的一阶权重(维度为1),该特征在FM中的二阶隐权重(维度为k)]。可以很自然地发现,FNN模型中每个特征域维度决定于FM。
Q18: 关于深度学习推荐模型简介。
A:
Rulcy:关于深度推荐模型的简介15 赞同 · 0 评论文章
Q19: RNN、LSTM、GRU、Transformer介绍。
A:
Rulcy:经典序列模型简介(RNN、Seq2Seq、LSTM、GRU、Transformer)9 赞同 · 3 评论文章
Q20: 特征筛选方法。
A: 过滤法(Filter):通过发散性(单个特征——方差、熵等)或相关性(特征之间——协方差、皮尔逊相关系数、卡方验证)。
包装法(Wrapper):根据不同特征子集的预测结果进行特征选择。
嵌入法(Embedding):根据模型/网络系数进行特征选择。典型的如LR+L1正则的特征筛选。
小trick:使用一个属性去预测另外一个属性,如果准确率高,代表它们相关性高。
Q21: 推荐系统的特征工程有哪些?怎么做?
A: 数据、模型、算力共同决定效果,而数据部分决定了效果上限,模型和算力只是在逼近上限。推荐系统的特征工程属于数据部分,目的是为了保留有用的特征,摒弃无用的特征。常用的特征类别有:
- 固有属性特征。可以是用户/商家自行设置的标签,或是由用户给物品打上的标签等。
- 行为特征。这类数据多为序列型数据,多用以序列建模。或是取历史行为数据的平均embedding或DIN的方式处理(embedding求权)。
- 社交特征。关于社交关系的特征,可以建立关系图并应用图embedding技术;或是作为用户的一个固有属性进行预测。
- 内容特征(多媒体特征)。图片、视频、文字等信息。
- 上下文特征(场景特征)。此类特征保留推荐行为发生的场景信息,包括时间、空间、特定事件等。
- 统计特征。通过统计方法计算出来的特征。
- 高阶组合特征。
不同类别的特征输入可以作为多路召回的策略之一。
常见的基本特征类型有连续型特征和类别(离散)型特征。对于它们的处理方式通常有:
- 连续型特征:归一化、离散化、加非线性函数处理(如log、幂等,主要是为了使特征数值更适合模型输入)。
- 类别型特征:one-hot、multi-hot等。
Q22: Transformer细节:Scaled Dot-Product Attention为什么要缩放?(两点)Position Embedding是如何实现的?
A: Scaled——论文中的解释为,点积的结果可能会比较大,将softmax函数push到一个梯度很小的区域。Scaled通过对向量中数值的同程度放缩,缓解这种现象。可以如此进行理解,如传入softmax层的向量为[0.27,0.73]时,softmax能起到好的效果,而放大100倍,softmax输出结果近似能达到[0,1]的程度,使梯度传播缓慢。
另一方面,需要了解为什么scaled采用根号d(向量维度)进行放缩:对于QK的内积(1×D · D×1)而言,假设QK中各个分量都服从均值方差~(0,1),则内积结果服从(0,D)。方差越大,即说明点积结果可能取到更大/小的概率。故采用Scaled操作将方差控制在1。
可以扩展的是,常规的Attention形式有Add和Mul两种。简化来看,Add将两个向量相加并通过一个隐层输出权重,Mul将两个向量通过内积得到相似度值,并使用Softmax层输出权重。Mul相较于Add实现更为简单快捷,但发现随着向量维度D增长,Mul的性能渐渐不如Add了,此时认为是较大的内积值将Softmax层推向了梯度平缓区,而Add由于其性质,天然的不需要Scaled的存在。
Position Embedding——存在的原因在于Self-attention的形式和常规神经网络是同一性质的,即平等地看待网络中的所有输入,这不同于串行训练的循环网络,会使序列信息中宝贵的位置信息丢失。Transformer中引入的位置编码为正弦位置编码,并将不同的Position Embedding加到不同位置的向量中。正弦位置编码在为每个向量引入不同的绝对位置编码的同时,任意两个向量能够很好地获取相对位置的信息(原文提到过,PE(pos+k)可以表示成PE(pos)的线性函数)。
Q23: 如何解决数据不平衡?
A: 在数据不平衡的前提下训练,很容易使模型预测结果总偏向于数据量多的一方,从而产生没有实际收益的结果。解决数据不平衡有以下几种方案:
- 重采样(包括欠采样和过采样)。举例说明,对数据进行聚类,对大的簇进行随机欠采样,对小的簇进行数据生成。缺点:欠采样可能导致数据信息损失,使模型欠拟合;过采样需要生成较少类别的数据或使用重复数据,导致过拟合。合成新数据和过采样地理念是相似的,这种方法有可能造成数据信息不准确。
- 集成模型。对多类样本进行欠采样,并与所有的少类样本共同作为基学习器的数据。
- 选择对于数据不平衡相对不敏感的模型,如树模型。
- 将有监督学习问题转化为一个无监督学习问题,如异常检测。
- 阈值调整。例如在二分类中,将类别分类的阈值从0.5转为较少类别/(较大类别+较少类别)。个人认为,调整阈值的方法需要对损失函数进行调整,且这种方案可以理解成”改变权重”,即对与少数类分类错误的惩罚加重。
Q24: 假设检验的两类错误。
A: 弃真(第一类错误)、取伪(第二类错误)。常用避免两类错误的方法是增大样本量。
Q25: 为什么快排比堆排快?
A: 从局部性原理解释:读取数据的应该遵循的两个原则——不久之前读取过的数据在之后可能会被读取;读取一个数据,它周围存储地址的数据可能会被找到。堆排序主要流程是建堆的过程,堆排常规使用的是完全二叉树,每次在单个元素上升的过程比较的是x与2x(或2x+1),由于数据之间相隔较远,会导致经常在cache中找不到缓存的数据。
Q26: RMSE、MSE、MAE。
A: MSE——均方误差,对量纲敏感(万*万会到亿级别),多用于损失函数。RMSE——均方根误差,克服了MSE的量纲问题,多用于评价指标。MAE——平均绝对误差,多用于评价指标。
需要注意,这里说的多用于损失函数/评价指标并不绝对,只是大多数研究中是这么做的。
MSE用于损失函数的优点在于其平方的形式,使误差更大的模型被给予更高的惩罚,这有利于快速收敛。缺点在于这种“更高的惩罚”是相对的,如果模型训练出现了离群点,那么训练过程会更偏向于离群点,使得模型整体性能下降。
MAE相较于MSE,没有平方项的作用,对所有训练数据惩罚力度相同。但反之,MAE对所有数据的一视同仁,使基于MAE的模型学习速度慢,甚至可能由于梯度值小,使模型陷入局部最优。另外,MAE在0处不可导。
RMSE更多的是作为评价指标与MAE相比较而言的。RMSE由于其平方的性质,如果评估集中较大误差的数据会更大程度的提升RMSE值(简单来说,RMSE更容易受到方差的影响)。所以常规情况下,RMSE值是大于MAE的。在评测中,更小的RMSE更具备代表意义,这说明在评估集中相对较大的误差也是比较小的。
Q27: 双塔模型的应用。
A: 说到双塔模型不得不谈DSSM模型。DSSM模型用于解决NLP的语义匹配任务,后被引入到推荐领域,成为早期的双塔模型代表。双塔模型主要的理念是,将user与item分别利用一个网络进行建模,在网络的最后计算相似度/通过隐层输出预测结果值,其模型结构像两座高塔。双塔模型在工业界应用广泛,在线下训练完成后,将user与item的embedding存入内存数据库中,在线上推断时,直接拿出缓存的embedding进行简单的计算(相似度)即可。双塔模型的不足在于只在最后阶段有着user与item的交互(特征交叉程度不足,只在user/item内部域才存在特征交叉)。2019年谷歌提出的双塔模型具有较大的工业价值,有时间可以自行看看。
Q28: XGBoost如果损失函数没有二阶导,该怎么办?
A: 使用次导数或退化到使用一阶导。
Q29: AUC是如何实现的,它对正负样本采样是否敏感?
A: 在弄懂AUC之前,需要知道混淆矩阵。混淆矩阵核心:TP、TN、FP、FN即真伪阴阳。由此引出了真阳率和伪样率——真阳率(TPRate):正样本被预测为正样本的概率。伪阳率(FPRate):负样本被预测为正样本的概率。利用TPRate和FPRate可以画出ROC曲线。ROC曲线下面积为AUC under ROC,模型有效时,其值在0.5~1之间,越大越好。
AUC同时考虑了正负样本,且其期望目标在于正样本因为准确而得的分(TPRate)大于负样本因为不准扣的分(FPRate)。
同时需要注意,AUC(Area Under Curve)并不特指ROC曲线下的面积,只是因为AUC under ROC最为常见被默认了。
Q30: Batch Normalization。
A: BN是什么——简单理解就是对前一层神经元输出以某种方案进行归一化与再放缩,再输入到下一层网络中。实际上BN在操作上就是十分简单,但却很有效。
Normalization为什么产生——Internal Covariate Shift(ICS),这个概念指神经网络中层之间由于相互作用,神经网络中任意两层的数据分布都保持一定的非线性关系(hi = g(hj))。这是神经网络的一个基本的性质,但这一性质会导致:浅层网络饱和(反向传播中无法有效进行浅层训练,实际上是由于梯度消失引起的)、深层网络隐层输入振荡(输入有细微的变化时,深层网络可能震荡激烈)。
BN怎么做——1.取Batch。2.计算Batch内均值方差。3.根据均值方差对Batch内神经元规范化。4.再放缩。
Batch Normalization 计算过程
为什么要再放缩——避免因为强行规范化使模型丧失了信息,再放缩是在原分布与归一化分布之间的折中。当再放缩的权重为Batch计算的均值与方差(标准差)时,相当于维持原分布。
Normalization为什么有效——
1. 层层之间的一定程度的解耦。其一是使每层保持在了一个相对稳定的分布。其二使Sigmoid、Tanh等激活函数的偏微分对于梯度反向传播影响更小(保持在了导数非饱和区),缓解了梯度消失。
2. 使模型对网络中的参数不再敏感。对于Norm操作而言,假设W=aW’,显然Norm(W)=Norm(W’)。对于以下两个公式,对x进行微分进行的是链式传播中隐层之间的反向传播累乘因子,对w进行微分进行的是计算对于当前层W的更新梯度值(这部分理解对BP熟悉就不难)。
对x取偏置代表神经元更新
对W取偏置代表链式反向传播
这两个公式使得:1)参数权重的伸缩变化不会影响反向传播,缓解了反向传播中权重过大/过小引发的梯度爆炸/消失。(权重初始化更简单)2)权重值越大,梯度就越小,参数变化趋于稳定,起到了一定的正则化作用。(自适应的梯度下降值,使学习率设定更简单)
3. BN对mini-batch随机的选取,使计算的均值和方差有区别,相当于引入噪声,起到了正则化作用。
BN和LN(Layer Normalization)——BN选取了一批mini-batch计算均值和方差,进行归一化;而LN是对单层神经元(单个样本的所有维度)进行归一化。抽象理解可以是BN为纵向归一化,LN横向。BN实现的放缩最后使不同的神经元被Norm到不同区间,且LN会强制使它们都被Norm到同一个区间,这更可能损失模型的表达能力。相对的,LN不需要保存mini-batch的均值方差,省了空间,且适用范围比BN大。
Q31: 推荐模型——LS-PLM基于机器学习算法的推荐。(可供扩展:说说你知道的推荐模型)
A: LS-PLM(大规模分段线性模型)又称MLR(混合逻辑回归),阿里爸爸曾经的主流模型。思想是先对样本进行聚类,在每个聚类基础上分别建立LR模型进行预测。对于LS-PLM模型的运行机制对于以下公式理解就不难。
LS-PLM预测模型(输出为y)
其中μ可以代表样本离聚类中心的距离,通过softmax函数输出了一组权重,每个权重乘以对应的聚类簇的LR模型。可以认为LS-PLM是每个聚类簇建立一个LR模型,以样本点与聚类中心的距离作为attetion权重,LR预测值作为value并乘以权重进行预测。
很显然LR对于非线性的数据拟合能力有限,通过聚类找到多个分片分别进行LR,能有效提高预测能力。
Q32: 推荐模型——Airbnb基于Embedding的实时搜索推荐系统。(一种经典的embedding相似度召回模型)
A: 相似度的计算进行物品搜索。Airbnb应用场景是租房中介平台,主要特点在于用户兴趣的短期和长期建模。以下介绍该推荐系统特有的工程性质:
一.基于短期兴趣的房源Embedding:利用session序列(包含浏览与点击信息),采用了Word2Vec建立房源embedding。该方案基本上同word2vec相同,巧妙之处在于目标函数的构造上。基于常规的负样本降采样的word2vec目标函数,该方案:1.考虑将最终预定房源与滑动窗口中心房源关系,作为正样本引入到目标函数中。2.考虑滑动窗口中心房源与该房源同类房源的关系,作为负样本引入到目标函数中。该方案引导我们根据实际情况构造更优的目标函数。
二.基于长期兴趣的房源和用户Embedding:利用session(浏览-点击)建模无法获取到用户长期兴趣,故该推荐系统采用了用户预订序列(用户较长时间才有一次预订行为)作为长期兴趣建模。遗憾的是,预订序列数据稀疏,很难直接进行建模。此处将房源id和用户id采用它们的属性向量表示,相当于引入了额外信息,并一定程度克服了数据稀疏。在训练时,使它们在同一向量空间训练,故得到的用户和房源的embedding可以直接利用相似度进行适配预测。
三.利用用户和房源embedding相似度固然可以得到推荐结果,但Airbnb并没有采用这种方案。Airbnb将候选房源与用户点击房源、忽略房源、用户属性、用户收藏房源等等的相似度作为新构造的特征,输入到模型中进行预测。该方案类似于一个Stacking的集成模式。
综上所述,Airbnb带给我们的工程收获是:1.如何从业务的角度构造目标函数/评价指标。2.如何处理稀疏序列数据。3.利用单个word2vec建模如何获取用户与项目之间的语义相似性。(使用户与项目之间的embedding相似度可以作为推荐结果)4.如何利用基于embedding的相似度构造更具备可解释性的特征。
Q33: 如何解决推荐系统重复推荐用户已经处理过的item的问题?
A: 这是一个去重的问题,导致重复推荐主要有两种情况:1)物料相同。这种情况下有可能是重复推荐同一个id的item导致,或是同样的内容由不同的来源发布;2)物料近似。这是由于两个item都在讲述类似的事情导致的。
在物料id相同的情况下,一般可以根据用户的曝光信息在召回阶段做过滤(如对召回的item进行过滤),或是在后端对item过滤,最差的情况可以用客户端过滤做兜底。
对于物料id不同物料内容相同的情况下,需要给物料映射为一个值,利用该值进行去重。对于常规的生搬、盗用,这种方案是有效的。但对于有二次创作行为的物料来说,识别这种行为较为困难,可以归结为物料相似情况。
当物料相似的情况下,对于强相似物料,可以直接采取去重措施;对于较强相似物料,可以考虑根据物料主题在排序阶段做打散,避免短时间内出现推荐扎堆现象。另外,可以通过用户的负反馈降低同类推荐可能性(如B站屏蔽理由:重复内容)。
Q34: 推荐系统召回阶段如何实现热门item的打压?(推荐中的“哈利波特”效应)
A: 在召回的排序中,由于热门Item的多数来源于用户点击过,item+主要都是热门item,会使模型一定程度上丧失个性化。解决方案主要是在召回阶段控制选择正负样本的概率(对热门的惩罚):
1. 生成Item+时,根据热门程度对正样本进行打压。
2. 生成Item-时,热门程度更高的item更有可能被选定为负样本(hard negative)。
一个简单的方式是对表示热门程度特征值取对数(叉烧大佬提供),对越高频的样本打击力度越大,且打击后热门item流行度特征仍然是优于冷门item的。
另外是否需要对热门进行打压是根据业务来的,实际上在流量至上的年代,有些应用不打压热门,这样更容易制造话题提高热度,带来的负面影响就是用户个性化被忽视了。
另外,在排序过程中,合理的用户画像能够帮助模型打压不合用户喜好的热门item。
Q35: 关于推荐系统的召回模型。
A: 召回模型在策略上是多优于好的,召回模型多半较简单,故近年来推荐系统的模型研究里排序模型远远多于召回模型,早期的一些基于协同过滤的召回甚至都能取得很好的效果。关于这个问题我更愿意推荐一个大佬的文章。以下是原文:
工业界推荐系统中有哪些召回策略?755 赞同 · 8 评论回答
文章主题:从NFEP的视角理解召回。
Near——定义向量距离近,取决于不同的召回方式。
Far——定义向量距离远,取决于负样本的采样方式。
Embedding——如何生成embedding,这被归结到用户/物品画像的问题。
Pairwise-loss——召回阶段无法追求预测值与标签值的绝对准确性,所以往往采用Pairwise(user,item+,item-)追求排序之间的相对准确性。
Q36: user/item冷启动怎么解决?
A: user冷启动:基于规则的冷启动(如热度、最高评分);基于模型的冷启动(收集必要的用户属性信息进行建模);主动学习方案的冷启动(用户自由选择/反馈);基于迁移学习的冷启动(合理利用其它领域/来源的信息)。
item冷启动:采用随机分发资源获取用户反馈信息;基于重要属性的冷启动(如同一作者/系列等);设置“最新”排序列表获取用户反馈信息。
Q37: Tensorflow与PyTorch的区别。
A: 动态图与静态图。Tensorflow的静态图解释为,在网络训练前网络构建已经完成,静态图的训练更快,但不够灵活(TensorFlow Eager);Pytorch的动态图解释为,不同于Tensorflow写完代码就搭建完了整个静态网络,Pytorch的执行方式类似于解释性语言,边执行代码,边搭建网络,正是这样的实现机制,使得Pytorch可以像Python一样进行调试,非常的友好。(虽然谈到Tensorflow与PyTorch之间的区别,动静之争一定是焦点问题,但实际上现在的框架发展已经使Tensorflow支持动态图了)
Q37.5: 附:前言问题。(调参、Dropout、过拟合)
A:
- 调参经验。Batch-Size较大时梯度下降方向更准确,此时可以设置较大的学习率进行匹配;Batch-Size较小时,模型更注重于个体差异性而非整体性,此时学习率宜较小。关于具体该怎么调参,可以看我之前的文章:Rulcy:《调参侠》
- Dropout怎么输出。在前向传播中,屏蔽的神经元不输出,未屏蔽的神经元根据该层比例对输出进行放大(倍数为该层神经元/未屏蔽神经元)。
- 过拟合解决方案。模型角度:简化模型、L1/L2正则、Dropout与集成、Normalization。数据角度:增加样本量、减少冗余特征、添加噪声。训练角度:早停法、交叉验证。等等。
- 另:欠拟合解决方案。添加更多特征/数据,增加模型复杂度或可解释性,减少正则化力度。
Q38: 分类决策树的指标有哪些?
A: 信息增益(选择一个属性后,信息熵的变化);增益率(信息增益偏向于选择取值多的属性,增益率抑制了这一点);基尼指数(用基尼值定义纯度,在计算方面会快一点)。对于连续值属性,将数值排序后,采用相邻数据的平均值(中心值)作为划分标准,选择最优的划分点。
Q39: 决策树怎么构造?
A: 输入:给定数据(特征,标签)和当前数据的属性集合。
- 为当前输入生成一个结点。
- 当标签全属于同一类别,当前节点标记为叶子节点,属于同一类别。
- 当属性集合为空集/训练集在属性集合中取值相同时,则当前节点标记为叶子节点,标记为当前数据中多数的类别。
- 从数据中选择最优的划分属性。(对于连续值是选择属性的最优划分点)
- 对最优划分属性的每个值生成树分支。
- 在分支树的基础上递归地构造决策树。
Q40: 交叉熵的意义。(为什么要用交叉熵?而不用MSE?)
A: 问题原因:交叉熵作为损失函数意义不明。
解答:一方面,MSE可能引导sigmoid/Softmax进入梯度平缓层,而对于交叉熵损失的求导与激活函数的导数无关。另一方面,交叉熵能让模型尽量拟合真实分布(是从公式进行理解的,详情看公式)。首先抛弃交叉熵这个概念,在拟合时,需要让模型分布M尽量拟合训练数据分布T,在KL散度理解即使最小化KL(T|M),KL散度一般用来衡量两个分布之间的不同。在训练数据T固定的情况下,T的信息熵固定,最小化KL散度即等于最小化交叉熵。
可以根据公式对交叉熵进行理解,交叉熵的目的为,模型输出的分布中,正确的样本被预测为分类正确的可能性尽可能大。
Q41: 协同过滤,优缺点。
A: 协同过滤即是通过(不同用户/物品)合作,实现信息的过滤(即筛选),是一个简单且可解释性强的方案。最常见的协同过滤的方法有UserCF和ItemCF,可以发现早期协同过滤的方法使热门的物品(或用户)具备很强的头部效应,使所有物品都与它有较大的相似度。这揭示了这一方法的天然缺陷,即对于稀疏的数据处理能力弱。
Q42: UserCF、ItemCF,应用场景。
A: UserCF:得到共现矩阵,根据共现矩阵得到所有用户两两之间的相似度,对User i取TopN个相似用户,对这TopN个用户的项目评分取加权平均,作为该用户预测评分结果。
- 优点:简单易用,复合直觉“兴趣相似的人喜欢的东西相似”。
- 缺点:用户的历史数据稀疏,找到相似用户的准确度并不是很高。UserCF不适用于正反馈较难获取的应用场景。另一方面,用户的增长是远大于Item的增长的,从这个角度来看,UserCF带来的存储压力更大。
ItemCF:得到共现矩阵,根据共现矩阵得到所有物品两两之间的相似度,对User i取正反馈物品列表,根据相似度计算出相似的TopK个物品作为推荐列表。
- 优点:物品相似度存储压力远小于用户相似度。复合直觉“用户喜欢某物品,应推荐相似物品”。
- 缺点:头部效应严重,同样不适用于处理稀疏数据。
应用场景:UserCF更适用于新闻推荐,用户能快速得知与自己兴趣相似的人最近喜欢什么,从而更趋向于新闻的及时性、热点性。ItemCF更适用于兴趣在短时间内变化较为稳定的场景,如电商推荐,用户倾向于在短时间内寻找一类商品,此时利用物品相似度时更符合用户动机的。由于UserCF与ItemCF这两种不同的特性,可以作为多路召回策略。
Q43: ctr和cvr模型有什么不同。简介ESMM模型。
A: 样本空间不同,举例理解:CTR输入是召回Item,输出为点击率。CVR输入是点击的Item,输出为转化率。
ESMM模型图
在ESMM模型中,业务目标为推荐物品后的转化率(收益),所以模型采用CTR×CVR=CTCVR作为线下指标。故采用了共享Embedding层的两个模块设计了一个多任务学习的框架——ESMM。ESMM的两个模块分别输出CTR与CVR并共同训练,最终输出为CTCVR(CTR×CVR),从而避免了割裂曝光->点击->转化的这一整个流程,且使整个模型的训练在同一个样本空间。
ESMM的精华在于:1)CTR和CVR模块共享Embedding层(多任务学习)。2)隐式地学习CVR模块,通过下面的公式可知,CTR的参数可以单独通过点击率数据(CTR监督数据)学习,而CVR是通过CTCVR监督信息来学习的(与CTR一起学习)。
如图,yi为CTR预测值,zi为CVR预测值。
针对上面的第2点,为什么不采用CVR监督数据进行学习呢?实际上,我觉得是可以单独采用点击->转化的监督数据进行CVR模型预训练。而模型中的损失函数没有考虑的原因在于样本空间不同,即模型样本空间全部为召回数据,对于召回数据中有很多未被点击的数据,这些数据训练CVR模型显然是不行的。
在ESMM模型中,作者同样采取了CVR=CTCVR/CTR的思路建模,发现由于这些数值可能会比较小,采用除法容易引起扰动从而加大了误差。
Q44: 用户/项目相似度衡量指标,特征相关性衡量指标。
A: 相似度:余弦相似度、皮尔逊相关系数(消除了单个用户均分所带来的偏置——有人3分代表喜欢,有人3分代表讨厌),相似的,在衡量相似度时同样可以减去物品的均分,从而消除物品带来的偏置。
相关性:皮尔逊相关系数(线性)、卡方验证、互信息、距离相关系数等等。
需要注意,余弦相似度不能衡量相关性,举例来说两个向量(向量值只有0和1)X与!X,可知他们的余弦相似度为0,但相关性是很高的。方差用于特征筛选可以衡量单个特征发散性,不能衡量特征之间的相关性。
Q45: ROC曲线是怎么画的?
A: ROC曲线的绘制方法为调整截断点,即对于二分类任务,每个样本输出一个0~1的值作为判断正/负样本的概率。在绘制ROC曲线中,从0~1逐步调整正负样本划分的阈值,每次调整记录下来假阳性率和真阳性率。越接近0/1的输出越能以较大概率判断为负/正样本,而在常规情况下,我们采用阈值0.5作为二分类标准。
Q46: 常用的超参数调优方法有哪些?
A: 网格搜索;随机搜索;贝叶斯优化算法。
- 网格搜索——查找范围内所有点来确定最优超参数,需要确定搜索范围和搜索步长,在模型调参的初期,可以设置较大的搜索范围和搜索步长,在优化的过程中逐步减少(可能错过全局最优);
- 随机搜索——随机选择参数进行测试,在参数设定的样本集足够的情况下是可以找到最优的,但结果无法确定;
- 贝叶斯优化算法,对参数设定一个先验分布(称为采集函数),通过参数先验分布得到当前超参,并根据当前参数得到的结果更新参数的先验分布,这使每次测试参数时的实验结果都是有意义的(在网格/随机搜索中,每次的实验结果是相互独立的)。
Q47: Softmax上溢、下溢。
A: 上溢:x过大,指数形式导致计算超出存储范围。下溢:x过小,导致分母接近0,计算结果出现Nan。
解决方案:对x进行变换使x = x-Max(x),此时分母至少为1。解释如下图所示。
如图:进行x-Max(x)变化后,softmax输出值相同
Q48: LR中连续特征为什么要做离散化?
A: 工业界很少将连续特征作为LR的输入,而采用离散化后的特征作为输入,原因如下:
- 数据角度:离散化的特征对异常数据有很强的鲁棒性;离散化特征利于进行特征交叉。
- 模型角度:当数据增加/减少时,利于模型快速迭代;离散化相当于为模型引入非线性表达;离散化特征简化了模型输入,降低过拟合风险;LR中离散化特征很容易根据权重找出bad case。
- 计算角度:稀疏向量内积计算速度快。(在计算稀疏矩阵内积时,可以根据当前值是否为0来直接输出0值,这相对于乘法计算是快很多的。)
而离散化连续值特征后同样会带来一些缺点,如下:
- 不合理的区间划分容易降低模型表达能力,构造合理的区间划分同样比较困难(需要从区间数、区间分段大小、区间内样本分布进行权衡)。
- 如果连续特征x对y有着很强的先验知识(如强线性关系),离散化后会使x的信息表达能力损失。