Module 04 · Special Applications: Face recognition & Neural Style Transfer
Content Cost Function内容代价函数
神经风格迁移算法的代价函数由**内容代价函数(Content Cost)和风格代价函数(Style Cost)**两个部分组成。接下来,我们首先定义内容代价函数。
内容代价函数的定义
回顾一下神经风格迁移算法的总体代价函数:你需要定义一个内容代价函数,来衡量生成图像与内容图像的相似度。内容代价函数的目的是让生成的图像在“内容”上尽可能与内容图像接近。
内容代价函数的选择依赖于选择的隐藏层(hidden layer):
- 浅层(Shallow layers):如果选择的隐藏层非常浅(如层1),那么生成图像的像素值将与内容图像的像素值非常相似。
- 深层(Deep layers):如果选择的隐藏层较深,那么它仅仅要求生成图像中存在与内容图像相似的概念,例如:“如果内容图像中有一只狗,那么生成图像中也应有一只狗。”
在实践中,选择中间层的效果最好。也就是说,选择一个既不是太浅也不是太深的隐藏层。在你本周末的实际问题练习中,你将通过一些具体的例子来获得直观的理解。
通常,我们选择中间层,这样既能捕捉到一些低级的特征,又能捕捉到更复杂的结构信息。
如何定义内容代价函数?
假设你使用一个预训练的卷积神经网络(ConvNet),例如 VGG 网络,或者其他网络,也可以使用相似的网络结构。给定内容图像 C和生成图像 G,我们需要测量这两张图像在“内容”上的相似性。
我们可以使用某一隐藏层 l 来计算内容代价。令aⁱ(l)(c) 和 aⁱ(l)(g) 分别表示内容图像 C 和生成图像 G 在层 l 上的激活值(Activations)。如果这两个激活值非常相似,那么这意味着两张图像的“内容”相似。
因此,内容代价函数 可以定义为:
我们计算内容图像和生成图像在层 l 上激活值的逐元素差异的平方,并对其求和。可以选择是否加入归一化常数,这取决于你希望如何调节参数 α。

内容代价函数的实际意义
在梯度下降的过程中,我们会通过最小化内容代价函数来更新生成图像 G。目标是使得在该层的隐藏单元的激活值接近内容图像 C 的激活值,这样生成图像就能够保留内容图像的“内容特征”。
- 梯度下降优化过程中,目标是使得内容图像和生成图像在该层的激活值尽量相似。
- 最终结果是生成图像能够在“内容”上尽可能与内容图像接近,同时为风格迁移做准备。
接下来,定义风格代价函数
在定义完内容代价函数后,我们接下来将定义风格代价函数。风格代价函数用于衡量生成图像与风格图像在“风格”上的相似性。
下一个视频将详细介绍如何定义风格代价函数。