L2 Autoregressive Model

Lecture2 Autoregressive Models

Lecture2的主要内容是自回归模型,主要包括:

  • Motivation
  • Histogram
  • Neural Autoregressive models
    • Parameterized distributions and maximum likelihood
    • Autoregressive models
      • RNN
      • Masking-based models

Likelihood-based Model

基于似然的模型主要做的一件事情是:根据数据集 { x ( 1 ) , … , x ( n ) } \{x^{(1)},\dots,x^{(n)}\} {x(1),,x(n)}学习一个概率分布 p d a t a p_{data} pdata。 学习到的 p d a t a p_{data} pdata应该满足:

  1. 我们可以得到任意sample x x x的概率密度 p ( x ) p(x) p(x)
  2. 我们可以从概率分布中采样出一个 x x x

但是我们所处理的数据通常都是高维的,例如一张 128 × 128 × 3 128\times128\times3 128×128×3的彩色图像,他的维度大约是 50000 50000 50000。因此我们还希望我们的模型具有以下几个特点:

  1. 训练过程高效
  2. 模型表达能力强、泛化性强
  3. 生成数据的质量高、速度快
  4. 压缩率高、速度快

Histogram

最简单粗暴的方法就是根据训练集画一个直方图,我们只需要知道每个特征有哪些不同的取值然后计算frequency当作probability即可

根据直方图模型,我们可以轻松的进行以下两个操作:

  1. Inference:给定一个 x x x,求 p ( x ) p(x) p(x)。可以直接看图说话
  2. Sampling:根据CDF生成 x x x。可以通过以下几步完成
    1. 首先计算出CDF: F i   =   ∑ j = 1 i p ( j )       i ∈ { 1 … k } F_{i}\ =\ \sum_{j=1}^{i}p(j)\ \ \ \ \ i\in \{1\dots k\} Fi = j=1ip(j)     i{1k} k k k是特征不同取值的数量
    2. 随机生成一个 0 0 0 1 1 1之间的数 u u u
    3. 返回最小的 i i i满足 F i ≥ u F_i \ge u Fiu

然而,直方图模型最显而易见的缺点就是它无法应用在高维数据上。另一个问题就是他的泛化能力差,毕竟直方图是完全按照训练集的数据分布进行拟合,因此是很明显的过拟合,模型的方差会很大。我们想要的分布应该是如下图这种:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hxpQ4d90-1672626993845)(L2 Autoregressive Model.assets/image-20221215083243305.png)]

Likelihood-based Generative Model

为了克服histogram有的问题,我们引入一个参数 θ \theta θ,让模型学习一个基于参数 θ \theta θ的概率分布 p θ ( x ) p_{\theta}(x) pθ(x)并且要求 p θ ( x ) p_{\theta}(x) pθ(x) p d a t a ( x ) p_{data}(x) pdata(x)越接近越好,这其实就是大多数ML模型在做的事情。

如何训练模型?我们需要定义一个损失函数,最优的参数应该满足最小化损失函数,即
θ ∗   =   a r g m i n θ     l o s s ( θ , x ( 1 ) , x ( 2 ) , … , x ( n ) ) \theta^{*}\ =\ argmin_{\theta}\ \ \ loss(\theta,x^{(1)}, x^{(2)},\dots,x^{(n)}) θ = argminθ   loss(θ,x(1),x(2),,x(n))
而我们定义的损失函数以及我们寻找最优解的过程应该满足:

  1. 能够应对大规模数据集
  2. p θ ∗ ( x ) p_{\theta^{*}}(x) pθ(x)应该和 p d a t a ( x ) p_{data}(x) pdata(x)匹配
  3. 得到的模型应该具有良好的泛化能力
Maximum Likelihood

给定数据集 { x ( 1 ) , … , x ( n ) } \{x^{(1)},\dots,x^{(n)}\} {x(1),,x(n)},我们可以通过解决以下的优化问题找到参数 θ \theta θ
a r g m i n θ     l o s s ( θ , x ( 1 ) , … , x ( n ) )   =   1 n ∑ i = 1 n − l o g p θ ( x ( i ) ) argmin_{\theta}\ \ \ loss(\theta,x^{(1)},\dots,x^{(n)})\ =\ \frac{1}{n}\sum_{i=1}^{n}-logp_{\theta}(x^{(i)}) argminθ   loss(θ,x(1),,x(n)) = n1i=1nlogpθ(x(i))
也就是经典的最大对数似然法。这个与最小化 p θ ( x ) p_{\theta}(x) pθ(x) p d a t a ( x ) p_{data}(x) pdata(x)之间的KL散度是等价的:
p d a t a ( x )   =   1 n ∑ i = 1 n 1 [ x = x ( i ) ] K L ( p d a t a ∣ ∣ p θ )   =   ∑ x ∼ p d a t a p d a t a ( x ) l o g ( p d a t a ( x ) p θ ( x ) ) p_{data}(x)\ =\ \frac{1}{n}\sum_{i=1}^{n}1[x=x^{(i)}]\\ KL(p_{data}||p_{\theta})\ =\ \sum_{x \sim p_{data}} p_{data}(x)log(\frac{p_{data}(x)}{p_{\theta}(x)}) pdata(x) = n1i=1n1[x=x(i)]KL(pdata∣∣pθ) = xpdatapdata(x)log(pθ(x)pdata(x))

Autoregressive Models

首先回顾一些概率论里的东西,假如我们要计算多元随机变量的联合概率分布,我们可以根据chain rule进行拆分,例如:
p ( x , y , z )   =   p ( x ) ⋅ p ( x ∣ y ) ⋅ p ( z ∣ x , y ) p(x,y,z)\ =\ p(x) \cdot p(x|y) \cdot p(z|x,y) p(x,y,z) = p(x)p(xy)p(zx,y)
我们知道生成式模型是对联合概率进行建模,而应用了上述的chain rule之后,我们发现得到的目标函数很适合用之前的maximum likelihood方法进行优化
p θ ( x )   =   ∏ i = 1 d p θ ( x i ∣ x 1 : i − 1 ) l o g p θ ( x )   =   ∑ i = 1 d l o g p θ ( x i ∣ x 1 : i − 1 ) p_{\theta}(x)\ =\ \prod_{i=1}^{d}p_{\theta}(x_i | x_{1:i-1}) \\ logp_{\theta}(x)\ =\ \sum_{i=1}^{d}logp_{\theta}(x_i|x_{1:i-1}) pθ(x) = i=1dpθ(xix1:i1)logpθ(x) = i=1dlogpθ(xix1:i1)
这也被称为Autoregressive Model

那么,Autoregressive Model能够解决之前提到的高维数据问题么?实际上Autoregressive Model依旧存在两个问题:

  1. 对于 n n n维数据,模型参数是 O ( d ) O(d) O(d)的。而这个 d d d其实可以很大
  2. 泛化能力有限,不同的条件概率分布之间没有共享任何信息

解决这两个问题的有效方法就是进行参数共享

Recurrent Neural Network

比较经典的一类Autoregressive Model就是RNN。在Transformer霸榜以前,RNN模型是被广泛用于文本生成任务的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PfoFTinK-1672626993846)(L2 Autoregressive Model.assets/image-20221215093744425.png)]

RNN的模型结构完美的符合了Autoregressive Model的要求,即在每个时间步我们只能看到之前的数据。而参数共享的实现有三个部分:

  • W x h W_{xh} Wxh: 即输入与当前隐状态之间的参数
  • W h h W_{hh} Whh: 即上一个隐状态与当前隐状态之间的参数
  • W h y W_{hy} Why: 即当前隐状态与输出之间的参数

RNN模型也可以用于图像生成,比如生成MNIST,如果给模型加一个类似positional encoding的输入,RNN也能取得不错的效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UmDiyzqp-1672626993846)(L2 Autoregressive Model.assets/image-20221215094227049.png)]

Masking-based Autoregressive Model

Masking-based Autoregressive Model的核心特征是对所有条件概率进行并行运算。

Masked Autoencoder for Distribution Estimation (MADE)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kfGdQHLo-1672626993846)(L2 Autoregressive Model.assets/image-20221215094930411.png)]

考虑一个普通的MLP,我们输入几张图片进去,得到输出。但是这个输出并不是我们想要的概率分布,它可以表示某种分布,但是没有normalized。MADE模型所做的事情就是通过chain rule将输出进行normalize,得到我们想要的proper distribution。而实现的方式是先给输入数据赋一个ordering,比如在上图中就是3 1 2,然后应用chain rule: x 2 x_2 x2不依赖于任何其他输入, x 3 x_3 x3依赖于 x 2 x_2 x2 x 1 x_1 x1依赖于 x 2 , x 3 x_2,x_3 x2,x3。然后,基于这种依赖关系,MADE设计了相应的mask以确保模型在forward过程中满足这些关系。

MADE中具体的mask设计方法是这样的:

  1. 对于每一个neuron,生成一个 1 1 1 D − 1 D-1 D1的随机数 m m m
  2. 对于第 k k k个neuron,我们令 m ( k ) m(k) m(k)表示这个neuron最多能够连接的input数量
  3. 对于input和hidden units之间或者hidden units与hidden units之间的mask, M k , d W = I [ m ( k ) ≥ d ] M^{W}_{k,d}=I[m(k)\ge d] Mk,dW=I[m(k)d]
  4. 对于hidden units与output之间的mask, M d , k V = I [ m ( k ) < d ] M^{V}_{d,k}=I[m(k)<d] Md,kV=I[m(k)<d]

M W , V   =   M W M V M^{W,V}\ =\ M^{W}M^{V} MW,V = MWMV就能够表示从每个input到每个output的路径,可以证明这个矩阵是严格lower diagonal的,也就能够满足Auto-regressive的性质。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sdOA58pe-1672626993847)(L2 Autoregressive Model.assets/image-20221215102658086.png)]

上图是MADE在MNIST数据集上sampling的效果,可以看出MADE的expressiveness和generalize ability都是不错的。

WaveNet

WaveNet是语音领域的一个经典模型。首先我们来看普通的Masked 1D Convolution。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b84ZTPnp-1672626993847)(L2 Autoregressive Model.assets/image-20221215103001592.png)]

根据Autoregressive Model的要求,我们只能看到当前数据之前的数据,因此我们也只能对之前的数据进行卷积。这种模型的优点是:

  • 比较容易实现,可以直接对卷积核进行mask
  • 参数量是一个常数
  • 计算效率高

但是一个很大的缺点是感受野(receptive field)十分有限,从上图就能看出,三层的hidden layer感受野才只有5,因此要获得较大的感受野,必须增加多层卷积网络或者用很大的卷积核。

WaveNet对卷积进行了改进,设计了一种dilated convolution,直观感受就是模型在跳步进行卷积,随着深度的增加,步长也越大。

img

除了这一改进,WaveNet还设计了更加优秀的网络结构来增强模型的表达能力,包括使用了残差连接和门控机制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aMLKF7DN-1672626993847)(L2 Autoregressive Model.assets/image-20221215104355183.png)]

PixelCNN

PixelCNN可以看作是WaveNet的二维卷积形式,在图像生成领域应用很广泛。同样的问题,当我们想生成像素点 x i x_i xi的时候,我们只能看到 x i x_i xi之前的像素点,而不能看到之后的。因此还是需要对卷积核进行一个mask操作。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9VN3vsEg-1672626993847)(L2 Autoregressive Model.assets/image-20221215104545839.png)]

一种简单的方式就是设计如下图的mask

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4zso3bbU-1672626993848)(L2 Autoregressive Model.assets/image-20221215104713761.png)]

而根据前面介绍的MADE模型,我们知道layer与layer之间是可以有horizontal connection的。因此PixelCNN中的mask也分为type A mask和type B mask。 type A mask就是上图这种,表示input与first layer之间的卷积核mask;type B mask则是允许当前像素点可见,也就是中心的那个pixel的mask值现在变为1。

Improvements

但是这种mask产生了一个问题叫做:blind spot in receptive field

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ZsQ6GBz-1672626993848)(L2 Autoregressive Model.assets/image-20221215104817168.png)]

这个问题的产生是由于我们的mask只能看到上面那个L型,因此当我们卷积到比较靠两边的像素点时,mask为0的区域我们永远也无法看到。

PixelCNN对此的改进是对于每个像素点,我们把mask值为1的区域分成两个部分,一个部分是像素点所在行之前的所有行,也就是像素点上方的矩形区域;另一个部分是像素点当前行左边的部分。上方的矩形部分我们把它叫做Vertical Stack,左边的长条部分叫做Horizontal Stack。通过对这两个部分分别进行卷积,再合并,就能解决blind spot的问题。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s3XZXvwX-1672626993848)(L2 Autoregressive Model.assets/image-20221215105538234.png)]

另一个改进来源于PixelRNN,作者引入了LSTM的门控机制,提出Gated PixelCNN
y   =   t a n h ( W k , f ∗ x ) ⋅ σ ( W k , g ∗ x ) y\ =\ tanh(W_{k,f} * x)\cdot \sigma(W_{k,g} * x) y = tanh(Wk,fx)σ(Wk,gx)
改进后的PixelCNN结构如下图所示,左边的输入表示Vertical Stack, 右边的是Horizontal Stack,绿色的部分表示卷积操作以及卷积核的大小。

Conditional PixelCNN

朴素的PixelCNN在学习的是以下的概率分布:
p ( x )   =   ∏ i = 1 n 2 p ( x i ∣ x i − 1 , x i − 2 , … , x 1 ) p(x)\ =\ \prod_{i=1}^{n^2}p(x_i|x_{i-1},x_{i-2},\dots,x_1) p(x) = i=1n2p(xixi1,xi2,,x1)
实际上我们还可以给模型一个high-level image description latent vector h h h,这个 h h h可以表示图片所属的类别,或者表示图片中一些位置信息(文中提到可以通过deconvolution训练出一个与图中位置相关的特征表示 s = m ( h ) s=m(h) s=m(h))。于是模型接下来train的就变成了一个条件概率:
p ( x )   =   ∏ i = 1 n 2 p ( x i ∣ x i − 1 , … , x 1 , h ) p(x)\ =\ \prod_{i=1}^{n^2}p(x_i|x_{i-1},\dots,x_1,h) p(x) = i=1n2p(xixi1,,x1,h)
具体融合 h h h的方式类似于把它作为卷积的一个bias
y   =   t a n h ( W k , f ∗ x + V k , f T h ) ⋅ σ ( W k , g ∗ x + V k , g T h ) y\ =\ tanh(W_{k,f} * x + V_{k,f}^T h)\cdot \sigma(W_{k,g} * x + V_{k,g}^T h) y = tanh(Wk,fx+Vk,fTh)σ(Wk,gx+Vk,gTh)

Masked Attention

Attention是masking-based模型中最典型的一种,也是目前最热门的一种。对于Multi-head Self-Attention的计算过程就不多赘述了,而实现Autoregressive的方法也很简单,只需要设计一个只能看到前面数据的mask就可以,自己和之后的数据置为一个非常小的值,这样再取 e x p exp exp就近似于0。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值