【面试题】大模型高频面试题
1、现在的大语言模型为什么基本都用decoder-only结构?
当前大语言模型普遍采用Decoder-only结构,主要原因有几点。首先,这种结构在没有任何微调数据的情况下,其zero-shot(零样本)的表现能力通常是最好的 。其次,Decoder-only架构在训练效率和工程实现上具有优势,例如方便扩展、降低训练成本,并且在分布式训练中能支持更高的参数量和集群规模上限 。从理论上看,Encoder架构中的双向注意力机制可能存在低秩问题,这可能会削弱模型的表达能力 。此外,纯粹的decoder-only架构配合next token prediction(下一个词预测)的预训练方式,虽然每个位置能接触的信息较少、预测难度更高,但在模型规模和数据量足够大的情况下,反而能激发出更强的泛化性能 。
2、训练一个大语言模型的整条路线是什么?
训练一个大语言模型通常是一个多阶段的流程。核心步骤包括:首先是预训练(Pretrain),模型在一个大型的通用数据集上通过无监督学习(如语言建模)来学习语言的基本表征和初始化权重 。接下来是指令微调(Instruction Tuning/SFT),使用带有指令-答案对的数据集对模型进行有监督的微调,使其能更好地遵循人类指令 。为了实现与人类价值观的对齐,通常还会进行奖励建模(Reward Model) 和强化学习(如RLHF) 阶段,通过人类反馈来优化模型的输出 。此外,整个流程还包括Tokenizer的训练,这是将文本转换为模型可处理的数字序列的关键前置步骤 。
3、介绍下LoRA、Adapter、prefix-tuning、P-tuning和Prompt-tuning?
这些都是参数高效微调(PEFT)的方法,旨在用少量可训练参数来适配预训练大模型,从而降低计算成本。
- Prompt-tuning/P-tuning: 这类方法主要在输入层操作。Prompt-tuning直接在输入前添加可学习的“软提示”(soft prompt)向量。P-tuning是其改进版,通常会使用一个小型网络(如LSTM或MLP)来生成这些提示,使其更具表达力 。
- Prefix-tuning: 与Prompt-tuning类似,但它不仅在输入层,还在Transformer每一层的隐藏状态前都添加可训练的前缀参数 。这种方法能为不同任务提供特定的前缀,但有时被认为比较难训练 。
- Adapter: 在Transformer的每一层(通常在FFN层后)插入一个小型的、瓶颈结构的神经网络模块(Adapter)。训练时只更新这些Adapter模块的参数,而冻结原始模型的大部分参数 。它的计算成本较低,但在推理时会增加额外的延迟 。
- LoRA (Low-Rank Adaptation): 通过在模型的权重矩阵(如Attention中的Q、K、V、O矩阵)旁路添加低秩分解的矩阵(A和B,使得ΔW = BA)来实现微调。训练时只更新A和B,原始权重保持冻结。LoRA具有参数效率高、不增加推理延迟(可合并回原权重)等优点 。
4、你觉得OPENAI对齐为什么要用强化学习方法RLHF,用别的方法不可以吗?
OpenAI选择RLHF(基于人类反馈的强化学习)进行对齐,主要是因为它能有效地将复杂、难以形式化的人类偏好和价值观融入模型 。通过让人类对模型的不同输出进行排序,可以训练一个奖励模型来模拟人类偏好,然后用强化学习(如PPO算法)来优化语言模型以获得更高的奖励 。这种方法超越了简单的模仿学习(如SFT),能够引导模型生成更符合人类期望、更安全、更有帮助的回复。虽然理论上可以用其他方法,例如直接使用偏好数据进行监督微调(如DPO),或者使用AI反馈(RLAIF),但RLHF在实践中被证明是非常有效的,并且是ChatGPT等模型取得突破的关键 。OpenAI的研究也表明,RLHF有助于对齐,尽管它也可能导致模型在某些基准测试上的性能略有下降 。
5、介绍inference的几种方式?
大语言模型的推理(Inference)是指模型根据输入生成输出的过程 。这个过程通常分为两个阶段:预填充(Prefill) 阶段,模型处理整个输入提示(prompt)并生成第一个输出token;解码(Decode) 阶段,模型自回归地逐个生成后续token 。为了优化推理效率,有多种技术和策略:
- 解码策略:如贪心搜索(Greedy Search)、束搜索(Beam Search)、采样(Sampling)、Top-k采样、Top-p(Nucleus)采样等,用于决定下一个token的选择 。
- 批处理(Batching):如静态批处理(Static Batching)、连续批处理/动态批处理(Continuous Batching),将多个请求合并处理以提高GPU利用率 。
- 推理优化技术:包括KV缓存(避免重复计算Attention的Key和Value)、推测解码(Speculative Decoding,使用一个更小的草稿模型提前生成多个token来加速)、模型量化、模型并行(如使用DeepSpeed Inference进行分布式推理)等 。
6、介绍下tokenizer?怎么训练的?
Tokenizer(分词器)是自然语言处理中的核心组件,负责将原始文本字符串转换为模型可以处理的数字序列(token IDs) 。常见的类型有基于字节对编码(BPE)、WordPiece、Unigram和SentencePiece等。
训练一个Tokenizer通常涉及以下步骤:
- 准备语料:收集并清理用于训练分词器的大规模文本数据。
- 选择算法:确定使用的分词算法(如BPE)。
- 设定词表大小:决定最终词表(vocabulary)包含多少个token。
- 训练模型:算法会分析语料中的字符或子词频率,迭代地合并最常见的字符对(对于BPE),最终生成一个包含基础字符和高频子词的词表 。例如,SentencePiece会将所有输入转换为unicode字符,并将空白符也视为普通符号进行处理 。训练好的Tokenizer模型可以将新文本切分成token,并映射为对应的ID 。
7、SFT后LLM会出现哪些问题?
监督微调(SFT)虽然能有效提升模型在特定任务上的表现,但也可能带来一些负面问题:
- 灾难性遗忘(Catastrophic Forgetting):当SFT数据过多或训练轮次(epoch)过大时,模型可能会过度适应特定领域的数据,导致其原有的通用知识和能力下降 。
- 模型“变傻”:这是对通用能力下降的一种通俗说法,根源可能包括过拟合(在小规模或多样性不足的SFT数据上)、领域偏差(微调数据与通用知识差异过大)、或微调超参数设置不当 。
- 幻觉(Hallucination):SFT过程本质上是一种行为克隆,模型学习模仿训练数据中的回复模式,而非学习实现最终目标的策略,这可能导致模型生成看似合理但事实上不正确或无依据的内容 。
- 性能困境:过度专注于某一狭窄领域的SFT可能导致模型“偏科”,在该领域表现优异,但在其他领域表现不佳 。
8、目前的大语言模型是怎么解决或者改善长度外推问题的?
长度外推问题是指模型在推理时处理的序列长度超过其预训练时所见长度,导致性能显著下降 。主要的解决思路包括:
- 改进位置编码:这是最主流的方法。例如,LLaMA使用的旋转位置编码(RoPE)因其良好的外推性而被广泛采用。可以通过调整RoPE的基值(base)来扩展其周期,使其适应更长的上下文 。其他方法还包括ALiBi等。
- 免训练外推技术:如NTK-aware插值、YaRN、DICE等,这些方法通过对位置编码进行插值或缩放,使得模型在不经过额外长序列训练的情况下,也能较好地处理长序列 。
- 局部注意力(Local Attention):限制每个token只能关注其邻近的token,从而降低计算复杂度并天然支持长序列,但可能牺牲全局信息 。
- 架构修改:设计新的注意力机制或模型架构,如稀疏注意力、线性注意力等,以更好地处理长序列。
9、目前大语言模型应用到端侧应用有哪些挑战?
将大语言模型部署到手机、PC等终端设备(端侧)面临诸多挑战:
- 资源限制:端侧设备的内存(RAM)和存储空间有限,难以容纳动辄数十GB的原生大模型参数 。计算能力(CPU/GPU/NPU)也远不及云端服务器,导致推理速度慢 。
- 功耗与发热:大模型推理是计算密集型任务,会显著增加设备功耗和发热量,影响用户体验和电池续航。
- 模型优化需求:为了在端侧运行,必须对模型进行大幅压缩和优化,如量化(将FP16/FP32权重转为INT8/INT4)、剪枝、知识蒸馏、使用MoE架构等,但这可能带来精度损失 。
- 安全与隐私:端侧模型直接暴露在用户设备上,面临被逆向工程、模型窃取或数据泄露的风险 。虽然端侧处理能减少数据上传,增强隐私,但模型本身的安全性成为新挑战 。
10、GPT、llama、T5、GLM在模型上的架构是什么?分别有什么优势?
- GPT (Generative Pre-trained Transformer):采用Decoder-only的Transformer架构 。优势在于强大的文本生成能力,通过大规模自回归语言建模预训练,展现出优秀的zero-shot和few-shot学习能力。
- LLaMA (Large Language Model Meta AI):同样采用Decoder-only架构 。其优势在于仅使用公开数据集进行训练,并且在相对较小的参数规模下,通过在更多token上训练,达到了与更大模型(如GPT-3)相当甚至更好的性能,使其更易于研究和复现 。
- T5 (Text-to-Text Transfer Transformer):采用Encoder-Decoder架构。其核心思想是将所有NLP任务都统一为“文本到文本”的格式。优势在于架构的通用性和灵活性,能够处理各种类型的任务(如翻译、摘要、问答、分类等)。
- GLM (General Language Model):采用自回归空白填充(Autoregressive Blank Infilling) 的目标,其架构可以看作是结合了自编码(如BERT)和自回归(如GPT)特点的变体 。优势在于能够有效结合两种预训练范式的优点,通过span shuffling等技术增强对文本结构的理解能力,在自然语言理解和生成任务上均有良好表现 。
11、介绍下lora和q-lora?
- LoRA (Low-Rank Adaptation):一种参数高效的微调方法。它冻结预训练模型的原始权重,然后在模型的某些层(通常是Attention层的投影矩阵)旁添加一对低秩矩阵(A和B)。训练时只更新这两个小矩阵,大大减少了需要优化的参数量和内存占用。推理时,可以将LoRA权重合并回原始权重,因此不会增加推理延迟 。
- QLoRA (Quantized LoRA):是LoRA的进一步优化 。它在LoRA的基础上引入了量化技术,通常将模型的原始权重从16位浮点数(FP16/BF16)量化到4位整数(如NF4格式)进行存储和计算,同时保持LoRA适配器为16位精度 。这使得QLoRA的显存占用比LoRA更低(可降低约75%),能够在消费级GPU上微调非常大的模型,但训练速度会比LoRA慢一些 。
12、LLaMA模型为什么要用旋转位置编码?
LLaMA模型采用旋转位置编码(RoPE, Rotary Position Embedding)主要是因为它能通过绝对位置编码的方式实现相对位置编码 。具体来说,RoPE通过将查询(Query)和键(Key)向量与一个依赖于其位置的旋转矩阵相乘,使得Attention计算中自然地融入了相对位置信息 。这种方法兼具了绝对位置编码实现简单、效率高的优点,以及相对位置编码更利于模型外推(处理比训练时更长的序列)的优点 。RoPE的这种特性有助于提升Transformer架构的性能,并被证明具有良好的长度外推能力 。
13、LLaMA模型使用了哪种激活函数,为什么?
LLaMA模型在其前馈神经网络(FFN)层中使用了SwiGLU激活函数 。它取代了传统的ReLU或GELU激活函数。选择SwiGLU的主要原因是它能提升模型性能 。SwiGLU结合了Swish函数的平滑非线性和GLU(Gated Linear Unit)的门控机制,提供了更强的非线性表达能力,同时有助于保持梯度的稳定性,从而增强模型的泛化能力 。实验证明,在相同参数量下,使用SwiGLU的模型在下游任务上的表现通常优于使用GELU的模型 。
14、LLaMA模型在训练过程中如何处理梯度消失和梯度爆炸问题?
LLaMA模型采用了多种技术来缓解深层网络中常见的梯度消失和梯度爆炸问题:
- 前置层归一化(Pre-normalization):LLaMA在每个Transformer子层(如Attention、FFN)的输入前应用层归一化(具体是RMSNorm),而不是在输出后(Post-norm)。这种Pre-norm结构有助于稳定梯度流,使模型在深层网络中更容易训练 。
- 残差连接(Residual Connections):标准的Transformer架构本身就包含残差连接,它允许梯度直接绕过非线性层进行传播,是缓解梯度消失的关键技术。
- 梯度裁剪(Gradient Clipping):在训练过程中,可以设置一个阈值,当梯度的范数超过该阈值时,对其进行缩放,以防止梯度爆炸 。虽然这不是LLaMA论文独有的,但在实际训练中是常用的稳定手段。
15、预训练和微调任务有什么区别?两者的目的各是什么?
预训练和微调是大模型训练流程中两个截然不同但又紧密相连的阶段。
-
预训练(Pre-training):
- 目的:让模型学习通用的语言知识、世界知识和基础能力,如语法、语义、上下文理解等。目标是获得一个具备强大泛化能力的“基础模型” 。
- 任务:通常采用自监督学习任务,如标准的语言建模(预测下一个词)、掩码语言建模(预测被遮盖的词)或去噪自编码等 。使用海量的、无标注或弱标注的通用文本数据。
- 特点:计算成本极高,是整个流程中最耗时的阶段。
-
微调(Fine-tuning):
- 目的:使预训练好的基础模型适应特定的下游任务或领域,如问答、文本分类、代码生成、遵循特定指令等,以在该任务上达到最佳性能 。
- 任务:采用监督学习,使用特定任务的、规模相对较小的标注数据集(如指令-回复对)对模型进行进一步训练 。
- 特点:计算成本远低于预训练,旨在“专业化”模型,使其满足具体应用需求 。