反向传播如何在暹罗神经网络中工作?


13

我一直在研究Yann LeCun和他的同事在1994年提出的用于识别签名的暹罗神经网络的体系结构(“使用暹罗时延神经网络的签名验证” .pdf,NIPS 1994)

我了解了这种体系结构的总体思路,但是我真的无法理解这种情况下反向传播的工作原理。我无法理解神经网络的目标值是什么,这将允许反向传播正确设置每个神经元的权重。

图片来自Chen Liu的“概率连体学习表示网络”(多伦多大学,2013年)。

在这种体系结构中,该算法计算两个神经网络的最终表示之间的余弦相似度。论文指出:“当给出真正的签名时,所需的输出是两个子网(f1和f2)的输出之间的小角度。 ,并且如果签名之一是伪造,则大角度书写”。

我真的不明白他们如何使用二进制函数(两个向量之间的余弦相似度)作为目标来进行反向传播。

在暹罗神经网络中如何计算反向传播?


我无法下载本文。...您还有其他来源还是Dropbox来源?
Brethlosze 2015年

Answers:


11

这两个网络共享相似的体系结构,但它们的权重与出版物第4节[1]中描述的相同。

他们的目标是学习在签名真实时将其输出向量之间的余弦相似性降至最低的特征,以及在伪造伪造时的输出向量之间的余弦相似度最大化(这也是反向传播目标,但未提供实际的损失函数)。

余弦相似度两个向量是相似度的度量,它为您提供它们之间的夹角的余弦值(因此,其输出不是二进制的)。如果您关心的是如何反向支持输出true或false的函数,请考虑二进制分类的情况。cos(A,B)=ABABA,B

您不应该更改输出层,它由训练有素的神经元组成,这些神经元具有线性值及其对输入的更高层次的抽象。整个网络应该一起训练。输出和都通过函数传递,该函数输出它们的余弦相似度(如果相似则为,否则为)。鉴于此,并且我们有两组输入元组,您可能需要针对其进行训练的最简单的损失函数的示例可能是:O1O2cos(O1,O2)10XForged,XGenuine

L=(xA,xB)XForgedcos(xA,xB)(xC,xD)XGenuinecos(xC,xD)

训练好网络后,只需输入两个签名,即可将两个输出传递给函数,并检查它们的相似性。cos(O1,O2)

最后,为保持网络权重相同,有几种方法可以做到这一点(它们也用于递归神经网络);一种常见的方法是在执行“梯度下降”更新步骤之前,对两个网络的梯度求平均。

[1] http://papers.nips.cc/paper/769-signature-verification-using-a-siamese-time-delay-neural-network.pdf


我知道目标是最小化余弦相似度,但是我不明白我应该在神经网络的输出层中插入什么。创建神经网络时,将目标放在最后一个输出层。如果它们是价值,那没关系。但是,如果目标是函数,则在哪里可以找到要填充的值?谢谢
DavideChicco.it 2015年

我已经更新了答案。您的输出层将是它输出到余弦相似度函数的另一个普通层。连接余弦相似度函数的两个网络应根据损失准则一起训练。最后,我建议您在这种情况下可能遇到的最简单的损失。
Yannis Assael 2015年

1
谢谢。我想我意识到了我的问题:这是Torch7中这种神经网络体系结构的实现。在这里,在训练和测试之前,在神经网络构建期间,我必须指定很多东西,包括输入数据集值和输出目标层值。过去,我处理的监督问题始终具有固定的输出目标图层值(例如,真/假标签或[0,1]间隔中的值)。但这一次不同:输出层是一个函数,取决于训练期间将要计算的两个值。这个对吗?
DavideChicco.it,2015年

恰好这次,您在输出层中具有的线性值不是二进制的(因此,它只是神经元的输出)。此外,在这种情况下,您没有直接的输出目标值,但是有损失函数需要优化。最后,输出层是的输出 神经元(单元的数目 由模型体系结构定义并在本文中引用)。取决于所选择的激活函数(tanh,Sigmoid等)的神经元分别具有线性而非二进制激活[-1,1]或[0,1]。noutputnoutput
Yannis Assael 2015年

谢谢@iassael。您对如何在Torch7中实现这一点有任何想法吗?
DavideChicco.it 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.