这篇文章的内容主要以了解概念,并试图用更加通俗的语言来帮助理解为主,并不会做严谨、复杂的数学分析。
为了不浪费您的时间,请酌情阅读
引言
2023年,AI科技像是打了加强针一样,大量商用人工智能产品如雨后春笋一样爆发。
以ChatGPT为爆点的生成式AI开始,Midjourney,Stable Diffusion,Dalle·2… 包括最近出圈的Pika,也都备受世人关注。
当然,AI并不是一夜之间凭空出现的:两代前的iOS就开始支持图片文字识别;疫情期间一个30元人民币的摄像头就可以玩一玩的人脸识别;2018年在5v5的Dota2对战中,OpenAI训练的AI战胜了TI8冠军OG;更早期还有,Deepmind在围棋领域称霸,Google翻译使用文本模型增强其翻译准确度(虽如今被ChatGPT完爆)。这些过往AI走过的足迹,揭示了人工智能是如何一步一步走到了今天,最终量变产生质变,奇点在今年这个时刻爆发了。
AI正在逐渐改变我们的生活,旧科技正在这个崭新的未来进程中逐渐淡出我们的视野。不过,在准备登上前往新世纪的渡轮前,让我们把心思收回,看向这篇文章的标题。
扩散模型(Diffusion Model)
很多产品都使用了扩散模型,包括 Midjourney,Stable Diffusion,Dalle·2,由于我并不了解其他模型,所以我也不在此妄议。
扩散模型(Diffusion Model),本质是通过一个连续地加噪过程,来污染一组完整有意义的数据集,使数据集变成纯噪音。然后,训练模型学习去除噪声,直到其能大致拟合原有数据。在训练完成后,扩散模型可以用学习到的去噪过程来生成数据。这一连续地加噪过程,被称为前向过程(Forward Process); 与之相反,则被称为逆向去噪过程(Reverse Denoised Process)。对模型的训练,就在逆向去噪的过程中完成。
扩散模型不光能应用于图像相关的领域(虽然目前大部分都是该领域),音频、文字、视频等领域也有广泛的应用。
前向过程(Forward Process)
如上图所示,我们在左侧给出一组数据集,它在0时刻是清晰、有意义的,称作
随后,在上,加入一个服从于 的正态变量(也称为噪音),得到在1时刻数据集
数据集从到变化后,我们可以清楚地感知到,在一定程度上,原始数据集被噪音污染了。
接着,我们重复操作 …, 直到 ,这就是一个扩散模型的前向过程(Forward Process)。若给定一个,要获得,那么总共需要经过t个步骤。直到重复至第n步后,原始数据集中已经完全被噪声污染,几乎很难提取出有用的信息
注意,虽然 都是正态变量,但它们之间的均值µ 和标准差σ 却并不相同。从上面的迭代图中,我们也可以观察到此现象:第一步(即 )的迭代后, 增加噪点的数量,远小于最后一步(即 )中 所增加的噪点数。这也就是说,增加的在每一步中都服从一个不同的。但是我们也可以很明显地感知到,每一步独立的加噪幅度,都大致收敛至一个定值(这是一个经验值,不同的模型可能取值完全不同)
我们设置一个与步数相关的函数 , 是一个标准正态变量, ,那么 ; 由于随着步数的增加,逐渐变大,而,那么也就意味着 越来越大。 与之相反的是,由于数据集 的数据总量是恒定的,所以 的上一步 所占数量是逐渐减少的: 设, 那么 在 所占的数量就是 , 越来越小
到了这一步,我们只需要搞清楚 和 是什么,就可以写出一个完整的正向过程通用表达式了
显然, 与 存在着某种关系,在Diffusion Model 相关的论文中,取:
由此我们得出 和 的关系,那么知道这两者关系后,我们就可以挨个求出 , , ··· , 如:
正如之前在正态分布一文中提到的,Diffusion Model的前向过程,是完美符合热力学第二定律的:一滴墨水滴入一杯清水中,会逐渐扩散开;可能一开始墨汁和水还有明显的界限,但是随着时间(步数)的增加,两种液体最终会混在一起。
随着步数的增加,我们已知的,最终会变成,如果这个过程如果满足熵增定律的话,我们完全可以通过数学的方法,省略掉中间 的过程
将 (1 - 2) 代入至 (1 - 1), 得:
其中 是一个重采样的操作
化简得:
上述步骤中得出了 与 的关系;
重复步骤,最终可得:
得出 与 的关系,其中 是初始数据集,则任意时刻 可求
逆向去噪过程(Reverse Denoise Process)
在前向过程中,通过向原始数据集中持续添加噪音,最终得到无意义的数据集;而与之相反的则是,对无意义数据集进行一连串的去噪过程,直到得到拟合的原始数据集,这就是 Diffusion Model 中的逆向去噪过程。
> 一个聪明绝顶的做法?
前向过程中,我们已知:那么:
你看,用任意时刻不是把原始数据求出来了吗?
> 一个误区
使用式子 (2-1) 的确能得到一个值,但这个值却不能作为一个可用的输出值。以下解释是我从热力学中受到的启发,不一定正确,仅供参考:前面的文章已经提到,墨水滴入水中后,逐渐溶解扩散的过程,是一个熵增的过程,这个过程符合热力学的描述:(单一系统中)能量总是由高流动至低,秩序总由整齐到凌乱。如果需要逆熵,则需要向系统中输入能量。所以由一个有秩序有意义的数据集,到一个无秩序无意义的,其过程是一个不消耗能量的自发过程。而其的推导过程也是符合逻辑有意义的,先由 找出与 之间的关系,再由 找出与 之间的关系,以此类推… 直到最终得出 与 之间的关系。
在式(2-1)中,等式左侧却并不能简单的看作有意义上的最终结果,而应该看作是对于时刻时,对于的预判,这个预判随着每一次的迭代而更新。这种理念和后验概率的理念很相似:每次迭代后产生的新数据集,又进一步影响原始原因的判断。当步差(delta of and )足够小时,式(2-1)中的 对于 和 有着近似的正确性,但对于超过这个范围的数据集,如:, 等,不具有近似的正确性。这也是为什么不能由一个无意义的(或 ),直接数学推导出有意义的,因为它们之间的步差(delta)过大,近似的前提不成立。
正如前向过程中,我们先研究了和之间的关系。在后向过程中,我们也先从 和 的关系开始入手:
前面已经说过, 和 之间差一个正态变量 ,这个 服从于一个标准正态分布;我们将噪音 上的点,落在 形成 ,看作一个概率事件,记做 ;通过所有路径生成的 的全路径记做 ;通过所有路径生成的 的全路径记做 ;那么:
1)通过 到达 后,最终到达 的路径,它的概率是:
2)根据贝叶斯公式,可逆推导出由 推导到达 后(此时 已是既定发生的事实 ),由 作为上级原因,所引发此事件的概率为:
根据正变量的运算,可得:
1)
2)
3)
已知正态分布的概率密度函数为:
那么,
又因为:
所以:
由于 是一个已知的经验值,故标准差(或方差) 是一个常数。
观察,可知 是一个与 和 相关的变量,即:
所以,
* 逆向过程中,由于 未知,这时 才是一个已知数。而且由于这里求的是 到 的过程,其步数(Delta)足够小,因此近似的前提成立。故而直接使用式子(2-1)迭代能得出相似结果。
模型训练和损失
通过逆向过程,我们找到了均值 和 正态变量 的关系,可以说,求出 就能使一组无意义的数据 恢复为有意义的原始数据组 。
但是,正如我们反复提及的熵增定律,一个逐渐倾向于混乱的系统,是不会自发还原到原来的秩序的。这也就是我们无法通过计算来精确的还原原始数据。但好在我们有计算机,来帮助我们完成近似的工作。
首先,在前向过程中,计算机会拿到每一步的 ,随后的逆向过程中,它会预测到每一步 ,并将其二者相减去:
当 处于一个合理(可用)的范围时,这个模型就训练成功了。
在 Diffusion Model 真正投入使用时,我们只会用到它的逆向过程。