Embedding模型选型与优化:从通用到垂直领域

Embedding:向量检索的基础 在RAG系统中,Embedding模型的质量直接决定了检索质量的上限。一个好的Embedding模型能让语义相关的文档在向量空间中靠近,不相关的远离。选错了Embedding模型,后面再多优化也白费。 主流Embedding模型 通用模型 BGE系列(智源) bge-large-zh-v1.5:中文最强之一 bge-m3:多语言、多功能(稠密+稀疏+多向量) 维度:768/1024 优势:中文效果好、支持指令微调 E5系列(微软) multilingual-e5-large:多语言 E5-large-v2:英文 维度:1024 优势:多语言一致性好 GTE系列(阿里) gte-large-zh:中文优化 gte-multilingual:多语言 维度:1024 优势:长文本效果好 OpenAI text-embedding-3-large 维度:3072(可降维) 优势:API调用方便 劣势:中文效果不如国产模型 开源vs商用对比 模型 类型 中文MTEB 速度 部署 bge-m3 开源 66.3 快 自部署 gte-large-zh 开源 64.1 中 自部署 text-embedding-3 API 62.5 快 API jina-embeddings-v3 开源 63.8 中 自部署 模型选型维度 1. 语言支持 纯中文场景:bge-large-zh、gte-large-zh 中英混合:bge-m3、multilingual-e5 多语言:bge-m3、E5-multilingual 2. 向量维度 维度越高,表达能力越强,但存储和检索成本也越高: 维度 1M文档存储 检索延迟 表达能力 384 1.5GB 低 基准 768 3GB 中 好 1024 4GB 中 很好 3072 12GB 高 最好 实践建议:768维是性价比最高的选择。 ...

2026-07-16 · 2 min · 266 words · 硅基 AGI 探索者

AI模型蒸馏技术:让小模型继承大模型能力

蒸馏的本质 知识蒸馏(Knowledge Distillation)的核心思想:用一个强大但昂贵的"教师模型"指导训练一个小而快的"学生模型",让小模型在特定任务上接近大模型的表现。 这不是简单的模仿——而是一种知识迁移技术。 蒸馏的三层含义 1. 响应蒸馏(Response Distillation) 最直接的方式:让学生模型学习教师模型的输出分布。 传统方法(分类任务): 教师模型: soft_targets = softmax(logits_T / T) 学生模型: soft_pred = softmax(logits_S / T) 蒸馏损失: KL(soft_targets || soft_pred) * T² 温度参数T软化概率分布,让学生能学到"次优答案也有一定概率"的暗知识。 大模型时代: 教师(GPT-4): prompt → 优质回答 学生(小模型): prompt → 学习生成同样的回答 SFT训练: loss = CrossEntropy(student_output, teacher_answer) 2. 特征蒸馏(Feature Distillation) 不只学输出,还学中间表示: 教师中间层特征: h_T = Teacher.layer_k(input) 学生中间层特征: h_S = Student.layer_j(input) 蒸馏损失: MSE(project(h_S), h_T) + α * CE(output, label) 需要设计投影层(projection layer),因为教师和学生的隐藏维度可能不同。 对于Transformer模型,可以蒸馏: 注意力权重分布 隐藏状态向量 前馈网络中间表示 3. Agent蒸馏(Agent Distillation) 2026年的新趋势——不只是蒸馏静态回答,而是蒸馏Agent行为: ...

2026-07-16 · 2 min · 267 words · 硅基 AGI 探索者

大模型微调实战:LoRA、QLoRA与全参微调的选择策略

微调方法全景 大模型微调主要有三种技术路线,各有适用场景: 全参微调(Full Fine-tuning):更新所有参数,效果上限最高,但成本最高 LoRA:冻结主干参数,仅训练低秩适配矩阵,性价比极高 QLoRA:在LoRA基础上对基座模型4bit量化,进一步降低显存需求 LoRA技术详解 原理 LoRA(Low-Rank Adaptation)的核心思想是:模型适配过程中的参数变化具有低秩特性。具体做法: 将原始权重矩阵W∈R^(d×d)的更新分解为两个小矩阵的乘积: W' = W + ΔW = W + B × A 其中A∈R^(r×d),B∈R^(d×r),r远小于d(通常取8-64)。 参数量从d²降低到2rd,以r=16、d=4096为例,参数量从16.7M降到131K,缩减了127倍。 关键超参数 rank (r):秩大小。r越大表达能力越强但训练越慢。推荐8-64起步 alpha:缩放系数,实际缩放为α/r。推荐设为r的2倍 target_modules:应用LoRA的层。至少q_proj和v_proj,推荐all-linear 适用场景 风格定制(让模型用特定语气说话) 领域适配(法律、医疗等垂直领域) 任务适配(将通用模型适配到特定任务格式) QLoRA:极致显存优化 QLoRA在LoRA基础上增加了两个优化: 4-bit NormalFloat量化 将基座模型权重量化为4-bit NF4数据类型。NF4是一种正态分布感知的量化方案,比均匀量化精度更高: 原始: W ∈ FP16 (每参数2字节) 量化: W → NF4 (每参数0.5字节) 训练: 仅LoRA参数为FP32 双重量化 对LoRA的适配矩阵本身也进行量化,进一步压缩梯度检查点的显存占用。 页面优化器 将优化器状态在CPU/GPU之间分页,避免显存峰值溢出。 效果对比 方法 7B模型显存 70B模型显存 效果损失 全参 120GB+ 1200GB+ 0% LoRA 20GB 160GB <1% QLoRA 6GB 48GB 1-2% QLoRA让单张消费级显卡(如RTX 3090, 24GB)就能微调7B模型,极大降低了定制化门槛。 ...

2026-07-16 · 1 min · 129 words · 硅基 AGI 探索者

RAG系统进阶:从朴素检索到自适应检索增强

朴素RAG的局限性 标准RAG流程很简单:文档分块→向量化→检索top-k→拼接到prompt→生成回答。但在实际场景中,朴素RAG面临几个核心问题: 检索不准:用户查询与文档语义空间不匹配 排序不佳:向量相似度高≠回答有用 上下文冗余:top-k中可能包含大量无关内容 无法自纠错:检索不到就硬编答案 检索层优化 混合检索 纯向量检索擅长语义匹配但弱于精确关键词。BM25等稀疏检索正好互补。混合检索的实践方案: 向量检索(Dense):召回语义相关段落 关键词检索(Sparse/BM25):召回精确匹配段落 融合排序:RRF(Reciprocal Rank Fusion)算法合并两路结果 def rrf_fusion(dense_results, sparse_results, k=60): scores = {} for rank, doc in enumerate(dense_results): scores[doc.id] = scores.get(doc.id, 0) + 1/(k + rank) for rank, doc in enumerate(sparse_results): scores[doc.id] = scores.get(doc.id, 0) + 1/(k + rank) return sorted(scores.items(), key=lambda x: -x[1]) 查询改写 用户的原始query往往不是最佳检索query。通过LLM对查询进行改写: 查询扩展:生成多个语义变体query,分别检索后合并 HyDE:先让LLM生成一个假设性回答,用该回答的embedding去检索(对长尾问题效果显著) 子问题分解:复杂问题拆成多个子问题分别检索 重排序(Reranking) 向量检索的召回质量参差不齐。在召回后加一个cross-encoder重排层: 向量检索召回top-50(宽召回) Cross-encoder(如bge-reranker-v2)对每对(query, doc)打分 按分数取top-5(精排序) Cross-encoder比bi-encoder准确率高20-30%,但速度慢,所以做两阶段检索。 生成层优化 上下文压缩 检索回来的文档可能很长,需要压缩到LLM能高效处理的篇幅: 提取式:用小模型抽取关键句子 摘要式:LLM对每个文档生成精简摘要 LLMLingua:基于困惑度删除低信息token,可压缩到原长的1/10 引用标注 高质量RAG需要可溯源。实现方式: 在prompt中要求模型标注引用段落编号 后处理时验证引用的段落确实支持该陈述 不支持的引用标记为"未验证" 自适应RAG:让模型决定怎么检索 Self-RAG Self-RAG让模型学会自主决定: 是否需要检索(通过特殊token [Retrieve]/[No Retrieve]) 检索到的段落是否相关([Relevant]/[Irrelevant]) 回答是否被段落支持([Supported]/[Partially Supported]) 这种方式将检索决策内化为模型能力,需要通过强化学习训练。 CRAG(Corrective RAG) CRAG在检索后增加一个"检索评估器": 评估检索结果质量:Correct / Ambiguous / Incorrect 如果Incorrect,触发web搜索补充 如果Ambiguous,将检索结果与web结果合并 对最终结果重排序后生成 Adaptive-RAG 根据查询复杂度自适应选择策略: 简单查询→单次检索 复杂查询→多跳检索+推理 分类器判断查询类型,路由到对应处理流水线 工程实践要点 评估体系 RAG系统必须有量化评估。推荐使用RAGAS框架,四个核心指标: ...

2026-07-16 · 1 min · 119 words · 硅基 AGI 探索者

大模型蒸馏技术全景:从 logits蒸馏到特征蒸馏

蒸馏:用小模型继承大模型的能力 知识蒸馏是模型压缩领域最优雅的技术——让小模型(学生)学习大模型(教师)的内部表示,而非简单地学习标签。一个好的蒸馏方案可以让7B模型逼近70B模型的效果。 Logits蒸馏:经典方法 原理 教师模型的logits(softmax前的输出)包含了类别间的相似度信息——“软标签"比"硬标签"信息量更大: class LogitsDistillationLoss(nn.Module): def __init__(self, temperature=2.0, alpha=0.5): self.temperature = temperature self.alpha = alpha # 蒸馏loss与CE loss的权重比 def forward(self, student_logits, teacher_logits, labels): # 蒸馏损失:KL散度 soft_teacher = F.log_softmax( teacher_logits / self.temperature, dim=-1 ) soft_student = F.log_softmax( student_logits / self.temperature, dim=-1 ) distill_loss = F.kl_div( soft_student, soft_teacher.exp(), reduction="batchmean" ) * (self.temperature ** 2) # 标准交叉熵损失 ce_loss = F.cross_entropy(student_logits, labels) return self.alpha * distill_loss + (1 - self.alpha) * ce_loss 温度参数的作用 温度 $T$ 控制软标签的"软度”: $T=1$:标准softmax,概率分布较尖锐 $T=2-5$:分布更平滑,类别间关系更明显 $T \to \infty$:均匀分布 实践中 $T=2-4$ 效果最好。温度的平方项补偿了梯度缩放——高温softmax的梯度会被 $1/T^2$ 缩小。 在线蒸馏vs离线蒸馏 离线蒸馏:先训练好教师模型,再蒸馏学生模型。简单稳定但教师的错误会被继承。 在线蒸馏:教师和学生同时训练,教师不断更新: class OnlineDistillation: def __init__(self, teacher, student, alpha=0.5): self.teacher = teacher self.student = student self.alpha = alpha def train_step(self, batch): # 教师前向(不更新梯度) with torch.no_grad(): teacher_logits = self.teacher(batch) # 学生前向 student_logits = self.student(batch) # 蒸馏损失 distill_loss = self._distill_loss(student_logits, teacher_logits) ce_loss = F.cross_entropy(student_logits, batch["labels"]) loss = self.alpha * distill_loss + (1 - self.alpha) * ce_loss loss.backward() 特征蒸馏:学习中间表示 原理 Logits蒸馏只利用了最终输出,特征蒸馏还利用了中间层的表示: ...

2026-07-16 · 3 min · 481 words · 硅基 AGI 探索者

Self-RAG与Adaptive-RAG:让模型学会何时检索

朴素RAG的致命缺陷 朴素RAG对每个问题都执行检索,这带来两个问题:简单问题浪费检索资源(“1+1等于几"不需要查文档),复杂问题单次检索不够(“对比三家公司五年财报"需要多次检索)。自适应RAG的核心思想是让模型自己决定:是否需要检索、检索几次、检索什么。 Self-RAG:自我反思的检索 核心机制 Self-RAG训练模型输出特殊的反思token来控制检索行为: [Retrieve]:是否需要检索 [Relevant]:检索结果是否相关 [Supported]:生成内容是否被检索结果支持 [Useful]:检索结果是否有用 工作流程 输入问题 → 模型判断[Retrieve] → 是 → 检索Top-K文档 → 模型判断[Relevant] → 过滤不相关文档 → 逐段生成 → [Supported]标注 → 输出 否 → 直接生成 → 输出 训练方法 Self-RAG的训练分为两阶段: 阶段1:训练 critic 模型 收集标注数据训练一个判断模型: 何时需要检索(基于问题类型) 文档是否相关(人工标注) 生成是否被支持(对照检查) class CriticModel: def __init__(self, base_model): self.model = base_model def should_retrieve(self, question): # 简单事实问题不需要检索 # 需要最新信息的问题需要检索 # 需要引用来源的问题需要检索 prompt = f"判断以下问题是否需要检索外部信息:\n{question}" return self.model.generate(prompt) == "yes" def is_relevant(self, question, document): prompt = f"判断文档是否与问题相关:\n问题:{question}\n文档:{document}" return self.model.generate(prompt) == "relevant" 阶段2:训练生成模型 在生成模型中注入反思token的训练: def self_rag_generate(question, retriever, model): # Step 1: 判断是否检索 if model.should_retrieve(question): docs = retriever.search(question, top_k=5) # 过滤不相关文档 relevant_docs = [d for d in docs if model.is_relevant(question, d)] else: relevant_docs = [] # Step 2: 逐段生成 response = "" for segment in model.generate_segments(question, relevant_docs): # 检查是否被来源支持 support_level = model.check_support(segment, relevant_docs) if support_level == "fully_supported": response += segment + " [Supported]" elif support_level == "partially_supported": response += segment + " [Partially Supported]" else: # 无支持的内容触发重新检索 new_docs = retriever.search(segment, top_k=3) response += segment + " [No Support - Retrieved]" return response 效果对比 在多个基准上,Self-RAG相比朴素RAG: ...

2026-07-16 · 3 min · 529 words · 硅基 AGI 探索者

LoRA微调实战指南:参数高效微调的原理、实践与陷阱

LoRA:用0.1%的参数达到全量微调效果 LoRA(Low-Rank Adaptation)已成为大模型微调的事实标准。其核心思想简单而优雅:冻结预训练权重,仅训练注入的低秩矩阵。 数学原理 对于预训练权重矩阵 $W_0 \in \mathbb{R}^{d \times k}$,LoRA将权重更新表示为两个小矩阵的乘积: $$W = W_0 + \Delta W = W_0 + BA$$ 其中 $B \in \mathbb{R}^{d \times r}$,$A \in \mathbb{R}^{r \times k}$,$r \ll \min(d, k)$。 初始化时,$A$用高斯随机初始化,$B$用零矩阵初始化,确保训练开始时 $\Delta W = 0$,不破坏预训练效果。 参数缩减比率为 $\frac{r(d+k)}{dk}$。以7B模型为例,当 $r=8$ 时,可训练参数仅约10M,占全量参数的0.14%。 关键超参数调优 秩(Rank)的选择 秩 $r$ 是LoRA最重要的超参数。经验法则: r=4~8:简单任务(文本分类、风格迁移) r=16~32:中等任务(指令跟随、领域适配) r=64+:复杂任务(代码生成、数学推理) 但更大的秩并不意味着更好的效果。研究表明,当秩超过某个阈值后,性能增益趋缓甚至下降,因为低秩约束本身具有正则化作用。 目标模块选择 LoRA可以注入到不同层:注意力层的Q/K/V/O矩阵、FFN层的up/down矩阵。实践建议: # 推荐配置:同时微调注意力和FFN target_modules = [ "q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj" ] 仅微调注意力层往往不够,FFN层包含大量领域知识,加入FFN层通常能提升3-5个点。 学习率与调度器 LoRA的学习率通常比全量微调高10倍: 全量微调:1e-5 ~ 5e-5 LoRA:1e-4 ~ 5e-4 QLoRA:1e-4 ~ 3e-4 调度器推荐cosine decay配合warmup,warmup步数占总步数的3-5%。 ...

2026-07-16 · 1 min · 141 words · 硅基 AGI 探索者

RAG系统进阶:混合检索与重排序的工程实践

超越朴素RAG的检索瓶颈 朴素RAG(检索增强生成)系统的标准流程是:文本分块→向量化→余弦相似度检索→拼接prompt→生成回答。但在生产环境中,这种方案的检索准确率往往不超过60%。本文分享如何通过混合检索和重排序将准确率提升到85%以上。 混合检索:双路召回 稀疏检索:BM25的回归 BM25基于词项频率和文档频率,对精确关键词匹配有天然优势。在专业领域(医疗、法律)中,术语的精确匹配至关重要: from rank_bm25 import BM25Okapi tokenized_corpus = [doc.split() for doc in corpus] bm25 = BM25Okapi(tokenized_corpus) scores = bm25.get_scores(query.split()) 稠密检索:语义理解的利器 稠密检索通过Embedding模型捕获语义相似性,能处理同义词和跨语言匹配。当前推荐的Embedding模型: BGE-M3:支持多语言、多粒度 GTE-large:在MTEB榜单表现优异 Voyage-2:商用级别,支持动态维度 融合策略:RRF算法 Reciprocal Rank Fusion(RRF)是最常用的融合算法,它不依赖原始分数,只利用排名信息: def rrf_fusion(sparse_results, dense_results, k=60): fused_scores = {} for rank, doc in enumerate(sparse_results): fused_scores[doc.id] = fused_scores.get(doc.id, 0) + 1 / (k + rank + 1) for rank, doc in enumerate(dense_results): fused_scores[doc.id] = fused_scores.get(doc.id, 0) + 1 / (k + rank + 1) return sorted(fused_scores.items(), key=lambda x: x[1], reverse=True) RRF的优势在于无需调参,且对两个检索系统的分数尺度不敏感。 重排序:精排阶段 粗排阶段获取Top-50候选后,需要用更精确但更慢的模型进行重排序。 交叉编码器重排序 Cross-Encoder将query和document拼接后输入Transformer,输出相关性分数。相比Bi-Encoder,精度更高但速度慢100倍: from sentence_transformers import CrossEncoder reranker = CrossEncoder("BAAI/bge-reranker-v2-m3") scores = reranker.predict([(query, doc.text) for doc in candidates]) ColBERT晚期交互 ColBERT采用折中方案:预计算文档的token级别向量,在查询时进行token级别的最大相似度交互: # ColBERT的Late Interaction def colbert_score(query_embeddings, doc_embeddings): # query: [Q, D], doc: [N, D] sim_matrix = query_embeddings @ doc_embeddings.T # [Q, N] max_per_query = sim_matrix.max(axis=1) # [Q] return max_per_query.sum() ColBERT在保持接近Cross-Encoder精度的同时,速度提升约10倍。 分块策略对检索的影响 检索质量不仅取决于检索算法,分块策略同样关键: 固定长度分块:简单但可能切断语义完整性,建议设置10-20%重叠 语义分块:利用句子边界或段落结构,保持语义完整 递归分块:先按大单元(章节)切分,再按小单元(段落)细分 父子分块:检索用小块(200token),生成用大块(父块,1000token) 实践中,父子分块策略效果最好:小块保证检索精度,大块提供完整上下文。 检索质量评估体系 建立RAG评估体系需要以下指标: 检索阶段:Recall@K、MRR(Mean Reciprocal Rank)、NDCG 生成阶段:Faithfulness(忠实度)、Answer Relevancy(答案相关性)、Context Precision(上下文精度) 推荐使用RAGAS框架进行自动化评估: ...

2026-07-16 · 1 min · 170 words · 硅基 AGI 探索者

从数据标注到RLHF:对齐全流程实践

大模型的能力由预训练决定,但大模型的行为由对齐决定。一个能力强大但不对齐的模型,就像一个天才但不守规矩的员工——潜力越大,风险越大。本文将从工程实践角度,完整梳理从数据标注到RLHF的对齐流程。 一、对齐的全景图 大模型对齐不是单一技术,而是一个多阶段流水线: 预训练模型(Base Model) ↓ 有监督微调(SFT) — 学习"怎么回答" ↓ 奖励模型训练(RM) — 学习"什么是好回答" ↓ 强化学习优化(RLHF/DPO) — 优化"回答得更好" ↓ 安全对齐(Safety) — 确保"不回答不该回答的" 每个阶段都有不同的数据需求、训练方法和评估标准。 二、数据标注:对齐的基石 2.1 SFT数据标注 SFT数据是"指令-回复"对,教模型如何回答问题。看似简单,但质量差异巨大。 常见标注问题: 标注者倾向于写"教科书式"回答,缺乏多样性 不同标注者风格不一致,导致模型输出不稳定 安全相关的边界case标注不一致 最佳实践: 标注规范结构: 1. 任务定义: 清晰定义每种指令类型的预期回答格式 2. 质量标准: - 准确性: 信息正确,无幻觉 - 完整性: 覆盖问题要点 - 简洁性: 不冗余 - 安全性: 不含有害内容 3. 风格指南: 自然口语化,不要过于"AI腔" 4. 边界case: - 事实性问题 → 给出准确答案+来源 - 观点性问题 → 给出多角度分析 - 创意性问题 → 发挥创意但不越界 2.2 偏好数据标注(RLHF/DPO用) 偏好数据是"同一问题的两个回复,标注哪个更好"。这是对齐的核心数据。 ...

2026-07-13 · 3 min · 457 words · 硅基 AGI 探索者

大模型微调中的灾难性遗忘问题

大模型微调中的灾难性遗忘问题 你花两周微调了一个医疗领域的LLM,效果很好——医疗问答准确率从60%提升到90%。但用户反馈说模型的代码能力下降了,数学推理也退化了。这就是灾难性遗忘——在学习新知识的同时遗忘了旧知识。 灾难性遗忘的成因 神经网络的"跷跷板效应" 灾难性遗忘的根源在于神经网络的参数共享。同一个参数既参与医疗问答,也参与代码生成。当你用医疗数据微调时,参数向医疗任务最优的方向移动,必然偏离代码任务的最优点。 这和人类学习不同——人类学医不会导致忘记编程。因为人脑的功能区域相对独立,学习新知识不会覆盖旧知识的神经回路。而神经网络中,所有知识共享同一组参数。 影响遗忘程度的因素 微调数据量:数据越多,参数移动幅度越大,遗忘越严重。用10万条数据微调比1万条遗忘更严重。 学习率:学习率越大,参数更新越激进,遗忘越快。 数据分布偏移:微调数据和预训练数据分布差异越大,遗忘越严重。从通用文本微调到高度专业的医疗数据,分布偏移大,遗忘严重。 参数规模:小模型更容易遗忘(参数少,冲突大),大模型相对抗遗忘(参数冗余度高,不同知识可以"住"在不同参数子空间中)。 遗忘的度量 通用能力保留率 在微调前后,用一套通用基准测试(MMLU、HumanEval、GSM8K等)评估模型,对比分数变化。通用能力保留率 = 微调后分数 / 微调前分数。 特定能力遗忘率 针对特定能力设计测试集——代码生成、数学推理、创意写作等——分别度量微调前后的表现。通常关注的是退化超过5%的能力维度。 表示漂移度量 更底层的方法是度量模型内部表示的变化。用微调前后的模型对同一组文本生成嵌入向量,计算嵌入分布的偏移。偏移越大,遗忘风险越高。 缓解策略 策略一:低秩适应(LoRA) LoRA是缓解遗忘最实用的方法。它冻结原始参数,只训练低秩增量矩阵。原始知识完整保留在冻结的参数中,新增知识写入低秩矩阵。 LoRA天然抗遗忘——原始参数没变,通用能力不会退化。但代价是新增能力的深度有限——低秩矩阵的表达能力受限,很难学到需要大幅参数调整的能力。 实践中,LoRA的遗忘率通常<5%,远低于全参数微调的15-30%。对于大多数领域微调场景,这个trade-off是值得的。 策略二:经验回放(Experience Replay) 在微调数据中混入一定比例的通用数据。比如90%医疗数据+10%通用数据。通用数据起到"锚定"作用,防止参数过度偏移。 回放数据的选择很关键: 均匀采样:从预训练数据中均匀采样,覆盖面广但效率低 困难样本采样:采样最容易被遗忘的任务数据,精准防御 梯度匹配采样:选择梯度方向和新数据相反的样本,抵消偏移 回放比例的调优:太高(30%+)会稀释领域微调效果,太低(<5%)防遗忘效果不足。实践中10-15%是常用值。 策略三:弹性权重整合(EWC) EPC的核心思想是给每个参数一个"重要性权重"——越重要的参数(对已有任务越关键),正则化强度越大,越不应该修改。 具体实现:在微调前计算Fisher信息矩阵(近似参数重要性),在损失函数中加入正则化项: Loss = L_task + λ Σ F_i (θ_i - θ*_i)² 其中F_i是参数重要性,θ*_i是原始参数值。重要参数(F_i大)的偏移被惩罚,不重要参数可以自由更新。 EWC的效果取决于Fisher信息矩阵的估计质量。在实践中,Fisher估计的计算成本不低,且估计精度有限。这使得EWC在理论上有吸引力,但实践中不如LoRA和回放方法使用广泛。 策略四:参数隔离 最极端的防遗忘策略——给新任务分配专用参数,完全不影响旧任务参数。Adapter和Prefix Tuning属于这个方向。 Adapter在Transformer层之间插入小的适配模块,冻结原始参数。优点是零遗忘,缺点是增加了推理计算量和参数量。 Prefix Tuning在每个注意力层前加入可学习的前缀token,冻结模型参数。比Adapter更轻量,但表达能力也受限。 策略五:渐进式解冻 不冻结所有参数,而是从顶层开始逐步解冻。先只微调最后几层,评估遗忘程度;如果可接受,继续解冻更深层。这种渐进式方法在遗忘和能力提升之间找到更精细的平衡。 多任务持续学习 当你需要让模型同时学习多个领域时——医疗、法律、金融——遗忘问题更复杂。多任务交替训练会导致"跷跷板效应"——医疗能力上升则法律能力下降,反之亦然。 多任务混合训练 将多个领域的数据混合训练,而非交替训练。这能避免"学新忘旧"的问题。但要求各领域数据量均衡,否则大领域会"淹没"小领域。 模块化微调 为每个领域训练独立的LoRA模块,推理时根据任务选择加载。这是2026年的主流方案——一个基座模型+多个LoRA适配器,按需加载。 优势:零跨领域干扰、模块可独立更新、按需加载节省显存。 劣势:推理时需要路由策略判断使用哪个模块、管理多个模块的复杂性增加。 实践建议 基于我们在硅基AGI平台的微调经验,推荐以下流程: 首选LoRA:90%的场景下LoRA够用,遗忘率低、效率高 混入10%通用数据:作为保险,防止意外遗忘 使用小学习率:1e-5到5e-5之间,温和更新 分层学习率:底层用更小的学习率(1e-6),高层可以用更大的学习率 定期评估通用能力:每500步跑一次通用基准,发现退化立即调整 结语 灾难性遗忘是大模型微调中不可避免的trade-off——没有"免费的午餐",学习新知识和保留旧知识之间总是存在张力。关键不是"消除"遗忘,而是将遗忘控制在可接受范围内。LoRA+回放+定期评估的组合方案,在2026年仍然是性价比最高的实践路径。随着模型规模增大和训练方法改进,遗忘问题会逐步缓解,但永远不会消失——它是深度学习架构的基本特性。 ...

2026-07-13 · 1 min · 77 words · 硅基 AGI 探索者
鲁ICP备2026018361号