我司常用算法介绍

算法模型干货总结

假设我有5枚硬币,都是正反面不均匀的。我们玩一个游戏,每次你可以选择其中一枚硬币掷出,如果掷出正面,你将得到一百块奖励。掷硬币的次数有限(比如10000次),显然,如果要拿到最多的利益,你要做的就是尽快找出“正面概率最大”的硬币,然后就拿它赚钱了。
这个问题看起来很数学化,其实它在我们的生活中经常遇见。比如我们现在有很多在线场景,遇到一个相同的问题:一个平台这么多信息,该展示什么给用户,才能有最好的收益(比如点击率)?
Google作为最大的搜索广告公司,在用户搜索时该展示什么广告;抖音的Feed流推荐,如何从普通用户那里找到优质内容;淘宝有海量的商品池子,该如何捞取用户最容易剁手的商品展示出来?其背后必然有大量算法模型做支撑

模型分类

按照预测目标分: 有监督无监督
按照门类划分: 传统机器学习深度学习
按照场景划分:自然语言计算机视觉音频对话分类预测自动驾驶
按照用途划分: 搜索推荐召回&排序广告CTR预估风控监测流失预测抠图智能审核智能客服

常用模型介绍

当我们不能通过统计指标直观总结出已知事件的发展规律,或者需要对未知事件的发展规律进行预测时,就需要建模。本质上讲模型没有好坏,关键看是否能解决实际问题

  • LR
    LR 逻辑回归模型 是线性模型的代表,在原有线性模型基础上多了一层激活函数(sigmoid),其优点是简单可理解,可以输出各维度的权重;采用并行实现,计算速度快,缺点是模型对高维特征拟合效果差,不能处理特征与目标之间的非线性关系。

  • XGBoost
    XGBoost 是基于树模型的集成学习算法,以GBDT为框架,相比于GBDT它不需要对特征进行处理,且内部采用的是多棵梯度提升树 准度提升,还支持数据容错处理;类似的还有LightGBM(采用深度优先遍历树)

  • K-means
    K-means 是我们最常用的基于欧式距离的聚类算法,属于无监督学习;其认为两个目标的距离越近,相似度越大。优点是算法简单便于理解,样本数据不需要提前做标记; 缺点是对k值的设定不能自动化,无法对同一条数据进行多分类预测。

  • DNN
    也叫多层感知机(MLP),最简单的深度学习网络,主要有输入层、特征编码层、隐藏层、输出层;一般一个简单的3层DNN网络便可以达到普通树模型的效果。


    会员续费预测

  • DeepFM
    DeepFM是目前ctr预估领域常用模型之一;是哈工大和华为一起提出的组合模型的思想,我们可以将以往的FM和其他深度学习模型结合,通过两两向量内积操作生成更多高纬度向量,有效解决了深度学习处理稀疏特征的问题,成为一个全新的强特征组合能力的模型,并且也具有强拟合能力;
    注意下图的FM层有个加操作:加操作是不进行特征交叉,直接把原先的特征接入输出层,相当于wide&deep模型中的wide层。

DeepFM4Keras

  • Bert
    bert模型在自然语言处理中经常用到,采用深度网络构建,内部使用注意力机制,可提取一句话的重点部分,目前在搜索项目被广泛应用。Bert可做有监督和无监督训练,无须对文本提前进行分词。
    模型界的GitHub: huggingface
  • 协同过滤
    寻找具有相同偏好的用户,并将他们喜欢的物品推荐给我。
    常用推荐算法介绍

大致过程:
1、构建用户特征矩阵,通过距离算法找到和当前用户相近的一批用户
2、这批用户看过,但当前用户没有看过的商品评分乘以这个用户与当 前用户的相似度分值,得到当前用户对新商品的预测分
3、将相同新商品预测分进行累加求均值
4、新商品列表按照预测分倒序排列,取Top推荐给当前用户

如果非要挑一个最好的,那么肯定是深度学习模型

常用公式介绍

  • loss
    模型结构决定了拟合函数的形式,损失函数决定了如何衡量预测值和真实值之间的差距,一般模型在训练时会关注loss值,该值越小越好;常用的损失函数有:MSE(均方差函数)和Cross Entropy(交叉熵) ;其中后者多用于分类任务,尤其在点击率、转化率预估等模型上很常见。

  • metrics
    评估函数用来衡量一个模型的好坏,经常用到的参照指标有:
    准确率(acc),衡量模型整体的预测能力
    精确率(precision),预测为正样本的准确率 即正阳率
    召回率(recall),用来衡量找到某一类样本的能力
    F1,有时候精确率和召回率会互相矛盾,当P和R出现矛盾情况后可参考综合指标F1,该值越大越好
    AUC,ROC曲线下面积,用来衡量模型的排序能力 即正样本打分大于负样本的能力,通常一个好的排序模型AUC要达到0.7以上,是ctr预估、搜索精排模型的重要参考指标


ROC曲线
  • 激活函数
    激活函数起到了非线性映射的作用,可以将神经元的输出幅度限制在一定的范围内,一般在(-1,1)。
    sigmoid: 又称逻辑回归函数,取值范围[0,1] 当我们想要将输出视作⼆元分类问题的概率时,在输出层实用
    softmax: 可看作sigmoid的特例,输出0或1,用在二分类的输出层
    relu:relu函数非常简单max(x,0), 目的是剔除负值,常用在神经网络隐藏层,解决梯度消失问题,缺点是当输入为负时,输出为0,梯度也为0,神经元处于死亡状态,一般而言,50%节点会处于死亡状态。
    tanh:将特征压缩到(-1,1)之间,形状与sigmoid类似,不同的是tanh在原点处中心对称,从其图像上可以看出,针对[-1,1]之间的输入特征变换明显,区间外的容易陷入饱和状态导致梯度消失。
  • 优化器
    优化器决定了如何根据loss求解梯度,优化器可影响模型的拟合能力。
    SGD 是最早的优化器,也是目前应用最广的优化器之一,优点是计算速度快,缺点是容易产生梯度震荡形成 局部最优解,收敛速度慢。
    Adam 是目前综合性能最好的优化器,采用自适应学习率算法 ,收敛速度快;一般3-5个epoch便可对数据完成拟合。

  • 距离函数
    虽然每种算法都基于各自的判断标准进行计算,但目的都是相通的,通过数学公式求解唯一值,用于计算两个向量的相近程度
    余弦距离(cosine):计算两个多位向量的空间夹角
    欧式距离(L2):计算向量间空间直线距离
    曼哈顿距离(L1):计算向量间的空间直角距离
    共现度系数:两个集合共有元素占比越高越相近
    皮尔逊系数:它表示两个数列中对应数值一起增大或者一起减小的可能性。它度量数字一起按比例改变的倾向性,也就是说两个数列中的数字存在一个大致的线性关系。当该倾向性强时,相关值趋于1。

  • 正则函数

常见正则化函数L1、L2
L1是模型各个参数的绝对值之和,趋向于产生少量的特征,而其他的特征都是0。
L2是模型各个参数的平方和的开方值,会选择更多的特征,这些特征都会接近于0。



如图 学习 θ1 θ2 两个权重, 蓝色的圆心是误差最小的地方, 而每条蓝线上的误差都是一样的. 正则化的方程是在黄线上产生的额外误差(也能理解为惩罚度), 在黄圈上的额外误差也是一样. 所以在蓝线和黄线 交点上的点能让两个误差的和最小. 这就是 θ1 θ2 正则化后的解. 要提到另外一点是, 使用 L1 的方法, 我们很可能得到的结果是只有 θ1 的特征被保留, 所以很多人也用 l1 正则化来挑选对结果贡献最大的重要特征. 但是 l1 的结并不是稳定的. 比如用批数据训练, 每次批数据都会有稍稍不同的误差曲线,

机器学习建模过程

以LR为例:

  • 整理数据,并做基本特征预处理:消歧、数值化、离散化、标准化、缺失值处理等
  • 采用随机赋值法,初始化特征权重w和偏执b
  • 训练模型计算f(x)
  • 通过预测值和标签值求解loss
  • 根据loss求解梯度
  • 根据梯度更新w和b
  • 观察loss和metrics,如果不再变化可停止迭代。

LR可视为一个单隐藏层单节点的神经网络,优点是简单好理解,计算速度快,缺点是容易欠拟合不能处理非线性关系

模型优化的方向

  • 更多的特征,更好的样本:样本的多少和特征的丰富程度决定了模型拟合能力的天花板,最有效的提升方式是引入具有区分度的特征
  • 提升时效性 :尽可能选取能反应用户当下行为的特征,并确保特征的及时更新
  • 模型参数:提高embedding映射的维度数(主流是32,文本是128),增加网络深度,调整学习率,选取合适的激活函数和优化器
  • 使用预训练模型进行迁移学习,可解决小样本训练及复杂模型构建问题,如vgg、consert
  • 集成学习法:通过构建多个弱分类器完成学习任务,常用的集成学习法包括bagging和boosting
    bagging 从训练集中有放回的随机抽样样本集训练弱分类器 ,每一个弱分类器都是独立存在的,取每个分类器预测结果的平均值或以加权融合的方式计算最终结果。
    boosting 先训练一个弱分类器,并把这个弱分类器分错的样本记录下来,同时给予这个弱分类器一定的权重;随后建立一个新的弱分类器,新的弱分类器基于前面分错的样本重新训练,同样也分配给这个分类器一定的权重,重复上面流程,直到最终结果达到预期指标。

项目案例

  • 借助迁移学习技术在用户搜索日志上训练语义相似模型
  • 将模型导出,并加载到特征抽取服务,该服务负责将文本转换为向量
  • 数据同步任务调用特征抽取服务将商品标题转换为向量并存入索引库
  • 搜索服务获取用户query后调用特征抽取服务,将文本转换为向量
  • 通过ES的ANN检索算法,计算query vector与doc vector近似距离,返回topK
搜索引擎-语义召回模块

关于什么是向量检索可参考这篇文章

常见问题&QA

1、如何加速训练过程

  • 增加批次大小
  • 选择合适的中间层和数量
  • 纬度越多计算越慢
  • 选择合适的优化器
  • 使用GPU

2、如何解决过拟合问题

  • 引入正则化函数
  • 对部分节点dropout
  • 减少批次数量
  • 特征分析:是否存在特征穿越

3、注意数据中的特征穿越
通俗讲训练数据里出现了标记之后的行为;例如,预测用户购买会员的概率,那么训练数据里的行为特征只能使用用户成为会员前的行为数据。如果训练集存在穿越的特征会导致模型在训练阶段和离线预测阶段表现好,线上预测差的现象。

4、如何标记正负样本
二分类里,正样本标记为1,负样本标记为0。

5、什么是梯度消失
当梯度消失后,模型w和b将无法完成更新,loss和metrics将不在变化。

6、模型不收敛
表现出来的现象是loss忽大忽小,不停地上线震荡,或者训练初期就处于一个比较大的值一直不收敛,通常有以下几种原因:

  • 样本存在错误,如标签设置不正确,数据存在异常值,特征穿越等
  • 学习率设置过大,导致梯度上下颠簸
  • 激活函数或者优化器使用不当

7、什么是网格搜索
Grid Search:模型训练过程中一种常用的调参手段;穷举搜索:在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。其原理就像是在数组里找最大值。(为什么叫网格搜索?以有两个参数的模型为例,参数a有3种可能,参数b有4种可能,把所有可能性列出来,可以表示成一个3*4的表格,其中每个cell就是一个网格,循环过程就像是在每个网格里遍历、搜索,所以叫grid search)

8、常用特征处理方法有哪些

  • 去量纲:归一化、区间缩放,有助于模型快速收敛
  • 倾斜数据平滑处理:如果数据分布区间过大,可进行平滑处理,使用log函数将非正态数据正态化
  • 离散化:连续数值区间化
  • 填充缺失值
  • 剔除极值
  • 字典编码

。。。

总结

对于一个优秀的厨师来说,不管面对什么样的食材,都能给出有针对性的烹饪方法,做出美味的佳肴,一个优秀的算法工程师亦是如此,当面对不同的业务诉求和复查的业务数据时,能够给出相对科学的建模方案,实现业务效益最大化。

你可能感兴趣的:(我司常用算法介绍)