4.3 Siamese 网络(Siamese network)

函数d的作用是输入两张人脸,然后输出相似度。实现这个功能的一个方式是用Siamese网络

向量(编号1)是由网络深层的全连接层计算出来的,叫做f(x(1))f(x^{(1)})。可以把f(x(1))f(x^{(1)})看作是输入图像x(1)x^{(1)}的编码,即取输入图像(编号2),然后表示成128维的向量

如果要比较两个图片,要做的是把第二张图片喂给有同样参数的同样的神经网络,得到一个不同的128维的向量(编号3),第二张图片的编码叫做f(x(2))f(x^{(2)})

然后定义dd,将x(1)x^{(1)}x(2)x^{(2)}的距离定义为两幅图片的编码之差的范数:

d(x(1),x(2))=f(x(1))f(x(2))22d( x^{( 1)},x^{( 2)}) =|| f( x^{( 1)}) - f( x^{( 2)})||_{2}^{2}

对于两个不同的输入,运行相同的卷积神经网络,然后比较它们,就叫做Siamese网络架构

训练Siamese神经网络:不同图片的CNN网络所有结构和参数都是一样的。所以要做的是训练一个网络,利用梯度下降算法不断调整网络参数,使得属于同一人的图片之间d(x(1),x(2))d(x^{(1)},x^{(2)}) 很小,而不同人的图片之间d(x(1),x(2))d(x^{(1)},x^{(2)})很大

即神经网络的参数定义了一个编码函数f(x(i))f(x^{(i)}),如果给定输入图像x(i)x^{(i)},这个网络会输出x(i)x^{(i)}的128维的编码。然后要做的就是学习参数

  • 使得如果两个图片x(i)x^{( i)}x(j)x^{( j)}是同一个人,那么得到的两个编码的距离就小

  • 如果x(i)x^{(i)}x(j)x^{(j)}是不同的人,那么编码距离就大

如果改变这个网络所有层的参数,会得到不同的编码结果,要做的是用反向传播来改变这些所有的参数,以确保满足这些条件

Last updated