深度学习2——CNN与RNN概述 📅 2026/7/12 1:04:24 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. 激活层、池化层与全连接层激活层卷积运算本质上仍然是线性变换。如果只连续堆叠卷积层而不加入激活函数整个网络的表达能力仍然有限。因此通常在卷积层后加入 ReLUReLU(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成为自然语言处理中的主流结构。