- 为什么叫因子(factor)
词源本义:乘数、构成成分 。
数学里:A × B = C → A、B就是C的factor(因子)
引申到AI:很多底层成分"相乘/加权叠加"之后,生成我们看到的数据,于是起名隐因子 latent factor。
名字只代表「它是组成整体的一份子」,名字本身不代表它一定是向量,也不一定是变量。
- 因子是变化的向量?还是变量?
- 因子是概念名称 ,不是固定数据类型
- 最简单因子:标量变量(单数字,缩放因子 0.8)
- 隐因子:向量变量(一组数,隐因子向量)
- ✅隐因子(深度学习常用):一般用向量去表达
- ❌因子 ≠ 天然等于向量
- factor 跟 vector 的关系
factor = 语义角色(它是一个组成成分)
vector = 数据存储形式(用一串数字去装这个成分)
- factor:是什么角色(角色名:组成因子)
- vector:长什么结构(载体:向量)
类比
"工人(factor角色)",可以用纸笔记录,可以用身份证编号(vector载体)记录。
工人≠编号。因子≠向量。
分层举例,彻底分清
①标量因子(不是向量,只是变量)
xnew=0.75⋅xx_{new} = 0.75 \cdot xxnew=0.75⋅x
0.75 叫缩放因子 scaling factor
- 类型:标量(单个变量)
- 名称:因子,作用是调节大小
👉这里是factor,完全不是vector
②隐因子(用向量作为载体)
假设一张人脸由3个隐因子决定:身份、光照、角度
z=zid, zlight, zangle\boldsymbol z = z_{id},\\ z_{light},\\ z_{angle}z=zid, zlight, zangle
- z\boldsymbol zz:隐因子向量
- z_id:身份因子(向量其中一维)
- z_light:光照因子(另一维)
整串向量,用来存放一套隐因子。
vector是容器,factor是容器里面代表的语义成分
公式表达:
X=W⋅zX = W \cdot \boldsymbol zX=W⋅z
- z\boldsymbol zz:因子向量(一套隐因子)
- WWW:因子载荷矩阵(每一列代表这个因子有多强的影响力)
- XXX:最后生成的图像观测
③矩阵分解例子 R≈UVTR≈UV^TR≈UVT
- U:用户因子矩阵
U里每一行向量 = 一个用户的一组隐因子
向量是存因子的形式,因子是向量承载的含义。
对比4个词,防止长期混淆
- Factor 因子:【概念/角色】组成整体的一个独立成因、分量
- Variable 变量:【数学符号】可以取不同数值的量
- Vector 向量:【数据结构】一串有序数字
- Token:【离散片段】切分出来的一块编码数据
组合关系
- 一个因子 →可以是标量变量 ,也可以是向量变量
- 一组因子 ,经常打包放到向量里面一起计算
所以论文里经常出现词组:latent factor vector(隐因子向量)
翻译:用来存放隐因子的向量。
不是说因子本身就等于向量。
极简一句话总结
Factor(因子)描述它起什么作用 ,Vector(向量)描述它长什么结构 。
因子可以用向量装,也可以只是一个单独数字;向量可以存因子,也可以存坐标、特征、token表征。二者不属于同一套定义维度。
额外区分(极易混淆)
- 特征 vector:直接描述当前样本外观
- 隐因子 vector:描述生成这个样本背后的成因
一张照片的特征向量:偏暗、侧脸、微笑
对应的隐因子:光照因子、姿态因子、表情因子
factor 因子,按领域分类举例
记住统一语感:因子 = 一个起作用的分量、乘数、影响系数
不一定是向量,大量场景只是一个标量数字。
一、强化学习 / 控制(你熟悉的)
-
折扣因子 γ(discount factor)
贝尔曼方程里:r+γV(s′)r+\gamma V(s')r+γV(s′)
作用:给未来回报打衰减权重,越远期权重越低
取值常见 0.9~0.99
-
温度因子 temperature factor
采样的时候,调节随机探索程度;温度越大输出越多样。
-
衰减因子 decay factor
优化器权重衰减,每一轮乘一个小于1系数,约束权重不要过大。
-
安全因子 safety factor
机器人力矩、速度上限乘以安全因子0.7,预留安全余量。
二、数学|代数
- 因式分解 factor
x2‑4=(x‑2)(x+2)x^2‑4=(x‑2)(x+2)x2‑4=(x‑2)(x+2),(x‑2)(x‑2)(x‑2) 是多项式因子 - 公因数、质因子
12=2×2×312=2×2×312=2×2×3,2、3是12的质因子 - 比例因子 scale factor
图形放大缩小倍数,坐标 × 比例因子
三、统计学、机器学习
- 隐因子 latent factor
矩阵分解、推荐系统:用户偏好因子、物品属性因子(一般用向量表示) - 因子分析 Factor Analysis
从大量观测数据,提取背后少数几个影响成因因子
例:学生成绩,提取【智力因子、努力因子】 - 权重因子 weight factor
多损失函数加权:Loss=λ1L1+λ2L2Loss = λ_1L_1+λ_2L_2Loss=λ1L1+λ2L2,λ1,λ2λ_1,λ_2λ1,λ2为权重因子
四、深度学习、生成模型
- 噪声因子 noise factor
扩散模型:控制每一步加入噪声强弱的系数 - 引导因子 guidance factor
CFG分类器引导,文本条件强度放大倍数 - 缩放因子 scaling factor
归一化、LayerNorm里面,对向量整体放大缩小的系数 - 残差因子
残差连接 x+α⋅f(x)x+\alpha\cdot f(x)x+α⋅f(x),α控制分支贡献大小
五、信号、物理工程
- 阻尼因子 damping factor
振动、二阶系统,决定震荡衰减快慢 - 增益因子 gain factor
控制理论PD控制器输出放大倍数 - 畸变因子 distortion factor
信号失真程度系数
六、日常业务
1.风险因子:风险计算时的加权系数
2.修正因子:实测值 ×修正因子,补偿系统误差
关键区分两组搭配
-
标量因子(绝大多数名词带因子的)
折扣因子、阻尼因子、温度因子、安全因子
👉单个数字,乘上去改变结果大小
-
隐因子 latent factor(特殊)
为了描述多维度成因,用一组向量承载一组因子
👉这里因子是多维分量,不再是单个数字
一句话总结
只要公式里有一项用来加权、缩放、调节贡献大小,这个项就经常被命名为XX因子(factor)。
向量只是一种存储形式,只有隐因子这类场景才会用向量表达。
因子 factor|系数 coefficient|权重 weight
核心定性区别(用词语感,工程/论文习惯)
- 因子 factor
侧重:调节、缩放、修正、参与构成 ,偏"放大削弱某一部分作用"
公式位置:大多做乘法项
- 折扣因子 γ、温度因子、安全因子、缩放因子
- 隐因子:事物背后的组成成因(语义层面,不一定是数字系数)
语感:这件结果里面,有这么一份影响成分。
- 系数 coefficient
侧重:方程固定参数 ,线性拟合里固定不变的常量
y=a⋅x+by = a\cdot x + by=a⋅x+b
aaa 就是x的系数
- 摩擦系数、膨胀系数、多项式系数
语感:数学公式定义里,预先确定的常量参数。
- 权重 weight
侧重:多份结果之间,谁更重要 ,用于加权求和
Loss=w1L1+w2L2Loss = w_1L_1 + w_2L_2Loss=w1L1+w2L2
w1,w2w_1,w_2w1,w2 是权重
- 网络权重、损失权重、注意力权重
语感:多个候选,分配重要程度,决定谁占比更高。
对比表格
| 名词 | 典型运算 | 核心含义 | 典型例子 |
|---|---|---|---|
| 因子 factor | 乘法 y=f⋅xy = f \cdot xy=f⋅x | 调节强弱、组成成分 | 折扣因子、噪声因子、隐因子 |
| 系数 coefficient | 线性项 y=c⋅xy = c\cdot xy=c⋅x | 方程固有常量参数 | 阻尼系数、回归系数 |
| 权重 weight | 加法求和 y=∑wixiy=\sum w_i x_iy=∑wixi | 多来源之间重要占比 | 网络权重、损失权重 |
重叠与混用说明(很多论文不会严格抠定义)
- 标量乘法系数,既可以叫系数,也可以叫因子
y=0.5xy=0.5xy=0.5x
0.5:缩放系数 / 缩放因子,两种叫法都正确
区别只在于作者想强调什么:
- 强调公式参数 → 系数
- 强调用来调节强度 → 因子
- 权重几乎不会叫因子
加权求和的w,一般只叫权重,几乎不叫"求和因子"
3.隐因子是特例
隐因子不是单纯的数字,代表潜在成因
不能叫"隐权重""隐系数",只能叫隐因子 latent factor
结合你熟悉的公式举例
1.贝尔曼方程:r+γV(s′)r+\gamma V(s')r+γV(s′)
γ\boldsymbol\gammaγ:折扣因子 (调节未来回报的强度,乘法)
不会叫折扣系数、折扣权重
2.PD控制:τ=KpΔq+KdΔq˙\tau=K_p\Delta q+K_d\Delta\dot qτ=KpΔq+KdΔq˙
Kp,KdK_p,K_dKp,Kd:比例系数、微分系数 (控制器固有参数)
工程口语偶尔叫增益因子
3.多任务损失:L=λ1L1+λ2L2L=\lambda_1L_1+\lambda_2L_2L=λ1L1+λ2L2
λ1,λ2\lambda_1,\lambda_2λ1,λ2:损失权重(分配两项损失重要程度)
一句话极简总结
- 系数:方程里的固定参数
- 因子:用来乘上去调节强弱的分量(也可指成因)
- 权重:多项相加时分配重要度
补充:
- 参数 parameter:统称,上面三类数字全都可以叫参数。
参数是大类名称,因子/系数/权重是按作用起的别名。
1.隐空间(Latent Space)通俗定义
观测空间 :你直接看到的数据(图片像素、音频波形、文字、关节轨迹)
隐空间 :
模型假想出来的高维数学空间 ,
真实数据背后那一套「成因、因子、规律」所在的抽象空间。
类比
- 观测空间:一张张拍出来的人脸照片(看得见)
- 隐空间:由【身份、光照、角度、表情】这些隐因子张成的空间 (看不见)
每一组隐因子向量,就是隐空间里面一个坐标点。
公式视角:
z∈Z隐空间z \in \mathcal Z \quad \text{隐空间}z∈Z隐空间
x∈X原始观测空间x \in \mathcal X \quad \text{原始观测空间}x∈X原始观测空间
编码器:E(x)=zE(x)=zE(x)=z 观测 → 映射到隐空间取一个坐标
解码器:D(z)=xD(z)=xD(z)=x 隐空间坐标 →还原出原始数据
2.隐空间里面包含什么?
先说最重要一句:
隐空间里面不存在图片、文字、物体,只有无数高维坐标点(向量 z)
每个点 = 一组隐因子组合。
隐空间内包含两类事物
①空间本身:整套维度基底
空间由一堆隐因子维度 撑开
例:128维隐空间
维度0:偏向人脸身份因子
维度1:偏向光照明暗因子
维度2:偏向左右姿态因子
......
⚠没有谁提前规定第几维一定代表什么!
隐因子含义是模型训练后自发形成,不一定具备人类可解释语义
很多维度是混合纠缠状态,一个维度同时对应好几种物理因素。
②空间中的点(向量 z)
每一个点:
z=‑0.21, 0.53, 0.11,...z=‑0.21,\\ 0.53,\\ 0.11,...z=‑0.21, 0.53, 0.11,...
代表一套完整的隐因子组合
- 两个点距离近:代表生成出来的观测样本语义接近
- 在空间沿着某一条轴移动:对应某一种属性连续变化
比如z沿着光照因子方向缓慢移动 →图片慢慢变亮变暗
❌误区
1.隐空间不是一块储存图片的仓库
不能在隐空间里"找到一张杯子的图片"
只能找到可以解码生成杯子图像的坐标向量
2.隐空间不是HNSW图
HNSW是在向量之上额外建的搜索图结构
隐空间只是纯数学坐标空间,本身没有邻居、没有边。
3.结合你熟悉的技术举例
1)VAE / 扩散模型
- z:隐空间向量
采样一个新z →解码器直接生成一张全新图片
隐空间是生成图像的"蓝图空间"
2)流匹配 Flow‑Matching(机器人VLA动作)
动作不直接预测关节值,先预测隐空间轨迹
z沿着时间在隐空间连续平滑移动,再解码输出真实7维关节动作
隐空间可以让轨迹天然平滑,降低噪声。
3)对比CLIP图像向量
CLIP输出768维向量,本质就是映射到一个视觉隐空间
两张图片向量距离近=语义接近
向量库HNSW,就是在这个隐空间里面做近邻搜索
4.隐空间、隐因子、向量三者关系
- 隐因子:单个独立影响成分(光照、角度),对应空间某一个方向轴
- 隐空间 :所有隐因子轴撑开的完整高维空间
- 隐向量 z :隐空间当中一个坐标点,一套隐因子的组合结果
比喻
- 纬度、经度、高度 →【隐因子,坐标轴】
- 整个地球三维空间 →【隐空间】
- (113,23,100)广州某点坐标 →【隐向量z】
5.一句话总结
隐空间:一套抽象高维坐标系
坐标系每根轴对应一种潜在影响因子
每一个坐标点(向量)代表一组因子组合
通过解码器,把坐标点还原成我们能看见的图片、语音、动作轨迹。
补充
- 如果隐空间维度很低:低维隐空间
- 如果维度很高(768‑4096):高维隐空间
维度数量 ≠ 有多少个可解释因子,大量维度是混合纠缠。
一、什么是采样策略(Sampling Strategy)
定义:从一个概率分布里,挑选/生成样本的一套规则
模型输出不是直接输出固定答案,输出概率分布;采样策略决定「怎么从分布里挑出最终结果」。
通俗:
模型告诉你"这件事有一堆可能结果,各自概率不同"
采样策略 = 选择哪一条结果输出的决策规则
⚠区分两件极易混淆名词
- 采样策略 :选样本的规则逻辑(算法逻辑)
- 采样器(Sampler) :ODE/扩散里的数值积分器(Euler、RK4、DDIM),属于隐空间轨迹求解,不是概率采样策略。
二、四大应用领域(分别对应完全不一样的采样策略)
1|大模型文本Token生成(自回归)
输出:每个step词表概率分布
- 贪婪采样 Greedy:每一步直接选概率最大token(argmax),确定性输出,缺点容易重复、死板
- 束搜索 Beam Search:保留N条候选路径,全局打分选最优;翻译场景常用
- 温度采样 Temperature:先缩放概率分布,T>1增加随机性,T<1更保守确定
- Top‑K采样:只保留概率最高K个token,再随机抽取
- Top‑P(核采样 Nucleus) :动态选取累计概率≥P的最小候选集合,工业界LLM默认方案
- Min‑P采样:过滤掉绝对概率过低的token,高温度下不容易胡说
用途:对话、代码、推理、思维链输出token
控制效果:温度越高,回答越天马行空;温度=0等价贪婪搜索
2|扩散 / 流匹配(图像、机器人VLA动作轨迹)
两套完全不同的"采样"概念,经常被混为一谈
A)隐空间轨迹采样器(ODE求解器,数值计算)
不是概率采样!是微分方程步进算法
- Euler(欧拉)
- Heun(二阶)
- RK4(四阶龙格库塔)
- DDIM、DPM‑PPM(扩散专用步长方案)
作用:从纯噪声z₀沿着速度场,一步步积分走到最终动作隐向量z₁
B)概率采样策略(多条轨迹候选筛选)
- 确定性采样:只跑1条ODE路径,直接输出轨迹(Pi0、ACT默认)
- 多候选采样:跑N条不同噪声初始值,生成N条动作轨迹,选最优一条执行
- CFG引导采样:条件放大因子,强化语言指令对轨迹的约束
机器人VLA场景:
流匹配本身ODE是确定性;想要多样性,只能改变初始隐向量z的随机种子,多次rollout采样多条轨迹。
3|强化学习 RL(MDP,Rollout采样策略)
采样【状态‑动作‑奖励完整轨迹】
- 贪心采样:永远选Q值最大动作(利用,exploitation)
- ε‑greedy ε贪心:ε概率随机探索,1‑ε选最优动作(最经典)
- 高斯采样:连续动作空间,均值+方差高斯分布采样(机器人连续动作RL)
- 软最大采样Softmax:按Q值概率加权随机选动作
- 分层rollout采样:多条轨迹并行采样,筛选高回报样本
用途:环境交互、在线试错收集训练数据,贝尔曼方程迭代优化策略
4|数据集训练阶段采样策略(取batch)
不是推理采样!训练时选哪些样本送入网络
- 均匀随机采样:shuffle,完全随机取样本(默认)
- 加权重采样:少数类提高采样概率,解决类别不平衡
- 困难样本采样:优先loss大、难学的样本
- 时序窗口采样:机器人数据集,固定长度轨迹片段采样
三、一张总表区分
| 领域 | 采样对象 | 典型策略 |
|---|---|---|
| LLM文本 | 下一个Token | 贪婪、Beam、Top‑P、Top‑K、温度 |
| 扩散/流匹配 | 隐空间向量轨迹 | Euler/Heun/RK4(求解器)|多条轨迹候选筛选 |
| 强化学习 | 环境交互完整轨迹 | ε‑greedy、高斯采样、softmax、rollout采样 |
| 数据集训练 | 训练样本batch | 加权采样、难例采样、时序采样 |
四、针对你关心的VLA机器人场景总结
- VLA【推理输出动作】
- 流匹配本身:ODE积分器(Euler/RK4)生成单条轨迹,默认确定性,无概率采样
- 如果要多方案择优:多次随机初始化隐变量z,生成多条轨迹(多候选采样策略)
- VLA【RL微调阶段】
- rollout采样策略:控制机器人怎么在真机/仿真里跑出多条轨迹,拿奖励更新网络
- VLA【数据集训练】
- 时序窗口采样:从专家轨迹里面切一段段动作序列,构成训练batch
五、一句话总结
采样策略 = 一套挑选样本的决策规则
- Token场景:从词表里选词
- RL场景:环境里选动作跑完整轨迹
- 生成模型:从分布里选隐变量,生成完整图像/动作轨迹
ODE/Euler/RK4属于微分方程数值求解器,不属于概率采样策略,只是生成轨迹的计算工具。
采样策略|采样器|调度器 三者区分
很多论文、工程口语会混用,底层定义完全不一样
1. 采样策略 Sampling Strategy
【决策逻辑:按什么规则去选】
作用:定义选样本的规则、概率、取舍逻辑
- LLM:Top‑P、Top‑K、温度、束搜索、贪婪
- RL:ε‑greedy、高斯探索、难例采样、加权采样
- VLA:多轨迹择优采样、单条确定性输出
一句话:决定"挑哪一个"
输出:得到一个候选样本/候选序列
2. 采样器 Sampler
【计算工具:一步一步算出来】
分两大完全不同类别
类别A:概率采样器
从概率分布抽取随机数的底层函数
高斯采样器、多项式采样器(按概率抽token)
类别B:ODE/扩散采样器(机器人、图像生成最容易混淆)
微分方程数值求解器 ,走时间步迭代计算隐空间轨迹
Euler、Heun、RK4、DDIM、DPM‑2M
一句话:给定初始条件,一步步算出完整轨迹
它只管解方程,本身不做概率随机决策
哪怕完全确定性,依然叫采样器
重点区分:
- 采样策略:要不要随机、保留多少候选
- 采样器:用什么数学积分公式算出轨迹
3. 调度器 Scheduler
【超参随步数变化的计划表】
作用:随时间步,动态修改一组参数 ,不直接生成样本,不做选择
常见:
1)扩散噪声调度器:每一步噪声强度 β(t)
2)CFG引导强度调度器:推理过程逐步增减guidance_factor
3)学习率调度器:训练过程逐步降低学习率
4)温度调度器:推理后半段逐步降低随机性
一句话:随着步数,动态调参,是一套参数变化方案
最简类比(流匹配生成一条动作轨迹)
- 调度器Scheduler:规定第1~N步,速度权重怎么变化(参数计划表)
- 采样器Sampler:RK4数值积分,按调度参数一步步积分算出z轨迹(计算工具)
- 采样策略Strategy:生成3条不同初始z轨迹,选最合理一条输出(决策规则)
表格汇总
| 名词 | 定位 | 核心作用 | 典型例子 |
|---|---|---|---|
| 采样策略 | 决策层 | 选择样本的一套规则 | Top‑P、ε‑greedy、多轨迹择优 |
| 采样器 | 计算层 | 数值求解 / 随机抽取 | Euler,RK4,多项式采样器 |
| 调度器 | 参数层 | 动态改变超参 | 噪声调度、学习率调度、CFG调度 |
VLA‑流匹配完整链路对照
初始随机z →【调度器】确定每一步系数 →【RK4采样器】积分得到轨迹 →【采样策略】多条轨迹选最优 →输出动作
- 缺调度器:参数全程不变,生成效果差
- 缺采样器:没有办法求解微分方程算轨迹
- 缺采样策略:只能输出单一条固定结果,无法择优
一句话记忆口诀
策略决定怎么选,采样器负责怎么算,调度器控制参数怎么变。
补充一个高频误区
"DDIM采样策略"
严格来说:DDIM是采样器(求解算法) ,不是策略;
口语大家习惯叫"DDIM采样策略",属于工程俗称,不是严谨定义。
DDIM 原理 + 函数调用 + 代码示例
先定性:DDIM 属于扩散模型反向过程的采样器(ODE求解器) ,不是采样策略。
DDPM 需要1000步反向去噪,DDIM 通过非马尔可夫假设,可以跳步,用 20‑50 步就能生成,大幅加速推理。
1.核心递推公式(DDIM 更新函数)
xt−1=αt−1(xt−1−αt εθ(xt,t)αt)⏟预测干净样本 x0+1−αt−1−σt2 εθ(xt,t)+σt ϵ x_{t-1}=\sqrt{\alpha_{t-1}}\underbrace{\left( \frac{x_t-\sqrt{1-\alpha_t}\,\varepsilon_\theta(x_t,t)}{\sqrt{\alpha_t}} \right)}{\text{预测干净样本 }x_0} +\sqrt{1-\alpha{t-1}-\sigma_t^2}\,\varepsilon_\theta(x_t,t) +\sigma_t\,\boldsymbol\epsilon xt−1=αt−1 预测干净样本 x0 (αt xt−1−αt εθ(xt,t))+1−αt−1−σt2 εθ(xt,t)+σtϵ
- xtx_txt:t时刻带噪隐变量
- εθ(xt,t)\varepsilon_\theta(x_t,t)εθ(xt,t):网络预测的噪声
- αt=∏i=1t(1−βi)\alpha_t=\prod_{i=1}^t(1-\beta_i)αt=∏i=1t(1−βi),预定义噪声调度
- σt\sigma_tσt:随机项系数
- σt=0\boldsymbol{\sigma_t=0}σt=0 → 确定性DDIM(无随机噪声,最常用)
- σt>0\sigma_t>0σt>0 →带随机性,介于DDIM与DDPM之间
当 σt=(1−αt−1)/(1−αt)1−αt/αt−1\sigma_t=\sqrt{(1-\alpha_{t-1})/(1-\alpha_t)}\sqrt{1-\alpha_t/\alpha_{t-1}}σt=(1−αt−1)/(1−αt) 1−αt/αt−1 ,等价 DDPM。
2.函数输入输出(逻辑层面怎么"用")
单步DDIM函数
输入:
xt 当前带噪向量
t 当前时间步
t_prev 上一个时间步(可以跨步,不是必须 t‑1)
ε_theta 噪声预测网络
α_t,α_tprev 调度表参数
eta 随机性系数(η=0纯确定)
输出:
xt_prev 去噪一步之后的向量
关键点:
DDIM允许自定义时间步序列 ,不必连续 1000,999,998...
可以直接取 1000,800,600,...,0,仅20步完成生成。
3.完整推理流程(调用顺序)
- 预先定义时间步序列 ,例如 50步采样:
timesteps = [980,960,940 ... ,20,0] - 随机初始化 xTx_TxT(纯噪声)
- 循环遍历时间序列:
- t = 当前步,t_prev = 下一个更小的步
- 调用网络预测噪声 ε=εθ(xt,t)\varepsilon=\varepsilon_\theta(x_t,t)ε=εθ(xt,t)
- 代入DDIM公式计算 xtprevx_{t_{prev}}xtprev
- 赋值 xt=xtprevx_t = x_{t_{prev}}xt=xtprev
4.循环结束,x0x_0x0 即为生成结果
4.极简伪代码实现(DDIM单步函数)
python
def ddim_step(xt, t, t_prev, eps_model, alpha_bar, eta=0.0):
# 取出调度参数
at = alpha_bar[t]
at_prev = alpha_bar[t_prev]
# 预测噪声
eps_pred = eps_model(xt, t)
# 预测原始样本 x0
x0_pred = (xt - (1-at)**0.5 * eps_pred) / (at**0.5)
# DDIM公式三项
term1 = (at_prev**0.5) * x0_pred
term2 = ((1-at_prev) - (eta**2)*(1-at)/(1-at_prev)*(1-at_prev))**0.5 * eps_pred
# 随机噪声项 eta=0 时直接为0
if eta > 0:
sigma = eta * ((1-at_prev) * (1-at)/(1-at_prev))**0.5
noise = torch.randn_like(xt)
term3 = sigma * noise
else:
term3 = 0
xt_prev = term1 + term2 + term3
return xt_prev
eta=0:标准确定性DDIM,每次输入同一个噪声,输出完全固定eta=0.3:加入少量随机,增加生成多样性
5.工程框架里怎么直接调用(HuggingFace diffusers)
python
from diffusers import DDIMScheduler
scheduler = DDIMScheduler(num_train_timesteps=1000)
# 推理设置25步
scheduler.set_timesteps(num_inference_steps=25)
# 循环采样
for t in scheduler.timesteps:
noise_pred = unet(xt, t).sample
# 直接调用ddim单步函数
xt = scheduler.step(noise_pred, t, xt).prev_sample
scheduler.step() 就是封装好的DDIM函数。
6.对比流匹配视角(VLA机器人)
- DDIM:离散反向扩散迭代,依赖预计算α噪声调度表
- Flow‑Matching:直接求解ODE速度场,用Euler / RK4积分器
功能相似:都是逐步更新隐变量得到输出轨迹
数学体系完全不同,流匹配没有α、β噪声调度
7.容易踩坑
- 训练是1000步DDPM,推理用DDIM跳步,不需要重新训练
- 步数越少速度越快,但细节会变差,一般20‑50步折中
- eta≠0才带随机性;eta=0属于确定性采样器,不存在随机采样
一句话总结用法
DDIM是一套单步去噪迭代函数,传入当前隐变量+时间步,按公式算出下一步,配合自定义跳步时间序列,用远少于训练步数完成生成。