1. Seq2Seq的编码向量是怎么计算的
- 对于encoder隐层输出
{
h
1
,
h
2
,
.
.
.
,
h
T
}
\{h_1,h_2,...,h_T\}
{h1,h2,...,hT},有2种编码形式:
- 仅取最后一个时刻的隐层状态 h t h_t ht作为整个序列的编码表示
- 将所有时刻的隐层状态 { 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} st−1,计算 s t − 1 s_{t-1} st−1 与 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(st−1,hj) |
通过计算 s t − 1 s_{t-1} st−1 与 { 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,...,atT∥atj=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(st−1,yt−1,ct),以及decoder输出 |
- 关于
e
t
j
=
s
i
m
(
s
t
−
1
,
h
j
)
e_{tj}=sim(s_{t-1},h_j)
etj=sim(st−1,hj) 的相似度计算方法,有以下几种:
- 点乘: 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(st−1,hj)=st−1Thj
- 加权点乘, 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(st−1,hj)=st−1TWhj
- 加和, 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(st−1,hj)=vTtanh(W1st−1T+W2hj)