
多模态融合这几年的热度相信做AI的小伙伴都有体感。我自己的感受是单模态模型做到一定程度瓶颈会非常明显你拿文本建出来的用户兴趣画像总是缺一块你拿图像训练出来的内容理解模型换个场景就不够用。真正能把产品体验拉上一个台阶的往往是那些把文本、图像、声音甚至行为数据协同起来用的方案。这篇东西就是想把多模态融合和协同建模这条技术线从头梳理一遍从最基础的概念到实际可以落地的架构选型、训练技巧、避坑经验都写清楚适合刚入门想建立完整认知的读者也适合已经做了几个单模态项目、准备往多模态方向转的工程师。文章不会堆一堆学术名词就完事我会把我实际做项目时踩过的坑、反复验证过的配置、以及思考问题的方式都放进来。你跟着走一遍至少能建立起一套自己的多模态方案设计框架。1. 为什么现在都在谈多模态融合场景、瓶颈与信息增量1.1 单一模态天花板一个推荐场景的翻车现场先讲一个我自己经历过的案例。某社区类产品要做内容推荐一开始团队只用了文本特征标题、正文、标签跑的是比较经典的序列召回加粗排模型。效果上线后整体指标还行但有一个问题一直解决不了——用户对纯图文型内容和视频封面型内容的消费反馈模型完全分不开。很多用户看了封面图觉得很有意思点进去才发现内容不行甚至有人连续点了几次低质内容之后直接流失。后来我们把封面图、视频抽帧、还有作者历史行为数据一起灌进模型事情才开始变化。最明显的改观是模型终于能学到封面吸引人但内容质量差这一类组合模式了CTR预估的AUC有接近两个点的提升。这件事给我的触动很大不是文本特征不好而是单模态能承载的信息量在复杂真实场景里根本不够用。这就是多模态融合最朴素的动机——单一模态存在天花板多模态能带来增量信息。但增量信息不是白来的怎么把不同模态的特征协同起来让它们互相补充而不是互相干扰这才是协同建模要解决的核心问题。1.2 多模态的本质信息冗余与信息互补聊到多模态很多人第一反应是把图片和文本的特征拼在一起不就行了。但真正去做了就会发现问题没那么简单。这里有个关键概念需要先建立起来。多模态数据之间存在两种关系信息冗余和信息互补。信息冗余指的是不同模态描述的是同一件事的同一个方面。比如一张猫的图片配文是一只橘猫在晒太阳图片里能看到橘猫文本里也写了橘猫这个信息是重叠的。冗余信息的作用是让模型对某一事实更确信比如说图片模糊看不清的时候文本能帮它确认这确实是猫。信息互补则是指每个模态提供了其他模态没有的信息。还是那张图图片能看出猫的毛色、姿态、环境光线但光看文本你不知道猫具体长什么样文本可能告诉你这是邻居家那只叫胖橘的猫光看图片你得不到这个名字信息。互补信息才是多模态融合最大的价值来源。理解这两者的区别很重要因为它直接决定了你该怎么设计融合策略。如果两个模态大部分是冗余的那简单拼接可能就够了模型自己能学会去忽略重复部分。但如果两个模态互补性很强比如文本是用户评论、图像是商品图片那你就得设计更精细的交互机制让模型主动去找两个模态之间的关系而不是被动地等它们被拼在一起。1.3 两个模态到N个模态难度不是线性增长很多人以为从双模态扩展到三模态、四模态就是多加一路编码器的事这是另一个常见的认知误区。难度增长不是线性的是指数级的。双模态时你需要处理的关系只有一种A和B之间的关系。三模态时关系变成了四种A-B、A-C、B-C以及三者共同作用的关系。到四个模态关系更多而且模态之间会有冲突、缺失、噪声问题。更麻烦的是真实数据里不是每个样本都有完整的所有模态。视频没有文本描述怎么办评论缺失怎么办音频噪声太大能不能丢弃这些问题的背后其实是一个协同建模的本质挑战如何在模态不完整、质量参差不齐的情况下依然让模型学到稳定的跨模态表示。这也是为什么现在越来越多的工业级方案开始把模态缺失鲁棒性直接纳入训练目标而不是等上线之后再去补救。2. 协同建模的四大技术流派对齐、融合、协同、生成2.1 模态对齐让不同模态的数据对表模态对齐是多模态协同建模的第一步也是最重要的一步。它的目标很朴素把不同模态的表示映射到同一个语义空间里让模型知道图像里的这个区域对应文本里的哪个词。举一个生活化的例子。你和一个外国朋友聊天你说中文他说英文为了让你们能顺利对话需要一个翻译在中间把你们的话语义对齐。模态对齐做的就是翻译这件事——语言模型里的猫这个词的向量表示和视觉模型里猫这个物体的特征表示本来是在两个完全不同的向量空间里模型看完文本根本不知道猫长什么样看到图像也不知道猫怎么读。对齐要做的是通过某种训练方式把这两个向量空间拉近让语义相近的内容在表示空间里的距离也相近。对齐有不同的粒度。粗粒度是全局对齐把整张图和整段文本映射到一起比如很多跨模态对比学习模型做的事常用于图文检索。细粒度是局部对齐要建立图像区域和文本片段之间的对应关系这个会复杂很多但能力也更强常用于视觉问答、指代表达理解。粒度选择取决于你的下游任务。做搜索排序全局对齐可能就够了做细粒度内容理解就得考虑局部对齐。2.2 特征融合从拼接、加权到注意力交互对齐解决的是能不能对上的问题融合解决的是对上之后怎么用的问题。融合策略可以按交互深度分成三个层级。早期操作是简单拼接把图像特征和文本特征直接在向量维度上拼起来然后丢给下游MLP分类器或者排序模型。这种方式实现成本最低在很多工程场景里也能用它的问题在于模型没有主动交互的机会两个模态的信息只是简单并列融合后的特征对复杂关系表达能力偏弱。再进一步是加权融合。给不同模态的特征乘上权重再相加权重可以是固定的比如根据经验设定图像占0.7、文本占0.3也可以是通过一个小网络学习出来的动态权重。比固定权重更实际的做法是引入注意力机制让模型根据当前输入动态决定该更看重哪个模态。最高层级是现在的主流跨模态注意力交互。文本里的每个词都去看图像的每个区域计算出它们之间的相关性然后用这个相关性去更新各自的表示。这就是Transformer架构能做多模态深度融合的关键能力——自注意力机制天然支持Token之间的任意交互不再区分模态边界。你在网上看到的各种多模态预训练模型底层结构基本都是这个思路。2.3 协同学习跨模态蒸馏与互信息最大化如果说对齐和融合更多是模型结构层面的设计那协同学习更接近训练目标层面的手段。它的核心思想是用模态之间的相关性作为监督信号让一个模态的模型从另一个模态中学到知识。最常用的手段之一是跨模态知识蒸馏。原理不复杂用一个强的模态比如文本因为预训练语言模型的语义理解能力通常更强去教一个弱的模态比如图像特征编码器如果它没经过大规模预训练。具体做法是把同一个样本的文本表示和图像表示都算出来然后在训练时加一个损失项要求图像表示的输出尽量接近文本表示的输出。这样图像编码器就不再只是从图像像素里学特征了它还能间接学到语言模型对语义的理解。另一个技术路线是互信息最大化。信息论里互信息衡量两个变量之间的相关性有多少。在协同建模里我们希望不同模态的编码器输出的表示彼此之间的互信息尽量大——换句话说我们希望无论输入的是文本、图像还是声音模型能捕捉到它们背后共同的底层语义。实现方式通常是用对比学习让正样本对文本和它对应的图像在表示空间中尽量靠近负样本对文本和随机采样不相关的图像尽量远离。这种训练方式在图文检索、跨模态推荐里效果特别明显。2.4 多模态生成从理解到创造前面说的分类、检索、推荐都属于理解类任务本质是把多模态输入压缩成一个结果。多模态生成是反过来的输入一种模态的信息去生成另一种模态的输出。最典型的例子是文生图、图生文图像描述以及最近的各类多模态生成应用。生成和理解的难度差别很大。理解只需要判断这个图像和文本是否匹配生成需要真正无中生有地构建出一个完整的输出。但底层用到的协同建模原理是相通的生成模型里面同样有模态对齐文本里的单词要对应到图像里的特征位置、有协同学习去噪目标和语义对齐目标一起优化。我给入门同学的建议是先吃透理解和检索这一类判别式协同建模再碰生成式。因为生成式的训练难度、显存开销和调试复杂度都高很多而且很多技巧需要你对底层的对齐、融合逻辑有足够直观的理解之后才能真正驾驭住。3. 三种主流网络架构与选型逻辑3.1 双塔结构解耦、高效、易扩展双塔结构是工业界用得最多、也最稳的一种多模态架构。它最大的特点是不同的模态各走各的编码器互不干扰最后在顶层做交互。具体来说就是文本塔负责把文本输入编码成语义向量图像塔负责把图像输入编码成视觉向量两个向量各自归一化之后做一个向量内积或者余弦相似度得到两个模态之间的相关分数。因为向量维度一致也可以提前把几十亿条商品图像向量化存起来用户请求来的时候只算一次文本向量然后去做向量检索就可以了。双塔结构的优点非常突出推理效率高图像侧可以离线算好存起来线上只需要算文本侧大大降低延迟。扩展性好新增一个模态基本就是再加一个塔不影响现有流程。召回能力天然适配召回本来就是从千万级候选里快速筛出几百个双塔的向量检索方式正好匹配。但它也有一个明显短板模态交互太浅。两个塔最后只在顶层碰一次中间没有任何细粒度的跨模态信息交流因此很难捕捉图像中的某个局部对应文本中的某个词这种细粒度关系。所以双塔更适合做召回、粗排、大规模检索这类对性能要求高但对精度要求相对宽容的场景。3.2 单流Transformer深度融合的代价与收益单流Transformer架构走的是另一个极端把文本Token和图像Token拼成一个序列一起丢进一个完整的Transformer编码器里。Transformer的自注意力机制会让每个文本Token和每个图像Token之间充分交互理论上说这是当前市面上能实现的融合程度最高的结构。这个思路的代价也很明显。序列长度上去了自注意力的计算复杂度是平方级的。一张图切成几十个Patch一段文本切成几十上百个Token拼在一起序列长度轻松超过两三百在深层Transformer里做自注意力计算量会比双塔大好几个数量级。训练的时候显存消耗也极其夸张这也是为什么这种结构做大规模预训练的成本很高。单流结构的适用场景是那些对细粒度跨模态关系有硬需求的任务比如视觉问答需要指到图里的具体区域回答问题、细粒度图文匹配判断图文是否真的对应、多模态推理需要结合图像和文本信息推导结论。它的精度上限很高但代价是工程落地难、推理慢。实际项目中如果你想用单流结构我建议先把候选集缩小召回阶段先用双塔筛掉明显不相关的再用单流Transformer精排效果和成本就能平衡得多。3.3 混合路由结构复杂度与效果平衡双塔太浅单流太重工业界的务实选择往往是折中。常用的折中方案是底层用双塔结构独立编码各模态上层选一个小的跨模态交互模块只做有限度的注意力计算。比如图像这边经过视觉编码器得到一组区域特征文本这边得到一组词特征然后不把所有Token两两做注意力而是只做一次文本查询图像的交叉注意力用一个或两个Transformer层完成交互。这样序列长度没有爆炸交互深度又比双塔强不少。我自己在实际项目里偏好这种混合路由结构因为它的性价比最高。数据量不大、算力有限的情况它能出结果数据量上来之后它也不会成为性能瓶颈。做推荐、检索、排序这类场景混合路由往往是过拟合风险低、效果提升空间大的最优解。三种结构的选型我整理成了一张表维度双塔结构单流Transformer混合路由结构模态交互深度浅顶层一次交互深全程Token级交互中部分层跨模态交互推理效率高支持离线向量化低在线计算量大中可控性较高训练成本低高中适用场景召回、大规模检索、粗排视觉问答、细粒度理解精排、CTR预估、推荐扩展新模态难度容易加塔即可困难需重新设计中等需调整路由策略精度上限中高中高没有最好的架构只有最合适的架构。我的建议是先明确你的任务需要多深的模态交互再反推结构选型不要一上来就追最重的模型。4. 从零搭一个多模态协同模型数据、编码器与训练流程4.1 数据配对的四种来源与清洗策略多模态协同建模数据是地基。数据配对质量不好后面做啥都白搭。常见的配对数据来源大概有四种。第一种是天然配对数据。比如电商场景里一个商品详情页天然就有标题、描述文本和商品图这些是同一样本的多个视角视频网站上视频本身有画面、有对白音轨、有简介文本这是最理想的多模态数据。这类数据成本最低但噪声也大需要做对齐检查。第二种是跨模态检索类数据。通过一些弱监督方式获取比如拿一段文本的关键词去搜索引擎搜图拿到的图配文本。这种方式能快速积累大量数据但质量参差不齐语义对齐精度也有限。第三种是人工标注配对数据。成本最高但质量最可控通常用于特定任务的数据集或者用来做小规模精修。第四种是合成数据。用现有的单模态数据通过数据增强、模板渲染等方式生成其他模态的对应版本。比如给文本加一个合成的语音给图片加一个自动生成的描述。这种方式在数据稀缺的领域非常实用我自己在垂直领域项目里用过效果超出预期。数据清洗有一个核心原则先保证对齐质量再追求数据量。我见过太多团队为了凑数据量完全不筛配对的准确率最后模型训出来充满幻觉根本没法上线。清洗时至少要做这几件事文本和图像内容一致性检查可以用一个已有的图文匹配模型做一轮过滤。去除纯噪声样本图像过暗过曝、文本乱码、音频静音过长等。模态缺失情况记录哪些样本缺了哪种模态训练时要做特殊处理。4.2 分模态编码器的选择与输出对齐模态编码器的选择核心原则是优先用预训练模型尽量少从零训。多模态模型的绝大部分知识其实来自单模态的预训练编码器协同训练的职责是让它们对话起来而不是从头学语言或视觉基础。具体来说文本侧可以直接用预训练语言模型比如各种RoBERTa类的Encoder模型编码出文本特征视觉侧可以选择用视觉Transformer或者经典的卷积网络做图像特征提取。注意不同编码器输出的向量维度可能不一样所以在进融合层之前一般要对齐一下维度最常见做法是过一层线性映射。另外一个经常被忽略的点是输出位置的粒度。文本编码器可以输出全局的CLS向量也可以输出每个Token的向量视觉编码器可以输出全局特征也可以输出每个Patch/Region的特征。做成双塔做召回用全局向量就够做细粒度融合就必须保留Token级或区域级的特征供交叉注意力使用。粒度没选对融合层设计了也白设计。4.3 融合层设计一个三视角决策框架融合层的设计我建议从三个视角反复追问自己。第一个视角是信息粒度我需要哪个粒度的特征参与融合粗粒度就拼接向量、加权求和细粒度就保留序列特征做交叉注意力。任务越精细融合粒度应当越细。第二个视角是交互位置融合发生在什么时候边编码边融合还是编码完再融合前者交互更深但计算量大后者更可控但融合能力有限。混合路由通常是在中间某一层开始做有限交互这样能兼顾深度和可控性。第三个视角是决策目标融合后的特征要用来做什么是算一个相关分数还是做多标签分类还是供给下一个解码器输出目标的差异会导致融合层的输出组织方式不同。拿一个实际案例拆解一下。某短视频平台的视频封面多模态精排模型输入是视频封面图图像模态和作者写的标题文本模态。设计时选了中等粒度的混合路由视觉侧用预训练视觉Transformer输出区域特征文本侧输出词级特征然后让作者标题的每个词去对封面图的每个区域做一次交叉注意力得到标题关注的图像区域表示最后拼上全局特征送入MLP打分。为什么选这个方案而不是双塔直接拼接因为短视频场景里标题和封面的细粒度语义匹配比如标题说教你叠衣服封面某个区域确实在演示叠衣服动作对点击率影响显著简单的顶层拼接学不到这层关联。4.4 训练流程与超参数建议训练流程上我给出的建议顺序是先把各模态的编码器freeze只训练映射层和融合层让模型先学会把输出对齐到同一空间。然后解冻部分底层参数用较小的学习率对整个模型做端到端微调让编码器适配协同任务。如果数据量充足可以在第二步基础上增加对比学习辅助损失同一商品的不同图片文本做正样本随机采样做负样本能显著提升表征质量。训练中有一个非常容易踩的坑学习率的选择。多模态模型涉及多个子网络各个模块对学习率的敏感度差别很大。预训练编码器如果解冻建议学习率设在1e-5到2e-5之间新加的映射层和融合层可以放开一点用1e-4左右。如果整个模型从头训反而容易训崩。我习惯的做法是给不同模块配不同的参数组分别设置学习率。这里附一个简单的结构伪代码帮助理解整体流程class MultiModalModel(nn.Module): def __init__(self, text_encoder, vision_encoder, fusion_dim): super().__init__() self.text_encoder text_encoder # 预训练文本编码器 self.vision_encoder vision_encoder # 预训练视觉编码器 self.text_proj nn.Linear(text_dim, fusion_dim) self.vision_proj nn.Linear(vision_dim, fusion_dim) self.cross_attn nn.MultiheadAttention( embed_dimfusion_dim, num_heads8, batch_firstTrue ) self.fc nn.Linear(fusion_dim * 2, 1) # 输出相关分数 def forward(self, text_inputs, image_inputs): # 1. 各模态独立编码 text_feats self.text_encoder(**text_inputs) # [B, L_t, D_t] vision_feats self.vision_encoder(image_inputs) # [B, L_v, D_v] # 2. 维度对齐 text_feats self.text_proj(text_feats) # [B, L_t, D] vision_feats self.vision_proj(vision_feats) # [B, L_v, D] # 3. 跨模态注意力交互 attended_vision, _ self.cross_attn( querytext_feats, keyvision_feats, valuevision_feats ) # 4. 聚合与打分 text_pooled text_feats.mean(dim1) vision_pooled attended_vision.mean(dim1) fused torch.cat([text_pooled, vision_pooled], dim-1) score self.fc(fused) return score这个结构非常基础但方向上是对的先独立编码再对齐维度再做跨模态注意力最后聚合打分。你自己设计结构的时候也可以沿着这个思路去替换、扩展。训练超参数方面我再提几个经验值Batch size能大就大尤其是用了对比学习损失时负样本不够会影响训练效果。梯度累积显存不够就累积梯度但注意同步BN层不能用累积。混合精度多模态显存消耗大FP16训练是标配注意损失缩放设置。训练轮数不要盲目多训多模态模型在小数据集上非常容易过拟合重点关注验证集指标。5. 训练与评估中的坑我从四个项目里总结的经验5.1 模态缺失与噪声标注怎么处理真实场景中一个样本的模态经常是残缺的。用户在电商平台买了一支口红可能只传了一张图没有任何评论文字商品库里很多商品是迁移过来的只有文本没有原图。如果训练时直接把缺失模态的样本丢掉你不仅浪费了数据还会让模型在真实推理时遇到分布偏移。我的经验是不要把缺失当作异常要当作常态来设计。可以在编码器输入侧引入一个可学习的缺失Token嵌入当某个模态缺失时就用这个Token的输出作为该模态的表示。还有一种做法是多任务学习在训练时随机mask掉某个模态强迫模型从剩余模态中尽量恢复语义这招在模态缺失比例很高的数据集上效果极其明显。噪声标注的坑则更隐蔽。你以为两张图一组配上文本就是正样本但很可能其中一张图和文本根本就是两个话题。如果不做清洗对比学习会把错误的关联当作目标去学轻则收敛变慢重则模型学到各种幻觉关联。我的建议是训练前至少用规则过滤一遍低置信度配对训练初期的几轮结束后再取一部分难例做人工抽检看看模型到底在学什么东西。5.2 梯度失衡与收敛假象多模态协同训练最常见的训练问题是梯度失衡。几个模态的编码器能力差距很大比如文本编码器是经过海量预训练的图像编码器可能只是在一个小数据集上训练过的那文本塔的梯度就会比图像塔平滑很多反过来图像塔那边可能梯度噪声很大。合在一起优化很容易出现强的越强、弱的越弱最终融合特征完全被强模态主导。症状表现为训练loss下降挺正常但下游任务指标却不涨。我自己碰到过一种特别典型的收敛假象loss看起来已经收敛了但单独看图像塔的编码能力跟训练前比几乎没变化所有提升都集中在文本塔上。特征可视化之后发现融合层的输出主要由文本特征决定图像特征基本被忽略。解决方法其实不难观察每个模态编码器的梯度范数动态调整它们的更新权重或者给弱模态的损失项乘一个更大的系数让它的梯度相对增强。关键在于你要盯着每个模态的实际表现去调试只看总loss会骗自己。5.3 评估指标别只看单一指标多模态模型的评估比单模态复杂得多因为好的定义是多维度的。我经历过一个图文匹配项目整体准确率到了85%但分模态拆开看纯文本样本的准确率有97%纯图像样本只有69%图文样本只有55%。这个数字说明模型根本没学会跨模态匹配只是在靠文本这一个模态硬撑。如果当时只盯着整体准确率这些问题完全不会被发现。所以我强烈建议多模态模型一定要做分维度评估按模态存在情况分纯文本样本、纯图像样本、双模态样本分别评测看模型是不是有偏科。按任务难度分简单匹配、细粒度匹配、复杂推理分别统计看模型能力边界在哪里。按数据来源分不同渠道、不同质量的数据分别评测看模型的泛化能力。评估指标的划分方式决定了你能看到的问题层级。5.4 数据增强在视觉-文本协同里的特殊用法数据增强在单模态里大家都熟但在多模态协同场景里它有个容易被忽视的用途增强不同模态之间的关联强度。比如图像侧做随机裁剪、翻转、颜色抖动之后文本描述依旧应该和增强后的图像匹配。这样可以迫使模型学到不变性——不管图像怎么变语义保持一致。这种增强不是单纯为了扩大数据量而是在做跨模态的一致性正则化。另一个很有用的做法是文本侧的同义替换。将文本中的关键词替换成近义词图像不变模型需要学会意思一样但写法不同的语义等价关系。这种增强特别适合文本形态丰富的场景比如用户评论里大量的口语化表达。还要注意增强不能破坏模态间的强对齐关系。比如图像翻转后如果文本里写了在图片右侧那翻转后这个右侧就变成左侧了语义对齐被破坏反而成了噪声。所以在多模态增强里凡是影响空间位置关系的操作都要仔细想想它和文本描述会不会产生新冲突。6. 下一步扩展思路从精排到召回从图文到更多模态6.1 双塔召回与协同精排的接力配合前面主要聊的是协同模型本身的设计和训练但如果你只把它当成一个精排模型来用它的价值远没有被挖掘干净。我越来越觉得多模态协同建模的真正威力要放在召回、粗排、精排全链路里才能完全发挥。思路很清晰线上链路里头部的几十万到上百万候选集用双塔多模态模型做向量召回因为它快、能离线构建索引剩下来的几千个候选再交给单流或混合路由的协同精排模型做细粒度判断。这样整个链路既考虑了效率又保留了多模态深度融合的精度收益。实现上的核心技巧是召回塔和精排模型不要完全割裂地训练。推荐的做法是先用双塔模型产出一批候选把这些候选当作精排模型的训练样本让精排模型的训练分布尽量模拟线上实际输入分布。不然的话精排模型在训练时看到的样本分布和线上推理时的候选分布差异过大评估指标好看也没用。6.2 从视觉-文本扩展到语音、行为等多模态视觉-文本是应用最广的模态组合但不是唯一的组合。语音文本可以做会议转写和意图理解行为序列文本可以做用户兴趣建模红外可见光可以做智慧城市感知。不同模态组合的协同建模方式是有差异的但核心方法论一致先单模态编码再对齐到公共空间然后在融合层设计合适的交互机制。有一点值得强调不是模态越多越好。每增加一个模态数据配对的难度就会翻倍。某个模态如果数据量太少、质量太差强行加进来反而会拉低整体效果。我在实际项目里见过一个很典型的案例产品团队要求加入用户设备的传感器数据说能丰富场景感知但实际这个模态的数据缺失率高达60%而且噪声极大加进去之后整体离线指标不升反降最后不得不把这一路特征下线。多模态的设计决策本质上是一个信息量、数据质量、工程代价的三方权衡。某个模态能不能加进来关键看三件事第一它和现有模态的互补性有多强第二它的数据质量够不够支撑训练第三它的推理代价能不能被业务接受。这三个问题都通过了再动手也不迟。6.3 效率优化蒸馏、量化与缓存最后再聊一个工程上几乎一定会遇到的效率问题。多模态模型尤其是用了Transformer结构的那种参数多、计算量大线上推理时如果直接上原模型延迟和资源开销都很难接受。我自己常用的三板斧是蒸馏、量化、特征缓存。蒸馏的思路是用一个大的、精度高的多模态协同模型当老师去教一个小的学生模型。学生模型结构可以简化很多比如把交叉注意力层去掉改成拼接MLP。目标是让学生模型在尽量接近老师模型的输出而真实标签只在一开始起作用。蒸馏后的学生模型能在损失一点精度的情况下把推理速度提升一个量级。量化就相对常规了FP16已经是标配INT8需要小心处理激活值溢出的问题但收益很大参数显存直接砍半推理速度也能翻倍。特征缓存则是工程性思路线上场景里很多模态的特征不会频繁变化。比如一段视频的基本视觉特征不会因为用户不同而变化一个商品的基础图文特征短期也不变。把这些特征提前算好缓存起来线上只需要算用户侧的动态特征再和缓存的静态特征做交互延迟能压得非常低。这个看起来是工程优化但对协同模型的可行性影响极大——没有它很多高精度的细粒度交互方案根本跑不起线上服务。多模态协同建模这条路我觉得还会火很久。从技术发展看更强的预训练模型、更大的数据规模都还在持续刷新效果上限从业务落地看真实场景对理解复杂世界的需求始终是刚需。但不管外在技术名词怎么变核心的方法论没有变把不同模态的信息对齐、融合、协同起来逼近对事情更完整的理解。这个基本盘弄明白了换什么模态组合、换什么任务场景你都能比较从容地应对。