前言
2019年阿里团队发表在CIKM上的论文“Multi-Interest Network with Dynamic Routing for Recommendation at Tmall”,应用胶囊网络的动态路由算法来构建一个多兴趣网络MIND,是一个召回阶段的模型。
(一)背景
本文是在召回阶段的工作,来满足用户兴趣的物品的有效检索。建立「用户兴趣模型」和「寻找用户兴趣表示」是非常重要的,但由于「用户的兴趣存在着多样性」并不是一件容易的事。
现有的一些用户兴趣表示方法:
1.基于协同过滤的方法通过历史交互物品或隐藏因子来表示用户兴趣:会遇到稀疏和计算问题。
2.基于深度学习的方法用低维Embedding向量表示用户兴趣:
作者认为这是多兴趣表达的一个瓶颈,因为必须压缩所有与用户多兴趣相关的信息到一个表示向量,所以关于用户多兴趣的所有信息是混合在一起的,导致召回阶段物品检测不准确。
3.DIN在Embedding的基础上加入Attention机智:但采用attention机制对于每个目标物品,都需要重新计算用户表示,因此无法使用在召回阶段。
关于胶囊网络:
囊间动态路由算法,Dynamic Routing胶囊算法的核心就在于此处参数b的更新方法:更新参数时,综合考量了低层特征 与输出胶囊特征,由于二者都是向量,当二者同向时,即二者相似度较高,当前的低层特征更能反映图像特征,乘积为正,b权重增加,表示当前低层胶囊更被高层胶囊所“接纳”;相反,当二者反向时,代表当前低层特征与输出胶囊匹配度并不高,乘积为负,b权重减小,表示当前低层胶囊被更高层胶囊所“排斥”。通过这样的权重更新方式建立起了低层特征与高层特征的关联,使模型更能“理解”图像。
“胶囊”是一组聚合起来输出整个向量的小神经元。采用动态路由学习胶囊之间的连接权值,并利用期望最大化算法(EM)对其进行改进,克服了一些不足,获得了更好的精度。
主要贡献:
文章关注的是在召回阶段用户的多兴趣的问题,提出了使用动态路由的多兴趣网络(MIND) 来学习用户表示。
最主要的「创新点」是:采用胶囊网络的动态路由算法来获得用户多兴趣表示,将用户的历史行为聚集成多个集合内容,每一组历史行为进一步用于推断对应特定兴趣的用户表示向量。这样,对于一个特定的用户,MIND输出了多个表示向量,它们共同代表了用户的不同兴趣。用户表示向量只计算一次,可用于在匹配阶段从十亿个尺度的物品中检索相关物品。
(二)MIND模型
MIND网络结构图2.1MIND模型问题定义
任务目标
召回任务的目标是对于每一个用户从十亿规模的物品池检索出包含与用户兴趣相关的上千个物品集。
模型输入
对于模型,每个样本的输入可以表示为一个三元组,其中代表与用户交互过的物品集,即用户的历史行为;表示用户的属性,例如性别、年龄等;表示为目标物品的一些特征,例如物品id和种类id等。
核心任务
学习一个函数可以将User-Item实例(原生特征)映射为用户兴趣Embedding表达集合为用户的向量表示,为embedding的维度,表示向量数量即兴趣的数量。
若=1,即其他模型(如Youtube DNN)的Embedding表示方式,物品的Embedding函数为:其中,表示一个Embedding&Pooling层。
最终结果
根据评分函数检索得到top N个候选项:
根据评分函数检索:即根据目标物品与用户表示向量的内积的最大值作为相似度依据,DIN的Attention部分也是以这种方式来衡量两者的相似度。
2.2Embedding和Pooling层
Embedding层的输入由三部分组成,用户属性、用户行为和目标物品标签。每一部分都由多个id特征组成,则是一个高维的稀疏数据,因此需要Embedding技术将其映射为低维密集向量。
- 对于的id特征(年龄、性别等)是将其Embedding向量进行拼接,组成用户属性Embedding ;
- 目标物品通常包含其他分类特征id(品牌id、店铺id等) ,这些特征有利于物品的冷启动问题,需要将所有的分类特征的Embedding向量进行平均池化,得到一个目标物品向量;
- 对于用户行为由物品的Embedding向量组成「用户行为Embedding列表」,
2.3多兴趣提取层
相对于单一向量进行用户兴趣表示,作者采用多个表示向量来分别表示用户不同的兴趣。通过这个方式,在召回阶段,用户的多兴趣可以分别考虑,对于兴趣的每一个方面,能够更精确的进行物品检索。
为了学习多兴趣表示,作者利用胶囊网络表示学习的动态路由将用户的历史行为分组到多个簇中。来自一个簇的物品应该密切相关,并共同代表用户兴趣的一个特定方面。
动态路由
“胶囊”是一种用一个向量表示的新型神经元,而不是普通神经网络中使用的一个标量。基于向量的胶囊期望能够表示一个实体的不同属性,其中胶囊的方向表示一个属性,胶囊的长度用于表示该属性存在的概率。
动态路由是胶囊网络中的迭代学习算法,用于学习低水平胶囊和高水平胶囊之间的路由对数 (logit),来得到高水平胶囊的表示。
我们假设胶囊网络有两层,即低水平胶囊和高水平胶囊,表示胶囊的个数表示每个胶囊内的神经元个数(向量长度)。路由对数 通过以下计算得到并进行更新:其中表示待学习的双线性映射矩阵(在胶囊网络的原文中称为转换矩阵)。
通过计算路由对数,将高阶胶囊的候选向量计算为所有低阶胶囊的加权和:
其中定义为连接低阶胶囊和高阶胶囊的权重【称为耦合系数】,而且其通过对路由对数执行softmax来计算:
最后,应用一个非线性的“压缩”函数来获得一个高阶胶囊的向量【胶囊网络向量的模表示由胶囊所代表的实体存在的概率】
路由过程重复进行3次达到收敛。当路由结束,高阶胶囊值固定,作为下一层的输入。
B2I动态路由
作者认为原始路由无法直接应用于处理用户行为数据,于是提出了行为到兴趣(B2I)动态路由自适应地将用户行为聚合到用户的兴趣表示中去。三个创新点:
- 共享双向映射矩阵:一方面,用户行为是可变长度的,从几十个到几百个不等,因此使用适应的双线性映射矩阵是可推广的。另一方面,希望兴趣胶囊在同一个向量空间中,但不同的双线性映射矩阵将兴趣胶囊映射到不同的向量空间中。
其中是历史物品的embedding,是兴趣胶囊的向量,双向映射关系矩阵是在每一对行为胶囊低阶和兴趣胶囊高阶之间共享。 - 随机初始化路由对数。由于利用共享双向映射矩阵,初始化路由对数为0将导致相同的初始的兴趣胶囊,为了避免不同兴趣胶囊在所有时刻都保持相同的情景,我们对矩阵通过高斯分布进行随机采样来初始化路由对数。类似于K-Means聚类算法。
- 动态兴趣数量。不同用户可能拥有的兴趣胶囊数量不同,引入一种启发式规则动态调整不同用户的K值。
采用多个向量来表达 User 不同的兴趣,将 User 的历史行为分组到多个 Interest Capsules 的过程。实现逻辑如下:
输入:
- User行为序列特征Embedding,
- 迭代次数
- 兴趣胶囊个数
输出:
- 兴趣胶囊Embedding,
定义:
(1) 动态兴趣个数
(2)低阶行为向量Embedding表达:代表User的行为向量(同)
(3)高阶兴趣向量Embedding表达:代表User的兴趣向量(同)
(4)行为向量与兴趣向量之间的路由logit:
(5)双线性映射矩阵:
步骤:
(1) 计算兴趣Embedding个数
(2)初始化(使用正态分布初始化)
(3)遍历迭代次数
(3.1)对所有的行为路由,计算
(3.2)对所有的兴趣路由,计算和
(3.3)迭代更新其中是一个共享矩阵
2.4标签意识的注意力层
通过多兴趣提取层,多个兴趣胶囊从用户行为embedding建立。在训练期间,我们设计一个标签意识注意力层:让标签(目标)物品选择使用过的兴趣胶囊。特别的,对于每一个标签物品,计算兴趣胶囊和标签物品embedding之间的相似性,并且计算兴趣胶囊的权重和作为目标物品的用户表示向量,通过相应的兼容性确定一个兴趣胶囊的权重。
2.5训练与服务
训练
得到用户向量和标签物品embedding后,计算用户和标签物品交互的概率:
网友评论