模型实现举一反三

在很长一段时间里,大家都对深度学习模型有所误解,认为模型需要非常大量的数据训练,且只能过训练过的模式起作用——用猫的数据训练就只能识别猫,只有在训练数据中多次出现的模式才能被模型学习和应用,稍有变化,模型就无法正常工作。

实际上随着深度学习模型的发展,这些问题都在逐步改善。现在很多模型学习的不仅是解决具体的问题,比如识别图中的猫或者狗,还可以通过训练学习数据间的关系,在更抽象的层面学习,从而实现了举一反三。另外,随着迁移学习的流行,将海量数据中学到的知识用于只包括少量数据的新场景之中也变成了一种趋势。

本篇介绍几种比较巧妙的方法解决训练集中未出现过的问题。

One-shot 问题

One-shot learning 指需要识别的物体在训练样本中很少出现,甚至在只出现一次的情况下,也能训练模型。Zero-shot 与之类似,即使样本在训练数据中完全没出现过,也能正确识别或分类。

图片搜索是一个 One-shot 问题,比如网购平台上有很多衣服,不可能每一件都放入模型训练,图片搜索的目标是找到与之同款的一种或多种同款商品。同一款衣服自然有很多类似特征,比如颜色,质地,样式等等,但是使用深度网络学习出来的知识散落在网络的各个参数之中,无法确定各个输出的具体性质,并且图片中还包括不同背景,角度,以及人穿还是平铺等多种因素。

解决上述问题的方法是通过同一商品的不同照片训练模型,将图片的匹配程度作为目标函数,学习图片之间的关系,从而训练出能提取商品检索相关特征的模型。目标跟踪任务也使用了类似的技术。

风格迁移

风格迁移可以实现用一张图片的风格与另一张图片内容结合,生成新图片的功能,而非机械拼接图片。具体方法是先用预训练的视觉模型提取各个层次的图片特征,将某些层的目标结果设置为内容图片,某些层的目标结果设置为风格图片,反向调整图片内容。

其中提取风格的部分非常巧妙,模型计算每个通道输出数据之间的关系。比如风格图片某两个通道的输出有同增同减的关系,就调节目标图片,使它在该层也有类似的输出。

在风格迁移的任务中,被调整的不是网络参数,而是输入网络的数据,这种方法也常用于在对抗攻击中生成对模型更有攻击性的数据(梯度攻击)。

类比推理

类比推理是词向量的一种应用,首先利用大量自然语言数据训练词向量,使得每一词可使用 N 个属性描述,然后通过属性之间的运算实现推理,如:国王 - 王后=男 - 女,因此有:王后=国王 - 女 + 男。使用词向量还可以计算词间的距离。

通过迁移学习,让仍用少量数据训练的模型有更强的能力,比如:XXX 与 YYY 在预训练的词向量模型提取的特征非常类似,YYY 在训练集中出现过,而 XXX 只在测试集中出现,通过词向量的迁移,使 XXX 与 YYY 学到的知识结合。

这种方法也常用于解决 Zero-shot 问题,比如训练数据中没有老虎,但是通过与它近似的动物,以及用模型学到的各个特征之间的关系,识别出图片中的老虎。