Siamese Neural Networks 阅读笔记

Siamese Neural Networks 阅读笔记

文章题目:Siamese Neural Networks for One-shot Image Recognition


文章信息:Koch G, Zemel R, Salakhutdinov R. Siamese neural networks for one-shot image recognition[C]//ICML deep learning workshop. 2015, 2.

背景

最近在做一些Few-Shot Learning的一些工作,所以翻箱倒柜找到这篇2015年ICML的一篇工作,这篇工作虽然不是Siamese Network的首发,但是在整个Few-Shot Learning的发展过程中也算是一个里程碑的工作了。

现在的大多数的AI都是Data-Driven的,正所谓有多少人工,就有多少智能,但在真实的场景中,获取大量的标注数据是非常expensive且laborious的,费力不讨好,很多时候很多领域的数据集需要非常强的领域知识,emmmm难不成让某教授去标注数据?(貌似也不是不行哈哈哈),最主要的是很多领域本身的数据就难以获取,比如某地的地震的预测,地震的概率可能并不大,几十年来就那么一两次大地震,那数据量根本不够啊。咋办?从人的身上想办法,其实一个小孩子,你给他看一张狗的照片,他可能很容易仅仅依靠这一张够的照片就判断出这个现实世界的其他的很多没见过的什么狗:哈士奇,土狗,藏獒,雪橇犬,阿拉斯加,单身狗(哦这个好像不行)……人是怎么办到的呢?

像上面陈述的这种,AI领域将使用单个样本来训练模型促使模型能够具有较强的判别性能的方法叫做one-shot learning,那可不可以连一张图片都不用呢?也有,叫做zero-shot learning。但是目前很多的模型我都把他们看作伪one-shot learning,因为事实上,这些模型都还不是完全的处于只需要单一的数据就能达到上述功能,他们的实现需要模型在一些较大的数据集上进行预训练,然后再通过一些tuning等手段使模型来实现one/zero shot的目的,所以其实one-shot learning/zero-shot learning也是transfer learning的两种极端情况,同时也是few shot learning的极端情况,后面会根据最近对于few shot learning的调研工作整理一篇简易的综述。

Siamese

而这里的Siamese Network不是上面的方案,这是few shot learning的另一种思路——Metrics Learning。

首先解释一下这个Siamese,这个单词其实我最先就想到的是Siamese Cat(如上),这种喵喵其实来源未知,但是广泛认为他们来自泰国,那美丽的Thailand又怎么和Siamese这个词扯上了关系,这是因为Siamese本身指的是一种病,最早在泰国被发现:一对兄弟生下来是连体婴儿,后来被英国人发现,整进了马戏团,过着幸福快乐的日子呢,后来两兄弟竟然还都结婚了,分别结婚了!还分别生了很多个娃???我其实有点好奇他们是怎么上厕所的????

当然,我们的大佬们就是这么能想,于是1993年MIT的研究人员(其中就有Twitter著名嘴炮和健忘症患者Yan LeCun同志)提出了Siamese Network的结构。。。这里其实我们可以发现,研究源于生活而高于生活(啪)。这个Siamese结构借鉴了上面两兄弟“悲惨”的命运,这俩兄弟部分神经相连被抽象成了现代神经网络里的权值共享,然而决策又是由每个人的大脑单独决策。说白了就是下面这张图:

更常见的是下面这张图:

在真实的原生孪生网络中,Network1和Network2应该是完全一样的结构,甚至权重都是共享的(表现在代码实现的层面就是整个Network层面共用一套代码和权重),这个很好解(瞎)释(编),反正神经网络就是基于仿生的嘛,我这个网络孪生,那肯定是两个相同物种孪生啊,所以他们的两个部分肯定一样吧,要是不一样怎么解释???难道还有可能人和猪孪生?但是目前很多孪生网络的变体也逐渐取消了权值共享,甚至两边的网络结构也变得不一样,比如一些Multi-Modality Fusion的工作可能就是一边是LSTM一边是CNN,这咋办,咋解释?也可以编嘛,那你两个人的神经网络结构长得全部一样???反正不管怎么编吧,总能扯得没问题的,只要表现好就行,大家都是调参侠(咋了?看不起调参侠?调参侠也是侠!)……

文章主要思想

在这个工作中,作者还是依照原来的Siamese结构进行了搭建,采用的是双CNN结构,也就是说Network1和Network2就是同一个CNN,那怎么能实现One shot呢,这里作者直接将这个模型做成了一个Embedding+Metrics的方案,前面的CNN就是对图片进行简单粗暴的Embedding,将输入空间的图片映射到一个便于区分的另一个空间中,然后采用改良的L1范数对两个映射后的embedding特征向量进行距离测量,将最后的输入作为两者的相似度度量,就这么一个模型。

那怎么完成One Shot Classification呢?对于一个Pre-trained Siamese Network,从Omniglot(哦对,忘了提一句,作者用的Omniglot数据集)提取C个Categories,每个Categories包含一张代表性的图片,然后将我们要预测的图片与这C个Categories中的图片进行pair,然后pairwise输入到网络中来判别最大相似度。

其实整体思想很简单。

Experiment and Performance

上图是作者给出的他的训练的准确度,One Shot的准确度由于我没做实验,所以我这里就不贴出来了,然后今天我自己也在组里的机器上跑了一下,3090单卡的速度基本上在128的batch下1H能跑2W个iter(后面尝试下3090的多卡网络并行能力),我这里设置了50K个Iter(今天下午忙着买口罩和洗手液了,跑到一半出了一点点问题,所以数据到现在也还没有跑完……)目前在20K个Iteration,Precision大概在88%(还有点振荡),已经非常接近作者的30K的Precision,看图:

思考

这篇文章工作已经有很久了,应该在那个时候提供了一种比较好的思路,他这种Embedding然后再处理的方式其实现在已经数见不鲜了,但是站在现在的角度上看,对于图片的Embedding方案上还可以再进一步创新,如果是希望涨点的话尝试使用一些比较新的结构,而不是单纯的使用CNN。另一方面,作者的Metrics的选取直接选取带权L1 Distance个人也觉得略显单薄,可以考虑用一些其他的度量指标。
从2020年的想法上来看,个人觉得对于前期的预训练还可以进行思考,减少监督数据的使用,可借鉴无监督或者半监督的方法对预训练进行改进。
在这里插入图片描述

另外,其实我这个是我自己的论文笔记,不是论文解读,所以可能有些地方有点晦涩,不过欢迎大佬一起交流或者指正

硬核引流:欢迎大家推广关注我的公众号啊(洋可喵)!!!

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值