SEMA按需生长机制:让预训练模型持续扩展而不遗忘

发布时间:2026/10/1 16:12:03

SEMA按需生长机制:让预训练模型持续扩展而不遗忘 上个月我把一个训练好的视觉模型部署到产线上跑了两周一切正常。结果新来的合作方提了一批新需求——识别类别多了三分之一而且某些样本的形态和训练集完全不是一个路数。当时我面临一个很现实的选择换一个更大的预训练模型重训还是在现有模型上做增量扩展。重训意味着重新标注数据、重新调参、重新过一遍漫长的验证流程但如果继续沿用现有模型精度又会明显下滑。后来在备赛和读论文的过程中我看到了CVPR 2025 的 SEMA它给出的回答很直接模型不一定非要整体换血按需长出新 Adapter 就够了。这篇就来拆一拆 SEMA 的思路以及它在实际项目里到底能怎么用。不管你是做视觉、做 NLP还是做多模态的只要手里有已经部署好的预训练模型都会遇到“模型不够用了”的时刻。SEMA 的核心不是教你重新训练一个大模型而是给出一种让已有模型动态扩展能力边界的机制。全文我会围绕五个方面展开模型为什么需要长大、SEMA 的生长逻辑、预训练知识怎么保留、适配器生长的触发与路由策略以及我落地过程中总结的几条实操经验。1. 预训练模型为什么需要“长大”三个典型场景1.1 任务范围扩展新类别、新域、新任务同时出现模型长大最直接的需求来自任务本身的变化。假设你原来用 ResNet 预训练模型做工业质检只识别产品表面的划痕、脏污、缺胶。半年后客户要求增加对焊接点虚焊、元器件极性反装、PCB 板弯折这些新缺陷的识别。表面看只是类别数量从 5 类变成 12 类但实际难点在别处新增类别和原有类别在特征空间里高度重叠比如虚焊和脏污都可能表现为局部颜色差异如果直接在原有模型的输出层上加几个节点重新训练旧类别的特征分布会被新类别的梯度更新推着跑最终出现“学到新类忘了旧类”的灾难性遗忘。这种情况下最省事但也最费钱的做法是收集全部新旧数据重头微调一个更大的模型。问题是工业场景的数据往往分散在不同产线、不同时间段历史数据的分布和当前真实分布已经产生偏移。我见过不止一个项目栽在“重新标注全部数据”这一步标注成本、人力成本、时间成本全都要翻倍。SEMA 的做法是在冻结原始模型参数的前提下为新需求长出新的 Adapter 模块。每个 Adapter 只对应一组增量能力原始模型的主干参数一概不动。这样旧类别不会因为新类别到来而退化新增类别也能在专门的旁路里获得足够的拟合能力。对于“任务边界清晰”的扩展场景这个思路特别合适。1.2 数据分布漂移与原领域失效第二个典型场景是输入数据的分布发生了整体漂移。以我自己做过的字符识别项目为例训练数据来自扫描仪成像字符比较干净背景也比较统一。到了线上用户上传的照片大多是手机在弱光、倾斜、遮挡条件下拍的字体、光照、噪声分布和原先的数据集差距很大。直接在原模型上做有监督微调模型会逐渐把注意力从“字符结构”偏移到“光照模式”这类非稳定特征上短时间内看起来精度回升了换一批数据又会掉回去。更隐蔽的问题是领域漂移往往不是一次性发生的而是随着摄像头更换、环境光照季节变化、生产批次切换隔一段时间就漂一点。如果每次漂移都用旧模型的全部参数重新微调模型会被最新的数据分布牵着走最终丢失掉对早期数据的泛化能力。SEMA 把“内存”和“处理器”分开原有参数负责稳定的公共知识新增 Adapter 负责吸收当前分布里的特异性模式。这样一来即便分布漂移了好几次公共知识依然锁定在原始主干里不会被反复覆盖。1.3 多租户场景下的个性化需求还有一种需求是同一个模型要服务多个差异很大的用户群体但又不能互相干扰。比如给电商平台做商品识别平台 A 主营服装平台 B 主营数码配件服装类的背景复杂度、拍摄风格和数码类完全不同。传统做法要么为每个租户单独训练一个模型浪费存储和计算资源要么大家共用一个模型各自需求都被平均化谁都不满意。把 Adapter 的思路套进来就很清晰所有租户共享同一个预训练主干每个租户配一个独立的 Adapter 模块。公共主干负责通用的视觉特征提取租户 Adapter 负责本域的个性化映射。SEMA 进一步解决了“什么时候该为新租户添加新适配器、什么时候可以复用已有适配器”的问题这是靠路由和生长策略来完成的后面我会详细展开。2. SEMA 的核心思路把模型变大这件事从“换发动机”改成“加外挂”2.1 Adapter 不是新概念但 SEMA 把它做成了动态决策问题Adapter 本身是参数高效微调里的成熟方法在预训练模型的主干层之间插入小型瓶颈模块微调时只更新 Adapter 的参数冻结主干权重。这么做的好处很直观——需要训练的参数量可能只有全量微调的 1% 到 5%训练速度快、显存占用小而且每个任务只需要保存一个小小的 Adapter 权重文件。但传统 Adapter 的做法是“预先铺好”在主干模型里提前插入若干 Adapter 层用训练数据统一更新。SEMA 的不一样之处在于它把“是否真的需要新增 Adapter”变成一个运行时决策。模型先以原始预训练权重跑当它判断现有能力不足以覆盖当前输入时再动态分配、初始化新的模块。这个思想的转变值得细说。2.2 “按需生长”到底在生长什么宽度、深度还是另一条旁路要理解 SEMA 里的“长大”先要理解模型能力瓶颈到底卡在哪。一个预训练模型在遇到新任务时表现不佳通常有三类原因特征表示不够、映射关系太复杂、决策边界不合适。如果想通过增加模型参数量来缓解常规思路是增加网络的宽度或者深度。但在已部署模型上直接改主干结构会带来一连串麻烦得重新适配推理引擎、重新量化、重新验证延迟。SEMA 选择的是第三条路——保持原有网络结构完全不变在旁边接一条或者多条并行通路。每条并行的 Adapter 通路可以看作一个小型专用网络它的输入来自主干的中间特征输出再合并回主干的后续层。这种设计的好处是极强的兼容性原模型该怎么推理就怎么推理新长出来的 Adapter 只是额外计算路径。加了 Adapter 之后整个模型仍然可以当作一个整体进行端到端训练也可以单独微调某一支路。2.3 和“直接微调大模型”“加网络层重训”两种路线的对比为了把 SEMA 的位置讲清楚我画过一张对比表基本能说明问题方案是否冻结原始权重新增参数规模对原有能力的影响增量扩展性训练成本全量微调大模型否无新增全部更新可能导致灾难性遗忘差每来一个新任务几乎都要全面重训高主干加层后重训部分冻结视加层规模而定改动主干结构影响面大一般加层位置难选中高固定 Adapter 微调冻结很小几乎不影响中等模块固定后不易增删低SEMA 按需生长 Adapter冻结按触发情况动态增加几乎不影响且有隔离机制强可随新任务动态添加/冻结低从这张表能看出SEMA 真正改善的是“增量扩展性”和“对原有能力的影响”。它没有追求一种包打天下的新结构而是把 Adapter 技术的使用方式从“一次性规划好”升级为“动态按需分配”这是我认为它最有价值的地方。2.4 一个很容易被忽略的细节模块不是越新越好新旧知识要能协同SEMA 里长出的 Adapter 并不是彼此孤立的。每个新模块在初始化时会参考已有模块在相关任务上的表现选择性地继承一部分旧模块的投影参数。这个细节很关键它让模型在扩展时具备了“迁移”的属性而不是每次从零搭建一套新知识。我用一个生活化的类比来帮助理解一个成熟的工程师团队最开始两三个人。项目变复杂了团队不会立刻招十个新人而是先看现有成员的任务饱和度——确实忙不过来了就招一个新成员且让新成员先跟着老成员熟悉业务。SEMA 也一样先评估已有 Adapter 的能力覆盖情况判断是不是新增模块就能解决当前问题如果能就只调整路由分配如果不行再初始化新模块并让它从现有模块中获得初始化先验。3. 预训练知识怎么保留冻结主干为什么是 SEMA 的安全底线3.1 灾难性遗忘为什么会毁掉一个已经上线的模型我在前面提到了灾难性遗忘这里需要多说几句。神经网络用梯度下降更新参数时新任务的梯度会改变共享特征提取层的权重而某些对旧任务至关重要的特征方向在新任务的梯度里几乎没有贡献于是逐渐被覆盖掉。这不是某个模型独有的问题而是基于梯度学习的系统通病。在已上线的系统里灾难性遗忘的代价比在实验室里大得多。实验室里忘了旧任务重新训练一遍就好生产系统里旧任务的线上流量还在进来你今天更新了模型明天就可能收到一堆误报投诉。所以任何声称“支持持续学习”的方案第一道考题都是旧能力保留得怎么样。SEMA 选择冻结主干从机制层面把灾难性遗忘的最大来源切断了——既然主干权重一动都不动旧任务的公共特征提取方式保持不变那么旧任务的知识基础就还在。3.2 主干保留到什么粒度每层都接旁路还是选定关键层实际操作中会遇到一个问题主干几十上百层总不能每一层旁边都挂一个 Adapter 吧计算量吃不消效果也可能过拟合。SEMA 的关键层选择逻辑是依据主干内部特征在任务之间的“分歧程度”来决定的。具体来说它会在代表性样本集上统计各层输出的特征分布差异。当新任务和旧任务在浅层特征上差异不大、到深层特征才出现明显分歧时就只在高层接入 Adapter如果连浅层特征都差异显著比如输入模态从自然图像换成了医学影像那么从中间层开始就要接入旁路。这个选择和“迁移学习该冻结哪些层”的问题很像只不过 SEMA 把决策过程自动化了。我在实际复现类似逻辑时通常用一个轻量级的分布距离计算比如最大均值差异来评估层间分歧按阈值筛选需要“生长” Adapter 的层。这个方案简单有效也容易解释给团队里的其他成员听。3.3 公共知识和新知识的衔接特征合并需要注意尺度问题主干层输出的特征和 Adapter 支路输出的特征合并成最终输入时存在一个尺度匹配问题。主干特征经过了几十层网络的归一化数值范围相对稳定新初始化的 Adapter 训练初期输出值可能偏大或者偏小直接相加会让主干特征被淹没。SEMA 给我的启发在于它对“合并权重”的处理新 Adapter 在初始化阶段输出会被缩放系数压得很低几乎不改变主干特征然后在训练过程中逐步学习合适的输出强度。用不那么学术的话讲新成员刚加入团队时先不让他做决定让他观察学习一段时间业务熟悉了再逐步放手。这个动态缩放策略对训练稳定性非常友好我第一次尝试时省掉了大量调学习率的时间。4. 按需生长的适配规则什么信号触发新模块怎么保持模型原有能力4.1 第一个问题模型怎么知道自己“不够用了”这是整个 SEMA 设计里最有意思的部分。模型不是一个有自我认知的系统它需要一种定量信号来判断现有能力是否已经无法覆盖当前输入。SEMA 的做法是为已有 Adapter 建立一条“能力包络线”。具体地当一批新数据进来模型先让现有模块集合给出预测结果同时记录预测置信度、特征与已有模块原型之间的距离、以及输出结果在类别上的分布情况。如果这批数据的平均置信度低于预设阈值或者大多数样本的特征都落在已有模块覆盖范围之外系统就会判定“现有模块集合能力不足”从而触发新 Adapter 的生成。阈值的选择直接影响模型“长大”的频率。阈值设得太低模型会频繁长出大量冗余模块训练管理变得复杂阈值设得太高模型对新任务视而不见精度一直处于欠拟合状态。我在实践中他们会用验证集上的性能增量来反向标定阈值以新增一个模块能够带来的最小性能提升为基准反向推导出触发阈值。这个方法不完美但比拍脑袋定一个固定数要靠谱得多。4.2 第二个问题长出了新 Adapter怎么知道谁该被激活模型里可能有多个 Adapter 模块输入一张图片时不可能全部激活否则计算量爆炸模块之间的响应也会互相干扰。SEMA 引入了一个简单的路由机制每个输入样本会根据其特征嵌入与各个 Adapter 模块原型向量的相似度选出最相关的 1 到 2 个模块激活。路由机制听起来不复杂但在设计时需要特别注意三个细节。一是路由本身不能参与 Adapter 的训练更新否则路由会逐渐趋同所有样本都指向同一个模块失去“按需”的意义二是新初始化的模块在一开始不应参与路由竞争它有大约一个热身期的保护三是路由判断的特征最好来自主干浅层避免深层特征已经高度任务化后不具备跨任务可比性。4.3 已有模块和新模块如何隔离又如何协作模块隔离是防止“新旧能力互相污染”的关键也是持续学习场景下的核心问题。SEMA 给出的策略可以归纳为两条空间隔离和时间隔离。空间隔离强调不同 Adapter 模块的参数存放在不同子空间彼此之间没有被强制共享的中间层时间隔离则表现为重复训练时的交替冻结——新模块训练时旧模块的参数保持冻结当前模块稳定之后路由参数才会进行一次整体微调。这套策略我之前在其他持续学习项目里也用过但 SEMA 把它和动态生长机制组合在一起后效果要稳定得多。协作主要体现在推理阶段的特征叠加多个模块被激活时它们的输出会按照路由权重加权再合并。为了防止加权平均导致特征被“稀释”SEMA 推荐使用加权拼接而不是加权求和两个支路的特征先各自归一化拼接后再经过一层线性压缩。这个细节改起来很便宜但真能带来几个点的精度提升。4.4 模块数量的上限无限生长不现实剪枝和合并是必须的虽然 SEMA 强调“按需生长”但没有任何系统能无限添加模块。模块数量增长到一定程度内存占用变大路由判断变慢特征组合空间爆炸最终得不偿失。所以 SEMA 的完整方案里必须包含模块管理机制当已有模块在连续一段时间内样本激活率低于阈值说明它已经失去代表性考虑冻结或移出候选集当两个模块的参数相似度极高、在验证集上的表现也高度相关时系统会建议合并这两个模块由合并后的新模块重新学习一段短时间。这种动态平衡的设计才让“生长”不会变成“失控”。5. 落地时需要注意的几个坑从论文思路到实际项目5.1 不是每个场景都适合按需生长处理好任务边界的识别SEMA 最适用的场景是任务边界相对清楚、新任务会分批次涌入的情况。如果你的任务根本不分批所有数据混在一起滚进来模型每天都要连续决策是否新增模块那么路由和触发的稳定性就面临巨大挑战。我的建议是在项目初期人工定义好任务边界或者至少设置一个最小数据积累周期。比如每积累满 2000 张新类别数据才允许触发一次生长判断避免单个异常 batch 导致模型抖动式生长。引入这个缓冲机制之后模块平均数量明显收敛重复模块大量减少。5.2 触发信号别只依赖置信度多加一个特征分布指标更稳我测试过只拿置信度作为触发信号的做法效果不太好。深度模型的置信度本身就是校准不到的尤其当输入样本落在分布外时模型经常给出高置信度的错误预测。只用置信度判断会漏掉很多真正需要扩展能力的情况。后来我在触发机制里额外加了一个指标输入样本特征与模型已备份的“代表性特征库”之间的最近邻距离。如果距离超过阈值即使置信度看起来还行也会被判定为潜在的新知识。代价是需要额外存储一些特征向量内存开销一般几百 MB大多数项目都承受得起收益却很值得。5.3 新模块的训练节奏先冻结路由再部分解冻最后整体微调新 Adapter 刚初始化并插入模型时最稳妥的训练节奏是分三个阶段。第一阶段新 Adapter 的参数先学习如何拟合当前任务数据此时路由参数和主干参数完全冻结第二阶段当新 Adapter 在验证集上达到一个基本可用的精度后再逐步解冻与新模块相关的路由参数让样本能在新旧模块之间自然分配第三阶段才考虑整个候选模块集合的联合微调这一步要谨慎控制学习率一般设为基础学习率的 0.1 倍。这套节奏在多个任务上验证下来稳定性比直接端到端联合训练好很多。直接联合训练很容易出现一个后果新模块还没学好旧模块的路由已经被带偏最后老任务和新任务同时掉点。5.4 与量化、剪枝等优化手段的兼容性别到头来白折腾现在部署视觉模型几乎避不开量化或剪枝。SEMA 动态生长的 Adapter 和这些优化手段的兼容性需要提前验证。我的经验是主干模型可以先量化完成再冻结Adapter 模块保持浮点精度运行单独量化如果推理引擎不支持同一模型不同模块不同精度那就做一个预处理工作把主干中间层输出缓存下来Adapter 单独走一个轻量级推理路径。这件事做不做直接决定上线后的性能表现。我见过有团队把 Adapter 和主干一起量化结果新模块的精度掉得比全量微调的基准还差排查了很久才发现是量化误差在旁路合并时被放大了。量化的敏感性分析不要省专治这种隐性坑。5.5 评估机制要重新设计不能只看整体精度还要监测旧任务的表现最后说评估。动态生长模型和生产系统需要的评估体系和普通模型不一样。你不能只盯着整体测试集上的平均精度那样会把旧任务上的些许退化掩盖在新增任务的亮眼表现里。我建议做两张表一张是新任务性能表记录每次新增 Adapter 后的精度、召回、推理延迟另一张是旧任务回归表用一套固定的历史基准集持续监测每当触发新模块生长或者路由调整时跑一遍回归集观察有没有掉点。我在项目里还把回归表做成了自动化流程每次模型版本更新都要过一遍任何旧任务精度下降超过一个设定阈值该版本就不能上线。这样做虽然增加了不少验证工作量但它能在 SEMA 这类持续学习系统中守住最重要的一条底线模型可以变强但不能变“失忆”。从整个方案来看SEMA 并不追求用一套复杂的全新架构去替代主流预训练模型而是把“模型什么时候该长大”这个问题直接摆到桌面上有信号就长模块没信号就保持原样主干永远作为记忆底座。这种思路对生产环境尤其友好。我自己实际测试下来它最大的价值不是提升了多少精度而是让网站在面对新需求时不需要再反复经历“全量重训—评估—上线”的漫长折腾也让我手里的旧模型真正变成了一块可以持续升级的基础设施。如果你正被“又该换模型了”这个问题反复折磨不妨先别急着换发动机试着看看到底该给模型加一个什么样的 Adapter 模块。
延伸阅读

更多相关文章

2026/10/1 16:12:03

软件测试简历包装:从十秒初筛到面试追问的实用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 16:12:03

HSV与HSL颜色空间全解析:从原理到图像识别实战

做图像处理这几年,我踩过最不值当的坑,就是拿RGB通道直接去识别颜色。有一回做一个交通信号灯的识别demo,代码逻辑简单得不能再简单——红灯就判断R通道大于150、G和B小于100。中午在实验室测得好好的,跑到傍晚的十字路口&#xf…

2026/10/1 16:07:02

RL训练规模放大为何总翻车?mimo-v2.6强化学习scaling实验全记录

1. 为什么RL scaling值得单独拿出来聊 做强化学习训练的人大概都有过这种体验:小规模实验跑得挺漂亮,reward曲线稳步上升,评估指标也好看,可一旦把模型参数、并行环境数、batch size往上翻几倍,整个训练就开始"抽…

2026/10/1 17:12:07

多任务YOLOv8实战:检测、可行驶区域与车道线分割一网打尽

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 17:12:07

稀土为什么能够改变材料性能?从4f电子到催化成炭

在钢铁中加入少量稀土,可以改善韧性;在铝合金中加入稀土,可以细化晶粒;在永磁材料中加入镝、铽,可以提升高温稳定性。稀土用量通常很少,却能显著改变材料性能,原因要从它的电子结构说起。4f电子…

2026/10/1 17:12:07

发个朋友圈还要定闹钟?微信定时发圈一次说清

先说清楚:微信本身没有定时发圈这个功能。所以不想再定闹钟、设置消息提醒自己该发朋友圈了,定时发圈就是最优解。定时发圈要解决的就是两件事:把“记住要发”和“到点去发”,全交给系统。你花十分钟,把今天要发的内容…

2026/10/1 17:12:07

无限大核心玩法是什么 无限大核心玩法介绍

不少玩家在预约无限大之后,最关心的问题就是无限大核心玩法到底是什么。简单来说,无限大核心玩法围绕“都市开放世界多角色切换载具驾驶”三大支柱展开,既有高楼摆荡的立体移动,也有追车射击的公路战。为了在电脑上体验这种高自由…

2026/10/1 17:07:07

Symfony Console 命令 Markdown 描述与多字节字符支持深度解析

后端Web框架 【免费下载链接】symfony The Symfony PHP framework 项目地址: https://gitcode.com/GitHub_Trending/sy/symfony 点击查看 免费下载 文章导读 本文聚焦 Symfony Console 组件中命令描述符(Descriptor)的 Markdown 输出格式&a…

2026/10/1 5:21:14

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/1 17:09:46

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 10:48:55

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑