4

4
Exisfar4
Bert 的结构
BERT(Bidirectional Encoder Representations from Transformers)是一种基于Encoder-only架构的预训练语言模型。BERT模型的结构与Transformer中的编码器几乎一致,都是由多个编码模块堆叠而成,每个编码模块包含一个多头自注意力模块和一个全连接前馈模块。
StructBert 和 Bert 的区别
StructBERT 是阿里巴巴在BERT基础上提出的改进模型,核心思想是通过显式建模句子和词级别的结构信息来增强BERT的语义理解能力。以下是它与原始BERT的主要区别:
1. 预训练任务的改进
(1) 词级别结构建模(Word Structural Objective)
• 原始BERT:仅通过Masked Language Model (MLM) 预测被遮盖的词。
• StructBERT:新增词序预测任务(Word Order Prediction):
• 随机打乱输入句子中部分词的顺序(如15%的词),要求模型预测原始顺序。
• 目的:显式学习词与词之间的语法和局部依赖关系。
(2) 句子级别结构建模(Sentence Structural Objective)
• 原始BERT:通过Next Sentence Prediction (NSP) 判断两个句子是否连续。
• StructBERT:将NSP扩展为句子排序任务(Sentence Order Prediction):
• 给定两个句子,不仅判断是否连续,还需区分它们的正确顺序(正序/逆序)。
• 目的:强化模型对句子间逻辑关系的理解(如因果关系、时间顺序)。
2. 结构信息的显式利用
• BERT:依赖自注意力机制隐式学习结构信息(如语法树、句间关系)。
• StructBERT:通过上述任务显式引导模型关注语言结构,更适合需要强结构理解的任务(如文本生成、语义解析)。
3. 性能表现
• 通用任务:StructBERT在GLUE、SQuAD等基准上表现优于BERT,尤其在需要结构敏感的任务(如句对分类、文本连贯性判断)中提升显著。
• 中文任务:针对中文语料优化(如分词、词序),在中文NLP任务(如机器阅读理解、文本摘要)中表现更优。
4. 其他改进
• 训练效率:StructBERT通过结构任务加速收敛,部分实验显示所需训练步数更少。
• 多语言适配:对词序敏感的语言(如中文、日语)效果提升更明显。
总结:StructBERT vs BERT
特性 | BERT | StructBERT |
---|---|---|
核心任务 | MLM + NSP | MLM + 词序预测 + 句子排序 |
结构建模 | 隐式(通过注意力) | 显式(词序+句序) |
适用场景 | 通用语义理解 | 需强结构理解的任务(如生成、解析) |
中文优化 | 无专门优化 | 针对中文词序和分词改进 |
面试回答建议
• 关联BERT的局限性:指出BERT依赖大量数据隐式学习结构,而StructBERT通过显式任务弥补这一不足。
• 举例应用:如生成任务(需词序敏感)、法律文本分析(需逻辑关系判断)。
• 延伸方向:可提及类似改进模型(如SpanBERT、ALBERT)的设计思路。
介绍一下科研工作
Transformer 的结构
原理:Transformer 是一类基于注意力机制(Attention)的模块化构建的神经网络结构。给定一个序列,Transformer 将一定数量的历史状态和当前状态同时输入,然 后进行加权相加。对历史状态和当前状态进行“通盘考虑”,然后对未来状态进行 预测。基于 Transformer 的语言模型,以词序列作为输入,基于一定长度的上文和 当前词来预测下一个词出现的概率。
结构:Transformer 是由两种模块组合构建的模块化网络结构。两种模块分别为:(1) 注意力(Attention)模块;(2)全连接前馈(Fully-connected Feedforwad)模块。其中, 自注意力模块由自注意力层(Self-Attention Layer)、残差连接(Residual Connections) 和层正则化(Layer Normalization)组成。全连接前馈模块由全连接前馈层,残差 连接和层正则化组成。
Transformer 里有哪些地方用到了掩码机制
在Transformer及其衍生模型(如BERT、GPT等)中,掩码(Mask)机制是核心设计之一,主要用于控制信息流动或生成特定训练任务。以下是Transformer中用到掩码机制的典型场景:
**1. 编码器-解码器架构中的掩码(原始Transformer)
(1) 解码器的自注意力层(Self-Attention)
• 作用:确保解码时只能看到当前位置及之前的token,避免未来信息泄露(即因果掩码,Causal Mask)。
• 实现方式:
• 生成一个下三角矩阵(对角线及左侧为0,右上为-inf
)。
• 示例(输入序列长度为4):
[[0, -inf, -inf, -inf],
[0, 0, -inf, -inf],
[0, 0, 0, -inf],
[0, 0, 0, 0]]
• 应用场景:自回归生成(如GPT、机器翻译)。
(2) 编码器-解码器注意力层(Cross-Attention)
• 作用:解码器通过掩码限制只能关注编码器的有效输出部分(如处理变长输入时对padding部分掩码)。
**2. 仅编码器架构中的掩码(如BERT)
(1) Masked Language Model (MLM)
• 作用:随机遮盖输入token(如15%),让模型预测被遮盖的词。
• 掩码策略:
• 80%替换为[MASK]
。
• 10%随机替换为其他词。
• 10%保持不变。
• 目的:实现双向上下文建模。
(2) Padding Mask
• 作用:处理变长序列时,对填充部分([PAD]
)进行掩码,避免注意力机制计算无效位置。
• 实现方式:
• 将padding位置的注意力权重设为-inf
(softmax后接近0)。
**3. 仅解码器架构中的掩码(如GPT)
• 因果掩码(Causal Mask):
• 与原始Transformer解码器相同,确保生成时只能看到历史信息。
• 扩展应用:GPT系列模型在预训练和生成时均使用此掩码。
**4. 其他变体模型中的掩码
(1) 稀疏注意力模型(如Longformer)
• 滑动窗口掩码:限制每个token只关注局部邻域,降低计算复杂度。
• 全局注意力掩码:允许特定token(如[CLS]
)关注全部序列。
(2) 跨模态模型(如ViT、DALL·E)
• 图像块掩码:对图像分块后随机遮盖,模拟文本MLM任务(如MAE模型)。
(3) 前缀解码(Prefix-LM)
• 部分因果掩码:前缀部分可双向注意力,生成部分需因果掩码(如UniLM)。
掩码机制的核心作用总结
掩码类型 | 应用场景 | 目的 |
---|---|---|
因果掩码 | 解码器、GPT | 防止未来信息泄露 |
Padding掩码 | 变长序列处理 | 忽略无效填充位置 |
MLM动态掩码 | BERT预训练 | 双向上下文建模 |
稀疏/局部掩码 | Longformer、BigBird | 降低长序列计算成本 |
图像块掩码 | ViT、MAE | 跨模态掩码建模 |
面试回答技巧
• 分场景说明:区分编码器、解码器、跨模态等不同架构下的掩码用途。
• 举例模型:如BERT的MLM、GPT的因果掩码。
• 延伸问题:可讨论掩码如何影响模型性能(如BERT的[MASK]
偏差问题)。
解释一下自编码和自回归
在自然语言处理(NLP)和深度学习领域,**自编码(Autoencoding)和自回归(Autoregressive)**是两种核心的建模方法,分别对应不同的训练目标和生成方式。它们在模型架构、训练任务和应用场景上有显著区别。以下是详细解释:
1. 自编码(Autoencoding)
核心思想
• 目标:通过重建输入数据来学习数据的潜在表示(即编码)。
• 训练方式:模型接收部分被破坏的输入(如随机遮盖的词),并尝试还原原始数据。
• 典型代表模型:BERT、ALBERT、RoBERTa。
关键特点
-
双向上下文建模
• 模型可以同时利用输入序列的全部上下文信息(左右两侧的词),例如BERT通过[MASK]
遮盖部分词后,利用周围词预测被遮盖的词。
• 适用于需要全局理解的任务(如文本分类、实体识别)。 -
预训练任务
• 掩码语言模型(MLM, Masked Language Model):随机遮盖输入中的部分词(如15%),让模型预测这些词。
• Next Sentence Prediction (NSP)(可选):判断两个句子是否连续(后续研究发现NSP可能作用有限)。 -
生成能力较弱
• 自编码模型在训练时依赖[MASK]
符号,但在生成任务(如文本生成)中无法动态预测下一个词,因此不适合开放式生成。
应用场景
• 文本分类(如情感分析)
• 命名实体识别(NER)
• 句子相似度计算
• 问答系统(如SQuAD)
2. 自回归(Autoregressive)
核心思想
• 目标:按顺序逐个生成数据,当前时刻的输出依赖之前时刻的输出。
• 训练方式:模型通过极大似然估计(MLE)学习预测序列中下一个词的概率分布。
• 典型代表模型:GPT系列(GPT-1/2/3)、LSTM、Transformer解码器。
关键特点
-
单向上下文建模
• 模型只能利用历史信息(左侧的词),无法访问未来信息(即因果掩码,Causal Mask)。
• 例如:GPT生成文本时,每个词只能看到它之前的词。 -
预训练任务
• 语言模型(LM, Language Modeling):给定前 ( t ) 个词,预测第 ( t+1 ) 个词。
• 训练目标:最大化序列的似然概率 ( P(x_t | x_{<t}) )。 -
强大的生成能力
• 自回归模型天然适合序列生成任务(如文本生成、机器翻译),因为其生成方式是逐步预测的。
应用场景
• 文本生成(如故事创作、代码生成)
• 机器翻译
• 语音合成
• 自动摘要(部分方法)
3. 自编码 vs 自回归对比
特性 | 自编码(如BERT) | 自回归(如GPT) |
---|---|---|
上下文方向 | 双向(可访问全部上下文) | 单向(仅历史信息) |
训练任务 | MLM(掩码语言模型) | LM(语言模型) |
生成能力 | 弱(需微调适配生成任务) | 强(天然适合生成) |
典型应用 | 分类、理解任务 | 生成任务 |
掩码机制 | 动态遮盖输入词(MLM) | 因果掩码(禁止访问未来信息) |
模型架构 | Transformer编码器 | Transformer解码器 |
4. 混合模型(自编码 + 自回归)
为了结合两者的优势,一些模型尝试混合两种方法:
• UniLM:通过不同的注意力掩码,同一模型可切换自编码/自回归模式。
• T5:将所有任务统一为“文本到文本”生成,但部分任务仍依赖自编码预训练。
• BART:编码器-解码器结构,编码器类似BERT,解码器类似GPT。
5. 面试回答技巧
• 明确区别:强调自编码是双向重建,自回归是单向生成。
• 举例模型:BERT(自编码)vs GPT(自回归)。
• 延伸问题:
• 为什么BERT不适合生成任务?(因训练时依赖[MASK]
,生成时无法动态预测)
• 为什么GPT不适合分类任务?(因缺乏全局上下文)
通过理解这两种范式,可以更清晰地选择适合任务的模型架构。
P-tuning的原理
P-tuning 原理详解
P-tuning(Prompt Tuning)是一种针对预训练语言模型(如BERT、GPT)的参数化提示(Prompt)优化方法,旨在通过可学习的连续提示(Continuous Prompts)替代传统手工设计的离散提示(Discrete Prompts),从而更高效地适配下游任务。其核心思想是通过梯度下降自动学习最优的提示表示,而非依赖人工设计。
1. 传统Prompt的局限性
在NLP中,**Prompt(提示)**是一种通过模板将下游任务转化为预训练任务形式的方法(例如,将分类任务转化为完形填空)。例如:
• 任务:情感分析(句子:“这部电影很棒” → 标签:“正面”)
• 手工Prompt模板:
"这部电影很棒。总的来说,这是一部[MASK]电影。"
模型预测[MASK]
位置应为“好”或“差”。
问题:
• 人工设计提示模板需要大量试验,且对模板的微小改动可能显著影响性能。
• 离散的文本提示难以通过梯度优化直接调整。
2. P-tuning的核心思想
P-tuning提出用**可学习的连续向量(即软提示,Soft Prompts)**替代离散的文本提示,并通过反向传播优化这些向量。具体步骤:
(1) 参数化提示(Parameterized Prompts)
• 将传统提示中的离散词(如"这是一部[MASK]电影")替换为可训练的连续向量(即伪Token的嵌入)。
• 这些向量在模型输入层拼接在原始输入前(或插入中间),作为可学习的上下文。
(2) 梯度优化
• 通过下游任务的损失函数,反向传播更新这些连续提示向量(同时可能冻结部分模型参数)。
• 优化目标是让提示向量引导模型更高效地适配任务。
(3) 结合预训练任务形式
• 例如,在分类任务中,P-tuning仍保留[MASK]
位置让模型预测,但提示部分变为可学习的参数。
3. P-tuning vs 传统方法对比
方法 | 提示形式 | 优化方式 | 灵活性 | 计算成本 |
---|---|---|---|---|
手工Prompt | 离散文本 | 人工设计 | 低 | 低 |
Fine-tuning | 无提示,直接微调模型 | 梯度更新全部参数 | 高 | 高 |
P-tuning | 连续向量(软提示) | 梯度更新提示参数 | 高 | 低 |
Prefix-tuning | 连续前缀向量 | 梯度更新前缀参数 | 高 | 中 |
4. P-tuning的技术细节
(1) 提示向量的初始化
• 随机初始化:提示向量初始化为随机嵌入。
• 基于真实词初始化:用相关任务的词汇嵌入初始化(例如情感分析任务用“好”“坏”等词的嵌入)。
(2) 提示的插入位置
• 前置提示(Prefix Prompt):在输入序列前添加可学习向量(如[P0][P1]...[Pk] + 原始输入
)。
• 中间提示:在输入中插入可学习向量(如"这部电影[P0][P1]很棒"
)。
(3) 模型参数调整
• 冻结大部分参数:仅训练提示向量,保持预训练模型参数不变(降低计算成本)。
• 部分微调:联合优化提示向量和部分模型层(如顶层Transformer)。
5. P-tuning的优势
- 自动化提示设计:避免人工设计提示模板的繁琐过程。
- 高效适配小样本任务:在低资源场景下性能显著优于传统Fine-tuning。
- 保留预训练知识:通过提示调整而非全参数微调,减少灾难性遗忘。
- 可扩展性:适用于多种任务(分类、生成、问答等)。
6. 应用场景
• 小样本学习(Few-shot Learning):数据量少时,P-tuning比Fine-tuning更鲁棒。
• 多任务学习:同一组提示向量可跨任务共享。
• 生成任务:例如用P-tuning优化GPT的生成提示(如"写一篇关于[P0][P1]的文章"
)。
7. 代码示例(简化版)
import torch |
8. 相关变体
• P-tuning v2:将提示向量插入到每一层Transformer中,而非仅输入层。
• Prefix-tuning:专注于生成任务,在每一层Key-Value注意力中插入可学习前缀。
• LoRA:通过低秩矩阵调整提示向量,进一步减少参数量。
9. 面试回答技巧
• 核心点:强调“用可学习连续提示替代离散文本”。
• 对比Fine-tuning:说明P-tuning在低资源下的优势。
• 延伸问题:
• P-tuning为何对小样本任务有效?(提示向量作为任务适配的轻量级接口)
• 与Adapter-tuning的区别?(Adapter调整模型内部结构,P-tuning调整输入)
Layer Normalization 和 Batch Normalization 的差异
Layer Normalization (LN) 与 Batch Normalization (BN) 的差异详解
在深度学习中,Layer Normalization (LN) 和 Batch Normalization (BN) 是两种常用的归一化技术,用于加速训练并提升模型稳定性。它们的核心差异在于归一化的维度和适用场景。以下是详细对比:
1. 核心思想对比
特性 | Batch Normalization (BN) | Layer Normalization (LN) |
---|---|---|
归一化维度 | 对同一特征通道(Channel)跨样本(Batch维度)归一化 | 对同一样本的所有特征通道(Layer维度)归一化 |
依赖的数据 | 依赖Batch大小(需足够大的Batch) | 不依赖Batch大小(单样本也可计算) |
训练/推理差异 | 训练时用Batch统计量,推理时用固定均值和方差 | 训练和推理行为一致(无需存储统计量) |
适用场景 | 全连接层、卷积层(CNN) | 循环神经网络(RNN)、Transformer、小Batch场景 |
对Batch的敏感性 | 对Batch大小敏感(小Batch时性能下降) | 对Batch大小不敏感 |
2. 数学公式对比
(1) Batch Normalization (BN)
• 归一化维度:对每个特征通道(Channel)跨Batch计算均值和方差。
• 输入张量形状:(Batch, Channel, H, W)
(CNN)或 (Batch, Feature)
(全连接层)。
• 对每个Channel计算:
[
\mu_c = \frac{1}{N} \sum_{i=1}^N x_{i,c}, \quad \sigma_c^2 = \frac{1}{N} \sum_{i=1}^N (x_{i,c} - \mu_c)^2
]
• 归一化:
[
\hat{x}{i,c} = \frac{x{i,c} - \mu_c}{\sqrt{\sigma_c^2 + \epsilon}}
]
• 缩放和偏移:
[
y_{i,c} = \gamma_c \hat{x}_{i,c} + \beta_c
]
((\gamma_c) 和 (\beta_c) 是可学习的参数)
(2) Layer Normalization (LN)
• 归一化维度:对每个样本的所有特征(Layer维度)计算均值和方差。
• 输入张量形状:(Batch, Feature)
或 (Batch, Seq_len, Hidden)
(Transformer)。
• 对每个样本计算:
[
\mu_n = \frac{1}{D} \sum_{d=1}^D x_{n,d}, \quad \sigma_n^2 = \frac{1}{D} \sum_{d=1}^D (x_{n,d} - \mu_n)^2
]
((D) 是特征维度)
• 归一化与缩放偏移:
[
y_{n,d} = \gamma_d \frac{x_{n,d} - \mu_n}{\sqrt{\sigma_n^2 + \epsilon}} + \beta_d
]
3. 关键差异解析
(1) 归一化方向不同
• BN:在Batch维度上归一化(同一特征通道跨样本)。
• 适用于CNN,因为卷积层的特征图(Channel)在不同位置共享统计特性。
• LN:在Layer维度上归一化(同一样本的所有特征)。
• 适用于序列模型(如Transformer),因为序列中不同位置的统计特性可能不同。
(2) 对Batch大小的依赖性
• BN:
• 训练时依赖Batch统计量(均值和方差),Batch较小时(如Batch=1)统计不可靠。
• 推理时需固定训练阶段的全局均值和方差。
• LN:
• 统计量仅依赖当前样本,与Batch大小无关,适合小Batch或在线学习场景。
(3) 适用模型架构
• BN的局限性:
• 在RNN中效果差(序列长度可变,Batch统计量不稳定)。
• 不适合Transformer(自注意力机制需逐样本独立处理)。
• LN的优势:
• Transformer中默认使用LN(如BERT、GPT),因其对序列长度和Batch大小不敏感。
4. 直观示例
(1) CNN中的BN
输入张量:(Batch=4, Channel=3, H=2, W=2)
• 对每个Channel(共3个)计算4个样本的均值和方差。
• 归一化后,同一Channel在不同样本上的分布一致。
(2) Transformer中的LN
输入张量:(Batch=2, Seq_len=5, Hidden=4)
• 对每个样本的5个Token独立归一化(共计算2次均值和方差)。
• 每个Token的特征维度(Hidden=4)被归一化到相同分布。
5. 面试回答技巧
• 核心对比点:强调BN是跨样本归一化,LN是单样本内归一化。
• 模型关联性:
• BN适合CNN(如ResNet),LN适合Transformer(如BERT)。
• 延伸问题:
• 为什么Transformer不用BN?(序列长度可变,Batch统计量不稳定)
• LN如何解决梯度问题?(通过归一化缓解内部协变量偏移)
6. 总结
场景 | 推荐方法 | 原因 |
---|---|---|
CNN(图像分类) | Batch Normalization | 依赖Batch统计量,稳定卷积特征分布 |
RNN/Transformer | Layer Normalization | 独立处理样本,对序列长度和Batch大小不敏感 |
小Batch或在线学习 | Layer Normalization | 不依赖Batch统计量 |
通过理解BN和LN的差异,可以更合理地选择归一化方法以适配不同模型架构!