美文网首页
论文阅读笔记 Wide & Deep Learning for

论文阅读笔记 Wide & Deep Learning for

作者: 郑大能 | 来源:发表于2019-06-27 21:46 被阅读0次

    <Wide & Deep Learning for Recommender Systems>

    <阅读笔记>

    参与了dantezhao的一个论文阅读计划 paper-notes

    将阅读成果分享到博客

    本文讲解了广度和深度学习相结合的方法,并以Google Play为例,介绍了该方法在推荐系统实践中的应用
    
    带着问题阅读:
    1. what: Wide & Deep Learning的两部分,分别是什么  
    2. why: 为什么将二者相结合  
    3. how: 广度和深度相结合的具体实现
    

    0. 摘要

    对已知特征,广度线性模型(wide linear models)有很好的记忆(Memorization)能力
    
    对低维未知特征,深度神经网络(deep netural network)具有很好的泛化(Generalization)能力
    
    本文将广度线性模型的记忆能力和深度神经网络的泛化能力相结合
    
    这套方法被应用于Google Play,10亿活跃用户,1百万apps的手机应用市场
    
    相比仅用广度和仅用深度,广度深度相结合的方法明显改善了app的获得率
    
    广度和深度学习(wide & deep learning)方法的实现已经开源到TensorFlow中
    

    1. 导言

    • 推荐系统也是一种搜索排序系统
    推荐系统可以视为一个搜索排序(search ranking)系统
    
    在这个搜索排序系统中
    
    输入查询可以看作用户和上下文信息的集合
    
    输出可以看作物品的排序列表
    
    
    • 记忆(Memorization)和泛化(Generalization)
    推荐系统和搜索排序系统,都要实现记忆和泛化
    
    记忆可以粗略地解释为,学习物品或特征共现的频率以及从历史数据发掘可用的关联关系
    
    泛化则是基于关联关系的可传递性,发掘历史数据中从未出现或极少出现的特征组合
    
    基于记忆的推荐系统更为"主题相关",直接关联被用户已发生行为所作用的物品
    
    泛化则用于改善推荐物品的多样性
    
    
    • 线性模型
    广义线性模型(generalized linear models)简单、可扩展、可解释
    
    被广泛应用于工业级的大规模在线推荐和排序系统
    
    广义线性模型通常是基于二进制化的稀疏特征训练的
    
    这些特征使用了独热编码(one-hot encoding)
    
    例如:
    user_installed_app=netflix值为1
    当出现AND(user_installed_app=netflix, impression_app=pandora)时
    如果用户安装了netflix,那么这个组合的值为1,推荐系统就会显示pandora给用户
    
    向量叉积变换(cross-product transformation)的局限之一是
    无法泛化出训练数据中没有出现过的"查询-物品"特征组合(query-item feature pair)
    
    
    • 泛化
    泛化的一种形式是加入粒度更粗的特征
    
    比如上面的例子
    将AND(user_installed_app=netflix, impression_app=pandora)
    变为AND(user_installed_category=video, impression_category=music)
    
    通过学习每个查询(query)和每个物品(item)特征的低维密集嵌入向量(low-dimensional dense embedding vecotr)
    
    嵌入式模型(Embedding-based models),如分解机(factorization machines)或深度神经网络(deep neural networks)
    可以泛化出之前没见过的"查询-物品"特征组合
    
    如果潜在的"查询-物品"矩阵过于稀疏或高阶,就很难从这类数据中学习到有效的"查询-商品"低维组合
    
    比如有特殊偏好的用户或者仅有少数拥趸的小众商品
    
    "查询-物品"组合之间没有相关性,而密集嵌入又会为所有的组合泛化出预测结果
    
    这种情况带来了过度泛化和相关性很弱的推荐
    
    而具有向量叉积变换的线性模型,就能记住这些参数极少的异常规则(exception rules)
    
    • 广度和深度学习框架

    [站外图片上传中...(image-612f02-1561643169129)]

    Figure 1:广度和深度模型图谱

    综上所述,本文对一个线性模型模块和一个神经网络模块进行联合训练(joint training)
    
    将记忆和泛化融入一个模型
    
    • 本文的主要贡献
    1) 开发了一套广度和深度相结合的学习框架,用于稀疏输入的推荐系统
    这套框架对"带嵌入的前馈神经网络"和"特征变换线性模型"进行联合训练(joint trainning)
    
    2) 实现并评测了广度和深度推荐系统在Google Play市场的产品化
    
    3) 以API的形式在TensorFlow上开源了广度和深度学习系统的具体实现代码
    
    广度和深度学习框架的思路简单,在满足训练和服务速度的前提下,显著改善了移动应用市场的app获得率
    

    2. 推荐系统概述

    [站外图片上传中...(image-3f98aa-1561643169129)]

    Figure 2 展示了手机应用推荐系统的基本架构

    • 查询(Query)和用户行为(User Action)
    当用户访问app商店时,查询(Query)就产生了,查询可以包括各类用户和文本特征
    
    推荐系统首先展示一个应用列表(也被称为 展示impression)
    
    用户可以点击或者购买应用列表上的应用
    
    用户的查询(queries)和展示(impressions)被记入日志,作为学习器的训练数据
    
    • 召回和排序(Retrieval and Ranking)
    推荐系统有一个服务延迟上限(serving latency requirements),通常是O(10)毫秒
    
    在时限内为每个查询穷尽百万app计算每个app的分数是不可能的
    
    这种情况下,推荐系统在收到查询的第一步是召回(retrieval)
    
    召回系统为用户返回一个与查询匹配度最佳的简短物品列表
    
    返回这个列表的依据通常是机器学习模型或者人工定义的规则
    
    缩小了备选池(candidate pool)的规模之后,排序(ranking)系统为备选列表中的所有物品排序
    
    分数通常是P(y|X),代表给定特征x时,用户行为标签y的概率
    
    特征x包括:
    a) 用户特征:国籍、语言、人口统计学
    b) 文本特征:设备、当前时间
    c) 展示特征(impression feature):app年龄,app历史数据
    
    本文将广度和深度学习框架应用于上述第二个步骤排序系统中
    
    

    3. 广度和深度学习

    3.1 广度部分

    广度部分是广义线性模型,如图Figure 1 左侧所示
    
    • 广义线性模型公式

    y = wTx + b

    y表示预测值
    x=[x1, x2,..., xd] 是d个特征的向量

    w=[w1, w2,..., wd] 是模型的参数
    b 是bias(偏差)

    特征集包括原始特征输入和变换后的特征
    
    其中最重要的一个变换就是向量叉积变换
    
    • 向量叉积变换(cross product transformation)公式
      [站外图片上传中...(image-ecf06b-1561643169129)]

    其中Cki是一个布尔变量
    如果第i个特征属于第k个变换Ø k
    那么Cki的值为1,否则为0

    对于二进制特征,当且仅当组成特征都为1,它的向量叉积变换才是1,否则向量叉积为0
    
    通过这种方式捕获二进制特征之间的交互,为广义线性模型增加非线性
    

    3.2 深度部分

    深度部分是图Figure 1右侧的前馈神经网络
    
    分类特征的原始输入是特征字符串(如"language=en")
    
    每一个稀疏高维的分类特征都被转为低维密集的真值向量,通常被称为嵌入向量
    
    嵌入的维度大约在O(10)到O(100)的范围内
    
    嵌入向量先被随机初始化,然后它们的值在模型训练期间被用于最小化最终损失函数
    
    这些低维密集嵌入向量在前馈传递中被送入神经网络的隐藏层
    
    • 隐藏层使用的计算公式
      [站外图片上传中...(image-31e435-1561643169129)]

    其中l是层数

    f是激活函数,通常是一个线性整流函数ReLUs(rectified linear units)
    a(l)是第l层的激活值(activations)
    b(l)是第l层的偏差(bias)
    W(l)的第l层的模型权重

    3.3 广度和深度模型的联合训练(joint training)

    • 联合训练(Joint Training)
    广度部分和深度部分相结合时,使用了输出(output)对数几率(log odds)的加权和作为预测 
    
    这个加权和被送入一个通用的逻辑损失函数(logistic loss function)进行联合训练  
    
    • 联合训练(Joint Training)和集成训练(Ensemble)
    1) 集成训练中
    
    每个模型都是独立训练,模型产生的预测在推导阶段整合而不是在训练阶段
    
    因为独立训练,模型的规模更大(更多特征和变换)以达到合理的准确性
    
    2) 联合训练中
    
    在训练阶段就同时优化了所有参数,包括广度部分和深度部分以及它们的加权和
    
    广度部分只需少量向量叉积特征变换补充深度部分即可,无需动用整个广度模型
    
    
    • FTRL算法

    联合训练中,使用了Follow-the-regularized-leader(FTRL)算法
    模型广度部分使用L1范数(regularization)作为优化器
    模型深度部分使用了AdaGrad
    模型图示在图Figure 1的中间部分

    • 模型的计算公式
      [站外图片上传中...(image-c0f00e-1561643169129)]

    Y表示二进制分类标签
    σ(·)表示反曲函数
    Ø(X)表示原始特征x的向量叉积变换
    b表示偏差(bias)项
    Wwide表示所有广度模型权重的向量
    Wdeep表示应用于最终激活值a(lf)的权重

    4. 推荐系统实现

    实现推荐系统包括三个步骤(如图Figure 3所示):
    1) 数据生成(data generation)
    
    2) 模型训练(model Training)
    
    3) 模型提供服务(model serving)
    
    • 应用推荐系统管线概览(Figure 3)

    [站外图片上传中...(image-f8b630-1561643169129)]

    4.1 数据生成(data generation)

    • 训练数据(training data)
    用户和应用在一段时间内的展示数据(impression data)用于生成训练数据
    
    每个样本都对应一个展示(impression)
    
    这个展示的标签就是"应用获取率(app acquisition)":
    如果展示应用被安装,数值为1,否则数值为0
    
    • 词汇数据(vocabularies)
    词汇数据实际上是数据表
    这些表将分类特征字符串(categorical feature strings)映射为整型ID(integer IDs)
    
    所有出现超过一定次数的字符串特征值,系统都会计算它们的ID空间(ID space)
    
    

    通过映射特征值x到它的累计分布函数P(X≤x)
    再分为nq个分位数
    连续真值特征会被归一化为[0,1]
    在第i个分位数的值被归一化为 (i-1)/(nq-1)
    分位数的边界是在数据生成阶段计算出来的

    4.2 模型训练(Model Training)

    [站外图片上传中...(image-307024-1561643169129)]

    模型结构如图Figure 4所示
    
    1) 输入层(input layer)  
    训练阶段,输入层获取训练数据和词汇数据并生成带标签的稀疏或密集特征
    
    2) 广度部分(wide component)  
    
    模型的广度部分包括用户已安装应用和展示应用的向量叉积变换
    
    3) 深度部分(deep component)  
    
    模型的深度部分,从每个分类特征学习得到一个对应的32维嵌入向量
    
    模型将所有嵌入及密集特征合并到一起,生成一个大约1200维的密集向量
    
    合并所得的向量先被传入3个线性整流函数层,最终到达逻辑输出单元
    
    4) 模型训练的效率问题  
    
    广度和深度组合模型在5000亿个样本上训练
    
    每加入一个新的训练数据集,模型都需要重新训练
    
    重新训练计算成本高昂且延迟了从加入新数据到更新模型的时间
    
    5) 热启动系统(warm-starting system)  
    
    为解决重新训练的效率问题,模型使用了一种热启动模式
    
    热启动模式在每次重新训练时都初始化一个新模型
    
    新模型包括了新数据嵌入和之前模型的线性模型权重
    
    6) 试运行(dry run)  
    
    模型加载到模型服务器前,会进行一次试运行(dry run),以确保线上实时场景不会出问题
    
    上线前通过对比之前的模型,检验新模型运转正常
    
    

    4.2 模型提供服务(Model Serving)

    1) 模型训练完成并验证功能后,将加载到模型服务器
    
    2) 模型为推荐系统提供服务的流程如下:
    
        a) 每一次请求,服务都会通过应用召回系统和用户特征获取一个备选应用列表,并为其中的应用打分
    
        b) 应用按照分数从高到低排列并展示给用户
    
    3) 分数计算
    
    系统给应用的评分,是通过在广度和深度组合模型上运行一个正向推断(forward inference)计算而来的
    
    4) 提升服务时效
    
    为了将每次请求响应控制在10毫秒内,系统通过多线程并行对性能进行了优化
    
    之前在一个批次内计算所有备选应用的分数
    
    优化后并行计算更小批次里的备选应用的分数
    
    

    5. 实验结果

    本文主要从app获取率和服务性能两方面验证广度和深度学习模型的效果
    

    5.1 应用获取率(app aquisitions)

    本文采用A/B测试进行了为期3周的在线实验
    
    分别随机选取了三组各1%的用户作为随机实验对象
    
    三组对象分别应用了三类模型的推荐系统:
    1) 高度优化的广度逻辑回归模型,具有丰富的向量叉积特征变换(cross-product feature transformations)
    2) 具有相同特征和深度神经网络的深度模型
    3) 具有相同特征的深度广度结合模型
    
    其中第一组作为控制组
    
    实验结果表明,在应用获得率(app aquisitions)上:
    广度和深度相结合比仅用广度高出3.9%
    广度和深度相结合比仅用深度高出1%
    
    除了在线实验,本文使用留出法(hold-out)测试了与线上数据互斥的线下数据集
    
    广度和深度相结合的方法相比仅用广度和仅用深度,只有略微偏高的AUC*值
    
    广度和深度相结合在线上比线下更为显著
    
    原因可能是线下系统的展示(impression)和标签的数据是固定的
    线上系统可以混合记忆与泛化生成新的推荐
    线上系统也会从新的用户回馈中持续学习
    
    *AUC备注
    AUC(Area Under Receiver Operator Characteristic Curve)
    ROC全称是"受试者工作特征"(Receiver Operating Characteristic)
    ROC曲线的面积就是AUC(Area Under the Curve)
    AUC用于衡量"二分类问题"机器学习算法性能(泛化能力)
    

    5.2 服务性能(serving performance)

    在商用应用商店,需要同时满足高吞吐和低延迟
    
    峰值流量时,推荐系统服务器需要每秒为上百万个应用评分
    
    单线程处理单个批次的全部备选项需要31毫秒
    
    拆分批次为体量更小的批次,同时使用多线程处理,能够将客户端延迟有效降低到14毫秒
    
    

    6. 相关研究

    • 分解机(factorization machines)
    使用因式分解的方式泛化线性模型,即将2个变量间的关联转成两个低维嵌入向量之间的点积
    
    本文通过学习神经网络嵌入之间的高度非线性关联,替代点积,从而扩展了模型的能力
    
    • 语言模型中的RNN
    对
    递归神经网络RNNs(Recurrent Neural Networks)和
    带语言模型特征的最大熵模型(Maximum entopy models with n-gram features)
    进行联合训练(joint training)
    
    学习输入和输出的直接权重,从而显著降低RNN的复杂度
    
    • 计算机视觉
    1) 深度残差网络
        a) 降低训练更深度模型的难度
        b) 通过跳跃传递(shortcut connections)来提高准确性
    
    2) 对带图像模型的神经网络进行联合训练(joint training)可以从图片中识别人体姿势
    
    • 推荐系统
    1) 内容信息深度学习和协同过滤评分矩阵合二为一,组成协同深度学习(collaborative deep learning)
    
    2) app推荐系统AppJoy,对用户使用记录使用协同过滤
    
    • 本文所用方法
    本文对前馈神经网络和线性模型进行联合训练(joint training)
    将稀疏特征和输出单元直接关联
    用于稀疏输入数据的推荐和排序问题
    
    之前类似研究使用的方法基于协同过滤或基于内容
    本文在用户和展示数据(impression data)的基础上训练广度和深度相结合的模型
    
    

    7. 总结

    记忆和泛化是推荐系统重要的两个方面
    
    广度线性模型借助向量叉积变换,能够有效记忆稀疏特征的关联
    
    深度神经网络可以通过低维嵌入泛化出之前未见的特征关联
    
    广度和深度结合的学习框架(Wide & Deep learning framework)将两种方式的优点
    
    本文将该方法在Google Play产品化,并评估了它的效果
    
    在线实现结果显示,相较于单纯的广度或深度模型,广度和深度结合的模型显著改善了app获得率
    
    
    <参考资料>:

    a) TensorFlow Wide And Deep 模型详解与应用(作者:汪剑)
    https://blog.csdn.net/heyc861221/article/details/80131369

    b) TensorFlow Wide And Deep 模型详解与应用二(作者:汪剑)
    https://blog.csdn.net/heyc861221/article/details/80131373

    c) ROC与AUC的定义与使用详解
    https://blog.csdn.net/shenxiaoming77/article/details/72627882

    相关文章

      网友评论

          本文标题:论文阅读笔记 Wide & Deep Learning for

          本文链接:https://www.haomeiwen.com/subject/sjvdcctx.html