孪生网络—学习笔记

			孪生网络

一、 什么是孪生网络(one-shot)
在人脸识别中,存在所谓的one-shot问题。举例来说,就是对公司员工进行人脸识别,每个员工只有一张照片(因为每个类别训练样本少),并且员工会离职、入职(每次变动都要重新训练模型是不现实的)。如果当成分类问题,直接训练模型进行人脸识别在实际应用中是不可行。
为了解决one-shot问题,我们会训练一个模型来输出给定两张图像的相似度,所以模型学习得到的是similarity函数,通过对相似度设定一个阈值判断是否属于同一个人。

二、 孪生网络(one-shot)的意义
(1) 减少训练数据
深度学习需要大量的数据MNIST 为了 10 个类别的区分, 需要 60,000 张训练图像, 平均一个类别需要6000张训练图像,One-Shot 试图将一个类别的训练图像减少, 极端情况时减小到一张图片
(2) 在新类别的数据出现时, 无需重新训练
传统的深度神经网络无法处理没有出现在训练集中的类别,以员工刷脸打卡为例, 使用传统深度神经网络, 每一个新员工入职, 都是一个新的 类别, 需要重新训练深度神经网络,如果每天都有新员工入职, 每天都要重新训练网络, 成本非常高,One-Shot learning 可以无需重新训练即可应用于新的类别的数据
三、 孪生网络(one-shot)的原理
传统的神经网络试图学习某一个类别的图像的表达
One-Shot Learning 试图学习不同图像(可以同一类别或者不同类别)
的区别
给定图片A和图片B, 将A转换为一个表达(embedding vector) p, 将B转换为一个表达(embedding vector) q
如果 A 和 B 属于同一个类别, 那么我们希望 p 和 q 是相似的
如果 A 和 B 不属于同一个类别, 那么我们希望 p 和 q 是不相似的
相似度的度量, 欧几里得距离
在这里插入图片描述

四、 孪生网络(one-shot)的网络结构
在这里插入图片描述

   Siamese Network有两个结构相同,且共享权值的子网络(同一个网络)。分别接收两个输入X1X1与X2X2,将其转换为向量Gw(X1)与Gw(X2),再通过某种距离度量的方式计算两个输出向量的距离Ew。

假设图像A和图像B是同一个类别:
在这里插入图片描述

假设图像A和图像B是不同类别:
在这里插入图片描述

网络结构:
五、 孪生网络的损失函数
在孪生神经网络(siamese network)中,其采用的损失函数是contrastive loss,这种损失函数可以有效的处理孪生神经网络中的paired data的关系。contrastive loss的表达式如下
在这里插入图片描述

代表两个样本特征X_1和X2的欧氏距离(二范数)P 表示样本的特征维数,Y 为两个样本是否匹配的标签,Y=1 代表两个样本相似或者匹配,Y=0 则代表不匹配,m 为设定的阈值,N 为样本个数。
当 Y=1(即样本相似时),损失函数只剩下:
在这里插入图片描述

当样本相似时,通过D欧氏距离计算得出值越小,损失函数越小。
当 Y=0 (即样本不相似时),损失函数为:
在这里插入图片描述

[注意这里设置了一个阈值margin,表示我们只考虑不相似特征欧式距离在0~margin之间的,当距离超过margin的,则把其loss看做为0(即不相似的特征离的很远,其loss应该是很低的;而对于相似的特征反而离的很远,我们就需要增加其loss,从而不断更新成对样本的匹配程度)]

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年2月25日
下一篇 2023年2月25日

相关推荐