孪生网络学习笔记
上一篇sentence-bert中笔者简单的介绍了孪生网络的概念,这篇主要唠唠。
既然是孪生网络,说明肯定是存在两个相似的网络结构?为啥要使用孪生网络?下面分析
和对比学习一样,孪生网络概念最先也是在图像中提出
从图1中,我们可以看到,其实每张图片是经过了各自的卷积神经网络,但是两个卷积神经网络的所有权值(所有参数)都是共享的,这就像一对双胞胎一样,因此我们管这种权值共享的网络称之为孪生网络。而权值共享的目的有两个:
-(1)减少参数量,减小模型的复杂度;
-(2)将两个不同空间维度的向量映射到同一个空间维度上,使其数据分布保持一致,在同一空间维度上对不同向量进行编码。
孪生网络主要包括4层
主要包含四层:
- 词表示层(Embedding Layer)
wordembeding层。
-
编码层(Encoder Layer)
-
融合层(Aggregated Layer)
-
预测层(Predict Layer)------------恢复内容开始------------
孪生网络学习笔记
上一篇sentence-bert中笔者简单的介绍了孪生网络的概念,这篇主要唠唠。
既然是孪生网络,说明肯定是存在两个相似的网络结构?为啥要使用孪生网络?下面分析
和对比学习一样,孪生网络概念最先也是在图像中提出
从图1中,我们可以看到,其实每张图片是经过了各自的卷积神经网络,但是两个卷积神经网络的所有权值(所有参数)都是共享的,这就像一对双胞胎一样,因此我们管这种权值共享的网络称之为孪生网络。而权值共享的目的有两个:
-(1)减少参数量,减小模型的复杂度;
-(2)将两个不同空间维度的向量映射到同一个空间维度上,使其数据分布保持一致,在同一空间维度上对不同向量进行编码。
有两个一摸一样的网络,同时输入两个input,
Siamese网络要给出输入图像X1和X2的相似度,所以它必须能接受两个图像作为输入,如下图:
图中上下两个模型,都由CNN构成,两个模型的参数值完全相同。不同于传统CNN的地方,是Siamese网络并不直接输出类别,而是输出一个向量(比如上图中是128个数值组成的一维向量):
若输入的图像X1和X2为同一个人,则上下两个模型输出的一维向量欧氏距离较小
若输入的图像X1和X2不是同一个人,则上下两个模型输出的一维向量欧氏距离较大
所以通过对上下两个模型输出的向量做欧氏距离计算,就能得到输入两幅图像的相似度。
「ybdesire」
大家可能会有疑问:共享权值是什么意思?左右两个神经网络的权重一模一样?
答:是的,在代码实现的时候,甚至可以是同一个网络,不用实现另外一个,因为权值都一样。对于siamese network,两边可以是lstm或者cnn,都可以。
大家可能还有疑问:如果左右两边不共享权值,而是两个不同的神经网络,叫什么呢?
答:pseudo-siamese network,伪孪生神经网络,如下图所示。对于pseudo-siamese network,两边可以是不同的神经网络(如一个是lstm,一个是cnn),也可以是相同类型的神经网络。
在本文匹配应该是有场景的
简单来说,衡量两个输入的相似程度。孪生神经网络有两个输入(Input1 and Input2),将两个输入feed进入两个神经网络(Network1 and Network2),这两个神经网络分别将输入映射到新的空间,形成输入在新的空间中的表示。通过Loss的计算,评价两个输入的相似度。参考
孪生网络主要包括4层
主要包含四层:
- 词表示层(Embedding Layer)
wordembeding层。
-
编码层(Encoder Layer)
-
融合层(Aggregated Layer)
-
预测层(Predict Layer)