Prototypical Net阅读笔记
Snell J, Swersky K, Zemel R. Prototypical networks for few-shot learning[C]//Advances in neural information processing systems. 2017: 4077-4087.
文章主要思想
上篇博客在讲Relation Network的时候讲到relation net在处理few shot learning的时候对于N-way K-shot当K大于1的时候(也就是非one-shot learning问题的时候)留下了一个问题,在处理query图像和support set图像的匹配问题的时候由于一个类别中的图像也可能有多个shot,所以如何选择一个最好的shot来与query进行measure,这就是一个最主要的问题,在relation net里就是简单粗暴的直接将所有的进行element wise summation,这篇文章就针对了另一个思路,那我不直接sum,能不能从中选一个shot来进行measure呢?
基于这个思想,作者设计了prototypical network,针对Few Shot和Zero Shot问题进行处理。从我上面的描述你也能猜到,这也是一篇基于metrics learning的paper,比relation net要早一点。
Details
这就是我们上面选取的方案了,咋看这个图咋有点像KNN的那个图,哈哈哈,作者的选择方案也是非常的简单直接,首先还是按照经典Metrics learning的方案把图像映射到一个高维空间中去,基于embedding最初的假设,在这个高维空间里,各个类别应该是物以类聚,近乎线性可分的,于是作者希望每一个类别找一个代表,来代表这个类,和新的query图像进行measure,这个代表怎么产生的呢?如上图(a),这个代表就是所有单个task support set的所有样本的点的平均,其实作者在文中也花了很大的篇幅去将为什么选择中值点作为这个代表,根据regular Bregman divergences的结论(对于一些点满足任意的概率分布的情况下,这些点的平均值点(mean point)一定是空间中距离这些点的平均距离最小的点
)。而对于上图(b)的zero shot learning本身不存在support set或者说提供的并不是图像信息,这时候咋办呢,作者利用提供的zero shot的meta data vector,获得了这个代表。作者把上面的这些代表点叫做prototype,其计算表达式为:
c
k
=
1
∣
S
k
∣
∑
(
x
i
,
y
i
)
∈
S
k
f
ϕ
(
x
i
)
\mathbf{c}_{k}=\frac{1}{\left|S_{k}\right|} \sum_{\left(\mathbf{x}_{i}, y_{i}\right) \in S_{k}} f_{\phi}\left(\mathbf{x}_{i}\right)
ck=∣Sk∣1(xi,yi)∈Sk∑fϕ(xi)
其中
c
k
c_k
ck就表示的是这个prototype,
f
ϕ
f_\phi
fϕ表示的就是embedding过程。对于后面的measure phase其实就是在embedding空间中对给定x的情况下求其label y为k的条件概率
p
ϕ
(
y
=
k
∣
x
)
p_{\phi}(y=k\ |\ x)
pϕ(y=k ∣ x)。对于给定距离度量d(作者实验中采用的cosine和mse),作者采用的是基于softmax的原型距离度量方案,其表达式为:
p
ϕ
(
y
=
k
∣
x
)
=
exp
(
−
d
(
f
ϕ
(
x
)
,
c
k
)
)
∑
k
′
exp
(
−
d
(
f
ϕ
(
x
)
,
c
k
′
)
)
p_{\phi}(y=k \mid \mathbf{x})=\frac{\exp \left(-d\left(f_{\phi}(\mathbf{x}), \mathbf{c}_{k}\right)\right)}{\sum_{k^{\prime}} \exp \left(-d\left(f_{\phi}(\mathbf{x}), \mathbf{c}_{k^{\prime}}\right)\right)}
pϕ(y=k∣x)=∑k′exp(−d(fϕ(x),ck′))exp(−d(fϕ(x),ck))
然后定义了损失函数,采用的最小化负对数函数的方式:
J
(
ϕ
)
=
−
log
p
ϕ
(
y
=
k
∣
x
)
J(\phi)=-\log p_{\phi}(y=k \mid \mathbf{x})
J(ϕ)=−logpϕ(y=k∣x),通过SGD去做优化。
算法流程
解读一下这个算法流程图,首先输入就是Training set的图像和label,然后输出的是loss总和,首先我们要构造一个N-way,K-shot的数据集,这个N设置多少是随机设定的就是代码第一行的 N C N_C NC( ∈ [ 1 , K ] \in [1, K] ∈[1,K]),而且每一个episode还可以设置的不一样,所以作者这里的V就是一个列表,记录每一个episode选取的数目,然后对Training set每一个类别随机选取 N S N_S NS个元素加入到support set,选取 N Q N_Q NQ个样本加入到Query Set,然后计算每一个类别Support Set的prototype,然后就可以依次对query set中的每一个图像根据预测结果计算loss,计算思路还是挺清晰的。
实验
作者在embedding的部分采用了和matching net一样的网络结构,一定程度上也是为了方便做对比。这是作者在Omniglot上的测试结果:
这是在miniImageNet上的结果:
看看作者的Visualization,下图显示了Tengwar Script的子集(Omniglot中的一个类别,这是测试集中的字母)。类的原型以黑色表示。 几个错误分类的字符以红色突出显示,同时带有指向正确原型的箭头。
My comment
这篇文章的工作虽然我在前面说是弥补了relation net在K-shot中K>1问题的考量,但实际上,要知道relation net是晚于这篇工作的,所以到底哪一种方式好,还有待实验验证,另外我们其实也值得思考,我们是不是可以借鉴KNN的思想,将K个最近邻引入到这种relation度量中来呢,不知道有没有人做这方面的工作,作者倒是在文中提出了多个prototype的思路,但是多个prototype在求解的时候需要对support set引入划分的机制,以求解每个part的prototype,如果是直接采用knn不知道会不会好一点。
如果是比赛打榜的话我觉得也不排除可以把后面这部分measure直接fusion前面那篇relation net或者Siamese,不知道效果怎么样,事实上作者也在论文中专门有一个subsection实在谈选择欧氏距离的问题,并用公式证明了选择欧氏距离本质上相当于一种线性变换,而我们前面提到的relation net是一种非线性变换,这里的作者认为只要embedding足够的好,就能够拥有足够的非线性映射能力而不需要再在measurement上做文章了,但是事实上后面的relation net的结果一定程度上也是反驳了作者这里的结论。
不过我在这里只是提供一个思路,有兴趣的话可以下去尝试验证,也欢迎在评论区提供您验证的结果。
后记
终于赶上进度了,这种应该是我最🚹的一周了,还有两天也就等于还有两篇论文没看,最近的这几篇论文的思路都很简单,但是自己也只是做了论文阅读工作,周末一定要抽时间自己写写代码,不能只图看的量,然后下周论文看完后把这些论文拿出来对比一下。另外,其实我这个是我自己的论文笔记,不是论文解读,所以可能有些地方有点晦涩,不过欢迎大佬一起交流或者指正。
如果你觉得我的文章写的不错的话,麻烦帮忙向大家推广关注我的公众号啊(名称:洋可喵)!!!