这门课程主要介绍Midjourney背后的扩散模型(Diffusion)的原理,还是全英文的,以下是我的学习笔记:
Intuition
先解释扩散模型的目标:通过一些特定类型的图片获得更多相关的图片
我们如何让神经网络学习一个东西是什么:
- fine detail:细节
- outline:轮廓
- everything in between:所有中间的那些无法用语言描述的东西
说到扩散模型就不得不提到noise(噪声),也就是上图的一个个小点(类似拍照的时候ISO值调高出现的噪点)
神经网络通过学习很多张带有噪点的图片,获得将他们变成没有噪点的图片(也就是学会了如何去除图片中的噪点)
所以当你需要一张新的图片时候,神经网络是如何工作的? 包括两个过程:前向过程(forward process)和反向过程(reverse process),其中前向过程又称为扩散过程(diffusion process),。无论是前向过程还是反向过程都是一个参数化的马尔可夫链(Markov chain),其中反向过程可以用来生成图片。
Sampling
这节课通过代码实现如何给一张全是噪点的图片去噪,也就是上文中的反向过程
其实这个过程不只是去噪,还可以加上一些噪点以获得你想要的图像。
可以比较一下加噪点和不加噪点的最后出来的图像效果:
不过这个过程需要多次尝试以获得最好的加噪算法,不然就会得到更差的质量。
老师课上就翻车了。翻车现场:
Neural Network
Unet模型可以以嵌入的形式接收更多的信息:
- 时间嵌入:与时间步长和噪声水平有关
- 上下文嵌入:与控制生成相关,比如文本描述或其他
training
这节课主要通过代码展示训练模型的一个个阶段。
Controlling
我们是如何通过文字控制图像生成的?
这就不得不提到embedding。
什么是embedding?
“Embedding”直译是嵌入式、嵌入层。
可以将它理解成一种万能表达方式,能够将所有我们在现实世界里的文字、图片、语言、视频转化为计算机能识别、能使用的语言,且转化的过程中信息不丢失。
一般的表现形式就是向量
通过将文字embedding输入到diffusion模型从而影响图像的生成。
Speeding UP
这节课介绍了一种更快的扩散模型:DDIM
更加快速的原理是:DDIM可以实现跳步的算法
我学习后的感受
其实我对扩散模型也不是非常熟悉,所以这次的学习收获还是很大的。可能有人会说我又不开发模型,学这些有什么用?确实,我在学习过程中,虽然有代码编辑器但是我也不想用,只是理解了整个的过程,因为我也不开发。了解这项技术就是很开心的事情,为什么要纠结有什么用呢?当然对于未来可能从事优化开发模型的同学就要好好理解代码了。
再次感谢吴恩达老师的无私分享和贡献。