1 Introduction
自回归模型随着gpt的出现取得很大的成功,还是有很多工程上的问题并不是很适合使用自回归模型:
1)自回归需要的算力太大,满足不了实时性要求:例如在自动驾驶的轨迹预测任务中,如果要用纯自回归的世界模型,耗时太大;
2)要求数据天然有时序性:很多图像任务并没有严格的序列生成的要求;
这个部分开始用隐变量的方式来进行建模。
2 特征提取和线形回归
自动驾驶和机器人中的很多任务,是通过感知的环境输入, 然后进行特征提取,最后用线形回归来预测和生成指令。
但是这种方式因为采用了非常简单的单高斯分布来估计指令,这个时候有几种提高的方式:
1)提高特征的表达能力:
1.1)如果特征提取的模型(一般是transformer)记忆力足够强大,哪怕后面接了单峰高斯估计也能有一个比较好的拟合效果;直觉来说,就是把所有的情况都记住了。高质量的特征能够在一定程度上“预处理”复杂性。
1.2)采用anchor based的query来生成不同的feature,降低拟合难度。
2)提高概率分布的表达能力:
2.1)采用混合高斯叠加的概率分布,来生成复杂的概率分布。
因为提高特征表达能力往往是多模态相关的工作,这里我门进行跳过,更加关注通过提高概率分布的表达能力这个方面。
3 vae 模型
z是隐变量,需要用模型构建z存在的情况下 p ( x ∣ z , θ ) p(x|z,\theta) p(x∣z,θ)的概率。
按照note2的内容,loss设计的时候,满足极大似然就可以 l o g P θ ( x ) logP_{\theta}(x) logPθ(x)。
现在的问题是,每种z都有一定的概率能生成x。可以采用普查的方式,或者采用抽样的方式
l o g P θ ( x ) = 1 D ( z ) ∑ z ∈ D P ( x , z ; θ ) \begin{aligned} logP_{\theta}(x)=\frac{1}{D(z)}\sum_{z \in D}P(x,z;\theta) \end{aligned} logPθ(x)=D(z)1z∈D∑P(x,z;θ)
因为z本身是连续分布,采用普查的方式来采样无穷个 z j z^j zj显然是不现实的。我们只需要将和x相关性较高的z(重要性采样)找出来就好。
l o g P θ ( x ) = l o g ∑ j = 1 k q ( z ( j ) ) q ( z ( j ) ) P ( x , z ; θ ) = l o g E x − q ( z ) P ( x , z ; θ ) q ( z ( j ) ) \begin{aligned} logP_{\theta}(x) & = log\sum_{j=1}^k \frac{q(z^{(j)})}{q(z^{(j)})} P(x,z;\theta) \\ & = logE_{x-q(z)}\frac{P(x,z;\theta)}{q(z^{(j)})} \end{aligned} logPθ(x)=logj=1∑kq(z(j))q(z(j))P(x,z;θ)=logEx−q(z)q(z(j))P(x,z;θ)
对于log这种凸函数,满足 l o g E [ x ] > E [ l o g ( x ) ] logE[x]>E[log(x)] logE[x]>E[log(x)],可以对上面这个式子进行变换
l o g P θ ( x ) = l o g E x − q ( z ) P ( x , z ; θ ) q ( z ( j ) ) ≥ E x − q ( z ) l o g P ( x , z ; θ ) q ( z ( j ) ) = ∑ j = 1 k q ( z ( j ) ) l o g P ( x , z ; θ ) q ( z ( j ) ) = ∑ j = 1 k ( q ( z ( j ) ) l o g P ( x , z ; θ ) − q ( z ( j ) ) l o g q ( z ( j ) ) ) = E L B O \begin{aligned} logP_{\theta}(x) & = logE_{x-q(z)}\frac{P(x,z;\theta)}{q(z^{(j)})} \\ & \ge E_{x-q(z)}log\frac{P(x,z;\theta)}{q(z^{(j)})} \\ & = \sum_{j=1}^kq(z^{(j)})log\frac{P(x,z;\theta)}{q(z^{(j)})} \\ & = \sum_{j=1}^k(q(z^{(j)})logP(x,z;\theta)-q(z^{(j)})logq(z^{(j)}))=ELBO \end{aligned} logPθ(x)=logEx−q(z)q(z(j))P(x,z;θ)≥Ex−q(z)logq(z(j))P(x,z;θ)=j=1∑kq(z(j))logq(z(j))P(x,z;θ)=j=1∑k(q(z(j))logP(x,z;θ)−q(z(j))logq(z(j)))=ELBO
现在问题变得很简单了,我们需要搞清楚 q ( z ) q(z) q(z)的概率分布。q(z)概率分布可以理解成状态变量x通过网络提取出来的特征。
但是这里可能存在一个问题,我们的encoder并没有很好的把z的概率分布估计好。也就是说重要的z可能给的概率不够高,不重要的z可能给的概率太高了,所以我们还是要看一下encoder到底拟合的怎么样。显然这里就用KL散度来描述。
D K L ( q ( z ) ∣ ∣ p ( z ∣ x ; θ ) ) = ∑ z q ( z ) l o g q ( z ) p ( z ∣ x ; θ ) = ∑ z q ( z ) l o g q ( z ) p ( z , x ; θ ) / p ( x ; θ ) = ∑ z ( q ( z ) l o g q ( z ) + q ( z ) l o g p ( x ; θ ) − q ( z ) l o g p ( x , z ; θ ) ) = ∑ z q ( z ) l o g p ( x ; θ ) − ∑ z ( q ( z ) l o g q ( z ) − q ( z ) l o g p ( x , z ; θ ) ) = l o g p ( x ; θ ) − ∑ j = 1 k ( q ( z ( j ) ) l o g P ( x , z ; θ ) − q ( z ( j ) ) l o g q ( z ( j ) ) ) \begin{aligned} D_{KL}(q(z)||p(z|x;\theta))&=\sum_z q(z)log\frac{q(z)}{p(z|x;\theta)} \\ & = \sum_z q(z)log\frac{q(z)}{p(z,x;\theta)/p(x;\theta)} \\ & = \sum_z (q(z)logq(z)+q(z)logp(x;\theta)-q(z)logp(x,z;\theta)) \\ & = \sum_z q(z)logp(x;\theta) - \sum_z (q(z)logq(z)-q(z)logp(x,z;\theta)) \\ & = logp(x;\theta)- \sum_{j=1}^k(q(z^{(j)})logP(x,z;\theta)-q(z^{(j)})logq(z^{(j)})) \end{aligned} DKL(q(z)∣∣p(z∣x;θ))=z∑q(z)logp(z∣x;θ)q(z)=z∑q(z)logp(z,x;θ)/p(x;θ)q(z)=z∑(q(z)logq(z)+q(z)logp(x;θ)−q(z)logp(x,z;θ))=z∑q(z)logp(x;θ)−z∑(q(z)logq(z)−q(z)logp(x,z;θ))=logp(x;θ)−j=1∑k(q(z(j))logP(x,z;θ)−q(z(j))logq(z(j)))
这个公式就是我们上面那个公式,也证明了只有我们的encoder能充分的将z的概率分布学习好的时候,才能保证最大似然估计的更好。
现在我们来更新一下极大似然
l o g P θ ( x ) = ∑ z ( q ( z ∣ x , ϕ ) l o g P ( x , z ; θ ) − q ( z ∣ x , ϕ ) l o g q ( z ∣ x , ϕ ) ) − D K L ( q ( z ) ∣ ∣ p ( z ∣ x ; θ ) ) \begin{aligned} logP_{\theta}(x) & = \sum_{z}(q(z|x,\phi)logP(x,z;\theta)-q(z|x,\phi)logq(z|x,\phi)) - D_{KL}(q(z)||p(z|x;\theta))\\ \end{aligned} logPθ(x)=z∑(q(z∣x,ϕ)logP(x,z;θ)−q(z∣x,ϕ)logq(z∣x,ϕ))−DKL(q(z)∣∣p(z∣x;θ))
KL散度可以积分直接得到解析解,这里直接给出公式的结果
D K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ) ) = D K L ( N ( μ , σ ) ∣ ∣ N ( 0 , 1 ) ) = 1 2 ∑ i ( σ i 2 + μ i 2 − 1 − l n σ i 2 ) \begin{aligned} D_{KL}(q_{\phi}(z|x)||p(z)) & = D_{KL}(\mathcal{N}(\mu, \sigma)||\mathcal{N}(0, 1)) \\ & = \frac{1}{2}\sum_i(\sigma_i^2+\mu_i^2-1-ln\sigma_i^2) \end{aligned} DKL(qϕ(z∣x)∣∣p(z))=DKL(N(μ,σ)∣∣N(0,1))=21i∑(σi2+μi2−1−lnσi2)
对于ELBO,这里只能采用mento carlo的方式进行采样计算
z ( k ) = μ ϕ ( x ) + σ ϕ ( x ) ϵ , ϵ ∼ N ( 0 , 1 ) z^{(k)}=\mu_{\phi}(x)+\sigma_{\phi}(x)ϵ, ϵ \sim \mathcal{N}(0, 1) z(k)=μϕ(x)+σϕ(x)ϵ,ϵ∼N(0,1)
那么极大似然可以更新成
l o g P θ ( x ) = 1 K ∑ k l o g P ( x , z ( k ) ; θ ) − l o g q ( z ( k ) ∣ x ; ϕ ) ) − D K L ( q ( z ) ∣ ∣ p ( z ∣ x ; θ ) ) \begin{aligned} logP_{\theta}(x) & =\frac{1}{K} \sum_{k}logP(x,z^{(k)};\theta)-logq(z^{(k)}|x;\phi)) - D_{KL}(q(z)||p(z|x;\theta))\\ \end{aligned} logPθ(x)=K1k∑logP(x,z(k);θ)−logq(z(k)∣x;ϕ))−DKL(q(z)∣∣p(z∣x;θ))
最后我们再来看一下这个公式,这个也解答了我们再线形回归中的问题。
1)如果我们的隐变量估计的很准确(特征提取)的越准确,越有助于我们进行参数似然估计;
2)我们从z变量中多采样几个(采样k个隐变量,类似于我们采用anchor-based 的query),越有助于我们更准确的进行参数似然估计;
3)KL散度则是encoder的正则化,确保真实后验 p ( z ∣ x ; θ ) p(z|x;\theta) p(z∣x;θ)和先验分布一致;在线形回归任务中,我门经常对提取的特征进行特征重建,也达到了类似的效果。