# AI：diffusion model的运行原理@

By [erthor pabar](https://paragraph.com/@erthor-pabar) · 2023-03-07

---

### 0diffusion是干嘛的

想象一下图片是怎么从人的脑子中呈现出来的，一般的想象是大脑先生成一股模糊的印象，然后这种模糊的印象逐渐变得清晰，从而让人有了具体的细节记忆。

diffusion模型的灵感也是如此。先看一些模糊的图，就像是对焦没对准一样。然后通过运算想象出清晰的样子。最极端的例子，甚至是通过一堆马赛克，电视雪花图片，去计算出想象中清晰的样子。这样，图片就被生成出来了。

但要做到这些并不简单，因为所有的数据，都需要通过数学公式的加工。要知道，这种所谓的逆运算是存在信息损失的，你总是没有办法完美的用数学公式弥补本就缺失的信息，这就需要ai来猜测丢失了多少信息，并把这些信息补充上。

在整个过程中我们只需要保证两点。**1让模型能够从雪花图生成图像。2用人类语言约束模型生成的方向。**

### 1diffusion软件生产图片工作流程

![](https://storage.googleapis.com/papyrus_images/3c86e0e986321436e00994cd09c8abef993d146930c6e95812cf66ad5a39f120.jpg)

1encoder：首先人输入文本信息，电脑把文本信息转换成机器容易处理的向量信息。 2diffusion：第二步，计算机得到向量信息，并且用ai模型弥补缺少的信息。这是一个熵减的过程。在计算完毕后输出一个向量信息。 3decoder：第三步，计算机再把向量信息翻译成人能看懂的图片信息。

### 2让模型能够从雪花图生成可识别图像

![](https://storage.googleapis.com/papyrus_images/629902105d9f3f3fbf19a2410fa7a5ab3b9f7e02925138a5df28a69e0b8d3cba.jpg)

在forward diffusion过程中，就好比人忘记的过程。原本清晰的图片，被一次次加噪点，重复这个步骤，直到图片变为雪花图片。在这个过程中，原本有确定分布规律的清晰图片，最终变成没有分布规律的电视雪花图片。

我们需要记录这个步骤，用来参照如何把模糊图片，还原成清晰图片的答案。用这个来训练ai模型的参数。

在reverse diffusion过程中，就好比人看到了一个没对好焦的模糊图片，但这时候你需要用计算机去计算出清晰的图片。如何计算呢？这就需要反着推导。

我们需要信息： 1t：这个照片经过了多少次迭代。 2每次加了多少噪点数量。（每一次加的噪点数量是不同的，因为模糊图片如果只加一开始的计量，就跟上一步区分程度不大） 3每次加噪点的位置。

对于t我们可以手动指定反向减少噪点的次数。

对于每次加了多少噪点，我们利用正向扩散的forward diffusion时候的数据，用UNet模型来预估出每一次需要减少的噪点数量。（之所以用ai去预测，是因为没有数学公式能够反推，本质上是在加噪音的过程中信息丢失了） forward diffusion过程正是为了训练出UNet模型。

对于每次加噪点的位置，这就是diffusion模型本身所需要学习的参数了。 reverse diffusion过程则是为了训练diffusion模型。

等待模型训练好。我们就可以根据一个模糊图片，去生成一个清晰图片了。

### 3约束ai生成图像的方向

![](https://storage.googleapis.com/papyrus_images/0a44d188ebfffffa32a1616f4adcb837f295e4eec51e9c2647b0092edb2f7f7d.jpg)

还有最后一个问题，我们需要让人的语言，能够影响ai的作图方向。如何实现这个过程呢？我们需要让人的语言生成一张模糊的图片，ai再让这张模糊的图片生成清晰图片。

如何让人的自然语言生成一张模糊图片呢？

如图。首先就是准备答案。让图片通过encoder的方式生成图片编码。这方面计算机运算。这个过程是等价的，不会造成信息损失，只不过是存储的形式不一样。

第二步，训练一个nlp处理模型，处理人的自然语言，让人的自然语言生成的编码，尽量和图片编码一样。这样就可以把人的语言尽可能转换成图片的编码了。

### 4总结

![](https://storage.googleapis.com/papyrus_images/04942f4ead56874011fcc10608fd5ef6527435ce3af89b179bd589d2d53d07d7.jpg)

我们再来看一次总流程。 1我们输入的文本数据被转换成文本embeddings编码数据。  
2把噪点图，和随机图叠加，加上迭代步数作为输入，模型计算出如何减少噪点。输出生成图embeddings数据。 3再把embeddings数据解码成正常图片，就可以观看了。

---

*Originally published on [erthor pabar](https://paragraph.com/@erthor-pabar/ai-diffusion-model)*
