实战Google深度学习框架 笔记-第8章 循环神经网络-1-前向传播。 Github: RNN-1-Forward_Propagation.ipynb
运算的流程图可参考下面这张图

RNN Forward Propagation
RNN 前向传播知识回顾

$a^{<0>}=\vec{0}$
$a^{<1>}=g_1(W_{aa}a^{<0>}+W_{ax}x^{<1>}+b_a)$
$y^{<1>}=g_2(W_{ya}a^{<1>}+b_y)$
$a^{<{t}>}=g_1(W_{aa}a^{<{t-1}>}+W_{ax}x^{<{t}>}+b_a)$
$y^{<{t}>}=g_2(W_{ya}a^{<{t}>}+b_y)$
激活函数:$g_1$ 一般为
tanh
函数 (或者是Relu
函数),$g_2$ 一般是Sigmod
函数.注意: 参数的下标是有顺序含义的,如 $W_{ax}$ 下标的第一个参数表示要计算的量的类型,即要计算 $a$ 矢量,第二个参数表示要进行乘法运算的数据类型,即需要与 $x$ 矢量做运算。如 $W_{ax} x^{t}\rightarrow{a}$
1. 定义RNN的参数
这个例子是用np写的,没用到tensorflow
1 | import numpy as np |
2. 执行前向传播的过程
1 | # 按照时间顺序执行循环审计网络的前向传播过程 |
output:
1 | iteration round: 1 |
和其他神经网络类似,在定义完损失函数之后,套用第4章中介绍的优化框架TensorFlow就可以自动完成模型训练的过程。这里唯一需要特别指出的是,理论上循环神经网络可以支持任意长度的序列,然而在实际中,如果序列过长会导致优化时出现梯度消散的问题(the vanishing gradient problem) (8) ,所以实际中一般会规定一个最大长度,当序列长度超过规定长度之后会对序列进行截断。