专用CNN与前沿大模型的图像分类之争
一个十年前的CNN在皮肤癌图像分类上击败了前沿大模型,教你如何在专用模型与通用LLM之间为任务做选择。

一位皮肤科医生最近把200个经活检确诊的皮肤病变图像拿给两个前沿大模型,以及一个微调过的Inception v3(这是谷歌十年前发布的卷积网络)来诊断。CNN的诊断正确率为62%,两个LLM各为42%。尤其是黑色素瘤这种最不能漏诊的病症,老网络同样胜出。如果你的工作涉及任何规模的图像分类,这个结果值得你重新审视专用模型与LLM之间的选择,因为这件事说到底与医学关系不大,而是关于如何选对工具。
问题所在:分类任务看似简单,对LLM而言却并非如此
聪明的工程师常常掉进这样一个陷阱。前沿模型能写代码、总结合同、通过律师资格考试,所以让人觉得它们连看张照片、从六个标签中选一个都做不好,简直有点侮辱人。分类是机器学习的“Hello World”,最大的模型肯定能搞定吧。
但仔细看看分类任务的本质。标签空间固定且通常很小;输入分布是可重复的;而且你需要一条决策边界,能够稳定地把那些细微而高风险的案例划分到正确一侧,每一次都要如此。最后这一点正是多模态LLM的软肋。它们并非为在某个狭窄视觉领域内做精细区分而训练,而是为了对几乎任何网上发布过的图片说出一些看似合理的话。
皮肤癌的结果以一种令人不安的方式把这一点具体化了。其中一个LLM把200个病变中的75个诊断为基底细胞癌,而实际只有25个是,其中还包括30个黑色素瘤中的14个。另一个则对光化性角化病情有独钟,判定了53次,而真实病例只有20个。这些错误并非随机,而是一种典型表现:模型读过大量皮肤科资料,见过网络规模训练数据中碰巧存在的各种病变图片,于是只是在匹配“听起来最可能”的答案,而不是真正去计算。
读过所有教科书的模型,和见过6.8万个带标签的、与你要问的完全相同事物的样本的模型,根本不是一回事。
失败的尝试之一:直接问前沿模型
最自然的第一步,就是那位皮肤科医生的做法:把图片交给LLM,让它给出诊断、置信度和备选答案。这是一个合理的测试,临床医生确实就是这样使用这些工具的。而它的失败模式很有启发性。
首先,置信度毫无意义。有一个案例中,某个LLM以95%的置信度把一个薄型、低色素的浸润性黑色素瘤判断为基底细胞癌。这个数字和诊断本身一样,是“合理地”生成出来的,背后没有经过校准的概率。如果你的下游逻辑依赖置信度设定阈值(而大多数分诊逻辑都是如此),那你就是在基于虚构的数字设阈值。
其次,错误并不保守。每次运行只跑一次,而不同运行之间的答案会变化,这对任何要放进流水线的东西来说都至关重要。专用分类器对同一输入每次给出的logits都相同;LLM则是从答案分布中采样。对于决策辅助工具而言,非确定性是一种负担,而不是什么小怪癖。
第三点比较微妙:这些LLM在相邻任务上表现出色。如果以患者的身份提问“我需要去看医生吗?”,它们对98到99个经活检确诊的黑色素瘤都回答“需要”,对几乎所有无害的病变也是如此。这正是一个主要基于医学文本训练的模型的行为:永远倾向于建议去看医生。这对聊天机器人式的分诊筛查有用,但对于真正需要的判别任务则毫无价值。
失败的尝试之二:以为越大就越什么都行
这里还有一个更深层的失败,它并不出现在实验本身中:即以为规模可以替代适配度。保守估计,一个前沿LLM的参数量是Inception v3约2400万参数的数千倍。但这些容量里没有哪一部分是用来在像素层面区分脂溢性角化病和鳞状细胞癌的。对模型来说,皮肤科只是海量训练数据中的一滴水,而承载大部分诊断信号的皮肤镜图像则更加罕见。
这也正是为什么一个3000万参数的围棋网络,在围棋上能以极大的优势击败任何LLM。这同样也解释了为什么基准测试总是误导团队,让他们看不清LLM在生产中究竟在哪些地方真正有用,我们在讨论为什么AI基准测试漏掉了大部分真实工作时就提到过这一点。“模型有时能做到这件事”意义上的能力,与“模型能稳定可靠地做到这件事,足以让你在其上构建产品”意义上的能力,是两回事。
在围绕这项实验的讨论中,其实藏着一条很有用的启发式规则:如果某项任务在预训练中被大量覆盖(比如代码、日常英语),或者专门用强化学习做过后训练,那么前沿LLM很可能真的擅长它。否则,就该预期它的表现像一个读过几本书、却很有把握的聪明通才。罕见事物的视觉诊断明显属于后一类。
真正有效的做法:在精确分布上微调一个小模型
接下来是最能让那些认为专用模型需要研究实验室才能做的人感到尴尬的部分。获胜的CNN并非最先进的模型,而是Inception v3,一个基线架构。它先在普通照片上预训练,然后在一个公开档案中的68011张皮肤科图像上进行端到端微调,使用一块H100 GPU,大约花了二十分钟。研究者小心地从训练数据中剔除了所有测试病变及其患者的照片。最终结果可以通过WebGPU在手机浏览器中运行,无需上传任何数据。
在一块GPU上花二十分钟。再对比一下,在你的整个图像语料上以生产规模持续运行前沿多模态模型,每张图片都要付费,而且是永久性的。专用模型不仅更准确,成本还低了几个数量级,结果确定、可审计,而且小到可以部署到边缘设备上。如果你能把问题描述为在稳定输入分布上的N个标签,并且已经拥有(或能获得)带标签数据,那么微调后的分类器在几乎所有生产中关键的维度上都会胜出。

这套打法的现代版本甚至不一定需要老旧的CNN。小型视觉Transformer、像谷歌医学图像编码器这样的嵌入模型,或者在预训练主干上微调一个输出头,都能让你走得更远。关键不在于怀念Inception v3,而在于:一个2015年的架构就已足以击败算力多出四个数量级的模型,这恰恰说明瓶颈在哪里。决定性的是模型与任务的适配程度,而不是网络的规模。
# The specialist path in miniature: a frozen backbone + a small head
import torch
import torch.nn as nn
from torchvision import models
# A decade-old backbone is fine. Seriously.
backbone = models.inception_v3(weights="IMAGENET1K_V1")
in_features = backbone.fc.in_features
backbone.fc = nn.Linear(in_features, 6) # your six labels
# Fine-tune everything on your labelled domain images.
# On one H100, tens of thousands of images: tens of minutes.
optimizer = torch.optim.AdamW(backbone.parameters(), lr=1e-4)
loss_fn = nn.CrossEntropyLoss() # a *calibrated* probability lives here
如果你的标签空间是固定的,但你更愿意让LLM参与周边工作流,那么诚实的做法是约束它的输出,让它只给出一个决策,而不是相信它的文字描述,这与把LLM变成决策模型的约束解码背后的思路相同。但就分类本身而言,训练好的输出头依然更胜一筹。
决策框架:什么时候专用模型赢,什么时候LLM赢
在看着不少团队糟糕地做这个决定之后,这是我愿意坚持的框架。问自己四个问题:
- 标签空间是否固定且较小?如果你能把所有答案列举出来,分类器几乎总是正确的结构。当输出空间开放时,LLM才有用武之地:摘要、解释、对话、代码。
- 输入分布是否稳定?一个在皮肤镜图像上微调的模型,在皮肤镜图像上表现优异,但遇到一张同时拍到纹身、尺子和一杯咖啡的照片就束手无策了。如果你的输入千奇百怪,通才模型的鲁棒性就有真正的价值。
- 你有带标签的数据,或者能够获得吗?这是真正的分岔口。有1万条以上的带标签样本时,微调几乎是免费的,而且效果会胜出。没有标签数据时,LLM的零样本猜测可能是你最好的起点,但应把它当作标注的引导工具,而不是生产环境的最终答案。
- 一次错误的代价是什么,你是否需要校准?高风险、需要设定阈值的决策需要真实的概率和确定性的输出。这直接排除了原生LLM调用,毫无商量余地。
把皮肤癌案例套进这个框架:固定的六标签空间,稳定的临床影像流程,6.8万张带标签的公开图像,错误关乎生死。四条全中。LLM毫无胜算,真正令人惊讶的不是它输了,而是竟然有人会期待它赢。
必要的诚实说明,因为务实是双刃剑
如果我只停留在“小模型获胜”这个结论上,那就是对你不负责。微调分类器的优势同时也是它的脆弱之处。它的基准测试是在一个未经微调的通才模型对照下,使用与训练分布完全一致的数据完成的。一旦把它带到真实世界,比如不同的相机、档案中代表性不足的肤色、带有遮挡或标注的图像,它的表现会以某些方式退化,而LLM凭借广泛的训练有时能更好地应对。通才模型在分布之内的失败是可预期的;专用模型一旦超出分布,则可能是灾难性的。
还有一项分类器完全无法完成的任务:医学的其他部分。这次实验中最有意思的次要结论是,LLM在拿到医生笔记、患者病史,并能够提出问题的情况下,可以合理地参与解读、沟通和管理,也就是标签之后的一切。CNN只会输出六个logits。它永远无法向一位焦虑的患者解释自己的推理,也无法注意到转诊信与影像结果相互矛盾。
还要注意这项研究自身的坦诚:最先进的皮肤科AI并不是单个Inception v3,而是在远大得多的数据上训练的视觉Transformer集成模型,而按此方式构建的、经过监管审批的产品表现要好得多。该领域的发展方向是更大的专用模型,而不是通才模型,这反而强化了我的观点,而不是削弱它。
真正的洞见:LLM是用来构建分类器的,而不是用来充当分类器的

整个事件中最犀利的观察,是我一直反复思考的一点:LLM已经把构建专用分类器的成本拉近到了零。编写微调脚本、清洗数据集、搭建评估框架、生成标注界面,这些正是LLM真正具有超人能力去加速的工作。就连那位皮肤科医生的分析本身,也是借助AI编程工具完成的。是通才模型搭建并评估了这个实验,而获胜的却是专用模型。
这就是我现在默认推荐的架构:开发、数据处理、边缘案例分诊以及面向人的解释层,让LLM参与其中;而对于重复出现、高吞吐量、高风险的决策本身,则交给一个小型微调模型。在效率层面我们也见过同样的模式,有趣的故事往往不是旗舰模型,而是廉价的那一档在做实际工作,比如Flash级模型与推理效率。让模型与问题的形态相匹配,大多数“AI不好用”的抱怨便会烟消云散。
计算器在除法上胜过所有LLM,却没人为此写什么激动人心的文章。微调分类器在分类上胜过聊天机器人,不过是同一个故事,只是参数更多罢了。之所以让人感到惊讶,只是因为过去两年我们一直被告知,规模会消解专业化的必要性。它并不会。它只是让专业化更容易构建,前提是你愿意伸手去拿那个朴素的工具。


