关于重参数(Reparameterization)

博客提供了一个链接https://spaces.ac.cn/archives/6705 ,称其内容很详细,与深度学习相关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

### 扩散模型中的重参数化技巧 在扩散模型中,为了使反向传播能够通过随机变量传递梯度,在采样过程中通常采用重参数化技巧。具体来说,对于给定的时间步 t 和对应的噪声水平 $\sigma_t$,可以通过引入独立的标准正态分布变量 $\epsilon \sim N(0, I)$ 来表示当前时间步下的样本 $x_t$: \[ x_t = \sqrt{\alpha_t} x_0 + \sigma_t \epsilon \] 其中,$\alpha_t$ 是与特定时间步关联的比例因子[^1]。 这种方法允许直接计算损失函数相对于输入图像 $x_0$ 的梯度,而不需要对随机噪声本身求导数。因此,可以有效地利用自动微分工具优化模型参数。 #### 实现代码示例 下面是一个基于PyTorch框架实现上述公式的简单例子: ```python import torch from torch.distributions import Normal def reparameterization_trick(x_0, alpha_t, sigma_t): """ 应用重参数化技巧生成带有时序t的样本xt 参数: x_0 (Tensor): 初始数据点 alpha_t (float or Tensor): 时间步t处的比例系数 sigma_t (float or Tensor): 噪声标准差 返回: xt (Tensor): 经过重参数化的样本 """ normal_dist = Normal(loc=0., scale=1.) epsilon = normal_dist.sample(sample_shape=x_0.shape).to(device=x_0.device) sqrt_alpha_t = torch.sqrt(alpha_t) xt = sqrt_alpha_t * x_0 + sigma_t * epsilon return xt ``` 此函数接收初始状态 `x_0` 及两个超参 `alpha_t`, `sigma_t` 并返回经过变换后的张量 `xt`。这里假设所有操作都在GPU上执行;如果是在CPU环境中,则无需指定设备属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值