1.3 循环神经网络模型(Recurrent Neural Network Model)

序列模型从左到右,依次传递,此例中,Tx=TyT_x=T_yx<t>x^{<t>}y^<t>\hat y^{<t>}之间是隐藏神经元。a<t>a^{<t>}会传入到第t+1t+1元素中,作为输入。其中,a<0>a^{<0>}一般为零向量

循环神经网络是从左向右扫描数据,同时每个时间步的参数也是共享的,用WaxW_{\text{ax}}来表示管理着从x<1>x^{<1>}到隐藏层的连接的一系列参数,每个时间步使用的都是相同的参数WaxW_{\text{ax}}。而激活值是由参数WaaW_{aa}决定,同时每一个时间步都使用相同的参数WaaW_{aa},同样的输出结果由WyaW_{\text{ya}}决定:

预测y^<3>{\hat{y}}^{< 3 >}时,不仅要使用x<3>x^{<3>}的信息,还要使用来自x<1>x^{<1>}x<2>x^{<2>}的信息,而这个循环神经网络的一个缺点是只使用了这个序列中之前的信息来做出预测,因为如果给定了这个句子,“Teddy Roosevelt was a great President.”,为了判断Teddy是否是人名的一部分,仅仅知道句中前两个词是完全不够的,还需要知道句中后部分的信息,因为句子也可能是这样的,“Teddy bears are on sale!”。因此如果只给定前三个单词,是不可能确切地知道Teddy是否是人名的一部分,第一个例子是人名,第二个例子就不是,所以不可能只看前三个单词就能分辨出其中的区别

所以这样特定的神经网络结构的一个限制是它在某一时刻的预测仅使用了从序列之前的输入信息,并没有使用序列中后部分的信息

RNN的正向传播(Forward Propagation)过程为:

a<t>=g(Waaa<t1>+Waxx<t>+ba)a^{<t>}=g(W_{aa}\cdot a^{<t-1>}+W_{ax}\cdot x^{<t>}+b_a)
y^<t>=g(Wyaa<t>+by)\hat y^{<t>}=g(W_{ya}\cdot a^{<t>}+b_y)

为了简化表达式,可以对a<t>a^{<t>}项进行整合:

Waaa<t1>+Waxx<t>=[Waa  Wax][a<t1>x<t>]Wa[a<t1>,x<t>]W_{aa}\cdot a^{<t-1>}+W_{ax}\cdot x^{<t>}=[W_{aa}\ \ W_{ax}]\left[ \begin{matrix} a^{<t-1>} \\ x^{<t>} \end{matrix} \right]\rightarrow W_a[a^{<t-1>},x^{<t>}]

则正向传播可表示为:

a<t>=g(Wa[a<t1>,x<t>]+ba)a^{<t>}=g(W_a[a^{<t-1>},x^{<t>}]+b_a)
y^<t>=g(Wya<t>+by)\hat y^{<t>}=g(W_{y}\cdot a^{<t>}+b_y)

RNN前向传播示意图:

Last updated