想招人,网上找了一些面试题。结果发现,有的东西我自己都叫不准。 这就尴尬了,赶快充电一波。这是网上找的美团的问题。解答是我在大模型生成结果上校验、修改出来的。
1. Encoder-Decoder, Causal Decoder, Prefix Decoder的区别
这三种架构是 Transformer 模型及其变体的主要形式,它们在处理序列数据的方式上有所不同,尤其是在注意力机制的应用上。
Encoder-Decoder (编码器-解码器)
结构: 由两个主要部分组成:编码器(Encoder)和解码器(Decoder)。
工作方式:
编码器负责处理输入序列(例如,源语言句子),通过自注意力机制(Self-Attention)捕捉输入序列内部的依赖关系,并生成一系列上下文表示(Context Vectors)。 编码器中的自注意力是双向的,即每个词可以关注到输入序列中的所有词。
解码器负责根据编码器提供的上下文表示,自回归地(Autoregressively)生成输出序列(例如,目标语言句子)。 解码器包含两种注意力机制:
- 掩码自注意力(Masked Self-Attention): 解码器在生成当前词时,只能关注到已经生成的部分(包括当前词本身),不能关注未来的词,以保证自回归的特性。
- 交叉注意力(Cross-Attention): 解码器中的每个位置可以关注到编码器输出的所有上下文表示,从而将输入信息融入到生成过程中。
典型应用: 机器翻译(最早的 Transformer 应用)、文本摘要、问答(需要理解一个问题并生成答案)。
代表模型: 原始 Transformer
Causal Decoder (因果解码器 / Decoder-Only)
结构: 只包含解码器部分。
工作方式: 整个模型遵循自回归的方式。在处理输入(通常是 Prompt 和已生成的部分拼接在一起)时,使用掩码自注意力机制。这意味着每个词(Token)只能关注到它自身以及它之前的词。它没有显式的编码器来独立处理输入,输入文本(Prompt)和要生成的文本被视为一个连续的序列。
典型应用: 文本生成、对话系统、语言建模。因为它天然适合根据前面的文本预测下一个词。
代表模型: GPT,GPT-2, GPT-3。
Prefix Decoder (前缀解码器 / Non-Causal Decoder in Prefix)
结构: 也是基于解码器结构,但在注意力机制上做了修改。
工作方式: 输入序列被分为两部分:前缀(Prefix)和待生成部分。
-
对于前缀部分的词,它们之间可以进行双向注意力(类似于 Encoder 的 Self-Attention),即前缀中的每个词可以关注前缀中的所有其他词。
-
对于待生成部分的词,它们遵循因果注意力(Causal Attention),即只能关注自身及之前的词(包括所有的前缀词和已生成的词)。
-
目的: 这种设计允许模型在处理输入提示(Prefix)时进行充分的双向理解,同时在生成阶段保持自回归的特性。它试图结合 Encoder-Decoder(对输入的充分理解)和 Causal Decoder(强大的生成能力)的优点。
-
典型应用: 自然语言理解和生成的混合任务,某些条件生成任务。
-
代表模型: GLM 系列(如 ChatGLM)、UniLM (部分模式下类似)。
2. 模型涌现现象的原因?
模型涌现(Emergence)是指大型语言模型在规模(参数量、数据量、计算量)增大到一定程度后,突然表现出一些在小规模模型上不具备或表现不佳的复杂能力(如算术推理、代码生成、思维链推理等),这些能力似乎不是通过模型规模的线性外推就能预测的。
涌现现象的原因目前仍在积极研究中,尚无单一确定性解释,但主要有以下几种理论和观察:
规模是关键因素 (Scale Hypothesis):
- 参数量: 更多的参数意味着模型有更大的容量来学习和存储世界知识、复杂模式和抽象概念。
- 数据量: 海量的训练数据使模型能够接触到足够多的实例,从而学习到细粒度的语言规律、推理模式和各种技能。
- 计算量: 足够的计算量支持更大规模的模型在海量数据上进行充分训练。
任务复杂性与能力阈值 (Task Complexity & Thresholds): 某些复杂任务(如多步推理)可能需要多种基础能力的组合。只有当模型规模足够大,能够同时掌握这些必要的基础能力,并学会如何组合它们时,才能在该复杂任务上表现出显著性能,看起来就像是“涌现”了。低于这个阈值,即使基础能力有所提升,也无法有效完成最终任务。
训练目标与隐式学习 (Training Objective & Implicit Learning): 简单的下一个词预测(Next Token Prediction)目标,在大规模数据和模型上训练时,可能隐式地迫使模型学习语法、语义、常识、甚至推理链条,因为这些有助于更准确地预测下一个词。规模的增大使得这种隐式学习能够达到更高的层次。
评估指标的非线性 (Non-Linearity of Metrics): 有时候涌现可能是评估方式造成的。例如,对于某些需要精确答案的任务(如数学题),模型可能在达到某个准确率阈值之前得分很低,一旦跨过这个阈值(比如能稳定执行某个计算步骤了),得分会突然大幅提高,看起来像是能力的涌现。
相变理论类比 (Phase Transition Analogy): 物理学中的相变(如水结冰)表现出宏观性质的突变。有人认为 LLM 的能力发展也可能存在类似的相变现象,当模型复杂度跨越某个临界点时,其内部结构或学习动态发生质变,导致新能力的出现。
组合泛化 (Compositional Generalization): 大模型可能更擅长将学习到的基本概念或技能进行组合,以解决新的、更复杂的问题。这种组合能力本身可能随着规模增长而增强。
回答要点: 强调规模(参数、数据、算力)是基础,结合任务复杂性、评估方式、训练目标的隐式压力以及可能的组合泛化来解释。承认目前这仍是一个活跃的研究领域。
我的一点想法,现在模型的规模效应其实还在,不过感觉有点钝化,就是“大”和“多”不一定就能出来好模型。
3. LLM复读机现象的原因是什么?怎么解决?
LLM 复读机现象(Repetition)是指模型在生成文本时,倾向于重复之前已经生成过的词语、短语、句子甚至整个段落。
原因:
- 训练数据偏差 (Training Data Bias): 训练数据中可能存在大量的重复模式或样板文字(如网页模板、摘要格式等),模型学习到了这种重复倾向。
解码策略问题 (Decoding Strategy Issues):
- Greedy Search / Beam Search: 这些确定性或半确定性的解码方法倾向于选择当前最高概率的词。如果某个词或短语刚出现过,它在当前上下文中的概率可能仍然很高,导致被反复选中。
- 低温采样 (Low Temperature Sampling): 温度参数较低时,采样分布更尖锐,模型更倾向于选择高概率词,增加了重复的可能性。
模型本身的特性 (Model Characteristics):
-
注意力机制的焦点固化: 注意力可能过度集中在最近生成的几个词上,导致后续生成内容与近期历史高度相似。
-
最大似然估计 (MLE) 训练目标: MLE 倾向于让模型生成“安全”和常见的序列,而重复是一种相对安全的模式。
-
上下文长度限制: 在处理长文本时,如果模型无法有效利用或记住更早的上下文,可能会在局部信息中循环。
-
不合适的 Prompt (Inappropriate Prompt): 模糊或引导性不足的 Prompt 可能让模型无所适从,更容易陷入重复模式。
解决方法:
调整解码策略 (Decoding Strategy Adjustment):
- 引入随机性: 使用 Top-k 采样、Top-p (Nucleus) 采样,并设置合适的温度(通常 > 0.7),增加生成的多样性。
- 重复惩罚 (Repetition Penalty / Frequency & Presence Penalties): 在解码过程中,对已经生成过的 Token 施加惩罚,降低其再次被选择的概率。可以基于频率(出现次数越多惩罚越大)或存在性(只要出现过就惩罚)。这是最直接有效的方法之一。
- N-gram 阻止 (No Repeat N-gram Size): 禁止生成与最近历史中完全相同的 N-gram。例如,设置 no_repeat_ngram_size=3 可以防止连续三个词的重复。
改进 Prompt 工程 (Prompt Engineering):
- 提供更清晰、具体的指令。
- 在 Prompt 中明确要求避免重复。
- 使用 Few-shot 示例引导模型生成多样化内容。
模型层面改进 (Model Level Improvement):
-
微调 (Fine-tuning): 使用高质量、多样化的数据进行微调,特别是包含长距离依赖和避免重复的样本。
-
训练目标改进: 探索除 MLE 之外的训练目标,如对比学习或强化学习,鼓励生成更有趣、信息量更大的内容。 (这个对使用者来说较难,更多是研究方向)
-
后处理 (Post-processing): 对生成结果进行检测和修正,去除重复部分。但这通常是治标不治本的方法。
回答要点: 分析原因要从数据、解码、模型本身多角度入手。解决方案要重点突出解码策略调整(尤其是重复惩罚和采样方法),其次是 Prompt 和可能的微调。
我的经验是后处理做的好,一般都可以避免。
4. 数据角度来看有什么问题?
从数据角度看,当前 LLM 的训练和应用面临诸多问题,这些问题直接影响模型的性能、可靠性和安全性:
-
数据偏见 (Bias): 训练数据来源于互联网等真实世界,不可避免地包含了各种社会偏见(如性别、种族、地域、文化偏见)。模型学习这些偏见后,会在生成内容时表现出来,导致不公平或歧视性的输出。
-
毒性与有害内容 (Toxicity & Harmful Content): 数据中包含大量的不良信息,如仇恨言论、暴力内容、虚假信息、成人内容等。模型可能学习并生成这些有害内容。
数据质量问题 (Data Quality):
-
噪声与错误: 数据中包含拼写错误、语法错误、事实性错误、格式混乱等。
-
不一致性: 不同来源的数据可能存在矛盾信息。
-
冗余与重复: 大量重复或高度相似的内容可能影响模型的学习效率和生成多样性。
-
数据隐私泄露风险 (Data Privacy): 训练数据可能无意中包含个人身份信息(PII)、商业机密或其他敏感信息。模型可能在生成时“记住”并泄露这些信息。
-
版权与知识产权问题 (Copyright & IP Issues): 训练数据中使用了大量受版权保护的材料,其合法性存在争议,可能引发法律风险。模型生成的内容也可能与现有版权作品过于相似。
数据覆盖面与代表性不足 (Coverage & Representation):
-
领域/语言不均衡: 主要以英语和常见领域为主,对低资源语言、特定专业领域、少数群体的文化习俗等覆盖不足,导致在这些方面的能力较弱。
-
知识陈旧性 (Data Staleness): 模型的知识截止于其训练数据的收集时间点,无法了解最新的事件、发现和信息。
-
数据标注成本与一致性 (Annotation Cost & Consistency): 对于需要监督学习的任务(如 SFT、RLHF),高质量的数据标注成本高昂,且标注者之间可能存在主观差异,影响数据一致性。
-
数据投毒攻击风险 (Data Poisoning): 恶意攻击者可能故意向训练数据中注入错误或有害的信息,以破坏模型的性能或使其产生特定倾向的输出。
回答要点: 分类列举,如偏见、毒性、质量、隐私、版权、覆盖面、时效性、标注问题、安全风险等,并简要说明每个问题的影响。
5. 特定任务用预训练还是微调?
选择直接使用预训练模型(通过 Prompting 进行 Zero-shot 或 Few-shot 推理)还是进行微调(Fine-tuning),取决于多个因素:
任务的通用性 vs. 特异性:
- 预训练 (Zero/Few-shot): 适用于比较通用的任务,或者与预训练任务相似度较高的任务(如开放域问答、通用文本摘要、简单指令跟随)。如果模型在预训练阶段已经接触过大量类似的任务模式,那么通过精心设计的 Prompt 就可能获得不错的效果。
- 微调: 适用于高度特定、垂直领域的任务(如特定领域的客服、医疗报告生成、法律文书分析、特定风格的写作)。微调能让模型学习到该领域的专有知识、术语、格式或风格。
对性能的要求:
- 预训练: 如果对任务的性能要求不是特别高,或者可以接受一定的错误率,Zero/Few-shot 可能足够,且部署速度快。
- 微调: 如果需要非常高的准确率、遵循严格的格式要求、或者需要模型产生非常特定的行为模式,微调通常是必要的,因为它能显著提升模型在目标任务上的性能。
数据的可用性:
- 预训练: 当缺乏高质量的、针对特定任务的标注数据时,利用预训练模型的通用能力是主要选择。
- 微调: 需要一定量(可能不需要非常大,取决于任务和微调方法)的、与目标任务相关的标注数据。
成本和资源:
- 预训练: 主要成本在于推理计算和 Prompt 设计。不需要额外的训练过程。
- 微调: 需要额外的计算资源进行训练,还需要数据收集和标注的成本。但 Parameter-Efficient Fine-Tuning (PEFT) 方法(如 LoRA)可以显著降低微调的计算和存储成本。
知识更新需求:
- 预训练: 模型的知识是静态的(截止于预训练时间)。如果任务需要最新的知识,纯预训练模型(无外部知识库)会受限。
- 微调: 微调可以在一定程度上注入新知识,但主要是适配任务,而不是大规模更新世界知识。对于需要持续更新知识的任务,可能需要结合 RAG (见下一点)。
决策流程建议:
- 尝试 Zero-shot/Few-shot: 先用好的 Prompt 测试预训练模型在目标任务上的表现。
- 评估结果: 如果效果满足要求,则无需微调。
- 效果不佳,考虑微调: 如果效果不理想,且有可用的标注数据和资源,考虑进行微调(优先考虑 PEFT 方法)。
- 效果仍不佳或需动态知识: 可能需要结合 RAG 或更复杂的策略。
回答要点: 说明选择取决于任务特性、性能要求、数据可用性和成本。提出一个先尝试 Zero/Few-shot,效果不好再考虑微调的实用流程。强调 PEFT 的作用。
6. RAG 和微调的区别,优劣分别是什么?
RAG (Retrieval-Augmented Generation) 和微调 (Fine-tuning) 是两种增强 LLM 在特定领域或任务上表现的常用技术,但它们的机制和适用场景不同。
区别:
知识整合方式:
- RAG: 在推理时动态地从外部知识库(如数据库、文档集合)检索相关信息,并将这些信息作为上下文(Context)注入到 Prompt 中,引导 LLM 基于这些检索到的信息生成答案。知识存储在外部。
- 微调: 通过在特定任务的数据集上继续训练模型,将任务相关的知识和模式隐式地编码到模型的内部参数(权重)中。
知识更新:
- RAG: 知识更新相对容易,只需更新外部知识库即可,模型本身无需重新训练。适合需要频繁更新知识的场景(如实时新闻问答、产品信息查询)。
- 微调: 知识更新需要重新进行微调过程,成本较高,且模型知识是训练完成后相对静态的。
可解释性与溯源:
- RAG: 通常可以追溯答案依据的来源(检索到的文档片段),提高了可信度和可解释性。
- 微调: 知识融合在模型参数中,很难确切说明某个输出是基于哪个训练样本生成的,可解释性较差。
解决幻觉:
- RAG: 通过将答案“锚定”在检索到的具体文本上,可以有效减少模型凭空捏造信息的“幻觉”现象。
- 微调: 虽然可以提升特定领域知识的准确性,但如果微调数据不足或模型本身倾向,仍可能产生幻觉。
学习内容:
- RAG: 主要学习如何利用检索到的上下文来回答问题,而不是将事实性知识本身存入参数。
- 微调: 可以学习特定领域的事实知识、行为模式、风格、格式等。
优劣分析:
RAG:
优点:
- 知识更新便捷、成本低。
- 有效减少幻觉,答案有据可查。
- 可以利用非常庞大和动态的知识库。
- 不需要修改模型参数,保持了预训练模型的通用能力。
缺点:
- 依赖检索质量: 检索器的效果直接影响最终生成质量(“Garbage In, Garbage Out”)。
- 增加推理延迟: 检索步骤需要额外时间。
- 上下文长度限制: 检索到的内容需要注入 Prompt,可能受模型上下文窗口大小的限制。
- 整合复杂性: 需要构建和维护检索系统。
- 对于学习特定风格或隐式行为(非知识密集型)的任务效果有限。
微调:
优点:
- 能有效学习和适应特定任务的模式、风格、格式和隐式知识。
- 对于需要深度理解领域特定语言模式的任务效果好。
- 推理时相对直接(无外部检索步骤,若不结合 RAG)。
- 通过 PEFT 方法,微调成本已大大降低。
缺点:
- 知识更新成本高,需要重新训练。
- 存在灾难性遗忘风险(忘记预训练时学到的通用能力,见下一点)。
- 知识融合在内部参数中,难以溯源,可解释性差。
- 对于需要最新知识的任务,效果会随时间衰退。 - 仍可能产生幻觉,尤其是在微调数据未覆盖的知识点上。
结合使用: RAG 和微调并非互斥,可以结合使用。例如,可以先对模型进行微调,使其更好地理解特定领域的术语和指令格式,然后在推理时结合 RAG 引入最新的外部知识。
回答要点: 清晰对比两者在知识整合、更新、溯源、幻觉处理、学习内容上的核心区别。然后分别列出优缺点。最后指出两者可以结合使用。
7. SFT导致的通用能力遗忘应该怎么解决?
SFT (Supervised Fine-tuning) 旨在让模型学会遵循指令或在特定任务上表现更好。但只用特定任务的数据进行微调,容易导致模型“过度拟合”到该任务上,从而损害其在预训练阶段学到的广泛通用能力(如常识推理、其他类型的任务),这种现象称为灾难性遗忘 (Catastrophic Forgetting)。
解决方法:
数据策略 (Data Strategies):
- 混合训练数据 (Data Mixing / Replay): 在 SFT 阶段,不要只使用目标任务的数据,而是将其与一部分预训练数据或来自其他通用任务的指令数据混合在一起训练。这样可以在学习新任务的同时,“复习”通用能力。
- 高质量多样化的 SFT 数据: 确保 SFT 数据集本身足够多样,覆盖不同的指令类型和场景,避免过于狭窄导致模型能力退化。
参数高效微调 (Parameter-Efficient Fine-Tuning, PEFT): 这是目前最常用和有效的方法之一。
- 原理: PEFT 方法(如 LoRA, Adapter Tuning, Prefix Tuning, Prompt Tuning等)在微调时只训练模型参数的一小部分(或增加少量新参数),而保持大部分预训练参数不变。
- 效果: 由于核心的预训练参数被冻结,模型能很大程度上保留其通用能力,同时新增/修改的少量参数足以适配新任务。
正则化方法 (Regularization Techniques):
-
L2 正则化: 对权重变化进行惩罚,限制模型参数偏离预训练状态太远。
-
其他知识蒸馏/约束方法: 例如,在微调时加入一个额外的损失项,要求模型的输出在某些通用任务上与原始预训练模型保持一致。
-
多任务学习 (Multi-Task Learning): 同时在多个任务(包括目标特定任务和一些通用任务)上进行微调,让模型在不同能力维度上保持平衡。
控制微调程度 (Controlling Fine-tuning Extent):
-
更少的训练轮数 (Epochs): 不要过度训练,在模型开始在新任务上表现良好但尚未严重遗忘通用能力时停止训练。
-
更低的学率 (Learning Rate):* 使用较小的学***率进行微调,减小参数更新的幅度。
-
持续预训练 (Continued Pre-training) + 微调: 在 SFT 之前,先在与目标领域相关的通用数据上进行一轮持续预训练,然后再进行 SFT,可能有助于模型更好地适应新领域而不丢失通用性。
回答要点: 解释什么是灾难性遗忘。重点介绍 PEFT 方法作为主流解决方案。然后补充数据混合、正则化、多任务学习、控制微调程度等其他有效策略。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。