使用RNN在NLP上的应用为例,我们用wij表示第i个句子里面的第j个词语。
这里是一个batch_size=4,sequence_length=7的数据。每个句子的长度不一定相同,也不一定需要等于sequence_length,所以使用pad这样一个特殊词语将每个句子补齐(padding)到固定长度(便于使用matrix或者tensor存储整个batch的数据)
样本1:w11 w12 w13 w14 pad pad pad
样本2:w21 w22 pad pad pad pad pad
样本3:w31 w32 w33 w34 w35 w36 w37
样本4:w41 w42 w43 w44 w45 pad pad
在时间步1,{w11, w21, w31, w41}被RNN处理;在时间步2,{w12, w22, w32, w42}被RNN处理;依此类推。
RNN处理pad的方式有很多种。例如可以把pad当作普通单词一样处理,然后提取上述batch里面的第w14,w22,w37,w45四个位置的状态;或者当一个sequence遇到pad(或者EOS)的时候停止那个sequence上的计算。以tensorflow为例的话,可以参考static_rnn, dynamic_rnn方法的区别。