视频封面

视频元信息

  • 课程:吴恩达深度学习专项课程 · 卷积神经网络(CNN)· 人脸识别专题
  • 本节主题:孪生神经网络(Siamese Network)架构
  • 时长参考:约 4 分 47 秒(依据最后时间戳 286.6s 估算)

内容摘要(TL;DR)

本节介绍用孪生神经网络实现人脸验证/识别:把两张人脸图片分别送入结构相同、参数共享的卷积网络,各自输出一个 128 维编码向量 F(X),再用两个编码之间的距离(范数差) 判断是否为同一人。训练目标是让同一人的编码距离小、不同人的编码距离大。本节只讲架构与目标,具体损失函数在下一节(Triplet Loss)讲解。


一、回顾:函数 D 的任务 [00:00]

上一节(long video 中)已经定义了函数 D:输入两张人脸图片,输出它们有多相似或多不同。

  • 本节要回答的问题:如何用神经网络来实现这个函数 D。
  • 答案:使用孪生神经网络(Siamese Network) 架构。

考点: 函数 D 的输入是"两张图片",输出是"相似度/差异度",这与普通分类网络(输入一张图,输出类别)在任务形式上有本质区别。


二、从普通卷积网络到编码向量 F(X1) [00:15]

理解:这一段的思路是"先借用熟悉的卷积分类网络结构,再砍掉最后的分类头,只保留中间的特征向量"。

普通卷积网络(confidence 应为 convnet,即卷积网络)的典型流程:

  1. 输入一张图片 X1;
  2. 经过一系列卷积层(convolutional)→ 池化层(pooling)→ 全连接层(fully connected);
  3. 得到一个特征向量;
  4. 有时这个向量会再送入 softmax 单元做分类。

本节的关键改动:不使用最后的 softmax 分类输出,而是聚焦于网络中较深层某个全连接层计算出的向量——例如 128 个数字组成的向量。

  • 这个 128 维向量被命名为 F(X1)。
  • 理解:F(X1) 可以看作对输入图像 X1 的一种"编码(encoding)",即把原始像素重新表示为 128 个数字的紧凑特征。
  • 视频中举例:输入一张 Kian 的照片,网络把它重新表示为 128 维向量。

易错点: F(X) 不是分类概率,也不是原始像素,而是网络中间层输出的嵌入(embedding)。它的维度(如 128)是可调超参数,不是固定必须为 128。


三、用同一网络编码第二张图片 F(X2) [01:17]

要比较两张图片时:

  1. 把第二张图片送入同一个神经网络,使用完全相同的参数;
  2. 得到另一个 128 维向量,记为 F(X2);
  3. 这个向量是对第二张图片的编码。

关于记号 X1、X2 的说明:

  • X1 和 X2 只是用来表示"两张输入图片",并不一定是训练集中的第 1 个和第 2 个样本;
  • 它们可以是任意两张图片。

重点: 两次前向传播必须使用同一套参数。这是孪生网络的核心——不是训练两个独立网络,而是同一个网络被调用两次。


四、用编码之间的距离衡量相似度 [02:02]

如果相信这些编码是两张图片的良好表示,就可以定义两张图片之间的距离:

  • 距离 = 两个编码之差的范数,即 ‖F(X1) − F(X2)‖。

推导:把"图片相似度"问题转化为"高维向量空间中的距离"问题。距离越小 → 越可能是同一人;距离越大 → 越可能不是同一人。

思考:这里的"范数"通常指 L2 范数(欧氏距离)。选择哪种范数、编码维度取多少,都会影响最终识别效果。


五、孪生神经网络架构与 DeepFace 来源 [02:25]

孪生神经网络(Siamese Neural Network) 的定义:

在两个不同输入上运行两个相同的卷积神经网络,然后比较它们的输出。

  • "相同"指结构相同、参数共享。

学术来源:

  • 本节很多思想来自一篇论文,作者包括 Yang Yifthagman(音译,实际应为 Yaniv Taigman)、Ming Yang、Marc'Aurelio Ranzato、Lior Wolf(音译 Liowov);
  • 他们开发的系统名为 DeepFace。

考点: 孪生网络 ≠ 两个网络。它是"一个网络 + 两次调用 + 参数共享",这是理解后续 Triplet Loss 训练方式的前提。

【拓展】DeepFace 是 Facebook(Meta)2014 年提出的人脸识别系统,是深度学习用于人脸识别的早期里程碑工作之一。它首次大规模展示了用深度网络学到的嵌入向量做face verification的可行性。孪生结构后来也被广泛用于其他任务,如:

  • 句子相似度(Sentence-BERT 类结构);
  • 图像检索 / 以图搜图;
  • 签名验证、指纹比对;
  • 单样本学习(one-shot learning)。

六、如何训练孪生网络:参数与目标 [03:07]

参数定义:

  • 神经网络的参数定义了一个编码函数 F(XI);
  • 给定任意输入图像 XI,网络输出 128 维编码 F(XI)。

训练目标(两条核心条件):

情况 期望
XI 与 XJ 是同一个人 两个编码之间的距离要小
XI 与 XJ 是不同的人 两个编码之间的距离要大
  • 这里用 XI、XJ 表示训练集中的任意一对图片(不限于 X1、X2)。
  • 通过反向传播(backpropagation) 调整网络中所有层的参数,从而得到不同的编码,使上述条件被满足。

理解:训练过程本质上是在"塑造"这个 128 维嵌入空间——把同一人的图片聚在一起,把不同人的图片推开。

易错点: 视频中说的是 "use that propagation",应为 backpropagation(反向传播)。参数更新依赖反向传播,而目标函数的具体形式(Triplet Loss)在下一节才给出。


七、本节小结与下一节预告 [04:29]

  • 本节已讲清:
    1. 孪生网络的架构(同网络、共享参数、两次前向);
    2. 期望网络输出什么样的编码(同一人距离小、不同人距离大)。
  • 尚未解决的问题:如何定义目标函数,让网络真正学到上述行为。
  • 下一节:使用 Triplet Loss(三元组损失) 来定义这个目标函数。

重点: 本节是"架构 + 目标",下一节是"损失函数 + 训练"。两节必须连起来理解,否则会不知道网络究竟靠什么被训练出来。


关键标签 / 关键词

孪生神经网络、Siamese Network、人脸识别、人脸验证、DeepFace、编码向量、Embedding、128 维特征、参数共享、距离度量、L2 范数、反向传播、Triplet Loss、One-shot Learning、吴恩达深度学习、卷积神经网络


生成时间:2026-10-11 00:41:38 生成平台:VideoNote www.xygy.top