对称性是非常重要的,因为它要学习一个距离度量——到的距离应该等于到的距离。
如果我们仅仅把两个样本拼接起来,把它作为神经网络的单一的输入,每个样本将会是与一个不同权重集合的矩阵相乘(或缠绕),这会打破对称性。没问题,这样子网络依然能成功的为每个输入学习到完全相同的权重,但是对两个输入学习相同的权重会更容易一些。所以我们可以让两个输入通过完全相同,共享参数的网络,然后使用绝对差分作为线性分类器的输入--这是孪生网络必须的结构。两个完全相同的双胞胎,共用一个头颅,这就是孪生网络的由来。
CNN 孪生网络的网络架构
不幸的是,如果我们想介绍清楚为什么卷积神经网络可以工作,那这篇博客就会长了去了。如果你想理解卷积神经网络,我建议你去学习CS231然后去colah。对于没有深度学习经验的读者,我只能这样概况CNN:
一张图像是3D像素矩阵,一个卷积层是一个神经元连接到前面一层神经元的一小部分(译者注:局部连接性,比如用3*3的卷积核),然后使用与这个神经元相同的连接权重在一张图片或者特征块上滑动一遍,生成另外一个3d的神经元。一个最大池化层是在空间上缩小特征图用的。很多这样的层按照顺序堆叠到一起就可以用梯度下降来训练了,它们在图像任务上表现良好。
我仅对CNN做一个精简介绍,因为这不是本文的重点。Koch等人使用卷积孪生网络去分类成对的Omniglot图像,所以这两个孪生网络都是卷积神经网络。这两个孪生网络每个的架构如下:64通道的10×10卷积核,relu->max pool->128 通道的 7×7卷积核,relu->max pool->128通道的4×4卷积核,relu->max pool->256 通道的 4×4卷积核。
孪生网络把输入降低到越来越小的 3d 张量上,最终它们经过一个4096神经元的全连接层。两个向量的绝对差作为线性分类器的输入。这个网络一共有38,951,745个参数——96%的参数属于全连接层。这个参数量很大,所以网络有很高的过拟合风险,但是成对的训练意味着数据集是很大的,所以过拟合问题不会出现。
架构的草图
输出被归一化到[0,1]之间,使用sigmoid函数让它成为一个概率。当两个图像是相同类别的时候,我们使目标 t=1,类别不相同的时候使 t=0。它使用逻辑斯特回归来训练。这意味着损失函数应该是预测和目标之间的二分类交叉熵。损失函数中还有一个L2权重衰减项,以让网络可以学习更小的或更平滑的权重,从而提高泛化能力: