
视频元信息
- 课程:吴恩达深度学习专项课程 · 卷积神经网络(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)
- 提前把数据库中所有员工的图像编码算好并存储起来。
- 新员工到来时,只需:
- 用网络计算这一张新图的编码;
- 与预计算好的数据库编码进行比较;
- 据此做出预测 $\hat{y}$。
两大好处(重点)
- 无需存储原始图像——只需存编码向量,节省存储空间。
- 无需每次重复计算——面对大规模员工数据库时,避免对每张库图重复前向传播,显著节省计算量。
预计算技巧同时适用于两种训练范式:
- 二分类方法(本讲)
- 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