循环神经网络,它可以用来处理包含序列结构的信息。
神经网络的输入层单元个数是固定的,因此必须用循环或者递归的方式来处理长度可变的输入。
循环神经网络通过将长度不定的输入分割为等长度的小块,然后再依次的输入到网络中,从而实现神经网络对边长输入的处理。
ex: 当输入一句话,我们可以把一句话看作是词组组成的序列,然后,每次向循环神经网络输入一个词,如此循环直至整句话输入完毕,循环神经网络将产生对应的输出。
递归神经网络,可以处理图,树这样的递归结构。
递归神经网络的前向计算
递归神经网络是两个或多个子节点,输出就是两个子节点编码后产生的父节点,且父节点和子节点的维度是相同的。
c
1
c_1
c1和
c
2
c_2
c2是两个子节点的向量,
P
P
P是表示父节点的向量,每个节点的维度都是
d
d
d。子节点和父节点组成一个全连接神经网络,子节点中的每个神经元都和父节点中的每个神经元两两相连。矩阵
W
d
×
2
d
W_{d\times 2d}
Wd×2d表示每一个链接上的权重, 父节点的计算公式可以写成:
P
=
t
a
n
h
(
W
[
c
1
c
2
]
+
b
)
P=tanh(\boldsymbol{W}\begin{bmatrix} \boldsymbol{c}_1\\ \boldsymbol{c}_2\\ \end{bmatrix}+\boldsymbol{b})
P=tanh(W[c1c2]+b)
其中,tanh是激活函数。
然后,我们把产生的父节点的向量和其他字节但的向量再次作为网络的输入,和上面产生父节点的过程一样,继续产生
P
P
P的父节点…如此递归下去,直至整个树处理完毕,得到根节点的向量。这个过程可以被表示为如下图:
ex:使用递归神经网络将“两个外语学校的学生”映射为一个向量
“两个外语学院的学生“可以被理解为下面两种含义
两个 外语学院的 学生 (两个学生来自同一个外语学院)
两个 外语学院 的学生(两个学生来自不同的外语学院)
左图:两个 外语学院的 学生 右图:两个 外语学院 的学生