这份文件是一份关于大模型常见面试题及解答的资料,主要面向有志于从事深度学习、自然语言处理(NLP)以及大模型相关工作的求职者。它详细列举了面试中可能会遇到的问题,并提供了相应的回答思路和示例。以下是对文件内容的详细解读:

一、大模型基础概念

1.1 大模型定义与特点
  • 定义:大模型是指参数数量巨大的深度学习模型,如GPT系列。
  • 与传统模型的区别:大模型拥有更多的参数和更复杂的结构,能够处理更复杂、更广泛的任务,但需要更多的数据和计算资源。
1.2 Transformer模型
  • 基本结构:由编码器(Encoder)和解码器(Decoder)组成,每个部分包含多层自注意力机制和前馈神经网络。
  • 工作原理:通过自注意力机制捕捉序列数据中的长期依赖关系,多头自注意力机制允许模型在不同子空间上同时捕捉信息。
  • 位置编码:由于Transformer本身不包含循环或卷积结构,无法捕捉序列中的位置信息,因此需要额外的位置编码来提供每个位置上的信息。

二、大模型性能评估

2.1 常用评估指标
  • 准确率、召回率、F1值:用于分类任务,衡量模型的性能。
  • AUC-ROC曲线:用于评估模型在不同阈值下的性能表现,适用于二分类问题。
2.2 评估方法
  • 主观评估:通过人工评估模型输出的合理性。
  • 客观评估:使用上述指标进行量化评估。

三、大模型优化

3.1 模型结构优化
  • 减少模型复杂度:通过简化模型结构,减少计算资源消耗。
  • 采用更高效的注意力机制:如稀疏注意力机制,减少计算量。
3.2 训练过程优化
  • 分布式训练:利用多GPU或多节点进行并行训练,加速训练过程。
  • 混合精度训练:使用半精度浮点数进行训练,减少内存使用和计算时间。
3.3 推理阶段优化
  • 模型压缩:通过剪枝、量化等手段减小模型大小,提高推理速度。
  • 分布式推理:将模型分割在多个设备上进行推理,提高效率。

四、大模型微调

4.1 微调概念
  • 全量微调:对整个模型进行微调,适合数据量大的场景。
  • 增量微调:基于已有模型,只对新增数据进行微调,节省资源。
  • 局部微调:只对模型的部分参数进行微调,适合特定任务。
4.2 微调策略
  • 选择合适的学习率:避免过拟合和欠拟合。
  • 早停法:在验证集上性能不再提升时停止训练。
  • 正则化技术:如L2正则化,提高模型泛化能力。
  • 数据增强:扩充训练数据,提高模型鲁棒性。

五、大模型应用

5.1 自然语言处理(NLP)
  • 机器翻译:将一种语言翻译成另一种语言。
  • 文本摘要:从长文本中提取关键信息。
  • 问答系统:回答用户提出的各种问题。
  • 文本生成:生成自然语言文本,如文章、故事等。
5.2 计算机视觉(CV)
  • 图像识别:识别图像中的物体。
  • 目标检测:检测图像中的特定目标。
  • 图像分割:将图像分割成不同的区域。

六、大模型面试题及解答

6.1 常见面试题
  • 大模型的定义与特点:解释大模型与传统模型的区别。
  • Transformer的工作原理:描述Transformer的基本结构和工作流程。
  • 位置编码的作用:解释为什么需要位置编码,以及如何实现。
  • 多头自注意力机制:解释多头自注意力机制的作用和优势。
  • 大模型的性能评估:介绍常用的评估指标和评估方法。
  • 大模型的优化策略:描述如何优化大模型的性能和效率。
6.2 解答示例
  • 大模型的定义与特点:大模型通常指的是参数数量巨大的深度学习模型,如GPT系列。它们与传统模型的主要区别在于规模:大模型拥有更多的参数和更复杂的结构,从而能够处理更复杂、更广泛的任务。此外,大模型通常需要更多的数据和计算资源进行训练和推理。
  • Transformer的工作原理:Transformer由编码器(Encoder)和解码器(Decoder)组成,每个编码器和解码器都包含多层自注意力机制和前馈神经网络。自注意力机制允许模型处理输入序列中的依赖关系,无论它们之间的距离有多远。通过堆叠多个编码器和解码器,Transformer可以捕捉更复杂的特征并生成高质量的输出。
  • 位置编码的作用:位置编码是一种在模型中表示序列中token位置信息的方法。在大模型中,特别是像Transformer这样的模型中,由于自注意力机制是位置无关的,即无论序列中的token顺序如何变化,通过自注意力机制计算得到的每个token的隐藏嵌入都是相同的。这与人类处理语言信息的方式不符,因为语言中的词序对于理解语义至关重要。因此,需要位置编码来在模型中加入位置信息,使得模型能够区分不同位置的token。
  • 多头自注意力机制:多头自注意力机制允许模型在不同子空间上同时捕捉信息,从而增强了对输入序列的表达能力。每个头关注输入序列的不同部分,然后将它们的结果拼接起来,以获得更全面的特征表示。
  • 大模型的性能评估:评估大模型性能时,我们通常会考虑多个方面,包括准确率、召回率、F1值等。对于生成式任务,如文本生成,我们可能还会关注流畅性、多样性和相关性等指标。此外,模型的效率、稳定性和可解释性也是重要的评估方面。

七、大模型的未来发展方向

  • 更高效的自注意力机制:随着计算资源的不断提升和算法的不断优化,Transformer模型将继续发展并拓展其应用领域。未来可能会看到更高效的自注意力机制、更轻量级的模型结构以及更多跨领域的应用出现。
  • 模型的可解释性和公平性:随着对模型可解释性和公平性的关注增加,Transformer模型也将在这方面取得更多进展。

八、大模型的Tokenizer

  • 作用:将文本序列转换为模型能够理解的数值序列。
  • 实现方法:包括基于规则的分词(如空格分词)、基于统计的分词(如n-gram分词)以及基于深度学习的方法(如BPE、WordPiece、SentencePiece等)。
  • 挑战:在处理多语言文本时,Tokenizer可能会遇到分词规则、字符集和编码方式等差异的挑战。

九、大模型的微调方法

  • Prompt Tuning:通过在输入序列前添加一些可学习的“提示”标记来引导模型理解任务,保持预训练模型的大部分参数不变,减少过拟合的风险。
  • Prefix Tuning:通过微调预训练模型的特定部分(称为“前缀”)来适应特定任务,减少计算成本和过拟合的风险。

十、大模型的评测方法

  • 性能评估步骤:确定评估指标,收集测试数据集,运行模型并记录结果,分析评估结果。
  • 评估指标:准确率、召回率、F1值、AUC-ROC曲线等。
  • 避免过拟合和欠拟合:采用正则化、增加数据集多样性、使用dropout等方法避免过拟合;增加模型复杂度、优化模型结构或使用更强大的特征表示避免欠拟合。
  • 特征选择和模型调优:分析特征的重要性、相关性以及冗余性,使用网格搜索、随机搜索或贝叶斯优化等方法进行模型调优。
  • A/B测试:比较两种或多种模型性能的方法,通过将用户随机分配到不同的模型版本中,收集并分析它们在实际环境中的表现数据。

这份文件为求职者提供了全面的面试准备,涵盖了大模型的基础知识、性能评估、优化策略、微调方法以及应用案例等多个方面。通过学习这些内容,求职者可以更好地准备面试,展示自己在大模型领域的知识和技能。

和评估机制,定期对模型进行性能评估和幻觉检测。通过收集用户反馈、分析输出质量等方式,及时发现并解决模型幻觉问题。

  • 总结:这些解决方案并非孤立存在,而是可以相互结合、综合运用,以更有效地解决大模型中的模型幻觉问题。

如何让大模型处理更长的文本

  • 分块处理
    • 将长文本切分成多个较短的文本块。
    • 分别对每个文本块进行处理,然后合并结果。
    • 注意在合并时考虑上下文信息,以确保输出的连贯性。
  • 改进模型架构
    • 设计能够处理更长序列的模型架构,例如使用Transformer模型的改进版,如Longformer或Reformer。这些模型通过采用稀疏注意力机制或其他技术来减少计算量,从而允许处理更长的序列。
  • 层次化建模
    • 采用层次化建模方法,首先处理文本的局部信息,然后逐步聚合到全局信息。例如,可以先处理句子级别的信息,然后处理段落级别的信息,最后整合成整个文档的理解。
  • 引入外部知识
    • 利用外部知识库或预训练模型来获取与长文本相关的额外信息。这些信息可以帮助模型更好地理解文本内容,特别是在处理复杂或专业领域的文本时。
  • 优化训练策略
    • 使用截断策略,在训练过程中随机截断文本,以适应模型的输入长度限制。
    • 在训练过程中引入掩码策略,使模型学会从部分信息中推断整体内容。
    • 使用序列到序列(Seq2Seq)模型进行训练,以便处理可变长度的输入和输出。
  • 使用分布式计算
    • 利用分布式计算资源来加速长文本的处理。
    • 将长文本分发给多个计算节点进行处理,然后汇总结果。
  • 考虑任务特性
    • 对于某些任务,可能不需要处理整个长文本。例如,在摘要生成任务中,关键信息可能集中在文本的某些部分。因此,可以根据任务需求选择性地关注文本的关键部分。
  • 后处理与集成
    • 对每个文本块的处理结果进行后处理,如去重、排序或合并,以确保最终输出的质量和连贯性。
    • 可以将多个模型或方法集成在一起,以利用各自的优势,提高长文本处理的性能。

如何训练自己的大模型

  • 确定任务和目标
    • 首先,明确你想要大模型解决的具体任务(如文本分类、问答系统、机器翻译等)。
    • 定义你的模型应该达到的性能指标,如准确率、召回率或F1值等。
  • 数据收集与预处理
    • 收集与任务相关的数据,确保数据的多样性和质量。
    • 对数据进行预处理,包括清洗、分词、去除停用词、编码转换等。
    • 创建训练集、验证集和测试集,通常按照8:1:1或类似的比例划分。
  • 模型架构设计
    • 根据任务需求选择合适的模型架构,如Transformer、BERT、GPT等。
    • 可以从预训练的模型开始,并在其基础上进行微调或改进。
    • 设计模型的输入和输出层,以适应你的具体任务。
  • 训练配置
    • 确定模型的超参数,如学习率、批次大小、训练轮数等。
    • 选择合适的优化器,如Adam、SGD等。
    • 配置损失函数,使其与你的任务目标相匹配。
  • 模型训练
    • 使用深度学习框架(如TensorFlow、PyTorch)编写训练代码。
    • 加载训练数据,并将数据批次送入模型进行训练。
    • 在每个训练轮次后,评估模型在验证集上的性能,并保存最佳模型。
  • 模型评估与优化
    • 使用测试集评估模型的性能,并记录关键指标。
    • 根据评估结果调整模型架构、超参数或训练策略,以优化模型性能。
    • 可以使用集成学习、迁移学习或正则化等技术来进一步提升模型性能。
  • 部署与应用
    • 将训练好的模型部署到实际应用场景中。
    • 根据实际需求进行模型推理和结果解释。
    • 监控模型的性能,并定期进行模型更新和维护。
  • 注意事项
    • 计算资源:训练大模型通常需要大量的计算资源,包括高性能计算机、GPU集群或云服务。确保你有足够的资源来支持模型的训练。
    • 时间成本:训练大模型可能需要数天、数周甚至数月的时间。因此,需要有足够的耐心和计划来应对这一过程。
    • 代码版本管理:使用版本控制工具(如Git)来管理你的代码和模型权重,以便跟踪更改和协作开发。
    • 文档记录:记录你的训练过程、参数设置和实验结果,以便将来参考和复现。
    • 总结:训练大模型是一个持续迭代和优化的过程。通过不断尝试新的方法和技术,你可以逐渐提高模型的性能,满足实际应用的需求。

训练中文大模型经验

  • 选择合适的模型架构:中文大模型需要能够处理复杂的中文语言特性,如字、词、句等多个层面的信息。因此,在选择模型架构时,需要考虑其对中文处理的适用性。例如,Transformer模型在中文NLP任务中表现优秀,可以作为构建中文大模型的基础。
  • 数据准备:数据是训练大模型的关键。对于中文大模型,需要收集大量高质量的中文语料库。同时,数据预处理也是非常重要的一步,包括文本清洗、分词、去除停用词等,以提高模型的训练效果。
  • 调整超参数:在训练过程中,超参数的调整对模型性能有着重要影响。例如,学习率、批次大小、训练轮数等都需要根据具体任务和数据集进行调整。通过不断试验和优化超参数,可以提高模型的训练速度和效果。
  • 使用预训练模型:利用已有的预训练模型可以大大加速训练过程,并提高模型性能。对于中文大模型,可以选择一些已经针对中文任务进行预训练的模型作为基础,进行进一步的微调。
  • 考虑中文特性:在训练中文模型时,需要特别注意中文的特性和难点,如分词的不确定性、一词多义等。可以通过引入额外的语言特性信息或者设计针对中文的特定模块来提高模型的性能。
  • 分布式训练:由于大模型的训练需要大量的计算资源,因此分布式训练是一个有效的解决方案。通过将训练任务分散到多个计算节点上,可以大大加速训练过程。

大模型常考面试题总结

1. RAG技术体系的总体思路

  • 数据预处理
  • 分块(关键步骤,影响模型效果)
  • 文本向量化
  • query向量化
  • 向量检索
  • 重排
  • query + 检索内容输入LLM
  • 输出

2. 使用外挂知识库主要为了解决什么问题

  • 克服遗忘问题
  • 提升回答的准确性、权威性、时效性
  • 解决通用模型针对一些小众领域没有涉猎的问题
  • 提高可控性和可解释性,提高模型的可信度和安全性

3. 如何评价RAG项目效果的好坏

针对检索环节的评估:
  • MMR平均倒排率:查询的排名倒数
  • HitsRate命中率:前k项中,包含正确信息的项的数目占比
  • NDCG
针对生成环节的评估:
  • 非量化:完整性、正确性、相关性
  • 量化:Rouge-L

4. 大模型的幻觉问题、复读机问题是什么

  • 幻觉问题:生成的内容是无意义的或不忠实于提供的源内容
  • 复读机问题:重复生成某些话

5. 针对问题4,有没有什么解决办法

针对幻觉问题:
  • 引入外挂知识库
  • 加入一些纠偏规则
  • 限制输出长度等
针对复读机问题:
  • 丰富数据集的多样性
  • 预处理时尽量过滤重复无意义的文本
  • 同义词替换等做数据增强
  • 温度参数调整
  • 后处理与过滤

6. 出现问题4的原因有哪些

针对幻觉问题:
  • 生成结果与数据源不一致,自相矛盾
  • 用户问题超出了大模型的认知范围
针对复读机问题:
  • 数据质量不高,存在大量单一、重复文本
  • 文本过长,模型的输出被原始的很长的条件文本淹没

7. 当前主流的开源大模型是哪个,其架构具体是怎样的?

  • 当前主流开源大模型:Meta的LLaMA
  • 架构改动
    • 对每个子层做输入前置归一化,归一化函数为RMSNorm
    • SwiGLU激活函数替换ReLU激活函数
    • 从绝对位置嵌入改为旋转嵌入
    • 使用因果多头注意力的一个高效实现来减少内存占用和运行时间

8. 有哪几种SFT方法

  • 全微调
  • Adapter Tuning
  • Prefix Tuning
  • Prompt Tuning
  • P-Tuning v1
  • LoRA
  • RLHF

9. 什么是LoRA微调

  • 在原始PLM旁边增加一个旁路,做一个降维再升维的操作,来模拟所谓的intrinsic rank
  • 训练时固定PLM的参数,只训练降维矩阵A与升维矩阵B
  • 输出时将BA与PLM的参数叠加
  • 用随机高斯分布初始化A,用O矩阵初始化B

10. RAG的检索阶段,常见的向量检索模型有哪些?

  • ANN算法
  • 乘积向量
  • 暴力搜索
  • hnswlib
  • KD树

11. 针对通用的RAG,你觉得还有哪些改进点?

  • query侧:做query的纠错、改写,规范化和扩展
  • 对向量数据库做层次索引,提高检索效率和精度
  • 对LLM模型微调,针对当前垂直领域引入知识库,提升回答的专业性、时效性和正确性
  • 对最终输出做后处理,降低输出的不合理case

12. 什么是LangChain

  • LangChain为大型语言模型提供了一种全新的搭建和集成方式
  • 通过这个强大的框架,可以将复杂的技术任务简化,让创意和创新更加易于实现
  • 类似于神经网络开发与tensorflow/pytorch之间的关系

13. LangChain的常用模块有哪些?

  • document_loaders:文档加载
  • text_splitter:文档分块
  • embedding.huggingface:向量化
  • vectorstores:向量存储
  • chain.RetrievalQA:检索问答

14. SFT和RLHF优劣对比

SFT
  • 优点:
    • 启动简单,仅需要问答对数据就可以进行训练
    • 训练简单,直接对LLM进行调参,大部分情况下,训练几个epoch就可达到预期
    • 显存资源相比于RLHF来说耗费低
  • 缺点:
    • 模型的效果非常依赖于SFT数据的质量,天花板取决于SFT数据标注的质量
    • 对标注要求高,对一条指令来说,要标注高质量的回答是一件非常困难的事情,既耗时又耗力
RLHF
  • 优点:
    • 直接利用人类偏好来进行指导大模型的训练,使大模型的输出更能满足人们的要求
  • 缺点:
    • 训练消耗大量的显存
    • 训练的过程中很不稳定,想要成功的完成PPO的训练不是那么容易的事情
    • 在安全性和事实性上,都能有很大的提升,但标注更好多少,文差多少,这不是件容易的事情

15. 详细介绍一下RLHF

  • RLHF全称为Reinforcement Learning from Human Feedback(基于人类反馈的强化学习)
  • 结合了强化学习(RL)与直接的人类评估,旨在优化模型生成的内容,使其既高质量又符合社会规范

16. 大模型训练经常出现一些OOM问题,在现有硬件基础下,有什么性能提升trick

  • 梯度累积
  • 混合精度训练
  • 减轻模型参数
  • 分布式训练
  • 减少批量大小
  • 增加硬件资源
  • 数据处理与加载优化:使用数据流水线技术来并行加载和处理数据,减少内存中同时存在的数据量

17. LLaMA模型输入句子理论上可以无限长吗?

  • 不可以
  • 受限于计算资源
  • 训练阶段长句子会导致梯度消失或者梯度爆炸
  • 推理阶段会增加预测错误率

18. 如何让大模型处理更长的文本?

  • 分块处理,同时重叠保证连贯性
  • 增加模型参数量,复杂化模型架构,提高对更长文本的捕捉与表达能力

19. 大模型推理时,显存中有那几部分数据?

  • 模型参数
  • 输入数据
  • 计算中间结果
  • 显存管理策略:某些深度学习框架在推理时采用了一种延迟释放显存的策略,即显存不会立即释放,而是保留一段时间以备后续使用

20. 介绍下ChatGLM

  • 基座GLM既可以做Encoder也可以做Decoder
  • 主要通过两种mask方式来实现:
    • [mask]:bert形式,随机mask文本中的短span
    • [gmask]:gpt形式,mask末尾的长span
  • 在ChatGLM的内部结构中的变换,从下到上依次是:
    • 位置编码:从BERT的训练式位置编码转变为旋转位置编码
    • 激活函数:从BERT中的GeLU转变为GLU,在ChatGLM2中又变成了SwiGLU
    • LayerNormalization:采用的是DeepNorm,是对post-Normalization的改进,即在残差之后做Normalization
    • 在ChatGLM中,把Layer-Normalization改为RMSNormalization
  • 在ChatGLM2.0中还添加了一些其他变化:
    • FlashAttention:利用显存和内存做加速
    • Multi-Query Attention:多个头只采用一个KV对,通过参数共享来降低显存占用

21. 介绍下GLU激活函数和SwiGLU激活函数

  • GLU的核心思想是通过门控机制来过滤信息,进而提高网络的表达能力和泛化能力
  • SwishGLU的核心思想是将Swish和GLU结合起来,SwishGLU实际上只是多乘了一个g(x)

22. LLaMA1/2的异同

  • 数据角度:
    • LLaMA2.0为2.0T,LLaMA1是1.4T
  • 上下文长度:
    • LLaMA1是2k,LLaMA2是4k
  • 模型架构角度:
    • 二者都遵循自回归Transformer的架构
    • 位置编码:二者都采用了旋转位置编码
    • Normalization:二者都采用pre-normalization,只不过1.0中采用原始的LayerNormalization,2.0中采用的是RMSNorm
    • 激活函数:采用SWiGLU

23. 模型在训练和推理的时候各占用显存的多少?

  • 训练占用模型参数量的16倍大小(优化器、梯度、模型本身)
  • 推理占用模型参数量的2倍大小(fp16是一个单位参数大小对应两个字节,int8是一个单位参数大小对应一个字节)

24. 详细介绍Deepspeed的机制

  • 是一种数据并行的方法,采用的ring all-reduce方式
  • 传统的Parameter Server是server和client的方式,client通过计算分配给自己的数据,产生梯度,传给server,server做聚合,然后把聚合后的参数再传给client,这个方式的弊端是server容易成为瓶颈,server通信量太大,另外可能一个client失败,会导致其他client等待
  • Ring All-Reduce是一种分布式的方式,各个节点分配通信量。总的通信量和PS没啥变化,但是通信的压力平摊到各个GPU上了,GPU之间的通信可以并行进行
  • Zero包括3种方案,逐步递进:
    • Zero1:将Adam的参数分割成N份,一个GPU上只能保存一份Adam参数。对于forward没啥影响,gradient需要进行一次all-reduce,但是只能更新一部分参数,所以W需要进行一次all-gather,通信量为3N*sigma
    • Zero2:将AdamW,gradient都分割成N份,梯度就不需要all-gather了,只需要scatter了,W需要all-gather,通讯量为2N*sigma
    • Zero3:将参数、Adam和gradient都分割,forward的时候,需要将W all-gather,backward时,还需要把W all-gather回来,计算梯度,丢掉不属于自己的W,然后对梯度做reduce-scatter,更新W,通讯量为3N*sigma
  • 最后采用Stage 3:用1.5倍的通讯开销,换回近120倍的显存
  • 另外,还有Zero-Offload是基于Zero2,将Adam和gradient放到内存中,在CPU内起了N个线程计算。其中的一条主线是gradient总是需要scatter的,感觉这个数据并行标志。这里需要注意一点,不管是forward还是backward,都是需要有完整的W的。另外有了gradient,以及AdamW的参数,才能更新W

25. 什么是混合精度训练

  • FP64用8个字节共64位,FP32用4个字节共32位,FP16用2个字节共16位
  • 在神经网络模型的训练过程中,通常默认使用单精度(FP32)浮点数据类型来表示网络模型的权重和其他参数
  • 使用FP16训练神经网络相比使用FP32有以下优点:
    • 内存占用减少
    • 通讯效率提高
    • 计算效率更高
  • 但是使用FP16也会带来一些问题,主要有两个方面:
    • 数据溢出
    • 舍入误差
  • 为了利用FP16的优势,提高深度学习训练的效率和性能,同时避免精度溢出和舍入误差的影响,可以采用FP16和FP32的混合精度训练,主要涉及到以下三个重要技术点:
    • 权重备份(Weight Backup)
    • 损失放大(Loss Scaling)
    • 精度累加(Precision Accumulated)

26. 什么是prefixLLM和casualLLM

  • prefixLM:token可以相互看到,输入双向注意力,输出单向注意力(ChatGLM、ChatGLM2、U-PaLM)
  • casualLM:严格的自回归,从左到右的单向注意力(LLaMA-7B、LLaMA衍生物、QWen)

27. 说一说针对MHA后续的一些计算优化工作

  • Vcache:核心思想是将需要重复利用的中间结果存下来,避免重复计算
  • MQA:核心思想是进一步减少需要缓存的数据大小,K、V完全相同,只有Q是不一样的
  • GQA:核心思想是进一步减少需要缓存的数据大小,K、V分组复制,数据大小介于MQA和MHA之间
  • FlashAttention:核心思想是将Q、K、V切分为更小的块,从HBM中加载到SRAM,需要计算的时候直接从SRAM中读取(因为目前transformers的计算效率瓶颈不在于计算速度,而是IO)

28. 说说attention几种常见的计算方式

  • self-attention
  • DIN的attention:计算在得到权重之后,没有进行softmax归一化操作,而是保留了权重原始的信号强度。原始权重是通过网络最后一层激活函数得到,因此可以利用激活函数的特点,将值限制在0-1之间,如sigmoid函数,从而使得到的原始权重值可直接用于加权求和,保留了权重的差异性。使用softmax操作虽然可以进行归一化,但同时会弱化了权重之间的差异性,有损用户兴趣的局部聚焦性
Logo

更多推荐