朗之万动力学
朗之万动力学原理简介
本文的主要内容是基于以下教程:Tutorial on Diffusion Models for Imaging and Vision
此教程写的非常好,非常推荐大家学习。教程的语言风格也很亲切,时不时地蹦出诸如“这是地球人能想出来的公式?”这样的话,为你枯燥的学习过程增添些许趣味。
朗之万动力学(Langevin Dynamics)是扩散模型和score matching方法中的采样过程,是文本生成图像中的一个重要步骤。想要洞悉文生图的基本原理,朗之万动力学是绕不开的话题。
给定一个已知的概率分布
随机选取空间中一个点(这是很简单的,采用高斯生成与
朗之万动力学,是从已知的概率分布
其中
朗之万动力学就是随机梯度下降!
我们给出一个可视化结果。假设数据分布为高斯混合分布,是两个高斯分布混合的情况,那么,如果每一步不添加噪声,朗之万动力学的迭代过程是这个样子的:

可以看到,收敛到局部极大值点就不再变了。如果每一步添加噪声,那么迭代过程是这个样子的:

这时候接近局部极大值点的时候,是逐步震荡收敛的。
下面我们给出公式(1)是怎么来的,它和物理学中的朗之万动力学又有什么关系。大家不要被朗之万动力学这个名词吓到,其实,阅读此文不需要有大学物理背景,只需要有高中物理知识,同时会一点点微积分就可以了。
一、预备知识
1、牛顿第二定律
力
其中加速度
2、力与能量的关系
这个可能部分读者不太熟悉。我们从动能定理开始。动能定理(kinetic energy theorem)描述的是物体动能的变化量与合外力所做的功的关系,具体内容为:合外力对物体所做的功,等于物体动能的变化量。公式如下:
这里
力和能量是随着物体的位置而变化的,因此是位置
因此,力是动能对于位移方向的梯度。另外,我们将系统内粒子的能量分为动能和势能,除了动能之外的所有能量都为势能,我们用
我们得出结论,力是粒子势能的负梯度。
3、玻尔兹曼分布
在热力学与统计物理中。每个粒子的分布的位置是一个随机变量,粒子的分布一般用玻尔兹曼分布来表示:
其中
二、推导朗之万动力学
一百多年前,著名物理学家朗之万给出了布朗运动方程:
我们不必纠结这个方程怎么来的。我们其实可以很轻松地读懂这个方程。这本质上就是牛顿第二定律的拓展,等式左边就是质量和加速度的乘积,等式右边是力。其中
由牛顿第二定律和力与能量的关系可知:
代入(2)式,于是有:
速度是位移随时间的导数,另外,将随机力简化为标准高斯分布
时间离散化:
这里
到这里我们稍微停一下。根据(2)式所描述的过程,最终粒子会越来越集中,还是越来越分散?对(2)式两边取期望,可以发现,粒子的速度是越来越小的,即动能是越来越小的,粒子往势能增大的方向扩散。根据玻尔兹曼分布,粒子的概率密度会越来越小。而我们希望的是相反的方向,即采样出概率密度最大的样本。因此需要对上式右边梯度的符号进行修改:
根据玻尔兹曼分布:
代入(3)式,有:
对比 (1) 式和 (4) 式,是不是感觉几乎一样了呢?
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签