提前锁票 InfoQ 最具价值感的视频栏目 | InfoQ 大咖说 了解详情
写点什么

新浪微博 FiBiNET:结合特征重要性和双线性特征交互进行 CTR 预估

2019 年 11 月 29 日

新浪微博FiBiNET:结合特征重要性和双线性特征交互进行CTR预估

背景及简单介绍

基于深度学习的 CTR 预估模型用处已经很广泛,模型也提出了很多,比如 wide&deep,DCN,DIN 等等。但是许多模型在计算特征交互时用的还是较简单的方法:比如 Hadamard 乘积或者内积,而很少去关注特征的重要性。本文提出了一种新的 CTR 预估被称为 FiBiNET,该模型名是 Feature Importance and Bilinear feature Interaction NETwork 的缩写。一方面,FiBiNET 可通过 Squeeze-Excitation network 动态学习不同特征的重要性权重,因为不同的特征其实对目标预测的重要性是不一样的,比如在一个人的收入时,职业的特征肯定比爱好的特征来的更加重要;另一方面,通过双线性变换函数从更加细粒度的角度高效学习特征的交互。通过结合 DNN,deep FiBiNET 模型在 realworld datasets 上取得了很好的性能。


相关工作

Squeeze-and-Excitation Network(SENet)模块



上图是 SENet 的 Block 单元,图中的 [公式] 是传统的卷积结构,X 和 U 是[公式]的输入(C’H’W’)和输出(CHW),这些都是以往结构中已存在的。SENet 增加的部分是 U 后的结构:对 U 先做一个 Global Average Pooling(图中的 [公式] ,作者称为 Squeeze 过程),输出的 11C 数据再经过两层的全连接(图中的 [公式] ,作者称为 Excitation 过程),最后用 sigmoid(论文中的 self-gating mechanism)限制到[0,1]的范围,把这个值作为 scale 系数乘到 U 的 C 个通道上, 作为下一级的输入数据。这种结构的原理是想通过控制 scale 的大小,把重要的特征增强,不重要的特征减弱,从而让提取的特征指向性更强。


模型结构


Sparse Input and Embedding layer


首先是输入层和 Embedding 层,和常规的 DeepFM,AFM 等模型没什么区别,输出是 [公式] ,其中 f 是特征 fields 的数目, [公式] ,表示第 i 个 field 的 embedding 向量,维度为 k。


  1. SENET Layer



输入是 embedding 层输出的 [公式] ,SENET Layer 输出一个权重向量 [公式] ,每个值都对应一个特征 field。然后将该权重向量与 embedding 层的输出相乘得到: [公式] 。


展开来说,SENET 一共三个步骤:


squeeze step:计算每个 field embedding 的概况统计(summary statistics)。使用 max 或者 mean pool 针对每个 field 得到一个统计向量: [公式] 。其中 mean pool 的效果要好于 max pool,这也很好理解,因为 embedding 提取出来的 k 维度的向量,如果只是取最大的一个值是会损失很多信息的。


Excitation:根据向量 Z 计算每个 field embedding 的权重,使用的是两层 FC:



Re-Weight:将原来的 field embedding 与 Excitation 步骤输出的 A 向量逐元素相乘:



3. Bilinear-Interaction



传统的特征交叉方式广泛采用了内积(fm,ffm 等)和哈达玛积(AFM,NFM 等)。其中内积可被表示为:



哈达玛积可被表示为:[公式] 。而这两种方式在稀疏数据上很难有效对特征交叉进行建模。文章提出结合内积和哈达玛积并引入一个额外的参数矩阵 W 来学习特征交叉。如上图有半部分所示: [公式] 和 W 之间是内积,W 和 [公式] 之间是哈达玛积。


交叉向量 [公式] 可通过三种方式得到:


  • Field-All Type:这种情况下,所有特征组交叉时共享一个参数矩阵 W,额外参数量为 W 矩阵的大小 k×k。

  • Field-Each Type:每个特征组 field i 维护一个参数矩阵 Wi,额外参数量为(f-1)kk。

  • Filed-Interaction Type:每对交互特征[公式] 都有一个参数矩阵 [公式] 。额外参数量为 0.5*(f-1)kk。

  • 最终,交叉层由原始的特征组 embedding 向量 E 以及 SENET 层输出的 embedding 向量 V 分别得到交叉向量 p 和 q。


  1. Combination Layer


组合层将交叉向量 p 和 q 进行拼接操作:



若直接对 c 向量中的元素进行求和并使用一个 sigmoid 函数输出,则得到一个浅层的 CTR 预估模型,若将该向量输入深度神经网络,则得到一个深度 CTR 预估模型。


  1. Deep Network


输入是组合层的输出 c,通过几层的 MLP 转化,最后通过 sigmoid 函数输出 CTR 的预估值 [公式] 。


  1. Output Layer


实验

浅层 FiBiNET



深层 FiBiNET



参考文献:


https://arxiv.org/pdf/1905.09433.pdf


https://blog.csdn.net/u012151283/article/details/95234555


https://zhuanlan.zhihu.com/p/32


本文转载自 Alex-zhai 知乎账号。


原文链接:https://zhuanlan.zhihu.com/p/76698689


2019 年 11 月 29 日 13:23348

评论

发布
暂无评论
发现更多内容

redis系列之——高可用(主从、哨兵、集群)

诸葛小猿

redis redis集群 redis哨兵 redis主从

程序的机器级表示-程序的编码

引花眠

计算机基础

低代码与无代码

lidaobing

低代码 无代码开发

智慧4S店解决方案发布,看英特尔如何引领汽车销售行业变革

最新动态

人人都需要一份自己的「使用说明书」

非著名程序员

程序员 程序人生 提升认知 独立思考 自我思考

数据驱动 vs 关键字驱动:对UI自动化测试框架搭建的探索

Winfield

DevOps 敏捷 自动化测试

设计模式(1)—什么是设计模式?设计模式的六大原则是什么?

爱嘤嘤嘤斯坦

Java 程序员 编程语言 设计模式 23种设计模式

ARTS WEEK5

紫枫

ARTS 打卡计划

ARTS-WEEK6

一周思进

ARTS 打卡计划

Spring5-Reactor函数式编程

小技术君

spring reactor Spring5 springboot

【计算机网络】如何实现可靠数据传输?

烫烫烫个喵啊

进程、线程基础知识全家桶,30 张图一套带走

小林coding

Linux 操作系统 计算机基础 进程 进程线程区别

ARTS打卡 - Week 07

teoking

Go:Stringer命令,通过代码生成提高效率

陈思敏捷

go golang stringer

ARTS打卡 第7周

引花眠

ARTS 打卡计划

简述CAP理论

lei Shi

看动画学算法之:排序-插入排序

程序那些事

Java 数据结构 算法 插入排序

昆明市成立两大“高端”中心,区块链赋能生物医药和高原特色农业

CECBC区块链专委会

编程核心能力之抽象

顿晓

抽象 编程日课

ARTS打卡-06

Geek_yansheng25

分布式系统设计理念这么难学?

架构师修行之路

架构 分布式

MySQL实战45讲总结

`

MySQL

【计算机网络】为什么要三次握手四次挥手?

烫烫烫个喵啊

TCP 计算机网络

负载均衡方式

羽球

负载均衡

Cache解决算法 Charles断点调试breakpoint John 易筋 ARTS 打卡 Week 08

John(易筋)

ARTS 打卡计划

SpringBoot 入门:03 - 统一请求返回

封不羁

Java spring springboot

抽象工厂模式

Leetao

Python 面试 设计模式

Mysql插入百万条数据

Java小咖秀

MySQL 运维 数据

时间去哪了?

escray

自动化测试首先是一种工作文化

wangwei1237

自动化测试 测试文化

《重学 Java 设计模式》PDF 出炉了 - 小傅哥,肝了50天写出18万字271页的实战编程资料

小傅哥

Java 设计模式 小傅哥 重构 代码质量

打造 VUCA 时代的 10 倍速 IT 团队

打造 VUCA 时代的 10 倍速 IT 团队

新浪微博FiBiNET:结合特征重要性和双线性特征交互进行CTR预估-InfoQ