Siamese 神经网络2024 年 11 月 30 日 | 阅读 8 分钟 在庞大的深度学习世界中,孪生神经网络(SNNs)因其独特的架构和在相似性学习方面的敏锐性而占有独特的地位。SNNs 最初是在 20 世纪 90 年代为签名验证而开发的,此后在人脸识别、一次性机器学习,甚至生物信息学等领域的各种现代应用中获得了重要地位。孪生神经网络的强大之处在于其能够识别两个输入之间的相似性,即使数据有限。 本文探讨了孪生神经网络的结构、工作原理和主要应用,包括其优点和局限性。 什么是孪生神经网络?孪生神经网络(SNN)是一种神经网络结构,用于比较输入并确定它们的相似性。它由两个或更多个共享相同结构和参数的相同子网络组成。这些子网络处理不同的输入,但应用相同的操作和特征提取技术。在处理完输入后,子网络的输出使用相似性度量(如欧几里得距离或余弦相似度)进行比较。 与传统的独立对输入进行分类的神经网络不同,孪生网络专注于比较输入对。目标是学习识别输入之间相似性和差异性的方法。SNNs 通常用于人脸识别、签名验证、图像相似性检测和一次性学习等任务,这些任务中识别输入之间的关系至关重要。 孪生神经网络的关键特征- 相同子网络
孪生神经网络由两个或更多个结构相同的子网络组成。这些子网络共享相同的结构、权重和参数,这意味着它们以完全相同的方式处理不同的输入。这确保了网络在学习它们的特征时平等地对待两个输入。 - 共享权重
子网络具有共享权重,这意味着它们在训练和推理过程中使用相同的参数。这不仅降低了网络的复杂性,还确保了两个输入以一致的方式进行转换。 - 配对输入
SNNs 使用输入对而不是单个样本进行训练。这些对可以是正例(输入相似)或负例(输入不同)。网络通过比较这些对来学习区分它们。 - 相似性学习
网络的目的是学习输入的有意义的表示,从而能够比较它们的相似性或不相似性。网络的最后一层通常使用距离度量(如欧几里得距离或余弦相似度)输出相似性分数。 - 距离度量
孪生神经网络使用距离度量来量化子网络输出之间的差异。常见的度量包括欧几里得距离、曼哈顿距离和余弦相似度。度量的选择很重要,因为它决定了相似性的衡量方式。 - 对比损失或三元组损失
为了训练孪生网络,会使用一种特殊的损失函数。对比损失会最小化相似对之间的距离,并最大化不同对之间的距离。三元组损失会比较一个正样本、负样本和一个锚点样本,目标是使正样本比负样本更接近锚点。 - 数据类型灵活性
孪生网络非常灵活,可以用于各种数据类型,包括图像、文本甚至时间序列数据。这种灵活性使其适用于各种任务,如图像识别、文本相似性等。 - 泛化到新数据
在数据稀缺或添加新类别的情况下,孪生网络表现出色。通过学习输入之间的关系而不是特定类别,它们可以很好地泛化到未见过的数据,使其成为一次性学习和少样本学习任务的理想选择。
孪生神经网络(SNN)的架构孪生神经网络(SNN)的架构旨在比较输入并确定它们的相似性。它包含两个或多个相同的子网络,这些子网络共享相同的结构、权重和参数,确保两个输入以相同的方式进行处理。以下是一个典型孪生神经网络架构的关键组件: - 两个(或更多)输入分支
网络有两个输入分支,每个分支接收一个不同的输入。这些输入可以是图像、文本或其他类型的数据,具体取决于任务。 分支独立处理输入,但由于子网络共享权重,因此应用的操作是相同的。 - 共享子网络
每个输入分支包含一个从输入数据中提取特征的子网络。这些子网络可以是全连接网络、卷积神经网络(CNN)、循环神经网络(RNN)或其他架构,具体取决于数据类型。 两个子网络在结构上是相同的,并在整个网络中共享相同的权重,从而确保从两个输入中提取相同的特征。 这种共享结构对于确保输入的一致和相似的表示至关重要。 - 特征提取层
子网络中的特征提取层负责将原始输入转换为高维特征向量或嵌入。这种表示捕获了关于输入的重要信息。 对于图像,这可能涉及多个卷积和池化层(在 CNN 中)。对于文本,这可能包括嵌入和循环层。 - 比较层
在特征提取之后,子网络产生的两个特征向量被传递到比较层,该层计算它们之间的相似性或距离度量。- 常见的距离度量包括:
- 欧几里得距离:衡量两个向量之间的直线距离。
- 余弦相似度:衡量两个向量之间夹角的余弦值,关注方向而不是幅度。
- 曼哈顿距离:衡量两个向量之间绝对差值的总和。
- 输出层
比较层的输出(表示两个输入的相似性或不相似性)随后被传递到输出层。输出可能因任务而异:- 二元输出:在某些情况下,输出是二元值(例如,“相似”或“不相似”),例如在人脸识别或签名匹配任务中。
- 连续输出:对于其他任务,输出可以是连续的相似性分数,其范围可以在 0 到 1 之间,或者是一个距离度量。
- 损失函数
训练孪生神经网络通常涉及用于相似性学习的专用损失函数。- 对比损失:当使用输入对进行训练时,此损失函数会减小相似输入之间的距离,并增加不同输入之间的距离。
- 三元组损失:在某些架构中,网络使用三元组进行训练——一个锚定输入、一个正向输入(相似)和一个负向输入(不同)。损失函数会最小化锚定与正向之间的距离,同时最大化锚定与负向之间的距离。
- 将数据对或三元组作为训练数据
SNNs 使用数据对或三元组而不是单个样本进行训练。对于每个对(或三元组),网络会根据比较层的输出和所选的损失函数来学习区分相似和不同的输入。
孪生神经网络的可视化 训练孪生神经网络训练孪生网络与典型的分类任务有很大不同。SNNs 不使用传统意义上的标记数据,而是使用输入对进行训练: - 正例对:两个被认为是相似的输入(例如,同一个人的图像)。
- 负例对:两个被认为是不同的输入(例如,两个不同的人的图像)。
训练目标是减小相似输入之间的距离,并最大化不同输入之间的距离。常用的损失函数是对比损失或三元组损失,它们都有助于模型学习如何更好地区分正例对和负例对。 孪生神经网络的应用孪生网络特别适用于涉及相似性检测或验证的任务。一些常见应用包括: - 人脸识别
孪生神经网络最受欢迎的应用之一是人脸识别系统(例如 FaceNet)。通过将新的人脸图像与参考图像进行比较,SNN 可以确定这两张人脸是否代表同一个人。这对于一次性学习特别有用,在这种情况下,系统只需通过少量示例即可学会识别一个人。 - 签名验证
SNNs 最初是为了验证签名而开发的。网络比较两个签名,并确定它们是否属于同一个人。使用对比损失有助于网络学习区分两个签名的微小但重要的特征。 - 图像相似性
在图像检索等任务中,孪生网络用于将查询图像与数据库中的图像进行比较。根据相似性分数,系统可以检索最相关的图像。这在电子商务中具有应用,可用于视觉搜索引擎,用户可以通过图像而不是关键字搜索产品。 - 一次性学习
SNNs 也广泛用于一次性学习,在这种情况下,网络只需用很少的示例即可学会识别一个类别。在这种情况下,网络被训练成能够更好地泛化到未见过的数据对,从而减少了对大型数据集的需求。 - 文本相似性
在自然语言处理(NLP)中,孪生网络可应用于句子相似性和释义检测等任务,其中模型比较两个句子以确定它们的语义有多接近。
孪生神经网络的优点- 少样本学习:孪生网络非常适合训练数据有限的场景。与需要大型数据集的传统模型不同,SNNs 可以在少量示例的情况下很好地泛化。
- 配对比较:SNNs 擅长比较输入,不需要类别标签,使其在生物识别认证等验证任务中非常有用。
- 共享权重:由于两个子网络相同且共享权重,因此 SNNs 比两个独立网络更具计算效率,也更容易训练。
- 灵活性:SNNs 可以处理各种类型的数据,包括图像、文本甚至多模态输入。这使其在不同领域中具有通用性。
挑战和局限性尽管有优点,孪生神经网络也有一些局限性: - 配对生成:训练过程需要生成大量的输入对,这可能成本高昂,尤其是在大型数据集的情况下。
- 不平衡配对选择:如果负例对明显多于正例对(反之亦然),网络可能会出现偏差。需要仔细的配对采样技术来避免这种情况。
- 大型类别中的复杂性:对于涉及许多类别的任务(例如,大规模人脸识别),网络在大量比较中可能难以保持准确性。
- 对距离度量的敏感性:SNN 的性能可能很大程度上取决于距离度量(例如,欧几里得、余弦)的选择。选择不当可能会降低性能。
结论孪生神经网络是深度学习中基于相似性的任务的强大工具。它们的架构和独特的训练方法使它们能够从有限的数据中很好地泛化,这在人脸识别、签名验证和一次性学习等领域尤其有用。尽管存在一些局限性,但孪生网络的强大功能和效率使其成为各种应用的基石。 随着神经网络研究的不断发展,孪生网络很可能在推动少样本学习、验证系统及其他领域方面发挥重要作用。
|