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.10 风格代价函数 Style cost function
在上节课中,我们学习了如何为神经风格迁移定义内容代价函数,这节课我们来了解风格代价函数。
那么图片的风格到底是什么意思呢?
比如你有上图这样一张图片,你可能已经对这个计算很熟悉了,它能算出这里是否含有不同隐藏层。现在你选择了某一层 l l l(上图方框),比如这一层去为图片的风格定义一个深度测量,现在我们要做的就是将图片的风格定义为 l l l 层中各个通道之间激活项的相关系数。
我来详细解释一下,如上图,现在你将 l l l 层的激活项取出,这是个 n H × n W × n C n_H \times n_W \times n_C nH×nW×nC的激活项,它是一个三维的数据块。现在问题来了,如何知道这些不同通道之间激活项的相关系数呢?
为了解释这些听起来很含糊不清的词语,现在注意这个激活块,我把它的不同通道渲染成不同的颜色。
在这个例子中,假如我们有5个通道。为了方便讲解,我将它们染成了五种颜色。一般情况下,我们在NN中会有许多通道,但这里只用5个通道,会更方便我们理解。
为了能捕捉图片的风格,你需要进行下面这些操作。首先,先看前两个通道,前两个通道分别是图中的红色和黄色部分,那我们该如何计算这两个通道间激活项的相关系数呢?
举个例子,上图右下角在第一个通道中含有某个激活项。
第二个通道也含有某个激活项,于是它们组成了一对数。
然后我们再看看这个激活项块中其他位置的激活项,它们也分别组成了很多对数字,分别来自第一个通道(红色通道)和第二个通道(黄色通道)。现在我们得到了很多个数字对,当我们取得这两个 n H × n W n_H \times n_W nH×nW的通道中所有的数字对后,现在该如何计算它们的相关系数呢?它是如何决定图片风格的呢?
我们来看一个例子。
这是之前课程中的一个可视化例子,它来自一篇论文,作者是Matthew Zeile和Rob Fergus 我之前有提到过。
我们知道,第一个通道(红色通道)对应的是第一排第二列这个神经元,它能找出图片中的特定位置是否含有其中这些垂直的纹理。而第二个通道也就是黄色的通道,对应第二排第一列这个神经元,它可以粗略地找出橙色的区域。
什么时候两个通道拥有高度相关性呢?
如果它们有高度相关性,那么图片中出现类似第一排第二列垂直纹理的地方,那么第二排第一列这块地方很大概率是橙色的。
如果说它们是不相关的,又是什么意思呢?
显然,这意味着图片中有垂直纹理的地方很大概率不是橙色的。而相关系数描述的就是当图片某处出现这种垂直纹理时,该处又同时是橙色的可能性。
相关系数 这个概念为你提供了一种去测量这些不同的特征的方法,比如这些垂直纹理,这些橙色或是其他的特征去测量它们在图片中的各个位置同时出现或不同时出现的频率。
如果我们在通道之间使用相关系数来描述通道的风格,你能做的就是测量你的生成图像中第一个通道(红色)是否与第二个通道(黄色)相关。通过测量,你能得知在生成的图像中垂直纹理和橙色同时出现或者不同时出现的频率,这样你将能够测量生成的图像(generated image)的风格与输入的风格图像(style image)的相似程度。
现在我们来证实这种说法。
风格矩阵
对于这两个图像,也就是风格图像与生成图像,你需要计算一个风格矩阵,说得更具体一点就是用 l l l 层来测量风格。
风格图像的风格矩阵
我们设 a i , j , k [ l ] a^{[l]}_{i,j,k} ai,j,k[l],设它为隐藏层 l l l 中 ( i , j , k ) (i,j,k) (i,j,k) 位置的激活项, i i i, j j j, k k k分别代表该位置的高度、宽度以及对应的通道数。现在你要做的就是去计算一个关于 l l l 层和风格图像的矩阵,即 G [ l ] ( S ) G^{[l](S)} G[l](S)( l l l 表示层数, S S S 表示风格图像),这是一个 n c [ l ] × n c [ l ] n_c^{[l]} \times n_c^{[l]} nc[l]×nc[l] 的矩阵。同样地,我们也对生成的图像进行这个操作。
但是现在我们先来定义风格图像,设这个关于 l l l 层和风格图像的 G G G 是一个矩阵,这个矩阵的高度和宽度都是 l l l 层的通道数。在这个矩阵中 k k k 和 k ′ k' k′ 元素被用来描述通道 k k k 和 k ′ k' k′ 通道之间的相关系数。具体地:
G k k ′ [ l ] ( S ) = ∑ i = 1 n H [ l ] ∑ j = 1 n W [ l ] a i , j , k [ l ] ( S ) a i , j , k ′ [ l ] ( S ) G^{[l](S)}_{kk'}=\sum_{i=1}^{n_H^{[l]}}\sum_{j=1}^{n_W^{[l]}}a^{[l](S)}_{i,j,k}a^{[l](S)}_{i,j,k'} Gkk′[l](S)=i=1∑nH[l]j=1∑nW[l]ai,j,k[l](S)ai,j,k′<