DDPM中如何理解“L_simple在 t = 1 时近似 L_0 ” ?

如何理解“LsimpleL_{\text{simple}}Lsimplet=1t=1t=1 时近似 L0L_0L0” ?

这是一个非常微妙但关键的点。我们来彻底讲清楚 LsimpleL_{\text{simple}}Lsimplet=1t=1t=1 时近似 L0L_0L0 这句话背后的含义,以及什么是“关联”。

1. 回顾 L0L_0L0 项(精确的方法)

首先,我们明确 L0L_0L0 是什么:
L0=−log⁡pθ(x0∣x1)L_0 = -\log p_\theta(x_0 | x_1)L0=logpθ(x0x1)
其中 pθ(x0∣x1)p_\theta(x_0 | x_1)pθ(x0x1) 是通过那个离散解码器计算出来的:
pθ(x0∣x1)=∏i=1D∫δ−(x0i)δ+(x0i)N(x;μθi(x1,1),σ12)dxp_\theta(x_0|x_1) =\prod_{i=1}^D \int_{\delta_{-}(x_0^i)}^{\delta_{+}(x_0^i)} \mathcal{N}(x; \mu_\theta^i(x_1, 1), \sigma_1^2) dxpθ(x0x1)=i=1Dδ(x0

`#define MONTH (__DATE__ [2] == 'n' ? (__DATE__ [1] == 'a' ? 0 : 5) : __DATE__ [2] == 'b' ? 1 : __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M' ? 2 : 3) : __DATE__ [2] == 'y' ? 4 : __DATE__ [2] == 'l' ? 6 : __DATE__ [2] == 'g' ? 7 : __DATE__ [2] == 'p' ? 8 : __DATE__ [2] == 't' ? 9 : __DATE__ [2] == 'v' ? 10 : 11)` 是一个宏定义,用于从 `__DATE__` 这个预定义宏中提取月份信息,并将其转换为对应的数字表示。 `__DATE__` 是编译器提供的预定义宏,它会被替换为编译的日期字符串,格式为 `Mmm dd yyyy`,例如 `Jul 27 2012`。 下面详细解释这段代码的逻辑: - `__DATE__ [2] == 'n' ? (__DATE__ [1] == 'a' ? 0 : 5)`:如果 `__DATE__` 字符串的第 3 个字符是 `'n'`,则进一步判断第 2 个字符。如果第 2 个字符是 `'a'`,则月份为 0(代表 January);否则月份为 5(代表 June)。 - `__DATE__ [2] == 'b' ? 1`:如果 `__DATE__` 字符串的第 3 个字符是 `'b'`,则月份为 1(代表 February)。 - `__DATE__ [2] == 'r' ? (__DATE__ [0] == 'M' ? 2 : 3)`:如果 `__DATE__` 字符串的第 3 个字符是 `'r'`,则进一步判断第 1 个字符。如果第 1 个字符是 `'M'`,则月份为 2(代表 March);否则月份为 3(代表 April)。 - `__DATE__ [2] == 'y' ? 4`:如果 `__DATE__` 字符串的第 3 个字符是 `'y'`,则月份为 4(代表 May)。 - `__DATE__ [2] == 'l' ? 6`:如果 `__DATE__` 字符串的第 3 个字符是 `'l'`,则月份为 6(代表 July)。 - `__DATE__ [2] == 'g' ? 7`:如果 `__DATE__` 字符串的第 3 个字符是 `'g'`,则月份为 7(代表 August)。 - `__DATE__ [2] == 'p' ? 8`:如果 `__DATE__` 字符串的第 3 个字符是 `'p'`,则月份为 8(代表 September)。 - `__DATE__ [2] == 't' ? 9`:如果 `__DATE__` 字符串的第 3 个字符是 `'t'`,则月份为 9(代表 October)。 - `__DATE__ [2] == 'v' ? 10`:如果 `__DATE__` 字符串的第 3 个字符是 `'v'`,则月份为 10(代表 November)。 - `__DATE__ [2] == 'v' ? 10 : 11`:如果以上条件都不满足,则月份为 11(代表 December)。 以下是一个简单的示例代码,展示如何使用这个宏: ```c #include <stdio.h> #define MONTH (__DATE__ [2] == 'n' ? (__DATE__ [1] == 'a' ? 0 : 5) : __DATE__ [2] == 'b' ? 1 : __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M' ? 2 : 3) : __DATE__ [2] == 'y' ? 4 : __DATE__ [2] == 'l' ? 6 : __DATE__ [2] == 'g' ? 7 : __DATE__ [2] == 'p' ? 8 : __DATE__ [2] == 't' ? 9 : __DATE__ [2] == 'v' ? 10 : 11) int main() { printf("编译月份是: %d\n", MONTH); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值