Encoder-Decoder(Seq2Seq)

- Encoder-Decoder结构先将输入数据编码成一个上下文向量ccc
- 把Encoder的最后一个隐状态赋值给ccc,还可以对最后的隐状态做一个变换得到ccc,也可以对所有的隐状态做变换
- 拿到c之后,就用另一个RNN网络对其进行解码(Decoder),将c当做之前的初始状态h0h_{0}h0输入到Decoder中
- 还有一种做法是将ccc当做每一步的输入

Attention
- 在Encoder-Decoder结构中,Encoder把所有的输入序列都编码成一个统一的语义特征ccc再解码,因此,ccc中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈
- Attention机制通过在每个时间输入不同的ccc来解决这个问题

- 每一个ccc会自动去选取与当前所要输出的yyy最合适的上下文信息。具体来说,我们用αij\alpha_{ij}αij衡量Encoder中第jjj阶段的hjh_{j}hj和解码时第iii阶段的相关性,最终Decoder中第iii阶段的输入的上下文信息cic_{i}ci就来自于所有hjh_{j}hj对αij\alpha_{ij}αij的加权和。
- αij\alpha_{ij}αij和Decoder的第iii阶段的隐藏状态、Encoder第jjj个阶段的隐藏状态有关
- 在Encoder的过程中保留每个RNN单元的隐藏状态(hidden state)得到(h1h_{1}h1…hNh_{N}hN),取hjh_{j}hj,表示Encoder层的隐层第jjj时刻的输出
- 在Decoder的过程中根据xix_{i}xi和hi′h'_{i}hi′(这里和Encoder的hih_{i}hi区分一下)得到hi′h'_{i}hi′,设为sis_{i}si
- 注:最开始的论文在Encoder-Decoder里面的当前Decoder的attention得分用的是si−1s_{i-1}si−1和hjh_{j}hj来算,但斯坦福教材上图上确实是画的sis_{i}si和hjh_{j}hj来算,而且后续论文大多是用的这种方式,即当前步的attention score用的当前步的隐藏状态sis_{i}si和前面的hjh_{j}hj去算的
- 通过Decoder的hidden states加上Encoder的hidden states来计算一个分数,用于计算权重
eij=score(si,hj) e_{ij} = score(s_{i},h_{j}) eij=score(si,hj) - 注:这里有很多计算方式
score(si,hj)={siThjsiTWahjvaTtanh(Wa[siT;hj]) 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权重归一化
αij=exp(eij)∑k=1Txexp(eik) \alpha_{ij} = \frac{exp(e_{ij})}{\sum_{k=1}^{T_{x}}exp(e_{ik})} αij=∑k=1Txexp(eik)exp(eij) - 计算ccc
ci=∑j=1Txαijhjc_{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
Encoder: LSTM
Decoder: LSTM

Test RMSE: 0.579
Test nRMSE: 0.105
Encoder: BiLSTM
Decoder: LSTM

Test RMSE: 0.384
Test nRMSE: 0.069
Encoder: GRU
Decoder: LSTM

Test RMSE: 0.252
Test nRMSE: 0.046