Meta learning

few-shot learning是meta learning中的一种。可将few-shot learning看做是meta leaning即可。

Meta learning 与 传统监督学习的区别

传统监督学习: 对于一个给定训练数据集,通过训练使模型可以识别训练数据集,并将其泛化到测试数据集中。要求测试数据集中数据标签类别包含在训练数据集中。
meta learning: 目的是让模型learn to learn,使模型可以区分不同的事物。意思是让模型自己学会学习。通过一张待测试图像,其类别不包含在训练数据集中,但包含在support set中,通过待测试图像与support set中每张图像计算他们之间的相似度,将与support set中相似度最高的类别作为query图像的类别,完成模型的预测。

Meta learning中的一些术语

Query:待测试图像
Support set:数据集相较于训练数据集很小,每类下只有几张图像,只在预测时为网络提供额外的信息,且Query图像的类别需在support set中。
Train set: 数据量大,每一类下存在多张图像,可以用此训练一个深度神经网络。
K-way:指support set中所具有的类别个数。随着类别数的提高,模型的预测准确率会降低。
N-shot:指support set中每一个类别中所存在的图像数量。随着图像数量的提高,模型的预测准确率也会提高。

Siamese Network解决few-shot learning

训练一个孪生网络(Siamese Network)来解决小样本检测(few-shot learning)的问题。使用相似度来做预测。通过query与support set中的每一张图像,使用相似度函数(similarity function)来计算其之间的相似度,最后完成模型的预测。

训练Siamese Network得到相似度函数(similarity function)

1、第一种训练Siamese Network的方法。
① 构建正负样本。
正样本的构建:首先从训练数据集(train set)中随机抽取一张图像,然后从随机选择出图像的类别下再随机抽取一张图像,构成正样本,并将标签设置为1,代表相似度100%。
负样本的构建:从train set中随机抽取一张图像,然后删除该类别,从剩余的类别中再抽取一张图像,构成负样本,并将标签设置为0。

②训练神经网络
如果是正样本,将两张正样本图像分别用x1,x2来表示。x1和x2分别通过卷积神经网络(具有参数共享的同一个神经网络)进行特征提取,输出特征向量为好h1=f(x1), h2=f(x2)。 z=|h1 - h2| 用于表示两个特征向量之间的区别。将特征向量z通过全连接层(fc)输出一个标量,标量通过sigmoid得到0-1之间的数(网络的最终输出)。这个数(网络的输出)是用于衡量输入的两张图像之间的相似度(相同类别输出应接近1,不同类别输出应接近0)。将网络的输出与标签之间的差别记做损失函数,可以使用cross entropy来衡量标签与网络预测输出之间的差别,然后使用梯度下降来更新模型中的参数。
样本训练过程同上。负样本之间的标签为0.

③预测。构建support set(k-way n-shot)。其中的类别不包含在训练数据集中。输入query,其类别必须属于support set中的任意一个类别。将query与support set中的图像分别当做上面训练好的Siamese Network的输入,计算其相似度。逐一将query与support set中的所有图像都做对比,选择出相似度最大的support set中对应的图像的类别,作为query的预测类别。

2、第二种训练Siamese Network的方法。triplet loss.

① train set:从train set中每次选择三张图像。第一张图像是从train set中随机选择一张,作为anchor。第二章图像是从anchor所对应的类别中随机选取一张图,作为positive。第三张图像是从排除掉anchor对应类别的剩余图像中任意选择一张图像,作为negative。
②将positive、anchor、negative图像分别记做x+,xa,x-,输入到神经网络中,得到特征向量f(x+),f(xa),f(x -). 分别计算positive、negative图像与anchor在特征空间上的距离。计算距离d+ = ||f(x+) - f(xa)||二范数的平方,距离d- = ||f(xa) - f(x-)||二范数的平方。
希望网络可以将相同类别的特征向量在特征空间中应尽可能的接近,而不同类别之间的特征向量在特征空间应尽可能的远离,因此求得的距离d,d+应该尽可能小,而d-应尽可能的大。
③损失函数
对于positive sample在特征空间中应尽可能的接近anchor,即d+尽可能小。
对于negative sample在特征空间应尽可能的远离anchor,即d-尽可能大。
通过设定一个超参数margin,来区分正负样本。
若d- >= d+ + margin,即认为这组样本的分类结果正确,loss=0.
否则,loss = d+ + margin - d-.
整体损失函数为: Loss(xa, x+, x -) = max{0, d+ + margin - d-}

基于Siamese Network解决few-shot learning的思想

1、在大规模的数据集上训练一个Siamese Network,使Siamese Network学习到训练数据集中数据之间的异同。
2、使用Siamese Network将图像映射到特征空间中,解决few-shot learning问题。
3、构建support set。其中k-way代表k个类别,n-shot代表每个类中具有n张图像。support set中的类别不属于train set中的类别。
4、query图像作为预测图像。query与support set中的每张图像计算距离,距离最近的类别为query的预测类别。

Fine-tune

在大规模数据集上预训练模型,然后在小规模数据集(support set)上做微调(fine-tune)。
1、(xj,yj)为support set中的一个样本。其xj为图像数据,yj为图像所对应的标签。
2、 pretrain model: 将图像映射成特征向量。
3、 softmax classifier: pj=softmax(W * f(xj) + b). 输出为pj的概率分布。W的每一行对应support set中的类别数,其值为每一个类别中所有图像所求得的特征向量的做平均后的均值向量。pj的维度为support set中的类别数,其中的每个元素为对应support set中类别的概率值。pj中的元素用于反应query图像的特征与support set中图像特征之间的相似性。

若不使用fine-tune,W,b为固定的值,W=M, b=0. 其中M为support set中每一个类别所对应的均值向量。
均值向量: 对support set中每一类的所有样本通过神经网络后得到的特征向量求平均得到。

使用fine-tune,通过support set更新W,b。
使用交叉熵损失函数(cross Entropy)衡量真实标签yj与预测输出pj之间的差别。
min∑ j Cross Entropy(yj, pj). 该公式为对于support set中每一个样本都会产生一个预测输出与真实值计算得到一个cross entropy loss,将得到的所有loss求和作为目标函数。通过最小化这个函数,以此来使得模型的预测输出接近真实标签,来优化W,b。

由于support set数据量规模很小,因此需加入正则化项或者合理的参数初始化,来防止模型过拟合,提高模型的准确率。

1、参数初始化: 在神经网络中初始化操作通常使用随机初始化,但由于support set数据量很小,随机初始化操作并不适用于此。在few-shot learning中,W,b的初始化通常设置为W=M,b=0作为该分类器的初始化,以此为基础来训练这个分类器。M为support set中每一个类别所对应的均值向量。

2、正则化项来防止模型过拟合。
Entropy Regularization:将query图像记为x。通过神经网络得到特征向量f(x).
概率分布P=softmax(W*f(x) + b)。 使用Entropy计算P中每个元素所包含的信息量,公式如下:
H§ = -∑i pi log(pi). pi为p中的第i个元素。
对于每一个query图像都求一个entropy,将所有的entropy求和再取平均即为Entropy Regularization。目的是希望Entropy Regularization越小越好。

3、将Wf(x)的内积替换为Cosine Similiarity。即Sim(W, f(x)). Sim(W, f(x))=Wf(x) / (||W||2 * ||f(x)||2). Cosine Similiarity就是在求内积之前对W和f(x)做归一化,也就是将两个向量的二范数归一化成1.

元学习(meta learning)和小样本学习(few-shot learning)相关推荐

  1. 元学习之《Matching Networks for One Shot Learning》代码解读

    元学习系列文章 optimization based meta-learning <Model-Agnostic Meta-Learning for Fast Adaptation of Dee ...

  2. Limited Data Rolling Bearing Fault Diagnosis With Few-Shot Learning(基于小样本学习的有限数据滚动轴承故障诊断)

    Limited Data Rolling Bearing Fault Diagnosis With Few-Shot Learning 基于小样本学习的有限数据滚动轴承故障诊断 摘要 这一篇文章主要研 ...

  3. Multi-Scale Metric Learning for Few-Shot Learning(用于小样本学习的多尺度度量学习)

    Abstract 本文提出了一种新的小样本学习方法,名字叫多尺度度量学习(multi-scale metric learning, MSML),能提取多尺度特征,学习样本间的多尺度关系,进行少镜头学习 ...

  4. 【小样本学习】什么是小样本学习?这篇综述文章用166篇参考文献告诉你答案...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来源:机器之心 再次编辑:夕小瑶的卖萌屋 什么是小样本学习?它与弱监督学习等问题有何差 ...

  5. 小样本点云深度学习库_论文 | 小样本学习综述

    转自:专知[https://www.zhuanzhi.ai/] [导读]现有的机器学习方法在很多场景下需要依赖大量的训练样本.但机器学习方法是否可以模仿人类,基于先验知识等,只基于少量的样本就可以进行 ...

  6. 元学习Meta learning深入理解

    目录 基本理解 元学习与传统的机器学习不同在哪里? 基本思想 MAML MAML与pre-training有什么区别呢? 1. 损失函数不同 2. 优化思想不同 MAML的优点及特点 MAML工作机理 ...

  7. 【论文整理】小样本学习Few-shot learning论文整理收藏(最全,持续更新)

    一.综述类 1. Generalizing from a Few Examples: A Survey on Few-Shot Learning 2. Generalizing from a few ...

  8. 小样本学习(Few-shot Learning)

    小样本学习(Few-shot Learning) 定义 小样本学习(Few-shot Learning)是元学习的一种(Meta Learning),其目的是learn to learn.简单的说就是 ...

  9. 小样本学习综述 “Generalizing from a Few Examples: A survey on Few-shot Learning”

    利用先验知识,FSL(Few-shot Learning)可以快速推广到只包含少量监督信息样本的新任务. FSL方法从如何利用先验知识的层面上可以分为三类: (1)数据,利用先验知识来增强监督经验: ...

最新文章

  1. VS+Eigen+CUDA compile error: C2244 and MSB3721
  2. mysql 表字段大小写敏感_各种数据库大小写敏感问题总结
  3. Python中排序函数sorted和排序方法sort的异同点对比分析
  4. 使用C语言来实现模块化
  5. html label标签 ie6,说说HTML5中label标签的可访问性问题
  6. mysql后台修改表_mysql之约束以及修改数据表
  7. spring4.0基于Java配置_Spring MVC学习笔记之Controller查找(基于Spring4.0.3)
  8. SQL Server数据库的兼容级别:错误;找不到xxxx对象
  9. mysql的varchar 和text_MySQL中char、varchar和text的区别
  10. java中class.forName和classLoader加载类的区分
  11. 金蝶k3服务器系统吗,金蝶k3server2008服务器配置
  12. 微信音频silk导出多个mp3,合并成一个mp3,压缩大小
  13. JS正则表达式--正则量词与元字符
  14. chromecast投屏_利用谷歌Chromecast,3个简单的步骤教你将手机投屏到电视上
  15. 2021ACA世界大赛中国赛区完美收官,创意设计收获百万级关注
  16. Zabbix如何配置告警短信?(预警短信通知设置流程)
  17. 使用dd命令在Linux下创建大文件,批量大小文件生成方法
  18. vi php pear,PEAR
  19. SpringBoot项目中访问HTML页面
  20. Python-字典学习

热门文章

  1. linux检查防病毒系统,[操作系统-Linux]常用的防病毒软件
  2. 六西格玛入门篇(一)-- 优思学院
  3. 关于stimulsoft reports 报表格式化format问题描述
  4. word超链接显示HYPERLINK
  5. su命令切换到root用户_如何在Linux中使用su命令成为超级用户或root?
  6. wget无法建立SSL连接
  7. 一份Python就业指导
  8. 三维人脸识别预处理,3D face recognition preprocess
  9. WinNTSetup v3.8.7 正式版绿色增强版
  10. coc机器人苹果_coc机器人免费版-上海装修报价