当前位置:首页 > 科研成果库

五张划痕照片,怎么让机器学会挑刺?聊聊小样本学习

2026-10-28 10:34:10小研科研成果库9

去年秋天,南京栖霞一家做精密零件的厂子,质量经理老周把我拽到产线尽头。他掏出手机,翻出五张照片。划痕。就这五张。“客户催着上自动检测,样本就这么点。”旁边工程师补了一句:标注的人都不够。说实话,这场景我太熟了。不是数据不够,是“坏样本”天然稀少。你等它攒够几千张,产线早换型了。

传统深度学习那套,大家都懂:喂几十万张图,模型自己长眼睛。可工业质检、罕见病影像、新品类推荐,哪有这种福气?小样本学习就是在这个缝里长出来的。它想解决的事很朴素——只给几张新类别的样本,让模型也能认。

工业质检零件表面划痕缺陷样本图工业质检零件表面划痕缺陷样本图

先别急着上模型,问题到底卡在哪

先别急着上模型,问题到底卡在哪先别急着上模型,问题到底卡在哪

很多人一听小样本,脑子里就是“数据增强一下”。旋转、裁剪、加噪声。管用吗?有时候管点用。但你把一张划痕图转八个角度,模型学到的还是那道划痕,换个光照就抓瞎。数据增强解决的是“样本多样性”,不是“类别概念”。

真正难的是:模型没见过这个类别。它得靠几张样本,推断出“这一类长什么样”。对吧,这像什么?像你给朋友看三张不同角度的柯基,然后让他在狗展上认出柯基。你没给他看一万张柯基。你给的是“短腿、大屁股、立耳”这几个特征。小样本学习干的就是这件事——从少量样本里抽特征,再拿特征去比对。

这里有个常被忽略的设定:小样本不是“训练数据少”这么笼统。学术界常说的 N-way K-shot,指的是每个任务里有 N 个新类别,每类给 K 个标注样本(支持集),然后让模型去分查询集。K 经常是 1 或者 5。听着很刺激。实际落地,K 可能小于 5,类别还可能长尾。厂里那五张划痕,连“每类五张”都凑不齐。

度量学习:把“认类别”变成“比距离”

我偏爱从度量学习讲起,因为它直觉。模型不急着输出“这是划痕”,而是先把图片压成一个向量——你可以理解成特征空间里的一个点。同类样本的点靠得近,异类样本的点离得远。分类的时候,看查询样本离谁近。

原型网络是这里面很接地气的做法。每类样本的向量求个平均,得到一个“原型”。新样本来了,算它到各个原型的距离,归到最近的那个。就这么简单。没有花哨的注意力,也没有几百层堆叠。但它有效,尤其在样本极少的时候。

小样本学习原型网络特征空间距离分类示意图小样本学习原型网络特征空间距离分类示意图

你可以把它想成相亲。介绍人给你看了几张对方的生活照(支持集),你脑子里形成一个“大概印象”(原型)。真见面的时候(查询集),你拿真人跟印象比。像不像?差多远?当然,照片选得偏,印象就歪。所以小样本学习里,支持集的质量比数量更致命。五张照片全是同一个角度,原型就塌了。

度量学习也有软肋。它默认“距离”能反映语义。可图像里的距离,常常被背景、光照、拍摄设备带偏。厂里换个光源,特征空间里的点能漂出一截。怎么办?有人加注意力,有人做特征对齐,有人干脆上预训练模型。不过话说回来,预训练模型一进来,事情就变了味——你用的到底是不是小样本学习,还是大模型微调?这俩边界很模糊。

元学习:教模型“学会学习”的套路

元学习:教模型“学会学习”的套路元学习:教模型“学会学习”的套路

度量学习是“比”,元学习是“练”。练什么?练一种跨任务的学习能力。训练的时候,不按常规把数据切成训练集测试集,而是构造一堆小任务。每个任务都是 N-way K-shot。模型见多了“给几张某类样本、分新样本”的套路,遇到没见过的新类别,也能快速适应。

这像什么?像考前刷题型。你刷的不是原题,是“这类题怎么下手”。真考试遇到新题,你有一套解题惯性。元学习里的 MAML 就是找一组“好起点”的参数,新任务来了,几步梯度就能调过去。听着很优雅。实际训练起来,二阶梯度、任务采样、稳定性,全是坑。我见过不少团队兴冲冲上 MAML,最后被调参折磨得回去用原型网络。

不是说元学习不行。它在某些场景确实香,比如少样本分类基准、快速适应新用户。但落到工业现场,任务分布得稳定,否则元学习的“套路”会过时。产线换型、材料批次变化,任务分布一漂,之前学的“怎么学”可能帮倒忙。

现实里的小样本,常常不是“样本少”那么简单

现实里的小样本,常常不是“样本少”那么简单现实里的小样本,常常不是“样本少”那么简单

我遇到过挺哭笑不得的需求:客户说“我们样本很少,只有两千张”。两千张?那叫少?在缺陷检测里,两千张已经能训个像样的分类器了。真正的小样本,是五张、十张,而且标注还贵。更麻烦的是,负样本一堆,正样本稀缺。模型天天看正常件,偶尔瞄一眼缺陷,容易学成“全都正常”。

所以落地时,我一般先问三个问题。数据到底少在哪?是类别少,还是每类样本少?有没有大量无标注数据可用?能不能借相似领域的预训练模型?这三个问题不问清楚,直接套小样本算法,大概率白忙。说实话,很多项目不是被算法卡住,是被数据定义卡住。

还有个坑:评估。小样本学习的论文喜欢报 N-way 5-shot 的准确率,跑很多任务取平均。现场不这么玩。现场就一个任务,样本还偏。你论文里 80% 的准确率,换个光照可能掉到 50%。所以别只看均值,看方差,看差的那批任务。这话有点反学术,但现场认。

边界与风险:小样本不是魔法

小样本学习容易被误解成“不需要数据”。不是。它需要的是先验知识。预训练模型、相似领域数据、人工设计的特征,都是在补样本的缺。你把预训练模型拿掉,只给五张图从零训,啥学习都不好使。

另一个风险是“假小样本”。有些场景明明有大量无标注数据,只是标注贵。这时候半监督、自监督、主动学习可能更划算。别因为小样本学习听起来高级就往里冲。算法是工具,不是信仰。

还有,小样本模型的解释性往往更差。样本少,模型靠的是特征空间的邻近关系,不是明确的规则。产线出问题时,你很难跟质量经理解释“为什么这张被判成划痕”。他会问:是不是光照?是不是角度?你只能说:特征距离近。这答案不让人踏实。

那它到底用在哪?罕见病影像辅助筛查、新品类冷启动推荐、语音唤醒词自定义、工业小批量缺陷检测。共同点是:类别会变,样本难攒,但特征可以迁移。离开这个前提,小样本学习就是个漂亮的概念。

老周那五张划痕照片,后来怎么处理的?我们没硬训分类器。先用预训练特征做原型比对,再让产线工人每天补几张“难例”,慢慢攒。三个月后,模型能挑出大部分明显划痕,剩下的还得人看。不完美。但比没有强。小样本学习给我的提醒,不是“少数据也能学”,而是先搞清楚你缺的到底是数据,还是对问题的定义。