吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)4.7-4.8
目录
第四门课 卷积神经网络(Convolutional Neural Networks)
第四周 特殊应用:人脸识别和神经风格转换(Special applications: Face recognition &Neural style transfer)
4.7 深度卷积网络学习什么?(What are deep ConvNets learning?)
深度卷积网络到底在学什么?在这个视频中我将展示一些可视化的例子,可以帮助你理解卷积网络中深度较大的层真正在做什么,这样有助于理解如何实现神经风格迁移。
来看一个例子,假如你训练了一个卷积神经网络,是一个 Alexnet,轻量级网络,你希望将看到不同层之间隐藏单元的计算结果。
你可以这样做,从第一层的隐藏单元开始,假设你遍历了训练集,然后找到那些使得单元激活最大化的一些图片,或者是图片块。换句话说,将你的训练集经过神经网络,然后弄明白哪一张图片最大限度地激活特定的单元。注意在第一层的隐藏单元,只能看到小部分卷积神经,如果要画出来哪些激活了激活单元,只有一小块图片块是有意义的,因为这就是特定单元所能看到的全部。你选择一个隐藏单元,发现有 9 个图片最大化了单元激活,你可能找到这样的 9 个图片块(编号 1),似乎是图片浅层区域显示了隐藏单元所看到的,找到了像这样的边缘或者线(编号 2),这就是那 9 个最大化地激活了隐藏单元激活项的图片块。
然后你可以选一个另一个第一层的隐藏单元,重复刚才的步骤,这是另一个隐藏单元,似乎第二个由这 9 个图片块(编号 1)组成。看来这个隐藏单元在输入区域,寻找这样的线条(编号 2),我们也称之为接受域。
对其他隐藏单元也进行处理,会发现其他隐藏单元趋向于激活类似于这样的图片。这个似乎对垂直明亮边缘左边有绿色的图片块(编号 1)感兴趣,这一个隐藏单元倾向于橘色,这是一个有趣的图片块(编号 2),红色和绿色混合成褐色或者棕橙色,但是神经元仍可以激活它。
以此类推,这是 9 个不同的代表性神经元,每一个不同的图片块都最大化地激活了。你可以这样理解,第一层的隐藏单元通常会找一些简单的特征,比如说边缘或者颜色阴影。
我在这个视频中使用的所有例子来自于 Matthew Zener 和 Rob Fergus 的这篇论文,题目是(Zeiler M D, Fergus R. Visualizing and Understanding Convolutional Networks[J]. 2013, 8689:818-833.)《可视化理解卷积神经网络》,我会使用一种更简单的方法来可视化神经网络隐藏单元的计算内容。如果你读过他们的论文,他们提出了一些更复杂的方式来可视化卷积神经网络的计算。
你已经在第一层的 9 个隐藏单元重复了这个过程好几遍,如果在深层的隐藏单元中进行这样的计算呢?卷积神经网络的深层部分学到了什么?在深层部分,一个隐藏单元会看到一张图片更大的部分,在极端的情况下,可以假设每一个像素都会影响到神经网络更深层的输出,靠后的隐藏单元可以看到更大的图片块,我还会画出和这页中的大小相同的图片块。
但如果我们重复这一过程,这(Layer 1 所示图片)是之前第一层得到的,这个(Layer 2 所示图片)是可视化的第 2 层中最大程度激活的 9 个隐藏单元。我想解释一下这个可视化,这是(编号 2 所示)使一个隐藏单元最大激活的 9 个图片块,每一个组合,这是另一组(编号 2),使得一个隐藏单元被激活的 9 个图片块,这个可视化展示了第二层的 9 个隐藏单元,每一个又有 9 个图片块使得隐藏单元有较大的输出或是较大的激活。
在更深的层上,你可以重复这个过程。
在这页里很难看清楚,这些微小的浅层图片块,让我们放大一些,这是第一层,这是第一个被高度激活的单元,你能在输入图片的区域看到,大概是这个角度的边缘(编号 1)放大第二层的可视化图像。
有意思了,第二层似乎检测到更复杂的形状和模式,比如说这个隐藏单元(编号 1),它会找到有很多垂线的垂直图案,这个隐藏单元(编号 2)似乎在左侧有圆形图案时会被高度激活,这个的特征(编号 3)是很细的垂线,以此类推,第二层检测的特征变得更加复杂。
看看第三层我们将其放大,放得更大一点,看得更清楚一点,这些东西激活了第三层。再放大一点,这又很有趣了,这个隐藏单元(编号 1)似乎对图像左下角的圆形很敏感,所以检测到很多车。这一个(编号 2)似乎开始检测到人类,这个(编号 3)似乎检测特定的图案,蜂窝形状或者方形,类似这样规律的图案。有些很难看出来,需要手动弄明白检测到什么,但是第三层明显,检测到更复杂的模式。
下一层呢?这是第四层,检测到的模式和特征更加复杂,这个(编号 1)学习成了一个狗的检测器,但是这些狗看起来都很类似,我并不知道这些狗的种类,但是你知道这些都是狗,他们看起来也类似。第四层中的这个(编号 2)隐藏单元它检测什么?水吗?这个(编号 3)似乎检测到鸟的脚等等。
第五层检测到更加复杂的事物,注意到这(编号 1)也有一个神经元,似乎是一个狗检测器,但是可以检测到的狗似乎更加多样性。这个(编号 2)可以检测到键盘,或者是键盘质地的物体,可能是有很多点的物体。我认为这个神经元(编号 3)可能检测到文本,但是很难确定,这个(编号 4)检测到花。我们已经有了一些进展,从检测简单的事物,比如说,第一层的边缘,第二层的质地,到深层的复杂物体。
我希望这让你可以更直观地了解卷积神经网络的浅层和深层是如何计算的,接下来让我们使用这些知识开始构造神经风格迁移算法。
4.8 代价函数(Cost function)
要构建一个神经风格迁移系统,让我们为生成的图像定义一个代价函数,你接下看到的是,通过最小化代价函数,你可以生成你想要的任何图像。
记住我们的问题,给你一个内容图像𝐶,给定一个风格图片𝑆,而你的目标是生成一个新图片𝐺。为了实现神经风格迁移,你要做的是定义一个关于𝐺的代价函数𝐽用来评判某个生成图像的好坏,我们将使用梯度下降法去最小化𝐽(𝐺),以便于生成这个图像。怎么判断生成图像的好坏呢?我们把这个代价函数定义为两个部分。
J
c
o
n
t
e
n
t
(
C
,
G
)
J_{content}(C,G)
Jcontent(C,G)
第一部分被称作内容代价,这是一个关于内容图片和生成图片的函数,它是用来度量生成图片𝐺的内容与内容图片𝐶的内容有多相似。
J
s
t
y
l
e
(
S
,
G
)
J_{style}(S,G)
Jstyle(S,G)
然后我们会把结果加上一个风格代价函数,也就是关于𝑆和𝐺的函数,用来度量图片𝐺的风格和图片𝑆的风格的相似度。
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)
最后我们用两个超参数𝑎和𝛽来来确定内容代价和风格代价,两者之间的权重用两个超参数来确定。两个代价的权重似乎是多余的,我觉得一个超参数似乎就够了,但提出神经风格迁移的原始作者使用了两个不同的超参数,我准备保持一致。
关于神经风格迁移算法我将在接下来几段视频中展示的,是基于 Leon Gatys,Alexandra Ecker 和 Matthias Bethge 的这篇论文。Leon A. Gatys, Alexander S. Ecker, Matthias Bethge, (2015). 这篇论文并不是很难读懂,如果你愿意,看完这些视频,我也非常推荐你去看看他们的论文。
算法的运行是这样的,对于代价函数𝐽(𝐺),为了生成一个新图像,你接下来要做的是随机初始化生成图像𝐺,它可能是 100×100×3,可能是 500×500×3,又或者是任何你想要的尺寸。
然后使用在之前的幻灯片上定义的代价函数𝐽(𝐺),你现在可以做的是使用梯度下降的方法将其最小化,更新 G : = G − ∂ ∂ G J ( G ) G: = G −\frac{\partial }{\partial G} J(G) G:=G−∂G∂J(G)。在这个步骤中,你实际上更新的是图像𝐺的像素值,也就是 100×100×3,比如 RGB 通道的图片。
这里有个例子,假设你从这张内容图片(编号 1)和风格(编号 2)图片开始,这是另一张公开的毕加索画作,当你随机初始化𝐺,你随机初始化的生成图像就是这张随机选取像素的白噪声图(编号 3)。接下来运行梯度下降算法,最小化代价函数𝐽(𝐺),逐步处理像素,这样慢慢得到一个生成图片(编号 4、5、6),越来越像用风格图片的风格画出来的内容图片。
在这段视频中你看到了神经风格迁移算法的概要,定义一个生成图片𝐺的代价函数,并将其最小化。接下来我们需要了解怎么去定义内容代价函数和风格代价函数,让我们从下一个视频开始学习这部分内容吧。
原文地址:https://blog.csdn.net/weixin_43597208/article/details/143573388
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!