BST: Behavior Sequence Transformer中的self attention过程详解
文章地址:Behavior Sequence Transformer for E-commerce Recommendation in Alibaba

1. BST网络简介

1.1 核心思想:WDL 和 DIN没有考虑序列间的相互依赖关系,本论文使用了NTM中transformer层的方法,来捕捉这种关系。

1.2 输入特征
输入特征有两部分:用户序列特征和其他特征(user, item, context, cross等)。其中用户序列中的每一个item有两部分组成:sequence item feature 和positional feature。注意图1,这里的用户序列也包含了target item及其position。

  • sequence item feature:使用item_id和category_id
  • positional feature: 商品viv_i的位置特征计算:pos(vi)=t(vt)t(vi)pos(v_i) = t(v_t)-t(v_i),即商品的点击时间与当前target item的推荐时间之间的gap。这里加入的position feature相当于<<attention is all you need>>里的postitional encoding,只是本论文中没有使用sin/cos的编码方法,而是更直接地将postional feature与item feature进行了concat.

1.3 transformer layer

  • transformer layer主要实现了<<attention is all you need>>里的multi-head self attention + Point-wised FFN 结构(即encoder结构)

  • multi-head self attention:
    Attention(Q,K,V)=softmax(QKTd)V(3)Attention(\boldsymbol {Q, K, V}) = softmax(\frac{\boldsymbol {QK}^{T}}{\sqrt d})\boldsymbol V \tag3
    其中Q, K, V即Query, Key 和Value,是同一个item通过不同的权值矩阵WQ,Wk,WV\boldsymbol {W^Q, W^k, W^V}学习得到;d为embedding size。此处的attention抽象为对Value中的每个item进行加权,而加权所用到的weight就是式(3)所计算得到的,即用Query和Key来决定注意力应该放到value中的哪个item上。Query之所以叫query(查询),是因为每次都用一个embedding vector去查询其与其他的embedding vector的match程度。一共要做n轮这种操作,n为1个batch中的序列个数。

    multi-head:将Q, K 和V在embedding size维度上投影h次,分别进行学习,最后concat起来作为attention的最终输出。使用multi head是为了使模型能够自适应地学到不同子空间下的序列信息。这里与CNN的feature map思想有些类似,使用相同形状的多个feature map,以期待模型能够自动学习到不同子空间下的特征。
    S=MH(E)=Concat(head1,head2,...,headh)WH(4) \boldsymbol S = MH(\boldsymbol E) = Concat(head_1, head_2, ..., head_h)\boldsymbol W^H \tag4

  • Point-Wised Feed-Forward Networks
    F=FFN(S)(5) F = FFN(\boldsymbol S)\tag5
    FFN中应用了normalization和residual blocks。self attention和FFN中都应用了dropout和LeakyReLU来避免过拟合。

  • 叠加多层self attention和FFN模块:
    Sb=SA(F(b1))(6) \boldsymbol S^b = SA(F^{(b-1)})\tag6
    Fb=FFN(Sb),i1,2,...,n.(7) \boldsymbol F^b = FFN(\boldsymbol S^b), \forall i \in 1, 2, ..., n.\tag7
    叠加多层模块是为了模型能够更好地学习序列间的复杂关系。但论文的实验中证明b=1b=1时的效果最好。

2. self attention过程详解

BST: Behavior Sequence Transformer中的self attention过程详解

BST: Behavior Sequence Transformer中的self attention过程详解

在图2中,seqseq 首先经过embedding得到向量ERnxd\boldsymbol E \in \mathbb{R}^{n\rm x d}, 其中n=4n=4为序列长度,d=6d=6为embedding size. 然后E\boldsymbol E与3个相同形状的权重矩阵WQ,WK,WV\boldsymbol W_Q, \boldsymbol W_K, \boldsymbol W_V点乘,将自己映射为3个不同的矩阵Q,K,V\boldsymbol Q, \boldsymbol K, \boldsymbol V。接下来这三个矩阵会完成self attention的基本操作,即式(3)。Q\boldsymbol QK\boldsymbol K得到的attention score W\boldsymbol W作为权重,与V\boldsymbol V点乘,作为self attention的输出。

图3在图2的基础上加入了multi head 操作,即将Q,K,V\boldsymbol Q, \boldsymbol K, \boldsymbol V在embedding size dd 的维度拆分为hh个矩阵(图中h=3),分别进行self attention 操作,得到的结果再concat起来作为最终的输出。

参考文献:
[1] multi-head attention
[2] 推荐系统遇上深度学习(四十八)-BST:将Transformer用于淘宝电商推荐
[3] 论文笔记:Attention is all you need

相关文章: