4

4

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。

关键特点

  1. 双向上下文建模
    • 模型可以同时利用输入序列的全部上下文信息(左右两侧的词),例如BERT通过[MASK]遮盖部分词后,利用周围词预测被遮盖的词。
    • 适用于需要全局理解的任务(如文本分类、实体识别)。

  2. 预训练任务
    掩码语言模型(MLM, Masked Language Model):随机遮盖输入中的部分词(如15%),让模型预测这些词。
    Next Sentence Prediction (NSP)(可选):判断两个句子是否连续(后续研究发现NSP可能作用有限)。

  3. 生成能力较弱
    • 自编码模型在训练时依赖[MASK]符号,但在生成任务(如文本生成)中无法动态预测下一个词,因此不适合开放式生成

应用场景

• 文本分类(如情感分析)
• 命名实体识别(NER)
• 句子相似度计算
• 问答系统(如SQuAD)


2. 自回归(Autoregressive)

核心思想

目标:按顺序逐个生成数据,当前时刻的输出依赖之前时刻的输出。
训练方式:模型通过极大似然估计(MLE)学习预测序列中下一个词的概率分布。
典型代表模型:GPT系列(GPT-1/2/3)、LSTM、Transformer解码器。

关键特点

  1. 单向上下文建模
    • 模型只能利用历史信息(左侧的词),无法访问未来信息(即因果掩码,Causal Mask)。
    • 例如:GPT生成文本时,每个词只能看到它之前的词。

  2. 预训练任务
    语言模型(LM, Language Modeling):给定前 ( t ) 个词,预测第 ( t+1 ) 个词。
    • 训练目标:最大化序列的似然概率 ( P(x_t | x_{<t}) )。

  3. 强大的生成能力
    • 自回归模型天然适合序列生成任务(如文本生成、机器翻译),因为其生成方式是逐步预测的。

应用场景

• 文本生成(如故事创作、代码生成)
• 机器翻译
• 语音合成
• 自动摘要(部分方法)


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的优势

  1. 自动化提示设计:避免人工设计提示模板的繁琐过程。
  2. 高效适配小样本任务:在低资源场景下性能显著优于传统Fine-tuning。
  3. 保留预训练知识:通过提示调整而非全参数微调,减少灾难性遗忘。
  4. 可扩展性:适用于多种任务(分类、生成、问答等)。

6. 应用场景

小样本学习(Few-shot Learning):数据量少时,P-tuning比Fine-tuning更鲁棒。
多任务学习:同一组提示向量可跨任务共享。
生成任务:例如用P-tuning优化GPT的生成提示(如"写一篇关于[P0][P1]的文章")。


7. 代码示例(简化版)

import torch
from transformers import BertForMaskedLM, BertTokenizer

# 初始化模型和分词器
model = BertForMaskedLM.from_pretrained('bert-base-uncased')
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

# 定义可学习的提示向量(假设提示长度为5)
prompt_length = 5
prompt_embeddings = torch.nn.Parameter(torch.randn(prompt_length, model.config.hidden_size))

# 冻结BERT参数,仅训练提示向量
for param in model.parameters():
param.requires_grad = False

# 输入句子
input_text = "这部电影很棒。"
inputs = tokenizer(input_text, return_tensors="pt")

# 将提示向量拼接到输入前
input_embeds = model.bert.embeddings(inputs["input_ids"])
input_embeds = torch.cat([prompt_embeddings.unsqueeze(0), input_embeds], dim=1)

# 前向传播
outputs = model(inputs_embeds=input_embeds)

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的差异,可以更合理地选择归一化方法以适配不同模型架构!

介绍一下其中一个打比赛的项目

介绍一下蓝桥杯,并让我提供获奖证明

力扣-K 站中转内最便宜的航班