文章

08 代价函数(Cost function)

08 代价函数(Cost function)

08 代价函数(Cost function)

一、问题定义

给定:

  • 一张内容图像 $C$
  • 一张风格图像 $S$

目标:生成一张新图像 $G$,使其:

  • 内容上接近 $C$
  • 风格上接近 $S$

这就是神经风格迁移(Neural Style Transfer) 的核心任务。


二、整体策略:优化生成图像 $G$

我们不训练一个神经网络去“生成”图像,而是:

  • 固定预训练的 CNN(如 VGG-19)
  • 将生成图像 $G$ 本身作为可学习参数
  • 通过梯度下降直接优化 $G$ 的像素值,以最小化一个精心设计的总代价函数

初始时,$G$ 可以是随机噪声(例如白噪声图像),尺寸任意(如 $100 \times 100 \times 3$ 或 $500 \times 500 \times 3$)。


三、总代价函数(Total Cost Function)

总代价函数由两部分组成:

\[J(G) = \alpha \cdot J_{\text{content}}(C, G) + \beta \cdot J_{\text{style}}(S, G)\]

其中:

  • $J_{\text{content}}(C, G)$:内容代价函数,衡量 $G$ 与 $C$ 在内容上的相似度
  • $J_{\text{style}}(S, G)$:风格代价函数,衡量 $G$ 与 $S$ 在风格上的相似度
  • $\alpha > 0$、$\beta > 0$:超参数,控制内容与风格的相对权重

💡 虽然理论上可以用一个比例参数(如 $\lambda = \beta / \alpha$),但原始论文 [Gatys et al., 2015] 使用两个独立超参数,课程遵循此设定。


四、优化过程

使用梯度下降法更新生成图像 $G$:

\[G := G - \eta \cdot \frac{\partial J(G)}{\partial G}\]

其中:

  • $\eta$ 是学习率
  • 梯度 $\frac{\partial J(G)}{\partial G}$ 通过反向传播计算(利用预训练 CNN 的中间层激活值)

注意:CNN 权重固定不变,只更新输入图像 $G$ 的像素值。


五、算法流程概览

  1. 输入:内容图 $C$,风格图 $S$
  2. 初始化:生成图 $G \leftarrow \text{随机噪声}$
  3. 重复以下步骤直至收敛

    • 前向传播 $C, S, G$ 通过预训练 CNN(如 VGG-19)
    • 计算 $J_{\text{content}}(C, G)$ 和 $J_{\text{style}}(S, G)$
    • 计算总代价 $J(G)$
    • 反向传播计算 $\frac{\partial J(G)}{\partial G}$
    • 更新 $G$ 的像素值
  4. 输出:风格迁移后的图像 $G$

六、关键参考文献

本方法基于以下开创性论文:

Leon A. Gatys, Alexander S. Ecker, Matthias Bethge
A Neural Algorithm of Artistic Style
arXiv:1508.06576 [cs.CV], 2015
🔗 https://arxiv.org/abs/1508.06576

该论文首次提出使用 CNN 的中间层特征分别建模“内容”与“风格”,并成功实现高质量艺术风格迁移。


七、后续内容预告

  • 如何具体定义 $J_{\text{content}}$? → 使用某一层(如 conv4_2)的激活值的平方误差
  • 如何定义 $J_{\text{style}}$? → 使用Gram 矩阵(Gram Matrix) 衡量特征通道间的相关性,捕捉纹理与风格

总结一句话
神经风格迁移通过联合优化内容相似性与风格相似性的代价函数,直接在像素空间中迭代生成兼具指定内容与风格的新图像,其核心思想建立在深度 CNN 的层次化表征能力之上。

本文由作者按照 CC BY 4.0 进行授权