代价函数(Cost function)
要构建一个神经风格迁移系统,让我们为生成的图像定义一个代价函数,你接下看到的是,通过最小化代价函数,你可以生成你想要的任何图像。
给你一个内容图像C,给定一个风格图片S,而你的目标是生成一个新图片G。为了实现神经风格迁移,你要做的是定义一个关于G的代价函数J用来评判某个生成图像的好坏,我们将使用梯度下降法去最小化J(G),以便于生成这个图像。
我们把这个代价函数定义为两个部分:
${J_{content}}(C,G)$
第一部分被称作内容代价,这是一个关于内容图片和生成图片的函数,它是用来度量生
成图片G的内容与内容图片C的内容有多相似:
${J_{style}}(S,G)$
然后我们会把结果加上一个风格代价函数,也就是关于S和G的函数,用来度量图片G的
风格和图片S的风格的相似度。
$J(G) = \alpha {J_{content}}(C,G) + \beta {J_{style}}(S,G)$
最后我们用两个超参数$\alpha$和$\beta$来确定内容代价和风格代价,两者之间的权重用两个超
参数来确定。两个代价的权重似乎是多余的,我觉得一个超参数似乎就够了,但提出神经风
格迁移的原始作者使用了两个不同的超参数,我准备保持一致。
最后我们用两个超参数$\alpha$和$\beta$来来确定内容代价和风格代价,两者之间的权重用两个超参数来确定。两个代价的权重似乎是多余的,我觉得一个超参数似乎就够了,但提出神经风格迁移的原始作者使用了两个不同的超参数,我准备保持一致。
算法的运行是这样的,对于代价函数$J(G)$ ,为了生成一个新图像,你接下来要做的是随机初始化生成图像G,它可能是 100×100×3,可能是 500×500×3,又或者是任何你想要的尺寸。
你现在可以做的是使用梯度下降的方法将$J(G)$最小化, 更新:
$G:{\rm{ = G - }}\frac{\partial }{{\partial G}}J(G)$
在这个步骤中,你实际上更新的是图像G的像素值,也就是 100×100×3,比如 RGB 通道的图片。
这里有个例子,假设你从这张内容图片(编号 1)和风格(编号 2)图片开始,这是另一张公开的毕加索画作,当你随机初始化G,你随机初始化的生成图像就是这张随机选取像素的白噪声图(编号 3)。接下来运行梯度下降算法,最小化代价函数$J(G)$,逐步处理像素,这样慢慢得到一个生成图片(编号 4、 5、 6),越来越像用风格图片的风格画出来的内容图片。