多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

PL-CS无监督元学习:聚类友好特征与语义感知伪标签如何反超SOTA?

PL-CS无监督元学习:聚类友好特征与语义感知伪标签如何反超SOTA? 这个标题我第一眼看到就有点坐不住了——TPAMI武汉大学和澳门大学合作无监督元学习反超有监督SOTA。这几个词放在一起本身就是一个非常强的信号视觉领域的无监督方法虽然这几年声势很大但在元学习这个偏小样本的分支里能正面刚赢有监督方案而且登上了TPAMI这种级别的地方确实值得认真拆一拆。PL-CS这名字乍看平平无奇但拆开来看聚类友好特征和语义感知伪标签都是这两年无监督表征学习和伪标签方向的核心命题。这篇文章不打算停留在论文摘要式的复述我会以从业者的视角把PL-CS到底解决什么问题、设计逻辑是什么、为什么能赢、以及如果你想复现或者借鉴这套思路有哪些实际操作的要点和坑一次讲透。1. 背景补课无监督元学习到底在跟什么问题较劲我们先把坐标系拉直。元学习或者说Meta-Learning本质上是让模型学会如何学习。传统的监督学习做的是在一个数据集上学习一个映射函数元学习则是在一堆任务上学习通用的先验知识希望模型快速适应新任务。少样本分类Few-shot Classification是元学习最常见的载体给你一个N-way K-shot的支持集比如5类每类5张图模型要根据这几张图学会分辨新类别的query图片。有监督元学习的前提很奢侈训练阶段就需要大量带标注的任务。每个episode都由人工标注组成背后是昂贵的标注成本。无监督元学习的初衷很简单——能不能完全不要标签直接从大量无标注数据中构造出成千上万个训练任务来完成元训练这样标注成本和人力开销大幅消减数据来源几乎是无限的。想法虽然很美但坑也深得吓人。第一个坑是怎么从无标签数据里造出任务来。造任务的前提是能区分出不同的类没有标签就意味着必须先对数据做聚类或者其他形式的隐式类别划分。第二个坑是聚类结果和真实语义类别大概率是错位的。你聚出来的簇可能只是低级纹理或者颜色分布上的相近而不是语义层面的类。在这个基础上训练的元学习器学到的东西能不能迁移到真实标注的任务上就得打个大大的问号。我一直觉得无监督元学习这整个研究方向本质上就是在跟伪任务的质量作斗争。伪任务的质量高最终学到的先验就可靠伪任务的质量差那不管框架多花哨结果基本都是自欺欺人。PL-CS这篇工作核心贡献也就是围绕这个问题展开的一个是从特征层面入手让聚类本身变得更可靠另一个是从伪标签生成层面入手让任务划分更符合语义。2. 整体设计思路PL-CS是怎么把无监督任务质量拉起来的PL-CS的完整名字拆开看就是Pseudo-Label with Clustering-friendly Space也就是聚类友好空间下的伪标签生成。整个方法的思路可以概括成一条链先通过无监督表示学习得到一个特征提取器接着对这个特征空间施加强约束让特征分布呈现出类内紧凑、类间离散的聚类友好形态之后在这个空间里做聚类并生成伪标签再基于伪标签构造元学习任务进行训练。2.1 为什么通用特征不够用聚类友好特征的必要性你可能会想直接用对比学习比如SimCLR或MoCo训练出来的特征拿来聚类行不行能跑但效果往往不如人意。对比学习教出来的特征确实学到了一定程度的不变性比如对平移、裁剪、色彩变化的鲁棒性。但它不是专门为了让特征分布呈现紧致的簇结构而设计的。特征虽然可分性尚可但类内距离和类间距离的比值不够理想簇边缘模糊加上对比学习特征常常存在所谓的排列各向异性问题也就是特征分布在一个狭窄的锥形区域这个区域里直接做K-Means聚类效果很不稳定。PL-CS提出聚类友好特征意思很明确——我不要一个差不多能用的特征我要的特征是专门为聚类服务的。具体目标有三个类内距离被压缩同簇样本在特征空间中彼此靠拢类间距离被拉大不同簇之间存在明显的间隔带整体特征分布尽量避免退化确保不同方向上的方差都足够均匀避免落到一个退化的低维子空间这也是我看完整篇文章觉得最贴近实际痛点的地方。很多做无监督的团队训练完特征提取器后直接调SKlearn的K-Means效果不好就在聚类参数上反复试很少有人回头想是不是应该把特征空间本身改造一下。PL-CS的价值恰恰是把矛头指回了上游——让你在特征层面就开始为下游聚类铺路。2.2 语义感知伪标签从分得开到分得对有了聚类友好的特征聚类结果的簇间可分性会好很多。但光可分还不够伪标签还得语义上合理。这个语义感知四个字是PL-CS这名字里另一个重要的侧面。聚类是无监督的它只能告诉你这批样本是一簇那批样本是另一簇却没办法告诉你这一簇对应真实世界里的哪个类别。而无监督元学习构造任务时恰恰需要把聚类簇当成伪类别分配支撑集和查询集。如果某一个簇内混入了大量语义不同的样本比如把猫和狗混在了一个簇里那么这个伪类在元训练中就会传递错误的信号。语义感知伪标签的做法大致是在生成或者修正伪标签时不光看样本的绝对特征归属也会结合局部邻域关系和原型一致性来判断。说得再直白一点聚类生成初始簇后再经过一个语义一致性校验的环节把那些跟簇内核心原型特征差异过大、或者邻域中归属混杂度高的样本剔除掉或者重新分配让每一个伪类尽可能对应一个相对纯的语义群组。我个人的理解是这一步本质上是在用局部的特征流形结构来修正全局聚类的偏差。全局聚类看的是宏观的空间分布而语义感知机制看的是微观的样本关系两者可以互相校正。3. 核心细节拆解PL-CS到底是怎么实现两阶段目标标题里的聚类友好特征语义感知伪标签听起来是两块独立的东西但真正设计过框架的人都知道难得不是某个模块单独怎么实现而是怎么让这两个模块咬合起来。3.1 聚类友好特征的训练目标怎么定在无监督表示学习阶段PL-CS采用的思路是在对比损失的基础上叠加聚类友好性的约束。具体来说常见的做法是引入一个聚类损失比如让样本特征向它所属簇的原型族的中心向量或者原型的可学习嵌入靠拢同时叠加一个散度项防止所有样本都坍缩到同一个点。这里有一个训练上的关键点聚类和特征更新必须交替进行不能一步到位。如果先用固定的特征做一次聚类然后让特征去拟合这个聚类结果容易陷入聚类结果很差特征越学越差的恶性循环。PL-CS采用的方式是通过一个滑动更新的机制让聚类中心和特征表征协同演化同时利用一些正则化项保证特征空间的维度不会退化。这个设计思路在无监督领域里不算特别罕见但能在元学习的任务构造环节上产生了实质性的收益这个组合确实是少见的。为什么正则化维度退化这么重要因为聚类算法非常讨厌退化空间。如果特征向量都落在一条直线上K-Means等距离度量就几乎失效了随机的初始化方案也会让聚类结果天差地别。PL-CS针对这一点做了很细致的设计从损失函数的结构上保证特征提取器输出在超球面上分布相对均匀并保持足够的方向多样性这为后面的聚类牢牢兜了底。3.2 伪标签任务构造的完整流程有了高质量的聚类友好特征和语义感知伪标签接下来就是元学习框架标准的三步走在无标注数据集上训练特征提取器让特征空间满足聚类友好要求对特征做聚类生成带语义感知修正的伪标签基于伪标签构造N-way K-shot元学习任务用标准元学习算法比如类似ProtoNet的度量学习方式或者基于梯度的MAML做元训练步骤3里有一个细节值得展开。无监督数据聚类出来后簇的数量通常会远大于真实类别数。因为无标签数据里面天然存在细粒度子类划分、场景差异等因素。PL-CS的做法是先通过聚类质量评估筛掉不可靠的簇在剩余的高置信度簇中随机采样构造任务。这个簇类数量的控制是经常被忽略但影响很大的细节——如果簇太碎了任务难度太低学到的先验不鲁棒如果簇太大太混任务噪音太强学到的先验偏离真实语义。PL-CS的策略相当于给任务构造做了一层质量控制让进入元训练的每个任务都相对扎实。3.3 两阶段不是简单串联加入毫msi自己的一贯理解。PL-CS给我的感受是这论文看起来是两阶段但实际上阶段之间并不是孤立的。特征提取器的训练目标里就已经包含了对未来聚类过程的可适应性而聚类过程产出的伪标签质量又反过来指导了特征空间的调整方向尤其是在迭代式的协同优化过程中。这两个组件形成了一个闭环优化回路越转越准越近越好。这种整体设计视角比纯粹在标签生成环节打补丁的方案要高明得多。4. 实验与效果反超有监督SOTA反超了多少、凭什么标题里最刺眼的四个字就是反超SOTA。说这话容易做起来难。尤其是元学习这个领域的有监督强基线非常多ProtoNet、MAML、ANIL以及一大堆后续变体的成绩都很扎实。无监督方法要在同样准确率口径下与它们正面对抗难度非常高。4.1 实验设置与基准选择PL-CS的实验主要在标准的少样本分类benchmark上进行包括miniImageNet、tieredImageNet、CIFAR-FS这些主流数据集。测试设置是标准的5-way 1-shot和5-way 5-shot。这类设置的关键在于训练类别和测试类别完全不相交这意味着模型必须真正学到可迁移的先验而不是记住训练类别的知识。在无监督元学习这个赛道里跟PL-CS对比的方法就包括UMTRA、CACTUs、PPA、PSST等一系列前期知名方案。在横向对比维度上PL-CS的有效性体现为不仅在无监督方法中拿下了最领先的成绩而且还能进一步拉平和超越有监督的上限。4.2 从数值到洞察为什么无监督能赢有监督从我看到的结果来看PL-CS在多个数据集上的5-shot设置下都实现了对典型有监督基线的一致超越。1-shot设置下两者的差距比较接近部分设置下PL-CS也能保持微弱优势。当然我目前手头没有完整论文的精确数值表所以这里不做具体数字罗列但趋势信号是明确的。真正值得深思的是为什么一个完全没有标签的方法在预训练数据规模接近的情况下能打赢利用标签的对手我觉得可以从两个角度解释这两个角度对实际工作的参考价值也更大第一标签是一种稀疏且含噪的监督信号。人工标签虽然语义准确但一个数据集里每张图片只有一个标签这张图片内部的丰富结构在监督训练中被大量浪费了。PL-CS走的无监督表征路径反而可以利用每个样本本身的信息以及样本之间的关联结构把信息挖掘效率提升一大截。有监督预训练在这方面的优势是准确率信号劣势是信息的覆盖密度。第二无监督任务可以无限生成。有监督元学习受限于标注类别数任务的组合多样性其实是有上限的。而无监督方法只需要在特征空间里反复聚类、采样任务能拿到的任务组合量级比前者大出不少。多样化的任务对学到一个鲁棒的元先验帮助是非常明显的。这其实给做工程应用的人提供了一个非常重要的启发——标注成本高的时候不要急着砍数据量换一个不需要标注的预训练方式可能是更快走向可用模型的路。4.3 消融实验中最值得看的部分学术论文里我最爱看的部分就是消融实验因为它是判断设计决策可靠性的照妖镜。PL-CS的消融实验从我的经验推测会覆盖以下几个关键维度如果去掉聚类友好特征单纯用通用对比学习特征精度会掉多少如果只用聚类结果不加语义感知修正精度又会掉多少聚类簇数量和任务采样策略对结果的影响曲线等等这类消融实验最大的价值在于它可以反向确认论文里的每一步设计都对最终结果有真实贡献而不是堆了一堆复杂组件后只靠某一个模块出成果。这正是我判断一篇方法类论文含金量的核心依据。5. 实操视角复现要点和参考落地的避坑指南论文的价值不仅在于idea还在于别人能不能复现、能不能用起来。按照我平时把论文转成线上逻辑的经验PL-CS这类工作有几处特别容易让人踩坑的现实问题这里集中梳理一遍。5.1 特征维度与聚类算法选择我先说结论在高维特征上做K-Means要非常谨慎。特征维度几百甚至上千时K-Means迭代的时间成本和受初始化影响的敏感度都会被放大。我建议的做法是先对特征做PCA白化降维比如降到128维或256维然后再接聚类。这个方案既能保住绝大部分结构信息又大幅提升聚类稳定性。我不知道PL-CS官方实现里有没有做类似的降维处理但如果是自己复现强烈建议先测一下降维前后的聚类纯度指标和训练稳定性差别差距很可能大得超乎想象。5.2 聚类簇数量怎么定这是一个几乎所有无监督工作都会遇到的死亡问题聚类簇数量K怎么选。选得大了簇碎任务简单选得小了簇混任务语义不纯。PL-CS的方案思想是从数据本身去猜测合理的K范围结合簇内相似度和簇间区分度来做权衡筛选。落地层面也可以操作得简单一点在特征空间里对不同K值跑聚类用Silhouette Score或者簇内平均距离曲线来做预筛再结合元学习验证集的代理任务表现做最终定夺。工程里面真实数据分布往往非常长尾想一次性把K定准几乎不可能所以做好K的区间扫描和敏感度分析比直接定K值更重要。5.3 数据增强对伪标签质量的影响很多人做无监督元学习会忽略一个事数据增强不仅影响特征质量还会直接影响伪标签的质量。强增强比如随机裁剪、颜色抖动这些可以让特征的学习更鲁棒但也可能让聚类的局部结构被过度扰乱进而影响语义感知伪标签的判定。PL-CS给我的启示是不同阶段的数据增强策略要有差异。表示学习阶段可以下猛药怎么增强鲁棒怎么来伪标签修正和聚类阶段则建议减弱增强强度尽量保留特征空间里容易辨识的结构关系不然语义感知模块会拿到一个过度搅浑的邻居关系图。5.4 从头训练还是加载预训练模型如果你真的要在自己的业务数据上复现PL-CS这个框架我建议关注一下初始权重的问题。论文框架里的特征提取器如果是从零开始训练的那么聚类的质量和表示学习的收敛速度会有非常高的耦合。工程上更稳妥的操作是先用一个大规模通用数据集比如ImageNet或者更大的自监督表征模型拿到一份初始权重再在你的目标无标签数据上做PL-CS的微调训练。这个做法听起来不够端到端但实测下来稳定性要高不少而且最终效果的方差也会小很多。5.5 常见问题速查表常见问题可能原因排查/解决建议聚类结果反复横跳不同随机种子结果差很大特征空间退化、K-Means初始化不稳定PCA降维、多跑聚类取稳定解、提高聚类友好特征约束权重伪标签任务训练后迁移到真实标注任务效果下降伪标签语义纯度不够加强语义感知修正、适当提高簇置信度阈值、降低噪声簇的采样率1-shot设置提升明显5-shot设置卡住不动任务构造的类内多样性不足增加任务内样本增强强度或者减少过碎的簇参与构图训练开始阶段损失正常几十轮后开始发散聚类中心与特征更新不同步检查聚类中心更新频率适当降低特征更新的学习率5.6 消费级硬件上的可行性最后说一个跟落地强相关的问题这类方法到底能不能在单卡消费级GPU上跑得动以我的实际经验来看大部分学术无监督元学习的代码是在V100或A100上调试的但PL-CS这种框架的显存压力并没有想象中那么大。特征提取器的Backbone通常用ResNet级别不会上Vision Transformer那种猛兽。伪标签聚类和任务采样的开销主要集中在CPU端GPU显存消耗更多是在元训练阶段。如果你手头有一张24G显存的显卡把Batch Size适当调小把图像尺寸控制在合理的范围内完整复现基准实验是可行的耗时肯定长一点但不是不可能。6. 对后续研究和应用的思考这套思路能搬到哪里去好的论文读完之后最要紧的是看看思路能不能迁移。PL-CS这套东西名义上是无监督元学习但它的底层思想其实拥有更广泛的适用面。6.1 伪标签在自训练场景下的新解法伪标签这个概念在自监督和半监督领域里几乎是无处不在。PL-CS给出的特征尽量聚类友好伪标签语义感知修正这样一个组合策略对任何需要大规模生成伪标签的场景基本都适用。比如果要做通用的检测模型预训练或者做大规模无标签数据的检索系统特征训练都可以参考这个思路来改造自己的伪标签生成管线。6.2 冷启动少样本模型快速部署工业界经常遇到一种情况——新业务上线时没有足够的人工标注数据来做模型训练老板还要你两周内出一个效果靠谱的分类模型。常规做法是找通用预训练模型顶上但通用模型对业务特有分布的适配很差。PL-CS的思路可以改造成一个冷启动方案直接在业务的无标签数据上做聚类友好特征的训练生成伪标签后再用元学习的少样本快速适配能力去支撑未知新类。这套组合能在不用任何人力和标注成本的前提下拿到一个明显优于通用预训练的冷启动模型。6.3 面向多模态数据的再扩展如果说PL-CS这套框架允许有下一步扩展我觉得最顺的方向是多模态或跨模态的语义感知伪标签。当数据不只有图像还有文本、音频时语义感知的定义就要从特征聚类一致性升级到跨模态语义一致性。比如图像特征聚类出来的簇可以去跟OCR文本或图文对中的文本语义做对齐校验这种伪标签生成策略在某些场景下会比纯视觉聚类可靠得多。这个扩展在理论上的自洽性很强而且目前业界对无标签跨模态数据的需求正在快速增长是一块值得投入的土壤。7. 方法论层面的心得与几点争议思考最后说一下我读完这份工作之后觉得值得圈出来的方法论启示也聊一点我觉得存在讨论空间的地方。先说启示。PL-CS最打动我的不是某个花哨模块而是它把一个看似无解的问题——无标签造任务质量差——拆解成了两个可优化、可度量的子问题特征空间适不适合聚类、伪标签语义纯不纯。这种拆解能力本身就是研究者最核心的竞争力。在实际工程项目里同样适用你遇到的很多算法效果不达预期的问题表面上是一团乱麻但如果把系统拆成特征、采样、标签、目标函数几个环节逐个定义度量指标定位问题往往不需要依赖什么高级办法只需要确认瓶颈在哪一个环节。再说争议。PL-CS在无监督meta-learning里用特征聚类构造任务这个设定会不会把任务分布做窄了因为聚类得到的簇通常都是模态内分布比较规整的那部分数据真实世界里的类别边界往往是模糊的。这个问题可能会导致方法在某些分布剧烈变化的数据上泛化能力打折论文里可能不会交代得特别透底。另外聚类友好特征和语义感知伪标签这套双模块机制虽然实验数据漂亮但模型的可解释性和对超参数的敏感性还需要更充分的讨论。这些不是否定这篇工作而是提醒准备深度借鉴这套思路的人——不要全部照搬一定要结合自己的数据特性做适配性改造。按我的经验这类论文对做工程的人来说最大的价值其实就是提供了多一次重新审视自己pipeline的契机。我见过太多团队花大力气调伪标签阈值却从来不关心自己 backbone 输出的特征空间是否适合聚类也见过太多团队迷信有监督预训练的强大却在标注成本面前进退两难。PL-CS的整套设计给出了一个思路上的突围样板——用特征设计语义校验绕开对人工标签的依赖这条路完全有可能成为未来少样本低成本应用落地的主流范式之一。如果你正在做无监督表征、少样本识别或者手头有大量的无标签数据不知道怎么用起来PL-CS这篇论文值得花一个下午精读。读的时候带上三个问题它的聚类友好损失到底改变了我特征空间里的什么结构它的语义感知伪标签修正边界在哪里如果换成我的数据第一步从哪个环节开始试把这三个问题想清楚这篇论文能带给你的价值会远远超过标题里反超SOTA这四个字本身。
返回列表