内容代价函数 (Content cost function)
风格迁移网络的代价函数有一个内容代价部分,还有一个风格代价部分。
J
(
G
)
=
α
J
c
o
n
t
e
n
t
(
C
,
G
)
+
β
J
s
t
y
l
e
(
S
,
G
)
J(G)=\alpha J_{content}(C,G)+\beta J_{style}(S,G)
J(G)=αJcontent?(C,G)+βJstyle?(S,G)
我们先定义内容代价部分,不要忘了这就是我们整个风格迁移网络的代价函数,我们看看内容代价函数应该是什么。 假如说,你用隐含层
l
l
l 来计算内容代价,如果
l
l
l 是个很小的数,比如用隐含层1,这个代价函数就会使你的生成图片像素上非常接近你的内容图片。然而如果你用很深的层,那么那就会问,内容图片里是否有狗,然后它就会确保生成图片里有一个狗。所以在实际中,这个层
l
l
l 在网络中既不会选的太浅也不会选的太深。因为你要自己做这周结束的编程练习,我会让你获得一些直觉,在编程练习中的具体例子里通常
l
l
l 会选择在网络的中间层,既不太浅也不很深,然后用一个预训练的卷积模型,可以是VGG网络或者其他的网络也可以。 现在你需要衡量假如有一个内容图片和一个生成图片他们在内容上的相似度,我们令这个
a
[
l
]
[
C
]
a^{[l][C]}
a[l][C]和
a
[
l
]
[
G
]
a^{[l][G]}
a[l][G],代表这两个图片
C
C
C 和
G
G
G 的
l
l
l 层的激活函数值。如果这两个激活值相似,那么就意味着两个图片的内容相似。
我们定义这个
J
c
o
n
t
e
n
t
(
C
,
G
)
=
1
2
∣
∣
a
[
l
]
[
C
]
?
a
[
l
]
[
G
]
∣
∣
2
J_{content}(C,G)=\frac12||a^{[l][C]}-a^{[l][G]}||^2
Jcontent?(C,G)=21?∣∣a[l][C]?a[l][G]∣∣2
为两个激活值不同或者相似的程度,我们取
l
l
l 层的隐含单元的激活值,按元素相减,内容图片的激活值与生成图片相比较,然后取平方,也可以在前面加上归一化或者不加,比如
1
2
\frac12
21?或者其他的,都影响不大,因为这都可以由这个超参数
α
α
α 来调整(
J
(
G
)
=
α
J
c
o
n
t
e
n
t
(
C
,
G
)
+
β
J
s
t
y
l
e
(
S
,
G
)
J(G)=\alpha J_{content}(C,G)+\beta J_{style}(S,G)
J(G)=αJcontent?(C,G)+βJstyle?(S,G))。
要清楚我这里用的符号都是展成向量形式的,这个就变成了这一项(
a
[
l
]
[
C
]
a^{[l][C]}
a[l][C])减这一项(
a
[
l
]
[
C
]
a^{[l][C]}
a[l][C])的
L
2
L2
L2 范数的平方,在把他们展成向量后。这就是两个激活值间的差值平方和,这就是两个图片之间
l
l
l 层激活值差值的平方和。后面如果对
J
(
G
)
J(G)
J(G) 做梯度下降来找
G
G
G 的值时,整个代价函数会激励这个算法来找到图像
G
G
G ,使得隐含层的激活值和你内容图像的相似。
这就是如何定义风格迁移网络的内容代价函数,接下来让我们学习风格代价函数。
|