Hi,大家好,我是半亩花海。本文主要将卷积神经网络(CNN)和循环神经网络(RNN) 这两个深度学习主力军 进行对比。我们知道,从应用方面上来看,CNN 用于图像识别较多,而 RNN 用于语言处理较多。CNN 如同眼睛一样,正是目前机器用来识别对象的++图像处理器++ 。相应地,RNN 犹如耳朵和嘴巴,用于++解析语言模式++的数学引擎。
目录
[1. 特征](#1. 特征)
[2. 结构](#2. 结构)
[1. 网络结构](#1. 网络结构)
[2. 应对梯度消失问题](#2. 应对梯度消失问题)
[三、CNN 与 RNN 的异同点](#三、CNN 与 RNN 的异同点)
[1. 相同点](#1. 相同点)
[2. 不同点](#2. 不同点)
[四、CNN+RNN 的组合方式](#四、CNN+RNN 的组合方式)
我们可以通过形象的假设来理解这俩个神经网络模型:
- CNN 的假设------人类的视觉总是会关注视线内特征最明显的点。
- RNN 的假设------事物的发展是按照时间序列展开的(前一刻发生的事物会对未来的事情的发展产生影响)。
卷积神经网络:通常用于计算机视觉 中,可以用来图像识别和图像分类。CNN 用于提取图像的空间特征,通过不断的卷积和池化操作实现特征提取和降维。
循环神经网络:通常用于自然语言处理 和语音识别 中,可以用来处理时间序列数据。RNN 的主要思想是把前面的信息传递到后面,这样网络就可以利用之前的信息做出预测,能够处理序列中每个时间步的数据。
一、卷积神经网络
卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种具有**++局部连接、权重共享++**等特性的深层前馈神经网络。
1. 特征
- 局部连接: 在卷积层(假设是第 𝑙 层)中的每一个神经元都只和前一层(第 𝑙 − 1层)中某个局部窗口内的神经元相连,构成一个局部连接网络。
- **权重共享:**一个卷积核只捕捉输入数据中的一种特定的局部特征(因此,如果要提取多种特征就需要使用多个不同的卷积核)。
- 空间或时间上的次采样。
2. 结构
一个卷积神经网络主要由以下 5 层组成:
- 输入层(Input layer)
- 卷积 层 (CONV layer,包含激活函数 ,比如 ReLU、sigmoid、tanh 等)
- 池化层(Pooling layer)
- 全连接层(FC layer)
- 输出层(Ouput layer)
二、循环神经网络
循环神经网络(RNN,Recurrent Neural Network)是一类用于++处理序列数据++的神经网络。
1. 网络结构
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。
2. 应对梯度消失问题
在进行反向传播 时,循环神经网络也面临梯度消失或者梯度爆炸问题,这种问题表现在时间轴上。如果输入序列的长度很长,人们很难进行有效的参数更新。通常来说梯度爆炸更容易处理一些。梯度爆炸时我们可以设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取。
应对梯度消失问题:
- 合理地初始化权重值。初始化权重,使每个神经元尽可能不要取极大或极小值,以躲开梯度消失的区域。
- 使用激活函数ReLu,代替 sigmoid 和 tanh。
- 使用其他结构的 RNNs,比如长短时记忆网络(LSTM)和 门控循环单元 (GRU),这是最流行的做法。
三、CNN 与 RNN 的异同点
1. 相同点
(1)神经网络结构: 两者都是深度神经网络,包含大量的神经元和层级结构。
(2)权重共享: 在训练过程中,两者都使用权重共享的概念。通过在不同的++位置或时间步++共享相同的权重参数,从而减少参数数量和提高模型的泛化能力。
(3)端到端学习: 两者都支持端到端的学习,即从原始输入数据到最终输出的直接学习。
2. 不同点
(1)数据类型
- CNN: 主要用于处理网格结构的数据,如图像。它通过卷积操作有效地捕捉图像中的空间结构信息。
- RNN: 专门设计用于处理序列数据,如时间序列数据或自然语言文本。RNN 具有记忆单元,可以在时间步之间传递信息。
(2)局部连接和权重共享
- CNN: 通过卷积操作实现局部连接和权重共享,这有助于捕捉图像中的局部特征。
- RNN: 通过循环结构实现权重共享,允许网络在处理序列数据时考虑先前的信息。
(3)结构设计
- CNN: 主要包括卷积层、池化层和全连接层,用于提取和学习图像中的特征。
- RNN: 包括循环层,每个时间步都会更新隐藏状态,以便处理序列数据的时序关系。
(4)适用任务
- CNN: 适用于图像分类、目标检测等与空间结构相关的任务。
- RNN: 适用于语言建模、机器翻译、时间序列预测等与时序关系相关的任务。
(5)并行性
- CNN: 具有较好的并行性,因为卷积操作可以同时应用于不同的区域。
- RNN: 由于时序依赖关系,循环操作通常难以实现高度的并行性。
总的来说,CNN 适用于处理空间结构的数据,而 RNN 适用于处理时序关系的数据。在某些任务中,这两者也可以结合使用,形成更复杂的神经网络结构,例如将 CNN 和 RNN 组合用于图像描述生成。
四、CNN+RNN 的组合方式
- CNN 特征提取,用于 RNN 语句生成图片标注。
- RNN 特征提取用于 CNN 进行内容分类、视频分类。
- CNN 特征提取用于对话问答、图片问答。