Module 04 · Special Applications: Face recognition & Neural Style Transfer
Style Cost Function风格代价函数
在上一视频中,我们讨论了如何定义神经风格迁移的内容代价函数。接下来,我们将介绍风格代价函数。风格代价函数用于衡量生成图像与风格图像在风格上的相似度。
什么是图像的风格?
那么,什么是图像的“风格”呢?让我们通过以下步骤来理解。假设我们有一张输入图像,并且用卷积神经网络(ConvNet)来计算该图像的特征,这些特征来自不同的层。假设我们选择了某一层 l,并使用该层来定义图像风格的度量。
我们需要通过衡量该层中不同通道的激活值之间的相关性来定义风格。这里是具体的解释:
- 假设我们选定了层 l 的激活值。这个激活值的形状是 ,其中:
- :高度(height)
- :宽度(width)
- :通道数(channels)
接下来,我们需要检查不同通道之间的激活值是否相关。

理解风格的相关性
让我们通过具体的例子来说明这一点。假设我们有 5 个通道(为了简化示例,实际中可能更多),并且每个通道用不同的颜色表示。
- 假设红色通道与黄色通道的激活值有一定的相关性。我们可以通过观察图像的某个特定位置,比较两个通道的激活值。通过这种方式,我们可以知道这两个通道在不同位置的激活值是否经常一起出现。
例如:
- 如果红色通道和黄色通道的激活值高度相关,那么图像中具有竖直纹理的部分很可能会有橙色的色调。
- 如果它们的激活值不相关,那么当出现竖直纹理时,图像中就不太可能有橙色的色调。
因此,相关性揭示了不同的高阶特征(例如竖直纹理或橙色调)在图像中的共同出现模式。这种相关性可以用来度量图像的风格。

如何计算风格矩阵
为了衡量图像的风格,我们将使用风格矩阵(Style Matrix)。具体地,给定一张图像,风格矩阵会计算不同通道之间的相关性。
数学公式:
- 设 表示隐藏层 l 在位置 (i, j) 和通道 k 处的激活值。
- 风格矩阵 是一个 的矩阵,用来衡量各通道之间的相关性。
风格矩阵的元素 表示通道 k 和通道 k' 之间的激活值的相关性。计算公式如下:
这就是风格矩阵的定义,通过求和图像中各个位置的激活值,并乘以不同通道之间的激活值,来计算它们之间的相关性。

计算风格代价函数
接下来,我们可以定义风格代价函数(Style Cost Function),它衡量了生成图像与风格图像之间的风格差异。
风格代价函数可以通过计算两张图像的风格矩阵之间的差异来得到。假设我们有两个风格矩阵,分别来自风格图像 S 和生成图像 G:
这里, 和 分别是风格图像 S 和生成图像 G 在层 l 的风格矩阵元素。我们通过逐元素的平方差来计算风格差异。

使用多个层的风格代价函数
为了获得更好的视觉效果,我们通常会使用多个层的风格代价函数来计算最终的风格差异。这样可以考虑网络的低级特征(如边缘)和高级特征(如复杂纹理)。因此,总的风格代价函数可以表示为:
其中:
- L 表示使用的层数。
- 是每一层的权重超参数,用于调整不同层对最终风格代价函数的贡献。
通过这种方式,神经网络能够同时考虑低级和高级特征,在计算风格时取得更平衡的效果。
综合内容和风格代价函数
最后,我们将内容代价函数和风格代价函数结合起来,构成完整的总代价函数:
- α 和 β 是超参数,用于平衡内容和风格的权重。
- J(C, G) 表示内容代价,衡量生成图像与内容图像的相似性。
- J(S, G) 表示风格代价,衡量生成图像与风格图像的相似性。
通过最小化这个总代价函数,神经风格迁移算法可以生成一个既保持内容图像的内容,又符合风格图像风格的生成图像。

总结与展望
通过定义内容代价函数和风格代价函数,神经风格迁移算法能够生成具有独特风格和内容的艺术作品。在实际应用中,你可以根据需要调整不同层的权重超参数 和内容、风格的权重 α 和 β,以达到理想的艺术效果。
在接下来的练习中,你将更深入地理解如何调整这些参数,并实现神经风格迁移算法的具体细节。