memoscan
← all memos

Memo 0xd1bdd8c5…64e5aa on Ethereum

这是一篇扩散模型的笔记,不一定正确。如果直接训练文字到图片的模型,如果训练集黑猫白猫各一半输入猫会训练出灰猫,而扩散模型为什么就能解决这个问题呢,最后输出是各一半吗?是这样的,底层的高斯噪声是随机的,所以理想情况下,结果是各一半。不过其实有很多其他的模型也能做到,如VAE、GAN,对于真正需要“一对多”的生成问题,通常都需要某种额外的随机自由度,即x不等于f(提示词),而是x=f(提示词,随机变量),随机变量(如果是多个,可以看作一条向量)的取值范围被映射到不同的结果。为什么扩散模型的构造会有这个结果呢?根据得分匹配理论,预测噪声在数学上转化为当前数据分布的对数概率梯度,称为得分score。考虑所有可能的图像(包括像素和颜色)的空间,每个点的高度对应这当前提示词下图片的概率,神经网络学习的不再是“当前提示词下这只猫长什么样”,而是“在当前这个噪声图多维坐标点上,当前提示词确定的概率空间,往哪个方向走,让图像变得更真实的概率上升得最快”。这样黑猫白猫对应着两个高概率区域,通过去噪可以落入一个区域中,大量重复下,可以学出所有的梯度方向,这也就对应了整个概率分布。因为知道所有的导数意味着知道所有点的值,不需要一个初值,如果可以归一化,理论上就可以复原整个函数。下面是具体的笔记:一开始,如果不乘系数,n步就是n倍的高斯噪声,那么新的图就服从以原图为中心 n倍方差的高斯分布,但是这样没法变成标准正态分布。ddpm的论文作者选择了乘一个参数作为系数,总而言之数学上这样就可以变成标准正态分布了,最巧妙的地方在于,即使加了根号下的参数,迭代下的第t步是可以直接根据公式的变化算出来的。去噪过程每一步就是用最小化深度神经网络的预测误差。Transformer 学的是在提示词 c 的条件下,看到处于噪声程度 t 的图像,应该怎样朝真实图像分布的方向走。损失函数不需要计算理论上精确的平均损失,也不需要算每一步的损失,直接取第t步,直接对每个时间步当作相同权重即可。