Pixel Recurrent Neural Networks 和 autoregressive models 自回归模型

Pixel Recurrent Neural Networks

pixel rnn 是 生成模型的一种,基于autoregressive models。他的思想很简单,就是最大似然估计的方式去拟合图像数据。将二维的图像数据比作序列数据,以条件概率的方式,逐点预测和计算。并且每个像素点的预测都在[0-255]之间,(单通道情况下)如下图1所示:

Pixel Recurrent Neural Networks 和 autoregressive models 自回归模型_第1张图片

图1,autoregressive models 在二维图片上的预测方式。

其公式也很简单,就是将联合概率拆成了条件概率累乘的形式,从而使得每一个像素点都可以计算。公式1,如下所示:

那么对应到图1,就可以知道,当预测第i个点的时候,我们就要考虑从第1个,到第i-1个所有点的情况,根据这些条件,计算第xi的像素值。

那么实际上,这篇论文提出了三个变体,如下图2所示:

Pixel Recurrent Neural Networks 和 autoregressive models 自回归模型_第2张图片

图2 ,三个版本的autoregressive models

分别为基于CNN、Row LSTM和BILSTM,Row LSTM和BILSTM 现在这两个版本不是非常常用,虽然这两个版本利用RNN的计算形式,对输入也没有限制,而且能够捕捉图像空间的长依赖关系,但是这两个版本不利于并行,而且这三个版本最开始出来的时候,差距也差不多,PixelCNN 也没有差太多。所以后面大家都用这个版本,并且其变体也已经超越了上述的版本。

本着功利的角度,只介绍pixel CNN,因为其他两个训练效率不行,而且效果也都差不多,有兴趣的同学可以自行了解。

实际上,要实现图1的效果,做法就是,将特征图进行padding ,然后再用卷积核在特征图上卷积,但是同时屏蔽卷积核后面的几个参数,就可以实现上述过程。如图3,所示,举一个粗暴的例子:

Pixel Recurrent Neural Networks 和 autoregressive models 自回归模型_第3张图片

图3,假设红色的部分为卷积核,==》4*7大小,然后绿色的部分为被设为0 的卷积核权重,整张图为一张特征图。

通过这样,我们就能实现,“只看见前面,来预测后面的值”。并且,保证每一次卷积核后,特征图大小不变,那么,层层计算就都是这种形式。那有人会问,上面这张图后面三个特征图咋整? 那就给特征图右边 padding 3列,这样,卷积核就能移到外面,并且能够计算上数下,第4行,第7个的特征值了。

基于pixel rnn 的变体还有很多 pixel rnn, pixel cnn, pixel cnn++, PixelsNail,还有Conditional 的版本。但是最核心的就是这个卷积方式,以及最后的基于像素的多分类交叉熵。目标函数可以改,其目的就是达到极大似然估计的目的。

pixel rnn, pixel cnn, pixel cnn++, PixelsNail,还有Conditional  可以再自行了解一下,每一个都有自己的改进。

你可能感兴趣的:(机器学习,深度学习)