作者:氤氲微凉521 | 来源:互联网 | 2023-08-25 08:03
RNN基本公式在普通神经网络中引入了隐藏状态httanh(wihxt+bih+whhht−1+bhh)h_ttanh(w_{ih}x_t+b_{ih}+w_{hh}h_{t-1}+
RNN基本公式
在普通神经网络中引入了隐藏状态
ht=tanh(wihxt+bih+whhht−1+bhh)h_t=tanh(w_{ih}x_t+b_{ih}+w_{hh}h_{t-1}+b_{hh})ht=tanh(wihxt+bih+whhht−1+bhh)
什么是Dynamic RNN
静态RNN:由于静态RNN需要预先指定seq_len,所以所有数据都必须使用同一个seq_len,即每一个batch的seq_len是一致的
动态RNN:由于利用循环次数实现了seq_len的作用,所以不同的batch可以有不同的seq_len,但是同一个batch内的seq_len还是保持一致的
注:左图和右图等价,但是右图等于把左图展开了,右图即static rnn,左图为更紧凑的dynamic rnn
为什么要用batch呢?
- 因为batch size可以加速训练
- 而且可以根据一个batch内的样本来更新参数,防止梯度下降的随机性,易于收敛
- 但是更大的batch会陷入局部最优值
为什么要用Dynamic RNN
dynamic RNN可以让不同迭代传入的batch可以是长度不同的数据,但同一次迭代一个batch内部的所有数据长度仍然是固定的。例如,第一时刻传入的数据shape=[batch_size, 10],第二时刻传入的数据shape=[batch_size, 12],第三时刻传入的数据shape=[batch_size, 8]等等;一般通过为batch内不同长度的sequence进行补零操作至相同长度后,与真实seq_len一同输入模型实现。
如何在pytorch中实现Dynamic RNN
参考来源:
动态RNN和静态RNN区别
如何理解RNN中的Batch_size?
tensor flow dynamic_rnn 与rnn有啥区别?
[莫烦 PyTorch 系列教程] 5.1 – 为什么 Torch 是动态的
训练神经网络时如何确定batch size?