CNN(卷积神经网络)
CNN 主要用于处理具有网格结构的数据,如图像。其核心是卷积层,通过局部感受野和权值共享捕捉空间特征。池化层用于降维和增强平移不变性。CNN 在图像分类、目标检测等任务中表现优异,但难以处理序列数据的长距离依赖问题。
- 总结 CNN
- 提取主要特征: 扫描提取特征,池化保留最大特征
- 优势 可以快速识别图像
- 劣势 在语言上不行,无法理解语义: 例如我吃苹果 和 苹果吃我; 通过CNN 特增提取, 得到的特征相似度是一样的,但是语义完全不同
所以为了解决顺序导致的语义理解不同, 引入了 RNN
RNN(循环神经网络)
RNN 设计用于处理序列数据(如文本、时间序列)。通过隐藏状态的循环连接,RNN 能保留历史信息。但标准 RNN 存在梯度消失/爆炸问题,导致难以学习长距离依赖。改进版本如 LSTM 和 GRU 通过门控机制缓解这一问题,广泛应用于机器翻译、语音识别等任务。
- 总结 RNN
- 通过隐藏特性, 保留识别过的文字, 从而达到排序
- 优势 可以有顺序的理解语义,解决上述 我吃苹果 和苹果吃完 在CNN识别上完全一致的结果;
- 劣势
- 由于是通过保留历时识别文字达到的,所以在理解文字上, 具有强等待,导致只能串行, 理解第一千个字,只能等前999个字完全识别; 无法并行,性能差
- 由于通过保留历时识别文字达到顺序识别语义,回导致过长的文本产生语义理解偏差,记忆丢失,也就是 梯度消失/爆炸问题
所以为了解决RNN的问题, 终极方案transformer
Transformer
Transformer 完全基于自注意力机制,摒弃了循环和卷积结构。其核心是多头自注意力(Multi-Head Attention),可并行计算并直接建模全局依赖关系。位置编码(Positional Encoding)替代了 RNN 的时序处理。Transformer 在 NLP 任务(如 BERT、GPT)中表现卓越,并扩展至图像(ViT)、多模态等领域。
- 总结 Transformer
- 注意力: 就是通过语义理解计算每个文字之间的关联性得分
- 优势 可并行; 并且通过保留每个文本的位置编码,实现了RNN的顺序一致,使得言语理解正确; 解决了RNN 长距离的问题以及历时数据保留导致的理解偏差
关键差异
- 并行性:CNN 和 Transformer 支持并行计算,RNN 需顺序处理。
- 长距离依赖:Transformer 通过自注意力直接建模,优于 RNN 和 CNN。
- 适用场景:CNN 擅长局部模式(图像),RNN 适合短序列,Transformer 在长序列和跨模态任务中更优。
代码示例(PyTorch)
CNN 卷积层
python
import torch.nn as nn
conv_layer = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3)
LSTM 层
python
lstm_layer = nn.LSTM(input_size=100, hidden_size=256, num_layers=2)
hidden_size 就是隐藏特性,相当于可以读取的最大记忆长度
Transformer 编码器
python
encoder_layer = nn.TransformerEncoderLayer(d_model=512, nhead=8)
transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers=6)
重要的两个: 编码 encoder 和 解码 decode