循环神经网络就是为了学习卷积神经网络中权值共享等思路,来处理序列化数据, 这就造成了他们有很多类似的地方。

RNN与CNN的区别主要在输入形式上:

循环神经网络是一类用于处理序列数据的神经网络。卷积神经网络是一类用于处理网格化数据(如一个图像)的神经网络。

循环网络可以扩展到更长的序列。大多数循环网络也能处理可变长度的序列。卷积网络可以很容易地扩展到具有很大宽度和高度的图像,以及处理大小可变的图像。

循环图

展开图能够明确描述其中的计算流程。 展开图还通过显式的信息流动路径帮助说明信息在时间上向前(计算输出和损失) 和向后(计算梯度)的思想

RNN 加CNN能增强识别效果吗 rnn和cnn区别_RNN 加CNN能增强识别效果吗

(图片来源:花书page321)

最简单的RNN形式

RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_02

在左边循环图中,x是神经网络的输入,U是输入 层到隐藏层之间的权重矩阵,W是记忆单元到隐 藏层之间的权重矩阵,V是隐藏层到输出层之间 的权重矩阵,S是隐藏层的输出,同时也是要保存 到记忆单元中,并与下一时刻的一起作为输入, O是神经网络的输出。【这里的W, V, U, 和全连接网络中的参数矩阵相同。】

从左边的展开图中,可以看出,RNN每个时刻隐藏层的输出传递给下一个时刻,因此每个时刻的网络都会保留一定的来自之前时刻的历史信息,并结合当前时刻的网络状态一并再传给下一时刻。

前向传播

RNN 加CNN能增强识别效果吗 rnn和cnn区别_rnn_03

假设我们有一个1000ms长度的语音样本,内容是“早上好”。我么可以10ms取一个样本向量,那么共有100个样本向量。每一个向量进行重采样,得到160维,因此我们有一个RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_04的矩阵, t=100.比如说t=1 to 30, 对应zao,t=31 to 70, 对应shang, t=71 to 100, 对应hao. 又假定词袋标签有6000个,那么输出O向量的维度就是RNN 加CNN能增强识别效果吗 rnn和cnn区别_rnn_05。上图就是不同样本向量进入RNN网络进行训练的前向传播过程.

假定中间隐藏层有神经元1000个,那么RNN 加CNN能增强识别效果吗 rnn和cnn区别_RNN 加CNN能增强识别效果吗_06的维度就是1000,RNN 加CNN能增强识别效果吗 rnn和cnn区别_rnn_07的维度就是RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_08。因此,对于RNN 加CNN能增强识别效果吗 rnn和cnn区别_深度学习_09, 有
RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_10
对于RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_11,有
RNN 加CNN能增强识别效果吗 rnn和cnn区别_rnn_12
其中RNN 加CNN能增强识别效果吗 rnn和cnn区别_深度学习_13是维度是160的一维向量, RNN 加CNN能增强识别效果吗 rnn和cnn区别_深度学习_14均为RNN 加CNN能增强识别效果吗 rnn和cnn区别_rnn_05的一维向量, RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_16RNN 加CNN能增强识别效果吗 rnn和cnn区别_神经网络_17的一维向量。可见,RNN就是通过共享RNN 加CNN能增强识别效果吗 rnn和cnn区别_rnn_18三个参数矩阵进行训练学习的。如果不做权值共享,每个时刻都有自己的矩阵,那么可见参数量会随着时间尺度增加而增加。这里的权值共享的一个优点就是减少了100倍的参数量。而且另一个优点就是能适应不同数量的序列样本集。

后向传播

对于所有的输出,我们要把所有的输出预测与标签之间的差别加和起来才能得到损失函数
RNN 加CNN能增强识别效果吗 rnn和cnn区别_神经网络_19
因此我们要针对不同的输出结点进行求导
RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_20
这里每个对输出的梯度维度都是RNN 加CNN能增强识别效果吗 rnn和cnn区别_神经网络_17

我们可以先回忆全连接FC网络的时候,对于一个隐藏层RNN 加CNN能增强识别效果吗 rnn和cnn区别_rnn_22, 我们有
RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_23
这里也类似,我们先考虑对各个隐藏层的输入输出进行求导。对于倒数的两个时刻,有
RNN 加CNN能增强识别效果吗 rnn和cnn区别_深度学习_24
一直到头两个时刻
RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_25
这里仍要注意, RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_26, 或者RNN 加CNN能增强识别效果吗 rnn和cnn区别_深度学习_27

下一步就是针对参数进行求导。在RNN中,有三个参数矩阵。我们先看RNN 加CNN能增强识别效果吗 rnn和cnn区别_神经网络_28,因为RNN有多个输出RNN 加CNN能增强识别效果吗 rnn和cnn区别_神经网络_29,因此对RNN 加CNN能增强识别效果吗 rnn和cnn区别_深度学习_30
RNN 加CNN能增强识别效果吗 rnn和cnn区别_深度学习_31
【参数矩阵在前】
RNN 加CNN能增强识别效果吗 rnn和cnn区别_rnn_32
类似,对于U和S有
RNN 加CNN能增强识别效果吗 rnn和cnn区别_深度学习_33
【这里要注意,从图中可以看出,W存在于不同时刻之间,因此只有t-1项。而且从中我们也可以看出一点技巧,针对对输入输出求导,我们要看向量有几个箭头输出,比如说RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_34,它有两个箭头输出,分别指向RNN 加CNN能增强识别效果吗 rnn和cnn区别_RNN 加CNN能增强识别效果吗_35RNN 加CNN能增强识别效果吗 rnn和cnn区别_神经网络_36,因此分别考虑对这两个向量求偏导,而RNN 加CNN能增强识别效果吗 rnn和cnn区别_深度学习_37都只有一个箭头输出。针对参数求导,我们就看这个参数的箭头连接的两个向量,比如说W, 它连接的就是RNN 加CNN能增强识别效果吗 rnn和cnn区别_RNN 加CNN能增强识别效果吗_38RNN 加CNN能增强识别效果吗 rnn和cnn区别_RNN 加CNN能增强识别效果吗_39,那就先对箭头末端求导,然后乘以箭头后端的向量】

因此有
RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_40

RNN 加CNN能增强识别效果吗 rnn和cnn区别_RNN 加CNN能增强识别效果吗_41

RNN 加CNN能增强识别效果吗 rnn和cnn区别_深度学习_42

但是我们可以发现一个问题,除了在求对参数的梯度是矩阵乘以矩阵,可以并行,前向传播,还有对输入输出向量求导,却都是向量和矩阵的乘法,没有办法做到矩阵乘以矩阵。因此在GPU中,RNN没有办法做batch训练,发挥GPU性能。

比如说前向传播中,RNN 加CNN能增强识别效果吗 rnn和cnn区别_深度学习_43, 也就是RNN 加CNN能增强识别效果吗 rnn和cnn区别_RNN 加CNN能增强识别效果吗_44依赖RNN 加CNN能增强识别效果吗 rnn和cnn区别_RNN 加CNN能增强识别效果吗_45, RNN 加CNN能增强识别效果吗 rnn和cnn区别_RNN 加CNN能增强识别效果吗_45依赖RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_47RNN 加CNN能增强识别效果吗 rnn和cnn区别_rnn_48依赖RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_49也就是当RNN 加CNN能增强识别效果吗 rnn和cnn区别_神经网络_50输入时,RNN 加CNN能增强识别效果吗 rnn和cnn区别_RNN 加CNN能增强识别效果吗_44RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_47没有办法同时算好,没有办法进行并行。

再比如,反向传播中,RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_53依赖RNN 加CNN能增强识别效果吗 rnn和cnn区别_RNN 加CNN能增强识别效果吗_54RNN 加CNN能增强识别效果吗 rnn和cnn区别_RNN 加CNN能增强识别效果吗_54依赖RNN 加CNN能增强识别效果吗 rnn和cnn区别_深度学习_56RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_53RNN 加CNN能增强识别效果吗 rnn和cnn区别_深度学习_56也没有办法同时算好,没有办法进行并行。

既然一句话中,无法进行并行训练,那么我们只能尝试多句并行训练。假设RNN 加CNN能增强识别效果吗 rnn和cnn区别_深度学习_59为第N句话的t个样本(以最长序列为准,不够补0),那么对于这N句话的第一个词,我们有
RNN 加CNN能增强识别效果吗 rnn和cnn区别_RNN 加CNN能增强识别效果吗_60
因此
RNN 加CNN能增强识别效果吗 rnn和cnn区别_rnn_61
RNN 加CNN能增强识别效果吗 rnn和cnn区别_神经网络_62时刻, 有
RNN 加CNN能增强识别效果吗 rnn和cnn区别_神经网络_63
因此
RNN 加CNN能增强识别效果吗 rnn和cnn区别_RNN 加CNN能增强识别效果吗_64
这样我们就可以构建针对不同句子中同一个时刻的单词(或者说样本向量)的矩阵的运算。

类似的,我们对求输入输出向量的梯度,有
RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_65
因此
RNN 加CNN能增强识别效果吗 rnn和cnn区别_循环神经网络_66

RNN 加CNN能增强识别效果吗 rnn和cnn区别_神经网络_67

RNN 加CNN能增强识别效果吗 rnn和cnn区别_神经网络_68

这样,也能对输入输出向量的梯度进行并行计算了。