小样本学习(Few-shot Learning)

定义

小样本学习(Few-shot Learning)是元学习的一种(Meta Learning),其目的是learn to learn。简单的说就是让模型具有自己学习的能力,而这个自己学习的能力就是能区分出两种图片的异同。

小样本学习与监督学习的区别

小样本学习与普通的监督学习不一样的点在于普通的监督学习把数据分为train_settest_set,利用训练集训练卷积神经网络,再通过测试集评估模型的准确度,注意这里测试集中的所有样本都是在训练集中出现过的。
而小样本学习将数据分为train_set,support_set,query_set,利用train_set训练模型让模型具有区分不同样本异同的能力,利用support_set为模型提供更多信息来保证可以预测出query_set中的样本的类别。support_setquery_set都不存在于train_set中,这里query_set中的样本只出现在support_set中,而不出现在train_set中。

k-way n-shot

在小样本学习中,要明确几个名词:

  • k-way: 表示k个类别
  • n-shot: 表示每个类别有n个样本

Siamese Network

Siamese Network为孪生神经网络,主要是用来比较两个输入的差别,两个输入利用共享权重提取特征。其中的网络结构可以是一般的CNN也可以是ResNet等。Pytorch实现代码如下:

import torch.nn as nnclass Siamese(nn.Module):def __init__(self):super(Siamese, self).__init__()self.layers = nn.Sequential(nn.Conv2d(1, 128, kernel_size=(5, 5), stride=(3, 3), padding=2),nn.ReLU(True),nn.MaxPool2d(kernel_size=4, stride=2),nn.Dropout(0.5))self.fc = nn.Sequential(nn.Linear(2048, 512),nn.ReLU(True),nn.Dropout(0.5),nn.Linear(512, 128),nn.ReLU(True),nn.Linear(128, 2))def forward_once(self, x):x = self.layers(x)x = x.view(x.size(0), -1)x = self.fc(x)return xdef forward(self, first_img, second_img):y1 = self.forward_once(first_img)y2 = self.forward_once(second_img)return y1, y2

损失函数ContrastiveLoss

首先对于前面说的孪生神经网络,两个输入x1,x2,分别利用同一个神经网络f提取特征,然后利用全连接层+sigmoid激活函数进行输出,如果两个样本为不同类别,那么希望输出的值尽可能接近0,如果为相同类别那么输出希望尽可能接近1,然后利用梯度下降反向传播,相关流程如下图所示:

因此,定义损失函数ContrastiveLoss,
L o s s = 1 2 N ∑ n = 1 N y d 2 + ( 1 − y ) m a x ( m a r g i n − d , 0 ) 2 Loss = \frac{1}{2N}\sum_{n=1}^{N}yd^2 + (1-y)max(margin-d, 0)^{2} Loss=2N1​n=1∑N​yd2+(1−y)max(margin−d,0)2
其中:

  • N表示成对的样本(pair)数量
  • d表示孪生神经网络两个输出的欧几里得距离
  • y的值为0或1,0表示不同类别,1表示相同类别
  • margin是设置的一个阈值超过margin即为不相似,在 [ 0 , m a r g i n ] [0,margin] [0,margin]之间表示相似

Pyorch实现代码如下:

import torch.nn as nn
import torch
import torch.nn.functional as Fclass ContrastiveLoss(nn.Module):def __init__(self, margin=2.0):super(ContrastiveLoss, self).__init__()self.margin = margindef forward(self, y1, y2, label):euclidean_distance = F.pairwise_distance(y1, y2, keepdim=True)loss_contrastive = torch.mean((1 - label) * torch.pow(euclidean_distance, 2) +label * torch.pow(torch.clamp(self.margin - euclidean_distance, min=0.0), 2))return loss_contrastive

Triplet Network

Triplet Loss每次从每个类别中随机抽样一个样本记做anchor( X a X^{a} Xa),然后再从该类别中随机抽样一个样本记做positive( X + X^{+} X+),然后排除该类别,从其他的类别中随机抽样一个样本记做negative( X − X^{-} X−),然后将这三个样本送入神经网络中提取特征分别记做 f ( x a ) , f ( x + ) , f ( x − ) f(x^{a}),f(x^{+}),f(x^{-}) f(xa),f(x+),f(x−)。分别计算postive和negative于anchor在特征空间上的距离,分别记做 d + , d − d^{+},d^{-} d+,d−,如下图所示:

损失函数Triplet Loss

因此,根据上面描述的Triplet Network,我们希望 d + d^{+} d+尽可能小,而 d − d^{-} d−尽可能大,这样才能更清楚准确的描述样本。

因此,我们的损失函数就变为
L o s s = m a x ( 0 , d + − d − + α ) Loss=max(0, d^{+}-d^{-}+\alpha) Loss=max(0,d+−d−+α)
其中 α \alpha α用来描述 d + d^{+} d+与 d − d^{-} d−差值

小样本学习(Few-shot Learning)相关推荐

  1. 【论文翻译】小样本学习(Few-Shot Learning)背景和主要方向简介

    [论文翻译]小样本学习(Few-Shot Learning)背景和主要方向简介 本文主要翻译自论文Generalizing from a Few Examples: A Survey on Few-S ...

  2. 小样本学习(Few-shot Learning)综述

    作者丨耿瑞莹.李永彬.黎槟华 单位丨阿里巴巴智能服务事业部小蜜北京团队 分类非常常见,但如果每个类只有几个标注样本,怎么办呢? 笔者所在的阿里巴巴小蜜北京团队就面临这个挑战.我们打造了一个智能对话开发 ...

  3. 元学习与小样本学习 | (2) Few-shot Learning 综述

    原文地址 分类非常常见,但如果每个类只有几个标注样本,怎么办呢? 笔者所在的阿里巴巴小蜜北京团队就面临这个挑战.我们打造了一个智能对话开发平台--Dialog Studio,以赋能第三方开发者来开发各 ...

  4. 元学习——通过知识迁移的图小样本学习(Graph Few-shot Learning via Knowledge Transfer)

    文献记录-通过知识迁移的图小样本学习 1 摘要 对于图的半监督学习已经提出了很多的研究方法.类似于GNN类方法,通过聚合节点周围节点的信息来更新节点的表示,已经取得了非常不错的效果.但是,大多数的GN ...

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

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

  6. 小样本学习(few-shot learning)介绍

    1 概念 小样本学习(few-shot learning,FSL)旨在从有限的标记实例(通常只有几个)中学习,并对新的.未见过的实例进行识别. 相比于传统的深度学习和机器学习方法,小样本学习能够更好地 ...

  7. 别再用假任务做小样本学习实验了!来试试这个全新基准数据集

    ©PaperWeekly · 作者|侯宇泰 学校|哈尔滨工业大学博士生 研究方向|自然语言处理 NLP 小样本研究往往使用人为构造的 N 分类任务来评价模型性能.然而,一方面,这些人造的简单任务不能反 ...

  8. 小样本学习下的多标签分类问题初探

    论文名称:Few-shot Learning for Multi-label Intent Detection 论文作者:侯宇泰.赖勇魁.吴禹杉.车万翔.刘挺 原创作者:侯宇泰 论文链接:https: ...

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

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

  10. 人类如何从不同角度识别物体?你需要对「小样本学习」有所了解

    来源:转载自公众号「雷克世界」微信号:ROBO_AI 编译:嗯~阿童木呀.多啦A亮 概要:在视觉层次结构的较低层次,不变性使你可以识别矩形或线条,即使它是倾斜.旋转或缩放的:而在更高的层次上,它可以让 ...

最新文章

  1. python之局部变量引用赋值前的结果
  2. php nginx配置范例,nginx配置文件范文
  3. GPS服务端解析程序编写日记
  4. 机器学习——python实现SVM模型w,b的查看
  5. Java面试题:JDK不同版本处理IO流异常的标准代码
  6. android坐侧菜单栏,SlidingLayoutDemo android左侧菜单栏的实现 - 下载 - 搜珍网
  7. centos安装stress安装失败_Linux压力测试工具Stress的使用指南
  8. linux jmeter 内存,怎么在Linux下改变JMeter内存
  9. DLL注入——使用注册表
  10. 错误 LNK2005 xxx已经在 xxx.obj 中定义
  11. 图像坐标系、相机坐标系和世界坐标系 相机的内、外参数矩阵
  12. 南大计算机课程,南京大学 计算机系统基础 课程实验 2018(PA0-1)
  13. When executing step “qmake“
  14. 未来,将是Captain technology新能源汽车的舞台
  15. 做软件测试必须了解的7个常用术语
  16. c++ Win x64 注册表操作
  17. 2g内存用linux的哪个版本,Linux 下安装sql server 时 2G内存限制的最新(2019-08-15) 解决方案...
  18. kubeadm修改证书有效期
  19. 10个WordPress电商产品页面扩展功能
  20. 歪写数学史(圆周率的历史)

热门文章

  1. GDKOI2016 Day 1 T1 魔卡少女
  2. 16年收官之战,堪称完美,祝愿大家2017一举成名天下闻,虎啸龙吟展宏图
  3. 三国杀新版1V1模式52张全卡牌一览
  4. 量子科学家带给我们的思考
  5. Java 5种方法实现生产者消费者问题与2种方法实现读者写者问题
  6. 女生用电脑的基本常识
  7. 天天狼人杀改密码_是时候杀了密码了吗?
  8. 基于matlab的卷积码,基于MATLAB的卷积码性能仿真比较
  9. Rust 错误:use of moved value: `xxxx` value used here after moverustc(E0382)
  10. 荃湾体育节是游客最喜欢的香港旅游项目