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

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

如果要比较两个图片,要做的是把第二张图片喂给有同样参数的同样的神经网络,得到一个不同的128维的向量(编号3),第二张图片的编码叫做f(x(2))
然后定义d,将x(1)和x(2)的距离定义为两幅图片的编码之差的范数:
d(x(1),x(2))=∣∣f(x(1))−f(x(2))∣∣22 对于两个不同的输入,运行相同的卷积神经网络,然后比较它们,就叫做Siamese网络架构

训练Siamese神经网络:不同图片的CNN网络所有结构和参数都是一样的。所以要做的是训练一个网络,利用梯度下降算法不断调整网络参数,使得属于同一人的图片之间d(x(1),x(2)) 很小,而不同人的图片之间d(x(1),x(2))很大
即神经网络的参数定义了一个编码函数f(x(i)),如果给定输入图像x(i),这个网络会输出x(i)的128维的编码。然后要做的就是学习参数
使得如果两个图片x(i)和x(j)是同一个人,那么得到的两个编码的距离就小
如果x(i)和x(j)是不同的人,那么编码距离就大
如果改变这个网络所有层的参数,会得到不同的编码结果,要做的是用反向传播来改变这些所有的参数,以确保满足这些条件