09 内容代价函数(Content Cost Function)
09 内容代价函数(Content Cost Function)
09 内容代价函数(Content Cost Function)
一、背景:风格迁移的总代价函数结构
在神经风格迁移(Neural Style Transfer) 任务中,目标是生成一张既保留内容图像(content image)语义内容,又具有风格图像(style image)艺术风格的新图像。
为此,总代价函数由两部分组成:
\[J(G) = \alpha \cdot J_{\text{content}}(C, G) + \beta \cdot J_{\text{style}}(S, G)\]其中:
- $C$:内容图像(Content image)
- $S$:风格图像(Style image)
- $G$:生成图像(Generated image)
- $\alpha, \beta$:超参数,控制内容与风格的相对权重
本节聚焦于 内容代价函数 $J_{\text{content}}(C, G)$ 的定义与原理。
二、内容代价函数的设计思想
1. 使用预训练 CNN 的中间层激活值衡量“内容相似度”
- 利用一个预训练的卷积神经网络(如 VGG-19)作为特征提取器。
选择某一层 $l$(通常为中间层,既不太浅也不太深)的激活值来表示图像的“内容”。
- 若选浅层(如 conv1_1):激活值反映像素级细节 → 生成图会过于接近内容图的像素,缺乏风格自由度。
- 若选深层(如 conv5_4):激活值反映高级语义(如“是否有狗”)→ 可能丢失局部结构。
- 实践中常选中间层(如 conv4_2 in VGG-19),平衡语义与结构。
2. 核心假设:
如果两张图像在某 CNN 层 $l$ 的激活值相似,则它们在“内容”上相似。
三、内容代价函数的数学定义
设:
- $a^{[l]!(C)}$:内容图像 $C$ 在第 $l$ 层的激活值(形状为 $n_H \times n_W \times n_C$)
- $a^{[l]!(G)}$:生成图像 $G$ 在第 $l$ 层的激活值
将激活张量展平为向量(或直接按元素计算),定义内容代价为:
\[J_{\text{content}}^{[l]}(C, G) = \frac{1}{4 \cdot n_H \cdot n_W \cdot n_C} \left\| a^{[l]\!(C)} - a^{[l]\!(G)} \right\|_F^2\]其中:
- $|\cdot|_F$ 表示 Frobenius 范数(即所有元素差的平方和再开方,但这里取平方,故为平方 Frobenius 范数)
- 分母中的 $4 n_H n_W n_C$ 是一种归一化因子(有时也写作 $2 n_H n_W n_C$,不同实现略有差异,但可通过超参数 $\alpha$ 吸收)
💡 注:有些资料省略归一化项,写作
\[J_{\text{content}} = \frac{1}{2} \sum_{i,j,k} \left( a^{[l]\!(C)}_{ijk} - a^{[l]\!(G)}_{ijk} \right)^2\]这与上述形式等价,仅常数因子不同,不影响优化方向。
四、关键要点总结
| 要点 | 说明 |
|---|---|
| 目的 | 使生成图像 $G$ 在 CNN 某层的激活值接近内容图像 $C$,从而保留其内容 |
| 网络选择 | 使用预训练 CNN(如 VGG-19),固定权重,仅用作特征提取器 |
| 层的选择 | 通常选中间层(如 conv4_2),避免太浅(像素级)或太深(语义级) |
| 数学本质 | 计算两图像在某层激活值的均方误差(MSE) |
| 优化方式 | 对生成图像 $G$ 进行梯度下降,最小化 $J_{\text{content}}$ |
五、后续衔接
内容代价函数确保生成图“像内容图”,而风格代价函数(下一节)则通过Gram 矩阵捕捉纹理、颜色、笔触等风格特征。两者结合,即可实现高质量的风格迁移。
✅ 学习建议:在编程练习中,尝试不同层(如 conv2_2, conv4_2, conv5_2)对生成结果的影响,直观理解“层深度 vs 内容抽象程度”的关系。
本文由作者按照 CC BY 4.0 进行授权