论文解析:DRAW

1,465 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

DRAW

《DRAW: A Recurrent Neural Network For Image Generation》

整体介绍

 本文介绍了一种基于循环注意力网络和VAE的生成网络,作者最基本的灵感来源来自于人眼在对事物进行观察时的机理,我们往往并并不是一次观测就获得了事物的全部信息,而是每次都只观测一小部分,通过不断的观测来补全对事物的整体影响。因此,作者认为当我们想要去生成新样本时,也不应该去奢求网路能够一次性就得到非常好的结果,而是应该不断的对初次生成的结果进行修正,最终得到理想的输出。

模型架构

 模型的整体架构和VAE类似,同样是通过编码器来获得数据背后的隐变量分布,再利用重参数技巧对隐变量采样,通过解码器生成新的图像。不同之处在于,这里的编码器和解码器都是RNN网络而非原先的MLP或者是CNN,这就使得我们可以重复的观测图片从中获取信息,再将其送入解码器进行重构。此外,解码器的输出也会参与到编码的过程,从而使得编码器可以利用前一时间步的重构性能对本轮的编码输出进行优化。最后,在编码过程中,作者并不是简单的采用了基本的RNN架构,而是使用了带注意力的RNN架构,使得每次观测都只是观测某些重点区域,而非次次观测相同的全局。结构图如下:

1.png

左边即为基础的VAE架构,右边为改进的DRAW架构,可以看出它是以一种时序的方式在执行生成过程,每个时间步的编码器都会利用前次解码器的输出来选取关注区域、参与编码过程,而每次的解码器结果都会不断累加最终得到较好的输出。

流程解析

 每个时间步网络所执行的任务如下:

2.png

首先由输入图片xx和解码器重构图片σ(ct1)\sigma(c_{t-1})计算出目前为止的重构误差,使用该误差、前一轮解码器隐状态、输入图片经注意力机制来得到本轮重点关注区域的表征rtr_trtr_t和前一轮解码器隐状态输出作为本时间步的编码器RNN输入,得到本轮编码器输出htench_t^{enc},由此确定隐变量分布的参数(假定隐变量的后验分布为对角正态分布)。经解码器RNN输出隐状态,利用相似的注意力机制获得最终的重构图片。可以看出整个流程的重点就在于这个注意力机制。

注意力机制

 实际上这里的注意力机制就是之前基于区域分割的签名认证系统中注意力机制的灵感来源,同样是使用用横纵两个方向的N*N个网格核函数与输入特征图样相乘,只不过这里的核函数变成了高斯函数,其余部分一模一样,都是通过隐状态确定网格间距、分布参数,再将网格内每个子滤波器的位置变换变换到图像坐标系当中,最后再分别计算原图每个元素经对对应核滤波的结果,不再赘述。

 在read操作里就是将每个滤波器横向纵向权重和原图相乘即得到带注意力的特征表征,而在写操作中则是反了过来,将特征表征(隐变量)重构为图片,计算方式如下:

wt=W(htdec)write(htdec)=1γ^F^YTwtF^Xw_t=W(h_t^{dec})\\ write(h_t^{dec})=\frac{1}{\hat{\gamma}}\hat{F}_Y^Tw_t\hat{F}_X

wtw_t为解码器隐变量映射出的patch embedding。

总结

 文章这一系列想法非常的有意思,不是对图像进行一次全局的信息获取,而是多看几次,每次关注不同的区域,最终获得了更加优越的特征表征。从机理来看,也确实更加符合人眼观察事物的本质。