0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

机器学习算法那家强 因子分解机(FM算法)工业落地能力最强

深度学习自然语言处理 来源:深度学习自然语言处理 作者:深度学习自然语言 2020-12-31 00:01 次阅读

文 | 石塔西

源 | 夕小瑶的卖萌屋

尽管BERT为代表的预训练模型大肆流行,但是身处工业界才会知道它落地有多难,尤其是QPS动辄几百的在线推荐、搜索系统,哪怕在大厂也很难在线上系统见到它们。

今天就想反其道而行之,谈谈工业界搜索、推荐、广告这类核心场景中落地能力最强的算法(之一):因子分解机(FM)。我不敢说它是最简单的(FM的确很简单),但是作为一个推荐算法调参工程师,掌握FM一定是性价比最高的。我推崇FM算法的原因,有以下三点:

功能齐全

众所周知,推荐算法有三个应用领域:召回、粗排、精排。推荐算法千千万,但是有的算法只能用于召回,有的算法只能用于排序。像FM这样实现三个领域全覆盖的多面手,目前为止,孤陋寡闻的我尚不知道有第二个。但是需要强调的是,我们不能只训练一个FM排序模型 ,然后直接拿这个排序模型用于召回。尽管都是基于FM算法,但是FM召回与排序,有以下不同:

使用的特征不同

FM召回,由于未来要依赖Faiss进行线上检索,所以不能使用user与doc的交叉特征。只有如此,我们才能独立计算user embedding与doc embedding

FM排序,则没有这方面的限制,可以使用user与doc的交叉特征。是的,你没看错。因为FM所实现自动二阶交叉,仅能代表“共现”。但是user与doc之间还有其他形式的交叉,比如user tag与doc tag之间的重合度,喂入这样的交叉,对于排序性能提升,仍然有很大帮助。

使用的样本不同

训练FM做排序时,必须使用“曝光未点击”这样的“真负”样本。

训练FM做召回时,起码不能只使用“曝光未点击”做负样本。大部分的负样本必须通过随机采样得到。个中原因见我的文章《负样本为王:评Facebook的向量化召回算法》。

使用的Loss不同

FM排序时,由于负样本是真实的,可以采用CTR预估那样的point-wise loss

FM召回时,由于负样本是随机采样得到的,存在一定的噪声,最好采用BPR, hinge这样的pair-wise loss。

性能优异

推荐系统的两大永恒主题,“记忆”与“扩展”,FM也能实现全覆盖。

FM存在一阶项,实际就是LR,能够“记忆”高频、常见模式

FM存在feature embedding。如我在《无中生有:论推荐算法中的Embedding思想》据说,Embedding是提升推荐算法“扩展性”的法宝。FM通过feature embedding,能够自动挖掘低频、长尾模式。在这一点上,基于embedding的二阶交叉,并不比DNN的高阶交叉,逊色多少。

便于上线

现在深度学习是推荐领域的宠儿,LR/FM/GBDT这样的传统机器学习算法,不招人待见。

DNN虽然性能优异,但是它有一个致命缺点,就是上线困难。训练的时候,各位调参侠,把各种酷炫的结构,什么attention, transformer, capsule,能加上的都给它加上,看着离线指标一路上涨,心里和脸上都乐开了花,却全然无视旁边的后端工程师恨得咬紧了牙根。模型越复杂,离线和线上指标未必就更好,但是线上的时间开销肯定会增加,轻则影响算法与后端的同事关系(打工人何苦为难打工人),重则你那离线指标完美的模型压根没有上线的机会。虽说,目前已经有TF Serving这样的线上serving框架,但是它也不是开箱即用的,也需要一系列的性能调优,才能满足线上的实时性要求。

所以,如果你身处一个小团队,后端工程人员的技术能力不强,DNN的线上实时预测,就会成为一个难题,这个时候,FM这样的传统机器学习算法,就凸显出其优势。

FM排序,虽然理论上需要所有特征进行二阶交叉,但是通过公式化简,可以在 O(n)的时间复杂度下完成。n是样本中非零的特征数目,由于推荐系统中的特征非常稀疏,所以预测速度是非常快的。

召回,由于候选集巨大,对于实时性的要求更高。很多基于DNN的召回算法,由于无法满足线上实时生成user embedding的需求,只能退而离线生成user embedding ,对于用户实时兴趣的捕捉大打折扣。FM召回,这时就显现其巨大的优势。事先把doc embedding计算好,存入Faiss建立索引,user embedding只需要把一系列的feature embedding相加就可以得到,再去faiss中进行top-k近邻搜索。FM召回,可以实现基于用户最新的实时兴趣,从千万量级候选doc中完成实时召回。

总结与参考

由于以上优点,我心目中,将FM视为推荐、搜索领域的"瑞士军刀"。风头上虽然不及DNN那么抢眼,但是论在推荐系统中发挥的作用,丝毫不比DNN逊色,有时还能更胜一筹。FM有如此众多的优点,优秀的调参侠+打工人,还等什么,还不赶快学起来。想迅速掌握FM,我推荐如下参考文献:

掌握FM原理,推荐读美团的博客《深入FFM原理与实践》。FFM的部分可以忽略,在我看来,FFM更像是为了Kaggle专门训练的比赛型选手,损失了FM的很多优点。这就好比,奥运会上的射击冠军,未必能够胜任当狙击手一样。

FM用于召回,推荐读《推荐系统召回四模型之:全能的FM模型》。注意,如我所述,FM虽然万能,但是FM排序与FM召回,在特征、样本、Loss都存在不同,不可能训练一个FM排序就能直接拿来做召回。这一点,《全能FM》一文没有提到,需要读者特别注意。

如果想亲手实践,可以尝试alphaFM。该项目只不过是作者八小时之外的课外作品,却被很多公司拿来投入线上实际生产环境,足见该项目性能之优异和作者功力之深厚,令人佩服。强烈建议不满足只当“调参侠”的同学,通读一遍alphaFM的源代码,一定收获满满。

[1] https://zhuanlan.zhihu.com/p/165064102

[2] https://zhuanlan.zhihu.com/p/320196402

[3] https://link.zhihu.com/?target=https%3A//tech.meituan.com/2016/03/03/deep-understanding-of-ffm-principles-and-practices.html

[4] https://zhuanlan.zhihu.com/p/58160982

[5] https://link.zhihu.com/?target=https%3A//github.com/CastellanZhang/alphaFM

原文标题:谈谈工业界落地能力最强的机器学习算法

文章出处:【微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4549

    浏览量

    92009
  • FM
    FM
    +关注

    关注

    1

    文章

    179

    浏览量

    58994
  • 机器学习
    +关注

    关注

    66

    文章

    8306

    浏览量

    131834
  • dnn
    dnn
    +关注

    关注

    0

    文章

    58

    浏览量

    9008

原文标题:谈谈工业界落地能力最强的机器学习算法

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    深度学习工业机器视觉检测中的应用

    识别等任务。传统的机器视觉检测方法通常依赖于手工设计的特征和固定的算法,难以应对复杂多变的工业环境。而深度学习的引入,为工业
    的头像 发表于 07-08 10:40 553次阅读

    深度学习的基本原理与核心算法

    随着大数据时代的到来,传统机器学习方法在处理复杂模式上的局限性日益凸显。深度学习(Deep Learning)作为一种新兴的人工智能技术,以其强大的非线性表达能力和自
    的头像 发表于 07-04 11:44 1062次阅读

    神经网络反向传播算法的优缺点有哪些

    神经网络反向传播算法(Backpropagation Algorithm)是一种广泛应用于深度学习机器学习领域的优化算法,用于训练多层前馈
    的头像 发表于 07-03 11:24 318次阅读

    神经网络算法的优缺点有哪些

    的优点 自学习能力:神经网络算法具有强大的自学习能力,能够从大量数据中自动提取特征,无需人工干预。这使得神经网络
    的头像 发表于 07-03 09:47 505次阅读

    机器学习算法原理详解

    机器学习作为人工智能的一个重要分支,其目标是通过让计算机自动从数据中学习并改进其性能,而无需进行明确的编程。本文将深入解读几种常见的机器学习
    的头像 发表于 07-02 11:25 386次阅读

    机器学习的经典算法与应用

    关于数据机器学习就是喂入算法和数据,让算法从数据中寻找一种相应的关系。Iris鸢尾花数据集是一个经典数据集,在统计学习
    的头像 发表于 06-27 08:27 1425次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b>的经典<b class='flag-5'>算法</b>与应用

    AI算法的本质是模拟人类智能,让机器实现智能化

    视觉等领域。   AI 算法的核心是实现智能化的决策和行为   AI算法的本质在于模拟人类智能的能力,让计算机能够对现实世界进行模拟和模仿,从而达到智能化的目的。具体来说,AI算法可以
    的头像 发表于 02-07 00:07 5097次阅读

    目前主流的深度学习算法模型和应用案例

    深度学习在科学计算中获得了广泛的普及,其算法被广泛用于解决复杂问题的行业。所有深度学习算法都使用不同类型的神经网络来执行特定任务。
    的头像 发表于 01-03 10:28 1203次阅读
    目前主流的深度<b class='flag-5'>学习</b><b class='flag-5'>算法</b>模型和应用案例

    LabVIEW的六轴工业机器人运动控制系统

    。LabVIEW的可视化编程环境和强大的数据处理能力,使得复杂的运动学算法和轨迹规划得以顺利实现,显著提高了工业机器人的控制精度和效率。 ​ 这是LabVIEW的一个功能介绍,更多的使
    发表于 12-21 20:03

    深度学习算法和传统机器视觉助力工业外观检测

    在很多人眼里,深度学习是一个非常神奇的技术,是人工智能的未来,是机器学习的圣杯。今天深视创新带您一起揭开他神秘的面纱,了解什么才是深度学习
    的头像 发表于 11-09 10:58 562次阅读
    深度<b class='flag-5'>学习</b><b class='flag-5'>算法</b>和传统<b class='flag-5'>机器</b>视觉助力<b class='flag-5'>工业</b>外观检测

    全面总结机器学习中的优化算法

    几乎所有的机器学习算法最后都归结为求一个目标函数的极值,即最优化问题,例如对于有监督学习,我们要找到一个最佳的映射函数f (x),使得对训练样本的损失函数最小化(最小化经验风险或结构风
    发表于 11-02 10:18 361次阅读
    全面总结<b class='flag-5'>机器</b><b class='flag-5'>学习</b>中的优化<b class='flag-5'>算法</b>

    机器学习的基本流程和十大算法

    为了进行机器学习和数据挖掘任务,数据科学家们提出了各种模型,在众多的数据挖掘模型中,国际权威的学术组织 ICDM(the IEEE International Conference on Data Mining)评选出了十大经典的算法
    发表于 10-31 11:30 889次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b>的基本流程和十大<b class='flag-5'>算法</b>

    智能驾驶感知算法梳理 高阶自动驾驶落地关键分析

      感知算法升级是L2级向L 3级智能驾驶系统跨越的关键。与传统2D+CNN算法相比,BEV+ Transformer算法优势体现在: 1)感知输出信息精准度更高; 2)鲁棒性高; 3)泛化
    发表于 10-19 09:53 307次阅读
    智能驾驶感知<b class='flag-5'>算法</b>梳理 高阶自动驾驶<b class='flag-5'>落地</b>关键分析

    瑞萨电子深度学习算法在缺陷检测领域的应用

    缺陷检测在电子制造业中是非常重要的应用。然而,由于存在的缺陷多种多样,传统的机器视觉算法很难对缺陷特征进行完全建模和迁移缺陷特征,致使传统机器视觉算法可重复使用性不是很大,并且需要区分
    的头像 发表于 09-22 12:19 730次阅读
    瑞萨电子深度<b class='flag-5'>学习</b><b class='flag-5'>算法</b>在缺陷检测领域的应用

    基于Python实现随机森林算法

    机器学习算法是数据挖掘、数据能力分析和数学建模必不可少的一部分,而随机森林算法和决策树算法是其中
    的头像 发表于 09-21 11:17 1025次阅读
    基于Python实现随机森林<b class='flag-5'>算法</b>