<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>训练与对齐 on 扎塔-Zata</title><link>https://www.zata.cc/tags/%E8%AE%AD%E7%BB%83%E4%B8%8E%E5%AF%B9%E9%BD%90/</link><description>Recent content in 训练与对齐 on 扎塔-Zata</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>扎塔-Zata</copyright><lastBuildDate>Thu, 24 Sep 2026 17:09:06 +0800</lastBuildDate><atom:link href="https://www.zata.cc/tags/%E8%AE%AD%E7%BB%83%E4%B8%8E%E5%AF%B9%E9%BD%90/index.xml" rel="self" type="application/rss+xml"/><item><title>Alignment-DPOvsPPOvsGRPO</title><link>https://www.zata.cc/p/alignment-dpovsppovsgrpo/</link><pubDate>Tue, 25 Nov 2025 20:51:18 +0800</pubDate><guid>https://www.zata.cc/p/alignment-dpovsppovsgrpo/</guid><description>&lt;img src="https://www.zata.cc/p/alignment-dpovsppovsgrpo/images/index/index.png" alt="Featured image of post Alignment-DPOvsPPOvsGRPO" />&lt;h3 id="grpo">GRPO
&lt;/h3>&lt;p>&lt;strong>GRPO (Group Relative Policy Optimization)&lt;/strong> 是一种高效的强化学习（RL）算法，专门用于大型语言模型（LLM）的后训练阶段（Post-training）。&lt;/p>
&lt;p>它由 &lt;strong>DeepSeek&lt;/strong> 团队在发布 DeepSeekMath 和 DeepSeek-R1（推理模型）时作为核心技术推出。GRPO 的最大创新在于&lt;strong>摒弃了传统 PPO（近端策略优化）中昂贵的“评论家”（Critic / Value Function）模型&lt;/strong>，从而极大地降低了训练时的显存占用和计算成本。&lt;/p>
&lt;p>以下是关于 GRPO 的详细技术介绍：&lt;/p>
&lt;hr>
&lt;h3 id="1-核心概念什么是-grpo">1. 核心概念：什么是 GRPO？
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>全称&lt;/strong>：Group Relative Policy Optimization&lt;/li>
&lt;li>&lt;strong>中文直译&lt;/strong>：组相对策略优化&lt;/li>
&lt;li>&lt;strong>核心思想&lt;/strong>：
在传统的强化学习（如 PPO）中，我们需要一个“评论家”模型来预测当前状态的价值，以计算“优势函数”（Advantage）。
GRPO 发现，我们可以通过对同一个问题（Prompt）采样&lt;strong>一组（Group）不同的回答，利用这一组回答的平均奖励&lt;/strong>作为基准（Baseline），来计算每个回答的相对好坏。这样就不再需要一个额外的神经网络来做“评论家”了。&lt;/li>
&lt;/ul>
&lt;h3 id="2-grpo-的工作原理算法流程">2. GRPO 的工作原理（算法流程）
&lt;/h3>&lt;p>GRPO 的训练过程可以简单概括为“&lt;strong>小组赛马，优胜劣汰&lt;/strong>”：&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>生成（Group Sampling）&lt;/strong>：
对于每一个输入的问题 $q$，模型（Actor）会生成一组 $G$ 个不同的输出 ${o_1, o_2, &amp;hellip;, o_G}$。&lt;/p>
&lt;ul>
&lt;li>&lt;em>例如：给模型一道数学题，让它生成 64 种不同的解题过程。&lt;/em>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>打分（Reward Calculation）&lt;/strong>：
使用奖励模型（Reward Model）或规则（如数学题答案是否正确）给这 $G$ 个输出分别打分，得到奖励值 ${r_1, r_2, &amp;hellip;, r_G}$。&lt;/p>
&lt;/li>
&lt;li>
$$A_i = \frac{r_i - \text{mean}(R)}{\text{std}(R)}$$&lt;ul>
&lt;li>$A_i$：第 $i$ 个回答的优势值。&lt;/li>
&lt;li>$\text{mean}(R)$：这组回答的平均分。&lt;/li>
&lt;li>如果一个回答的分数高于平均分，它的优势就是正的（被鼓励）；反之则是负的（被抑制）。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>策略更新（Policy Optimization）&lt;/strong>：
利用计算出的优势值 $A_i$，通过梯度下降更新模型的参数，使其下一次更有可能生成高分回答。同时，GRPO 会在损失函数中加入 &lt;strong>KL 散度（KL Divergence）&lt;/strong> 项，防止模型更新步子太大，偏离原始模型（Reference Model）太远，导致训练崩塌。&lt;/p>
&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h3 id="3-grpo-vs-ppo关键区别">3. GRPO vs. PPO：关键区别
&lt;/h3>&lt;p>这是理解 GRPO 价值的最重要部分。PPO 是 ChatGPT 等模型使用的传统方法，而 GRPO 做出了重大简化。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">特性&lt;/th>
&lt;th style="text-align: left">PPO (Proximal Policy Optimization)&lt;/th>
&lt;th style="text-align: left">GRPO (Group Relative Policy Optimization)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>模型组件&lt;/strong>&lt;/td>
&lt;td style="text-align: left">需要 4 个模型：&lt;br>1. Actor (当前策略)&lt;br>2. &lt;strong>Critic (价值网络)&lt;/strong>&lt;br>3. Ref (参考模型)&lt;br>4. Reward (奖励模型)&lt;/td>
&lt;td style="text-align: left">只需要 3 个模型：&lt;br>1. Actor (当前策略)&lt;br>2. Ref (参考模型)&lt;br>3. Reward (奖励模型)&lt;br>&lt;strong>❌ 移除了 Critic&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>显存占用&lt;/strong>&lt;/td>
&lt;td style="text-align: left">&lt;strong>极高&lt;/strong>。Critic 模型通常和 Actor 一样大，训练时需要加载两个巨型模型。&lt;/td>
&lt;td style="text-align: left">&lt;strong>较低&lt;/strong>。节省了 Critic 模型的显存，通常能节省 30%-50% 的资源。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>计算优势的方式&lt;/strong>&lt;/td>
&lt;td style="text-align: left">依赖 Critic 模型预测的“价值”来计算 GAE (Generalized Advantage Estimation)。&lt;/td>
&lt;td style="text-align: left">依赖&lt;strong>组内平均分&lt;/strong>（Group Mean）作为基准。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>计算复杂度&lt;/strong>&lt;/td>
&lt;td style="text-align: left">高，需要前向和反向传播 Critic 网络。&lt;/td>
&lt;td style="text-align: left">低，仅涉及简单的统计计算。&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="4-grpo-的核心优势">4. GRPO 的核心优势
&lt;/h3>&lt;ol>
&lt;li>
&lt;p>&lt;strong>大幅降低训练成本&lt;/strong>：
由于不需要训练和推理那个和 LLM 一样大的 Critic 模型，显存需求大幅下降。这意味着在同样的硬件上，你可以训练参数量更大的模型，或者使用更大的 Batch Size。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>更适合“推理”任务&lt;/strong>：
DeepSeek-R1 的成功证明了 GRPO 非常适合数学、代码等逻辑推理任务。在这些任务中，通过多次采样（生成多种解法）来寻找正确路径是一种非常自然的学习方式。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>训练稳定性&lt;/strong>：
虽然移除了 Critic，但 GRPO 通过组内归一化（Group Normalization）和 KL 惩罚项，依然保持了非常稳定的训练过程，不仅没有损失效果，在数学推理榜单（如 GSM8K, MATH）上甚至超越了传统 PPO。&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h3 id="5-总结">5. 总结
&lt;/h3>&lt;p>&lt;strong>GRPO 是强化学习在 LLM 时代的一次“减法”革命。&lt;/strong>&lt;/p>
&lt;p>它证明了在拥有强大基础模型（Base Model）的前提下，我们不需要复杂的价值网络来指导模型，只需要让模型“自己和自己比”（在一组生成结果中比较），就能高效地进化出强大的推理能力。这也是 DeepSeek 系列模型能够以较低成本取得高性能的关键技术之一。&lt;/p>
&lt;hr>
&lt;p>分割线
2025-11-26&lt;/p>
&lt;hr>
&lt;p>DPO (Direct Preference Optimization) 和 PPO (Proximal Policy Optimization) 是目前大语言模型（LLM）&lt;strong>对齐（Alignment）&lt;/strong> 阶段最主流的两种算法。它们的核心目标都是让模型的输出符合人类的偏好（即 RLHF - Reinforcement Learning from Human Feedback）。&lt;/p>
&lt;p>简单来说：&lt;strong>PPO 是经典的“学院派”方法（OpenAI 早期使用），而 DPO 是高效的“实战派”新贵（目前开源界更流行）。&lt;/strong>&lt;/p>
&lt;p>以下是两者的详细介绍和对比：&lt;/p>
&lt;hr>
&lt;h3 id="一-ppo-proximal-policy-optimization">一、 PPO (Proximal Policy Optimization)
&lt;/h3>&lt;p>&lt;strong>全称：近端策略优化&lt;/strong>&lt;/p>
&lt;p>PPO 是在 ChatGPT 早期训练中成名的方法。它是一种标准的强化学习（RL）算法。&lt;/p>
&lt;h4 id="1-核心原理">1. 核心原理
&lt;/h4>&lt;p>PPO 的核心思想是：&lt;strong>在优化策略（Policy）以获得更高奖励的同时，限制新策略与旧策略之间的差异，防止模型“学歪”或训练崩溃。&lt;/strong>&lt;/p>
&lt;p>在 LLM 的 RLHF 流程中，PPO 通常包含以下三个阶段：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>SFT (Supervised Fine-Tuning)：&lt;/strong> 先用高质量指令数据微调模型，得到基座模型。&lt;/li>
&lt;li>&lt;strong>RM (Reward Model Training)：&lt;/strong> 训练一个奖励模型（Critic），它能给 LLM 的回复打分（模仿人类的偏好）。&lt;/li>
&lt;li>&lt;strong>RL (PPO)：&lt;/strong> 利用 RM 的打分作为奖励信号，通过 PPO 算法更新 LLM 的参数。&lt;/li>
&lt;/ol>
&lt;h4 id="2-训练时的四个模型">2. 训练时的“四个模型”
&lt;/h4>&lt;p>PPO 的工程实现非常复杂，因为它在训练显存中通常需要维护 &lt;strong>4 个模型&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Actor (策略模型)：&lt;/strong> 正在训练的 LLM，负责生成文本。&lt;/li>
&lt;li>&lt;strong>Critic (价值模型)：&lt;/strong> 估计当前状态的价值（通常由 RM 初始化）。&lt;/li>
&lt;li>&lt;strong>Ref Model (参考模型)：&lt;/strong> 冻结权重的 SFT 模型，用于计算 KL 散度（防止 Actor 跑偏）。&lt;/li>
&lt;li>&lt;strong>Reward Model (奖励模型)：&lt;/strong> 冻结权重，用于给 Actor 的输出打分。&lt;/li>
&lt;/ul>
&lt;h4 id="3-优缺点">3. 优缺点
&lt;/h4>&lt;ul>
&lt;li>&lt;strong>优点：&lt;/strong>
&lt;ul>
&lt;li>&lt;strong>理论上限高：&lt;/strong> 在数据极其丰富、算力充足的情况下，PPO 往往能探索出更好的解。&lt;/li>
&lt;li>&lt;strong>在线生成：&lt;/strong> 它在训练中会不断生成新的样本（Sampling），能够探索未见过的空间。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>缺点：&lt;/strong>
&lt;ul>
&lt;li>&lt;strong>极其耗费资源：&lt;/strong> 需要同时加载多个模型，显存占用巨大。&lt;/li>
&lt;li>&lt;strong>训练极不稳定：&lt;/strong> 超参数极其敏感（学习率、KL 系数等），容易出现 reward hacking（模型为了高分输出乱码）或训练发散。&lt;/li>
&lt;li>&lt;strong>速度慢：&lt;/strong> 因为涉及到在线采样（Generation）过程，训练吞吐量低。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="二-dpo-direct-preference-optimization">二、 DPO (Direct Preference Optimization)
&lt;/h3>&lt;p>&lt;strong>全称：直接偏好优化&lt;/strong>&lt;/p>
&lt;p>DPO 是斯坦福大学在 2023 年提出的算法。它颠覆了 RLHF 必须包含“奖励模型”和“强化学习”的传统范式。&lt;/p>
&lt;h4 id="1-核心原理-1">1. 核心原理
&lt;/h4>&lt;p>DPO 的核心洞见是：&lt;strong>我们不需要显式地训练一个奖励模型（Reward Model）。&lt;/strong>&lt;/p>
&lt;p>数学推导证明，最优的策略（Policy）和最优的奖励函数之间存在直接的映射关系。DPO 将 RLHF 问题转化为了一个简单的 &lt;strong>二分类损失函数（Classification Loss）&lt;/strong> 问题。&lt;/p>
&lt;p>DPO 不需要让模型在训练时生成文本，而是直接使用偏好数据对 $(x, y_w, y_l)$ 进行训练（$x$ 是提示，$y_w$ 是胜出的回复，$y_l$ 是失败的回复）。&lt;/p>
&lt;h4 id="2-训练流程">2. 训练流程
&lt;/h4>&lt;p>DPO 省略了 RM 的训练步骤，直接优化 Policy：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>公式直觉：&lt;/strong> 增加模型生成“好回复”($y_w$) 的概率，同时降低生成“坏回复”($y_l$) 的概率。&lt;/li>
&lt;li>&lt;strong>参考模型：&lt;/strong> 训练时只需要加载 &lt;strong>2 个模型&lt;/strong>（正在训练的 Policy Model 和冻结的 Reference Model）。&lt;/li>
&lt;/ul>
&lt;h4 id="3-优缺点-1">3. 优缺点
&lt;/h4>&lt;ul>
&lt;li>&lt;strong>优点：&lt;/strong>
&lt;ul>
&lt;li>&lt;strong>实现简单：&lt;/strong> 代码实现类似传统的监督学习（Cross Entropy），无需复杂的 RL 循环。&lt;/li>
&lt;li>&lt;strong>显存占用低：&lt;/strong> 不需要 Critic 和独立的 Reward Model。&lt;/li>
&lt;li>&lt;strong>训练稳定：&lt;/strong> 不容易发散，超参数较少。&lt;/li>
&lt;li>&lt;strong>速度快：&lt;/strong> 没有推理采样阶段，训练速度大幅提升。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>缺点：&lt;/strong>
&lt;ul>
&lt;li>&lt;strong>容易过拟合：&lt;/strong> 对偏好数据的质量非常敏感。如果数据中有噪声，DPO 会迅速拟合这些噪声。&lt;/li>
&lt;li>&lt;strong>分布外泛化能力：&lt;/strong> 有研究指出，在处理完全没见过的 Prompt 时，PPO 可能比 DPO 稍好（存在争议）。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="三-ppo-vs-dpo-核心对比表">三、 PPO vs. DPO 核心对比表
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">特性&lt;/th>
&lt;th style="text-align: left">PPO (Proximal Policy Optimization)&lt;/th>
&lt;th style="text-align: left">DPO (Direct Preference Optimization)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>本质&lt;/strong>&lt;/td>
&lt;td style="text-align: left">强化学习 (RL)&lt;/td>
&lt;td style="text-align: left">监督学习 / 优化方法&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>显存需求&lt;/strong>&lt;/td>
&lt;td style="text-align: left">&lt;strong>极高&lt;/strong> (需加载 Actor, Critic, Ref, RM)&lt;/td>
&lt;td style="text-align: left">&lt;strong>较低&lt;/strong> (只需 Policy, Ref)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>训练流程&lt;/strong>&lt;/td>
&lt;td style="text-align: left">复杂 (采样 -&amp;gt; 打分 -&amp;gt; 更新 -&amp;gt; 循环)&lt;/td>
&lt;td style="text-align: left">简单 (直接在偏好数据上计算 Loss)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>稳定性&lt;/strong>&lt;/td>
&lt;td style="text-align: left">&lt;strong>差&lt;/strong> (对超参极度敏感，调试困难)&lt;/td>
&lt;td style="text-align: left">&lt;strong>好&lt;/strong> (类似 SFT 的稳定性)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>数据要求&lt;/strong>&lt;/td>
&lt;td style="text-align: left">需要 Reward Model 训练数据 + Unlabeled Prompts&lt;/td>
&lt;td style="text-align: left">需要成对的偏好数据 $(y_w, y_l)$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>主要风险&lt;/strong>&lt;/td>
&lt;td style="text-align: left">Reward Hacking (钻空子刷分)&lt;/td>
&lt;td style="text-align: left">Overfitting (过拟合差数据)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;strong>工业界现状&lt;/strong>&lt;/td>
&lt;td style="text-align: left">OpenAI (GPT-4), Anthropic 早期使用&lt;/td>
&lt;td style="text-align: left">Llama 3, Zephyr, Qwen 等开源模型主流选择&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h3 id="四-为什么现在开源界主要用-dpo">四、 为什么现在开源界主要用 DPO？
&lt;/h3>&lt;p>虽然 PPO 在理论上可能探索能力更强，但在实际的开源大模型开发（如 Llama 3 的微调、Qwen 的对齐）中，&lt;strong>DPO 及其变体（如 IPO, KTO）已经占据了统治地位&lt;/strong>。原因如下：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>算力就是金钱：&lt;/strong> PPO 需要的显存和时间是 DPO 的数倍。对于大多数团队，用 PPO 训练一个 70B 的模型成本过高。&lt;/li>
&lt;li>&lt;strong>效果足够好：&lt;/strong> 实验表明，在大多数公开基准测试中，DPO 的效果与 PPO 持平甚至更好，且实现难度低得多。&lt;/li>
&lt;li>&lt;strong>变体涌现：&lt;/strong> 基于 DPO 衍生出了很多改进版，例如：
&lt;ul>
&lt;li>&lt;strong>ORPO：&lt;/strong> 甚至不需要 SFT 阶段，直接由预训练模型一步到位进行偏好对齐。&lt;/li>
&lt;li>&lt;strong>SimPO：&lt;/strong> 进一步简化 DPO，去掉了 Reference Model，显存更省。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;h3 id="五-总结建议">五、 总结建议
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>如果你是学术研究者&lt;/strong>，研究 RL 算法本身，或者你有无限算力想要探索 LLM 的极限，可以深入研究 &lt;strong>PPO&lt;/strong>。&lt;/li>
&lt;li>&lt;strong>如果你是算法工程师&lt;/strong>（在企业落地 LLM），或者你在做微调项目，&lt;strong>请首选 DPO&lt;/strong>。它能让你用更少的 GPU，在更短的时间内获得一个听话、对齐良好的模型。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;strong>接下来您希望我为您做什么？&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>提供一段使用 &lt;code>TRL&lt;/code> 库进行 &lt;strong>DPO 训练的 Python 代码示例&lt;/strong>。&lt;/li>
&lt;li>深入讲解 DPO 的&lt;strong>损失函数（Loss Function）数学细节&lt;/strong>。&lt;/li>
&lt;li>介绍 DPO 的最新变体（如 &lt;strong>ORPO&lt;/strong> 或 &lt;strong>SimPO&lt;/strong>）是如何进一步优化的。&lt;/li>
&lt;/ol></description></item><item><title>增量学习研究综述：理论、方法、应用与未来展望</title><link>https://www.zata.cc/p/%E5%A2%9E%E9%87%8F%E5%AD%A6%E4%B9%A0%E7%A0%94%E7%A9%B6%E7%BB%BC%E8%BF%B0%E7%90%86%E8%AE%BA%E6%96%B9%E6%B3%95%E5%BA%94%E7%94%A8%E4%B8%8E%E6%9C%AA%E6%9D%A5%E5%B1%95%E6%9C%9B/</link><pubDate>Fri, 09 May 2025 16:51:10 +0800</pubDate><guid>https://www.zata.cc/p/%E5%A2%9E%E9%87%8F%E5%AD%A6%E4%B9%A0%E7%A0%94%E7%A9%B6%E7%BB%BC%E8%BF%B0%E7%90%86%E8%AE%BA%E6%96%B9%E6%B3%95%E5%BA%94%E7%94%A8%E4%B8%8E%E6%9C%AA%E6%9D%A5%E5%B1%95%E6%9C%9B/</guid><description>&lt;img src="https://www.zata.cc/p/%E5%A2%9E%E9%87%8F%E5%AD%A6%E4%B9%A0%E7%A0%94%E7%A9%B6%E7%BB%BC%E8%BF%B0%E7%90%86%E8%AE%BA%E6%96%B9%E6%B3%95%E5%BA%94%E7%94%A8%E4%B8%8E%E6%9C%AA%E6%9D%A5%E5%B1%95%E6%9C%9B/images/index/index.png" alt="Featured image of post 增量学习研究综述：理论、方法、应用与未来展望" />&lt;h1 id="增量学习研究综述理论方法应用与未来展望">增量学习研究综述：理论、方法、应用与未来展望
&lt;/h1>&lt;h2 id="前言">前言
&lt;/h2>&lt;p>本报告旨在对增量学习（Incremental Learning, IL）领域进行系统性梳理与深入探讨。增量学习，亦常被称为持续学习（Continual Learning, CL）或终身学习（Lifelong Learning, LLL），是机器学习领域中一个至关重要的研究方向。它致力于赋予智能系统一种能够像人类一样持续从数据流中获取新知识，同时保留、整合甚至优化已有知识的能力。本报告将详细阐述增量学习的基本定义与核心原理，剖析其面临的关键挑战，特别是灾难性遗忘问题。在此基础上，报告将系统介绍各类主流的增量学习方法，并探讨相关的开源代码项目与研究框架。此外，本报告将重点关注增量学习在光谱分析领域的应用，涵盖高光谱图像分析、化学计量学以及天文光谱数据处理等方向，并结合具体案例进行比较分析。同时，报告还将解析相关领域的重要研究论文，讨论评估增量学习系统性能的指标与实验设置，并将其与在线学习、迁移学习、元学习等相关学习范式进行比较。最后，本报告将展望增量学习未来的发展趋势与面临的挑战，以期为相关领域的研究人员与实践者提供有价值的参考。&lt;/p>
&lt;h2 id="1-增量学习的基础">1. 增量学习的基础
&lt;/h2>&lt;h3 id="11-增量学习il持续学习cl与终身学习lll的定义">1.1. 增量学习（IL）、持续学习（CL）与终身学习（LLL）的定义
&lt;/h3>&lt;p>增量学习（IL）是指机器学习系统在不断接收新样本的过程中，能够持续学习新知识，同时保留大部分先前习得知识的能力，并且这一过程通常不依赖于对所有原始训练数据的访问。这种学习范式被认为是机器学习的一个特殊场景，其目标更贴近于人类的行为和思维模式，使模型能够像生物体的大脑系统一样，在其“一生”中不断学习新知识并巩固旧知识。在学术文献和研究社区中，“增量学习”、“持续学习”和“终身学习”这三个术语经常被互换使用。它们共同的核心目标是使模型能够从连续的信息流中学习，并在学习新知识的同时保留、整合甚至优化旧知识。尽管这些术语在侧重点上可能存在细微差别——例如，“终身学习”有时更强调在一个非常长的时间跨度内积累多样化技能的广度——但在本报告的范畴内，它们主要被视为同义词，共同指向应对顺序知识获取和保持的核心挑战。&lt;/p>
&lt;p>增量学习的研究历史已超过20年，其早期思想更多地起源于认知神经科学对人类记忆和遗忘机制的研究。许多增量学习论文的创新点也受到了认知科学发展成果的启发。这种对生物启发机制的关注，进一步凸显了增量学习致力于模拟人类学习能力的本质。强调在学习新知识时无需访问全部原始数据，不仅是增量学习的一个关键特征，也揭示了其重要的实际应用驱动力，包括数据隐私保护、存储资源限制以及避免大规模重复训练带来的计算效率问题。&lt;/p>
&lt;h3 id="12-核心原理稳定性-可塑性困境">1.2. 核心原理：稳定性-可塑性困境
&lt;/h3>&lt;p>增量学习的核心原理在于模型需要在学习新知识和巩固旧知识之间达到一种精妙的平衡。具体而言，模型必须同时具备“可塑性”（plasticity）以吸收新信息，以及“稳定性”（stability）以巩固现有知识。这种对立统一的需求构成了增量学习中著名的“稳定性-可塑性困境”（stability-plasticity dilemma）。模型需要足够的可塑性来学习新任务或适应新数据的分布。然而，如果模型参数在学习新知识时发生过大的变化，就可能破坏先前学习到的表示，导致对旧知识的遗忘。反之，如果为了防止遗忘而使网络权重过于稳定，模型又可能难以有效地学习新任务或适应环境的变化。&lt;/p>
&lt;p>传统的机器学习模型通常假设训练数据是独立同分布的，并且数据分布是固定的或平稳的。当模型需要从非平稳的数据流中持续学习时，新知识的引入很容易干扰甚至覆盖旧知识，导致模型在旧任务上的性能显著下降。稳定性-可塑性困境是增量学习领域的核心理论挑战。一个增量学习系统的有效性，在很大程度上取决于其驾驭这一困境的能力。因此，所有旨在解决灾难性遗忘的增量学习方法，其本质都可以被看作是管理这种两难困境的策略。&lt;/p>
&lt;p>生物学上的启发为理解和解决这一困境提供了有益的视角。例如，人脑中海马体（hippocampus）和新皮质（neocortex）的分工常被提及：海马体能够快速学习新信息并具有短期适应性，而新皮质则负责缓慢学习和形成长期记忆。一些增量学习方法，如基于回放的策略，便明确借鉴了这种生物学机制，试图模拟大脑在新旧知识整合过程中的记忆与巩固方式。这种生物启发不仅为算法设计提供了思路，也加深了对增量学习本质的理解。&lt;/p>
&lt;h3 id="13-中心挑战灾难性遗忘cf">1.3. 中心挑战：灾难性遗忘（CF）
&lt;/h3>&lt;p>灾难性遗忘（Catastrophic Forgetting, CF）是增量学习领域长期存在且最为核心的挑战。它指的是当一个预训练好的模型在学习新任务或接收新数据时，其在新知识上的性能得到提升，但先前学习到的关于旧任务或旧数据的知识却被严重破坏，导致在旧任务上的性能急剧下降甚至完全丢失的现象。灾难性遗忘的根本原因在于，当模型学习新知识时，其内部参数（如神经网络的权重）会根据新数据的特性进行调整。由于新数据的分布可能与旧数据存在显著差异，这些调整可能会覆盖或干扰对旧知识至关重要的参数配置。深度神经网络（DNNs）由于其高度参数化和复杂的非线性映射能力，对输入数据的分布变化尤为敏感，因此特别容易遭受灾难性遗忘的影响。&lt;/p>
&lt;p>灾难性遗忘不仅仅是模型性能的简单下降，它更是构建能够持续适应动态环境的人工智能系统的根本障碍。如果一个系统在学习新事物时会忘记旧事物，那么它就无法真正实现知识的积累和持续进化。因此，有效缓解或克服灾难性遗忘，是增量学习研究的首要目标，也是衡量增量学习算法成功与否的关键标准。灾难性遗忘的严重程度也与具体的学习场景有关。例如，在任务增量学习（task-incremental learning）场景中，模型在推理时会被告知当前任务的ID，因此模型不必区分来自不同任务的类别，灾难性遗忘的挑战相对较小。然而，在更具挑战性的类增量学习（class-incremental learning）场景中，模型在推理时无法访问任务ID，这就要求模型具备从所有已学习任务中区分所有类别的能力。在这种情况下，如果旧类别的表征被新类别的学习过程所破坏，灾难性遗忘的问题会更加突出，因为模型失去了区分新旧类别的能力。&lt;/p>
&lt;h2 id="2-增量学习的方法论">2. 增量学习的方法论
&lt;/h2>&lt;p>为了应对灾难性遗忘并平衡稳定性与可塑性，研究者们提出了多种增量学习方法。这些方法大致可以归为以下几类：&lt;/p>
&lt;h3 id="21-基于回放的策略exemplar-and-generative">2.1. 基于回放的策略（Exemplar and Generative）
&lt;/h3>&lt;p>基于回放（Replay-based）的方法是增量学习中最直观且有效的策略之一。其核心思想是在学习新任务时，让模型“复习”先前任务的知识。根据回放样本的来源，主要分为两类：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>基于样本回放（Exemplar Replay）：&lt;/strong> 该策略在学习完每个任务后，保存一部分当前任务的原始样本（称为“记忆样本”或“exemplars”）在一个固定大小的内存空间中。在后续学习新任务时，这些存储的旧样本会与新任务的样本混合在一起共同训练模型。这一过程类似于人脑将新信息快速存储在海马体中，然后通过不断回放新旧信息，缓慢地将其整合到新皮质系统中，以尽量减少新信息整合过程对现有知识的干扰。iCaRL（Incremental Classifier and Representation Learning）是一个典型的样本回放方法，它结合了知识蒸馏和基于原型的样本回放策略。样本回放方法虽然有效，但也面临一些挑战。首先，存储记忆样本需要额外的内存空间，并且随着任务数量的增加，有限的存储空间可能难以容纳所有旧任务的代表性样本。其次，如何选择最具代表性的记忆样本以最大化回放效果，本身就是一个研究问题。例如，iCaRL假设越靠近类别特征均值的样本越有代表性。&lt;/li>
&lt;li>&lt;strong>基于生成回放（Generative Replay / Pseudo-Rehearsal）：&lt;/strong> 为了克服样本回放中存储原始数据带来的内存和隐私问题，研究者提出了生成回放策略。该策略不直接存储旧任务的原始样本，而是训练一个生成模型（如生成对抗网络 GANs 或变分自编码器 VAEs）来学习旧任务的数据分布。在学习新任务时，利用该生成模型生成与旧数据分布相似的“伪样本”（pseudo-samples），并将这些伪样本与新任务的真实样本一同用于模型训练。FearNet便是采用此类策略的一个例子。生成回放的优势在于可以显著减少对原始数据的存储需求，并在一定程度上缓解数据隐私泄露的风险。然而，训练高质量的生成模型本身具有一定难度，生成的伪样本可能无法完全捕捉真实数据的复杂分布，从而影响回放的效果。&lt;/li>
&lt;/ul>
&lt;p>总的来说，基于回放的方法通过在新旧知识之间建立直接的联系来对抗遗忘，通常能够取得较好的性能。然而，它们也引入了关于内存开销、计算成本以及（在样本回放中）数据隐私的权衡。选择样本回放还是生成回放，往往取决于具体的应用场景、资源限制和隐私需求。&lt;/p>
&lt;h3 id="22-基于正则化的策略">2.2. 基于正则化的策略
&lt;/h3>&lt;p>基于正则化（Regularization-based）的策略通过在模型学习新任务时，向损失函数中添加额外的约束项，来限制模型参数的更新幅度，从而保护先前任务学习到的重要知识。这类方法的核心思想是选择性地降低模型对旧知识相关参数的可塑性。根据正则化对象的不同，主要可以分为权重正则化和功能正则化（常通过知识蒸馏实现）。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>权重正则化（Weight Regularization）：&lt;/strong> 这类方法的核心思想是识别并保护对先前任务至关重要的模型权重。在学习新任务时，通过施加惩罚来限制这些重要权重的改变幅度。例如，弹性权重巩固（Elastic Weight Consolidation, EWC）算法利用费雪信息矩阵（Fisher Information Matrix）来估计每个参数对于旧任务的重要性，对重要参数的修改施加二次惩罚。其他类似的方法还包括突触智能（Synaptic Intelligence, SI）和记忆感知突触（Memory Aware Synapses, MAS）。这些方法的挑战在于如何准确且高效地度量参数的重要性。不同的方法采用不同的启发式策略来估计这种重要性，例如EWC基于参数对任务损失函数梯度的敏感度，而SI则通过参数在学习过程中的路径积分来衡量。&lt;/li>
&lt;li>&lt;strong>知识蒸馏（Functional Regularization）：&lt;/strong> 这类方法也称为基于数据约束或功能正则化的方法，其目标是约束新旧模型在功能层面的一致性，而非直接约束参数本身。核心思想是利用旧模型在新数据或部分旧数据上的输出（“软标签”）作为指导，来训练新模型。通过使新模型在新任务上的预测行为与旧模型在新任务或旧任务上的预测行为相近，从而将旧模型的“知识”蒸馏到新模型中，缓解灾难性遗忘。Learning without Forgetting (LwF) 是一个典型的知识蒸馏方法。它通常不需要存储旧数据，而是利用新任务的数据来生成旧模型的软标签。基于正则化的方法通常被认为是一类“优雅”的增量学习方法，因为它们很多时候不需要存储旧数据，从而节省了存储空间并避免了隐私问题。然而，它们的有效性可能高度依赖于新旧任务之间的相关性。如果任务差异过大，正则化约束可能难以有效地保护旧知识，甚至可能出现任务混淆。此外，随着学习任务数量的增加，一些正则化方法的训练时间可能会线性增长，并且引入的正则项也可能无法完全约束模型在新任务上的优化过程。&lt;/li>
&lt;/ul>
&lt;h3 id="23-基于参数隔离和架构的策略">2.3. 基于参数隔离和架构的策略
&lt;/h3>&lt;p>基于参数隔离（Parameter Isolation）或架构（Architecture-based）的策略通过为每个任务分配独立的模型参数或网络结构，来从根本上避免不同任务之间的参数相互干扰，从而防止灾难性遗忘。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>参数隔离（Parameter Isolation）：&lt;/strong> 这类方法为每个新任务分配一组独立的模型参数或一个独立的子网络。当学习新任务时，模型只更新与当前任务相关的参数，而先前任务学习到的参数则被“冻结”或保持不变。这样，新知识的学习就不会覆盖旧知识。&lt;/li>
&lt;li>&lt;strong>动态架构 / 模型扩展（Dynamic Architectures / Model Expansion）：&lt;/strong> 这类方法在学习新任务时，会根据需要动态地扩展模型的结构，例如增加新的神经元、层或整个子网络来学习新知识，而先前任务学习到的网络部分则保持不变或受到保护。渐进式神经网络（Progressive Neural Networks, PNN）和动态扩展网络（Dynamically Expandable Networks, DEN）是此类方法的代表。PNN为每个新任务添加新的网络列，并通过横向连接从先前学习的任务列中迁移知识。&lt;/li>
&lt;/ul>
&lt;p>基于参数隔离和架构的方法能够非常有效地避免灾难性遗忘，因为不同任务的知识存储在物理上分离的参数中。然而，这类方法的主要缺点是模型容量会随着任务数量的增加而快速增长，导致参数量和计算量显著增加，可能难以扩展到任务数量非常多或非常复杂的场景。此外，如果任务之间完全隔离参数，可能会阻碍知识在不同任务间的正向迁移。因此，如何在隔离参数以防止遗忘的同时，有效地实现知识共享和迁移，是这类方法需要解决的一个关键问题。在某些架构策略中，会引入一个选择器模块，用于在推理时判断应该使用哪个任务专属的模型或参数子集。&lt;/p>
&lt;h3 id="24-混合及新兴方法">2.4. 混合及新兴方法
&lt;/h3>&lt;p>随着增量学习研究的深入，越来越多的方法开始融合不同策略的优点，形成了混合型（Hybrid）方法。这些方法试图通过结合多种机制来更全面地应对灾难性遗忘和稳定性-可塑性困境。例如，iCaRL 通过结合知识蒸馏（一种正则化技术）和样本回放（一种回放技术）来提升性能。这种趋势表明，单一策略往往难以在所有方面都达到最优，通过优势互补可以设计出更强大的增量学习系统。&lt;/p>
&lt;p>与此同时，增量学习的研究领域也在不断扩展，催生了一些新兴的研究方向和方法。其中，联邦类增量学习（Federated Class-Incremental Learning, FCIL）是一个备受关注的新兴领域。FCIL 将增量学习的挑战置于联邦学习的框架之下，旨在让多个参与方在不共享私有数据的前提下，协同训练一个能够持续学习新类别并适应任务序列的全局模型。在FCIL中，传统的联邦学习算法（如FedAvg）同样面临严重的灾难性遗忘问题。针对这一挑战，研究者们提出了一些新的方法，例如 FedGTG (Federated Global Twin Generator) 框架，它在服务器端训练一个数据生成器和特征生成器来创建所有已见类别的合成信息，然后发送给客户端，客户端再利用这些信息来辅助本地模型的知识保持和新任务学习。这些混合型和新兴方法的出现，反映了增量学习领域正朝着更复杂、更贴近实际应用场景的方向发展。它们不仅要解决核心的灾难性遗忘问题，还需要考虑数据隐私、通信效率、去中心化协作等额外的约束条件。&lt;/p>
&lt;h2 id="3-增量学习研究的代码库与框架">3. 增量学习研究的代码库与框架
&lt;/h2>&lt;p>为了促进增量学习领域的研究与发展，社区中涌现出一些优秀的开源代码库和框架。这些工具为研究者提供了标准化的实验平台、预实现的算法和评估指标，极大地降低了研究门槛，加速了算法的迭代与比较。&lt;/p>
&lt;h3 id="31-pycil-python-class-incremental-learning-深度解析">3.1. PyCIL (Python Class-Incremental Learning) 深度解析
&lt;/h3>&lt;p>PyCIL 是一个基于 PyTorch 的开源工具箱，专门为类增量学习（Class-Incremental Learning, CIL）设计。CIL 是增量学习中一个极具挑战性的场景，要求模型在不断学习新类别的同时，能够区分所有已见类别，且通常在测试时没有任务ID的提示。PyCIL 的目标是通过实现一系列关键的CIL算法，来减轻研究人员的负担，并推动该领域的基础研究。该工具箱包含了众多CIL算法的实现，既有奠基性的工作，如 EWC (Elastic Weight Consolidation)、LwF (Learning without Forgetting) 和 iCaRL (Incremental Classifier and Representation Learning)，也涵盖了当前最先进的算法，例如 DER (Dynamically Expandable Representation)、FOSTER (Feature Boosting and Compression for Class-incremental Learning)、MEMO (Memory-Efficient Class-Incremental Learning)、BEEF (Bi-Compatible Class-Incremental Learning via Energy-Based Expansion and Fusion) 以及最新的 TagFex 等。这种广泛的算法覆盖使得 PyCIL 成为进行CIL算法复现、比较和创新的重要资源。&lt;/p>
&lt;p>PyCIL 为常用的CIL基准数据集（如 CIFAR-100, ImageNet-100, ImageNet-1000）提供了预处理流程。研究者可以通过配置文件灵活地设置实验参数，包括记忆缓存大小（memory-size）、初始阶段的类别数量（init-cls）、每个增量阶段新增的类别数量（increment）、骨干网络类型（convnet-type）以及随机种子（seed）等。此外，PyCIL 也积极跟进研究前沿，支持基于预训练模型（如CLIP）的CIL方法，并发布了相关的 PILOT 工具箱。PyCIL 以其对CIL领域的专注和全面的算法实现，为研究者提供了一个强大而专业的平台。其持续更新和对最新SOTA方法的及时跟进（例如，其更新日志中提到“TagFex. State-of-the-art method of 2025!”），表明了其维护团队致力于保持工具箱在前沿研究中的领先地位。该项目采用MIT许可证开源，并已在《SCIENCE CHINA Information Sciences》上发表。&lt;/p>
&lt;h3 id="32-avalanche-深度解析">3.2. Avalanche 深度解析
&lt;/h3>&lt;p>Avalanche 是另一个基于 PyTorch 的端到端持续学习库，由 ContinualAI 这一非营利性组织维护和推动。与 PyCIL 专注于CIL不同，Avalanche 的目标是提供一个更通用、更全面的持续学习研究平台，支持广泛的CL场景、动态架构、数据流处理以及增量式的训练和评估方法。Avalanche 的架构设计具有良好的模块化特性，主要包含以下核心模块：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Benchmarks：&lt;/strong> 提供统一的数据处理API，用于从各种数据集中生成数据流，并包含了主流的CL基准测试（如 PermutedMNIST, Split CIFAR 等）。&lt;/li>
&lt;li>&lt;strong>Training：&lt;/strong> 包含模型训练所需的所有实用工具，支持便捷地实现新的CL策略，并预置了一系列CL基线算法和SOTA算法。&lt;/li>
&lt;li>&lt;strong>Evaluation：&lt;/strong> 提供评估CL算法性能的各种指标和工具，支持对持续学习系统所关注的各个方面进行全面评估，并集成了高级日志记录和绘图功能（如原生TensorBoard支持）。&lt;/li>
&lt;li>&lt;strong>Models：&lt;/strong> 提供实现模型扩展和任务感知模型的实用程序，以及一系列可用于CL实验的预训练模型和流行架构。&lt;/li>
&lt;li>&lt;strong>Logging：&lt;/strong> 支持标准的stdout、文件以及TensorBoard等多种日志记录方式。&lt;/li>
&lt;/ul>
&lt;p>一个显著的特点是 Avalanche 将其能力扩展到了持续强化学习（Continual Reinforcement Learning, CRL）领域，推出了 Avalanche RL。Avalanche RL 建立在 Avalanche 的核心结构之上，支持 OpenAI Gym 接口的环境，能够处理环境流，并实现了如 A2C、DQN 等CRL算法。Avalanche 强调研究的可复现性、模块化、可重用性、效率和可移植性。作为一个由 ContinualAI 社区驱动的开源项目，Avalanche 具有强大的社区支持和协作基础，这有助于其广泛采纳和持续发展，使其成为一个覆盖从监督学习到强化学习等多种CL范式的综合性研究工具。&lt;/p>
&lt;h3 id="33-其他值得注意的资源概述">3.3. 其他值得注意的资源概述
&lt;/h3>&lt;p>除了 PyCIL 和 Avalanche 这两个专注于增量/持续学习的库之外，还有一些其他资源对该领域的研究者非常有价值。一个重要的资源是名为 &amp;ldquo;Awesome_Continual-Lifelong-Incremental_learning&amp;rdquo; 的 GitHub 仓库。这类 &amp;ldquo;Awesome&amp;rdquo; 列表通常由社区成员共同维护，汇集了特定领域内的大量高质量资源，包括最新的研究论文、相关的代码实现、学术研讨会信息以及挑战赛等。对于增量学习这样一个快速发展的领域，这样的列表为研究者提供了一个便捷的入口，帮助他们快速了解领域动态，发现相关的研究工作和工具。当然，通用的机器学习框架如 TensorFlow、PyTorch 和 Scikit-learn 也是进行增量学习研究的基础。它们提供了构建和训练机器学习模型的核心组件。然而，这些通用框架本身并不直接提供针对增量学习特定挑战（如灾难性遗忘管理、特定基准设置、专用评估指标等）的内建解决方案。正是由于这些通用框架在直接支持增量学习方面的局限性，才凸显了像 PyCIL 和 Avalanche 这样的专用库的价值。这些专用库在通用框架的基础上，封装了增量学习特有的逻辑和工具，从而极大地简化了相关研究的复杂度。&lt;/p>
&lt;h3 id="表1pycil-与-avalanche-特性对比">表1：PyCIL 与 Avalanche 特性对比
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>特性&lt;/th>
&lt;th>PyCIL (Python Class-Incremental Learning)&lt;/th>
&lt;th>Avalanche&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>主要关注点&lt;/strong>&lt;/td>
&lt;td>类增量学习 (CIL)&lt;/td>
&lt;td>通用持续学习 (CL)，包括CIL, 领域IL, 任务IL, 持续强化学习 (CRL) 等&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>核心支持算法/策略举例&lt;/strong>&lt;/td>
&lt;td>EWC, LwF, iCaRL, DER, FOSTER, MEMO, BEEF, TagFex 等众多CIL SOTA方法&lt;/td>
&lt;td>包含多种CL基线和SOTA策略，如EWC, LwF, GEM, Replay等，并支持用户自定义策略&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>基准测试处理&lt;/strong>&lt;/td>
&lt;td>为CIFAR-100, ImageNet-100/1000 等CIL常用数据集提供预处理和标准设置&lt;/td>
&lt;td>提供PermutedMNIST, Split CIFAR等多种CL基准，并有灵活的基准生成器&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>强化学习支持&lt;/strong>&lt;/td>
&lt;td>不直接支持&lt;/td>
&lt;td>通过Avalanche RL模块支持持续强化学习，兼容Gym环境&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>社区/维护&lt;/strong>&lt;/td>
&lt;td>由南京大学LAMDA实验室主导开发和维护，有特定研究社区关注&lt;/td>
&lt;td>由ContinualAI非营利组织维护，拥有更广泛的国际社区支持和协作&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>独特优势&lt;/strong>&lt;/td>
&lt;td>对CIL场景的深度专注和算法覆盖的全面性，紧跟CIL研究前沿&lt;/td>
&lt;td>框架的通用性和模块化设计，支持多样化的CL场景和CRL，强大的社区生态&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>这张对比表清晰地展示了 PyCIL 和 Avalanche 各自的定位和优势。研究者可以根据其具体的研究方向和需求来选择合适的工具。例如，如果研究重点是图像分类中的类增量学习，PyCIL 可能是更直接的选择；而如果研究兴趣在于更广泛的持续学习范式、跨领域应用或持续强化学习，Avalanche 则提供了更全面的支持。&lt;/p>
&lt;h2 id="4-增量学习的应用与比较案例研究">4. 增量学习的应用与比较案例研究
&lt;/h2>&lt;p>增量学习作为一种旨在赋予机器持续学习能力的范式，其应用潜力遍及众多需要模型适应动态变化环境的领域。&lt;/p>
&lt;h3 id="41-通用应用领域">4.1. 通用应用领域
&lt;/h3>&lt;p>增量学习的应用范围非常广泛，几乎涵盖了所有传统机器学习能够应用的领域，并在这些领域中解决了数据和任务不断演化带来的挑战。在计算机视觉领域，图像分类和各种视觉任务是增量学习研究的传统阵地。模型需要不断学习识别新的物体类别，或在变化的视觉场景中保持性能。自然语言处理（NLP）也是增量学习的重要应用方向，例如，在对话系统中，模型需要学习新的对话主题或用户意图；在关系抽取和命名实体识别任务中，新的实体类型或关系模式会不断出现。机器人技术领域对增量学习的需求尤为迫切。机器人需要在其生命周期中学习新的物体、掌握新的技能、适应不断变化的环境，例如实现终身同步定位与建图（Lifelong SLAM）以及持续改进的感知能力。在网络安全领域，特别是入侵检测系统（IDS）中，新的攻击手段和恶意软件模式层出不穷，增量学习可以帮助IDS模型实时适应这些新出现的威胁。医疗健康领域也从增量学习中获益，例如，模型可以学习识别新的疾病模式或适应不同医疗设备产生的医学影像数据。此外，推荐系统需要根据用户兴趣的变化和新项目的出现来更新推荐模型。自动驾驶系统必须能够识别新的交通标志、障碍物类型或适应不同的道路和天气条件。社交媒体内容分析中，模型需要应对不断出现的新的欺诈手段、不当内容类型或热门话题。甚至在虚假音频检测等特定应用中，随着新的音频合成技术的出现，检测模型也需要持续更新其知识库。电子商务平台也面临每日新增产品类型的问题，需要分类模型能够增量学习。这些多样化的应用场景共同的特点是数据流的非平稳性和任务需求的演化性。在这些场景下，从头开始完全重新训练模型不仅成本高昂，有时甚至是不现实的（例如，由于数据隐私或存储限制）。增量学习提供了一种更有效、更灵活的解决方案，使得AI系统能够持续进化，真正适应动态的世界。&lt;/p>
&lt;h3 id="42-不同场景下的性能比较分析">4.2. 不同场景下的性能比较分析
&lt;/h3>&lt;p>对增量学习方法进行比较分析可以揭示其在不同场景下的有效性和局限性。在入侵检测系统（IDS）领域的一项研究中，基于增量学习的SVM模型在CI-CIDS 2017数据集上的表现优于传统的批量学习方法。具体而言，增量学习SVM在精确率（98% vs 95%）、召回率（97% vs 93%）和F1分数（97.5% vs 94%）上均取得了更好的结果。这表明增量学习能够更好地适应实时出现的网络威胁，尽管其计算需求可能相对更高。这突出了增量学习在需要快速响应动态变化环境的应用中的价值。在更具挑战性的少样本类增量学习（Few-Shot Class-Incremental Learning, FSCIL）场景中，传统的评估方式面临新的问题。通常在标准CIL中被视为性能上限的联合训练（joint training，即在所有新旧数据上一起训练）方法，在FSCIL中由于严重的类别不平衡可能导致的任务间类别分离困难，而不再是一个有意义的上限基准。为此，有研究提出了针对FSCIL的新的联合训练基准，该基准集成了不平衡学习技术，以弥合基础类别和增量类别之间的性能差距。同时，研究也指出现有FSCIL方法在实验设置和评估方面存在不一致性，呼吁更规范的比较协议。这表明，随着增量学习向更复杂和资源受限的场景发展，我们需要更细致和针对性的评估方法。对通用CIL算法的计算效率也存在一些反思。一项在ImageNet-1K数据集上进行的分析发现，一些被高度引用的CIL算法，在仅考虑旧数据不可用的约束下，其计算开销甚至超过了在每个任务阶段都对所有数据进行简单重训的成本。这一发现对那些主要以避免访问旧数据为目标的CIL算法的实用性提出了质疑，强调了在评估IL方法时综合考虑准确性和效率的重要性。在持续指令调优（Continual Instruction Tuning, CoIN）的背景下，对LwF、EWC等方法在一系列包含10个数据集、横跨8个任务（如ScienceQA, TextVQA等）的基准套件上的评估，也显示了不同方法在各项任务上的性能和后向迁移（BWT）表现各异。这进一步印证了增量学习算法的性能具有很强的任务依赖性。从这些比较分析中可以看出，不存在一种普适性的“最佳”增量学习方法。算法的选择高度依赖于具体的应用背景，包括数据特性（如样本量、类别平衡度）、可用的计算资源、对实时性的要求等。此外，领域内对于如何建立公平且有意义的性能上界和比较标准仍在积极探索中，尤其是在FSCIL这类复杂场景或需要考虑计算预算的情况下。这意味着除了平均准确率等传统指标外，还需要更全面的评估维度。一个值得注意的警示是，即使某些增量学习方法避免了存储旧数据，从而在理论上具有数据隐私优势，但如果训练好的模型本身能够“记住”并被用于重构敏感的训练数据，那么这种隐私保护的优势可能会被削弱。这对不依赖样本回放的增量学习方法的设计和评估提出了新的思考。&lt;/p>
&lt;h2 id="5-深度探索增量学习在光谱分析中的应用">5. 深度探索：增量学习在光谱分析中的应用
&lt;/h2>&lt;p>光谱分析技术通过测量物质与电磁辐射相互作用产生的特征光谱，来获取物质的组成、结构和状态等信息。由于其非侵入性、快速、信息丰富等优点，光谱分析在诸多领域都有广泛应用。随着数据采集技术的进步，光谱数据量急剧增长，且应用场景往往面临动态变化（如新物质、新状态的出现），这为增量学习提供了广阔的应用前景。&lt;/p>
&lt;h3 id="51-高光谱图像hsi分类">5.1. 高光谱图像（HSI）分类
&lt;/h3>&lt;p>高光谱图像（HSI）在数百甚至数千个连续的窄光谱波段上捕捉地物的详细光谱信息，从而能够对地表物质进行精细区分。这使得HSI在农业（如作物健康监测、病害检测）、林业（如树种识别、森林资源调查）、城市规划、环境监测和矿产勘探等领域具有重要应用价值。然而，HSI分析也面临诸多挑战，如数据维度高（“维度灾难”）、标记样本稀缺、不同地物光谱特征相似性以及地物尺度变化等问题。在动态的地球观测中，地表覆盖类型、农作物品种、矿物种类等可能随时间演化或出现新的类别，大气条件也可能发生变化。在这种情况下，如果每次出现新情况都从头训练HSI分类模型，将耗费大量的计算资源和时间。增量学习为HSI分类模型的持续更新提供了一种更高效的途径。已有多项研究将增量学习应用于HSI分类。例如，一篇题为《基于类增量学习和选择性状态空间模型的高光谱图像分类》的论文直接探讨了CIL在HSI中的应用。另一项工作《基于解析学习的类增量高光谱图像分类》也关注此方向。相关的研究，如GS2FIN-CIL方法，在Indian Pines、Pavia University和Salinas等经典HSI数据集上进行了实验，结果表明通过缓解灾难性遗忘，其CIL性能优于现有方法。高光谱数据的高维度和信息丰富性，使得从头训练模型的代价高昂。当新的地物类别（如新作物品种、土地覆盖变化）出现时，增量学习能够以较低成本更新模型。然而，HSI中不同类别地物间可能存在细微的光谱差异和较高的光谱相似性，这使得灾难性遗忘问题尤为突出。如果模型在学习新类别时忘记了区分旧类别的关键细微特征，其应用价值将大打折扣。因此，能够有效保持细粒度判别特征的增量学习方法对HSI分类至关重要。针对这一问题，有研究提出了如CREATE（Confusion-REduced AuTo-Encoder classifier）这样的方法，旨在解决基于原型的CIL方法中存在的表征能力不足和特征重叠/漂移问题，以减少类别间的混淆。&lt;/p>
&lt;h3 id="52-化学分析与化学计量学例如拉曼近红外光谱">5.2. 化学分析与化学计量学（例如拉曼/近红外光谱）
&lt;/h3>&lt;p>光谱技术（如拉曼光谱、近红外光谱NIR）结合化学计量学方法，在食品分析（如成分鉴定、产地溯源、掺假检测、化合物定量）、化学工业中的过程分析技术（PAT）等领域有广泛应用。在这些场景中，样品批次、原材料来源、生产工艺条件或环境因素可能会随时间变化，导致已建立的分析模型性能下降或不再适用，这种现象被称为模型“老化”或“失学习”。增量学习为解决这一问题提供了有效手段。一项研究将增量支持向量机（SVM）模型应用于拉曼光谱数据，用于测定酒精-水混合物中乙醇的浓度。实验结果表明，与传统化学计量学软件（如Unscrambler）相比，增量学习模型在计算时间上更优，在低浓度区域的准确性、精密度和灵敏度更高，并能实现用户友好的在线校准。该模型通过批量处理、并行执行和分布式数据处理减少了计算时间，同时能够容纳新数据并以较低的错误率提升准确性。另一项研究提出了基于增量子空间学习的化学计量学方法，用于基于近红外光谱的食品分析，例如鉴别植物油种类。该方法的优势包括模型创建速度快、可增量改进现有模型，以及能够在不同实验室或机构间共享和更新模型，而无需公开原始光谱数据，仅需少量新光谱样本即可增强模型的泛化性和适应性。在工业PAT和食品质量控制中，生产过程和原材料的微小变化较为常见。增量学习使分析模型能够适应这些变化（如新成分、不同批次的原材料、仪器漂移），无需进行昂贵且耗时的全面重新校准，同时避免遗忘历史知识。在化学计量学应用中，一个关键考量是使用“少量新光谱样本”更新模型的能力。这在实际分析中尤为重要，因为为每种可能的变化收集大规模、完整标注的数据集往往不切实际。增量学习有效利用现有模型，减少对新数据量的依赖，提升数据效率。其核心要求是模型能够基于少量新数据快速学习和调整，同时在不访问原始训练数据集的情况下保留旧知识。&lt;/p>
&lt;h3 id="53-天文光谱数据分析">5.3. 天文光谱数据分析
&lt;/h3>&lt;p>光谱学是天体物理学的基石，通过分析天体（如恒星、星系）发射或吸收的光谱，推断其化学组成、温度、密度、运动和距离等信息。随着斯隆数字巡天（SDSS）、盖亚（Gaia）以及即将推出的4MOST等大规模天文巡天的开展，天文学领域正以前所未有的速度生成海量且持续演变的光谱数据。这种数据特性为增量学习的应用提供了天然的契合点。增量学习/持续学习在天文光谱分析中的潜在应用包括：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>天体分类与发现&lt;/strong>：分类演变的恒星类型或新发现的暂现源（如超新星、潮汐撕裂事件）。随着观测数据的积累，新的天体类别或现有类型的子类别可能出现，要求模型增量学习这些新知识。&lt;/li>
&lt;li>&lt;strong>模型适应性&lt;/strong>：使模型适应新的观测仪器、变化的观测条件或数据处理流程的调整。&lt;/li>
&lt;li>&lt;strong>时序光谱分析&lt;/strong>：处理非平稳的时序光谱数据，例如监测变星的光谱变化或暂现源的演化。&lt;/li>
&lt;/ul>
&lt;p>一些研究已开始探索相关方向。一篇论文通过对特征空间进行谱分析（注：这里的“谱分析”指数学上的特征分解，而非直接分析天文光谱），研究了增量学习中的特征表示，提出了classAug方法以学习更具迁移性的表示，并发现具有较大特征值的谱分量较不易被遗忘。另一项工作FDINet提出将图像分解为高频和低频分量用于持续学习，低频信息用于增强跨任务泛化，高频信息用于保留类别特定细节，同时减少模型参数和内存使用。尽管FDINet主要针对图像，其频率分解方法可能启发处理具有不同结构尺度的光谱数据。更直接相关的研究包括使用生成对抗网络（GANs）从恒星光谱中解耦大气物理参数（如有效温度、表面重力、金属丰度），创建可有效提取这些参数的潜在空间，GANDALF是为此开发的一个工具。这种解耦和潜在表示的学习对增量学习至关重要；如果模型能学习光谱的底层物理属性而非仅记忆光谱模式，面对新观测或略有不同的光谱时，其适应性和抗遗忘能力可能更强。面对海量的天文数据，研究者还在探索构建“光谱基础模型”的可能性。这些模型旨在通过大规模预训练和持续学习不断吸收新的天文数据，增强对恒星光谱的模拟和理解，契合终身学习的愿景。例如，即将推出的4MOST望远镜预计将生成大量暂现源光谱，自动光谱分类对及时处理这些数据至关重要。相关研究正在比较DASH、NGSF和SNID等分类器在模拟4MOST数据的性能。&lt;/p>
&lt;h3 id="54-遥感影像分析">5.4. 遥感影像分析
&lt;/h3>&lt;p>遥感（RS）数据采集具有固有的动态性，新的卫星影像和训练数据集定期发布。地球表面的持续变化（如土地使用/覆盖变化、季节转换、城市扩张、自然灾害）以及传感器技术的进步，导致遥感数据呈现非独立同分布（non-IID）特性。在这种情况下，仅用新数据更新模型可能导致对旧场景知识的灾难性遗忘，而使用所有历史数据从头重新训练模型则会带来高昂的计算成本。因此，增量学习成为遥感影像分析中应对这种动态性的关键技术。目前，遥感中的持续学习方法大多聚焦于监督分类任务，这些任务需要为每个持续学习任务提供大量标注数据。标注数据获取的高成本限制了其在实际操作场景中的适用性。为克服对标注数据的依赖，持续自监督学习（CSSL）在遥感领域日益受到关注。CSSL旨在使模型能够从无标签数据流中按顺序学习新任务。一篇论文提出了一种新的遥感CSSL方法，旨在实现高学习可塑性同时保持记忆稳定性。其核心机制包括采用知识蒸馏策略并引入解耦机制：首先，将特征维度分为任务共享和任务特定部分；然后，强制任务共享特征的相关性以确保记忆稳定性，同时强制任务特定特征的去相关性以促进新特征学习。实验结果表明，该方法在任务增量和类增量场景中的平均准确率等指标上优于CaSSLe等广泛使用的CSSL框架。遥感影像分析的挑战不仅限于添加新物体类别，模型还需适应域迁移（例如，同一类别在不同时间、传感器或大气条件下的表现）。这凸显了域增量学习（Domain-IL）在遥感应用中的重要性。CSSL等方法的出现为处理海量无标签遥感数据和实现持续模型适应提供了有前景的解决方案。&lt;/p>
&lt;h3 id="表2增量学习在光谱分析领域的应用总结">表2：增量学习在光谱分析领域的应用总结
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>光谱领域&lt;/th>
&lt;th>具体应用&lt;/th>
&lt;th>采用的增量学习技术举例&lt;/th>
&lt;th>常用数据集 (如有提及)&lt;/th>
&lt;th>主要报告成果/效益&lt;/th>
&lt;th>主要解决的挑战&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>高光谱图像 (HSI)&lt;/td>
&lt;td>作物分类、土地覆盖分类、矿物识别&lt;/td>
&lt;td>类增量学习 (CIL), 解析学习与CIL结合, CREATE (基于自编码器的CIL)&lt;/td>
&lt;td>Indian Pines, Pavia University, Salinas&lt;/td>
&lt;td>提高分类准确率，缓解灾难性遗忘，适应新类别出现&lt;/td>
&lt;td>高维数据处理，标记样本稀缺，光谱相似性导致的混淆，地物尺度变化，新类别不断出现&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>化学分析 (拉曼/近红外)&lt;/td>
&lt;td>过程分析技术 (PAT)，食品纯度/成分分析&lt;/td>
&lt;td>增量SVM, 增量子空间学习&lt;/td>
&lt;td>酒精-水混合物 (拉曼), 植物油 (NIR)&lt;/td>
&lt;td>减少计算时间，提高低浓度检测精度，用户友好校准，无需原始数据即可更新模型，提高模型泛化性&lt;/td>
&lt;td>模型“老化”/失学习，适应新样品/批次/工艺条件，数据共享隐私&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>天文光谱 (恒星)&lt;/td>
&lt;td>恒星参数化 (温度、重力、丰度)，恒星分类&lt;/td>
&lt;td>GANs用于参数解耦, 特征空间谱分析 (classAug), 光谱仿真基础模型&lt;/td>
&lt;td>Gaia RVS, APOGEE, LAMOST, Gaia-ESO, GALAH&lt;/td>
&lt;td>实现物理参数的有效提取，学习可迁移的特征表示，构建可随数据增长持续改进的光谱仿真模型&lt;/td>
&lt;td>海量持续增长的数据，新类型天体发现，模型适应新仪器/条件，从复杂光谱中解耦物理信息&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>天文光谱 (星系/暂现源)&lt;/td>
&lt;td>暂现源分类 (如超新星)，星系演化研究&lt;/td>
&lt;td>自动化光谱分类器比较 (DASH, NGSF, SNID)&lt;/td>
&lt;td>模拟4MOST光谱数据&lt;/td>
&lt;td>提高大规模巡天项目中暂现源的实时分类效率和纯度&lt;/td>
&lt;td>应对即将到来的海量暂现源光谱数据，自动化分类流程，区分不同子类和奇异天体&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>遥感影像分析&lt;/td>
&lt;td>土地利用/覆盖变化监测，地物分类&lt;/td>
&lt;td>持续自监督学习 (CSSL) 与知识蒸馏、特征解耦结合&lt;/td>
&lt;td>特定遥感数据集 (未详述具体名称)&lt;/td>
&lt;td>在无标签数据流上实现持续学习，提高学习可塑性，优于现有CSSL框架 (如CaSSLe)&lt;/td>
&lt;td>动态数据采集，非IID数据分布 (地表变化、传感器差异)，标签数据获取成本高，灾难性遗忘&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>此表汇总了增量学习在不同光谱分析子领域的应用情况，突出了所采用的技术、面临的挑战以及取得的进展。它清晰地展示了增量学习如何帮助这些领域应对动态数据和不断演化的知识需求，从而为用户提供了一个关于光谱分析中增量学习应用的结构化概览。&lt;/p>
&lt;h2 id="6-评估增量学习系统指标与协议">6. 评估增量学习系统：指标与协议
&lt;/h2>&lt;p>对增量学习系统进行全面且公平的评估是推动该领域发展的关键。由于增量学习的特殊性，其评估不能简单沿用传统机器学习的指标和方法，而需要一套能够反映其持续学习能力的评价体系。&lt;/p>
&lt;h3 id="61-关键性能指标">6.1. 关键性能指标
&lt;/h3>&lt;p>研究者们提出了一系列专门用于衡量增量学习模型性能的指标：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>平均准确率（Average Accuracy, ACC）：&lt;/strong> 这是衡量模型在完成所有任务序列学习后，在所有已学习任务上的平均表现。一个较高的平均准确率表明模型在学习新知识的同时，也较好地保留了旧知识。&lt;/li>
&lt;li>&lt;strong>遗忘量（Forgetting Measure, FM）/ 后向迁移（Backward Transfer, BWT）：&lt;/strong> 这两个指标都用于量化模型在学习新任务后对旧任务知识的遗忘程度。BWT 通常定义为学习新任务对旧任务性能的影响，正值表示促进（罕见），负值表示遗忘。FM 则更直接地衡量模型在学习完整个序列后，相比于刚学习完某个旧任务时的最佳性能，在该旧任务上性能下降了多少。理想的增量学习模型应具有较低的遗忘量或接近于零的负向BWT。&lt;/li>
&lt;li>&lt;strong>前向迁移（Forward Transfer, FWT）：&lt;/strong> 衡量模型从已学习任务中获得的知识对其学习未来新任务的积极影响。正的FWT表明模型能够利用旧知识加速或改进新任务的学习。&lt;/li>
&lt;li>&lt;strong>内存开销（Memory Overhead）：&lt;/strong> 指增量学习方法除了模型参数本身之外，额外需要的存储空间，例如用于存储记忆样本、生成模型参数或与任务相关的重要信息等。这对于资源受限的应用场景尤为重要。&lt;/li>
&lt;li>&lt;strong>计算成本/训练测试时间（Computational Cost / Train/Test Time）：&lt;/strong> 评估增量学习过程的效率，包括模型在每个增量阶段的训练时间以及在所有已学习任务上的测试时间。&lt;/li>
&lt;li>&lt;strong>可塑性/稳定性平衡的度量：&lt;/strong> 虽然没有单一的直接度量，但通常通过综合ACC、BWT、FWT等指标来间接评估模型在学习新知识（可塑性）和保留旧知识（稳定性）之间的平衡能力。一些研究也尝试定义新的指标，如“顽固性”（intransigence），用于衡量模型适应新任务的能力，这与可塑性相关。&lt;/li>
&lt;li>&lt;strong>其他迁移性评估指标：&lt;/strong> 如LEEP score、LogME、OTCE等，用于更细致地评估模型在任务间的知识迁移能力。&lt;/li>
&lt;/ul>
&lt;p>仅仅依赖最终的平均准确率不足以全面评价一个增量学习系统的好坏。必须结合上述多个维度的指标，综合考量其在准确性、知识保持、知识迁移、资源消耗和计算效率等方面的表现。评估指标的选择本身也可能对不同类型的增量学习策略产生偏好。例如，那些通过扩展模型结构来学习新任务的方法可能在准确率上表现优异，但在内存开销指标上则处于劣势。因此，在进行评估时，必须明确评估目标并选择合适的指标组合。&lt;/p>
&lt;h3 id="62-标准基准和数据集">6.2. 标准基准和数据集
&lt;/h3>&lt;p>为了方便不同增量学习算法之间的比较，社区建立了一些常用的基准数据集和实验设置。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>图像分类领域：&lt;/strong> 这是增量学习研究中使用最为广泛的领域。常用的数据集包括：
&lt;ul>
&lt;li>MNIST 及其变体，如 Permuted MNIST (PMNIST)，后者通过对MNIST像素进行固定置换来构造一系列任务。&lt;/li>
&lt;li>CIFAR-10 和 CIFAR-100，通常通过将类别划分为多个批次来模拟增量学习过程。&lt;/li>
&lt;li>ImageNet 的不同子集，如 ImageNet-100 (选取100类)、ImageNet-1000 (完整的ILSVRC 2012 数据集)。&lt;/li>
&lt;li>Tiny-ImageNet，一个ImageNet的子集，包含200个类别，图像尺寸较小，常用于快速实验。&lt;/li>
&lt;li>Specific datasets for specific domains:
&lt;ul>
&lt;li>CORe50：一个专为持续物体识别设计的视频数据集，包含不同光照、姿态和遮挡条件下的物体。&lt;/li>
&lt;li>CI-CIDS 2017：用于网络入侵检测系统增量学习研究的数据集。&lt;/li>
&lt;li>高光谱图像数据集：如 Indian Pines, Pavia University, Salinas 等，常用于评估HSI分类中的增量学习算法。&lt;/li>
&lt;li>CoIN 基准套件：包含10个精心设计的数据集，横跨8种任务，用于评估持续指令调优的性能。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>尽管标准的图像分类基准在增量学习研究中占据主导地位，但这些基准往往简化了现实世界的复杂性。例如，它们可能不包含类别不平衡、少样本学习、模糊的任务边界或显著的领域漂移等问题。因此，领域内也越来越呼吁开发和使用更能反映真实世界挑战的基准数据集。&lt;/p>
&lt;h3 id="63-常见实验设置协议">6.3. 常见实验设置（协议）
&lt;/h3>&lt;p>增量学习的实验设置（或称协议）定义了任务如何呈现给模型，以及关于任务边界和任务身份的假设，这直接影响了问题的难度和适用策略。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>任务增量学习（Task-Incremental Learning, Task-IL）：&lt;/strong> 在这种设置下，模型按顺序学习一系列不同的任务。关键在于，在训练和测试阶段，模型都会被明确告知当前样本所属的任务ID。这使得模型可以为每个任务使用独立的输出头或参数模块。&lt;/li>
&lt;li>&lt;strong>领域增量学习（Domain-Incremental Learning, Domain-IL）：&lt;/strong> 模型学习的是同一个底层任务（例如，识别同一组物体类别），但是输入数据的分布会随时间发生变化。例如，模型可能先在一种风格的图像上训练，然后遇到不同光照条件或背景风格的图像。任务边界可能是模糊的，模型通常不会接收到明确的任务ID。&lt;/li>
&lt;li>&lt;strong>类增量学习（Class-Incremental Learning, Class-IL）：&lt;/strong> 这是最具挑战性的设置之一。模型需要按顺序学习新的类别。初始阶段学习一部分类别，后续阶段不断引入新的类别。模型的目标是能够区分所有迄今为止学习过的类别，并且通常在测试时不提供任务ID。这意味着模型需要一个统一的分类器来处理所有见过的类别。&lt;/li>
&lt;/ul>
&lt;p>实验协议的选择对增量学习问题的难度和有效策略的类型有显著影响，不同协议下的结果通常不具有直接可比性。例如，一个在Task-IL设置下表现良好的方法，由于可以利用任务ID来切换模型组件，可能在更难的Class-IL设置下（需要从混合的类别中区分）表现不佳。因此，研究界也在推动更标准化和公平的评估协议，尤其是在FSCIL等子领域或在比较不同内存预算下的方法时，以确保方法之间的比较更具意义和可靠性。&lt;/p>
&lt;h2 id="7-增量学习与其他相关学习范式的比较">7. 增量学习与其他相关学习范式的比较
&lt;/h2>&lt;p>为了更清晰地理解增量学习的特点和定位，有必要将其与一些相关的机器学习范式进行比较，如在线学习、迁移学习和元学习。&lt;/p>
&lt;h3 id="71-增量学习-vs-在线学习">7.1. 增量学习 vs. 在线学习
&lt;/h3>&lt;p>在线学习（Online Learning）和增量学习都涉及按顺序处理数据。在线学习的核心特征是模型一次处理一个或一小批数据样本，并根据每个样本即时更新。这种方式使得模型能够适应数据流的变化。然而，两者在目标和假设上存在关键区别。传统的在线学习更侧重于模型对当前数据分布的快速适应，并不一定强调对过去所有知识的长期保留，尤其是在数据分布非平稳的情况下，可能会“忘记”旧的模式以适应新的模式。而增量学习（或持续学习）的核心目标恰恰是克服灾难性遗忘，在适应新数据的同时积累并保持历史知识，特别是在面对非平稳数据流时。因此，可以将增量学习视为在线学习的一个特定分支或高级形式，它对知识的保持和在非平稳环境下的鲁棒性提出了更高的要求。一些文献有时会将两者视为相近甚至等同的概念，但强调增量学习需具备在不访问旧数据的情况下保留旧知识的能力，而标准在线学习若不经特殊设计，则可能对连续的数据流非常敏感。&lt;/p>
&lt;h3 id="72-增量学习-vs-迁移学习">7.2. 增量学习 vs. 迁移学习
&lt;/h3>&lt;p>迁移学习（Transfer Learning）旨在将在一个或多个源任务（source task）或源领域（source domain）上学到的知识，应用于一个不同但相关的目标任务（target task）或目标领域（target domain），以期提高在目标任务上的学习效率或性能，特别是在目标任务数据稀疏的情况下。迁移学习通常关注的是一次性的知识迁移过程。增量学习则是一个持续的、序列化的学习过程，涉及多个（可能是无限的）任务。在增量学习中，知识迁移是一个重要的组成部分，体现为前向迁移（利用旧任务知识帮助新任务学习）和后向迁移（学习新任务反过来巩固或改进旧任务性能，尽管后者更罕见且难以实现）。与迁移学习的单向或少数几次迁移不同，增量学习强调知识的不断积累、整合和适应，贯穿整个学习生命周期。可以说，迁移学习是增量学习实现其目标（如提高学习效率、促进知识泛化）的一种重要机制，但增量学习的范畴更广，它关注的是整个动态学习过程中的知识演化和保持。&lt;/p>
&lt;h3 id="73-增量学习-vs-元学习">7.3. 增量学习 vs. 元学习
&lt;/h3>&lt;p>元学习（Meta-Learning），常被称为“学会学习”（learning to learn），其目标是让模型通过从多个相关的学习任务（元训练集）中提取经验，来学习一种通用的学习策略或获取先验知识，从而能够在面对新的、未见过的任务（元测试集）时，仅用少量样本就能快速学习和适应。元学习优化的是学习算法本身。增量学习的核心目标是在一系列连续的任务中保持和扩展知识，而不是优化学习新任务的速度（尽管这也是期望的副产品）。元学习可以被视为一种用于改进增量学习算法的工具或方法论。例如，可以通过元学习来找到一个对持续学习特别有效的模型初始化参数、一个能够更好平衡稳定性和可塑性的学习率调整策略，或者一个能够快速适应新任务同时减少遗忘的更新规则。在这种“元持续学习”（meta-continual learning）或“学会持续学习”的框架下，元学习的每个“эпизод”（episode）都变成了一个持续学习的过程。总结来说，这几种学习范式虽然都处理与数据或任务变化相关的问题，但其核心目标、假设和方法论各有侧重：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>在线学习：&lt;/strong> 关注实时数据流处理和快速适应。&lt;/li>
&lt;li>&lt;strong>迁移学习：&lt;/strong> 关注知识从源到目标的单次或少数几次迁移。&lt;/li>
&lt;li>&lt;strong>元学习：&lt;/strong> 关注学习普适的学习策略以实现快速学习新任务。&lt;/li>
&lt;li>&lt;strong>增量学习：&lt;/strong> 关注在连续任务序列中长期积累和保持知识，克服灾难性遗忘。&lt;/li>
&lt;/ul>
&lt;p>它们之间并非完全独立，而是存在交叉和融合的可能，共同推动着人工智能向更智能、更自适应的方向发展。&lt;/p>
&lt;h2 id="8-增量学习领域的开创性与前沿研究解析">8. 增量学习领域的开创性与前沿研究解析
&lt;/h2>&lt;p>增量学习领域的研究历经多年发展，涌现出一批具有里程碑意义的开创性工作，同时也伴随着持续的技术创新和新方法的提出。&lt;/p>
&lt;h3 id="81-奠基性论文及其影响">8.1. 奠基性论文及其影响
&lt;/h3>&lt;p>以下三篇论文常被认为是增量学习领域的经典之作，它们提出的方法为后续研究奠定了重要基础：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>弹性权重巩固 (Elastic Weight Consolidation, EWC) (Kirkpatrick et al., PNAS 2017):&lt;/strong> EWC 是一种基于正则化的方法，其核心思想是减缓对先前任务重要的权重的学习速度。它通过费雪信息矩阵（Fisher Information Matrix）来估计每个网络权重对于已学习任务的重要性，并在学习新任务时，对这些重要权重的改变施加二次惩罚。&lt;strong>影响:&lt;/strong> EWC 是最早有效解决深度神经网络灾难性遗忘问题的开创性工作之一。它确立了通过识别和保护重要参数来实现知识保留的原则，启发了后续一系列基于参数重要性度量的正则化方法。&lt;/li>
&lt;li>&lt;strong>无遗忘学习 (Learning without Forgetting, LwF) (Li &amp;amp; Hoiem, ECCV 2016):&lt;/strong> LwF 采用知识蒸馏技术来保留旧任务的性能。在训练新任务时，它使用旧模型在新数据（或部分旧数据）上产生的输出（软标签）作为新模型的附加学习目标，从而使得新模型在保持对新任务学习能力的同时，其行为（在旧任务相关方面）与旧模型保持一致。LwF 的一个显著优点是不需要存储旧任务的原始训练数据。&lt;strong>影响:&lt;/strong> LwF 提出了一种有效的、不依赖旧数据的知识保留方法（特指不依赖旧任务的原始输入数据进行回放），迅速成为增量学习领域一个广泛应用的基线方法，并常被用作更复杂混合策略的一个组成部分。&lt;/li>
&lt;li>&lt;strong>iCaRL (Incremental Classifier and Representation Learning) (Rebuffi et al., CVPR 2017):&lt;/strong> iCaRL 是一种混合方法，它巧妙地将知识蒸馏与基于样本的回放策略相结合。它会存储少量来自旧类别的代表性样本（exemplars），并在训练新任务时与新数据一同使用。此外，iCaRL 采用最近平均样本（nearest-mean-of-exemplars）分类器进行预测。&lt;strong>影响:&lt;/strong> iCaRL 充分展示了混合策略在应对类增量学习挑战方面的潜力，并为视觉任务中的类增量学习提供了一个强有力的基准。它还强调了在增量学习过程中，同时学习有效的数据表示和分类器的重要性。&lt;/li>
&lt;/ul>
&lt;p>这些奠基性的工作不仅提出了具体的算法，更重要的是，它们揭示了解决灾难性遗忘问题的不同途径和核心思想，为增量学习领域后续的繁荣发展指明了方向。&lt;/p>
&lt;h3 id="82-近期进展与新颖方法回顾">8.2. 近期进展与新颖方法回顾
&lt;/h3>&lt;p>在上述奠基性工作的基础上，增量学习领域的研究持续活跃，不断涌现出新的思路和更优的解决方案，以应对更复杂的场景和挑战。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>生成式回放的演进：&lt;/strong> 为了克服样本回放中数据隐私和存储限制的问题，基于生成模型（如GANs, VAEs）的伪样本回放方法持续受到关注。例如，在联邦类增量学习（FCIL）中，FedGTG 利用全局生成器来合成旧类数据，辅助客户端学习。尽管生成高质量且多样性的样本仍然是一个挑战，但对无数据回放（data-free replay）的追求反映了实际应用中对数据效率和隐私保护的强烈需求。&lt;/li>
&lt;li>&lt;strong>特征空间分析与增强：&lt;/strong> 研究者开始更深入地探究特征表示在增量学习中的作用。例如，classAug 方法通过对特征表示进行谱分解，识别并增强那些更具迁移性的特征分量，发现具有较大特征值的谱分量更不容易被遗忘。FDINet 则通过将图像分解为高频和低频分量，分别用于保留类别特有细节和增强跨任务泛化，从而在持续学习中取得良好效果，并实现了模型轻量化。这些工作表明，从理解和优化特征表示的角度出发，可以设计出更具针对性的正则化或数据增强策略，而不仅仅是简单地惩罚权重变化。&lt;/li>
&lt;li>&lt;strong>高级回放策略：&lt;/strong> 简单的样本回放机制也在不断被改进。例如，Rainbow Memory 提出存储多样化的样本以提高回放效率；PASS (Prototype Augmentation and Self-Supervision) 和 RMM (Reinforced Memory Management) 等方法则探索了更复杂的记忆样本管理和增强技术，以最大化所存储样本的效用。&lt;/li>
&lt;li>&lt;strong>预训练模型在增量学习中的应用：&lt;/strong> 近年来，一个非常显著的趋势是利用大规模预训练模型（如Vision Transformers, CLIP等）进行持续学习。这些预训练模型通常具有强大的泛化能力和高质量的特征表示，为增量学习提供了一个良好的起点，有望减轻灾难性遗忘的程度并促进知识迁移。如何有效地对这些大型模型进行持续微调，同时保持其原有能力，是当前的研究热点。&lt;/li>
&lt;li>&lt;strong>对效率和资源限制的关注：&lt;/strong> 随着增量学习方法走向实际应用，对计算效率和内存占用的考量日益重要。FDINet 明确以轻量级架构和在边缘设备上的高效运行为目标。同时，一些研究对现有CIL算法的高计算成本提出了批评，这推动了对更具资源意识的解决方案的探索。&lt;/li>
&lt;li>&lt;strong>超越分类任务：&lt;/strong> 增量学习的应用正在从传统的图像分类扩展到更广泛的任务类型。例如，在生成模型领域出现了Hyper-LifelongGAN，在语义分割领域有PLOP 等方法。更有研究者提出，增量学习的目标不应局限于分类，而应更多地考虑密度估计或生成式目标，这可能更有利于知识的积累和任务识别。&lt;/li>
&lt;/ul>
&lt;p>这些近期进展显示，增量学习领域正在从主要关注在受控环境中缓解灾难性遗忘，逐渐转向构建能够在更复杂、更动态、资源更受限的真实场景中持续学习和适应的智能系统。&lt;/p>
&lt;h2 id="9-未来展望挑战趋势与通往真正终身学习之路">9. 未来展望：挑战、趋势与通往真正终身学习之路
&lt;/h2>&lt;p>增量学习作为实现通用人工智能的关键环节之一，虽然取得了显著进展，但距离实现真正意义上的人类水平的终身学习仍有很长的路要走。未来，该领域将面临诸多挑战，同时也孕育着重要的发展机遇。&lt;/p>
&lt;h3 id="91-应对当前局限性">9.1. 应对当前局限性
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>可扩展性与效率：&lt;/strong> 目前许多增量学习方法主要在相对较小的数据集或有限的任务序列上进行测试。如何将这些方法扩展到包含数千个任务的场景，或者应用于参数量巨大的超大规模模型，仍然是一个巨大的挑战。计算成本是制约增量学习实际应用的一个主要瓶颈。真正的终身学习系统需要在极长的时间跨度内持续运行，并处理海量多样化的数据，这对算法的效率提出了极高要求。&lt;/li>
&lt;li>&lt;strong>真实世界鲁棒性：&lt;/strong> 基准数据集上的性能与在充满噪声、类别不平衡、任务边界模糊的真实世界应用中的表现之间，往往存在显著差距。未来的研究需要更加关注如何在这些“混乱”的真实数据流中保持学习的稳定性和有效性。&lt;/li>
&lt;li>&lt;strong>任务关系与知识迁移：&lt;/strong> 仅仅关注减轻灾难性遗忘是不够的，更理想的增量学习系统应该能够智能地利用任务之间的内在联系，实现显著的正向和反向知识迁移，从而“越学越好”。目前的方法在平衡遗忘与迁移方面仍有较大提升空间，有时甚至会面临两者之间的权衡。&lt;/li>
&lt;li>&lt;strong>理论理解的深化：&lt;/strong> 尽管经验性的成功不断涌现，但对灾难性遗忘发生的深层机制以及不同增量学习方法为何有效的理论理解仍有待加强。更坚实的理论基础将有助于指导设计出更具原则性、更可靠的算法。&lt;/li>
&lt;/ul>
&lt;h3 id="92-新兴研究方向">9.2. 新兴研究方向
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>大规模预训练模型（LPTMs）的持续学习：&lt;/strong> 如何有效地对大型预训练模型（如Transformer架构的语言模型和视觉模型，CLIP等多模态模型）进行持续学习，是一个非常活跃且重要的研究方向。参数高效微调（Parameter-Efficient Fine-Tuning, PEFT）技术，如LoRA，正在被探索用于持续学习场景，以期在保持LPTMs强大能力的同时，减少更新成本并缓解遗忘，特别是在需要保持特定对齐（如LLM的安全性）的情况下。&lt;/li>
&lt;li>&lt;strong>无回放的持续学习（Rehearsal-free CL）：&lt;/strong> 出于对内存消耗和数据隐私的考虑，不依赖存储旧样本或生成伪样本的持续学习方法持续受到关注。然而，如何确保在完全不接触旧数据的情况下有效抵抗遗忘，以及如何处理生成式方法中伪样本与真实数据的一致性问题，仍是主要挑战。&lt;/li>
&lt;li>&lt;strong>生成式与密度估计目标：&lt;/strong> 将增量学习的目标从传统的判别式分类任务，扩展到包含生成式建模或概率密度估计，被认为可能为缓解灾难性遗忘和进行任务识别提供新的途径。学习数据的内在分布可能比仅仅学习分类边界更有利于知识的长期保持和泛化。&lt;/li>
&lt;li>&lt;strong>持续自监督学习（CSSL）：&lt;/strong> 从未标记的数据流中进行持续学习，对于像遥感这样拥有海量无标签数据的领域至关重要。CSSL能够显著降低对昂贵人工标注的依赖，使持续学习技术更易于在实际中大规模部署。&lt;/li>
&lt;li>&lt;strong>增量学习中的公平性、隐私与安全：&lt;/strong> 随着增量学习系统在现实世界中的部署日益增多，确保其决策的公平性、在学习过程中（尤其是在使用回放或生成模型时）保护用户数据隐私、以及抵御潜在的对抗性攻击等问题，将成为不可忽视的关键考量。&lt;/li>
&lt;li>&lt;strong>与开放集识别和主动学习的结合：&lt;/strong> 现实世界的系统经常会遇到训练阶段未曾见过的新类别（开放集问题），并且可能从主动选择信息量最大的样本进行学习中受益。将这些能力与增量学习框架相结合，是提升系统适应性和学习效率的一个有前景的方向。&lt;/li>
&lt;/ul>
&lt;h3 id="93-总结性思考通往真正终身学习的轨迹">9.3. 总结性思考：通往真正终身学习的轨迹
&lt;/h3>&lt;p>增量学习（或持续学习、终身学习）无疑是当前人工智能领域一个充满活力且至关重要的研究热点，并将在未来很长一段时间内持续受到关注。其最终目标是构建能够像人类一样持续学习和适应的智能体，无缝地整合新知识，同时保留、提炼并应用已有的经验。当前的研究趋势表明，增量学习正在从主要关注在受控环境下解决分类任务中的灾难性遗忘问题，逐渐演进到应对更广泛的挑战，包括构建能够在复杂、动态、资源受限的真实世界应用中高效学习和鲁棒适应的系统。与大规模预训练模型和自监督学习的深度融合，以及对更多样化任务类型和学习目标的探索（如生成任务、密度估计），标志着该领域的显著进步。研究的重心也正从单纯地“不忘记”转向如何实现有效的正向知识迁移，从而让系统能够“越学越好”。尽管通往真正意义上的人类水平的终身学习之路依然漫长且充满挑战，但当前的研究动态和技术突破预示着一个充满希望和潜力的未来。通过不断克服现有局限，探索新的理论和方法，增量学习必将在推动人工智能向更高级、更智能、更具适应性的方向发展过程中扮演核心角色。&lt;/p>
&lt;h2 id="结论">结论
&lt;/h2>&lt;p>增量学习作为机器学习领域应对动态环境和持续知识获取挑战的关键技术，已经取得了长足的进步。从其核心的稳定性-可塑性困境和灾难性遗忘问题出发，研究者们发展出基于回放、正则化、参数隔离等多种方法论，并通过PyCIL、Avalanche等开源框架推动了研究的标准化和可复现性。在应用层面，增量学习已在图像识别、自然语言处理、机器人技术、网络安全等多个领域展现出应用潜力。尤其值得关注的是其在光谱分析领域的独特价值：无论是高光谱图像分类中应对地物类型的动态变化，化学计量学中适应过程和样品的变化，还是天文光谱分析中处理海量持续增长的观测数据，以及遥感影像分析中适应地表和传感器的演变，增量学习都提供了有效的解决方案，帮助模型在保留旧知识的同时学习新信息。评估增量学习系统需要综合考量准确率、遗忘程度、知识迁移能力、内存开销和计算效率等多个指标，并采用合适的实验协议（任务增量、领域增量或类增量）。将其与在线学习、迁移学习和元学习等相关范式进行比较，有助于更清晰地界定其独特性和适用范围。尽管面临可扩展性、真实世界鲁棒性、深度理论理解等挑战，但新兴的研究方向，如结合大规模预训练模型、发展无回放策略、探索生成式和自监督持续学习、以及关注公平性与隐私等，正引领着增量学习向更深层次、更广阔的应用前景迈进。未来的研究将更加注重构建不仅能够“不忘记”，更能“学得更好”、更高效、更适应复杂真实世界的终身学习智能体。对光谱分析等特定领域的持续深耕，结合增量学习的最新进展，有望催生更多创新性的应用成果。&lt;/p></description></item><item><title>RLHF</title><link>https://www.zata.cc/p/rlhf/</link><pubDate>Wed, 12 Mar 2025 10:02:16 +0800</pubDate><guid>https://www.zata.cc/p/rlhf/</guid><description>&lt;img src="https://www.zata.cc/p/rlhf/images/index/index.png" alt="Featured image of post RLHF" />&lt;h3 id="rlhfreinforcement-learning-from-human-feedback的详细解释">RLHF（Reinforcement Learning from Human Feedback）的详细解释
&lt;/h3>&lt;p>&lt;strong>RLHF&lt;/strong>（基于人类反馈的强化学习，Reinforcement Learning from Human Feedback）是一种用于对齐大语言模型（LLM）与人类价值观和偏好的训练方法。它通过结合强化学习（Reinforcement Learning, RL）和人类反馈，解决传统监督学习难以直接优化的主观目标问题（如生成“有用、诚实、无害”的输出）。以下是对RLHF的详细解释，包括其背景、原理、步骤、优势与挑战。&lt;/p>
&lt;hr>
&lt;h4 id="1-背景与动机">1. &lt;strong>背景与动机&lt;/strong>
&lt;/h4>&lt;p>大语言模型通常通过预训练（基于无标注文本预测下一个词元）和监督微调（基于标注数据优化特定任务）构建。然而，互联网上的训练数据可能包含低质量、有偏见或有害的内容，导致模型输出不符合人类期望。例如，模型可能生成虚假信息、有害建议或不恰当的语气。在实际应用中，用户希望模型不仅能完成任务，还要符合人类的价值观和道德标准，如“3H对齐标准”（Helpfulness 有用性、Honesty 诚实性、Harmlessness 无害性）。&lt;/p>
&lt;p>传统的监督学习依赖于明确的损失函数（如交叉熵损失），但“有用性”或“无害性”这样的目标难以形式化定义，无法直接通过标注数据优化。强化学习则通过奖励机制优化模型行为，适合处理这类复杂目标。RLHF将人类反馈引入强化学习，作为奖励信号的来源，从而指导模型生成更符合人类预期的输出。&lt;/p>
&lt;hr>
&lt;h4 id="2-rlhf的基本原理">2. &lt;strong>RLHF的基本原理&lt;/strong>
&lt;/h4>&lt;p>RLHF的核心思想是：&lt;strong>通过人类评估模型输出质量，构建一个奖励模型（Reward Model），然后利用强化学习算法优化语言模型，使其最大化预期奖励。&lt;/strong> 换句话说，它将人类的主观判断转化为可量化的信号，用于改进模型行为。&lt;/p>
&lt;p>在强化学习框架中：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>智能体（Agent）&lt;/strong>：大语言模型。&lt;/li>
&lt;li>&lt;strong>动作（Action）&lt;/strong>：生成特定的文本输出。&lt;/li>
&lt;li>&lt;strong>环境（Environment）&lt;/strong>：人类的反馈机制。&lt;/li>
&lt;li>&lt;strong>奖励（Reward）&lt;/strong>：基于人类偏好计算的数值，用于衡量输出的质量。&lt;/li>
&lt;/ul>
&lt;p>RLHF的关键创新在于，奖励不是由预定义的规则生成，而是通过人类反馈间接学习。&lt;/p>
&lt;hr>
&lt;h4 id="3-rlhf的工作流程">3. &lt;strong>RLHF的工作流程&lt;/strong>
&lt;/h4>&lt;p>RLHF通常分为三个主要步骤：&lt;/p>
&lt;h5 id="步骤1收集人类反馈数据">&lt;strong>步骤1：收集人类反馈数据&lt;/strong>
&lt;/h5>&lt;ul>
&lt;li>&lt;strong>过程&lt;/strong>：让人类评估者对模型生成的多个输出进行评分或排序。例如，给定一个问题，模型生成两个回答，人类评估者选择哪个更好，或者按质量打分（如1-5分）。&lt;/li>
&lt;li>&lt;strong>数据形式&lt;/strong>：通常是成对比较（Pairwise Comparison），如“输出A优于输出B”，或者直接评分。&lt;/li>
&lt;li>&lt;strong>目的&lt;/strong>：通过人类反馈构建一个偏好数据集，反映人类对输出的主观判断。&lt;/li>
&lt;/ul>
&lt;h5 id="步骤2训练奖励模型reward-model">&lt;strong>步骤2：训练奖励模型（Reward Model）&lt;/strong>
&lt;/h5>&lt;ul>
&lt;li>&lt;strong>目标&lt;/strong>：基于人类反馈数据训练一个独立的神经网络（奖励模型），预测某段输出的“奖励分数”。&lt;/li>
&lt;li>&lt;strong>方法&lt;/strong>：
&lt;ol>
&lt;li>使用监督学习，将人类偏好数据转化为奖励模型的训练目标。例如，若人类认为“输出A &amp;gt; 输出B”，奖励模型学习给A更高的分数。&lt;/li>
&lt;li>常见损失函数是基于Bradley-Terry模型的偏好损失，用于拟合人类排序数据。&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>&lt;strong>输入和输出&lt;/strong>：奖励模型接收语言模型的输出（文本），输出一个标量值，表示该输出的质量。&lt;/li>
&lt;li>&lt;strong>结果&lt;/strong>：奖励模型作为一个“代理”，替代人类直接评估，为后续优化提供连续的奖励信号。&lt;/li>
&lt;/ul>
&lt;h5 id="步骤3强化学习优化语言模型">&lt;strong>步骤3：强化学习优化语言模型&lt;/strong>
&lt;/h5>&lt;ul>
&lt;li>&lt;strong>方法&lt;/strong>：使用强化学习算法（如PPO，Proximal Policy Optimization）调整语言模型的参数，使其生成最大化奖励模型预测分数的输出。&lt;/li>
&lt;li>&lt;strong>过程&lt;/strong>：
&lt;ol>
&lt;li>语言模型生成文本（动作）。&lt;/li>
&lt;li>奖励模型评估该文本并给出分数（奖励）。&lt;/li>
&lt;li>强化学习算法根据奖励更新模型策略，倾向于生成高奖励的输出。&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>&lt;strong>约束&lt;/strong>：为了避免模型偏离原始语言能力，通常会加入KL散度惩罚（KL Divergence Penalty），确保优化后的模型不会过于偏离预训练分布。&lt;/li>
&lt;li>&lt;strong>结果&lt;/strong>：模型学会生成更符合人类偏好的输出，如更友好、准确或安全的回答。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h4 id="4-rlhf的实际案例">4. &lt;strong>RLHF的实际案例&lt;/strong>
&lt;/h4>&lt;p>以OpenAI的ChatGPT为例：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>初始模型&lt;/strong>：GPT-3通过预训练和监督微调生成对话，但可能包含不准确或有害内容。&lt;/li>
&lt;li>&lt;strong>RLHF应用&lt;/strong>：
&lt;ol>
&lt;li>收集人类对话数据，评估者对模型输出进行偏好排序。&lt;/li>
&lt;li>训练奖励模型，预测哪些回答更“有用、诚实、无害”。&lt;/li>
&lt;li>用PPO算法优化GPT-3，使其输出更符合人类期望。&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>&lt;strong>效果&lt;/strong>：ChatGPT相比原始GPT-3更加安全、友好，且能更好地遵循指令。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h4 id="5-rlhf的优势">5. &lt;strong>RLHF的优势&lt;/strong>
&lt;/h4>&lt;ol>
&lt;li>&lt;strong>灵活性&lt;/strong>：能优化难以形式化的目标（如主观质量），无需明确的标注数据。&lt;/li>
&lt;li>&lt;strong>对齐性&lt;/strong>：有效将模型行为与人类价值观对齐，减少偏见和有害输出。&lt;/li>
&lt;li>&lt;strong>通用性&lt;/strong>：适用于多种任务，如对话生成、问答等。&lt;/li>
&lt;li>&lt;strong>动态调整&lt;/strong>：通过持续收集反馈，可以逐步改进模型。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h4 id="6-rlhf的挑战与局限">6. &lt;strong>RLHF的挑战与局限&lt;/strong>
&lt;/h4>&lt;ol>
&lt;li>&lt;strong>复杂性&lt;/strong>：训练奖励模型和强化学习过程计算成本高，优化不稳定。&lt;/li>
&lt;li>&lt;strong>人类反馈质量&lt;/strong>：依赖评估者的一致性和专业性，反馈噪声可能影响奖励模型。&lt;/li>
&lt;li>&lt;strong>过优化风险&lt;/strong>：模型可能过于迎合奖励模型，导致失去多样性或生成“讨好式”输出。&lt;/li>
&lt;li>&lt;strong>可解释性&lt;/strong>：奖励模型的黑盒性质使得对齐过程难以完全理解。&lt;/li>
&lt;li>&lt;strong>扩展性&lt;/strong>：需要大量人类反馈数据，成本随模型规模增加而上升。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h4 id="7-rlhf的改进与替代">7. &lt;strong>RLHF的改进与替代&lt;/strong>
&lt;/h4>&lt;p>由于RLHF的复杂性，学术界提出了简化方法：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>DPO（Direct Preference Optimization）&lt;/strong>：直接基于人类偏好优化模型，跳过奖励模型训练，降低计算复杂度。&lt;/li>
&lt;li>&lt;strong>监督微调（SFT）&lt;/strong>：用高质量标注数据直接微调模型，作为RLHF的补充或替代。&lt;/li>
&lt;/ul>
&lt;p>此外，OpenAI的“超级对齐”（Super-alignment）项目探索如何在未来监管超级智能，确保其行为可控，这表明RLHF可能只是对齐技术的一个起点。&lt;/p>
&lt;hr>
&lt;h4 id="8-总结">8. &lt;strong>总结&lt;/strong>
&lt;/h4>&lt;p>RLHF是一种将人类主观偏好融入大语言模型优化的强大方法，通过“人类反馈 → 奖励模型 → 强化学习”的流程，显著提升模型的安全性、实用性和对齐性。它在大语言模型（如ChatGPT、GPT-4）的发展中起到关键作用，是实现“3H对齐标准”的重要技术。尽管存在复杂性和成本挑战，RLHF仍是当前对齐研究的主流方向，并为通用人工智能的伦理治理提供了宝贵经验。&lt;/p></description></item><item><title>LLM微调：qwen2_chat模型部署和微调</title><link>https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/</link><pubDate>Thu, 09 Jan 2025 10:14:04 +0800</pubDate><guid>https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/</guid><description>&lt;img src="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/index.png" alt="Featured image of post LLM微调：qwen2_chat模型部署和微调" />&lt;h2 id="qwen---chat">Qwen - chat
&lt;/h2>&lt;h3 id="模型部署">模型部署
&lt;/h3>&lt;ol>
&lt;li>下载源码 项目地址：https://github.com/QwenLM/Qwen&lt;/li>
&lt;/ol>
&lt;p>git clone &lt;a class="link" href="https://github.com/QwenLM/Qwen.git" target="_blank" rel="noopener"
>https://github.com/QwenLM/Qwen.git&lt;/a>
2. 配置环境&lt;/p>
&lt;ul>
&lt;li>虚拟环境&lt;/li>
&lt;li>安装相关的库
pip install -r requirements.txt&lt;/li>
&lt;/ul>
&lt;ol start="3">
&lt;li>
&lt;p>去modelspace或者github下面模型文件
&lt;img src="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image.png"
width="1280"
height="659"
srcset="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image_hu18034519455004206608.png 480w, https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image_hu12916675736591963435.png 1024w"
loading="lazy"
alt="模型下载"
class="gallery-image"
data-flex-grow="194"
data-flex-basis="466px"
>
git lfs install # 首先需要确保git lfs已经安装，安装方式：apt-get install git-lfs
git clone &lt;a class="link" href="https://www.modelscope.cn/qwen/Qwen-1_8B-Chat.git" target="_blank" rel="noopener"
>https://www.modelscope.cn/qwen/Qwen-1_8B-Chat.git&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>修改web_demo.py中的模型文件地址，然后运行 python web_demo.py
&lt;img src="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-1.png"
width="1280"
height="696"
srcset="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-1_hu6788508303201792611.png 480w, https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-1_hu15656141083532461467.png 1024w"
loading="lazy"
alt="运行"
class="gallery-image"
data-flex-grow="183"
data-flex-basis="441px"
>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>注意，可能碰到问题：
&lt;img src="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-2.png"
width="1084"
height="247"
srcset="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-2_hu5290884360031333678.png 480w, https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-2_hu4001900089668096782.png 1024w"
loading="lazy"
alt="问题"
class="gallery-image"
data-flex-grow="438"
data-flex-basis="1053px"
>
这个问题是由于安装的库不对导致的&lt;/p>
&lt;h3 id="模型微调">模型微调
&lt;/h3>&lt;ol>
&lt;li>找到对应的数据集
这里使用的是法律的数据集：https://modelscope.cn/datasets/Robin021/DISC-Law-SFT/files
&lt;img src="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-3.png"
width="1280"
height="659"
srcset="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-3_hu5990349677009438336.png 480w, https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-3_hu14520840803781363802.png 1024w"
loading="lazy"
alt="数据集"
class="gallery-image"
data-flex-grow="194"
data-flex-basis="466px"
>&lt;/li>
&lt;li>在Qwen的文件里面新建一个Data文件夹
&lt;img src="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-4.png"
width="1280"
height="653"
srcset="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-4_hu16660276711675310739.png 480w, https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-4_hu132649666563361270.png 1024w"
loading="lazy"
alt="Data文件夹"
class="gallery-image"
data-flex-grow="196"
data-flex-basis="470px"
>&lt;/li>
&lt;li>使用脚本把数据重新处理&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">json&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">json_data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;DISC-Law-SFT-Triplet-released.jsonl&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;r&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">encoding&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;utf-8&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">line&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">json_data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">loads&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">line&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">template&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">idx&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">data&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">enumerate&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json_data&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">conversation&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;from&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;user&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;value&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;input&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;from&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;assistant&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;value&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;output&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">template&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;id&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;identity_&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">idx&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;conversations&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">conversation&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">template&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">template&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">indent&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ensure_ascii&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">False&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">output_file&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;DISC-train-data.json&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">output_file&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;w&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">encoding&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;utf-8&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dump&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">template&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">indent&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ensure_ascii&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">False&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Data saved to &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">output_file&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-5.png"
width="1280"
height="802"
srcset="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-5_hu11367717008827871827.png 480w, https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-5_hu3761330645233970024.png 1024w"
loading="lazy"
alt="结果"
class="gallery-image"
data-flex-grow="159"
data-flex-basis="383px"
>
4. 安装模型训练用的依赖
pip install &amp;ldquo;peft&amp;lt;0.8.0&amp;rdquo; deepspeed
注意：可能会安装失败（一般是在Windows系统里面或者没有GPU）&lt;/p>
&lt;ol>
&lt;li>缺失cpuinfo ： pip install py-cpuinfo&lt;/li>
&lt;li>aio.lib 缺失 参考：https://blog.csdn.net/dalaomanzou/article/details/137188431&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> &lt;span class="nv">DS_BUILD_AIO&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> &lt;span class="nv">DS_BUILD_EVOFORMER_ATTN&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> &lt;span class="nv">DS_BUILD_OPS&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> &lt;span class="nv">DS_BUILD_SPARSE_ATTN&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pip install &lt;span class="nv">deepspeed&lt;/span>&lt;span class="o">==&lt;/span>0.3.16 &lt;span class="c1"># 注意版本，新版本不支持了&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-6.png"
width="1280"
height="763"
srcset="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-6_hu7125938631896406882.png 480w, https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-6_hu3520366580234144684.png 1024w"
loading="lazy"
alt="解决aio.lib缺失"
class="gallery-image"
data-flex-grow="167"
data-flex-basis="402px"
>
如果还是会出现问题，就换环境吧&lt;/p>
&lt;ol start="5">
&lt;li>
&lt;p>修改微调文件 finetune\finetune_lora_single_gpu.sh 中的MODEL和DATA变量
&lt;img src="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-7.png"
width="1280"
height="777"
srcset="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-7_hu14709233748086811495.png 480w, https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-7_hu7203884307611987072.png 1024w"
loading="lazy"
alt="修改微调文件"
class="gallery-image"
data-flex-grow="164"
data-flex-basis="395px"
>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>运行 bash finetune\finetune_lora_single_gpu.sh 就可以开始微调了（这个微调就必须要硬件设备达到，达不到硬件设备是跑不起来的）
&lt;img src="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-8.png"
width="1280"
height="686"
srcset="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-8_hu11940000979455392821.png 480w, https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-8_hu8582460095844945783.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="186"
data-flex-basis="447px"
>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>微调好之后的模型会存储在项目文件夹下的output_qwen文件夹下面，会按照epoch次数存储多个检查点文件夹
&lt;img src="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-9.png"
width="1280"
height="154"
srcset="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-9_hu13129812476835115789.png 480w, https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-9_hu662681455028578130.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="831"
data-flex-basis="1994px"
>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>下一步需要把训练好的lora模型和原始模型合并，这里我写了一个用于合并的代码&lt;/p>
&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 导入PEFT库中的AutoPeftModelForCausalLM类，用于加载和合并模型&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">peft&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AutoPeftModelForCausalLM&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 设置adapter模型的路径&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">path_to_adapter&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;/openbayes/home/20250121-Qwen/Qwen-main/output_qwen/checkpoint-1000&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 设置合并后模型的保存路径&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">new_model_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;/openbayes/home/20250121-Qwen/Qwen-main/law_model-chat&amp;#34;&lt;/span> &lt;span class="c1"># load model&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 加载adapter模型，设置device_map为auto自动分配设备，允许使用远程代码，并设置为评估模式&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">model&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AutoPeftModelForCausalLM&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">from_pretrained&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">path_to_adapter&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">device_map&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;auto&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">trust_remote_code&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">eval&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 合并adapter和基础模型&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">merged_model&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">merge_and_unload&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 保存合并后的模型，设置最大分片大小为2048MB，使用安全序列化&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">merged_model&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">save_pretrained&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">new_model_path&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">max_shard_size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;2048MB&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">safe_serialization&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 保存分词器&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 导入AutoTokenizer用于处理分词&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">transformers&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AutoTokenizer&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 从adapter模型路径加载分词器，允许使用远程代码&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">tokenizer&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AutoTokenizer&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">from_pretrained&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">path_to_adapter&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">trust_remote_code&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 将分词器保存到新模型路径&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">tokenizer&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">save_pretrained&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">new_model_path&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>创建merge_model.py,运行代码
&lt;img src="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-10.png"
width="1280"
height="688"
srcset="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-10_hu653965458907714002.png 480w, https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-10_hu10471472862514602979.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="186"
data-flex-basis="446px"
>
9. 然后修改推理模型进行推理
&lt;img src="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-11.png"
width="1280"
height="711"
srcset="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-11_hu15320767722002120083.png 480w, https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-11_hu17002237920729213952.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="180"
data-flex-basis="432px"
>
还是和之前一样，运行python web_demo.py&lt;/p>
&lt;ul>
&lt;li>在这个过程中我遇到了一个问题，发现是transformers-stream-generator库的问题，在微调的时候我安装的这个库和推理的时候这个库不一致
&lt;img src="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-12.png"
width="1280"
height="687"
srcset="https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-12_hu15815375130252054277.png 480w, https://www.zata.cc/p/llm%E5%BE%AE%E8%B0%83qwen2_chat%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%92%8C%E5%BE%AE%E8%B0%83/images/index/image-12_hu1429151025623768349.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="186"
data-flex-basis="447px"
>&lt;/li>
&lt;/ul></description></item></channel></rss>