(转载)AI Engineering 学习笔记
原文地址(原文有图):【读书笔记】AI Engineering
AI Engineering: Introduction to Building AI Applications with Foundation Models
Planning AI Applications
用基础模型打造一个酷炫的演示很简单,但创造盈利产品却非易事。
用例评估
- 若不采纳人工智能,具备AI技术的竞争对手可能让你被淘汰。如果人工智能对你的企业构成重大的生存威胁,那么引入AI必须成为最高优先级。
- 若不采纳人工智能,您将错失提升利润和生产力的良机。大多数公司拥抱人工智能,正是看中了它带来的机遇。
- 还不确定人工智能在业务中的定位,但又不愿落后于人。尽管企业不应盲目追逐每次潮流热潮,但等待过久才采取行动往往会导致失败。
人工智能与人类在应用中的角色
必要的还是辅助的?
如果一款应用在没有人工智能的情况下仍能运行,那么人工智能对该应用来说就是辅助性的。人工智能对应用的依赖程度越高,其部分就必须越准确可靠。当人工智能不是应用的核心时,人们更容易接受其犯错。
主动的还是响应的?
被动响应型功能在用户发出请求或执行特定操作时作出回应,而主动响应型功能则会在出现机会时自行反应。被动响应型功能对延迟更敏感,但是客户对于主动预测和生成通常需达到更高的质量标准。
动态更新还是静态更新?
动态特性会根据用户反馈持续更新,而静态特性则定期更新。就人工智能而言,动态特性可能意味着每个用户都拥有基于自身数据持续优化的专属模型。而静态特性则可能为多个用户群体共用同一模型。若是这种情况,这些功能仅在共享模型更新时才会同步升级。
人类在应用中的作用
以客服场景为例,AI与人类的协作有多种形式:
- 人工智能展示了多项回应,人类可以参考这些内容来更快地撰写回答。
- 人工智能仅对简单请求作出响应,并将更复杂的请求转交给人工处理。
- 人工智能直接回应所有请求,无需人工介入。
将人类纳入人工智能的决策过程被称为human-in-the-loop(人在回路)。
采用AI的逐步阶段
爬 —— 走 —— 跑
- 爬行:人工介入是强制性的。
- 行走:人工智能可以直接与内部员工互动。
- 奔跑:自动化程度提高,可能包括人工智能直接与外部用户互动。
AI产品的防御能力
基于基础模型构建应用程序相当于在其之上增加一个功能层。这也意味着,如果底层模型能力不断扩展,你所提供的功能层可能会被模型本身吸纳,导致你的应用失去价值。
三大竞争优势:
- 技术 —— 行业内相似性较高
- 数据 —— 大小公司的核心护城河
- 分发能力 —— 大型企业的天然优势
衡量标准
如何衡量成功?最重要的衡量标准是它会如何影响你的业务。为了确保产品在准备就绪之前不会推向客户,需对其有用性门槛设定明确的期望:即产品需要达到何种程度才能发挥效用。
核心衡量指标分类:
- 质量指标 —— 回复质量
- 延迟指标 —— TTFT(首字符生成时间)、TPOT(单字符输出耗时)以及整体延迟
- 成本指标 —— 模型训练、推理、部署等相关成本
- 其他指标 —— 可解释性、公平性、鲁棒性等
里程碑规划
达成目标的路径取决于你的起点。通过评估现有模型来了解其能力——直接可用的模型越强大,你需要投入的工作量就越少。
核心认知:优秀的演示版本并不等同于成熟的产品,搭建演示可能只需一个周末,而打造真正可用的产品却需耗费数月甚至数年的时间。
维护
诸多模型存在的局限正得到解决——上下文处理长度不断延长,模型输出质量持续提升,成本在不断降低。
维护要点:每个模型都有其独特的特性、优势和不足,使用新模型的开发者需要调整他们的工作流程、提示信息以及数据来适应新模型。
The AI Engineering Stack
人工智能三层技术栈
-
应用开发层 应用程序开发涉及为模型设计优质的提示词与必要上下文,这一环节需要严谨评估。优秀的应用同样需要精良的交互界面,是目前增长最快的类别。
-
模型开发层 涵盖建模、训练、微调及推理优化等框架。由于数据是模型开发的核心环节,本层级还包含数据集工程技术。
-
基础设施层(Infra) 包括模型服务的工具、数据与计算资源的管理以及监控功能。基础设施层虽有增长,但远低于其他层级的增幅;即便模型和应用不断革新,资源管理、服务部署、监控等核心基础设施需求仍保持不变。
AI Engineering VS ML Engineering
| 维度 | AI Engineering | ML Engineering |
|---|---|---|
| 模型使用 | 直接使用预训练基础模型 | 为特定应用自行训练模型 |
| 工作重心 | 模型适配与优化、评估 | 建模和模型训练 |
| 模型规模 | 处理超大规模模型 | 处理常规规模模型 |
| 计算资源 | 消耗更多,延迟更高 | 资源消耗、延迟相对可控 |
| 输出类型 | 开放式输出,评估难度高 | 结构化输出,评估相对简单 |
核心区别:AI Engineering 更侧重于模型的适配与评估,而非模型开发。
AI Engineering 模型适配技术
Prompt-based techniques(基于提示的技术)
包括提示工程,可以在不更新模型权重的情况下调整模型。通过向模型提供指令和上下文来适应模型,而不是改变模型本身。
特点:易于上手且需要较少数据,然而,对于复杂任务或性能要求严格的应用,提示工程可能不够用。
Finetuning(微调)
微调则需要更新模型权重,通过改变模型本身来适配模型。
特点:技术更为复杂且需要更多数据,但能显著提升模型的质量、延迟和成本表现。
Model development
模型开发的三个核心职责:模型与训练、数据集成型以及推理优化。
Modeling and training(建模与训练)
指的是构思模型架构、进行训练及微调的过程。该领域的工具示例包括谷歌的TensorFlow、Hugging Face的Transformers以及Meta的PyTorch。
重要趋势:随着基础模型的普及,机器学习知识不再是构建人工智能应用的必要条件。
预训练、微调与后训练的区别
- Pre-training(预训练):从头开始训练模型——模型权重是随机初始化的。对于大语言模型而言,预训练通常涉及训练模型完成文本补全任务。在所有训练步骤中,预训练往往是资源消耗最为巨大的环节,远超其他阶段。
- Finetuning(微调):在前一训练基础上继续训练已训练的模型——模型权重是从前一训练过程中获得的。由于模型已经通过预训练具备了一定的知识,微调通常比预训练所需的资源(如数据和计算量)更少。
- Post-training(后训练):从概念上讲,后训练和微调是相同的,可以互换使用。但有时人们可能会根据不同的目标来区分使用这两个术语。通常来说,模型开发者进行的训练称为后训练,而应用开发者进行的训练则称为微调。
核心关系:预训练和后训练构成了一个连续的整体,两者的流程与工具链高度相似。
Dataset engineering(数据集工程)
指的是为训练和适应人工智能模型所需的数据进行整理、生成和标注。
与传统ML的区别:传统 ML Engineering 更多处理表格数据,而基础模型则处理非结构化数据。在 AI Engineering 中,数据操作更侧重于去重、分词、上下文检索和质量控制,包括清除敏感信息和有害数据。
数据量需求原则:从头开始训练模型通常比微调需要更多数据,而微调又比提示工程需要更多数据。
Inference optimization(推理优化)
推理优化旨在使模型运行更快、成本更低。随着基础模型规模不断扩大,导致推理成本和延迟进一步增加,推理优化的重要性愈发凸显。
基础模型推理的核心挑战
基础模型通常是自回归的—— token 是按顺序生成的。如果一个模型生成一个 token 需要10毫秒,那么生成100个 token 的输出就需要一秒钟,更长的输出则需要更长时间。由于用户变得越来越没有耐心,将人工智能应用程序的延迟降低到典型互联网应用所期望的100毫秒水平是一项巨大挑战。
核心推理优化技术
包括量化、蒸馏和并行处理。
Application development(应用开发)
在传统机器学习工程中,团队使用专有模型构建应用程序,模型质量是差异化竞争的关键。而在基础模型时代,当众多团队使用相同模型时,差异化优势必须通过应用开发流程来实现。
应用开发层包括三大核心职责:评估、提示工程和上下文构建、AI 界面。
Evaluation(评估)
评估旨在降低风险并发现机遇,这些挑战主要源于基础模型的开放性和不断扩展的能力。
评估核心难点:
- 如聊天机器人这类任务,每个提示都可能引发无数种合理回应,无法编制穷尽所有可能的标准答案清单来比对模型输出。
- 多样的模型适配技术让评估工作变得更困难,一套系统采用某种技术效果不佳,换用另一种技术或许表现就会大幅提升。
Prompt engineering and context construction(提示工程和上下文构建)
提示工程旨在仅通过输入引导AI模型展现出理想行为,而无需调整模型权重。
核心要点:
- 合适的指令能引导模型以指定格式完成所需任务。
- 提示工程不仅是告诉模型要做什么,还包括为模型提供执行特定任务所需的上下文和工具。
- 对于需要长上下文的复杂任务,需为模型配备记忆管理系统,使其能够追踪历史记录。
AI interface(AI界面)
指的是为终端用户创建与AI应用交互的界面。借助基础模型,任何人都能构建AI应用。可将AI应用作为独立产品提供服务,或将其嵌入其他产品中,包括他人开发的产品。
Understanding Foundation Models(理解基础模型)
模型训练的核心阶段
模型的训练过程通常分为预训练和后训练两个阶段。预训练让模型具备了能力,但不一定保证其安全性或易用性。
采样(sampling)
决定了模型如何从所有可能的选项中挑选输出结果,这或许是人工智能领域最被低估的概念之一。
Training Data(训练数据)
核心准则:一款人工智能模型的好坏完全取决于其训练所用的数据。
训练数据的核心问题与解决思路
- 数据适配性问题:若想让模型在特定任务上有所提升,可能需要在训练数据中增加该任务的相关数据,但收集足够的数据来训练大型模型成本高昂、难度大,模型开发者常不得不依赖现有数据。
- 数据质量问题:一些团队会采用启发式方法从互联网上筛选掉劣质数据。
- 模型训练思路:虽然语言和领域特定的基础模型可以从零开始训练,但在通用模型基础上进行微调也是常见的做法。
Multilingual Models(多语言模型)
- 核心问题:英语在互联网上占据主导地位,导致通用模型对英语的处理效果远优于其他语言,例如GPT-4在缅甸语和阿姆哈拉语的六道题目中全部答错。
- 根本原因:数据代表性不足。
- 附加问题:对于非英语语言而言,模型运行速度可能更慢且成本更高,因为模型的推理延迟和成本与输入及响应中的token数量成正比,而某些语言的标记化效率远低于其他语言。
Domain-Specific Models(领域特定模型)
为了让模型在特定领域任务中表现出色,可能需要精心构建非常专业的数据集。
Modeling(建模)
在训练模型之前,开发者需要确定模型应具备何种形态。它应采取什么架构?参数数量应设定为多少?这些决策不仅影响模型的能力,也关乎其在下游应用中的实用性。
Model Architecture(模型架构)
Transformer架构
基于语言的基础模型最为主流的架构是Transformer架构,该架构基于注意力机制,在序列到序列(seq2seq)模型取得巨大成功后迅速流行起来。
Seq2seq (RNN-based) 模型的局限性
seq2seq包含一个处理输入的编码器和一个生成输出的解码器,使用循环神经网络(RNN)作为编码器与解码器,但存在两大问题:
- 基础版seq2seq解码器仅利用输入序列的最终隐藏状态来生成输出词元,限制了生成结果的质量。
- 基于RNN的编码器-解码器架构要求输入处理和输出生成必须顺序执行,导致长序列处理效率低下。
注意力机制的价值
注意力机制使得模型在生成每个输出token时,能够权衡不同输入token的重要性,解决了seq2seq模型的核心问题。需要注意的是:
- 注意力机制常与Transformer模型相关联,但实际上比Transformer论文早三年被提出,也可应用于其他架构。
- 直到Transformer论文证明了注意力机制无需RNN也能发挥作用后,该技术才真正迎来爆发式发展。
Transformer架构的核心优势与特点
- 完全摒弃了循环神经网络,输入token可以并行处理,显著加快了输入处理速度。
- 仍存在顺序输出的瓶颈——基于Transformer的自回归语言模型生成输出时,token仍需逐个生成。
- 基于Transformer的语言模型的推理包含两个步骤:
- Prefill:模型并行处理输入token,生成第一个输出token所需的中间状态(包含所有输入token的键和值向量)。
- Decode:模型一次生成一个output token。
- Prefill的可并行化特性和Decode的顺序特性共同推动了许多优化技术的发展。
Attention mechanism(注意力机制)
Transformer架构的核心在于注意力机制,主要基于键向量(key)、值向量(value) 和查询向量(query) 的运算。
核心向量的含义
- 查询向量(Q):代表了解码器在每个解码步骤中的当前状态。
- 键向量(K):对应一个先前出现的词元(包括输入词元和已生成的词元)。
- 值向量(V):代表着模型学习到的先前标记的实际价值。
注意力机制的工作原理
- 注意力机制通过计算查询向量与其键向量之间的点积,来决定给予输入标记多少注意力,高分值意味着模型会更多采用对应的值向量内容。
- 核心计算式: \(K = xW_k, V = xW_V, Q = xW_Q\) \(Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d}})V\)
- 几乎总是采用多头设计:允许模型同时关注不同的先前标记组,查询/键/值向量会被分割成更小的向量,每个小向量对应一个注意力头。
- 拼接多头输出后,会使用输出投影矩阵再次变换,该矩阵维度与模型的隐藏维度相同。
上下文长度的瓶颈
由于每个之前的标记都有对应的键和值向量,序列越长,需要计算和存储的键和值向量就越多,这是扩展Transformer的上下文长度的核心难点之一。
Transformer block(Transformer模块)
Transformer架构由多个Transformer模块堆叠而成,每个Transformer模块都包含注意力模块和MLP(多层感知机)模块。
核心组成部分
- 嵌入模块(Embedding module):在Transformer模块之前,由嵌入矩阵和位置嵌入矩阵组成,分别将词元及其位置转换为嵌入向量;位置索引的数量决定了模型的最大上下文长度。
- 注意力模块:包含查询矩阵、键矩阵、值矩阵以及输出投影矩阵。
- MLP模块:由若干线性层组成,各层之间通过非线性激活函数分隔;常见的非线性函数有 ReLU、GELU(ReLU(x) = max(0, x))。
- 输出层(Output layer):在Transformer模块之后,将模型的输出向量映射为用于采样模型输出的标记概率,通常由一个矩阵构成(解嵌入层/模型头部)。
Transformer模型的规模决定因素
- 模型的维度(决定Key、Query、Value 和 Output Projection Matrices的大小)。
- Transformer模块的数量。
- 前馈层的维度。
- 词汇表大小。
- 维度值越大,模型尺寸也越大。
其他模型架构
- RWKV(彭等人,2023):基于RNN的模型,可以进行并行化训练;由于其RNN特性,理论上不像基于Transformer的模型那样存在上下文长度限制。
- 状态空间模型(SSM)(Gu等人,2021a):在长程记忆方面展现出巨大潜力;自2021年提出以来,学界已引入多种技术提升其效率、增强长序列处理能力,并扩展至更大模型规模。
Model Size(模型规模)
核心衡量指标
- 参数数量
- 通常来说,增加模型的参数数量会提升其学习能力,从而获得更优秀的模型。
- 可用于估算训练和运行模型所需的计算资源(例:70亿参数,16比特存储,至少需要14GB GPU内存)。
- 稀疏结构会让参数量产生误导(例:90%稀疏度的70亿参数模型,实际仅7亿非零参数)。
- 主流稀疏模型:专家混合模型(MoE),每个标记仅由部分活跃的专家进行处理,大幅降低计算成本。
- 训练token数量
- 更佳的衡量标准,数据集的token数量≠训练token数量,后者是模型实际接受训练的token总量。
- FLOP(浮点运算次数)
- 衡量模型计算需求的标准化单位,FLOPs(浮点运算次数)≠FLOP/s(每秒浮点运算次数),前者衡量任务计算量,后者衡量机器峰值性能。
- 利用率:实际使用最大计算能力的比例,50%为合格,超过70%为优秀。
总结:三个指标标示着模型的规模——参数数量(学习能力替代指标)、训练token数量(知识量间接反映)、FLOPs(训练成本替代指标)。
对齐训练的潜在问题
随着对齐训练强度的增加,模型反而更偏离人类偏好,可能会表现出特定的政治立场、宗教观点,甚至产生拒绝被关机的意愿。
Scaling law: Building compute-optimal models(缩放定律:构建计算优化型模型)
核心逻辑
- 模型性能取决于模型大小和数据集大小,模型/数据集越大,所需计算量越多,计算需要成本。
- 实际开发中,计算资源是限制因素,因此需从计算预算入手,确定固定预算下的最佳模型性能。
袋鼠法则 (Chinchilla scaling law)
核心原则:在给定计算预算的情况下,模型规模与训练标记数应当等比例缩放——模型规模每扩大一倍,训练标记数量也应相应增加一倍。
定义:一个在固定计算预算下能够实现最佳性能的模型,被称为计算优化型模型。
Scaling extrapolation(缩放外推)
- 核心问题:大型模型无法像小型模型那样,通过多次训练不同超参数组合来选择最优解,因单次训练成本过高。
- 定义:亦称超参数迁移,通过研究超参数在小模型上的表现规律,推演其在目标大模型规模下的适用性。
- 可行性:微软与OpenAI2022年联合论文证实,可实现从4000万参数模型到67亿参数模型的超参数迁移。
- 核心挑战:
- 小众课题,鲜少有人具备大模型训练的经验和资源。
- 超参数数量庞大且彼此影响,研究难度大。
- 涌现(emergent)能力:仅在大型模型上显现的能力,会降低外推预测的准确性。
Scaling bottlenecks(缩放瓶颈)
扩展规模已经面临两个明显的瓶颈:
- 训练数据瓶颈:互联网正迅速充斥着AI模型生成的数据,未来模型的训练数据可能大量来源于AI生成内容,影响模型质量。
- 电力供应瓶颈:在找到增产能源的方法之前,数据中心的扩容上限最多只能达到目前的50倍,可能引发电力短缺并推高用电成本。
Post-Training(后训练)
预训练模型的核心问题
鉴于当前预训练的实现方式,预训练模型通常存在两个问题:
- 自监督学习优化的目标是文本补全而非对话交互。
- 若预训练数据源自未经筛选的网络爬取内容,输出可能包含种族歧视、性别偏见、粗鲁言论或错误信息。
后训练的两个核心步骤
- Supervised finetuning (SFT)(监督式微调):基于高质量指令数据对预训练模型进行微调,将模型优化为适用于对话场景而非文本补全。
- Preference finetuning(偏好微调):进一步微调模型,使其输出符合人类偏好的响应;通常通过强化学习完成,核心技术包括RLHF、DPO、RLAIF。
核心价值:预训练优化的是token级别的质量,而后训练优化模型以生成用户偏好的整体回答;预训练好比通过阅读获取知识,后训练则像是学习如何运用这些知识。
RLHF(基于人类反馈的强化学习)
GPT-3.5和Llama 2采用的技术,整体训练流程包含四个阶段:
- 自监督预训练:基于互联网等低质量数据,优化文本补全能力。
- 监督微调(SFT):基于高质量示范数据,将模型优化为对话模式(行为克隆)。
- 奖励模型训练:基于比较数据,训练模型为(prompt, response)对给出标量分数。
- 强化学习优化:通过强化学习,让模型生成能最大化奖励模型分数的响应。
Supervised Finetuning(监督式微调)
- 核心问题:预训练模型针对补全优化,无法正确回应用户对话请求。
- 解决思路:展示(prompt, response)格式的示范数据,让模型模仿生成合适的回应,即行为克隆。
- 数据标注难点:示范数据需要复杂的提示词和专业能力,高质量人工标注成本高,标注者人口结构存在偏差,易引入偏差。
- 优化方向:许多团队正转向使用人工智能生成的数据,减少对人工标注的依赖。
- 替代思路:可直接在演示数据上从头训练模型,但预训练方法通常能带来更好的结果。
Preference Finetuning(偏好微调)
- 核心目标:让人工智能模型按照人类偏好来表现,解决模型“该展开何种对话”的问题。
- 核心挑战:不同文化、背景的人类对争议性问题的看法不同,模型回应易触怒部分用户,过度审查又会导致模型乏味。
RLHF的核心组成
RLHF是最早成功且至今仍受欢迎的偏好微调算法,由两部分组成:
- 训练奖励模型:用于评估基础模型的输出得分,解决直接打分的主观性问题。
- 优化基础模型:基于奖励模型,微调SFT模型以生成最高分的响应。
Reward model(奖励模型)
- 数据获取:采用比较数据(提示,优胜回答,落选回答),让标注员比较两个回答而非直接打分,解决评分差异问题。
- 模型训练:可从零开始训练,也可在预训练/SFT模型基础上微调;在最强的基础模型之上微调能获得最佳性能,奖励模型的能力至少应与基础模型相当。
- 核心结论:弱模型同样可以评判强模型的表现,因为判断通常被认为比生成更为简单。
Finetuning using the reward model(基于奖励模型的微调)
- 核心方法:从提示词分布中随机选取提示,输入模型后由奖励模型评分,通过近端策略优化算法(PPO) 训练模型。
- 替代方案:部分公司跳过强化学习,采用最佳N策略——让模型生成多个输出,选出奖励模型评分较高的结果。
Sampling(采样)
模型通过采样的过程来构建其输出,采样使人工智能的输出具有概率性,是决定模型输出特性的核心环节。
Sampling Fundamentals(采样基础)
- 核心流程:模型接收输入后,先输出逻辑值向量(Logits)(每个值对应一个token,维度与词汇表大小相同),再通过softmax层将逻辑值转换为概率分布(非负、总和为1)。
- softmax核心公式: \(p_i = softmax(x_i) = \frac{e^{x_i}}{\sum_je^{x_j}}\)
- 贪婪采样(greedy sampling):总是选择概率最高的token,分类任务效果好,但语言模型使用会导致生成内容单调乏味。
- 概率采样:根据所有可能值的概率分布来采样下一个token,让输出更具多样性。
Sampling Strategies(采样策略)
选择合适的采样策略能让模型生成更符合应用需求的回答,核心策略包括温度抽样、Top-k、Top-p等。
Temperature(温度抽样)
- 核心问题:纯概率采样可能导致模型缺乏创造力,输出过于简单。
- 核心原理:在softmax变换前,将logits除以温度值T,重新分配概率;调整后logit值为$\frac{x_i}{T}$。
- 温度值的影响:
- 高温度(T>1):降低常见标记的概率,增加稀有标记的概率,输出更具创意,但连贯性较差。
- 低温度(T<1):提高常见标记的概率,输出更加一致,但更为单调。
- T→0:模型几乎总是选择概率最高的token,等同于贪婪采样(技术上T不能为0,避免除零错误)。
- 最佳实践:模型提供商通常限制T在0到2之间;创意类应用建议设为0.7,需根据具体需求测试调整。
对数概率(logprobs)
- 核心价值:模型提供商通常返回对数概率,缓解下溢问题(语言模型词汇量大,部分token概率过小,易被舍入为零)。
- 应用场景:构建应用、评估应用效果、理解模型内部机制,尤其适用于分类任务。
Top-k
- 核心目的:减少计算工作量,同时不过多牺牲模型响应的多样性。
- 核心原理:计算出logits后,仅选取前k个最高值的logits进行Softmax处理,再从其中采样。
- k值选择:通常在50到500之间,远小于模型词汇量;较小的k值输出更可预测,但趣味性降低。
Top-p(核采样,nucleus sampling)
- 核心改进:解决Top-k候选词数量固定的问题,动态选择采样值。
- 核心原理:将token按概率降序排列,累加概率直到总和达到p,仅从该集合中采样。
- p值选择:语言模型中常用0.9至0.95之间。
- 核心优势:仅关注每个上下文中最相关的数值集合,输出在语境上更加贴合;实践中效果良好,日益受到欢迎。
- 附加方法:最小概率采样(min-p),设定最低概率阈值,仅考虑达到阈值的token。
Stopping condition(停止条件)
自回归语言模型逐个生成token,需设定终止条件,平衡输出完整性、延迟和成本。
- 固定token数量:简单直接,但输出可能在句子中途被截断。
- 停止标记/停止词语:如序列结束标记,更合理,但需合理设计,避免过早终止导致输出格式错误(例:JSON缺失右括号)。
Test Time Compute(测试时计算)
指针对每个查询生成多个响应,而非仅生成一个,提升模型响应质量的方法,核心是通过增加计算量换取更好的输出效果。
核心实现方式
- 最佳N策略:随机生成多个输出,挑选效果最佳的一个。
- 束搜索(beam search):在序列生成的每个步骤中,固定生成数量有限的最有潜力候选结果,减少无效输出。
- 多样性优化:调整模型采样变量,增加输出多样性,提升找到优质响应的概率。
成本问题
生成多个输出的成本与数量成正比(例:生成两个输出的花费约为单个的两倍),需在效果和成本间平衡。
最优结果筛选方法
- 最高概率筛选:计算输出序列的总概率(所有token概率的乘积),选择概率最高的;推荐使用平均对数概率(总对数概率/序列长度),避免偏向较短序列。
- 奖励模型评分:使用奖励模型对每个输出打分,选择最高分;OpenAI的验证器技术可带来显著性能提升,效果堪比模型规模扩大30倍。
- 应用特定启发式方法:如选择最短响应、生成为有效SQL查询后停止等。
核心价值与应用
- 解决延迟问题:对于思维链式查询等需要长时间回答的场景,可提前生成多个候选结果。
- 提升精确性:对需要精确答案的任务,选择多次采样中最常见的输出(例:谷歌Gemini在MMLU基准测试中采样32次)。
- 改善鲁棒性:模型鲁棒性越低,多次采样的益处越大;例:从产品图片提取信息,单张图片尝试三次可大幅提升正确率。
Structured Outputs(结构化输出)
在生产环境中,常常需要模型按照特定格式生成输出,结构化输出对语义解析任务和输出供下游应用使用的任务尤为重要。
引导模型生成结构化输出的五种方法
可分为权宜之计(prompting、post-processing、test time compute)和深度处理方法(constrained sampling、finetuning)。
Prompting(提示)
- 核心方法:通过清晰的指令要求模型以指定格式生成输出,是最基础的方法。
- 核心问题:模型的指令遵循能力有限,无法保证100%遵从,少量无效输出可能无法满足生产环境要求。
- 优化方案:使用AI验证/修正原始输出,提升准确性,但会增加成本和延迟(每个输出需两次模型查询)。
Post-processing(后处理)
- 核心方法:掌握模型的常见错误模式,编写脚本来纠正输出错误(例:补充JSON缺失的右括号)。
- 核心优势:简单经济,效果显著。
- 适用场景:模型输出已基本格式正确,仅偶尔出现小错误时。
Constrained sampling(约束采样)
- 核心原理:过滤模型输出的logits向量,仅保留符合约束条件的token,再从其中采样。
- 核心挑战:
- 需要为不同格式(JSON、YAML、CSV等)构建专属语法规则,整合进抽样过程难度大。
- 语法验证会增加生成延迟。
- 部分观点认为,约束采样的资源更适合用于训练模型,提升其指令遵循能力。
Finetuning(微调)
引导模型生成结构化输出的最有效且通用的方法。
- 架构优化:精调前修改模型架构,确保输出格式规范(例:分类任务添加分类器头,仅输出预设类别)。
- 训练方式:可端到端重新训练整个模型,或仅训练局部(如分类器头);端到端训练资源需求高,但性能更好。
未来趋势
随着模型性能的增强,其指令遵循能力会不断提升,未来仅需少量提示就能让模型准确输出指定格式,结构化输出技术的重要性会随之降低。
The Probabilistic Nature of AI(AI的概率特性)
人工智能模型生成回答的方式具有概率性,这是其不一致性和幻觉问题的核心根源;该特性让AI在创意工作中表现出色,但在事实性任务中成为麻烦之源。
Inconsistency(不一致性)
指模型针对相同或略有差异的提示,生成截然不同的回应,分为两种场景:
- 相同输入,不同输出:两次提供相同提示,得到完全不同的回应。
- 微小输入差异,输出天差地别:提示稍有差别(如大写某个字母),输出结果完全不同。
负面影响:带来不协调的用户体验,降低用户对模型的信任。
缓解方法:
- 缓存答案,相同问题返回相同结果。
- 固定模型的抽样变量(温度、top-p、top-k)和种子变量。
- 局限性:即使修正所有变量,硬件差异也可能导致输出不一致,无法从根本上解决问题。
Hallucination(幻觉)
指模型给出脱离事实依据的答案,对于依赖事实性的任务来说,幻觉是致命的;幻觉并非基础模型独有,而是生成式模型的常见问题。
幻觉的核心成因假说
目前关于语言模型为何会产生幻觉,存在两种主流且相互补充的假说:
- 自我欺骗假说(DeepMind Ortega等人,2021)
- 核心观点:模型无法区分接收到的数据和生成的数据,会将自身生成的内容当作既定事实,进而滚雪球式幻觉——持续产生幻觉以支撑最初的不正确假设,甚至导致在原本能正确回答的问题上犯错。
- 缓解技术:① 让模型区分用户提示与自身生成的标记;② 在训练数据中同时融入事实性与反事实性信号。
- 内部知识失配假说(OpenAI Leo Gao)
- 核心观点:监督微调过程中,模型被训练模仿标注人员的回答,若标注人员使用了模型未掌握的知识,相当于教模型产生幻觉。
- 解决思路:让标注人员附上知识来源(实践中不可行);模型具备自知之明,能判断自身是否掌握某些知识。
幻觉的缓解方法
基于上述假说,目前的缓解方法包括:
- 强化学习/奖励模型优化:设计更具惩罚性的奖励函数,严惩虚构内容(OpenAI约翰·舒尔曼)。
- 验证机制:要求模型追溯回答的参考来源。
- 提示词优化:添加“如实回答,不确定则表示不知道”等指令;要求模型生成简洁回应,减少编造内容的可能性。
- 结合两种假说:自我错觉假说侧重自我监督的问题,失配内部知识假说聚焦监督的问题,需结合解决。
延伸观点
亚·苏茨克弗提出:神经网络非常擅长模拟多种计算机程序,梯度下降法本质上是在神经网络能模拟的所有程序中,寻找最适合目标任务的方案。这意味着新型架构也可能被现有架构所模拟,若要让新架构表现更优,必须能模拟出现有架构无法处理的程序——这也解释了开发超越现有架构的新型神经网络的难点。