输入和输入张量流和最优TBPTT中的递归神经网络的目标张量

时间:2017-08-24 22:46:28

标签: python tensorflow recurrent-neural-network backpropagation

我有一些关于张量流中RNN的基本问题(在撰写本文时为v1.3)。

我认为我对RNN(+ LSTM)非常了解。除了其他内容,我还阅读了Sutskever's PhD ThesisGrave's Generating Sequences以及其他一些论文/文章。我的问题更多的是关于张量流的使用以及如何设置输入/目标张量来做截断后传播(TBPTT)。

说我想训练一个RNN来预测下一个项目(比如char-rnn)。

即。学习P(x_{t+1} | x_{t-n:t}),其中n是最大序列长度。这有效P(x_{t+1} | x_t, c_t, h_t) c_t, h_t cell statehidden state时间步t

对我来说似乎最合乎逻辑(假设我想学习依赖最多n次步骤):

方法1(TBPTT(n,1):

  • 如果我的语料库是L项目长(例如10000),我会将其分为(L-n)个迷你序列(或桶)每n个项目长(例如50),沿着每个桶移动1个项目
  • 我的输入张量是[batch_size,n,x_dim]
  • 我的目标张量是[batch_size, 1 ,y_dim] #y_dim是x的pdf暗淡
  • 我的隐藏状态张量将是[batch_size,cell_size] * num_layers(如果LSTM则为* 2)
  • 在每个批次的开头,我会将状态归零。我甚至会在每个时代随机化桶的顺序。

因此,如果我的整个语料库是字母表(ABC ... XYZ),并且n是5,那么我的训练对是:

  • [A,B,C,D,E] - > [F]
  • [B,C,D,E,F] - > [G]
  • [C,D,E,F,G] - > [H]

等。然后这些都被批量化了。

但是,我见过的所有示例(例如https://github.com/sherjilozair/char-rnn-tensorflowhttps://r2rt.com/recurrent-neural-networks-in-tensorflow-i.htmlhttps://medium.com/@erikhallstrm/hello-world-rnn-83cd7105b767#.ozeai0fo8)都采用了不同的方式。相反,目标张量与输入张量具有相同的尺寸(包括铲斗长度),桶中有无重叠,状态仅清除在时代。 e.g

方法2(TBPTT(n,n)):

  • [A,B,C,D,E] - > [B,C,d,E,F]
  • [F,G,H,I,J] - > [G,H,I,J,K]
  • [K,L,M,N,O] - > [L,M,N,O,P]
  • [P,Q,R,S,T] - > [Q,R,S,T,U]
  • [U,V,W,X,Y] - > [V,W,X,Y,Z]

我可以理解这一点,如果内部张量流正在评估损失并在迷你序列(即桶)的每一步执行TBPTT 而不是仅仅在迷你序列结束时执行此操作 (桶)。我没有得到的是,如果是这样的话,那么错误会在一个项目中途传播到项目的前面多远?即对于后一种情况下的第二个训练例子,[H]以[F,G]或[C,D,E,F,G]为条件(因为它显然是在我解释的第一种方法中)。

这是假设使用tf的本机rnn API,例如tf.nn.dynamic_rnn。

This article确认并说明了张量流确实计算了损失并在迷你序列/桶的每一步执行TBPTT,但仅限于每个桶的开头

TBPTT(n,1),L = 6,n = 3(我提出的第一种方法)

TBPTT(n,1) for L=6, n=3

TENSORflow TBPTT,L = 6,n = 3

Tensorflow TBPTT for L=6, n=3

但是我的问题仍然存在,如果这个(即默认的tensorflow方法)是一个很好的方法(特别是如果我们只想学习最多n次步长依赖)。

据我所知,即使tf的TBPTT仅将梯度传播到桶的开头,状态也会在桶之间保留(即参见上面的第二个图),一个小批量的最终状态被送入第二个。但是,我不明白这将如何保持并行处理的批次的连续性。即如果我们的小批量大小为2,则一批

[[A,B,C,D,E] -> [B,C,D,E,F], [F,G,H,I,J] -> [G,H,I,J,K]]

[A,B,C,D,E] - > [B,C,D,E,F]与[F,G,H,I,J] - >并行处理。 [G,H,I,J,K],他们之间没有任何状态。因此,如何批量分割数据变得非常重要,并且不会将相邻的桶放在同一批次中,而是放在相邻的批次中。即组织批次最好:

  • 批次1:[[A,B,C,D,E] - > [B,C,D,E,F],[K,L,M,N,O] - > [L,M,N,O,P]]
  • 批次2:[[F,G,H,I,J] - > [G,H,I,J,K],[P,Q,R,S,T] - > [Q,R,S,T,U]]

但即使在这种情况下,由于并行处理,没有很多不连续性?例如[L]不以[G,H,I,J,K]为条件。

0 个答案:

没有答案