今年较火的扩散模型Diffusion Model

news2024/11/26 9:38:47
🚀 作者 :“码上有钱”
🚀 文章简介 :AI-扩散算法
🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬

项目

扩散模型加噪去噪过程

原理

高斯噪声

在深度学习中,高斯噪声通常指的是一种服从高斯分布(正态分布)的随机噪声。它可以用来模拟真实世界数据中的噪声,并用于数据增强、数据生成和对抗训练等任务中。

在深度学习中,高斯噪声通常被添加到输入数据中,以模拟真实世界中存在的噪声。例如,在图像分类任务中,为了增强模型的鲁棒性,可以给输入图片添加高斯噪声,并通过训练使网络能够去除这些噪声而正确分类图像。又比如,在生成对抗网络(GAN)中,生成器网络在生成图片时,也会利用高斯噪声来增加图片的多样性和真实感。

高斯噪声的形式可以表示如下:

X = σ ∗ N ( 0 , 1 ) + μ X = \sigma * N(0, 1) + \mu X=σN(0,1)+μ

其中, N ( 0 , 1 ) N(0, 1) N(0,1) 表示均值为0,方差为1的标准正态分布。 σ \sigma σ控制噪声的幅度, μ \mu μ表示噪声的均值。

在深度学习中,我们可以将高斯噪声加到输入数据上,也可以将其加到网络参数上。具体来说,当将高斯噪声添加到输入数据时,我们可以将噪声视为一种正则化机制,它有助于减小模型对输入的过拟合。而当将高斯噪声添加到网络参数时,我们可以将噪声视为随机搜索的一种策略,帮助模型在训练过程中跳出局部极小值。

具体应用中,我们常使用均值为0、标准差为1的标准正态分布生成随机数作为噪声
ϵ ∼ N ( 0 , 1 ) \epsilon \sim N(0, 1) ϵN(0,1)

然后通过一个线性变换使得其满足我们要求的分布形状。这样生成的高斯噪声可以用来增强输入数据或者是网络参数。
高斯噪声

扩散现象

在数学和物理学中,扩散是指粒子从一个区域向其它区域的传递。这个过程可以描述为一个颗粒从初始位置开始随机移动,直到某个时刻停止。在此过程中,粒子以很高速度在一个方向上移动并与其他粒子发生碰撞,最终达到平衡状态。

在自然界中,扩散是一种非常普遍的现象,比如风经过树叶的摩擦会造成树叶的运动,污染物在空气中的传播也可以用扩散模型来解释。

在化学反应中,扩散是指物质由浓度较高的地方向浓度较低的地方传输。扩散是许多重要现象的基础,例如气体的扩散、电解质溶液的扩散等。
扩散现象

贝叶斯公式

贝叶斯公式
贝叶斯公式是应用在概率论和统计学中的。在机器学习中,我们经常使用贝叶斯公式来计算后验概率。

设有两个事件A和B,其中B不为0,则有
P ( A ∣ B ) = P ( B ∣ A ) ⋅ P ( A ) P ( B ) P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)} P(AB)=P(B)P(BA)P(A)

其中, P ( A ∣ B ) P(A|B) P(AB)表示给定事件B发生的情况下,事件A发生的概率,称为后验概率。 P ( B ∣ A ) P(B|A) P(BA)表示给定事件A发生的情况下,事件B发生的概率,称为似然度。 P ( A ) P(A) P(A) P ( B ) P(B) P(B)分别是事件A和B的边缘概率分布。

对于分类问题,我们假设输入样本 x x x属于类别 C k C_{k} Ck的概率与日期 t t t无关;即 P ( y ∣ x , t ) = P ( y ∣ x ) P(y|x,t)=P(y|x) P(yx,t)=P(yx) y ∈ { 1 , 2..... K } y\in\{1,2.....K\} y{1,2.....K} t ∈ T t\in T tT,其中 T T T是时间序列。

根据贝叶斯公式,后验概率可以表述如下:
\begin{equation}\label{eq:bayes}
P(y|x)=\frac{P(x|y)P(y)}{P(x)}
\end{equation}

假设存在一个集合 T T T,包含了一些期望的某一特性或性质。具体说来,对于每一个观察到的点 x t x_t xt,我们希望计算概率 P ( x t ∣ H ) P(x_t|H) P(xtH),这里 H H H为假设。显然,在有限数据集的情况下,我们不能够取遍所有可能的 H H H,但是可以通过给定一些先验概率及常识假设来选择一个最可能的 H H H。接下来,我们通常通过最大化后验概率获得参数 θ MAP ( k ) \theta_{\text{MAP}}^{(k)} θMAP(k)的推断。

θ MAP ( k ) = arg max ⁡ θ k ( P ( θ k ∣ D 1 , . . . , D n ) = P ( D 1 , . . . , D n ∣ θ k ) P ( θ k ) P ( D 1 , . . . , D n ) ) \theta_{\text{MAP}}^{(k)} = \argmax_{\theta_k}\left(P(\theta_k|D_1,..., D_n)=\frac{P(D_1, ..., D_n|\theta_k)P(\theta_k)}{P(D_1, ..., D_n)}\right) θMAP(k)=θkargmax(P(θkD1,...,Dn)=P(D1,...,Dn)P(D1,...,Dnθk)P(θk))

最大似然法与期望极大算法

在实际应用中,最小化损失函数的过程往往比较复杂,缺乏闭式解。一个替代方案是使用贝叶斯公式定义的误差函数。它被称为对数损失函数(log loss function),或交叉熵损失函数(cross-entropy loss function)。对于二分类问题,可以使用如下形式来定义:
L ( y , f ( x ) ) = − ( y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) ) L(y, f(\mathbf{x})) = -(y\log{\hat{y}} + (1 - y)\log{(1 - \hat{y})}) L(y,f(x))=(ylogy^+(1y)log(1y^))
其中 y y y为样本的真实类别, y ^ \hat{y} y^为模型预测的类别。对于多分类问题,可以应用softmax函数,将其转化为一系列二分类问题:
L ( y , f ( x ) ) = − ∑ c ∈ C y c log ⁡ y ^ c L(y, f(\mathbf{x})) = -\sum_{c \in C} y_c \log{\hat{y}_c} L(y,f(x))=cCyclogy^c
其中 C C C表示所有可能的类别。

在求解最优参数时,我们通常不会直接使用这些损失函数,而是使用它们的平均值或者总和。例如,给定训练样本 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) ( x 2 , y 2 ) (x_2, y_2) (x2,y2)、…、 ( x n , y n ) (x_n, y_n) (xn,yn),我们要试图最小化下式:

1 n ∑ i = 1 n L ( y i , f ( x i ) ) \frac{1}{n}\sum_{i=1}^n L(y_i, f(x_i)) n1i=1nL(yi,f(xi))

其中 L ( y i , f ( x i ) ) L(y_i, f(x_i)) L(yi,f(xi))是针对每个样本点的“损失(loss)”函数, n n n是样本数

神经网络中的梯度下降

当模型不断调整时,损失函数也在变化,我们需要找到一个方法来计算目标函数的导数,以便能够确定是否达到了最佳状态或者最低点。Stanford大学的教授Andrew Ng曾经描述过使用梯度下降算法寻找函数最小值的方法:

  • 随机初始化参数 W 1 , b 1 , W 2 , b 2 W_1,b_1,W_2,b_2 W1,b1,W2,b2
  • 不断重复以下操作,直至满足停止条件:
    • 计算损失函数关于参数的梯度。
    • 更新参数 W 1 , b 1 , W 2 , b 2 W_1,b_1,W_2,b_2 W1,b1,W2,b2

这一方法被称为“随机梯度下降(Stochastic Gradient Descent)”。在每次安装数据计算梯度时,我们从训练集中随机选择一个样本,并基于此样本来进行梯度更新。这种方法之所以起作用是因为它使用了足够大的训练集,足够小的学习率和足够的迭代次数,使得最终的模型达到收敛。

对于正则化,对于L2范数惩罚而言,有可微的简化公式:
∂ ∂ w ( 1 / 2 ∥ w ∥ 2 2 ) = w \frac{\partial}{\partial w}(1/2\parallel w \parallel_{2}^{2}) = w w(1/2w22)=w

对于L1范数惩罚而言,则有:
∂ ∂ w ( ∥ w ∥ 1 ) = s g n ( w ) \frac{\partial}{\partial w}(\parallel w \parallel_{1}) = sgn(w) w(w1)=sgn(w)

对于整个目标函数,最后的形式是:
J ( θ ) = ∑ i = 1 m ( y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ) + λ 2 ∑ j = 1 n w j 2 J(\theta)=\sum_{i=1}^{m}( y^{(i)}log(h_{\theta}(x^{(i)})) + (1 - y^{(i)})log(1 - h_{\theta}(x^{(i)}))) + \frac{\lambda}{2}\sum_{j=1}^{n}w_j^2 J(θ)=i=1m(y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i))))+2λj=1nwj2

逻辑回归损失函数的导数

根据逻辑回归函数的定义:
h θ ( x ( i ) ) = g ( θ T x ( i ) ) g ( z ) = 1 1 + e − z \begin{aligned} h_{\theta}(x^{(i)}) &= g(\theta^T x^{(i)}) \\ g(z)& = \frac{1}{1+e^{-z}} \end{aligned} hθ(x(i))g(z)=g(θTx(i))=1+ez1

我们接下来计算 δ \delta δ 代表误差值:
δ = − ∂ ∂ z ∑ i = 1 m ( y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ) \delta = -\frac{\partial}{\partial z} \sum_{i=1}^{m}( y^{(i)}log(h_{\theta}(x^{(i)})) + (1 - y^{(i)})log(1 - h_{\theta}(x^{(i)}))) δ=zi=1m(y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i))))

δ \delta δ 做一些变换就可以得到:
δ = − ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) = ( y ^ − Y ) \delta = -\sum_{i=1}^{m}(y^{(i)} - h_{\theta}(x^{(i)})) = (\hat{y} - Y) δ=i=1m(y(i)hθ(x(i)))=(y^Y)

即误差项为: y ^ − Y \hat{y} - Y y^Y

对于上述公式,我们可以发现 P ( Y = y ∣ X ) P(Y=y|X) P(Y=yX) 可以解出:
P ( Y = y i ∣ X ) = exp ⁡ ( W ⋅ x ) ∑ j = 1 k exp ⁡ ( W j ⋅ x ) P(Y = y_i | X) = \frac{\exp^{(W \cdot x)}}{\sum_{j=1}^{k}\exp^{(W_j \cdot x)}} P(Y=yiX)=j=1kexp(Wjx)exp(Wx)

用代码实现如下:

class LogisticRegression:

    def __init__(self, learning_rate=0.1, iterations=100):
        self.learning_rate = learning_rate #learning rate
        self.iterations = iterations #num of iterations in GD
    
    def fit(self, X, y):
        self.X_train = X
        self.y_train = y
        self.n_samples, self.n_features = X.shape
        self.W = np.zeros(self.n_features + 1)   #Add 1 to the shape for bias term
        self.costs = []
        X = np.column_stack((np.ones((self.n_samples,1)), X))
        m = self.n_samples

        for i in range(self.iterations):
            h = self.sigmoid(np.dot(X, self.W)) 
            self.grad =(1 / m) * X.T @ (h - y)
            self.W -= self.learning_rate * self.grad
            if i % 100 == 0:
                cost = self.cost_function(X, y)
                self.costs.append(cost)
                print(f"Cost at iteration {i}", cost)

    def sigmoid(self, z):
        return 1 / (1 + np.exp(-z))

    def cost_function(self, X, y):
        h = self.sigmoid(np.dot(X, self.W))
        epsilon = 1e-5
        errors = y*np.log(h+epsilon) + (1-y)*np.log(1-h+epsilon)
        J = - np.sum(errors)
        return J

    def predict_proba(self, X):
        X = np.column_stack((np.ones((X.shape[0],1)), X))
        return self.sigmoid(np.dot(X,self.W))

    def predict(self, X, threshold=0.5):
        X = np.column_stack((np.ones((X.shape[0],1)), X))
        return self.predict_proba(X) >= threshold
 
    def score

过程

扩散模型过程

前向加噪

图像有三个通道的RGB颜色组成,同时我们生成一个服从正太分布的高斯噪声,通过归一化将其放缩到[-1, 1]上,通过下面这个公式进行计算加噪后的新图像,这里面的β表示扩散快慢的程度,越大表示扩散越快。
在这里插入图片描述
通过逐步加噪最终将图像变得完全模糊,在不断的迭代下逐渐模糊,但是发现一个问题,只能获得下一时刻加噪的图像。
在这里插入图片描述
因此我们将1式代入2式再代入3式
在这里插入图片描述
令β = 1-α 可以得到一个t-2到t时刻的通式
在这里插入图片描述
我们计算出上述标红所服从的概率,再通过重参数化技巧将其转化
在这里插入图片描述
通过数学归纳法,就可以算出0时刻到任意t时刻的通式了
在这里插入图片描述
化简,令根号下多个α连乘为α拔,得到下面式子
在这里插入图片描述

逆向去噪

逆向去噪是已知T时刻图像而求前一图像的过程,因此我们使用贝叶斯公式
在这里插入图片描述
同样我们计算出右式中每个概率服从的概率密度,然后写出写出他们的概率密度函数代入到式中
在这里插入图片描述
代入右式
在这里插入图片描述
通过概率密度函数我们化简得到这个概率服从的概率密度
在这里插入图片描述
发现其中我们已知t时刻时求前一时刻的概率出现了0时刻的图像,但是我们又不知道0时刻的,陷入了死循环,这时我们将加噪过程中t时刻与0时刻的通式关系代入,化简,得到已知t时刻得到前一时刻图像服从的概率
在这里插入图片描述
经过神经网络得到噪声的概率分布,经过随机采样得到t-1时刻的图像,经过不断迭代最终得到0时刻的图像,这就是整个过程,我们可以看到最后的α拔几乎为0,那么就得到t时刻的图像就为噪声了,服从标准正太分布。
在这里插入图片描述

作用

DDPM(Diffusion Probabilistic Model)概率扩散模型的优点和作用主要包括以下几个方面:

  1. 模型简单:相对于其他复杂的深度学习模型,DDPM模型非常简单,只需要实现一个局部噪声条件分布即可。
  2. 高效:DDPM模型使用了可逆卷积层空间金字塔池化等技术来提高计算效率,并且通过引入低秩分解技术来降低参数量。
  3. 灵活性:DDPM模型可以应用于多种不同领域的任务,如图像去噪、超分辨率、图像插值等。
  4. 生成图片质量高:DDPM模型能够生成高质量的图片,并且可以对生成的图片进行插值、缩放等操作。
  5. 建模便捷:DDPM模型的训练过程相对简单,只需要最小化重建误差即可。此外,模型具有较好的泛化性能,可以在小样本情况下有效地工作。
  6. 特征重要性分析:通过DDPM模型,可以对输入图像的特征进行分析,例如,可以检测图像中的不同对象,并确定每个对象的权重。

总之,DDPM概率扩散模型具有模型简单、高效、灵活性、生成图片质量高等优点,可以广泛应用于各种图像处理任务中。

应用场景

概率扩散去噪模型的应用场景有很多,主要包括以下几个方面:

  1. 图像去噪:可以利用概率扩散去噪模型对图像进行降噪处理。例如,可以使用高斯模糊、中值滤波、双边滤波等方法来去除图像中的噪声。
  2. 音频去噪:可以利用概率扩散去噪模型对音频进行降噪处理。例如,可以使用自适应滤波、谱减法等方法来减少语音信号中的噪声干扰。
  3. 视频去噪:可以利用概率扩散去噪模型对视频进行降噪处理。例如,可以利用时空域的相关性进行视频去噪。
  4. 文本去噪:可以利用概率扩散去噪模型对文本数据进行降噪处理。例如,可以利用N-gram模型进行词性标注和语法分析。
  5. 信号增强:可以利用概率扩散去噪模型对信号进行增强处理。例如,可以使用小波变换对信号进行降噪。

总之,概率扩散去噪模型可以应用于各种类型的信号处理任务,可用于去除噪声增强信号的目的。

看到这了点个赞吧🍉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1070718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

库存管理与策略模式

库存管理是个难题,涉及到采购、销售、仓储、门店、网站订单各个环节,实物库存和系统库存很难保证完全一致,记得系统刚上线第一天,因为实物库存与导入系统的库存有差异,系统又做了限制系统库存必须大于0才允许销售普通订…

战略咨询只是一个热门词汇?NO!它可能是您企业成功的关键因素

战略咨询只是一个热门词汇?NO!它可能是您企业成功的关键因素。每个企业都有可能遇到困境,战略咨询可以帮助企业找到突破之道。当企业面对挑战时,战略咨询不仅能帮您打开新的视角,还能为您的企业带来创新和成长。 战略咨询是什么意思&#x…

matlab高斯消元法求解线性方程组

高斯消元法的基本原理是通过一系列行变换将线性方程组的增广矩阵转化为简化行阶梯形式,从而得到方程组的解。其核心思想是利用矩阵的行变换操作,逐步消除未知数的系数,使得方程组的求解变得更加简单。 首先,给定系数矩阵A和常数向…

插头 DP

垃圾插头DP,照着打都调了我一下午,淦!!! 学这个玩意纯粹是因为模拟赛考了一道,要不然碰都不会碰…… 我觉得插头DP的主要难度在于实现,而不是理解算法原理…… 不说废话了,进入正…

2023腾讯云服务器优惠代金券领取、查询及使用说明

腾讯云代金券领取渠道有哪些?腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券,大家也可以在腾讯云百科蹲守代金券,因为腾讯云代金券领取渠道比较分散,腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

Javascript 笔记:object

一部分object可以见:JavaScript 笔记 初识JavaScript(变量)_UQI-LIUWJ的博客-CSDN博客 1 in操作符 2 hasOwnProperty 3 获取一个object所拥有的所有property 不去原型链上找 4 定义data property

ARM day5

三盏灯流水 .text .global _start _start: 1.LDR R0,0X50000A28LDR R1,[R0]ORR R1,R1,#(0X1<<4)STR R1,[R0] 1.LDR R0,0X50000A28LDR R1,[R0]ORR R1,R1,#(0X1<<5)STR R1,[R0] 2.LDR R0,0X50006000LDR R1,[R0]BIC R1,R1,#(0X3<<20)ORR R1,R1,#(0X1<<…

如何快速制作令人惊叹的长图海报

在当今的数字时代&#xff0c;制作一张吸引人的长图海报已成为许多人的需求。无论是为了宣传活动&#xff0c;还是展示产品&#xff0c;一张设计精美的长图海报都能引起人们的注意。下面&#xff0c;我们将介绍一种简单的方法&#xff0c;使用在线海报制作工具来创建长图海报。…

IO 之 操作properties属性文件

propreties文件&#xff1a; properties文件是一种用于存储配置信息的文本文件&#xff0c;通常以“.properties”为文件扩展名。它是一种简单的键值对格式&#xff0c;用于保存应用程序的配置参数。 在properties文件中&#xff0c;每一行都包含一个键值对&#xff0c;键和值…

Legion Y9000X IRH8 2023款(82Y3)原装出厂OEM预装Windows11系统

lenovo联想电脑笔记本拯救者原厂win11系统镜像 下载链接&#xff1a;https://pan.baidu.com/s/15G01j7ROVqOFOETccQSKHg?pwdt1ju 系统自带所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;32G或以上的U盘 文件格式&#xff1a;ISO…

【AI视野·今日CV 计算机视觉论文速览 第261期】Thu, 5 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Thu, 5 Oct 2023 Totally 75 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Consistent-1-to-3: Consistent Image to 3D View Synthesis via Geometry-aware Diffusion Models Authors Jianglong Ye, …

Matlab参数估计与假设检验(举例解释)

参数估计分为点估计和区间估计&#xff0c;在matlab中可以调用namefit()函数来计算参数的极大似然估计值和置信区间。而数据分析中用得最多的是正态分布参数估计。 例1 从某厂生产的滚珠中抽取10个&#xff0c;测得滚珠的直径&#xff08;单位&#xff1a;mm&#xff09;为x[…

用好CompletableFuture类,性能起飞

目录 CompletableFuture引言 CompletableFuture本质 CompletableFuture与Future的关系 CompletableFuture创建 同步方法 异步方法 CompletableFuture执行结果 一元依赖 二元依赖 多元依赖 CompletableFuture异常处理 CompletableFuture实现原理 Java 8中引入了Comp…

【力扣-每日一题】2034. 股票价格波动

class StockPrice { private:unordered_map<int,int> mp; //存储日期及其对应的价格multiset<int> st; //存储所有价格int last_day; //最新一天 public:StockPrice() {this->last_day0;}void update(int timestamp, int price) {if(mp.find(timestamp)!mp…

Java——String与StringBuffer的区别

Java——String类与StringBuffer类的区别 1. ●String类表示的字符串是常量&#xff0c;一旦创建后其内容和长度是无法改变的。 ●StringBuffer表示字符容器&#xff0c;其内容和长度是可以修改的。 在操作字符串时&#xff0c;如果该字符串仅用于表示数据类型&#xff0c;则使…

[鹏城杯 2022]简单的php - 无数字字母RCE+取反【*】

[鹏城杯 2022]简单的php 一、解题流程二、思考总结 题目代码&#xff1a; <?php show_source(__FILE__);$code $_GET[code];if(strlen($code) > 80 or preg_match(/[A-Za-z0-9]|\|"||\ |,|\.|-|\||\/|\\|<|>|\$|\?|\^|&|\|/is,$code)){die( Hello);}e…

【juc】future并行执行并获取返回值

目录 一、截图示例二、代码示例2.1 接口示例2.2 调用示例 一、截图示例 二、代码示例 2.1 接口示例 package com.learning.controller;import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.…

基于Springboot实现社区维修平台管理系统演示【项目源码+论文说明】分享

基于Springboot的社区维修平台管理系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&am…

Transformer预测 | Python实现基于Transformer的股票价格预测(tensorflow)

文章目录 效果一览文章概述程序设计参考资料效果一览 文章概述 Transformer预测 | Python实现基于Transformer的股票价格预测(tensorflow) 程序设计 import numpy as np import matplotlib.pyplot

C语言 - 数组

目录 1. 一维数组的创建和初始化 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化 2.1 二维数组的创建 2.2 二维数组的初始化 2.3 二维数组的使用 2.4 二维数组在内存中的存储 3. 数组越界 4. 数组作为函数参数 4.1…