第一次看到"零样本学习"这个概念时,我正坐在实验室里调试一个图像分类模型。当时需要为新产品识别20个全新品类,但重新标注数据的成本让我头疼不已。这时导师走过来问:"为什么不让模型学会像人类一样推理?"这句话彻底改变了我对机器学习能力的认知。
人类面对陌生事物时,往往能通过已有知识进行合理推断。比如从未见过"鸭嘴兽"的孩子,听到"会下蛋的哺乳动物"描述时,大脑会自动关联"卵生"和"哺乳"特征,形成大致认知。这种能力迁移到AI领域,就催生了零样本学习(Zero-Shot Learning, ZSL)和少样本学习(Few-Shot Learning, FSL)两大技术方向。
零样本学习要求模型在测试阶段识别训练时完全未见过的类别。比如用动物图片训练的模型,突然要识别"独角兽"这种神话生物。其核心在于利用属性描述(如"有蹄类"、"前额有螺旋角")建立已知类与未知类的关系。
少样本学习则提供少量样本(通常每类1-5个)作为"提示"。例如医疗影像诊断中,某种罕见病可能只有3-5个标注样本,模型需要据此快速适应。
| 维度 | 零样本学习 | 少样本学习 |
|---|---|---|
| 数据需求 | 依赖属性/语义描述 | 需要少量标注样本 |
| 核心方法 | 语义嵌入空间映射 | 元学习/度量学习 |
| 典型架构 | 双流网络(视觉+语义) | Prototypical Networks/MAML |
| 适用场景 | 类别完全未知 | 类别已知但样本极少 |
| 准确率表现 | 受语义间隙影响较大 | 相对更稳定 |
注:语义间隙(Semantic Gap)指视觉特征与语义描述之间的匹配偏差
以经典的ZSL模型ESZSL为例,其实现流程可分为三步:
语义空间构建:将类别标签转化为词向量(如Word2Vec)或人工定义属性向量
python复制# 示例:基于Word2Vec的语义嵌入
from gensim.models import Word2Vec
attributes = ["有羽毛", "会游泳", "黑白相间"]
model = Word2Vec(sentences=[attributes], vector_size=100, window=5, min_count=1)
视觉-语义对齐:训练映射函数将图像特征投影到语义空间
math复制V = W \cdot \phi(x) + b
其中φ(x)是图像特征提取器(如ResNet),W为可学习映射矩阵
最近邻推理:在语义空间中找到与测试样本最接近的类别描述
python复制def predict(test_feature, semantic_matrix):
similarities = cosine_similarity(test_feature, semantic_matrix)
return argmax(similarities)
以MAML(Model-Agnostic Meta-Learning)为例:
任务采样:从大量相关任务中随机抽取N-way K-shot任务
python复制# 5-way 1-shot任务示例
tasks = sample_tasks(dataset, n_way=5, k_shot=1)
内循环适应:在每个任务上用少量样本快速调整模型参数
math复制\theta_i' = \theta - \alpha \nabla_\theta L_{T_i}(f_\theta)
外循环更新:跨任务优化初始参数使其易于快速适应
math复制\theta \leftarrow \theta - \beta \nabla_\theta \sum_{T_i} L_{T_i}(f_{\theta_i'})
在企鹅识别项目中,我们发现模型常将"黑白相间"特征错误匹配到钢琴图片。解决方案包括:
注意力机制增强:在特征提取阶段加入空间注意力
python复制class AttentionLayer(nn.Module):
def forward(self, x):
attn = nn.Softmax(dim=1)(self.conv(x))
return x * attn
生成对抗训练:使用GAN生成未见类别的虚拟特征
math复制\min_G \max_D V(D,G) = E[\log D(x)] + E[\log(1-D(G(z)))]
在医疗影像诊断中,当每类只有3个样本时,模型容易记住样本而非学习特征。我们采用:
特征解耦技术:将特征分解为领域不变/特定部分
python复制# 特征解耦示例
domain_invariant = grad_reverse(features)
domain_specific = features - domain_invariant
数据增强策略:
| 行业 | 零样本学习适用场景 | 少样本学习适用场景 |
|---|---|---|
| 零售 | 新品自动分类(基于商品描述) | 小众商品识别(少量样本) |
| 医疗 | 罕见病初步筛查(基于症状描述) | 特殊病例诊断(少量影像) |
| 安防 | 新型危险品检测(基于物料特性) | 特定人员识别(几张监控截图) |
plaintext复制是否需要识别全新类别?
├─ 是 → 是否有可靠的语义描述?
│ ├─ 是 → 选择零样本学习
│ └─ 否 → 需要人工构建属性体系
└─ 否 → 每类可用样本数量?
├─ <5 → 少样本学习(元学习方法)
├─ 5-50 → 少样本学习(度量学习+数据增强)
└─ >50 → 考虑传统监督学习
最近在工业质检项目中,我们融合两种技术开发了混合方案:
这种方案将误检率降低了37%,其中关键创新点是:
实际部署时要注意:
有个有趣的发现:当语义描述包含否定性特征(如"无螺纹")时,建议先用正样本训练基础模型,再引入否定描述进行微调,这样比直接训练效果提升约15%。