跳转至

LLM

【LLM 对齐系列】(三):强化学习的优化目标与策略梯度定理

上一篇文章中,我们介绍了强化学习的三个重要概念:策略(Policy)是智能体的行动指南,奖励(Reward)是评价行动好坏的标尺,而轨迹(Trajectory)则是智能体与环境交互的全过程。

有了这些概念,我们就可以正式进入强化学习的核心问题:如何训练智能体?换句话说,我们已经有了“运动员”(策略)和“裁判”(奖励函数),现在的任务是:如何调整运动员的动作参数 \(\theta\),让他的得分越来越高?

本文作为 LLM 对齐系列的第三篇,将介绍强化学习需要优化的目标函数,并推导出指导优化目标函数的策略梯度定理。

1763749183306

【LLM 对齐系列】(二):强化学习的核心概念:策略、奖励和轨迹

上一篇文章中,我们介绍了大模型开发的三个主要阶段:预训练、监督微调和强化学习。我们了解到,强化学习阶段是让模型真正对齐人类偏好的关键环节,它通过奖励模型的反馈来指导模型的优化,使模型不仅能“说话”,还能“说得好”、“说得对”。

要深入理解强化学习算法的工作原理,我们首先需要建立一套完整的符号体系。本文作为 LLM 对齐系列的第二篇,将介绍强化学习中的核心概念:策略、奖励和轨迹。

image.png

【LLM 对齐系列】(一):大模型开发的三个阶段:预训练、监督微调和强化学习

大语言模型(LLM)的开发通常经历三个主要阶段:预训练(Pre-training)、监督微调(Supervised Fine-Tuning,SFT)和强化学习(Reinforcement Learning)。这三个阶段各自解决不同的问题,层层递进,最终使模型能够更好地理解和执行人类指令。

本文作为 LLM 对齐系列的第一篇,介绍了这三个阶段的作用和必要性,为后续深入探讨 LLM 对齐技术及其数学原理打下基础。

1763401216427

大模型结构化输出的作用、技术原理与实现

大语言模型(LLM)具有强大的文本生成能力,可以输出易于人类阅读的自由格式文本。但是,这一生成过程是概率性的,而不是确定性的。当我们在复杂的软件系统中使用 LLM 作为工作流的一部分时,我们可能需要确保 LLM 的输出符合一定的格式和类型等规范。例如,如果用 LLM 进行文本二分类,我们可能只需要得到  True  或  False  的布尔值,而不希望得到其他任何文本,这就要求 LLM 的输出是严格结构化的。

结构化输出(Structured Output)技术可以解决这一问题,它确保 LLM 的输出严格遵守预定义格式和约束,从而极大地提升 LLM 在自动化工作流和程序化集成中的可靠性。LLM 有了结构化输出的能力后,就能从一个“对话工具”变成一个靠谱的“数据提供者”。

本文讨论了大模型结构化输出的作用,以及实现结构化输出的一些原理和技术实现方案。

技术路径 实现原理 成本 可靠性 适用场景
提示词导向生成 依靠 Prompt 中的软规则与示例,让模型“自觉”输出符合格式的文本。 极低 低~中:模型可能偶尔多输出解释或漏字段。 快速原型、轻量级应用、对格式要求不严的辅助任务。
自动验证与修复 模型生成后先做结构校验;如不合规,系统自动带着错误信息重新请求模型修正。 中:能兜底一次又一次修复错误,但仍非绝对稳固。 需要容错但又不想写硬约束的生产系统,如数据抽取、轻量级结构化任务。
约束解码 在 token 级生成的每一步实时过滤非法 token,用 JSON Schema/CFG/FSM 硬性约束生成路径。 中~高 极高:能从源头保证输出完全合法。 对格式要求极严格的任务,如复杂 JSON、代码生成、严苛 API 指令。
草图引导 / 外部精炼 黑盒模型自由生成草稿,再用可访问 logits 的本地模型按语法规则精炼修复。 中~高:依赖草稿质量,但最终输出能较好满足约束。 黑盒模型不提供 logits 时的 JSON/DSL 生成,本地自动化管线。
NL→Format 两阶段生成 模型先自由推理完整答案,然后再将自然语言结果转换成结构化格式。 中~高:推理质量好,格式化环节仍可能需轻微兜底。 推理复杂但格式规则简单的场景,如 Agent 思考链、任务规划。
监督式微调 用大规模样本直接把结构化输出范式“教进”模型参数中,形成稳定风格。 高:数据质量足够好时,模型能持续稳定地产生结构化格式。 金融/医疗/法律等需要长期稳定抽取的领域任务。
强化学习优化 通过奖励模型给输出提供细粒度反馈,优化模型在结构与内容上的决策路径。 极高 极高:在复杂推理、深层结构生成等方面最稳定。 多步骤推理、复杂 JSON、深度嵌套结构、需要持续优化策略的场景。
原生 API 结构化输出能力 服务商在 API 内部使用约束解码与安全机制,直接保证返回严格的结构。 低~中 极高:由 API 层完全托管,开发者不再接触底层复杂度。 商业应用、智能体工具调用、生产级数据接口。

为什么注意力机制中要除以 \(\sqrt{d_k}\) :从方差到梯度的推导

\[ Attention(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V \]

在 Transformer 的注意力机制中,计算点积注意力 \(QK^T\) 之后,需要除以一个 \(\sqrt{d_k}\) 进行缩放。这一操作通常被解释为“为了数值稳定性”。这里的“稳定”究竟指的是什么?如果不除以 \(\sqrt{d_k}\) 就不稳定了么?为什么不除以 \(d_k\) 或其他数值呢?

本文分析了点积的方差如何随维度增长而增大,并进一步推导 \(\text{softmax}\) 变换得到的行向量的雅可比矩阵,展示当输入数值过大时梯度如何逐渐趋近于零。通过这一过程,我们将会理解,除以 \(\sqrt{d_k}\) 并不是随意的设置,而是确保注意力机制在高维空间中仍能保持可训练性的必要条件。

在 Python 中调用在线大模型 API

许多大模型都提供了在线 API 接口服务,我们可以在 Python 中调用它们。本文使用 openaichatllmdashscope 等包实现了对 OpenAI、讯飞星火、智谱 AI、百度、阿里通义千问的调用。用户只需在本地用 .env 文件存储 API Key 即可快速调用这些大模型。

image-20231031211003404

GPT 论文精读笔记

Generative Pre-trained Transformer(GPT)系列是由 OpenAI 提出的非常强大的预训练语言模型,这一系列的模型可以在非常复杂的 NLP 任务中取得非常惊艳的效果,例如文章生成,代码生成,机器翻译,问答等,而完成这些任务甚至 并不需要有监督学习进行模型微调

本文梳理了 GPT 系列文章中介绍的的关键技术,包括:

  • GPT-1 的解码器、微调、输入形式;
  • GPT-2 的 Zero-shot 和 Prompt;
  • GPT-3 的 Few-shot;
  • Instruct GPT 如何通过基于人类反馈的强化学习生成有帮助的和安全的文本。