1 什么是 seq2seq ?
seq2seq字面意思是序列到序列。一般是指下面着这种encoder-decoder结构:
x 1 , x 2 , . . . , x m → e n c o d e r ( 编码器 ) → 隐状态 → d e c o d e r ( 解码器 ) → y 1 , y 2 , . . . , y n x_1,x_2,...,x_m \rightarrow encoder(编码器) \rightarrow 隐状态 \rightarrow decoder(解码器) \rightarrow y_1,y_2,...,y_n x1,x2,...,xm→encoder(编码器)→隐状态→decoder(解码器)→y1,y2,...,yn
编码器,解码器的结构可以是RNN, LSTM, CNN,也可以是其他结构。所以DeepAR,MQRNN, MQCNN等模型都属于seq2seq模型的范畴。
seq2seq结构最初是用在自然语言处理或者语音处理等领域,比如文本预测,语音合成等。
1.1 最初的seq2seq
最先提出seq2seq的是:Graves, A. (2013). Generating sequences with recurrent neural networks. arXiv preprint arXiv:1308.0850.
该模型是用来做文本预测,手写预测,手写合成等。模型结构如下图所示:
损失函数使用的是条件概率的负对数,应该就是似然,如下图:
我看有的seq2seq用的损失函数是交叉熵损失函数tf.nn.sparse_softmax_cross_entropy_with_logits 见文献:Tensorflow中的Seq2Seq全家桶,感觉seq2seq在自然语言领域的应用场景,好多可以归结为分类场景,所以损失函数可以用交叉熵。其实具体使用哪种损失函数,要看模型的具体应用场景。
2 DeepAR
2.1 Deepar和seq2seq的区别
DeepAR的模型结构和seq2seq模型结构差不多。DeepAR的贡献在于:
- 以前神经网络主要应用在自然语言处理领域,DeepAR将神经网络模型成功应用在了时序预测上,并在真实数据上取得了很好的效果。证明时序预测也是可以使用神经网络模型的。
- 在DeepAR进行时序预测的过程中,解决了一些特定问题,比如数据量级差距大如何处理,数据的假设分布应该如何选择,时序数据应该提取哪些特征,参数如何选择等。
- 有人将神经网络模型用在断断续续的时序数据预测上,但得到的结果并不理想。
- 也有人将神经网络模型应用在时间序列上,但是一般是一个时间序列训练一个单独的模型。
- DeepAR与他们不同的地方在于,1. DeepAR预测的是整个分布特征,而不是单单预测一个值;2. 此外,对count类型的数据,DeepAR使用了负二项分布似然估计,极大的提高了模型准确率。3. 最后DeepAR一个模型可以对多个时间序列进行预测,每个时间序列给定一个编号做embedding即可。
2.2 损失函数
损失函数: DeepAR假设数据符合正太分布(实数)或者负二项分布(正整数)。损失函数使用的是对应的似然估计。如下图所示:
2.3 结构
DeepAR结构如下图所示:
图中左边是编码器,右边是解码器。
编码器: x i , t x_{i,t} xi,