Hi,大家好,我是半亩花海。本文主要将卷积神经网络(CNN)和循环神经网络(RNN)这两个深度学习主力军进行对比。我们知道,从应用方面上来看,CNN 用于图像识别较多,而 RNN 用于语言处理较多。CNN 如同眼睛一样,正是目前机器用来识别对象的图像处理器。相应地,RNN 犹如耳朵和嘴巴,用于解析语言模式的数学引擎。
目录
一、卷积神经网络
1. 特征
2. 结构
二、循环神经网络
1. 网络结构
2. 应对梯度消失问题
三、CNN 与 RNN 的异同点
1. 相同点
2. 不同点
四、CNN+RNN 的组合方式
我们可以通过形象的假设来理解这俩个神经网络模型:
卷积神经网络:通常用于计算机视觉中,可以用来图像识别和图像分类。CNN 用于提取图像的空间特征,通过不断的卷积和池化操作实现特征提取和降维。
循环神经网络:通常用于自然语言处理和语音识别中,可以用来处理时间序列数据。RNN 的主要思想是把前面的信息传递到后面,这样网络就可以利用之前的信息做出预测,能够处理序列中每个时间步的数据。
卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种具有局部连接、权重共享等特性的深层前馈神经网络。
一个卷积神经网络主要由以下 5 层组成:
- 输入层(Input layer)
- 卷积层(CONV layer,包含激活函数,比如 ReLU、sigmoid、tanh 等)
- 池化层(Pooling layer)
- 全连接层(FC layer)
- 输出层(Ouput layer)
循环神经网络(RNN,Recurrent Neural Network)是一类用于处理序列数据的神经网络。
RNN 不是刚性地记忆所有固定长度的序列,而是通过隐藏状态来存储之前时间步的信息。
可以看出,典型的 RNN 是有环结构。一个典型的 RNN 网络架构包含一个输入,一个输出和一个神经网络单元 。和普通的前馈神经网络的区别在于:RNN 的神经网络单元不但与输入和输出存在联系,而且自身也存在一个循环 / 回路 / 环路 / 回环 (loop)。这种回路允许信息从网络中的一步传递到下一步。
同时,RNN 还能按时间序列展开循环 (unroll the loop) 为如下形式:
由上图可知,上一个时刻的网络状态将会作用于到下一个时刻的网络状态,还表明 RNN 和序列数据密切相关。同时,RNN 要求每一个时刻都有一个输入,但是不一定每个时刻都需要有输出。
进一步地,公式化 RNN 的结构。单个展开的 RNN 结构如下:
RNN 的计算结构如下:
由上述表示,RNN 的经典的计算结构如下:
在图中有一条单向流动的信息流是从输入单元到达隐藏单元的,与此同时另一条单向流动的信息流从隐藏单元到达输出单元。在某些情况下,RNNs 会打破后者的限制,引导信息从输出单元返回隐藏单元,这些被称为 “Back Projections”,并且隐藏层的输入还包括上一隐藏层的状态,即隐藏层内的节点可以自连也可以互连(这实际上就是 LSTM)。
循环神经网络的输入是序列数据,每个训练样本是一个时间序列,包含多个相同维度的向量。网络的参数如何通过训练确定?这里就要使用解决 RNN 训练问题的 BPTT(Back Propagation Through Time)算法。
右侧为计算时便于理解记忆而产开的结构。简单说,x 为输入层,o 为输出层,s 为隐含层,而 t 指第几次的计算;V、W、U为权重(在 RNN 中,每一层都共享参数U、V、W,降低了网络中需要学习的参数,提高学习效率。)。 表示 t 时刻的输入, 表示 t 时刻的隐状态, 表示 t 时刻的输出。
输入单元(input units):{}
隐藏单元(hidden units):{}
输出单元(output units):{}
输入层: 表示时刻 t 的输入。
第 t 次的中间的隐含层状态为:
f 是非线性激活函数,比如 tanh。
输出层:
softmax 函数是归一化的指数函数,使每个元素的范围都在 0 到 1 之间 ,并且所有元素的和为 1。
在进行反向传播时,循环神经网络也面临梯度消失或者梯度爆炸问题,这种问题表现在时间轴上。如果输入序列的长度很长,人们很难进行有效的参数更新。通常来说梯度爆炸更容易处理一些。梯度爆炸时我们可以设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取。
应对梯度消失问题:
(1)神经网络结构: 两者都是深度神经网络,包含大量的神经元和层级结构。
(2)权重共享: 在训练过程中,两者都使用权重共享的概念。通过在不同的位置或时间步共享相同的权重参数,从而减少参数数量和提高模型的泛化能力。
(3)端到端学习: 两者都支持端到端的学习,即从原始输入数据到最终输出的直接学习。
(1)数据类型
(2)局部连接和权重共享
(3)结构设计
(4)适用任务
(5)并行性
总的来说,CNN 适用于处理空间结构的数据,而 RNN 适用于处理时序关系的数据。在某些任务中,这两者也可以结合使用,形成更复杂的神经网络结构,例如将 CNN 和 RNN 组合用于图像描述生成。