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