【深度学习:Few-shot learning】理解深入小样本学习中的孪生网络

【深度学习:Few-shot learning】理解深入小样本学习中的孪生网络

    • 深入理解孪生网络:架构、应用与未来展望
      • 小样本学习的诞生
      • 元学习
      • 小样本学习
      • 孪生网络的基本概念
      • 孪生网络的细节
      • Triplet Loss
      • 架构特点
      • 关键组件
      • 训练过程
      • 主要应用领域
      • 未来展望
      • 示例图片
      • 结论

备注:本篇博客中有部分图片由GPT生成

深入理解孪生网络:架构、应用与未来展望

在人工智能和机器学习的领域中,**孪生网络(Siamese Network)**已成为一种重要的神经网络架构。这种网络以其独特的方式处理相似性比较任务而闻名,例如在面部识别、签名验证和图像匹配中。在这篇博客中,我们将深入探讨孪生网络的工作原理、主要应用和潜在的未来发展方向。

小样本学习的诞生

人类本身能够通过极少数的样本识别一个新物体,可以凭借动物图册上的各种图片记住不同的动物。在人类的快速学习能力的启发下,研究员希望机器学习模型在学习; 一定类型的大量数据后,对于新的类型,只需要少量的样本就可以快速学习,这就是Few-shot Learning要解决的问题。

Few-shot Learning 是Meta Learning在监督学习领域的应用。Meta Learning,又称为learning to learn,该算法旨在让模型学会“学习”,能够处理类型相似的任务,而不是只会单一的分类任务。

元学习

Meta Learning (元学习)中,在 meta training 阶段将数据集分解为不同的 meta task,去学习类别变化的情况下模型的泛化能力,在 meta testing 阶段,面对全新的类别,不需要变动已有的模型,就可以完成分类。

也就是说,few-shot的训练集中包含了很多的类别,每个类别中有多个样本。在训练阶段,会在训练集中随机抽取C个类别,每个类别含K个样本(总共CK 个数据),构建一个 meta-task,作为模型的支撑集(support set)输入;再从这 C个类别中剩余的数据中抽取一批(batch)样本作为模型的预测对象(batch set)。即要求模型从CK个数据中学会如何区分这C个类别,这样的任务被称为 C-way K-shot 问题。

小样本学习

Few-shot Learning指从少量标注样本中进行学习的一种思想。Few-shot Learning与标准的监督学习不同,由于训练数据太少,所以不能让模型去“认识”图片,再泛化到测试集中。而是让模型来区分两个图片的相似性。当把Few-shot Learning运用到分类问题上时,就可以称之为Few-shot Classification,当运用于回归问题上时,就可以称之为Few-shot Regression。下面提到的Few-shot Learning主要针对分类问题进行讨论。

孪生网络的基本概念

孪生网络(Siamese Network)是一类神经网络结构,它是由两个或更多个完全相同的网络组成的。孪生网络通常被用于解决基于相似度比较的任务,例如人脸识别、语音识别、目标跟踪等问题。

孪生网络的基本思想是将输入数据同时输入到两个完全相同的神经网络中,这两个网络共享相同的权重和参数。通过学习输入数据在这两个网络中的表示,孪生网络可以计算出两个输入样本之间的相似度。处理过程如下:

  1. 将两个输入样本通过各自的神经网络得到两个表示向量。
  2. 使用一种度量方法(例如欧氏距离、余弦相似度等)计算这两个向量之间的相似度得分。
  3. 根据相似度得分进行分类或回归等操作。

孪生网络的细节

训练一个孪生网络首先要有一个大的分类数据集,数据有标注,每一类下面有很多的样本。比如下面的数据集有5类,分别是哈士奇,大象,老虎,鹦鹉,汽车。

在这里插入图片描述
基于这个训练集,我们要构造正样本(Positive Samples)和负样本(Negative Samples)。正样本可以告诉神经网络哪些事物是同一类,负样本可以告诉神经网络事物之间的区别。给正样本打上标签1表示同一类,负样本打上标签0表示不同类。如下图所示,这些样本都是从上面的分类数据集里随机抽样出来的。

在这里插入图片描述

然后我们可以搭一个神经网络来提取特征(比如做两次卷积),最后得到特征向量 f ( x ) f(x) f(x)
在这里插入图片描述

将输入的 x 1 x_1 x1 x 2 x_2 x2送入我们搭建的神经网络 f ( ⋅ ) f(·) f(),得到特征向量 h 1 h_1 h1 h 2 h_2 h2;然后将这两个向量相减再求绝对值,得到向量 z = ∣ h 1 − h 2 ∣ z=|h_1-h_2| z=h1h2,表示这两个向量之间的区别;再通过一个或一些全连接层,最后用Sigmoid激活函数将值映射到0到1之间。

在这里插入图片描述
这个最终的输出 s i m ( x 1 , x 2 ) sim(x_1, x_2) sim(x1,x2)就可以用来衡量两个图片之间的相似度(Similarity)。如果两个图片相似,输出应该接近1;如果不同,则应该接近0。

上面提到过样本是有标签的,1表示同一类,0表示不同类。结合标签和刚才的输出 s i m ( x 1 , x 2 ) sim(x_1, x_2) sim(x1,x2)就能选择一个损失函数Loss来计算损失,接着就是老一套的梯度下降和反向传播。反向传播首先更新全连接层的参数,然后进一步传播到卷积层的参数,如下图所示。

在这里插入图片描述
通过不断的迭代,最终得到一个效果较好的网络。通过这个网络,我们就可以让机器具有对比事物的能力,为后续的小样本学习奠定基础。

One-shot 预测
首先需要提供 Support Set ,注意Support Set里出现的图片不在训练集里,然后提供QueryQuery应该是Support Set中的某一类,然后QuerySupport Set 逐一进行对比计算相似度,选取相似度最大的作为预测结果
在这里插入图片描述

Triplet Loss

Triplet Loss是另一种训练Siamese Network的方法。它也需要有和上面一样的分类数据集。基于这个数据集,我们需要构造一个三元组。从数据集里随机选取一个图片作为锚点 x a x^a xa(anchor),然后在和它相同类别的数据中随机选一个不同的图片作为正样本 x + x^+ x+(positive),在不同类别的数据中随机选一个作为负样本 x − x^- x(negative)。

和前面一种方法一样,得到三元组的样本之后也通过一个神经网络提取特征,分别得到特征向量 f ( x + ) , f ( x a ) , f ( x − ) f(x^+), f(x^a), f(x^-) f(x+),f(xa),f(x)。然后分别计算正样本和负样本与锚点之间的距离(二范数的平方),得到 d + d^+ d+ d − d^- d 。整个过程如下图所示。

在这里插入图片描述
由于正样本和锚点是同一类,所以 d + d^+ d+应该小;负样本和锚点是不同类, d − d^- d应该大。并且 d + d^+ d+要尽可能小, d − d^- d 要尽可能大,使得他们容易区分。呈现在特征空间里就是下面这个样子。
在这里插入图片描述
损失函数
在这里插入图片描述
loss为零的情况: ( d − ) − ( d + ) > = α (d^-) - (d^+) >= \alpha (d)(d+)>=α (α是我们设置的超参数) ,说明此时网络能区分正负样本

loss不为零的情况:若不满足上述 ( d − ) − ( d + ) > = α (d^-) - (d^+) >= \alpha (d)(d+)>=α 条件,则令 l o s s = ( d + ) + α − ( d − ) loss = (d^+) + \alpha - (d-) loss=(d+)+α(d) , 在优化过程中,我们希望loss越小越好,此时就会朝着 d + d^+ d+ 变小且 d − d^- d 变大的方向优化,那么就会使得同一样本距离越来越小,不同样本越来越大
在这里插入图片描述
在这里插入图片描述
测试
由上述方法得到的神经网络,最终输出为 d + d^+ d+ d − d^- d ,我们此时将 Query输入网络,得到dist,找出最小的那个dist即可
在这里插入图片描述

架构特点

  • 参数共享:孪生网络的子网络共享相同的权重,这意味着对于所有输入,都是通过相同的权重和参数来处理的。这不仅减少了模型的参数总数,还帮助网络学习更一致的特征表示。
  • 相似性学习:孪生网络的核心任务是学习输入之间的相似性。这通常通过比较特征表示来实现,例如使用欧几里得距离或余弦相似度。
  • 灵活性:尽管孪生网络最常用于成对的数据,但它们也可以扩展到处理多个并行输入的复杂任务。

关键组件

  • 输入层: 接收原始数据(如图像、文本等)。
  • 特征提取层: 通常是一系列卷积层,用于提取输入数据的特征。
  • 最后的全连接层: 生成最终的特征表示,用于比较。

训练过程

在训练过程中,孪生网络通过最小化一个特殊的损失函数(例如对比损失)来学习。这个损失函数鼓励网络学习使得相似输入的特征表示接近,而不相似输入的特征表示远离。

主要应用领域

孪生网络在许多领域都有广泛应用,其中包括:

  • 面部识别:通过比较不同图像中的面部特征,孪生网络可以用于验证身份。
  • 签名验证:孪生网络可以用来比较手写签名的相似性,以验证签名的真实性。
  • 图像匹配:在计算机视觉中,孪生网络可以用来识别不同图像中相似的对象或场景。

未来展望

随着技术的进步,孪生网络可能会在以下方面有新的发展:

  • 多模态学习:结合不同类型的数据(如文本、图像和声音),孪生网络可以用于更复杂的比较任务。
  • 强化学习的集成:孪生网络可以与强化学习结合,以在动态环境中进行更有效的决策。
  • 自适应学习:通过持续学习和适应新数据,孪生网络可以在变化的环境中保持其效能。

示例图片

为了更好地解释孪生网络的概念,我将生成一些示例图片:

  1. 两张面孔图片,展示如何通过孪生网络进行比较。
  2. 两个签名的例子,说明孪生网络在签名验证中的应用。
  3. 一个物体在连续视频帧中的图片,演示物体追踪的过程。 这些示例图片将有助于理解孪生网络在实际应用中的工作方式。

面部识别示例
生成一个示例,展示两张面部图片,旁边标注“相似”或“不相似”,以展示孪生网络如何进行面部识别比较。
在这里插入图片描述
上图展示了一个面部识别的示例,用于说明孪生网络如何比较两张面部图像来判断它们是否相似。

签名验证示例
接下来,我将生成一个关于签名验证的示例图像。这个图像将展示两个签名,旁边标注“相似”或“不相似”,以展示孪生网络在签名验证中的应用。
在这里插入图片描述
上图展示了签名验证的示例,用于说明孪生网络如何比较两个签名以判断它们是否相似。

物体追踪示例
最后,我将生成一个关于物体追踪的示例图像。这个图像将展示一个物体在连续视频帧中的不同位置,以展示孪生网络在物体追踪中的应用。

在这里插入图片描述

结论

孪生网络作为一种强大的机器学习工具,在众多领域展现了其独特的价值。随着研究的深入和技术的发展,我们期待看到孪生网络在未来解决更多复杂和挑战性的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/588132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内网常规攻击路径

点击星标,即时接收最新推文 随着网络技术的发展,企业内部网络架构的变化,网络设备多样性的增加,面对内网攻击,防御体系逐渐阶梯化,通过不同维度的防御联动,将攻击拒之门外。对于突破网络边界后进…

跨境电商:平台选择的艺术与科学

一、平台类型与特点 亚马逊:作为全球最大的电商平台之一,亚马逊拥有庞大的用户群体和完善的物流体系。它以优质的服务和高效的配送著称,但竞争也相对激烈。eBay:eBay是一个全球性的在线拍卖和购物网站,它的市场覆盖面…

十大排序算法归纳

目录 排序算法的分类 插入排序算法模板 选择排序算法模板 冒泡排序算法模板 希尔排序算法模板 快速排序算法模板 归并排序算法模板 堆排序算法模板 基数排序算法模板 计算排序算法模板 桶排序算法模板 排序算法的分类 插入:插入,折半插入&am…

【Vue2+3入门到实战】(18)VUE之Vuex状态管理器概述、VueX的安装、核心概念 State状态代码实现 详细讲解

目录 一、[Vuex](https://vuex.vuejs.org/zh/) 概述1.是什么2.使用场景3.优势4.注意: 二、需求: 多组件共享数据1.创建项目2.创建三个组件, 目录如下3.源代码如下 三、vuex 的使用 - 创建仓库1.安装 vuex2.新建 store/index.js 专门存放 vuex3.创建仓库 store/index…

万字盘点 Android 领域在 2023 年的重要技术:AI, 14, Compose, 鸿蒙...

AICore 2022 年底横空出世的 GPT-3.5 引发了全球的大模型 LLM 狂潮。作为在 AI 领域耕耘多年的巨头,Google 自然不会坐视不管,于 2023 年底之际发布了超越 GPT-4 的 Gemini 系列模型,其在多模态领域的表现令无数人震撼。 而对于 Android 开发…

我在Vscode学OpenCV 图像处理四(轮廓查找 cv2.findContours() cv2.drawContours())-- 待补充

图像处理四(轮廓查找) 一、前言1.1 边缘检测和轮廓查找的区别是什么1.1.1 边缘检测:1.1.2 轮廓查找: 1.2 边缘检测和轮廓查找在图像处理中的关系和流程 二、查找并绘制轮廓2.1 cv2.findContours():2.1.1 详细介绍&…

LVS那点事

LVS 原理 IPVS LVS 的 IP 负载均衡技术是通过 IPVS 模块来实现的,IPVS 是 LVS 集群系统的核心软件,它的主要作用是:安装在 Director Server 上,同时在 Director Server 上虚拟出一个 IP 地址,用户必须通过这个虚拟的…

【ROS2】MOMO的鱼香ROS2(二)ROS2入门篇——ROS2初体验

ROS2初体验 引言专业术语认识1 认识ROS21.1 ROS2版本对照表1.2 ROS与ROS2对比1.3 ROS2架构1.3.1 DDS实现层1.3.2 ROS中间件接口(RMW)1.3.3 ROS2客户端库 RCL 2 安装ROS22.1 ROS安装(一键式)2.2 手动安装ROS22.2.1 添加ROS软件源2.…

电商大数据商品采集:阿里巴巴1688电商网站货源产品信息采集

商品详情大数据采集:阿里巴巴1688电商网站货源产品信息采集 ------------- 数据采集满足多种业务场景:适合产品、运营、销售、数据分析、政府机关、电商从业者、学术研究等多种身份 职业。 舆情监控:全方位监测公开信息,抢先获取舆论趋势。 市…

java虚拟机内存管理

文章目录 概要一、jdk7与jdk8内存结构的差异二、程序计数器三、虚拟机栈3.1 什么是虚拟机栈3.2 什么是栈帧3.3 栈帧的组成 四、本地方法栈五、堆5.1 堆的特点5.2 堆的结构5.3 堆的参数配置 六、方法区6.1 方法区结构6.2 运行时常量池 七、元空间 概要 根据 JVM 规范&#xff0…

在Spring Cloud中使用Ribbon完成一个简单的负载均衡demo

Spring Cloud系列断更了有一段时间了,这段时间最近都在忙着项目上的事,天天修复bug以及调整需求,反正各种操劳,了解业务需求,然后开发相关功能,很久都没碰Spring Cloud系列的相关文章了,最近回头…

亲爱的程序猿们,元旦快乐!

新年祝福 在这个充满欢笑和祝福的日子里,我想对你们说: 新的一年,愿你们像代码一样充满逻辑,像算法一样追求高效,像编程语言一样多样化! 2024年即将到来,预测几个行业趋势: 人工…

【回溯】0-1背包Python实现

文章目录 [toc]问题描述形式化描述 回溯法时间复杂性Python实现 个人主页:丷从心 系列专栏:回溯法 问题描述 给定 n n n种物品和一背包,物品 i i i的重量是 w i w_{i} wi​,其价值为 v i v_{i} vi​,背包的容量为 c …

Qt基础之四十五:Qt国际化(I18N)

国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),这种奇葩的缩写方式,让我想起了NBA球星“字母哥”。 下面看下Qt实现的动态语言切换效果。 一.效果 二.源码 QHSettingDialog.h #ifndef QHSETTINGDIALOG_H #define QHSETTINGDIALOG_H#…

Redis(认识NoSQL,认识redis,安装redis,redis桌面客户端,redis常见命令,redis的Java客户端)

文章目录 Redis快速入门1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Redis桌面客户端…

【数据结构】详细剖析线性表

顺序表与链表的比较 导言一、线性表二、线性表的存储结构三、顺序表和链表的相同点四、顺序表与链表之间的差异五、存储结构的选择六、静态顺序表的基本操作七、无头结点单链表的基本操作结语 导言 大家好,很高兴又和大家见面啦!!&#xff0…

轻量应用服务器与云服务器CVM对比——腾讯云

腾讯云轻量服务器和云服务器CVM该怎么选?不差钱选云服务器CVM,追求性价比选择轻量应用服务器,轻量真优惠呀,活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年,540元三…

液晶时钟设计

#include<reg51.h> //包含单片机寄存器的头文件 #include<stdlib.h> //包含随机函数rand()的定义文件 #include<intrins.h> //包含_nop_()函数定义的头文件 sbit RSP2^0; //寄存器选择位&#xff0c;将RS位定义为P2.0引脚 sbit RWP2^1; //读写选…

UEFI模拟环境搭建——windows+EDKII

目录 0 说明 1 安装软件 1.1 VS2019的安装 1.2 Python的安装 1.3 IASL的安装 1.4 NASM的安装 1.5 git的下载 2 EDKII的下载 3 配置环境 0 说明 个人感觉UEFI的环境搭建非常复杂&#xff0c;在经过很长一段折磨后&#xff0c;终于还是搭建成功&#xff0c;写下来记录一…

ctfshow——文件上传

文章目录 文件上传思路web 151web 152web 153知识点解题 web 154web 155web 156web 157web 158web 159web160web 161 文件上传思路 web 151 打开页面显示&#xff1a;前台校验不可靠。说明这题是前端验证。 右键查看源代码&#xff0c;找到与上传点有关的前端代码&#xff1a…