视频封面

视频元信息

  • 课程:吴恩达深度学习专项课程 · 卷积神经网络(CNN)· 第四周 特殊应用:人脸识别与神经风格迁移
  • 本讲主题:人脸验证与二分类(Face Verification and Binary Classification)
  • 前置知识:Siamese 网络、Triplet Loss、One-shot Learning

内容摘要(TL;DR)

本讲介绍除 Triplet Loss 之外训练人脸识别网络的另一种方法:将人脸验证直接建模为二分类问题。核心思路是把两张图片经 Siamese 网络得到的编码向量做逐元素差(或卡方相似度),送入逻辑回归单元输出 0/1 判断是否同一人。最后还介绍了一个重要的部署优化技巧——预计算编码,可大幅节省推理计算量。


一、从 Triplet Loss 到二分类:另一种训练思路 [00:00]

上一讲我们用 Triplet Loss 学习人脸识别网络的参数,本讲提供另一种思路。

  • Triplet Loss 回顾:通过构造(Anchor, Positive, Negative)三元组,拉近同类距离、推远异类距离来学习编码。
  • 本讲新思路:把人脸识别直接形式化为一个二分类问题,用监督学习的方式训练网络。
  • 具体做法:取一对图像,分别送入上下两个相同的 Siamese 网络(参数共享/绑定),各自计算出一个编码向量(如 128 维,或更高维),再将两个编码送入一个逻辑回归单元进行预测。
  • 标签定义(考点):
    • 输出 1 → 两张图片是同一个人
    • 输出 0 → 两张图片是不同的人

理解:Triplet Loss 是"度量学习"思路(学一个好的距离空间),而二分类是"判别式"思路(直接学一个判断函数)。二者目标一致,但优化方式不同。


二、逻辑回归单元到底在做什么? [00:58]

关键在于:不是直接把两个编码喂给逻辑回归,而是喂入它们的差异特征。

  • 输出形式:$\hat{y} = \sigma(\text{某组特征})$,其中 σ 是 Sigmoid 函数。
  • 核心技巧:不直接输入两个编码向量,而是计算它们之间的逐元素差异作为特征。

逐元素绝对差公式

$$\sum_{k=1}^{128} \left| f(x^{(i)})_k - f(x^{(j)})_k \right|$$

  • 符号说明(重点):
    • $f(x^{(i)})$ 表示图像 $x^{(i)}$ 的编码向量
    • 下标 $k$ 表示取该向量的第 $k$ 个分量
    • 整体即对两个编码向量做逐元素相减后取绝对值(element-wise difference in absolute value)
  • 这 128 个数值就作为特征送入逻辑回归。
  • 逻辑回归带有自己的参数 $w_i$ 和 $b$,与普通逻辑回归单元一致,通过对这 128 个特征学习权重,预测两张图是否同一人。

推导:为什么要用"差异"而不是"原编码"?因为人脸验证本质是判断"两张图是否相似",而相似性天然由差异刻画——差异越小越可能同一人。直接用原编码反而丢失了对比信息。


三、其他变体:卡方相似度 [02:37]

除了绝对差,还有其他计算这两个编码差异的公式。

卡方相似度(Chi-square Similarity)

$$\frac{\left(f(x^{(i)})_k - f(x^{(j)})_k\right)^2}{f(x^{(i)})_k + f(x^{(j)})_k}$$

  • 名称来源:希腊字母 χ(chi),故称卡方公式/卡方相似度。
  • 出处:这一变体及其他形式在 DeepFace 论文中有探讨(吴恩达前面课程已引用过该论文)。

易错点:卡方公式中分母是两编码之和,需注意避免分母为 0 的数值问题。实际工程中常加一个极小量 ε 防止除零。

拓展:DeepFace 是 Facebook 于 2014 年提出的经典人脸识别工作,是早期将深度学习用于人脸验证的代表性成果之一,其中系统性地比较了多种距离/相似度度量方式。


四、训练设置:输入、输出与参数共享 [03:18]

二分类范式的训练配置总结。

  • 训练输入 x:一对图像(a pair of images)。
  • 训练输出 y:0 或 1,取决于这对图是相似(同一人)还是不相似(不同人)。
  • 网络结构:训练的是 Siamese 网络——上下两个神经网络参数相同/绑定(tied parameters)。
    • 即上方网络的参数与下方网络的参数是同一套,反向传播时共同更新。
  • 该系统效果很好,是 Triplet Loss 之外的又一可行方案。

理解:参数绑定是 Siamese 网络的核心,保证同一张人脸无论走哪条分支都得到一致的编码,否则比较就失去意义。


五、部署优化技巧:预计算编码 [03:51]

一个能显著加速部署的计算技巧。

场景设定

  • 一名员工走到门口,希望门禁自动识别并开门(新图像)。
  • 数据库中存有该员工的注册图像(database image)。

朴素做法的问题

  • 每次有人来,都要重新计算数据库中每张图的编码,再逐一比较——计算量巨大。

优化方案:预计算(Pre-computation)

  • 提前把数据库中所有员工的图像编码算好并存储起来。
  • 新员工到来时,只需:
    1. 用网络计算这一张新图的编码;
    2. 与预计算好的数据库编码进行比较;
    3. 据此做出预测 $\hat{y}$。

两大好处(重点)

  1. 无需存储原始图像——只需存编码向量,节省存储空间。
  2. 无需每次重复计算——面对大规模员工数据库时,避免对每张库图重复前向传播,显著节省计算量。

预计算技巧同时适用于两种训练范式:

  • 二分类方法(本讲)
  • Triplet Loss 方法(上一讲)

只要最终需要"新图 vs 库图"的编码比较,都可预计算库图编码。

思考:这是"训练"与"部署"分离的典型工程思维——训练时关注精度,部署时关注延迟与成本。预计算把 O(N) 的重复计算降为一次计算 + 一次查表比较。


六、总结:把人脸验证当作监督学习 [05:15]

本讲收尾,梳理完整流程。

  • 构造训练集:由一对对图像组成(本质是成对的样本),
    • 目标标签 = 1:两张图是同一人
    • 目标标签 = 0:两张图是不同人
  • 训练方式:用这些图像对,通过反向传播训练 Siamese 网络。
  • 结论:将人脸验证(并推广到人脸识别)作为二分类问题处理,效果相当好。
  • 最终目标:掌握训练自己的人脸验证/人脸识别系统所需的知识,并支持 One-shot Learning(单样本学习)——即只需一张注册图就能识别一个人。

理解:One-shot Learning 是人脸识别的核心需求——不可能为每个新员工重新训练网络,因此必须学到一个"可泛化的相似度度量",使得面对从未见过的人也能仅凭一张图完成验证。


关键标签 / 关键词

人脸验证 #FaceVerification #二分类 #BinaryClassification #Siamese网络 #TripletLoss #One-shotLearning #逻辑回归 #卡方相似度 #ChiSquare #DeepFace #预计算编码 #参数共享 #吴恩达深度学习 #CNN #人脸识别


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