200 例活检证实的皮肤病灶,三个模型各答一遍:10 年前那套 Inception v3 微调出来的小 CNN 一次答对 125 例(62%),GPT-6 Astra 84 例(42%),Claude Fable 5.1 85 例(42%)。这是伦敦 Guy's Hospital 皮肤科顾问医生 Magnus Lynch 自己做的一次对照实验,10 月 25 日公布,测试题目、全部模型回复和评分脚本都打包放了出来。
200 例全部来自公开数据集 MILK10k 且每一例都有病理活检结果:100 例「不该放走」(30 例黑色素瘤、25 例基底细胞癌、25 例鳞癌含 Bowen 病、20 例光化性角化病),100 例「可以放心」(50 例良性痣、50 例脂溢性角化病)。每个病灶都有临床照和皮肤镜两张图,模型从同样的 6 个诊断里选一个,还要回答能不能不做处理、不活检、不随访直接放走。
那个 CNN 是故意选得不上档次的:Inception v3,先用普通照片预训练,再把全部层在 ISIC 档案的 68,011 张皮肤影像上微调,单张 H100,作者说大约二十分钟。训练前,测试集里每一个病灶、每一个病人的所有照片都被剔除,阈值也不是靠测试集挑的。
差距主要出现在哪儿,比总分更有用。良性病灶上,CNN 认对 37/50 颗痣和 26/50 个脂溢性角化,两个大模型分别是 16/50 和 13/50(Astra)、33/50 和 6/50(Fable)。黑色素瘤上 CNN 只多认 5 例(13 例对 8 例和 11 例),但活检证实的 200 例里每一例都是被切下来的,本来就偏难。
两个大模型的错法还不一样。GPT-6 Astra 把 75 个病灶叫成基底细胞癌,实际只有 25 个——这 75 个里包括 30 个黑色素瘤中的 14 个。Claude Fable 5.1 把 53 个叫成光化性角化病,实际只有 20 个。CNN 的黑色素瘤错误方向相反:17 个错的里面 8 个叫成痣、6 个叫成脂溢性角化。
真正的分水岭是阈值,不是准确率。CNN 在作者预设的那条阈值上,100 个危险病灶只留住了 77 个,100 个安全病灶放走了 76 个——同时把 30 个黑色素瘤里的 18 个放走了。换句话说,62% 的优势很大一部分是用「敢放行」换来的。把阈值调到与两个大模型相当的保守程度,CNN 能留住 98 到 99 个危险病灶(两个大模型是 97 和 96),被放走的黑色素瘤降到 1 到 2 个——这时它仍然略强,但差距从 20 个百分点缩到了两三个百分点。
所以「小模型赢了大模型」这个结论,得拆成三种条件看。要它当筛查初筛、允许大量转诊,调保守阈值后它保住危险病灶的比例(98—99%)只是略高于通用大模型(97 / 96),但成本完全不同:一张 H100 微调二十分钟,模型小到能在手机浏览器里用 WebGPU 跑,图片不上传。要它当分诊、决定谁能回家,预设阈值下它会放走 18 个黑色素瘤,这个用法不能接受。要它认良性病灶、减少不必要的活检,它的优势才是实的。
作者自己列的边界也得一起看:200 例样本量小,30 个黑色素瘤的置信区间很宽,每个大模型每个病例只跑了一次,答案在多次运行间会变;MILK10k 从 2025 年就公开,大模型可能训练时见过,他说这反而对大模型有利;Inception v3 不是当前最好方案,真正的合规产品是图像 Transformer 集成,表现好得多。同一批图在普通数据上,这个 CNN 的 ROC 曲线下面积是 0.96,到这批全是活检过的难例上掉到 0.86——数据集多难,直接决定你能刷出多好看的数字。
还有一个容易被忽略的反向结果:换成病人问法,只给临床照、问「我需要看医生吗」,两个大模型在这 100 例黑色素瘤里分别有 99 例和 98 例建议就医,良性病灶也基本都劝去看。作为「要不要挂号」的分诊工具,它们的默认行为其实更保守。
我的判断:这次实验证明的不是「大模型不懂医」,而是通用模型和专用小模型在医疗里根本不是一个岗位。皮肤镜判读这种边界清晰、样本管够的任务,一个 2015 年的架构微调二十分钟就能压过前沿模型,成本还低两个数量级;但它的优势高度依赖阈值怎么设,设错方向就是漏诊。真要把 AI 放进皮肤科流程,先定清楚它是筛子还是判官——当筛子,小模型够用;当判官,现在这三个都不行,包括那个 62%。