Attention模型超超超超超超级攻略

1. Seq2Seq的编码向量是怎么计算的

  • 对于encoder隐层输出 { h 1 , h 2 , . . . , h T } \{h_1,h_2,...,h_T\} {h1,h2,...,hT},有2种编码形式:
    1. 仅取最后一个时刻的隐层状态 h t h_t ht作为整个序列的编码表示
    2. 所有时刻的隐层状态 { h 1 , h 2 , . . . , h T } \{h_1,h_2,...,h_T\} {h1,h2,...,hT}进行特征融合,比如将求和平均 Σ j = 1 T h j / T \Sigma_{j=1}^Th_j/T Σj=1Thj/T 的结果作为整个序列的编码表示
  • 一般来说方法2结果较好

2. Seq2Seq的编码向量是怎么使用的

  • 将encoder输出的编码向量,作为decoder每个时刻的输入特征。也即每个时刻都输入一次编码向量
    在这里插入图片描述
  • 上图也就是最基本的encoder-decoder模型
  • Attention所改进的地方就在于,原先是将 Σ j = 1 T h j / T \Sigma_{j=1}^Th_j/T Σj=1Thj/T 作为decoder每个时刻的输入,现在是对于每个时刻 t t t,都有一个不同的权重向量 ( a t 1 , a t 2 , . . . , a t T ) (a_{t1},a_{t2},...,a_{tT}) (at1,at2,...,atT),“告知”decoder,此时输入的编码序列对于所需要的输出而言,哪些特征比较重要,哪些不重要,也即 Σ j = 1 T α t j h j \Sigma_{j=1}^T\alpha_{tj}h_j Σj=1Tαtjhj
  • 也可以理解为,原先的权重向量就是 ( 1 / T , 1 / T , . . . , 1 / T ) (1/T,1/T,...,1/T) (1/T,1/T,...,1/T),也即对所有特征的注意力均相同(其实也就是都不注意)

3. Attention参数是怎么计算的

Attention 层算法流程
计算得到encoder隐层状态序列 { h 1 , h 2 , . . . , h T } \{h_1,h_2,...,h_T\} {h1,h2,...,hT}
对于decoder当前隐层输出 s t − 1 s_{t-1} st1,计算 s t − 1 s_{t-1} st1 h j h_j hj 的关联性 e t j = s i m ( s t − 1 , h j ) e_{tj}=sim(s_{t-1},h_j) etj=sim(st1,hj)
通过计算 s t − 1 s_{t-1} st1 { h 1 , h 2 , . . . , h T } \{h_1,h_2,...,h_T\} {h1,h2,...,hT} 的关联性,可以得到关联向量 e t = ( e t 1 , e t 2 , . . . , e t T ) e_t=(e_{t1},e_{t2},...,e_{tT}) et=(et1,et2,...,etT)
e t e_t et进行softmax,使其归一化并得到attention的分布 a t = { a t 1 , a t 2 , . . . , a t T ∥ a t j = e t j / Σ k = 1 T e t k } a_t=\{a_{t1},a_{t2},...,a_{tT}\|a_{tj}=e_{tj}/\Sigma_{k=1}^Te_{tk}\} at={at1,at2,...,atTatj=etj/Σk=1Tetk}
利用 a t a_t at 和编码向量计算decoder当前时刻输入 c t = Σ j = 1 T α t j h j c_t=\Sigma_{j=1}^T\alpha_{tj}h_j ct=Σj=1Tαtjhj
c t c_t ct 送入decoder后,得到下一时刻隐层输出 s t = f ( s t − 1 , y t − 1 , c t ) s_t=f(s_{t-1},y_{t-1},c_t) st=f(st1,yt1,ct),以及decoder输出
  • 关于 e t j = s i m ( s t − 1 , h j ) e_{tj}=sim(s_{t-1},h_j) etj=sim(st1,hj) 的相似度计算方法,有以下几种:
    1. 点乘 s i m ( s t − 1 , h j ) = s t − 1 T h j sim(s_{t-1},h_j)=s_{t-1}^Th_j sim(st1,hj)=st1Thj
    2. 加权点乘, s i m ( s t − 1 , h j ) = s t − 1 T W h j sim(s_{t-1},h_j)=s_{t-1}^TWh_j sim(st1,hj)=st1TWhj
    3. 加和 s i m ( s t − 1 , h j ) = v T t a n h ( W 1 s t − 1 T + W 2 h j ) sim(s_{t-1},h_j)=v_Ttanh(W_1s_{t-1}^T+W_2h_j) sim(st1,hj)=vTtanh(W1st1T+W2hj)

参考文献

  1. http://jacoxu.com/encoder_decoder/
  2. https://zhuanlan.zhihu.com/p/47063917
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值