打字猴:1.700540366e+09
1700540366 从低维向量得到高维图片,想高分辨率,这怎么可能?例如,从一个类别到一张图片,信息由少到多,不仅不能压缩或丢失信息,还要补充信息,任务难度必然增大。好比,我一说“狗”,你脑子里闪出狗的画面,可能是金巴,可能是藏獒,你以前一定见过这样的狗,脑子里已经有了它的影像信息,我的一个词就能引起你的想象。即便这样,让你画出狗来,假定你绘画功底很强,你最先画出的是狗的轮廓,而不是一张真实图片,因为有太多的细节需要一点点添加,比如:狗毛发的颜色,狗是跑着的还是卧着的,狗在屋子里还是在草地上……我们可以把100维随机向量,理解成要事先确定一些信息,除了类别还要有细节,它们各项独立并可以相互组合,比如一只装在茶杯里的呆萌茶杯犬(见图13.12)。
1700540367
1700540368
1700540369
1700540370
1700540371 图13.12 图像生成任务需要的一些细节信息
1700540372
1700540373 用随机向量的每维刻画不同的细节,然后生成一张图片。随机向量不含像素级别的位置信息,但是对于图片,每个像素都有它的位置,点构成了线,线组成了面,进而描绘出物体的形状。如果这些位置信息不是从随机向量中产生,那么就应出自生成器的特殊网络结构。
1700540374
1700540375 那么,卷积神经网络能体现位置信息吗?最初设计卷积神经网络时,引入了感受野的概念,捕捉图片邻近区域的特征,只有位置靠近的像素点才能被感受野一次捕捉到。传统多层卷积结构中,越靠近输入端,包含的位置信息越明显,随着层层深入,感受野涵盖的区域扩大,过于细节的位置信息丢失,留下高级语义信息,更好地反映图片的类别。经典的卷积神经网络只是捕捉或识别位置信息,不负责产生位置信息,位置信息来源于输入的图片,当它们不能有效反映图片的高级语义(如类别)时,就会在逐层计算中被丢掉[36]。
1700540376
1700540377 因此,从随机向量造出图片,要在造的过程中产生位置信息。这个生成过程需符合以下两点原则。
1700540378
1700540379 (1)保证信息在逐层计算中逐渐增多。
1700540380
1700540381 (2)不损失位置信息,并不断产生更细节的位置信息。
1700540382
1700540383 参考文献[37]给出了一套具体的做法。
1700540384
1700540385 (1)去掉一切会丢掉位置信息的结构,如池化层。
1700540386
1700540387 池化层是在邻近区域取最大或取平均,会丢失这一区域内的位置信息:无论怎么布局,最大值和平均值是不变的。位置不变性是应对图片分类的一个优良性质,但是对图片生成来说是一个糟糕的性质,因为这是一个降采样的过程,通过丢失细节信息来保留高级语义(即分类相关信息)。
1700540388
1700540389 (2)使用分数步进卷积层。
1700540390
1700540391 模型要做的不是抽象而是具象,计算是升采样的过程,逐步提供更多细节。将100维随机向量经过一层,变换成一个4×4×1024的张量,宽度和高度都为4,虽然大小有限,但是暗示了位置的存在,接着经过层层变换,高度和宽度不断扩大,深度不断减小,直至输出一个有宽度、高度及RGB三通道的64×64×3图片。
1700540392
1700540393 传统卷积层只能缩小或保持前一层的高度和宽度,对于扩大高宽无能为力,我们需要采用特殊的卷积层来实现增加高宽的升采样计算[38],即分数步进卷积层,如图13.13所示。
1700540394
1700540395
1700540396
1700540397
1700540398 图13.13 分数步进卷积层
1700540399
1700540400 步长大于1的传统卷积层会把输入图缩成一张高宽更小的图,5×5的图经过核3×3步长2×2的卷积层得到一个2×2的图,如图13.14(a)所示。如果这个过程可逆,则由输入2×2图可得5×5图。严格意义上的逆过程是数学上的求逆操作,这太复杂。分数步进卷积层只是象征性地保证输入2×2图输出5×5图,同时仍满足卷积操作的定义。怎么做到?填零,不仅边缘处填零,像素点间也填零。我们将2×2图扩为5×5图,再经过核3×3步长1×1的卷积层,就能得到一个5×5图,如图13.14(b)所示。这个“逆”卷积过程只是图分辨率的逆,而非数学意义上的求逆。
1700540401
1700540402
1700540403
1700540404
1700540405 图13.14 卷积操作
1700540406
1700540407 (3)去掉最后的全连接层
1700540408
1700540409 通常CNN最后接全连接层,是为了综合各维度做非线性变换,应对图片分类的目标。这里的任务是生成图片,用全连接层不仅没必要,还会打乱多层卷积建立的空间结构。越靠近图片输出端,越要精心呵护宽高二维平面上的位置信息,反而在输入端可以增加一个全连接层,将100维随机向量经过矩阵乘法转换成4×4×1024的张量。
1700540410
1700540411 (4)批量归一化和ReLU激活函数
1700540412
1700540413 批量归一化是2015年Loffe & Szegedy提出的用于改进神经网络结构的一层,称为Batchnorm层,现已被广泛使用[39]。单个神经元在batch层面上做正规化处理,得到均值0方差1的新batch,保证通畅的梯度流,免除糟糕初始化的影响,改善模型的训练效果。生成模型越深,越需要Batchnorm层,否则训练不充分,极易出现模型坍塌问题,总生成相同的图片样本。另外,为了避免梯度饱和,让学习更稳定,内部使用ReLU激活函数,只在图片输出层用Tanh激活函数。
1700540414
1700540415 ■ 判别器
[ 上一页 ]  [ :1.700540366e+09 ]  [ 下一页 ]