论文笔记 – Siamese neural networks for one-shot image recognition

Koch Gregory, Richard Zemel, and Ruslan Salakhutdinov. “Siamese neural networks for one-shot image recognition.” ICML Deep Learning Workshop. 2015.

这篇文章也比较经典,我就不多说文章细节,只说说理解(现在我看文章逐渐有想法了!这才叫“笔记”嘛!以前的只能叫“学习记录”)。[1,2] 都是很好的读后感,可以先看看。

为什么用 siamese net

Siamese net 的结构如下图所示:

前面所有层里,上下两部分都是结构、参数完全一致的,我称之为 encoder,输入两张图片,通过这两个分支得到 embedding 之后,下一层就是计算两个 embedding 的距离,再用激活函数得到两张图片是否为同一类。所有训练的标签是“这对属于/不属于同一类”。

这样看来,siamese net 的主旨也是“embedding is all you need”。那为什么要用 siamese net,不直接用原始类别标签训练一个 CNN,取前几层作为 encoder 呢?

我们知道,一个 CNN 它的参数量是非常多的,参数量多,就要求有非常多的数据来一点点优化。配对的训练方式,就能大大增多了训练的样本量。比如,原来只有 20 个样本,现在两两配对就可以有 $C_{20}^2$ 个,是平方的增加,队训练应该很有好处叭。

siamese net、matching net、prototypical net 的对比

1、MN、PN 的操作是 query 去找最近的,把自己归到同一类;而 SN 是在训练时,让自己和不同类的所有其他样本,embedding 都尽量远。这不就是聚类的“簇内样本越近越好,簇间样本越远越好”嘛!我认为这两条原则应该结合!不过现在已经 2020 年了,一定有人想到并写出文章了。这里放一个 【#TODO1】,有时间找找这个文章。

2、SN 只是在 encoder 得到的空间里测量距离,预测两两是否同类,却并没有 fine-tune 这个特征空间,让特征空间本身就有明显可分的子空间结构(这样空间里的“距离”才更有价值)。而 PN、MN 在这方面都有改进。

3、SN 是在测试的时候,用 query 和 support set 里面的所有样本一一匹配,每一次匹配都得到一个“是否匹配”的概率,每个结果都 $\in[0,1]$,和并不为一,物理意义上就不是那么的严谨;MN 和 PN 是全局的匹配,结果是 softmax,和为 1。不过这会导致什么性能上的缺点呢?好像也没什么,再放一个【#TODO5】以后再思考吧。不过 SN 这篇文章只提及 1-shot 问题,这正是因为匹配的方法无法推广到 N-shot 上来。

4、这三篇都是 param 与 non-param 方法的结合。在样本多的时候(train)用 param,训练个厉害的 embedding;在样本少的时候(test)强调 non-param 模型的存在感(就是参数啥的不要变太多啦),让结果靠谱。

5、PN、MN、SN 这三篇文章都可以看做是 nearest neighbour + embedding。PN 是多邻居,MN SN 都是最近邻。在 SN 这篇文章里,还特意做了 1-nn 这个算法,作为一个下界——那当然跟 SN 差得多。为什么差得多?全是 embedding 的功劳!如果没有 embedding,可以想象,图像中的平移、旋转等,对相似度的计算都会有很大的影响。但事实上,如果 CNN 不够深,这些问题仍然存在;但样本少,网络深就又过拟合了。

[1] 中说,“为了解决这一内在矛盾,后来的研究者们分成了两个方向,一个方向是利用不同的网络结构来取代孪生网络结构,实现更有效的特征提取,如 Matching Network;另一个方向是采用更好的权重初始化策略和优化算法,如元学习方式。”,元学习我还不太懂,这里再放一个【#TODO3】

6、对于距离的度量:MN 使用余弦距离(最垃圾),PN 使用欧氏距离(很自然),SN 使用 NN(潜力很大)。那么 MN 和 PN 是不是都可以用 NN 来学习计算距离呢?好像 relation network 就是这么做的。

对 few sample 的妥协

还有一点小小的感悟:全连接神经网络的参数太多,可以表示的函数就太太多了,太自由了。为了不让它过拟合,我们可以有很多方法:

  1. 加正则化项,在数学角度,是用适定问题的解去拟合不适定问题的解(详见我之前写过的 正则化方法),从那种玄幻的理解上,就是把难得变得简单;从 这张图 的角度,也能看出正则化项的一些限制。
  2. 用先验分布来约束。比如之前写过的 DEC,就是假定 embedding 之后每一类都符合 t 分布,就求 embedding 的结果和预先定义的(很骚的)t 分布的距离(KLD),越接近越好;说到这点,所有分布中,先验知识最少,最“自由”的是指数族分布,之前 MN 就是预设成指数族分布,我感觉就是没动脑子直接设(也可能是动过脑子,但是性能没有变更好)。而正则化方法,在 bayes 角度实际也是有一个分布在的,比如 l2 范数对应正态分布(详见我之前写过的 正则化方法)。不过这个对于过拟合的效果,我还没有看到严谨的实验分析。【#TODO2】
  3. 就是本文的 siamese networks 啦!通过配对,大大增强样本数量。
  4. 迁移学习!不过这就有点作弊,就不讨论了。(不过 FSL 即使迁移学习,support set 也是不够的)

引用与拓展阅读

[1] 论文阅读笔记《Siamese Neural Networks for One-shot Image Recognition》

[2] One Shot Learning and Siamese Networks in Keras

TODO

  1. “簇内紧密,簇间稀疏”的 FSL 文章
  2. 不同先验分布对过拟合的影响?
  3. meta-learning 与 embedding 这两条路?弄懂 meta-learning
  4. 我看所有的 FSL,都是在强调,要在预训练时尽量不学 domain-specific 的知识,那在 support set 上学习的时候,是不是应该尽量去学 domain-specific 的知识呢?在这方面是不是应该也有些尝试?
  5. 这种“概率和不为一”,有什么坏处?
  6. 卷积的结构里,把卷积核都改成现在流行的统一 3*3,会不会更好?

发表评论