让我们来实现目前所学的知识。Tensorflow 支持多种衍生的RNN, 这些都可以在tf.nn.rnn_cell 模块中找到。通过tf.nn.dynamic_rnn()操作也是可以实现动态RNN。
这个函数还有一个版本:就是将展开的操作添加到图形中,而不是使用循环。但这会消耗更多的内存,并没有真正的好处。因此,我们使用更新的dynamic_rnn()操作。
作为参数,dynamic_rnn()需要一个循环的网络定义和一批输入序列。序列需要具有相同的长度。该函数创建RNN到计算图的所需计算,并返回两个张量,每个时间步持有输出和隐藏状态。
现在,我们已经定义了RNN并在按照时间展开它。接下来我们需要加载数据并用tensorflow的优化器(optimizer)来训练网络即可。优化器可以使用tf.train.RMSPropOptimizer 或者tf.train.AdamOptimizer。在本章后面的章节中,我们将看到这方面的例子,并在RNN的帮助下处理实际问题。
6.1.5 Vanishing and Exploding Gradients
梯度消失和爆炸
这个章节先空着,会列为一个专题
6.1.6 Long-Short Term Memory
长短周期机器网络
这个章节也先空着。以前用这个网络做过实验,会单独列一个专题
6.1.6 Architecture Variations (RNN的结构变化)
Ps 本节主要简介RNN的各种变体的优劣
对LSTM的一个常用的扩展就是增加一个缩放内部循环连接的忘记门,让网络学会忘记(Gers, Felix A., Jürgen Schmidhuber, and Fred Cummins. “Learning to
forget: Continual prediction with LSTM.” Neural computation 12.10 (2000):
2451-2471.)。内部经常性连接的导数现在是忘记门的激活,并且可以与一个的值不同。只要记住单元格的上下文是非常重要的,网络仍然可以学会离开忘记门。
将忘记门初始化为一个值,以便单元格开始记忆状态,这点非常重要的。现在几乎所有的忘记门是实现默认值。在TensorFlow中,我们可以通过给LSTM层指定forget_bias参数来初始化忘记门的偏置值。默认值是一个值,通常是最好的值。
另一种扩展是peephole connections ,其允许门去查看细胞的状态(Gers,
Felix A., Nicol N. Schraudolph, and Jürgen Schmidhuber. “Learning precise
timing with LSTM recurrent networks.” The Journal of Machine Learning Research
3 (2003): 115-143. )。作者声称,当任务涉及精确的时间和间隔时,窥视孔连接是有益的。 TensorFlow的LSTM层支持窥视孔连接,可以通过将use_peepholes = True标志传递给LSTM层来激活它们。
基于LSTM的这个思想,在2014年人们提出一种门控循环单元(GRU)来替代存储单元(Chung, Junyoung, et al. “Empirical evaluation of gated recurrent
neural networks on sequence modeling.” arXiv preprint arXiv:1412.3555 (2014). )。与LSTM相比,GRU具有更简单的架构,并且需要更少的计算,而产生结果也差不多。 GRU没有输出门,将输入和忘记门组合成一个更新门。
更新门决定了内部状态与候选激活的混合程度。候选激活从由所谓的复位门和新输入确定的隐藏状态的一小部分计算。Tensorflow的GRU层被称为GRUCell,这一层除了单元格数量意外,不需要其他的参数。如果要进一步了解,建议阅读Jozefowicz等人在2015年发表的论文, Jozefowicz本人是探索循环神经元的细胞结构的(Jozefowicz, Rafal, Wojciech Zaremba, and Ilya Sutskever. “An empirical exploration of recurrent network architectures.” Proceedings of the 32nd International Conference on Machine Learning (ICML-15). 2015. )
目前我们已经了解了RNN以及RNN的链接的隐含单元。上图是一个普通的RNN结构,由于网络可以在训练期间可以学习,所以不需将权重设置为0. 然而,更为常见的是将两层或者更多层完全链接的RNN层叠在一起。这仍然可以被看作是一个有一定结构的RNN。由于信息只能在层间向上流动,因此多层RNN的权重比巨大的全连接RNN少,往往会学到更多的抽象特征。
先翻译到这里。这周末开始翻译6.2……
By 2017年12月19日星期二