news 2026/7/12 1:04:21

深度学习2——CNN与RNN概述

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习2——CNN与RNN概述

1. CNN 的基本结构与作用

CNN 全称为 Convolutional Neural Network,中文叫卷积神经网络,主要用于处理图像这类具有空间结构的数据。

一个典型的 CNN 结构可以表示为:

输入层 → 卷积层 Conv → 激活层 ReLU → 池化层 Pooling → 重复多组 Conv + ReLU + Pool → 全连接层 FC 或全局平均池化 → 输出层

各部分的作用可以简单理解为:

  • 卷积层:提取图像特征
  • 激活层:引入非线性
  • 池化层:压缩特征图
  • 全连接层:综合特征并完成最终判断
  • 输出层:给出类别、概率或其他预测结果

例如识别一张猫的图片时,CNN 可能逐层学习:

浅层:边缘、颜色变化 → 中层:纹理、角点、局部形状 → 深层:耳朵、眼睛、胡须 → 输出:判断是否为猫

CNN 最擅长处理图像等空间数据,但并不是只能处理“静态数据”。

CNN 也可以处理:

  • 视频中的单帧图像
  • 音频频谱图
  • 一维时间序列
  • 文本中的局部特征

不过,普通 CNN 本身不擅长直接表达长时间顺序关系。对于视频、文本和时间序列,通常会结合 RNN、Transformer、3D CNN 或时序卷积等结构。


2. 卷积层与卷积核

卷积层通过卷积核在输入图像或特征图上不断滑动,提取局部特征。

假设有一个 3 × 3 的卷积核:

k1 k2 k3 k4 k5 k6 k7 k8 k9

卷积核覆盖输入中的一个 3 × 3 区域,将对应位置的数值分别相乘后求和,再加上偏置:

output = x1*k1 + x2*k2 + x3*k3 + x4*k4 + x5*k5 + x6*k6 + x7*k7 + x8*k8 + x9*k9 + b

这个计算结果会成为输出特征图中的一个位置。

卷积核继续在图像上滑动,就可以得到完整的特征图。

卷积层有两个重要特点:

局部连接

卷积核每次只观察输入中的一小块区域,而不是一次连接整张图像。

这样更符合图像的特点,因为边缘、纹理等特征通常由附近像素共同构成。

参数共享

同一个卷积核会在整张图像的不同位置重复使用。

例如一个 3 × 3 的单通道卷积核只有 9 个权重。无论图片多大,卷积核的参数数量都不会随着图像位置增加。

这能够明显减少参数量。

不同卷积核能够提取不同特征,例如:

  • 某个卷积核学习检测水平边缘
  • 某个卷积核学习检测竖直边缘
  • 某个卷积核学习颜色变化
  • 某个卷积核学习纹理或形状

需要注意:

在深度学习中,卷积核中的权重通常不是人工设计的,而是像其他参数一样,通过训练自动学习得到的。


3. 激活层、池化层与全连接层

激活层

卷积运算本质上仍然是线性变换。

如果只连续堆叠卷积层,而不加入激活函数,整个网络的表达能力仍然有限。

因此通常在卷积层后加入 ReLU:

ReLU(x) = max(0, x)

ReLU 会将小于 0 的值变为 0,大于 0 的值保持不变。

它的主要作用是:

给网络引入非线性,使网络能够学习更加复杂的图像特征。

池化层

池化层用于缩小特征图的宽和高,在保留主要特征的同时减少计算量。

例如对下面的 2 × 2 区域进行最大池化:

1 3 2 6

最大池化取其中最大值:

max(1, 3, 2, 6) = 6

因此,一个 2 × 2 的区域被压缩成一个数值。

常见池化方式包括:

  • 最大池化:保留区域中最强的特征
  • 平均池化:保留区域中的平均信息
  • 全局平均池化:将每个通道压缩成一个数值

池化层的主要作用包括:

  • 减小特征图尺寸
  • 降低计算量和显存占用
  • 扩大后续神经元的感受野
  • 增强模型对轻微位置变化的适应能力

但池化也会丢失部分空间信息,因此在目标检测和图像分割任务中不能无限制地进行池化。

现代网络中,也常使用步长大于 1 的卷积代替部分池化操作。

全连接层

全连接层是指:

当前层的每一个神经元,都与上一层的所有神经元连接。

假设上一层有三个输入:

x1, x2, x3

全连接层中的一个神经元可以写成:

y = w1*x1 + w2*x2 + w3*x3 + b

全连接层可以综合前面提取出的所有特征,完成最终分类或预测。

例如:

尖耳朵 + 胡须 + 圆脸 → 综合判断 → 猫

全连接层的主要问题是:

  • 参数数量可能非常大
  • 占用更多内存和计算资源
  • 容易过拟合
  • 通常要求固定大小的输入
  • 将特征图展开后,会弱化原有空间位置信息

4. 为什么用卷积或全局平均池化替代全连接层

这里需要区分两种情况。

用卷积层替代全连接层

全连接层可以在某些情况下等价地改写成卷积层。

例如输入特征图大小为:

7 × 7 × 512

可以使用一个覆盖整个特征图的卷积核,将全连接运算改写成卷积运算。

这样做能够让网络成为全卷积网络,主要优点是:

  • 可以保留空间结构
  • 可以处理不同尺寸的输入
  • 更适合目标检测和图像分割
  • 可以输出不同空间位置对应的预测结果

需要注意:

仅仅把全连接层等价地改写成覆盖整个输入的卷积层,并不一定会减少参数,因为两者在数学上可能完全等价。

真正能够明显减少参数的是使用较小卷积核、参数共享,或者使用全局平均池化压缩特征。

用全局平均池化替代大型全连接层

假设特征图大小为:

7 × 7 × 512

将其直接展开,会得到:

7 * 7 * 512 = 25088

个输入。

全局平均池化会对每个通道的 7 × 7 个数值求平均,最终得到:

1 × 1 × 512

也就是将 25088 个数压缩为 512 个数。

然后再连接一个较小的分类层,可以明显减少参数和过拟合风险。

因此,现代 CNN 常采用:

卷积特征图 → 全局平均池化 → 较小的分类层 → 输出

5. 文本如何输入神经网络

计算机不能直接理解文字,因此需要先把词语或字符转换为数字表示。

常见方法是词嵌入,也叫 Word Embedding。

例如:

“猫” → [0.2, 0.8, -0.4, ...] “狗” → [0.3, 0.7, -0.2, ...] “汽车” → [-0.6, 0.1, 0.9, ...]

每个词都会被表示成一个固定维度的向量。

如果两个词语含义相近,它们的向量通常也会比较接近。

可以使用点积或余弦相似度衡量两个向量的相似程度。

余弦相似度可以直观写成:

cosine_similarity = dot(vector1, vector2) / (length(vector1) * length(vector2))

余弦相似度越接近 1,通常表示两个向量方向越相似。

但词向量相似,只说明词语本身在语义上可能相关,并不能完整表达一句话中的词序、语法和上下文关系。


6. 为什么不能简单把词向量全部平铺

假设一句话有 100 个词,每个词向量有 300 维。

将所有词向量直接拼接后,输入维度为:

100 * 300 = 30000

如果后面接一个有 1000 个神经元的全连接层,参数数量大约为:

30000 * 1000 = 30000000

这样会带来两个主要问题。

参数数量过多

句子越长,展开后的输入维度越大,全连接层的参数数量也会明显增加。

而且全连接层通常要求输入长度固定。

例如模型按 100 个词设计,那么:

  • 不足 100 个词的句子需要补齐
  • 超过 100 个词的句子需要截断

词语顺序不容易自然表达

虽然平铺后不同位置仍对应不同输入位置,但普通全连接网络没有天然的顺序处理机制。

它需要分别学习“第一个词”“第二个词”“第三个词”所在位置的参数,难以自然处理不同长度的序列。

例如:

猫追狗

和:

狗追猫

包含的词相同,但顺序不同,含义完全不同。

因此,文本模型不仅需要理解每个词,还需要理解词语之间的先后顺序和上下文关系。


7. RNN 的基本原理

RNN 全称为 Recurrent Neural Network,中文叫循环神经网络,主要用于处理具有顺序关系的数据。

RNN 不会把所有词一次性平铺后送入网络,而是按照顺序逐个处理:

我 → 喜欢 → 吃 → 苹果

RNN 在处理当前词时,会同时使用:

  • 当前词的向量 x_t
  • 上一个时刻的隐藏状态 h_previous

其计算可以直观写成:

h_current = activation( Wx * x_current + Wh * h_previous + b )

其中:

  • x_current:当前词的向量
  • h_previous:前面词语形成的记忆
  • h_current:更新后的当前记忆
  • Wx、Wh、b:需要训练的参数

例如:

处理“我” → 得到记忆 h1 处理“喜欢” + h1 → 得到记忆 h2 处理“吃” + h2 → 得到记忆 h3 处理“苹果” + h3 → 得到记忆 h4

因此可以简单理解为:

前一个词的计算结果会参与下一个词的计算,使信息按照顺序不断向后传递。

RNN 具有以下优点:

  • 能够表达词语先后顺序
  • 能够保留一定的上下文信息
  • 每个时间步共享同一套参数
  • 参数数量不会直接随着句子长度增加
  • 可以处理不同长度的序列

需要注意:

句子变长时,RNN 的参数数量通常不会增加,但计算步骤会增加。


8. RNN 的两个主要缺点

难以捕捉长期依赖

长期依赖是指:

当前词的理解,需要依赖距离很远的前文信息。

例如:

我出生在中国,后来去过很多国家学习和工作, 但我说得最流利的语言仍然是中文。

要理解最后的“中文”,需要记住句子开头的“中国”。

在普通 RNN 中,前面的信息需要经过很多时间步才能传到后面:

h1 → h2 → h3 → ... → h100

在不断传递的过程中,早期信息可能逐渐被削弱、覆盖或遗忘。

训练时,梯度也需要经过很多时间步反向传播。

如果每一步梯度都乘上一个小于 1 的数,经过很多次相乘后,梯度会越来越小,这叫梯度消失。

例如:

0.5^10 ≈ 0.001

当梯度接近 0 时,句子后面的误差几乎无法有效影响前面的参数,因此模型难以学习远距离词语之间的依赖关系。

普通 RNN 不是完全无法学习长期依赖,而是很难稳定地学习长期依赖。

LSTM 和 GRU 通过门控机制改善了这个问题。

无法在时间维度并行计算

RNN 当前时刻的计算依赖上一个时刻的隐藏状态:

h2 依赖 h1 h3 依赖 h2 h4 依赖 h3

因此必须按照顺序执行:

先计算 h1 → 再计算 h2 → 再计算 h3 → 最后计算 h4

不能同时计算所有词对应的隐藏状态。

句子越长,顺序计算步骤越多,训练速度越慢,也无法充分利用 GPU 的并行计算能力。

RNN 的两个问题,本质上都来自同一个特点:

信息必须沿时间顺序一步一步传递。

这既会使远距离信息逐渐衰减,也会使后一步必须等待前一步完成。

Transformer 使用自注意力机制,使不同词语可以直接建立联系,并且在训练时能够并行处理整段输入,因此逐渐取代了 RNN,成为自然语言处理中的主流结构。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/12 0:49:48

TPS61170与MK20DX128VFM5构建高效DC-DC升压电源方案

1. 项目背景与核心器件选型在需要将低电压转换为高电压的电子系统中,DC-DC升压转换器是关键部件。TPS61170作为德州仪器(TI)推出的高压升压转换芯片,搭配MK20DX128VFM5微控制器,可构建高效可靠的升压电源方案。这种组合特别适合需要精密控制输…

作者头像 李华
网站建设 2026/7/12 0:45:09

UE4 Paper2D开发避坑指南:从核心机制到性能优化的实战解析

1. 项目概述:为什么Paper2D开发总让人“头大”? 如果你是从3D游戏开发或者Unity 2D转战到UE4来做2D游戏,大概率在Paper2D插件上栽过跟头。这个插件给人的感觉,就像是引擎里一个功能强大但说明书极其晦涩的“隐藏工具包”。官方文档…

作者头像 李华
网站建设 2026/7/12 0:44:29

Cocos项目内存监控与性能优化实战指南

1. 项目概述:为什么Cocos项目需要内存监控与性能优化?如果你是一名Cocos开发者,无论是做小游戏、中重度手游还是其他互动应用,大概率都经历过这样的场景:项目在编辑器里跑得飞快,一到真机,特别是…

作者头像 李华
网站建设 2026/7/12 0:43:48

Trivy漏洞扫描报告解读:关键指标与修复建议

Trivy漏洞扫描报告解读:关键指标与修复建议 【免费下载链接】trivy Trivy is a comprehensive, versatile security scanner, and one of the most widely used open-source security scanning tools globally. 项目地址: https://gitcode.com/openeuler/trivy …

作者头像 李华