吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)4.5-4.6
目录
- 第四门课 卷积神经网络(Convolutional Neural Networks)
- 第四周 特殊应用:人脸识别和神经风格转换(Special applications: Face recognition &Neural style transfer)
- 4.5 人 脸 验 证 与 二 分 类 ( Face verification and binary classification)
- 4.6 什么是神经风格迁移?(What is neural style transfer?)
第四门课 卷积神经网络(Convolutional Neural Networks)
第四周 特殊应用:人脸识别和神经风格转换(Special applications: Face recognition &Neural style transfer)
4.5 人 脸 验 证 与 二 分 类 ( Face verification and binary classification)
Triplet loss 是一个学习人脸识别卷积网络参数的好方法,还有其他学习参数的方法,让我们看看如何将人脸识别当成一个二分类问题。
另一个训练神经网络的方法是选取一对神经网络,选取 Siamese 网络,使其同时计算这些嵌入,比如说 128 维的嵌入(编号 1),或者更高维,然后将其输入到逻辑回归单元,然后进行预测,如果是相同的人,那么输出是 1,若是不同的人,输出是 0。这就把人脸识别问题转换为一个二分类问题,训练这种系统时可以替换 Triplet loss 的方法。
最后的逻辑回归单元是怎么处理的?输出 y ^ \hat{y} y^会变成,比如说 sigmoid 函数应用到某些特征上,相比起直接放入这些编码( f ( x ( i ) ) , f ( x ( j ) ) f(x^{(i)}),f(x^{(j)}) f(x(i)),f(x(j))),你可以利用编码之间的不同。
y
^
=
σ
(
∑
k
=
1
128
w
i
∣
f
(
x
(
i
)
)
k
−
f
(
x
(
j
)
)
k
∣
+
b
)
\hat{y} =\sigma(\sum_{k=1}^{128} {w_i|f(x^{(i)})_k-f(x^{(j)})_k | + b})
y^=σ(k=1∑128wi∣f(x(i))k−f(x(j))k∣+b)
我解释一下,符号
f
(
x
(
i
)
)
k
f(x^{(i)})_k
f(x(i))k代表图片
x
(
i
)
x^{(i)}
x(i)的编码,下标𝑘代表选择这个向量中的第𝑘个元素,
∣
f
(
x
(
i
)
)
k
−
f
(
x
(
j
)
)
k
∣
|f(x^{(i)})_k − f(x^{(j)})_k|
∣f(x(i))k−f(x(j))k∣对这两个编码取元素差的绝对值。你可能想,把这128个元素当作特征,然后把他们放入逻辑回归中,最后的逻辑回归可以增加参数
w
i
w_i
wi和𝑏,就像普通的逻辑回归一样。你将在这 128 个单元上训练合适的权重,用来预测两张图片是否是一个人,这是一个很合理的方法来学习预测 0 或者 1,即是否是同一个人。
还有其他不同的形式来计算绿色标记的这部分公式(
∣
f
(
x
(
i
)
)
k
−
f
(
x
(
j
)
)
k
∣
|f(x^{(i)})_k − f(x^{(j)})_k|
∣f(x(i))k−f(x(j))k∣),比如说,公式可以是
∣
f
(
x
(
i
)
)
k
−
f
(
x
(
j
)
)
k
∣
2
f
(
x
(
i
)
)
k
+
f
(
x
(
j
)
)
k
\frac{|f(x^{(i)})_k − f(x^{(j)})_k|^2}{f(x^{(i)})_k + f(x^{(j)})_k}
f(x(i))k+f(x(j))k∣f(x(i))k−f(x(j))k∣2,这个公式也被叫做𝜒2公式,是一个希腊字母𝜒,也被称为𝜒平方相似度。
这些公式及其变形在这篇 DeepFace 论文中有讨论,我之前也引用过。
但是在这个学习公式中,输入是一对图片,这是你的训练输入𝑥(编号 1、2),输出𝑦是 0 或者 1,取决于你的输入是相似图片还是非相似图片。与之前类似,你正在训练一个Siamese 网络,意味着上面这个神经网络拥有的参数和下面神经网络的相同(编号 3 和 4 所示的网络),两组参数是绑定的,这样的系统效果很好。
之前提到一个计算技巧可以帮你显著提高部署效果,如果这是一张新图片(编号 1),当员工走进门时,希望门可以自动为他们打开,这个(编号 2)是在数据库中的图片,不需要每次都计算这些特征(编号 6),不需要每次都计算这个嵌入,你可以提前计算好,那么当一个新员工走近时,你可以使用上方的卷积网络来计算这些编码(编号 5),然后使用它,和预先计算好的编码进行比较,然后输出预测值𝑦^。
因为不需要存储原始图像,如果你有一个很大的员工数据库,你不需要为每个员工每次都计算这些编码。这个预先计算的思想,可以节省大量的计算,这个预训练的工作可以用在Siamese 网路结构中,将人脸识别当作一个二分类问题,也可以用在学习和使用 Triplet loss函数上,我在之前的视频中描述过。
总结一下,把人脸验证当作一个监督学习,创建一个只有成对图片的训练集,不是三个一组,而是成对的图片,目标标签是 1 表示一对图片是一个人,目标标签是 0 表示图片中是不同的人。利用不同的成对图片,使用反向传播算法去训练神经网络,训练 Siamese 神经网络。
这个你看到的版本,处理人脸验证和人脸识别扩展为二分类问题,这样的效果也很好。我希望你知道,在一次学习时,你需要什么来训练人脸验证,或者人脸识别系统。
4.6 什么是神经风格迁移?(What is neural style transfer?)
最近,卷积神经网络最有趣的应用是神经风格迁移,在编程作业中,你将自己实现这部分并创造出你的艺术作品。
什么是神经风格迁移?让我们来看几个例子,比如这张照片,照片是在斯坦福大学拍摄的,离我的办公室不远,你想利用右边照片的风格来重新创造原本的照片,右边的是梵高的星空,神经风格迁移可以帮你生成下面这张照片。
这仍是斯坦福大学的照片,但是用右边图像的风格画出来。为了描述如何实现神经网络迁移,我将使用𝐶来表示内容图像,𝑆表示风格图像,𝐺表示生成的图像。
另一个例子,比如,这张图片,𝐶代表在旧金山的金门大桥,还有这张风格图片,是毕加索的风格,然后把两张照片结合起来,得到𝐺这张毕加索风格的的金门大桥。
这页中展示的例子,是由 Justin Johnson 制作,在下面几个视频中你将学到如何自己生成这样的图片。
为了实现神经风格迁移,你需要知道卷积网络提取的特征,在不同的神经网络,深层的、浅层的。在深入了解如何实现神经风格迁移之前,我将在下一个视频中直观地介绍卷积神经网络不同层之间的具体运算,让我们来看下一个视频。