碾压全网!神经网络笔记最新2025-0707(CNN,RNN,Transformer,BERT,GPT)
目录
Embeddings/Projections(嵌入/投影层):
Multi_Head Attention (多头注意力) :
Masked Multi_Head Attention (遮盖的多头注意力层):
Multi_Head Attention (交互注意力层) :
一. CNN (卷积神经网络)
1.1 CNN出现的背景
在深度学习出现之前,图像识别、目标检测等视觉任务通常依赖于人工设计的特征(如 SIFT、HOG),模型的泛化能力有限,且不易迁移。
随着深度学习的发展,研究者发现神经网络可以自动从原始像素中学习特征。但传统的全连接网络在处理高维图像时存在以下问题:
-
参数量巨大(全连接导致维度爆炸);
-
缺乏空间结构建模能力(图像的局部性和位置信息无法利用);
-
训练不稳定,泛化差。
为了解决这些问题,Yann LeCun 等人在 1989 年提出 LeNet 系列模型,使用卷积(Convolution)和池化(Pooling)提取局部特征。随后 AlexNet 在 2012 年 ImageNet 比赛中取得巨大突破,引发了深度学习浪潮。
CNN 通过 局部连接、权重共享、下采样 等机制,有效捕捉图像中的局部结构,是计算机视觉中最核心的网络之一。
1.2 CNN的整体架构
CNN由输入层、卷积层、激活函数、池化层以及全连接层构成。
INPUT(输入层)-CONV(卷积层)-RELU(激活函数)-POOL(池化层)-FC(全连接层)

卷积操作可参考以下图片:

整个流程可参考以下过程:
我们假设输入图像为:
-
尺寸:
32×32像素(可理解为32*32的矩阵) -
通道:RGB(一般彩色图像由RGB三通道组成)
-
类别数:10(用于图像分类,如 CIFAR-10)
输入层处理:
-
输入张量大小:
[batch_size, 3, 32, 32] -
表示:
batch_size张图片,每张有 3 个通道,32×32 像素
卷积层1处理:
-
卷积核数目:16
-
卷积核大小:3×3
-
步幅:1
-
Padding:1(可理解为填充处理,原矩阵四周用0填充,此操作为了使得经过卷积后的矩阵和原图像的矩阵大小相同。本图像32*32的矩阵经填充得到34*34的矩阵,再经卷积操作得到32*32的矩阵)
-
输出大小:
[batch_size, 16, 32, 32](16是因为有16个卷积核)
激活函数处理:
ReLU:将负数置 0,保持非线性特征
池化层1处理:
最大池化(MaxPooling)
池化窗口:2×2
步幅:2
输出大小:[batch_size, 16, 16, 16](将32*32的矩阵分成16个2*2矩阵的区域,并取每个区域的最大值,得到16*16的矩阵)
卷积层2处理:
-
卷积核数目:32
-
卷积核大小:3×3
-
Padding:1
-
输出大小:
[batch_size, 32, 16, 16]
激活函数处理
池化层2处理:
-
最大池化
-
输出大小:
[batch_size, 32, 8, 8]
Flatten 展平层处理:
-
把
[32, 8, 8]展平成[32×8×8 = 2048]的向量
全连接层处理:
-
输入:2048
-
输出:128(中间隐藏层, 这是我们人为设定的中间维度,用于学习抽象特征)
激活函数处理
输出层处理:
-
输出:10(输入的类别数为10)
-
通常接 Softmax(训练时可用 CrossEntropyLoss)
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
# 输入:3通道,输出:16通道,卷积核3x3,padding=1保证尺寸不变
self.conv1 = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, padding=1)
# 第二个卷积层:输入16通道,输出32通道
self.conv2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3, padding=1)
# 全连接层:输入是池化后的特征图展平后的长度(32 * 8 * 8)
self.fc1 = nn.Linear(32 * 8 * 8, 128)
self.fc2 = nn.Linear(128, 10) # 输出10类
def forward(self, x):
# 卷积 → ReLU → 池化
x = F.relu(self.conv1(x)) # [B, 16, 32, 32]
x = F.max_pool2d(x, 2) # [B, 16, 16, 16]
x = F.relu(self.conv2(x)) # [B, 32, 16, 16]
x = F.max_pool2d(x, 2) # [B, 32, 8, 8]
# 展平
x = x.view(x.size(0), -1) # [B, 32*8*8 = 2048]
# 全连接层
x = F.relu(self.fc1(x)) # [B, 128]
x = self.fc2(x) # [B, 10]
return x
1.3 CNN的优势
| 优势 | 解释 |
|---|---|
| 局部连接 | 每个神经元只关注图像的局部区域,类似人类视觉 |
| 权重共享 | 一个卷积核在整个图像中滑动,减少参数,提高泛化能力 |
| 空间不变性 | 平移、缩放等变化对识别结果影响小 |
| 可堆叠性强 | 多层卷积可以提取从边缘、纹理到语义的层次特征 |
1.4 CNN存在的问题
| 问题 | 描述 | 常见应对方法 |
|---|---|---|
| 参数依然多 | 高分辨率图像会产生大量卷积 | 使用小卷积核 + 池化层 |
| 无法捕捉长距离依赖 | 感受野有限 | 使用更深层或结合 Transformer |
| 对位置不敏感 | 位置信息可能丢失 | 使用 CoordConv、位置编码 |
| 对时间维无效 | 不能处理音频/文本等序列数据 | 联合 RNN / Transformer 使用 |
1.5 CNN在当下的应用
CNN 是专门为处理具有网格结构数据(如图像)而设计的神经网络,目前依然是计算机视觉领域的基础架构之一。
1.5.1 图像领域
-
图像分类:如医疗图像中的疾病识别(X光、CT)、卫星图像识别等。
-
目标检测:YOLO、Faster R-CNN 等架构仍以 CNN 为基础,用于自动驾驶、安防监控。
-
图像分割:如语义分割(分辨图像中每个像素的类别),常用于医学图像、自动驾驶。
-
图像生成/超分辨率:SRGAN、ESRGAN 这类生成网络也以 CNN 为核心。
-
人脸识别:虽然如今很多系统采用 Transformer,但轻量化场景(如移动端)仍偏向 CNN。
1.5.2 视频分析
-
动作识别:如视频中的行为分析、体育比赛中的战术分析。
-
视频摘要/分镜提取:CNN+LSTM/GRU 或 CNN+Transformer 的混合结构仍然常见。
1.5.3 其他领域
-
边缘计算/嵌入式设备:因为 CNN 计算开销较小,仍在移动端/IoT 等设备中大量使用。
-
工业质检:使用 CNN 模型分析产品图像找缺陷。
二. RNN (循环神经网络)
2.1 RNN出现的背景
在 NLP、语音识别等任务中,输入数据是有时间顺序的序列,而传统神经网络(如全连接网络、CNN)不具备建模序列关系的能力。
为此,RNN(Recurrent Neural Network) 被提出,用于处理 序列数据,其核心思想是:每个时刻的输出依赖于上一个时刻的状态,从而实现信息的“记忆”与“传递”。
然而,原始的 RNN 存在 梯度消失/爆炸问题,导致模型难以捕捉长期依赖关系。为了解决这一问题,后续提出了改进版本:
-
LSTM(Long Short-Term Memory):引入门控机制,控制信息流;
-
GRU(Gated Recurrent Unit):结构更简化,效果与 LSTM 相近。
RNN 在 2010 年代广泛应用于 语言模型、机器翻译、语音识别、时间序列预测 等任务。
2.2 RNN的整体架构

基本的RNN架构:

LSTM架构:

GRU架构:

以基础的RNN架构为例:
我们假设要处理一段文本,判断它是“正面”还是“负面”情感,即二分类任务。我们用 RNN 来处理这个序列任务。
假设有以下句子:
"I love this movie"
假设词汇表大小为 vocab_size=10000,每个词编码为整数。我们用词嵌入(Embedding)将这些词转换为向量。
-
句子长度:5(“I love this movie <PAD>”)补齐到 5 (RNN以及大多数深度学习模型需要输入的张量尺寸统一,否则无法批量处理数据。填充的
<PAD>会有专门的索引(如 0)。在更高级模型中比如 LSTM、Transformer,通常会用 mask 来忽略掉<PAD>的影响。) -
每个词向量维度:
embedding_dim=64(作用是把每个词从一个整数 ID 转换为一个向量。更高的维度意味着更丰富的语义表示能力)。 -
RNN 隐藏层大小:
hidden_size=128(该值表示 RNN 每一步存储的“记忆”大小。值越大,RNN 的表达能力越强,但计算量也更大) -
输出类别数:2(正/负)
输入层处理:
输入:形状为 [batch_size, seq_len] 的整数张量
# 假设每个词已经转为整数编码
x = [[12, 45, 98, 256, 0]] # 假设 batch_size = 1,0 是 <PAD>
嵌入层处理:
把每个词编码映射为一个向量
输入张量的形状:[batch_size, seq_len]即[1, 5] → 输出张量的形状:[1, 5, 64]
此时每个词变成 64 维向量
RNN 层(或 LSTM/GRU)处理
-
接收张量的形状:
[batch_size, seq_len, embedding_dim]即[1, 5, 64] -
输出两个结果:
-
output即[batch_size, seq_len, hidden_size]:表示每个时间步的隐藏状态,共有 5 个时间步,每步都有一个 128维状态 →[1, 5, 128] -
hidden:表示最后时间步的隐藏状态(总结这句话的记忆) →[1, 1,128](用于分类)
-
全连接层处理
-
输入:
hidden(最后时间步的隐藏状态) -
输出张量的形状:
[batch_size,类别数 ]:[1, 2]
如可能最终输出[1.7, -0.3],这是模型实际输出的 数值内容,即 logits, 表示模型对两个类别的打分值, 在此之后经过 softmax 处理:正面情感的概率更高(0.88)所以可以判定:模型判断这句话是正面情感
可参考以下代码:
class SimpleRNNClassifier(nn.Module):
def __init__(self, vocab_size, embedding_dim, hidden_size, num_classes):
super(SimpleRNNClassifier, self).__init__()
# 词嵌入层:将词ID转换为向量
self.embedding = nn.Embedding(num_embeddings=vocab_size, embedding_dim=embedding_dim)
# RNN层:也可以换成 nn.LSTM 或 nn.GRU
self.rnn = nn.RNN(input_size=embedding_dim, hidden_size=hidden_size, batch_first=True)
# 全连接分类层:从隐藏状态映射到类别
self.fc = nn.Linear(hidden_size, num_classes)
def forward(self, x):
# x shape: [batch_size, seq_len]
x = self.embedding(x) # [batch_size, seq_len, embedding_dim]
output, hidden = self.rnn(x) # output: [batch_size, seq_len, hidden_size]
# hidden: [1, batch_size, hidden_size]
last_hidden = hidden.squeeze(0) # 去掉第一个维度 → [batch_size, hidden_size]
logits = self.fc(last_hidden) # [batch_size, num_classes]
return logits
2.3 RNN的优势
| 优势 | 描述 |
|---|---|
| 状态记忆 | 能记住前面的信息并传递到后面 |
| 顺序敏感 | 非常适合处理时间或语义顺序强的数据 |
| 模型小 | 相比 Transformer,参数更少,适合轻量部署 |
| 在线预测 | 可以一边输入,一边预测,适合流数据处理 |
2.4 RNN存在的问题
| 问题 | 描述 | 应对方案 |
|---|---|---|
| 梯度消失 / 爆炸 | 随序列变长,梯度难以传播 | 使用 LSTM/GRU、梯度裁剪 |
| 长期依赖建模困难 | 只能记住近邻信息 | LSTM 改进了这一问题 |
| 并行性差 | 每个时间步依赖前一时刻结果 | 用 Transformer 替代 |
| 训练慢 | 序列太长时效率低 | 使用注意力机制或 Transformer |
2.5 RNN在当下的应用
RNN 是为了处理序列数据设计的网络,虽然被 Transformer 大量取代,但在一些轻量场景中依旧有用武之地。
2.5.1 自然语言处理(部分任务)
-
语音识别(ASR)系统中的声学模型:在边缘设备或小模型需求场景中,RNN(如GRU、LSTM)仍是主力。
-
字符级文本生成:用于拼写建议、输入法候选词预测。
-
简单的对话机器人或意图识别系统:轻量化需求场景中仍采用 RNN。
2.5.2 时间序列预测
-
金融时间序列预测:如股票、加密货币价格预测等中,LSTM 仍被使用。
-
传感器数据建模:如工业物联网设备状态预测、交通流量预测等。
-
能耗预测:电力、水务公司对未来用量的预测任务中,RNN(尤其是双向LSTM)仍具有竞争力。
2.5.3 音频与语音
-
语音合成(TTS):虽然主流是 Transformer,如 FastSpeech,但 RNN 如 Tacotron 系列仍被保留。
-
音乐生成:在基于 MIDI 的音乐生成中 RNN 仍有用武之地。
三. Transformer
3.1 Transformer出现的背景
虽然 RNN/LSTM 适合处理序列数据,但它们存在显著局限:
-
序列处理是串行的,无法并行训练,效率低;
-
长距离依赖建模能力差,随着序列长度增加,捕捉前面信息变得困难;
-
模型训练难度大,梯度传播路径长。
2017 年,Google 提出的论文《Attention is All You Need》首次提出 Transformer 架构,抛弃 RNN 结构,完全基于注意力机制建模序列关系。它的主要创新包括:
-
使用 Self-Attention 实现信息交互;
-
实现了 全序列并行计算;
-
架构对任务更具通用性和可扩展性。
Transformer 一经推出即在机器翻译任务上超越传统 RNN 模型,并为后续一系列大型预训练模型(如 BERT、GPT)奠定基础。
3.2 Transformer的优势
| 优势 | 描述 |
|---|---|
| 并行计算能力 | 自注意力机制允许对整个序列同时处理,训练速度远快于 RNN(无序列依赖)。 |
| 长距离依赖建模 | 可以捕捉任意两个位置之间的关系,解决 RNN 难以建模长期依赖的问题。 |
| 表达能力强 | 多头注意力和深层堆叠结构使模型具有更强的特征提取和组合能力。 |
| 灵活结构 | 既可用于编码(如 BERT),也可用于解码(如 GPT),可自由组合应用场景。 |
| 可扩展性强 | 模型结构简单,易于扩展成大规模预训练模型(如 GPT-4、PaLM)。 |
| 通用性广泛 | 不仅适用于 NLP,还能用于图像、音频、多模态、生物信息等多领域任务。 |
| 迁移能力强 | 预训练模型可以微调到各种下游任务,极大降低任务训练成本。 |
3.3 Transformer的核心架构
论文地址: Transformer论文原文
Transformer的核心思想: 纯粹依靠注意力机制来处理序列数据。传统的注意力机制通常用在编码器-解码器架构中,解码器在生成每个输出时会"注意"编码器的不同位置,这是跨序列的注意力。而自注意力是序列内部的注意力机制,它让序列中的每个位置都能够与同一序列中的所有其他位置建立直接联系。比如在处理句子"The cat sat on the mat"时,自注意力让"cat"这个词不仅能看到自己,还能直接看到"The"、“sat”、“on”、“the”、"mat"等所有其他词,并根据语义相关性给它们分配不同的权重。
核心架构图:
该架构由编码器(Encoder)与解码器( Decoder)组成,左侧为Encoder,右侧为Decoder。每个编码器由1个位置编码层(图中的Positional Encoding)与N个编码层( Encoder Layer )组成, 每个解码器由1个位置编码层与N个解码层(Decoder Layer )以及1个以Sotfmax为激活函数的全连接层组成。第t个编码层的输入是t-1个编码层的输出,解码层同理。
编码器的结构:
Embeddings/Projections(嵌入/投影层):
将输入的单词(或 token)转换成数字向量(比如 "猫" → [0.2, -0.5, 0.7…])。
Positional Encoding(位置编码) :
Transformer 本身没有循环或卷积结构,无法直接感知序列顺序,因此需要显式地注入位置信息。
位置编码可参考以下的计算公式:

pos 表示当前位置(第几个词),i 表示词向量的第 i 维, d 是词向量总维度(如 512)
Multi_Head Attention (多头注意力) :
-
输入变换:输入的向量经过变换分别得到查询(Query)、键(Key)和值(Value)矩阵。
查询(Query): 指的是查询的范围,自主提示,即主观意识的特征向量
键(Key): 指的是被比对的项,非自主提示,即物体的突出特征信息向量
值(Value) : 则是代表物体本身的特征向量,通常和Key成对出现

-
注意力机制是通过Query与Key的注意力汇聚(给定一个 Query,计算Query与 Key的相关性,然后根据Query与Key的相关性去找到最合适的 Value)实现对Value的注意力权重分配,生成最终的输出结果。
举个例子:
-
当你用上淘宝购物时,你会敲入一句关键词(比如:显瘦),这个就是Query。
-
搜索系统会根据关键词这个去查找一系列相关的Key(商品名称、图片)。
-
最后系统会将相应的 Value (具体的衣服)返回给你。
-
-
多头:即定义多组W,生成多组Q、K、V,每个头具有不同的线性变换参数。
-
注意力计算:对于每个头,都执行一次缩放点积注意力运算。具体来说,计算查询和键的点积,经过缩放、加上偏置后,使用softmax函数得到注意力权重。这些权重用于加权值矩阵,生成加权和作为每个头的输出。
计算公式参照以下内容:

-
拼接与融合:将所有头的输出矩阵拼接在一起,形成一个长向量。然后,然后将它们乘以一个额外的权重矩阵

做一次线性变换降维,得到最终的多头注意力输出。
Add & Norm (残差连接与层归一化) :
残差连接: 残差连接 = 原始输入 + 子层输出,目的在于缓解梯度消失。举个例子如下所示:
原始输入为:x = [1.2, 0.5, -0.7, ..., 0.3] # 维度比如是 512
经过注意力层处理之后: SubLayer(x) = [0.9, -0.4, 0.6, ..., 0.2]
加上原始输入:output = x + SubLayer(x) = [2.1, 0.1, -0.1, ..., 0.5]
层归一化(Layer Normalization): 它会对一个样本的所有特征做归一化,稳定网络训练减少梯度爆炸/消失风险,加速收敛。
计算公式为:

其中mean(x)表示求平均值, std(x)表示标准差。举个例子:
x = [2.0, 4.0, 6.0, 8.0]
经计算mean(x) = 5,std(x) = 2.236
逐个计算归一化的值为: -1.34,-0.45,0.45,1.34
经过这个归一化,我们发现:
(1)所有值都围绕 0 对称了(均值为 0)
(2)数据范围被缩放了(标准差为 1)
(3)保留了原来的相对大小关系,但更适合训练模型
Feed Forward (前馈神经网络) :
每个位置的表示会通过一个两层全连接网络(含非线性激活,如ReLU)进行进一步变换。
可参照以下公式:

解码器的结构:
解码器比编码器多了Masked Multi_Head Attention与Multi_Head Attention(该部分与编码器略有不同)
Masked Multi_Head Attention (遮盖的多头注意力层):
遮盖的意义是为了将未来的信息进行掩盖 。保证解码时生成第 t 个词时,只用到前面 1~t 的信息,不能“偷看答案”。
Transformer用一个掩码矩阵(mask)来实现。
对长度为 seq_len = 5 的序列,mask 是一个上三角矩阵(0表示遮盖):
[[1, 0, 0, 0, 0],
[1, 1, 0, 0, 0],
[1, 1, 1, 0, 0],
[1, 1, 1, 1, 0],
[1, 1, 1, 1, 1]]
Multi_Head Attention (交互注意力层) :
在编码器中Q,K,V的计算方式为:

而在解码器中Q计算方式有所不同 :

3.4 Transformer存在的问题
| 问题 | 描述 |
|---|---|
| 计算复杂度高 | Self-Attention 的计算量为 O(n^2),序列越长,资源消耗越大。 |
| 内存占用大 | 多头注意力和大层数堆叠导致显存需求大,训练和推理成本高。 |
| 对位置信息不敏感 | 需要显式加入位置编码,才能建模序列顺序,而不像 RNN 自然具备时间顺序感。 |
| 训练依赖大量数据 | 从零训练效果好需要大规模语料和算力,否则容易过拟合或收敛慢。 |
| 可解释性差 | 虽有 Attention 可视化手段,但整体模型仍为黑盒,难以理解内部推理机制。 |
| 推理延迟高 | 虽然训练可以并行,自回归式生成(如 GPT)在推理时仍需一步步计算,速度慢。 |
| 小模型表现不稳定 | 在小数据、小模型场景下效果不如 RNN,容易欠拟合或不收敛。 |
3.5 Transformer在当下的应用
Transformer 已成为 AI 领域的主流架构,广泛应用于自然语言处理、计算机视觉、多模态系统等领域,尤其在大模型时代扮演核心角色。
3.5.1 自然语言处理(NLP)
-
大语言模型(LLM):GPT 系列(GPT-2/3/4/ChatGPT)、BERT、T5 等均基于 Transformer 架构。
-
机器翻译:Transformer 最初即用于翻译任务,已完全替代传统 RNN 模型(如 Google Translate)。
-
信息抽取、问答系统、文本分类:BERT 系列被广泛用于下游任务。
-
语义搜索与对话系统:如语义检索、FAQ系统、智能客服中的核心模块。
3.5.2 计算机视觉(CV)
-
图像分类与识别:Vision Transformer(ViT)直接在图像块上应用 Self-Attention。
-
目标检测与图像分割:DETR、Mask2Former 等引入 Transformer 编码空间关系。
-
医学影像处理:在脑部扫描、X 光图像分析中,Transformer 模型逐渐替代传统 CNN。
3.5.3 多模态学习
-
图文匹配与生成:如 OpenAI 的 CLIP、DALL·E,将文本与图像共同建模。
-
视频生成与理解:Sora、Video-Transformer 等用于视频问答、生成、动作识别。
-
跨模态检索与交互:用于多模态搜索引擎、VQA(视觉问答)等。
3.5.4 语音与音频处理
-
语音识别(ASR):如 Whisper 模型,使用 Transformer 捕捉长距离上下文。
-
语音合成(TTS):FastSpeech 系列引入 Transformer 提升语音自然度与推理效率。
-
音乐生成与伴奏生成:Transformer 被用于生成 MIDI 音符序列或和声结构。
3.5.5 强化学习与控制系统
-
Decision Transformer:将序列建模思想引入强化学习,实现无模型策略优化。
-
游戏 AI:在围棋、Minecraft、Atari 等任务中,Transformer 增强策略学习和世界建模。
四. BERT
4.1 BERT出现的背景
在 Transformer 被提出之后(2017年),虽然它已经在机器翻译等任务中表现出色,但 多数 NLP 任务依然采用“从零训练”或“静态词向量(如 word2vec、GloVe)+任务特定模型” 的方法。这种做法存在以下问题:
-
无法共享知识:每个任务都需要单独训练模型,数据和计算资源浪费严重;
-
词向量静态:传统词向量无法根据上下文动态调整语义,"bank" 一词在“河岸”与“银行”中的意思是一样的;
-
上下文建模能力弱:传统模型通常只能从左到右或右到左理解句子,不能双向建模完整上下文。
于是,Google 在 2018 年提出了 BERT(Bidirectional Encoder Representations from Transformers),其主要创新是:
-
引入了“预训练 + 微调”框架;
-
采用双向 Transformer 编码器;
-
设计了两个预训练任务(MLM 和 NSP) 来帮助模型学习语义知识。
BERT 一经推出,便刷新了多项 NLP 任务的性能记录,标志着 预训练语言模型时代的到来。
4.2 BERT的核心架构
BERT 只用了 Encoder,完全舍弃 Decoder,它不是生成模型,而是一个双向理解模型。

接下来具体介绍下Tokenizer, Embedding, 输出层(MLM,NSP)。
Tokenizer
原始文本首先会被送入分词器(Tokenizer)进行切分处理,生成Token序列。这一过程通常包含文本标准化(如转为小写)、标点符号过滤以及词语切分等步骤。举个例子:
输入句子:I love deep learning
Token 化:['[CLS]', 'i', 'love', 'deep', 'learn', '##ing', '[SEP]']
其中:
-
[CLS]:句首分类符号(用于分类等任务) -
[SEP]:句子之间的分隔符 -
##ing:子词表示,这是 WordPiece 的规则,表示它是learn的一部分
接下来会将将每个 token 映射为 ID(索引):
['[CLS]', 'i', 'love', 'deep', 'learn', '##ing', '[SEP]']
[101, 1045, 2293, 2784, 4553, 2075, 102]
这些数字是 BERT 词表中的索引。
Embedding
对于每个 token,BERT 会创建以下三个向量并相加:
| 向量类型 | 说明 |
|---|---|
| Token Embedding | 词本身的词向量(WordPiece 生成) |
| Position Embedding | 每个词在句子中的位置编号对应的向量(例如第0位、第1位……) |
| Segment Embedding | 表示这个词属于哪一个句子(A → 0,B → 1) |
举个例子:
句子A: "I love NLP"
句子B: "It is great"
输入:
[CLS] I love NLP [SEP] It is great [SEP]
→ token_ids: [101, 1045, 2293, 17953, 102, 2009, 2003, 2307, 102]
→ position_ids: [ 0, 1, 2, 3, 4, 5, 6, 7, 8]
→ segment_ids: [ 0, 0, 0, 0, 0, 1, 1, 1, 1]
embedding = token_embed + position_embed + segment_embed
Transformer Encoder

输出层(MLM,NSP)
MLM (MaskedLanguageModel)
目标是给定一个句子,随机遮盖其中一部分单词,要求模型根据上下文预测这些被遮盖的词。
特点:
-
传统语言模型是“从左到右”或“从右到左”预测,只能使用部分上下文;
-
MLM 是 双向建模,同时看到左右文,学习更丰富的上下文依赖;
-
15% 掩码策略可以避免模型过度依赖某一部分上下文,增强泛化。
具体过程:
随机选取输入序列中 15% 的 token;对这些 token,按照以下概率进行处理:
-
80% → 替换成
[MASK](如“我[mask]吃苹果”) -
10% → 替换成一个随机词(如“我狗吃苹果”)
-
10% → 保留原词(如“我爱吃苹果”)
模型接收这个“被遮挡”的句子作为输入;输出层是一个 Softmax 分类器,在词汇表中选择最可能的词填入 Mask 位置。
NSP (NextSentence Prediction)
目标是给定两个句子 A 和 B,判断 B 是不是 A 的下一句。
特点:
-
帮助模型学习句子之间的逻辑关系,如因果、承接、转折等;
-
有助于下游任务如问答(QA)、自然语言推理(NLI);
-
建立跨句子的语义理解能力,不只是 token 层面建模。
具体过程:
构建句子对输入:[CLS] 句子A [SEP] 句子B [SEP]数据标签分两种:
-
50% 是真实的下一句(正例)
-
50% 是随机采样的句子(负例)
将 [CLS] 位置的输出向量送入一个二分类器,判断是否为“下一句”。
4.3 BERT的优势
| 优势 | 描述 |
|---|---|
| 双向建模能力 | 使用 Masked LM,可以同时看到左侧和右侧上下文,更精准地理解句子含义。 |
| 预训练+微调范式 | 预训练后可迁移到多种下游任务,大幅减少标注数据需求。 |
| 上下文感知词向量 | 同一个词在不同上下文中会有不同表示,克服静态词向量表达不清的问题。 |
| 开源生态成熟 | HuggingFace 等库提供丰富模型,易于调用、微调与集成。 |
| 表现强大 | 在 GLUE、SQuAD、NER、文本分类等多种任务中均刷新当时最优表现。 |
4.4 BERT存在的问题
| 问题 | 描述 |
|---|---|
| 推理速度慢 | 输入必须同时处理完整序列,不能像 GPT 那样逐字生成,部署成本高。 |
| 预训练成本高 | 需要数百万步的训练,依赖 TPUs 或大型 GPU 集群。 |
| 无法自然生成文本 | 作为 Encoder-only 架构,BERT 不能用来进行语言生成任务(如写文章)。 |
| 句子级建模局限 | NSP(Next Sentence Prediction)任务被质疑效果有限,BERT对长文本建模弱。 |
| 结构固定 | 原版 BERT 是非自回归模型,无法灵活处理变长输入或交互式任务。 |
4.5 BERT在当下的应用
| 应用领域 | 实际应用 |
|---|---|
| 搜索与排序系统 | 如 Google 搜索引擎中集成 BERT,用于理解查询意图与内容匹配。 |
| 智能问答 | 应用于 FAQ 系统、在线客服、医学/金融问答等场景。 |
| 文本理解类任务 | 情感分析、文本分类、命名实体识别(NER)、关系抽取等。 |
| 文档匹配与推荐 | 在推荐系统中分析用户评论、内容标签,提高匹配效果。 |
| 政务、司法系统 | 用于合同理解、法律条文比对、政策问答等领域的自动文本分析。 |
| 模型微调底座 | 被广泛用于下游模型微调的起点,如 RoBERTa、ALBERT、TinyBERT 等均由 BERT 演化而来。 |
五. GPT (生成式预训练)
5.1 GPT出现的背景
BERT 的提出解决了很多理解类任务的问题,但它作为 Encoder-only 模型,并不适合用于文本生成任务。而在生成式任务中,如:
-
写文章、自动续写、
-
对话系统、代码生成、
-
多轮问答和创作等,
我们需要的是一种 自回归语言模型(Auto-regressive LM) —— 能够基于已知内容一步步“预测下一个词”的结构。
因此,OpenAI 提出了 GPT(Generative Pre-trained Transformer),最初在 2018 年发布 GPT-1,随后:
-
2019 年 GPT-2 开始引起广泛关注;
-
2020 年 GPT-3 横空出世,凭借 1750 亿参数登顶 NLP 高峰;
-
2022 年开始的 ChatGPT(基于 GPT-3.5 / GPT-4)进一步展示了其对话与创作能力。
GPT 模型本质是基于 Transformer 的 Decoder 部分结构,采用 自回归训练目标(预测下一个词),自然适用于生成任务。
5.2 GPT的核心架构

自回归生成
它的基本思想是: 当前输出依赖于之前的所有输出。
整个句子的生成是每个 token 的条件概率连乘:

在语言建模中,就是:
-
模型每次预测一个单词或一个 token(词片段)
-
这个 token 的预测是基于“之前已经生成的所有 token”
-
然后再把这个新生成的 token 作为输入的一部分,继续生成下一个 token
举个例子:
输入文本编码:
-
比如我们输入开头“今天是”
-
被分成多个 token,如:[“今”, “天”, “是”]
自注意力掩码机制(Mask):
-
为了确保模型只能看到前面的词,不能看到“未来”内容(防止泄露)
-
使用了 masked self-attention(掩码自注意力,前文的Transformer有提到)
逐个生成 token:
-
首先基于输入“今天是”,生成下一个 token,例如“晴”
-
然后组合成“今天是晴”,再输入到模型中继续生成下一个 token,例如“天”
-
如此循环,直到生成终止符或达到最大长度
5.3 GPT的优势
| 优势 | 描述 |
|---|---|
| 自然语言生成能力强 | 自回归建模,擅长连续写作、对话、总结、翻译等生成式任务。 |
| 预训练语义丰富 | 使用海量语料训练,具备丰富的世界知识、语义常识和语言理解能力。 |
| 通用性极强 | 一个模型可迁移至问答、摘要、翻译、代码生成、诗歌创作等多种任务。 |
| 可对话与交互 | 通过微调或强化学习(如 RLHF)适配多轮对话,构建 ChatGPT 类产品。 |
| 架构简洁 | 仅基于 Transformer 的 Decoder 结构,训练和推理流程一致,便于部署。 |
| 高扩展性 | GPT 架构容易通过增加层数、参数量扩展至大模型(GPT-3、GPT-4 等)。 |
5.4 GPT存在的问题
| 问题 | 描述 |
|---|---|
| 上下文窗口限制 | 模型一次只能看到有限长度的上下文,早期 GPT 模型窗口长度较短。 |
| 内容准确性问题 | 模型容易“一本正经地胡说八道”(hallucination),生成不真实或不合理内容。 |
| 训练资源极高 | GPT-3/GPT-4 等需巨量数据和超大算力,训练成本高昂,非普通组织可承担。 |
| 长文本推理困难 | 虽然能生成长文本,但推理链条复杂时,常出现逻辑跳跃或语义漂移。 |
| 缺乏世界动态知识 | 模型无法实时获取新知识,生成内容有滞后性(除非接入搜索引擎等外部工具)。 |
| 安全性与伦理问题 | 有可能生成有害内容、偏见信息、虚假陈述,需要对输出内容进行严格对齐与控制。 |
5.5 GPT在当下的应用
| 应用领域 | 实际应用 |
|---|---|
| 智能对话与客服 | ChatGPT、Copilot Chat、企业客服机器人,适配多轮交互式对话任务。 |
| 文本创作与辅助写作 | 撰写邮件、改写句子、写小说、写诗歌、文案生成、写 PPT 提纲等。 |
| 文档总结与理解 | 会议纪要生成、文档摘要、法律文本解读、医学文献分析等。 |
| 翻译与语言处理 | 中英互译、风格变换(正式/口语化)、语言校对与润色。 |
| 编程辅助 | Copilot、Code Interpreter、代码补全、调试建议、正则表达式生成。 |
| 教育与答疑 | 辅助教学、作业批改、数学题解答、编程教学、自适应学习系统。 |
| 多模态模型接入 | 接入图像、语音、视频等输入后,作为视觉问答、AI 助理的语言核心模块。 |
六. 常见神经网络模型对比表
| 维度 | CNN | RNN | Transformer | BERT | GPT |
|---|---|---|---|---|---|
| 基础结构 | 卷积层 + 池化层 | 循环单元(LSTM/GRU) | 自注意力机制 + 前馈网络 | Transformer Encoder(双向) | Transformer Decoder (单向) |
| 输入依赖方式 | 局部感知、无顺序依赖 | 按时间序列,前后依赖强 | 使用位置编码并行处理 | 双向编码(上下文同时建模) | 单向生成(左到右) |
| 注意力机制 | 无 | 无(传统RNN),LSTM/GRU部分记忆 | 多头注意力机制(Multi-head Attention) | 多头双向注意力 | 多头单向注意力(Mask Attention) |
| 预训练任务 | 无 | 无 | 依赖具体任务 | MLM + NSP | 自回归语言建模(Next Token Prediction) |
| 并行能力 | 强(卷积操作可并行) | 弱(时间步依赖导致不能并行) | 强(可完全并行) | 强(训练时可并行) | 强(训练时并行,生成时逐步) |
| 表达能力 | 擅长局部特征提取 | 擅长处理序列依赖 | 处理长距离依赖能力强 | 语言理解能力强 | 文本生成能力强 |
| 应用场景 | 图像识别、文本分类等 | 语音识别、时间序列预测 | 机器翻译、问答、对话系统等 | 文本分类、问答、句子匹配等 | 对话系统、写作、代码生成、续写等 |
| 优点 | 高效、参数少、稳定 | 能捕捉时序信息 | 训练快、长依赖处理能力强 | 上下文理解强,预训练通用性好 | 可生成高质量文本,泛化能力强 |
| 缺点 | 缺乏全局依赖建模能力 | 长序列训练慢,梯度消失问题 | 参数多,训练资源需求大 | 无法生成文本,推理时需全序列输入 | 生成效率相对低,信息获取是单向的 |
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)