1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai
4.9 内容代价函数 Content cost function
神经风格迁移网络的代价函数有一个内容代价部分,还有一个风格代价部分。
不要忘了上面这就是我们整个风格迁移网络的代价函数。
定义内容代价 J c o n t e n t ( C , G ) J_{content}(C,G) Jcontent(C,G)
我们先定义内容代价部分,看看内容代价函数 J c o n t e n t ( C , G ) J_{content}(C,G) Jcontent(C,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
)
J_{content}(C,G)
Jcontent(C,G)为
J
c
o
n
t
e
n
t
(
C
,
G
)
=
1
2
∣
∣
a
[
l
]
(
C
)
−
a
[
l
]
(
G
)
∣
∣
2
J_{content}(C,G)=\frac 12||a^{[l](C)}-a^{[l](G)}||^2
Jcontent(C,G)=21∣∣a[l](C)−a[l](G)∣∣2
为两个激活值不同或者相似的程度,我们取 l l l 层的隐藏单元的激活值,按元素相减,内容图片的激活值与生成图片相比较,然后取平方,也可以在前面加上归一化或者不加,比如 1 2 \frac 12 21 或者其他的,都影响不大,因为这都可以由超参数 α \alpha α 来调整( 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))。
要清楚我这里用的符号都是展成向量形式的, J c o n t e n t ( C , G ) J_{content}(C,G) Jcontent(C,G) 就变成了这一项( a [ l ] ( C ) a^{[l](C)} a[l](C))减这一项( a [ l ] ( G ) a^{[l](G)} a[l](G))的 L 2 L_2 L2 范数的平方,在把他们展成向量后。这就是两个激活值间的差值平方和,这就是两个图片之间层激活值差值的平方和。后面如果 J ( G ) J(G) J(G)对做梯度下降来找 G G G 的值时,整个代价函数会激励这个算法来找到图像 G G G ,使得隐藏层的激活值和你内容图像的相似。
这就是如何定义风格迁移网络的内容代价函数。