【深度学习】One Shot Learning
来源:互联网 发布:深入浅出mysql豆瓣 编辑:程序博客网 时间:2024/05/21 10:50
Vinyals, Oriol, et al. “Matching Networks for One Shot Learning.” arXiv preprint arXiv:1606.04080 (2016).
简介
问题
DeepMind团队的这篇文章解决小样本学习问题:对于训练过程中从未见过的新类,只借助每类少数几个标定样本,不改变已经训练好的模型,能够对测试样本进行分类。
举例:使用大规模人脸数据库训练好的人脸模型,应用于小规模人脸识别。每个使用者只提供较少几张注册图像。
亮点
Li Feifei老师的高徒,在ImageNet中为#科学献身#的人肉参照者,现供职于OpenAI的Andrej Karpathy对该论文给出了“可不咋地!”的崇高评价,并撰写了读文笔记。本文较大程度参考了该笔记。
本文创新之处有二:
- 模型设计中,借鉴了当下流行的注意力LSTM,考虑了整个参考集合的贡献;
- 训练过程中,尽量模拟测试流程,使用小样本构造minibatch。
模型
问题建模
给出的参考集中有
对于测试样本
注意力模型
本文使用参考集标定的加权和作为预测:
充当权重的注意力函数
参考样本特征g
首先使用一个简单的网络(例如VGG或者Inception)提取单个样本的原始特征:
每个样本
前向变量由前一个参考样本的隐状态和上下文经过LSTM确定,当前样本的原始特征作为输入:
后向变量由后一个参考样本的隐状态
参考集特征由其隐状态
实际上,这里将原本无序的参考样本集进行了排序1。对于排序后的参考集使用LSTM,使得每个样本的特征
测试样本特征f
同样使用简单的网络提取单个样本的原始特征:
接下来对于每一个测试样本, 通过
每一步维护四个状态变量
在第
加上原始特征,获得本步骤隐变量:
本步骤读数是参考集特征的加权和3:
和之前类似,注意力函数也是softmax形式,用其他所有参考集样本归一化:
换言之,除了以测试样本作为输入,在每一个步骤中,还要根据LSTM状态
最后一步的读数即为测试样本特征:
训练
训练策略是本文的闪光之处,再一次验证了机器学习实战中这条颠扑不破的真理:怎么用,怎么训。
训练过程中,迭代一次的流程如下4:
- 选择少数几个类别(例如5类),在每个类别中选择少量样本(例如每类5个);
- 将选出的集合划分:参考集,测试集;
- 利用本次迭代的参考集,计算测试集的误差;
- 计算梯度,更新参数
注意,在完成训练之后,所有训练中用过的类别,都不再出现在后续真正测试中。
总结
本文提供了一个端到端(end-to-end)、可以直接优化的模型。这个模型本身即包含了参考集样本的信息。换句话说,“如何利用参考集”这件事,也在优化的内容中。
本文的书写和实验部分尚有不尽如意之处,但理念富有创新性,值得持续关注。
- 原文没有提及如何将无序的参考集样本排序。Karpathy的笔记中猜测可能随机,并建议参考同作者文章:Order Matters: Sequence to Sequence for Sets. ↩
- 为与参考样本部分区分,此处符号和论文中有所不同。 ↩
- 此处原文公式(5)有误 ↩
- 此处原文说明不详,待研究。 ↩
- 【深度学习】One Shot Learning
- 迁移学习总结(One Shot Learning, Zero Shot Learning)
- One-shot Learning
- DeepMind one shot learning 论文批注 One-Shot Generalization in Deep Generative Models
- 模型汇总15 领域适应性Domain Adaptation、One-shot/zero-shot Learning概述
- Deep Learning深度学习
- Deep learning -深度学习
- Deep Learning(深度学习)
- 深度学习Deep learning
- 深度学习(Deep Learning)
- Deep Learning(深度学习)
- 深度学习Deep Learning
- deep learning 深度学习
- zero-shot learning
- zero-shot learning
- one-shot VS periodic timer
- one more shot another round
- Coursera deep learning 吴恩达 神经网络和深度学习 第三周 编程作业 Planar data classification with one hidden layer
- 对“不使用的对象手动赋值为null”的理解
- 对定时器与滚动视图冲突处理
- STL 内存池源码学习与思考
- 深度学习之Caffe环境搭建
- 一个操作系统的实现第九章笔记
- 【深度学习】One Shot Learning
- 各种架构下的配置的404页面
- 微信jsapi获取网络状态接口开发(第七课)
- DetachedCriteria详细使用
- 关于activity的startActivityForResult / onActivityResult / setResult学习和理解
- mark----systemmap解析
- textView展开收回
- JavaSE基础篇(四)
- angular directive详解之transclude