随机变分推断(SVI)与变分推断(VI)的核心差异是什么?
Great question—this is a super common point of confusion because a lot of resources don’t spell out the differences clearly. Let’s break this down in plain terms:
随机变分推断(SVI) vs 变分推断(VI):核心差异
1. 计算规模:全量数据 vs 随机小批量
- 传统变分推断(VI)在计算证据下界(ELBO)的梯度时,会用到整个数据集的所有样本。这对于小型数据集来说没问题,但如果你的数据量是百万级甚至更大,每次迭代的计算成本会高到难以承受,根本无法在合理时间内完成训练。
- **随机变分推断(SVI)**则是VI的“大数据友好版”:它每次只从数据集中抽取一小部分样本(称为mini-batch,小批量)来估计ELBO的梯度。这直接把每次迭代的计算量降低了几个数量级,让变分推断能轻松处理大规模数据集。
2. 收敛行为:确定性平滑 vs 带噪波动
- 传统VI的梯度计算是确定性的,因为用了全量数据,所以参数更新的方向稳定,收敛曲线通常比较平滑,能较快达到稳定值。
- SVI的梯度是基于小批量样本的估计,不可避免会带有随机噪声(毕竟小批量不能完美代表整个数据集),所以收敛过程会有明显的波动。不过通过设置合理的学习率(比如随迭代次数逐渐衰减),最终SVI还是能收敛到和传统VI非常接近的结果,只是需要更多迭代次数来抵消噪声的影响。
3. 适用场景:小数据优先 vs 大数据刚需
- 如果你的数据集很小(比如几千条样本),传统VI的计算速度足够,而且结果更稳定,完全没必要用SVI。
- 但在现代机器学习场景中(比如推荐系统、图像分类、自然语言处理的大规模数据集),SVI几乎是唯一可行的变分推断方案——传统VI的全量计算根本无法落地。
4. 梯度估计的细节差异
从数学上看,两者的核心目标都是最大化ELBO,但梯度计算方式不同:
- 传统VI的ELBO梯度是:
这里的期望是对整个数据集的所有x计算的。∇_φ E_{q_φ(z|x)}[log p(x,z) - log q_φ(z|x)] - SVI则用小批量样本的平均来近似这个期望,同时加入缩放因子修正偏差:
其中(N/B) * ∇_φ E_{q_φ(z|x_i)}[log p(x_i,z) - log q_φ(z|x_i)]N是总样本数,B是小批量大小,(N/B)是为了让小批量梯度的期望接近全量梯度的期望。
简单总结:SVI本质上是为大规模数据优化的变分推断变体,通过随机采样小批量数据来大幅降低计算成本,以收敛过程的轻微波动为代价,换来了处理海量数据的能力。
内容的提问来源于stack exchange,提问作者Astrid
相关产品推荐
相关产品推荐

