【Diffusion】基于分数的生成模型
基于分数的生成模型
(Score-based generative models)
原文链接:
https://www.zhangzhenhu.com/aigc/Score-Based_Generative_Models.html
通过前面的学习,我们发现扩散模型可以从不同的角度进行解释。 其中一个等价的解释是基于分数的生成模型,前面章节虽然简单介绍了下, 但没有详细说明,本章我们详细讨论下基于分数的生成模型。 基于分数的生成模型是由宋旸等人在2019年提出 [1] 的, 后来他们又提出了基于随机微分方程的更一般的形式 [2], 本章我们一起讨论学习一下。
Scored-based的生成模型
在前面 DDPM 和 DDIM 的章节中,已经探讨了 DDPM 的降噪过程,可以看做是沿着分数(梯度)∇logp(xt)∇logp(x_t)∇logp(xt)前进。然而宋旸等人提出基于分数(Score-based)的论文 相关工作并不是建立在 DDPM 的基础上,所以论文里不是从DDPM的马尔科夫链式结构讨论和导出的,而是直接从分数匹配估计算法推导。
首先看下基于分数的生成模型的核心思 ...
【DDIM】详解
导论
在 DDPMDDPMDDPM 中,生成过程被定义为马尔可夫扩散过程的反向过程,在逆向采样过程的每一步,模型预测噪声
DDIMDDIMDDIM 的作者发现,扩散过程并不是必须遵循马尔科夫链,在之后的基于分数的扩散模型以及基于随机微分等式的理论都有相同的结论。
基于此,DDIMDDIMDDIM 的作者重新定义了扩散过程和去噪过程,并提出了一种新的采样技巧,可以大幅减少采样的步骤,极大的提高了图像生成的效率,代价是牺牲了一定的多样性,图像质量略微下降,但在可接受的范围内。
DDPM的回顾
首先回顾一下 DDPM 模型的机制,在 DDPM 中,真实世界的图像数据用随机变量 x0x_0x0 表示,它的概率密度记作 q(x0)q(x_0)q(x0),然而它的真实分布未知的,即 q(x0)q(x_0)q(x0) 具体形式是未知的,所以我们没办法直接从 q(x0)q(x_0)q(x0) 采样生成新的图片。
幸运的是,我们有很多 x0x_0x0 的观测样本,因此我们可以想办法利用这些观测样本估计出 q(x0)q(x_0)q(x0) 的一个近似表示【近似表示称为 p(x0)p(x_0) ...
【Cross-Attention】可视化
Cross-Attention Control
原链接
https://prompt-to-prompt.github.io/
自注意力机制
是一种用于序列数据(如文本、音频、视频)处理的机制,它允许模型在处理序列时将不同位置的信息相互关联起来。在自注意力机制中,每个输入位置的表示(例如词或时间步的嵌入)都将用于计算该位置与序列中其他所有位置的加权关联,这种加权关联受输入表示之间的相似性程度和它们之间的距离的影响。
自注意力机制的数学表达如下:
给定输入序列 X=[x1,x2,...,xn]X = [x_1, x_2, ..., x_n]X=[x1,x2,...,xn]
其中每个xix_ixi是输入序列中的元素,通过自注意力计算得到输出序列 Y=[y1,y2,...,yn]Y = [y_1, y_2, ..., y_n]Y=[y1,y2,...,yn] :
yi=∑j=1nαij⋅(WQxj)y_i = \sum_{j=1}^{n} \alpha_{ij} \cdot (W^Q x_j)yi=∑j=1nαij⋅(WQxj)
其中
$ \alpha_{ij} $ ...
【Diffusion】为什么用Classifier-free-guidance
参考原文
https://www.zhangzhenhu.com/aigc/Guidance.html
https://sander.ai/2022/05/26/guidance.html
https://sander.ai/2023/08/28/geometry.html
https://forums.fast.ai/t/why-do-we-need-the-unconditioned-embedding/101134?replies_to_post_number=3
Guidance: a cheat code for diffusion models
"Classifier-free guidance"显著改善了"conditional diffusion models"生成的图像(几乎没有额外成本)。它实施简单且极其有效。它也是OpenAI的DALL·E 2和Google的Imagen的关键组成部分,为它们的惊人图像生成结果提供动力。在这篇博文中,我将分享我的观点,并尝试解释它的工作原理。
引言
无论是 DDPM 还是 DDIM,这些扩散 ...
【Ubuntu】未自动挂载问题
Ubuntu自动设置挂载
记录一次Ubuntu未自动挂载问题
查看分区挂载情况
使用lsblk命令查看各分区挂载情况,选择ubuntu根分区。
得到以下内容,注意到sda2未被挂载
1234567loop0 7:0 0 4K 1 loop /snap/bare/5loop1 7:1 0 55.7M 1 loop /snap/core18/2812loop2 7:2 0 63.5M 1 loop /snap/core20/2015sda 8:0 0 3.6T 0 disk ├─sda1 8:1 0 16M 0 part ├─sda2 8:2 0 1.7T 0 part └─sda3 8:3 0 1.9T 0 part /media/xxx/Software
获取分区的 UUID
使用 blkid 命令:
blkid 命令会列出所有可用驱动器的信息,包括 UUID。
运行以下命令:1sud ...
网易云音乐导出到spotify
使用方法
用 Chrome 打开歌单的 web 页面(可以通过分享拿到链接,链接类似这样:http://music.163.com/playlist?id=xxx&userid=yyy)
然后右键“检查”(如果有左上角有 device 选项,需要选择 Laptop 开头的,可以在 Edit/编辑 里添加)
在 console 里输入下面脚本,即可输出 “歌曲名 - 歌手名” 格式的内容:
通过https://www.spotlistr.com/ 或 https://www.tunemymusic.com/ 导出到 Apple Music 或者 Spotify 等音乐平台
1234567891011121314151617181920212223(function () { let iframeDocument = document.getElementById("g_iframe").contentDocument; let tempElement = iframeDocument.createElement(& ...
【SVM】c++实现
SVM使用c++实现
下面是使用c++实现一个简单的支持向量机(SVM)分类器,并提供了从文件中读取数据、训练模型和对测试数据进行预测的功能。
SVM 实现是基于线性核函数的,并采用了简化的序列最小优化(SMO)算法进行训练
SVM推导
SVM 旨在找到一个超平面,使得正负样本间的间隔最大化。
对于线性可分的数据集,SVM 的目标函数和约束条件可以写为:
目标函数(最小化):
12∥w∥2\frac{1}{2} \| \mathbf{w} \|^2
21∥w∥2
其中 www 是超平面的法向量。
约束条件:
yi(w⋅xi+b)≥1, ∀iy_i (\mathbf{w} \cdot \mathbf{x}_i + b) \geq 1, \; \forall i
yi(w⋅xi+b)≥1,∀i
其中 yiy_iyi是第i个样本的类标签,xix_ixi是第i个样本的特征向量,bbb是偏置项。
通过拉格朗日乘子法引入拉格朗日乘子 αi≥0\alpha_i \geq 0αi≥0,得到拉格朗日函数:
L(w,b,α)=12∥w∥2−∑i=1mαi[ ...
【BP】c++实现
BP网络c++实现
单隐藏层流程
下面实现一个单隐藏层的简单BP算法,其中输入层、隐藏层、输出层节点个数可以自定义,而前向传播和后向传播是主要过程,下面是按上图进行的公式推导
1. 前向传播
1.1 输入层向隐藏层传播
q=∑ixiwij−βjhj(q)=σ(∑ixiwij−βj)q=\sum_i x_i w_{ij} - \beta_j\\
h_j(q)=\sigma( \sum_i x_i w_{ij} - \beta_j )
q=i∑xiwij−βjhj(q)=σ(i∑xiwij−βj)
其中hjh_jhj为第jjj个隐藏层节点的值,xix_ixi为第iii个输入层节点的值,wijw_{ij}wij为第iii个输入层节点到第jjj个隐藏层节点的权重,βj\beta_jβj为第jjj个隐藏层节点偏置值,σ(x)\sigma(x)σ(x)为Sigmoid激活函数,其公式如下
σ(x)=11+e−x\sigma(x) = \frac{1}{1+e^{-x}}
σ(x)=1+e−x1
代码
12345678910111213//计算h_j(q)int ...
Linear transformations
https://www.youtube.com/watch?v=XkY2DOUCWMU
线程变换
设线性变换T的矩阵A为
A=[3112]A=
\begin{bmatrix}
3 & 1 \\
1 & 2
\end{bmatrix}
A=[3112]
另一个向量v为
v=[−12]v=
\begin{bmatrix}
-1\\
2
\end{bmatrix}
v=[−12]
对于 res=Avres=Avres=Av 的计算,可以理解成下面的动态图
即,对A分量1A_{分量1}A分量1进行了−1-1−1的缩放,A分量2A_{分量2}A分量2进行了222的缩放,再将两个缩放的结果相加,得到最终向量resresres. 这样的计算是通过几何意义进行计算
res=[31]∗−1+[12]∗2=[−13]res=
\begin{bmatrix}
3 \\
1
\end{bmatrix}
*
-1
+
\begin{bmatrix}
1 \\
2
\end{bmatrix}
*
2
=
\begin{bmatrix}
-1 \\
3
\end{bmatr ...
stable-signature
Stable Signature运行流程
先安装原始的stable diffusion,目前stable diffusion有两个版本(v1,v2),建议用v2(v1实际跑越来的问题太多了);
除了原始的sd,目前还有stable diffusion webui版本,这个版本拥有了UI,而且一键安装不需要自己配置环境,上手即用,但缺点是,目前无法对webui中的txt2img.py文件进行修改,即:无法将stable signature嵌入进去。
stable signature是基于stable diffusion基础上的,所以,要先运行好stable diffusion
下面是stable diffusion【v2】安装流程
stable diffusion【v2】项目:https://github.com/Stability-AI/stablediffusion
注意:作者是Stability-AI
下载stable diffusion项目
打开项目的目录,里面有environment.yaml文件,可以打开environment.yaml文件,对name进行修改(默认 ...