• Siamese学习笔记


    孪生网络学习笔记

    上一篇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)

  • 相关阅读:
    Ubuntu
    SSH
    Markdown
    Mac OS 上的一些骚操作
    Linux Bash
    JConsole
    IDEA
    Groovy
    Github
    Git
  • 原文地址:https://www.cnblogs.com/gaowenxingxing/p/14956303.html
Copyright © 2020-2023  润新知