神经网络 | CNN 与 RNN——深度学习主力军

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 特征提取用于对话问答、图片问答
相关推荐
极客代码1 分钟前
【Python TensorFlow】进阶指南(续篇二)
开发语言·人工智能·python·深度学习·tensorflow
AI小白日记42 分钟前
深入探索AutoDL平台:深度学习GPU算力最佳选择
人工智能·深度学习·gpu算力
严文文-Chris2 小时前
【卷积神经网络】
人工智能·神经网络·cnn
B站计算机毕业设计超人2 小时前
计算机毕业设计Python+Neo4j中华古诗词可视化 古诗词智能问答系统 古诗词数据分析 古诗词情感分析 PyTorch Tensorflow LSTM
pytorch·python·深度学习·机器学习·知识图谱·neo4j·数据可视化
B站计算机毕业设计超人4 小时前
计算机毕业设计Python+大模型斗鱼直播可视化 直播预测 直播爬虫 直播数据分析 直播大数据 大数据毕业设计 机器学习 深度学习
爬虫·python·深度学习·机器学习·数据分析·课程设计·数据可视化
陌上阳光10 小时前
动手学深度学习68 Transformer
人工智能·深度学习·transformer
love_and_hope10 小时前
Pytorch学习--神经网络--完整的模型训练套路
人工智能·pytorch·python·深度学习·神经网络·学习
明晚十点睡13 小时前
2024AAAI | DiffRAW: 利用扩散模型从手机RAW图生成单反相机质量的RGB图像
人工智能·pytorch·python·深度学习
代码猪猪傻瓜coding14 小时前
关于几种卷积
深度学习·神经网络·cnn
奔跑的小狗14 小时前
torch.nn.**和torch.nn.functional.**的区别
pytorch·深度学习·机器学习