梯度下降法求解线性回归

news2024/9/20 0:11:24

文章目录

  • 线性回归
    • 损失函数
      • 平均绝对误差(MAE)
      • 均方误差(MSE)
    • 最小二乘法
      • 最小二乘法代数推导
      • 最小二乘法矩阵推导
    • 线性回归 Python 实现
    • 线性回归 scikit-learn 实现
  • 梯度下降法
    • 梯度下降法的原理
  • 梯度下降法求解线性回归

线性回归

线性回归,就是已知一系列x和y对应的点,通过求出 y = w x + b y=wx+b y=wx+b(线性,所以是一条直线)去拟合数据点,预测某一个 x 0 x_0 x0对应的 y 0 y_0 y0是多少。

x = np.array([56, 72, 69, 88, 102, 86, 76, 79, 94, 74])
y = np.array([92, 102, 86, 110, 130, 99, 96, 102, 105, 92])

请添加图片描述
那么,如何求出这条直线?如何判断这条直线对数据的拟合程度好坏?
这里需要引入损失函数。

损失函数

平均绝对误差(MAE)

平均绝对误差(MAE)就是绝对误差的平均值,它的计算公式如下:
MAE ( y , y ^ ) = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ (1) \textrm{MAE}(y, \hat{y} ) = \frac{1}{n}\sum_{i=1}^{n}{|y_{i}-\hat y_{i}|}\tag{1} MAE(y,y^)=n1i=1nyiy^i(1)
其中, y i y_{i} yi 表示真实值, y ^ i \hat y_{i} y^i 表示预测值, n n n 则表示值的个数。MAE 的值越小,说明模型拥有更好的拟合程度。

def mae_value(y_true, y_pred):
    n = len(y_true)
    mae = sum(np.abs(y_true - y_pred))/n
    return mae

均方误差(MSE)

均方误差(MSE)表示误差的平方的期望值,它的计算公式如下:
MSE ( y , y ^ ) = 1 n ∑ i = 1 n ( y i − y i ^ ) 2 (2) \textrm{MSE}(y, \hat{y} ) = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y_i})^{2}\tag{2} MSE(y,y^)=n1i=1n(yiyi^)2(2)
其中, y i y_{i} yi 表示真实值, y ^ i \hat y_{i} y^i 表示预测值, n n n 则表示值的个数。MSE 的值越小,说明预测模型拥有更好的精确度。

def mse_value(y_true, y_pred):
    n = len(y_true)
    mse = sum(np.square(y_true - y_pred))/n
    return mse

在这里,我们已经知道了如何求损失,但是如何才能让损失最小呢?

最小二乘法

最小二乘法是用于求解线性回归拟合参数 w w w 的一种常用方法。最小二乘法中的「二乘」代表上面的均方误差(MSE),即均方误差最小。

最小二乘法代数推导

均方误差函数为:
y i ^ = w x i + b f = ∑ i = 1 n ( y i − ( w x i + b ) ) 2 (3) \hat{y_i}=wx_i+b\\ f = \sum\limits_{i = 1}^n {{{(y_{i}-(wx_{i}+b))}}^2} \tag{3} yi^=wxi+bf=i=1n(yi(wxi+b))2(3)
这里要求f的最小值,故求偏导如下:
∂ f ∂ b = ∂ ∑ i = 1 n ( y i 2 − 2 y i ( w x i + b ) + ( w x i + b ) 2 ) ∂ b = ∑ i = 1 n ( − 2 y i + 2 w x i + 2 b ) = − 2 ( ∑ i = 1 n y i − n b − w ∑ i = 1 n x i ) (4a) \frac{\partial f}{\partial b}=\frac{\partial \sum_{i=1}^n(y_i^2-2y_i(wx_i+b)+(wx_i+b)^2)}{\partial b} \\=\sum_{i=1}^n(-2y_i+2wx_i+2b) \\=-2(\sum_{i=1}^{n}{y_i}-nb-w\sum_{i=1}^{n}{x_i}) \tag{4a} bf=bi=1n(yi22yi(wxi+b)+(wxi+b)2)=i=1n(2yi+2wxi+2b)=2(i=1nyinbwi=1nxi)(4a)
∂ f ∂ w = ∂ ∑ i = 1 n ( y i 2 − 2 y i ( w x i + b ) + ( w x i + b ) 2 ) ∂ w = ∑ i = 1 n ( − 2 y i x i + 2 w x i 2 + 2 x i b ) = − 2 ( ∑ i = 1 n x i y i − b ∑ i = 1 n x i − w ∑ i = 1 n x i 2 ) (4b) \frac{\partial f}{\partial w}=\frac{\partial \sum_{i=1}^n(y_i^2-2y_i(wx_i+b)+(wx_i+b)^2)}{\partial w} \\= \sum_{i=1}^n(-2y_ix_i+2wx_i^2+2x_ib) \\=-2(\sum_{i=1}^{n}{x_iy_i}-b\sum_{i=1}^{n}{x_i}-w\sum_{i=1}^{n}{x_i}^2) \tag{4b} wf=wi=1n(yi22yi(wxi+b)+(wxi+b)2)=i=1n(2yixi+2wxi2+2xib)=2(i=1nxiyibi=1nxiwi=1nxi2)(4b)
∂ f ∂ b = 0 \frac{\partial f}{\partial b}=0 bf=0 以及 ∂ f ∂ w = 0 \frac{\partial f}{\partial w}=0 wf=0,解得:
w = n ∑ x i y i − ∑ x i ∑ y i n ∑ x i 2 − ( ∑ x i ) 2 (5b) w=\frac {n\sum_{}^{}{x_iy_i}-\sum_{}^{}{x_i}\sum_{}^{}{y_i}} {n\sum_{}^{}{x_i}^2-(\sum_{}^{}{x_i})^2} \tag{5b} w=nxi2(xi)2nxiyixiyi(5b)
b = ∑ x i 2 ∑ y i − ∑ x i ∑ x i y i n ∑ x i 2 − ( ∑ x i ) 2 (5b) b=\frac {\sum_{}^{}{x_i}^2\sum_{}^{}{y_i}-\sum_{}^{}{x_i}\sum_{}^{}{x_iy_i}} {n\sum_{}^{}{x_i}^2-(\sum_{}^{}{x_i})^2} \tag{5b} b=nxi2(xi)2xi2yixixiyi(5b)
已经求出了平方损失函数最小时对应的 w w w b b b 参数值,这也就是最佳拟合直线。

def w_calculator(x, y):
    n = len(x)
    w = (n*sum(x*y) - sum(x)*sum(y))/(n*sum(x*x) - sum(x)*sum(x))
    b = (sum(x*x)*sum(y) - sum(x)*sum(x*y))/(n*sum(x*x)-sum(x)*sum(x))
    return w,b
w_calculator(x,y)
# (0.7545842753077117, 41.33509168550616)

最小二乘法矩阵推导

一元线性函数的表达式为 y ( x , w ) = w 0 + w 1 x y(x, w) = w_0 + w_1x y(x,w)=w0+w1x(原式子里的w设为 w 1 w_1 w1,b设为 w 0 w_0 w0),表达成矩阵形式为:
[ 1 , x 1 1 , x 2 ⋯ 1 , x 9 1 , x 10 ] [ w 0 w 1 ] = [ y 1 y 2 ⋯ y 9 y 10 ] ⇒ [ 1 , 56 1 , 72 ⋯ 1 , 94 1 , 74 ] [ w 0 w 1 ] = [ 92 102 ⋯ 105 92 ] \left[ \begin{array}{c}{1, x_{1}} \\ {1, x_{2}} \\ {\cdots} \\ {1, x_{9}} \\ {1, x_{10}}\end{array}\right] \left[ \begin{array}{c}{w_{0}} \\ {w_{1}}\end{array}\right] = \left[ \begin{array}{c}{y_{1}} \\ {y_{2}} \\ {\cdots} \\ {y_{9}} \\ {y_{10}}\end{array}\right] \Rightarrow \left[ \begin{array}{c}{1,56} \\ {1,72} \\ {\cdots} \\ {1,94} \\ {1,74}\end{array}\right] \left[ \begin{array}{c}{w_{0}} \\ {w_{1}}\end{array}\right]=\left[ \begin{array}{c}{92} \\ {102} \\ {\cdots} \\ {105} \\ {92}\end{array}\right] 1,x11,x21,x91,x10 [w0w1]= y1y2y9y10 1,561,721,941,74 [w0w1]= 9210210592
y ( x , w ) = X W (6) y(x, w) = XW \tag{6} y(x,w)=XW(6)
( 6 ) (6) (6) 式中, W W W [ w 0 w 1 ] \begin{bmatrix}w_{0} \\ w_{1} \end{bmatrix} [w0w1],而 X X X 则是 [ X 1 , x ] [X_1,x] [X1,x] X 1 = [ 1 1 ⋯ 1 1 , ] X_1= \begin{bmatrix}1 \\ 1 \\ \cdots \\ 1 \\ 1, \end{bmatrix} X1= 1111, , x = [ x 1 x 2 ⋯ x 9 x 10 ] x= \begin{bmatrix}x_{1} \\ x_{2} \\ \cdots \\ x_{9} \\ x_{10} \end{bmatrix} x= x1x2x9x10 )矩阵。然后,平方损失函数为:

f = ∑ i = 1 n ( y i − ( w 0 + w 1 x i ) ) 2 = ( y − X W ) T ( y − X W ) (7) f = \sum\limits_{i = 1}^n {{{(y_{i}-(w_0 + w_1x_{i}))}}}^2 =(y-XW)^T(y-XW)\tag{7} f=i=1n(yi(w0+w1xi))2=(yXW)T(yXW)(7)
f = y T y − y T ( X W ) − ( X W ) T y + ( X W ) T ( X W ) (8) f = y^{T}y - y^{T}(XW) - (XW)^{T}y + (XW)^{T}(XW) \tag{8} f=yTyyT(XW)(XW)Ty+(XW)T(XW)(8)
在该公式中 y y y X W XW XW 皆为相同形式的 ( m , 1 ) (m,1) (m,1) 矩阵,由此两者相乘属于线性关系,所以等价转换如下:
f = y T y − ( X W ) T y − ( X W ) T y + ( X W ) T ( X W ) = y T y − 2 ( X W ) T y + ( X W ) T ( X W ) (9) f = y^{T}y - (XW)^{T}y - (XW)^{T}y + (XW)^{T}(XW)\\ = y^{T}y - 2 (XW)^{T}y + (XW)^{T}(XW) \tag{9} f=yTy(XW)Ty(XW)Ty+(XW)T(XW)=yTy2(XW)Ty+(XW)T(XW)(9)
W T 的偏导数是 W , T r ( A B ) 对 A 或 B 的偏导数是 B 或 A W^T的偏导数是W,Tr(AB)对A或B的偏导数是B或A WT的偏导数是WTr(AB)AB的偏导数是BA
对矩阵求偏导得:
∂ f ∂ W = 2 X T X W − 2 X T y = 0 (10) \frac{\partial f}{\partial W}=2X^TXW-2X^Ty=0 \tag{10} Wf=2XTXW2XTy=0(10)

当矩阵 X T X X^TX XTX 满秩时, ( X T X ) − 1 X T X = E (X^TX)^{-1}X^TX=E (XTX)1XTX=E,且 E W = W EW=W EW=W。所以有 ( X T X ) − 1 X T X W = ( X T X ) − 1 X T y (X^TX)^{-1}X^TXW=(X^TX)^{-1}X^Ty (XTX)1XTXW=(XTX)1XTy,并最终得到:
W = ( X T X ) − 1 X T y (11) W=(X^TX)^{-1}X^Ty \tag{11} W=(XTX)1XTy(11)

def w_matrix(x, y):
    w = (x.T * x).I * x.T * y
    return w
x= [[1, i] for i in x]
x = np.matrix(x)
y = np.matrix(y)

w_matrix(x, y.reshape(-1, 1))
# matrix([[41.33509169],
#        [ 0.75458428]])

线性回归 Python 实现

以最小二乘法代数方法为例

w,b=w_calculator(x, y)
# 求损失
loss = mae_value(y,wx+b)

在上述例子中,得到的loss为447.69153479025357
接下来,我们尝试将拟合得到的直线绘制到原图中:

x_temp = np.linspace(50, 120, 100)  # 绘制直线生成的临时点

plt.scatter(x, y)
plt.plot(x_temp, x_temp*w + b, 'r')

在这里插入图片描述
此时,想要预估x为100对应的y只需要代入公式 y = w x + b y=wx+b y=wx+b即可得到:116.79351921627732

线性回归 scikit-learn 实现

scikit-learn 把线性回归的过程整合到了LinearRegression() 类里,只需要填入需要的参数即可。

sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1)
- fit_intercept: 默认为 True,计算截距项。
- normalize: 默认为 False,不针对数据进行标准化处理。
- copy_X: 默认为 True,即使用数据的副本进行操作,防止影响原数据。
- n_jobs: 计算时的作业数量。默认为 1,若为 -1 则使用全部 CPU 参与运算。

from sklearn.linear_model import LinearRegression

# 定义线性回归模型
model = LinearRegression()
model.fit(x.reshape(len(x), 1), y)  # 训练, reshape 操作把数据处理成 fit 能接受的形状

# 得到模型拟合参数
model.intercept_, model.coef_

得到的结果(41.33509168550615, array([0.75458428]))和上述python得到结果一致。

# 想要预测x=100对应的y
model.predict([[100]])

梯度下降法

为了求解 w w w的极小值还可以引入一种叫「梯度下降」的求解方法。梯度下降法是一种十分常用且经典的最优化算法,通过这种方法我们就能快速找到函数的最小值。

梯度下降法的原理

什么是「梯度」?梯度是一个向量,它表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。对于一元函数而言,梯度就是指在某一点的导数。而对于多元函数而言,梯度就是指在某一点的偏导数组成的向量。

函数在沿梯度方向变化最快,所以「梯度下降法」的核心就是,我们沿着梯度下降方向去寻找损失函数的极小值(梯度的反方向)。过程如下图所示。

请添加图片描述
这里的损失函数依然是均方误差MSE:
J = f n = 1 n ∑ i = 1 n ( y i − y i ^ ) 2 (1) J= \frac fn= \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y_i})^{2}\tag{1} J=nf=n1i=1n(yiyi^)2(1)
J = 1 n ∑ i = 1 n ( y i − ( w x i + b ) ) 2 (2) J= \frac{1}{n} \sum_{i=1}^{n} (y_i -(wx_i+b))^{2}\tag{2} J=n1i=1n(yi(wxi+b))2(2)
求解参数和截距项对应的梯度:
∂ J ∂ w = − 2 n ∑ i = 1 n x i ( y i − ( w x i + b ) ) (3a) \frac{\partial J}{\partial w}= -\frac 2n \sum_{i=1}^{n} x_i(y_i -(wx_i+b))\tag{3a} wJ=n2i=1nxi(yi(wxi+b))(3a)

∂ J ∂ b = − 2 n ∑ i = 1 n ( y i − ( w x i + b ) ) (3b) \frac{\partial J}{\partial b}=-\frac 2n \sum_{i=1}^{n} (y_i -(wx_i+b))\tag{3b} bJ=n2i=1n(yi(wxi+b))(3b)
当我们得到梯度的方向,然后乘以一个常数 α \alpha α ,就可以得到每次梯度下降的步长(上图箭头的长度)。最后,通过多次迭代,找到梯度变化很小的点,也就对应着损失函数的极小值了。其中,常数 α \alpha α往往也被称之为学习率 Learning Rate。

在下文中用lr(Learning Rate)代表常数 α \alpha α

每次迭代,用w和b的初始值去减掉梯度*lr
w = w − ∂ J ∂ w ∗ l r (4a) w=w-\frac{\partial J}{\partial w}*lr\tag{4a} w=wwJlr(4a)
b = b − ∂ J ∂ b ∗ l r (4b) b=b-\frac{\partial J}{\partial b}*lr\tag{4b} b=bbJlr(4b)

梯度下降法求解线性回归

这里的x、y为数据点。

import numpy as np
import pandas as pd
def mse_value(y_true, y_pred):
    n = len(y_true)
    mse = sum(np.square(y_true - y_pred))/n
    return mse

def gradient_w(X,y,z):
    # 梯度计算
    gradient = 2*np.dot(X.T, (z- y)) / y.shape[0]
    return gradient

def gradient_b(X,y,z):
    # 梯度计算
    one = np.ones(y.shape[0])
    gradient = 2*np.dot(one, (z- y)) / y.shape[0]
    return gradient

def gradient_descent():

    w = 0  # 初始参数为 0
    b = 0  # 初始参数为 0
    
    lr = 0.000000001 # 设置合理学习率
    num_iter = 300 # 设置合理迭代次数
    l_list = []  # 保存损失函数值
    for i in range(num_iter):  # 梯度下降迭代
        z=x*w+b
        w=w-gradient_w(x,y,z)*lr
        b=b-gradient_b(x,y,z)*lr
        l = mse_value(y,z)  # 计算损失函数值
        l_list.append(l)
    return w, b
#w, b,l_y=gradient_descent()

绘制损失函数如下,发现曲线在迭代次数为300时趋于平缓,得合理迭代次数为300
请添加图片描述

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

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

相关文章

Java SpringBoot实战:如何构建学生档案管理系统实现信息管理

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

【ocr识别003】动物检疫合格证明单据OCR识别应用案例(已更新)

1.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 2.了解、学习OCR相关技术知识领域,结合日常的场景进行测试、总结。如本文的实践:以动物检疫合格证明单据识别为例,探索OCR文本推理应用示例场景。 3.有其他场景问题,欢迎留言或加微沟通。 文章目录 1.简要介绍2.`O…

【Qt窗口】—— 状态栏

目录 1.1 状态栏的创建 1.2 在状态栏中显示实时消息 1.3 在状态栏中显示永久消息 状态栏是应用程序中输出简要信息的区域。⼀般位于主窗口的最底部,⼀个窗⼝中最多只能有⼀个状态栏。在Qt中,状态栏是通过QStatusBar类来实现的。在状态栏中可以显示的消…

Navicat Premium 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开工具对话框2. 设置编辑器字体大小3. 设置查询表格字体大小 前言 Navicat Premium 自定义字体大小,统一设置为 Cascadia Code SemiBold ,大小为 12 具体操作 【工具】>【选项】>【编…

内网渗透小知识

下载proxychains这个工具 在下面这里进行代理配置 然后再里面添加内网端口。在设置浏览器的代理,就可以通过内网访问内网资源 然后在浏览器中设置,设置socks后可以访问很多。 如果映射http的话只可以访问一个 然后如果在内网扫描不了IP的话使用上面的代…

AGI系列(8)零门槛信息抓取利器打造,免费自动化抓取推特上的热点内容

应该大家都或多或少的听说过 X/Twitter。它可不只是个普通的社交平台!它还是个信息宝库,里面有各种有趣的内容,比如:想知道最新热点?想和全世界的人聊天?Twitter都能搞定!它的搜索功能特别厉害&…

测试职场经验 | 缺陷如何分类

说到bug,大家可能更多的认为是错误,有问题的地方,但是它的原意是”臭虫”,是不是有了新的发现!而真正找出电脑程序中第一个bug的女程序员,来自于计算机软件第一夫人:Grace Hopper,一次”意外”的…

取模+背包

前言:一开始我想错了,一开始我想的是直接统计每一项模完后的和,我们只要能够取到一半,那么就有解,但是时间复杂度太大了 我们做推导 x y s u m x y sum xysum x − y k ∗ n x - y k * n x−yk∗n 那么我们可…

pikachu靶场通关攻略(XSS)(1~10关)

反射型xss(get) 步骤一&#xff0c;我们先打开网站&#xff08;第一关&#xff09; 步骤二&#xff0c;首先来到第一关我们先随便输入一个数字1&#xff0c;下边显示谁是1&#xff0c;我不在乎! 步骤三&#xff0c;输入代码&#xff1a;<script>alert(1)</script>…

Codeforces Round 966 (Div. 3) A~F

A.Primary Task&#xff08;模拟&#xff09; 题意&#xff1a; 德米特里在黑板上写下了 t t t个整数&#xff0c;这很好。他肯定自己丢失了其中一个重要的整数 n n n&#xff0c;这就不好了。 整数 n n n的形式是 10 10 10 ^ x x x( x ≥ 2 x\ge 2 x≥2)&#xff0c;其中符…

数字签名:信息安全的新屏障

随着互联网的普及和信息技术的发展&#xff0c;信息安全问题日益凸显。数字签名作为一种重要的信息安全技术&#xff0c;为电子数据传输提供了有效保障。本文将介绍数字签名的基本原理、应用场景及其在保障信息安全方面的作用。 一、数字签名概述 数字签名是一种基于公钥密码…

深度学习基础—卷积运算

1.1.卷积运算法则 在计算机视觉领域&#xff0c;卷积运算撑起了半边天&#xff0c;因此在学习计算机视觉前&#xff0c;首先来了解一下卷积运算是如何运算的。 假设正在进行边缘检测&#xff0c;垂直边缘检测会把图片中接近垂直的边缘提取出来&#xff0c;即人的侧边、栏杆等。…

组合式API-reactive和ref函数,computed计算属性,watch函数

一.reactive&#xff08;&#xff09;接收一个对象类型的数据&#xff0c;返回一个响应式的对象&#xff1a; <script setup> import {reactive} from vue const state reactive({count:100 }) const setCount () > {state.count } </script> <template>…

MySql【数据查询语言DQL】

DQL[非常重要] DQL 主要指查询语句,有查询单表数据,也有查多表数据表,单表查询 基本查询 条件查询 模糊查询 排序查询 聚合查询 去重查询 分组查询 限制查询 1、 数据准备 将发的stu.sql导入到MySql中 2、 基本查询 select 字段1,字段2,... from 表名; 查询返回的是一张…

吉利银河L6 第二年保险 出险对保费的影响

出险情况 出险一次 自己责任 自己修车走车损,1000多元; 给对方修车走交强险,1000多元. 导致保费上涨1100左右. 车损,三者等项目都上涨 注意:如果出险流程没走完(不会导致第二年报价上涨),恰好可以买第二年保险(保险到期前一个月),如果你买了,这次出险没给你加钱,会在第二年给…

远程控制电脑的软件有哪些?精选4个小妙招分享!

远程控制电脑的软件多种多样&#xff0c;它们各自具有不同的特点和优势。 以下是精选的四种远程控制软件及其使用小妙招&#xff0c;供您参考&#xff1a; 1.安企神 软件特点&#xff1a; 远程控制&#xff1a; 实时桌面控制&#xff1a;能够实时查看和控制远程计算机的桌面…

[译] RAGFlow 使用说明

本文翻译整理自&#xff1a;https://ragflow.io/docs/dev/ 本文档更多是 RAGFlow 系统操作内容&#xff0c;虽然不难/深刻&#xff0c;但有些细节没有注意&#xff0c;在搭建和使用的时候就容易出各类问题。所以读完这个文档是有必要的。 文章目录 快速启动一、先决条件二、启…

插入排序:直接插入排序、希尔排序详细说明

插入排序 基本思想&#xff1a;直接插入排序是⼀种简单的插入排序法&#xff0c;其基本思想是&#xff1a;把待排序的记录按其关键码值的大小逐个插入到⼀个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到⼀个新的有序序列。 在玩扑克牌整理手中…

【操作系统】实验:指示灯开关控制

目录 一、实验目的 二、实验内容 三、实验步骤 四、记录与处理 五、思考 六、成果文件提取链接 一、实验目的 学习51单片机通用I/O口的基本输入/输出功能&#xff0c;掌握汇编程序编程与仿真设计方法。 二、实验内容 &#xff08;1&#xff09;创建一个包含80C51固件&am…

diffusion model(扩散模型)DDPM解析

DDPM 前向阶段 重复 2-5 步骤 x 0 ∼ q ( x 0 ) \mathbf{x}_0\sim q(\mathbf{x}_0) x0​∼q(x0​)从数据集中采样一张图片 t ∼ U n i f o r m ( { 1 , … , T } ) t\sim\mathrm{Uniform}(\{1,\ldots,T\}) t∼Uniform({1,…,T})&#xff0c;从 1~T 中随机挑选一个时间步 t ϵ …