我要努力工作,加油!

【第二节】深度学习中流行的卷积神经网络是指什么?它也能用于GAN吗?DCGAN架构详解及其PyTorch实现

		发表于: 2021-03-03 08:12:00 | 已被阅读: 23 | 分类于: GAN
		

在基于深度学习的图像处理领域,卷积神经网络有着举足轻重的地位,这当然是因为卷积神经网络特别适合处理图像。因为浅显地从直觉上来看,图像中的各个像素其实并不彼此独立,相反,邻近像素有着很强的关联性,而卷积神经网络能够保持这些关联性

稍后讨论卷积神经网络为何能保持邻近像素的关联性,卷积神经网络还有其他特点,但并不是本文讨论的重点。

回忆上一节介绍的 GAN,它本质上也是一种图像处理网络,那么卷积网络是否也能够应用到 GAN 模型中呢?当然是可以的,DCGAN 就是一个非常优秀的 GAN 架构,前缀 “DC” 表示“Deep Convolutional”,即“深度卷积”,我们一会介绍它。

卷积神经网络简介

卷积的形象理解

卷积是一种数学概念,从某种角度来看,它和加减乘除没什么区别,都表示数学计算。一般来说,两个函数 \( f(t) \)\( g(t) \) 的卷积如下定义:

\( $(f*g)(n)=\int_{-\infty}^{+\infty}{f(t)g(n-t)dt} \)$

离散形式为:

\( $(f*g)(n)=\sum_{t=-\infty}^{+\infty}{f(t)g(n-t)} \)$

从数学角度理解,函数 \( f(t) \)\( g(t) \) 的卷积基本步骤如下:

  • \( g(t) \) 变换为 \( g(-t) \),从数轴上来看,这相当于把 \( g(t) \) 左右对折。
  • \( g(-t) \) 移动到 \( n \) 处,变换为 \( g(n-t) \)
  • \( t \)\( -\infty \)\( +\infty \) 增加,依次计算 \( f(t) \)\( g(n-t) \) 的乘积,并将这些乘积累加起来,累加和即为卷积结果。

第一步中的“左右对折”从可以理解为“卷”。“卷”还有着“卷动”的含义,它是一个动词,可以对应到上述过程第三步中的“\( t \)\( -\infty \)\( +\infty \) 增加”,以及将乘积结果累加到(卷到)一起。“积”非常好理解,就是第三步中的“计算 \( f(t) \)\( g(n-t) \) 的乘积”。

从上述过程不难发现 \( f(t) \)\( g(t) \) 的卷积 \( (f*g)(n) \)\( n \) 的函数,卷积的结果是“一段时间(比如从 \( -\infty \)\( +\infty \))”内的累积,因此,卷积其实有着“遍历”的功能,形象的来说即为 \( g(t) \)\( f(t) \) “从头到尾看了一遍”:

卷积动图

上面这个动图(出处不详,侵删)较为形象的阐释了卷积的过程,卷积的“遍历”功能不难理解。

卷积神经网络

本文要谈的卷积神经网络为较浅显的狭义概念,主要是指基于二维图像数据的卷积算子。

\( $(f*g)(m, n)=\sum_{x,y}{f(x, y)g(m-x, n-y)} \)$

我们已经明白卷积具备“遍历”功能,对应到神经网络的工程应用中,即一个固定 size(例如 3x3) 的卷积算子可以“遍历”任意大的二维图像,如下图

图像卷积.gif

通过在图像边缘填充数据,或者调整卷积“步长”,我们能够控制最终卷积结果的尺寸大小。

可以看出,3x3 的卷积算子“遍历”扫描了输入图片的所有像素,在卷积结果(即所谓的“提取到的特征”)中,像素的相对位置被保留下来了。对于图像来说,像素的相对位置是非常重要的信息,它能够在一定程度上避免提取到的图像“失真”。

再回头看全连接算子,不仅参数量巨大,而且因为提取到的每一个特征都来自于所有像素,全连接算子构成的网络并不能保留原始图像像素的相对位置。

DCGAN