把Encoder的最后一个隐状态赋值给
c
c
c,还可以对最后的隐状态做一个变换得到
c
c
c,也可以对所有的隐状态做变换
拿到c之后,就用另一个RNN网络对其进行解码(Decoder),将c当做之前的初始状态
h
0
h_{0}
h0输入到Decoder中
还有一种做法是将
c
c
c当做每一步的输入
Attention
在Encoder-Decoder结构中,Encoder把所有的输入序列都编码成一个统一的语义特征
c
c
c再解码,因此,
c
c
c中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈
Attention机制通过在每个时间输入不同的
c
c
c来解决这个问题
每一个
c
c
c会自动去选取与当前所要输出的
y
y
y最合适的上下文信息。具体来说,我们用
α
i
j
\alpha_{ij}
αij衡量Encoder中第
j
j
j阶段的
h
j
h_{j}
hj和解码时第
i
i
i阶段的相关性,最终Decoder中第
i
i
i阶段的输入的上下文信息
c
i
c_{i}
ci就来自于所有
h
j
h_{j}
hj对
α
i
j
\alpha_{ij}
αij的加权和。
α
i
j
\alpha_{ij}
αij和Decoder的第
i
i
i阶段的隐藏状态、Encoder第
j
j
j个阶段的隐藏状态有关
在Encoder的过程中保留每个RNN单元的隐藏状态(hidden state)得到(
h
1
h_{1}
h1…
h
N
h_{N}
hN),取
h
j
h_{j}
hj,表示Encoder层的隐层第
j
j
j时刻的输出
在Decoder的过程中根据
x
i
x_{i}
xi和
h
i
′
h'_{i}
hi′(这里和Encoder的
h
i
h_{i}
hi区分一下)得到
h
i
′
h'_{i}
hi′,设为
s
i
s_{i}
si
注:最开始的论文在Encoder-Decoder里面的当前Decoder的attention得分用的是
s
i
−
1
s_{i-1}
si−1和
h
j
h_{j}
hj来算,但斯坦福教材上图上确实是画的
s
i
s_{i}
si和
h
j
h_{j}
hj来算,而且后续论文大多是用的这种方式,即当前步的attention score用的当前步的隐藏状态
s
i
s_{i}
si和前面的
h
j
h_{j}
hj去算的
通过Decoder的hidden states加上Encoder的hidden states来计算一个分数,用于计算权重
e
i
j
=
s
c
o
r
e
(
s
i
,
h
j
)
e_{ij} = score(s_{i},h_{j})
eij=score(si,hj)
注:这里有很多计算方式
s
c
o
r
e
(
s
i
,
h
j
)
=
{
s
i
T
h
j
s
i
T
W
a
h
j
v
a
T
t
a
n
h
(
W
a
[
s
i
T
;
h
j
]
)
score(s_{i},h_{j}) = \left\{\begin{matrix} s^{T}_{i}h_{j}\\ s^{T}_{i}W_{a}h_{j}\\ v^{T}_{a}tanh(W_{a}[s^{T}_{i};h_{j}]) \end{matrix}\right.
score(si,hj)=⎩⎨⎧siThjsiTWahjvaTtanh(Wa[siT;hj])
softmax权重归一化
α
i
j
=
e
x
p
(
e
i
j
)
∑
k
=
1
T
x
e
x
p
(
e
i
k
)
\alpha_{ij} = \frac{exp(e_{ij})}{\sum_{k=1}^{T_{x}}exp(e_{ik})}
αij=∑k=1Txexp(eik)exp(eij)
计算
c
c
c
c
i
=
∑
j
=
1
T
x
α
i
j
h
j
c_{i} = \sum_{j=1}^{T_{x}}\alpha_{ij}h_{j}
ci=j=1∑Txαijhj
Experiment
1115-1120 after data smoothing
T = 10
features = 70
train = all * 0.7
test = all * 0.3
Test RMSE: 3.955
Test nRMSE: 0.289
nasdaq100_padding
T = 10
features = 81
train = all * 0.7
test = all * 0.3