【NLP 面经 7、常见transformer面试题】

目录

[1. 为何使用多头注意力机制?](#1. 为何使用多头注意力机制?)

[2. Q和K使用不同权重矩阵的原因](#2. Q和K使用不同权重矩阵的原因)

[3. 选择点乘而非加法的原因](#3. 选择点乘而非加法的原因)

[4. Attention进行scaled的原因](#4. Attention进行scaled的原因)

[5. 对padding做mask操作](#5. 对padding做mask操作)

[6. 多头注意力降维原因](#6. 多头注意力降维原因)

[7. Transformer Encoder模块简介](#7. Transformer Encoder模块简介)

[8. 乘以embedding size的开方的意义](#8. 乘以embedding size的开方的意义)

[9. 位置编码](#9. 位置编码)

[10. 其他位置编码技术](#10. 其他位置编码技术)

[11. Transformer中的残差结构及其意义](#11. Transformer中的残差结构及其意义)

[12. LayerNorm与BatchNorm](#12. LayerNorm与BatchNorm)

[13. BatchNorm介绍](#13. BatchNorm介绍)

[14. Transformer的前馈神经网络](#14. Transformer的前馈神经网络)

[15. Encoder与Decoder的交互](#15. Encoder与Decoder的交互)

[16. Decoder自注意力与Encoder的区别](#16. Decoder自注意力与Encoder的区别)

[17. Transformer的并行化](#17. Transformer的并行化)

[18. WordPiece Model与Byte Pair Encoding](#18. WordPiece Model与Byte Pair Encoding)

[19. Transformer训练中的学习率与Dropout](#19. Transformer训练中的学习率与Dropout)

[20. BERT与Transformer attention屏蔽技巧](#20. BERT与Transformer attention屏蔽技巧)


你最擅长说狠话,然后转身就流泪

------ 25.4.5

1. 为何使用多头注意力机制?

多头注意力机制使得模型能够并行处理信息的不同方面,每个头可以专注于输入序列的不同位置或特征,从而捕捉更丰富、更细腻的上下文依赖。单头注意力虽然也能捕捉序列间的关系,但其关注范围相对有限。多头机制提高了模型的表达能力,相当于模型可以"多视角"地审视输入数据,每个多头可以学习到不同类型的注意力模式,共同提升整体性能。


2. Q和K使用不同权重矩阵的原因

Q(查询)和K(键)使用不同的权重矩阵是因为这样能够增加模型的非线性表达能力,允许模型从不同角度(或维度)分别编码查询和键的信息。如果Q和K共享相同的权重矩阵,则它们会生成相同或高度相关的向量空间表示,限制了模型识别不同模式的能力。不同矩阵生成的Q和K进行点乘,可以更灵活地衡量不同部分输入之间的相关性。


3. 选择点乘而非加法的原因

点乘在计算复杂度上与加法相似,但在效果上,点乘能够更好地捕捉向量间的相似度,因为它考虑了元素级别的乘积,这在数学上等价于内积,可以衡量两个向量的"方向"一致性。而加法则更多反映的是两个向量的总"大小"。在注意力机制中,我们关心的是向量间关系的密切程度,因此点乘更适合。


4. Attention进行scaled的原因

除以 dk 是为了避免点积的结果因向量长度的增加而过分放大,导致softmax函数在计算概率分布时出现梯度消失或饱和问题。这有助于模型训练更加稳定,尤其是在维度较大的情况下。公式上, Attention(Q,K,V)=softmax(QKTdk)V ,其中, dk 是分母的缩放因子。


5. 对padding做mask操作

在计算attention score时,可以为padding位置的值设置为非常小的负数(如-1e9),这样经过softmax后,这些位置的权重接近0,即在计算上下文表示时忽略padding位置的影响。


6. 多头注意力降维原因

每个头进行降维是为了在不增加过多计算成本的前提下,允许模型探索更多的注意力子空间。多个低维头相比于单个高维头,可以在同样计算资源下学习更丰富的特征组合。


7. Transformer Encoder模块简介

Encoder由多个相同的层堆叠而成,每一层包括Self-Attention子层和一个前馈神经网络(FFN)子层,两侧均有残差连接和Layer Normalization。Self-Attention帮助捕获输入序列的长距离依赖,FFN引入非线性,增强模型表达能力。


8. 乘以embedding size的开方的意义

在输入词嵌入后乘以 dmodel 主要是为了初始化时调整词向量的尺度,使其初始分布更为合理,避免训练初期的爆炸或消失梯度问题,提高模型训练的稳定性。


9. 位置编码

位置编码是为了让Transformer能够理解序列中元素的位置信息,因为Transformer架构本身不包含循环或卷积结构,无法直接捕获位置信息。位置编码通过在词嵌入上添加特定模式的向量来实现,这些模式通常是正弦和余弦函数的组合,能区分不同位置的输入。


10. 其他位置编码技术

绝对位置编码 :如上述,直接添加到词嵌入中。

相对位置编码 :仅编码词对之间的相对距离,更灵活,常用于Transformer-XL等模型中。

** Rotary Positional Embedding**:提出于RoPE,旋转式位置编码,利用复数旋转矩阵动态调整词嵌入,保持位置信息的相对性,适合长序列任务。


11. Transformer中的残差结构及其意义

残差连接允许信息直接跳过复杂的子层(如Self-Attention和FFN),直接传递到下一层,减轻了梯度消失问题,加速了模型收敛,并且增加了模型深度,提高表达能力。


12. LayerNorm与BatchNorm

LayerNorm在Transformer中用于每个样本的每个特征维度上标准化,保证了不同层间输入的分布一致,适用于Transformer这种没有固定批量大小(尤其是解码器自注意力时)和顺序无关的场景。

LayerNorm一般置于每个子层的输入或输出端,有助于训练稳定性和速度。

BatchNorm基于整个batch的数据进行标准化,不适合Transformer这类序列到序列模型,因其依赖于固定长度的批次。


13. BatchNorm介绍

BatchNorm在训练时对每个mini-batch的数据进行标准化,减少内部协变量偏移,加速收敛,提高模型泛化能力。缺点包括增加了训练时间,对小批量数据效果不佳,且不适用于RNN等序列模型。

14. Transformer的前馈神经网络

Transformer的FFN通常包含两个线性变换层,中间夹着ReLU或GELU激活函数。这种结构引入非线性,增强了模型的表达能力。GELU相比ReLU,具有更好的非线性表达和光滑性,有助于模型学习更复杂的特征。


15. Encoder与Decoder的交互

Encoder和Decoder通过编码器-解码器注意力(Encoder-Decoder Attention)机制交互。在Decoder阶段,每个位置的单词不仅关注自身序列内的其他单词(自注意力),还关注Encoder的输出,从而在生成目标序列时考虑源序列的全局信息。


16. Decoder自注意力与Encoder的区别

Decoder的多头自注意力机制在训练时需要加入"未来遮挡"(sequence mask),确保在生成当前位置的输出时,模型只能看到过去的位置信息,不能看到未来的信息,符合自然语言的生成逻辑,避免信息泄露。


17. Transformer的并行化

Transformer模型设计上天然支持并行计算,特别是在自注意力和前馈网络层。由于其计算可以被拆分为独立的向量运算,非常适合GPU等并行计算硬件。Decoder端虽然在自注意力层受到序列依赖的限制,但除自注意力外的其它部分仍可并行化。


18. WordPiece Model与Byte Pair Encoding

WordPiece : 是一种文本分词方法,将文本切分成一系列有意义的子词单元。广泛应用于BERT等模型,有利于处理罕见词汇。

Byte Pair Encoding (BPE) : 通过统计文本中最频繁出现的字符对来构建词汇表。随着迭代,新的符号是由最频繁出现的字符对组成。适用于多种语言,包括稀有语种。


19. Transformer训练中的学习率与Dropout

学习率 :通常采用预热(warmup)策略,初期缓慢增加,之后按预定策略衰减,如线性衰减或余弦退火,以平衡初期的快速学习和后期的精细调整。

Dropout :在训练期间随机"丢弃"一部分神经元,防止模型过度拟合。通常设置在0.1至0.5之间,应用在全连接层和自注意力输出。测试时不需要使用Dropout,以得到确定性的输出。


20. BERT与Transformer attention屏蔽技巧

BERT在训练过程中使用了Masked Language Model任务,但它并未直接在注意力机制上进行屏蔽操作。这是因为BERT主要关注于如何从掩码输入中预测缺失的token,而Transformer的自注意力机制中加入的mask是用来确保解码器生成时只依赖于过去的上下文,这是两种不同的应用场景和目的。

相关推荐
HuggingFace14 分钟前
Open R1 项目进展第三期
人工智能
Jackilina_Stone25 分钟前
【大语言模型推理框架】VLLM
人工智能·语言模型·vllm
前端飞天猪34 分钟前
Day1:Deepseek+Kimi 10分钟生成专业PPT
人工智能·开源
日升34 分钟前
Browser-use:基于 Python 的智能浏览器自动化 AI 工具调研与实战
人工智能·python·openai
知来者逆36 分钟前
探索生成式AI在游戏开发中的应用——3D角色生成式 AI 实现
人工智能·深度学习·神经网络·计算机视觉·3d·游戏开发
Lx35236 分钟前
元宇宙基建:开发者如何搭上AI原生应用快车
人工智能
Dm_dotnet1 小时前
AI工具推荐:使用AnythingLLM帮助你学习
人工智能
钡铼技术物联网关1 小时前
ARM架构+CODESYS:解锁嵌入式边缘计算的实时控制新范式
大数据·linux·arm开发·人工智能·边缘计算
小柚净静1 小时前
什么是边缘计算?
人工智能·边缘计算
说私域1 小时前
数字化转型中的开源AI智能客服与S2B2C商城小程序的融合创新
人工智能·小程序·开源·零售