问题设定:估计正态分布尾部概率
该例题要求计算当 且 时的 。该方法在正态分布提议分布 中搜索一种适用于该稀有事件概率的重要性抽样密度。
Patrick Laub · YouTube · 6:00
该 150——第二段演示了改进的交叉熵方法在估计以下具体问题中的应用:,其中笔记本首先定义零方差密度为给定稀有事件条件下的条件分布,然后通过对进行拒绝采样来获得个标准正态随机数,并仅保留满足152的超出样本。这些被保留的样本用于通过最大似然法拟合一个正态重要性采样提议分布,其中设为样本均值,设为样本二阶中心矩的平方根。最后一个单元格从拟合的提议分布中抽取个样本,计算似然比乘以事件指示函数,再取平均值得到,并使用`1.96 * oHat / sqrt(R)。打印结果是一个约为 的ICE估计值,其半宽约为 ,与理论值约 相比。 本150秒片段讲解原始交叉熵法——一种用于稀有事件估计的自适应方法,可替代直接拒绝采样。通过 Jupyter Notebook 示例,估计 ,其中 X ~ Normal(0,1)。主讲人首先指出,直接从理想建议分布采样通常过慢;随后逐步演示交叉熵循环:从当前建议分布抽样、计算95% 精英阈值、若达到 γ 则停止、保留精英样本、按似然比加权、更新建议分布参数。收敛后,视频使用学习到的建议分布执行最终重要性采样估计,并将结果与标准正态生存概率的精确值进行比较。 这段60秒的视频片段首先以笔记本形式讲解交叉熵稀有事件估计器,随后转向可视化该方法生成的提议分布。开头几秒展示的代码从正态提议分布中采样,计算似然比,并用指示函数 `(normals > γ)` 对其加权,最后打印出带有置信区间的交叉熵估计值及理论值。其余部分解释道:交叉熵方法将参数向量存储在列表 `vs` 中;通过遍历 `vs` 并在网格 `xs` 上计算正态概率密度函数,即可绘制出整组提议密度曲线。主讲人还在尾部区域 `` 上利用已知归一化常数 `l = stats.norm.sf(γ)` 构造目标曲线 `gStar`。最终执行得到的图像显示若干条呈钟形、颜色各异的提议曲线,整体向右移动且逐渐变窄,同时配有一条标记阈值的灰色虚线垂直线。
在学习检查器中查看要点和时刻,或切换阅读标签查看完整笔记。
依据视频画面与讲解整理,并非逐字语音转写。
该片段以标题为`改进的交叉熵方法`的Jupyter笔记本开启。可见的问题陈述要求估计,其中且,所用的重要性抽样分布形式为。叙述内容与此完全一致:它引入了一个简单的稀有事件示例,并指出目标是在正态分布族内寻找最优的重要性抽样密度。
主讲人简要向上滚动至显示Python导入语句及包版本的早期单元格。该部分不包含新数学内容;仅用于确立后续笔记本所使用的计算环境(`numpy`、`scipy`、`matplotlib`)。
回到主示例,笔记本指出关键的概念步骤:为从中抽样,可先生成大量普通值,再仅保留满足的那些样本。叙述中将称为零方差密度,并解释其恰好是在稀有事件发生条件下的分布。对应代码创建了一个带种子的随机数生成器,设定`**8`,调用`Xs = rng.normal(size=R)`生成正态样本,并以`Xs = Xs[Xs > gamma]`进行筛选。音频中明确称此为拒绝抽样。
执行后,输出显示`g* 样本数量:152`及`运行时间:12.6秒`。叙述者通过指出:在五亿次原始样本中,仅有152个被保留,来强调该事件的稀有性。从数学角度看,该输出正是标准正态变量在超过高阈值5条件下进行条件化的经验结果。
下一个单元格将重要性抽样提议分布拟合到保留下来的样本上。代码计算 `mu = np.mean(Xs)` 和 `sigma = np.sqrt(np.mean((Xs-mu)**2))`,而旁白将其描述为:在给定这些样本的前提下,对 和 求最大似然估计。换言之,该正态提议分布以超出阈值样本的经验均值为中心,以其经验二阶中心矩的平方根作为尺度参数。
最后一个单元格执行实际的重要性抽样估计。它重置 `**6`,从已拟合的提议分布中抽取 `normals = rng.normal(mu, sigma, R)`,并计算似然比:`stats.norm.pdf(normals, 0, 1) / stats.norm.pdf(normals, mu, sigma)`。这些比值乘以指示函数 `(normals > gamma)` 得到 `ests`,再对 `ests` 取均值得到 `lHat`。旁白指出,改进的交叉熵算法现已完成,并提供了一个良好的提议分布;随后,他们基于常规的重要性抽样进行估计,并输出估计值及其置信区间。
输出块给出数值结论:`ICE 估计值:2.8499557494141556e-07 (+/- 8.28267698086911e-10)`,`ICE 下界:2.841672802433268e-07`,`ICE 上界:2.8582381563950423e-07`,以及`理论值:2.866515718791933e-07`。代码还计算 `oHat = ests.std()` 和 `widthCI = 1.96 * oHat / np.sqrt(R)`,因此所打印的区间关于 `lHat` 对称。旁白将此总结为:该稀有事件概率约为 ,区间宽度量级为 ,并称其精度令人印象深刻地小。
本片段开篇即对比当前方法与先前的一个例子。主讲人指出,早先的方法‘有点取巧’,因为该稀有事件其实并不十分稀有,因此可直接从出发,通过拒绝采样进行采样。其数学要点在于:对更稀有的事件而言,直接从理想建议分布中采样通常不具备可扩展性。
为避免这一瓶颈,视频引入了原始交叉熵方法。其核心思想是自适应的:不试图一步猜出一个完美的建议分布,而是构建一系列逐步改进的建议分布,直至其中某一个足以良好覆盖稀有事件区域。
随后澄清笔记本中的符号约定:向量 `u` 存储原始分布的参数,此处为标准正态分布;`v` 存储当前建议分布的参数;`vs` 则记录各次迭代中建议分布参数的序列。由此确立目标分布与自适应采样分布之间的区别。
在循环内部,算法首先从当前建议分布抽取 个样本。然后计算迭代阈值 作为经验 分位数,等价于 -分位数,其中 。如果 ,则自适应过程停止;否则,将高于 的样本视为精英样本。
对于这些精英样本,代码构造似然比,其中为原始标准正态密度函数,为当前建议分布的密度函数。这些权重至关重要:参数更新并非对精英样本的简单平均,而是基于似然比加权的建议分布参数精调。
随后将建议分布更新为,其中由精英样本加权平均得到,则由加权二阶矩表达式计算得出。主讲人将此描述为基于精英样本的最大似然更新;但所展示的方差公式以 `eliteXs.mean()` 为中心,而非 `mu_i`;该细节需对照预期教材推导加以核实。
交叉熵循环结束后,方法由自适应阶段转入估计阶段:从最终建议分布中抽取一百万个新样本,重新计算似然比,并通过对取平均来估计稀有事件概率。这是一个标准的重要性采样估计量,其建议分布由交叉熵搜索过程发现。
打印结果给出的交叉熵估计值约为 ,其近似半宽约为 ,与理论值 (来自 `stats.norm.sf(5)`)相比。主讲人强调,该估计值在量级上接近真实值,但置信区间的宽度相对较宽,数量级为 。
视频片段从一个实现交叉熵风格估计器的笔记本单元格开始。可见代码从参数为 `v[10]` 和 `v[6]` 的正态提议分布中抽取 `]` 且 `v[1` 个样本,计算参数为 `u` 和 `v` 的正态密度之间的似然比,将这些比值乘以稀有事件指示器 `(normals > γ)`,然后对结果取平均以得到 `fHat`。置信区间半宽计算为 `widthCI = 1.96 * oHat / np.sqrt(R)`。输出块报告 `CE estimate: 2.8433488092847927e-07 (+/- 1.1057152778688466e-08)` 和 `理论值:2.866515718791933e-07`, 因此该数值示例直接将蒙特卡洛估计值与理论基准值进行比较。
随后页面向下滚动至一个新的代码单元格,其目的偏重几何直观而非数值计算。这一转换表明讨论重点正从单一的概率估计转向该方法所使用的提议分布的形状及其演化过程。
主讲人说:“我们来可视化交叉熵方法构建的一系列提议分布。”下方代码创建网格 `xs = np.linspace(-2, 6.5, 500)` 并分配数组 `ys = np.empty((len(xs), len(vs)))`。其中关键的数学思想是:每个已存储的参数向量 `v` 定义了一个正态提议密度;在统一的 x 网格上对该密度求值,便可在同一张图中直接比较不同提议分布。
讲解继续指出,在交叉熵运行过程中,算法将 `v` 向量存储在一个名为 `vs` 的列表中。因此 `vs` 不仅是辅助性的记录工作,更是该方法自适应提议分布序列的完整轨迹记录。通过对 `vs` 进行循环,即可复现该方法在参数空间中所走过的路径。
循环内部,代码使用 `for i, v in enumerate(vs): ys[:,i] = stats.norm.pdf(xs, v[0], v[1])`。从数学角度看,`ys` 的第 `i` 列是在网格 `xs` 上采样的函数 ,其中 表示均值为 `v[0]`、标准差为 `v[1]` 的正态概率密度函数。因此,将所有列一同绘图,即可叠加显示整组提议密度函数的序列。
主讲人明确解释了该编程结构:`enumerate` 同时返回索引 `i` 和元素 `v`。这一点在此处至关重要,因为索引标明了交叉熵方法的哪一次迭代生成了哪一个提议向量,从而确保可视化序列能按正确顺序排列。
代码单元格的最后一部分构建了用于对比的目标曲线。首先,通过 `xOverGamma = xs[xs > γ]` 将网格限制在尾部区域;接着,将归一化常数设为 `l = stats.norm.sf(γ)`,所绘制的目标密度为 `gStar = stats.norm.pdf(xOverGamma) / l`。换言之,图中展示的目标分布是标准正态密度在 `γ` 以上区域的条件分布,并经重新归一化,使其在该尾部区域上的积分等于一。
执行该单元格后,代码下方会出现一幅图像。图中包含若干条彩色钟形曲线,对应于各次迭代的提议分布,另有一条灰色虚线垂直标记阈值 `γ`。直观可见,随着序列推进,这些曲线整体右移且逐渐变窄,形象展示了交叉熵方法如何将提议分布逐步调整至稀有事件区域。归一化后的目标曲线也在同一尾部区域上绘制,从而实现学习所得提议分布与目标密度之间的直接比较。
该例题要求计算当 且 时的 。该方法在正态分布提议分布 中搜索一种适用于该稀有事件概率的重要性抽样密度。
笔记本将理想密度定义为 ,即在稀有事件发生条件下 的条件分布。该密度可使重要性抽样估计量的方差为零。
由于 仅为原始分布以 为条件后的结果,视频中先生成大量标准正态随机数,再仅保留超过阈值的那些样本。代码实现为 `Xs = rng.normal(size=R)`,随后执行 `Xs = Xs[Xs > gamma]`,其中 。
执行后的笔记本报告称,仅有 152 个样本通过了过滤器,而原始抽取样本数为 。这一极小的接受数量说明了直接模拟对于此类稀有事件为何效率低下。
保留下来的个样本用于拟合建议分布。代码设置 `mu = np.mean(Xs)` 和 `sigma = np.sqrt(np.mean((Xs-mu)**2))`,旁白指出这两个量是正态建议分布参数的最大似然估计。
使用拟合的建议分布,最终单元格从 中抽取 个样本,计算似然比 ,乘以事件 的示性函数,并对结果取平均以得到 `lHat`。
代码计算 `oHat = ests.std()` 和 `widthCI = 1.96 * oHat / np.sqrt(R)`,然后输出上下界 `lHat-widthCI` 和 `lHat+widthCI`。因此,`widthCI` 是以估计值为中心的对称区间的半宽。
输出的估计值约为,半宽约为;而标准正态分布的生存概率在5处的理论值约为。旁白强调该区间半宽极小,以此说明该方法的高效性。
视频开头指出,先前的例子‘取巧’了,因为该稀有事件并不十分罕见,从而可以通过拒绝采样直接从中采样。而对于真正稀有的事件,这条路径通常耗时过长,因此需要改用自适应方法。
原始交叉熵方法构建一系列逐步改进的建议分布。该过程在某个建议分布已足够好、可用于估计稀有事件概率时停止。
`u` 存储原始分布的参数,此处为标准正态分布的;`v` 存储当前建议分布的参数;`vs` 在交叉熵迭代过程中累积历次的建议参数向量。
在每次迭代中,从当前提议分布中抽取 个样本。计算 作为经验 -分位数,其中 ,因此这是 % 的阈值。如果 95,则停止;否则将高于 的样本保留为精英样本。 as elites.
对精英样本,按原始密度与当前建议密度之比计算权重。主讲人明确提醒:更新建议分布参数时,必须使用这些似然比。
下一个提议分布的均值和尺度参数由加权精英样本摘要计算得出:均值是精英样本的加权平均值;尺度参数是一个加权的标准差型量。口述描述称此为最大似然更新,而屏幕上显示的方差公式在平方偏差中使用了 `eliteXs.mean()`。
一旦交叉熵循环结束,便使用收敛后的提议分布进行常规的重要性抽样:从最终提议分布中重新抽取样本,将稀有事件指示器乘以似然比,再取平均值以估计尾部概率。
对于 和 ,屏幕上显示的估计值约为 ,其近似置信半宽约为 ,而正态生存函数给出的理论值为 。
首个笔记本单元格实现了一种稀有事件估计器:从正态提议分布中抽样,计算两个正态密度之间的似然比,并乘以事件 `normals > γ` 的指示函数。该估计量即为这些加权指示函数的样本均值;代码还利用 `1.96 * oHat / np.sqrt(R)` 报告了一个近似的置信半宽。输出结果将该估计值与理论值进行了对比。
可见输出为 `CE estimate: 2.8433488092847927e-07 (+/- 1.1057152778688466e-08)` 和 `Theoretical: 2.866515718791933e-07`。本例同时展示了同一稀有事件概率的随机估计结果与确定性基准值。
主讲人解释道,在交叉熵方法运行过程中,它将参数向量 `v` 存入名为 `vs` 的列表中。`vs` 中的每个元素代表自适应序列中的一个提议分布,因此遍历 `vs` 即可复现该方法在各次迭代中的演化过程。
为可视化这些提议分布,代码构建网格 `xs = np.linspace(-2, 6.5, 500)`,并填充矩阵 `ys`,其各列分别对应每个已存储向量 `v` 所定义的正态概率密度函数。因此,循环 `for i, v in enumerate(vs): ys[:,i] = stats.norm.pdf(xs, v[0], v[1])` 将参数的历史记录转化为可相互比较的密度曲线。
讲解明确指出,`enumerate` 是一个便捷函数,它同时返回索引 `i` 和元素 `v`。在此上下文中,索引标识了存储序列中某个提议所处的位置,而 `v` 则提供该提议对应的正态分布参数。
图中绘制的目标曲线仅基于尾部区域 `` 构建。代码首先选取 `xOverGamma = xs[xs > γ]`,然后计算 `l = stats.norm.sf(γ)`,最后定义 `gStar = stats.norm.pdf(xOverGamma) / l`。讲解者指出,在这一简单情形下,`l` 即为已知的归一化常数。
执行完毕后,图像中显示多条不同颜色的钟形提议曲线,以及一条位于阈值处的灰色虚线。视觉模式表明这些提议曲线正逐渐向右移动并变窄,直观呈现了对稀有事件区域的自适应过程,并支持在相同坐标轴上与目标密度进行对比。
按知识点查看条件、步骤和证据。补充解释与视频直接内容分别标明。
笔记本文本中写明 `gamma = 5`,而题目陈述中使用了 `P(X > gamma)`。
讲述者指出,该例题估算标准正态变量超过一个较大阈值 gamma 的情形。
定义稀有事件 的阈值。
实数;在本例中为 。
笔记本中写明 `X ~ Normal(0, 1)`。
讲述者所指为标准正态变量。
X
其超出概率正被估算的随机变量。
对应的式子为:。
笔记本中写为 `( | X > gamma)`。
讲述者称其为零方差密度 ,并解释为在稀有事件发生条件下 的分布。
屏幕上显示的记号对连续型随机变量使用了 `P( | X > gamma)`;视频未讨论这一记号问题。
g^*
零方差重要性抽样密度,等于 在给定 条件下的条件分布。
在处的密度值。
代码在关于拟合重要性采样提议分布的注释下计算 `mu = np.mean(Xs)`。
讲述者称,该提议密度是通过求 mu 和 sigma 的最大似然估计而构造的。
所拟合的正态重要性采样提议分布的均值参数。
由保留下来的个样本估计出的实数。
代码计算 `sigma = np.sqrt(np.mean((Xs-mu)**2))`。
讲述者称,该提议密度是通过求 mu 和 sigma 的最大似然估计而构造的。
所拟合的正态重要性采样提议分布的标准差参数。
由保留下来的个样本估计出的正实数。
首个模拟单元格在调用 `rng.normal(size=R)` 前设置 `**8`。
讲述者称,他们模拟了五乘以十的八次方个 X 样本。
R
用于拒绝采样以获得个样本的原始标准正态随机数个数。
在第一个单元格中,。
最终估计单元格在绘制 `normals = rng.normal(mu, sigma, R)` 之前设置 `**6`。
同一符号名 `R` 在后续单元格中被重复使用,但取值不同。
R
从拟合的重要性抽样建议分布中抽取的样本数量。
在最后一个单元格中,。
代码计算 `lrs = stats.norm.pdf(normals, 0, 1) / stats.norm.pdf(normals, mu, sigma)`。
讲解者表示他们将采用正态重要性抽样估计法继续进行。
lrs
在建议样本处计算的似然比(重要性权重)。
每个抽样得到的 `normals` 点对应的正实数值。
代码计算 `ests = lrs * (normals > gamma)`。
ests
稀有事件的加权指示估计值:当建议样本超过时,该值等于似然比;否则为零。
非负实数数组。
代码计算 `lHat = ests.mean()` 并打印 `ICE 估计值`。
讲述者称他们打印出概率估计量 L 帽。
的重要性抽样估计量,计算为数组 `ests` 的样本均值。
实数;打印出的值约为 。
代码计算 `oHat = ests.std()`。
加权估计量数组 `ests` 的样本标准差,用于构造置信区间的半宽。
非负实数。
代码计算 `widthCI = 1.96 * oHat / np.sqrt(R)`。
讲述者称该估计量的置信区间宽度数量级为十的负十次方。
代码将该量标记为 `widthCI`,但数值上它是对称区间的半宽,因为它被加到和减去 `lHat`。
widthCI
重要性抽样估计量所报告置信区间的半宽。
正实数;打印出的值约为 。
笔记本标题为“改进的交叉熵法”,正文写道:“使用改进的交叉熵法估计 P(X > gamma),其中 X ~ Normal(0, 1),且 gamma = 5。考虑形式为 Normal(mu, sigma^2) 的重要性抽样分布。”
讲解者引入一个简单例子,用于估计标准正态变量超过较大阈值 gamma 的概率,并表示将在正态分布族中寻找最优的重要性抽样密度。
该片段将目标量定义为标准正态随机变量的超越概率,其中,并将重要性抽样建议分布族限定为以为参数的正态分布。
原始分布是标准正态分布。
稀有事件是。
建议分布族被限定为正态分布。
笔记本正文写道:“首先,为从 ( | X > gamma) 中抽样,只需大量抽取 X 并筛选出满足 X > gamma 的样本。”
讲解者指出第一步是从零方差密度中抽样,即在稀有事件发生条件下的分布。
所显示的公式对连续型变量使用了 `P( | X > gamma)`;视频未对此记号加以说明。
视频指出,理想的重采样重要性密度是当稀有事件发生时的条件分布,即给定时的条件分布。该密度可使重要性采样估计量的方差为零。
适用于稀有事件概率。
仅在事件区域上有定义。
代码单元格执行 `Xs = rng.normal(size=R)`,随后执行 `Xs = Xs[Xs > gamma]`。
讲述者表示,他们可以生成大量 X 的样本,然后仅保留那些超过阈值的样本,并明确将此过程称为拒绝采样。
由于是在给定条件下的条件分布,视频通过生成大量原始标准正态随机变量并仅保留其中大于阈值的那些,来近似获得个样本。所保留的子集随后被视作来自的样本。
要求能直接从原始分布中采样。
接受规则为。
所保留的样本用于估计提议分布的参数。
代码在注释 `# 将我们的重要性采样提议分布拟合到这些 g* 样本` 下计算 `mu = np.mean(Xs)` 和 `sigma = np.sqrt(np.mean((Xs-mu)**2))`。
讲述者表示,他们通过针对这些样本求出 mu 和 sigma 的最大似然估计,来构建重要性采样提议密度。
在获得来自 的样本后,视频通过将提议分布的均值设为样本均值、标准差设为这些保留样本的二阶中心矩的平方根,来拟合一个正态重要性采样提议分布。
所拟合的提议分布族是正态分布。
用于拟合的数据是满足 的保留样本。
对 的估计量采用除以 的方式,与代码 `np.mean((Xs-mu)**2)` 一致,而非无偏样本方差。
代码计算 `lrs = stats.norm.pdf(normals, 0, 1) / stats.norm.pdf(normals, mu, sigma)`,然后计算 `ests = lrs * (normals > gamma)`,最后计算 `lHat = ests.mean()`。
讲述者表示,改进的交叉熵算法已全部完成,并提供了一个良好的重要性采样提议分布;随后他们执行标准正态重要性采样估计,并输出概率估计值 L hat。
利用所拟合的提议密度,视频通过对从该提议分布中抽取的样本,计算似然比与稀有事件指示函数的乘积并取平均,来估计稀有事件概率。这是标准重要性采样估计量在指示事件 上的特例。
是标准正态密度。
是拟合的正态建议密度。
样本是从中抽取的,而非从中抽取。
事件指示器为。
代码计算 `oHat = ests.std()` 和 `widthCI = 1.96 * oHat / np.sqrt(R)`,然后将上下界分别打印为 `lHat-widthCI` 和 `lHat+widthCI`。
视频未口头说明使用1.96的理由,也未陈述该区间背后所依赖的正态近似假设。
笔记本报告了一个以估计值为中心的对称区间,其半宽为1.96乘以加权估计量的样本标准差,再除以建议样本数量的平方根。因此,打印出的上下界为`widthCI`。
使用`ests`的样本标准差。
在最后一个单元格中,使用的与建议样本数量相同。
该区间仅作为数值摘要呈现;视频未推导其覆盖性质。
讲话者指出,原始交叉熵方法旨在规避直接拒绝抽样耗时过长的问题。
Markdown 标题为 `交叉熵方法`,并说明 `使用交叉熵方法估计 P(X > gamma),其中 X ~ Normal(0, 1),且 gamma = 5`。
本视频介绍了原始的交叉熵方法,它是一种用于罕见事件概率估计的自适应蒙特卡洛策略。该方法并不直接从目标建议分布中采样,而是构建一系列建议分布,通过迭代不断改进,直至得到一个足以估计的建议分布。
当直接从一个优良的建议分布中采样不切实际或速度过慢时使用。
此处将其应用于估计正态随机变量的尾部概率。
主讲人指出,其思想是构建一系列越来越优的建议分布,并在获得一个足够优良的建议分布时停止。
交叉熵方法构建一系列建议分布,而非依赖单一固定建议分布。每次迭代都会调整参数,使建议分布在罕见事件区域中更加有效;当建议分布被认为已足够好时,过程即终止。
需要一个建议分布参数的更新规则。
停止准则基于当前迭代是否达到目标罕见事件水平。
Markdown 中写道:`使用交叉熵方法估计 P(X > gamma),其中 X ~ Normal(0, 1),且 gamma = 5`。
代码中设置 ``,并与 `stats.norm.sf(gamma)` 进行比较。
该例题估算上尾概率在处的取值。原始分布由``编码,理论基准则通过`stats.norm.sf(gamma)`计算得到。
原始分布是标准正态分布。
目标事件是超过一个固定阈值。
主讲人说,一旦交叉熵(CE)优化完成,他们就采用其找到的建议分布,执行一次常规的重要抽样估计。
第二个代码单元格采样 `normals = rng.normal(v[0], v[1], R)` 并计算 `ests = lrs * (normals > gamma)`。
在交叉熵循环确定建议分布后,视频对该建议分布单独执行一次重要抽样估计:从收敛后的正态建议分布中抽取样本,计算这些样本相对于原始分布的似然比,并用这些权重对稀有事件的示性函数取加权平均。
使用交叉熵循环结束后保存在 `v` 中的最终建议分布参数。
需要计算原始分布与建议分布密度之间的似然比。
可见代码计算 `lrs`,然后计算 `ests = lrs * (normals > γ)`,再计算 `fHat = ests.mean()` 和 `widthCI = 1.96 * oHat / np.sqrt(R)`。
输出显示 `CE 估计值`、`CE 下界`、`CE 上界` 和 `理论值`。
本片段展示了一种蒙特卡洛实现:从正态建议分布中抽取样本,计算两个正态密度之间的似然比,并将这些似然比乘以稀有事件 `normals > γ` 的示性函数。该估计量即为这些加权示性函数的样本均值;而近似置信区间则由样本标准差除以 `sqrt(R)` 后再乘以 1.96 构成。
样本从参数为 `v[0]`、`v[1]` 的正态建议分布中抽取。
似然比使用参数分别为 `u` 和 `v` 的正态密度。
稀有事件由阈值 `γ` 定义。
`R` 是样本数量。
主讲人说:“我们来可视化交叉熵方法所构建的建议分布序列。”
代码遍历 `vs`,并执行赋值 `ys[:,i] = stats.norm.pdf(xs, v[0], v[1])`。
后续图表展示了多条彩色钟形曲线,它们整体向右平移且逐渐变窄。
主讲人解释道,交叉熵法将每个参数向量 `v` 存储在一个名为 `vs` 的列表中;通过遍历 `vs`,并在固定网格 `xs` 上逐个计算 `stats.norm.pdf(xs, v[0], v[1])`,即可绘出算法运行过程中生成的全部提议密度函数序列。
`vs` 包含已存储的提议分布参数向量。
`xs` 是一个固定的 x 值网格。
叙述者说:`改进的交叉熵算法现已完成,它为我们提供了一个良好的重要性抽样建议分布。`
称该建议分布“良好”是一种定性判断,本片段中并未辅以正式判据。
在将拟合到保留的个样本后,改进的交叉熵过程生成了用于估计的重要性抽样建议分布。
稀有事件模型是,目标是。
来自的样本已通过拒绝抽样获得。
已通过最大似然法将一个正态建议分布拟合到这些样本上。
针对本笔记本片段中的示例。
输出块显示 `ICE估计值:2.8499557494141556e-07 (+/- 8.28267698086911e-10)` 和 `理论值:2.866515718791933e-07`。
讲解者称该稀有事件的概率为二点八乘以十的负七次方,且该估计的置信区间宽度约为十的负十次方量级。
口语中所说的“二点八乘以十的负七次方”是对屏幕上显示值的四舍五入;精确的显示估计值可见于屏幕。
对于本例,稀有事件概率的重要性抽样估计值约为,报告的半宽约为,理论基准值约为。
对应的式子为:。
该方案的拟合过程如笔记本中所述。
最终估计使用了个方案样本。
针对输出单元格中展示的具体模拟。
主讲人指出,在先前的例子中,他们某种程度上‘取巧’了,因为该稀有事件并不足够稀有,因此能直接用拒绝抽样法从 g* 中抽样;但一般情况下,这种方法耗时过长。
当稀有事件足够稀有时,直接通过拒绝抽样法从理想建议分布中抽样在计算上是不可行的。
目标事件稀有到直接从理想建议分布接受样本已变得低效。
一般性实用主张,仅用口头语言陈述,未给出形式化证明。
说话者称,本次迭代的阈值设定为X样本的95%分位数;若该值高于整体目标gamma,则停止迭代。
代码显示`gamma_i = np.quantile(Xs, 1-p)`及`if gamma_i >= gamma: break`,其中``。
在此实现中,当经验精英阈值至少达到目标阈值时,迭代停止。
样本`Xs`从当前提议分布中抽取。
``,因此``。
目标阈值为`gamma = 5`。
对于每次迭代,若成立,则跳出循环。
说话者称,他们将v参数更新为精英样本的最大似然估计,并且必须按其似然比对样本加权。
代码使用`weights=eliteLRs`对`mu_i`和`sigma_i`计算加权平均值。
口头说明中称采用最大似然估计,但所展示的方差公式以`eliteXs.mean()`为中心,而非`mu_i`。
下一组提议参数通过精英样本及其似然比权重得到:均值采用加权平均更新,尺度则采用一种加权标准差形式的表达式更新。
精英样本是指取值高于的样本。
似然比定义为原始密度除以提议密度。
在每次交叉熵迭代中、更新`v`之前应用。
说话人说:‘因为在此非常简单的情形下,我们已知其归一化常数 l。’
代码设定 l = stats.norm.sf(γ)。
对于此处绘制的目标分布,其归一化常数已知,且等于 l = stats.norm.sf(γ)。
本例采用标准正态分布作为基线密度函数。
目标分布被限制在尾部区域 上。
在此特定的简单情形下。
笔记本文字说明:‘要从 ( | X > gamma) 中抽样,只需大量生成 X 的样本,再从中提取满足 X > gamma 的那些样本。’
讲解者指出,由于是在稀有事件发生条件下的分布,因此可以大量生成的样本,仅保留其中超过阈值的样本。
从零方差密度的定义出发,即在稀有事件发生条件下的条件分布。
笔记本文字与讲解均明确了。
生成一批大量未加条件的标准正态分布样本。
该操作通过代码 `Xs = rng.normal(size=R)` 实现。
仅保留满足的样本。
该操作通过代码 `Xs = Xs[Xs > gamma]` 实现,并以口头描述方式表述为‘保留超过阈值的那些样本’。
将保留下来的样本视为来自的样本。
根据定义,将随机变量以事件为条件进行处理,恰好得到该拒绝规则下被接受样本的分布。
从原始标准正态分布出发进行拒绝采样,可生成服从条件密度的样本,该密度用于拟合提议分布。
代码首先计算 `mu = np.mean(Xs)` 和 `sigma = np.sqrt(np.mean((Xs-mu)**2))`,然后从正态分布中采样 `normals = rng.normal(mu, sigma, R)`,再计算 `lrs`、`ests`、`lHat`、`oHat` 和 `widthCI`。
讲解者指出,提议密度是通过 mu 和 sigma 的最大似然估计构造的;随后,他们采用正态重要性采样法进行估计,并输出估计值与置信区间。
视频未明确写出所要最大化的似然函数;最大似然估计的解释是结合讲解内容及样本均值、样本二阶中心矩公式推断得出的。
利用保留下来的个样本,通过样本均值和样本二阶中心矩的平方根来估计正态提议分布的参数。
代码实现了 `mu = np.mean(Xs)` 和 `sigma = np.sqrt(np.mean((Xs-mu)**2))`;讲解者称这些为最大似然估计。
绘制 个来自拟合的正态建议分布 。
由 `normals = rng.normal(mu, sigma, R)` 实现。
对每个提议样本,使用标准正态密度作分子、拟合的正态密度作分母,计算似然比。
通过 `lrs = stats.norm.pdf(normals, 0, 1) / stats.norm.pdf(normals, mu, sigma)` 实现。
将每个似然比乘以样本超过阈值的示性函数,得到 `ests = lrs * (normals > gamma)`。
这是事件概率 的重要性抽样被积函数。
对 `ests` 取平均得到 `lHat`,并用其样本标准差与 `1.96 / sqrt(R)` 一起计算所报告置信区间的半宽。
通过 `lHat = ests.mean()`、`oHat = ests.std()` 和 `widthCI = 1.96 * oHat / np.sqrt(R)` 实现。
拟合出的建议分布随后用于标准的重要性抽样估计量,笔记本同时报告点估计值和对称置信区间。
主讲人逐步讲解该循环:从当前提议分布采样,计算本次迭代的阈值,若其超过gamma则停止;否则提取精英样本,计算似然比,并更新v。
代码块展示了从`for i in range(maxIter):`到`vs.append(v)`的完整循环。
在第次迭代中,从当前由`v`参数化的提议分布中抽取一批共个样本。
代码中体现为`Xs = rng.normal(v[0], v[1], R)`,主讲人口头描述为“从当前提议分布中采样”。
将本次迭代的阈值计算为所采样本批次的经验-分位数。
代码中体现为`gamma_i = np.quantile(Xs, 1-p)`;主讲人指出这是95%阈值,因为``。
如果精英阈值已达到或超过目标稀有事件水平,则终止自适应循环。
在代码中体现为 `if gamma_i >= gamma: break`,并以口头形式表述为停止规则。
否则,选择精英样本,即当前位于迭代阈值之上的那些样本。
在代码中体现为 `eliteXs = Xs[Xs > gamma_i]`,并以口头形式描述为提取出高于 gamma i 的精英 Xs。
对每个精英样本,计算原始分布与当前提议分布之间的似然比。
在代码中体现为 `eliteLRs = stats.norm.pdf(eliteXs, u[0], u[1]) / stats.norm.pdf(eliteXs, v[0], v[1])`;讲话者明确称其为似然比。
将提议均值更新为精英样本的加权平均值。
在代码中体现为 `mu_i = np.average(eliteXs, weights=eliteLRs)`,并以口头形式解释为基于精英样本的最大似然估计。
根据精英样本的加权二阶矩更新提议尺度参数。
在代码中体现为 `sigma_i = np.sqrt(np.average((eliteXs-eliteXs.mean())**2, weights=eliteLRs))`。
用更新后的参数对替换当前提议参数,并将新的参数向量记录到历史列表中。
在代码中体现为 `v = (mu_i, sigma_i)`,随后执行 `vs.append(v)`。
所展示的算法通过阈值筛选样本、按似然比对精英点赋权,并更新提议分布参数,迭代地将正态提议分布调整至稀有事件区域,直至精英阈值达到目标水平。
讲话者指出,一旦交叉熵(CE)算法完成,他们便采用其找到的提议分布,执行一次常规的重要抽样估计。
第二个代码单元格计算 `normals`、`lrs`、`ests`、`fHat`、`oHat` 和 `widthCI`,然后将它们连同 `stats.norm.sf(gamma)` 一并打印输出。
自适应完成后,从存储在 `v` 中的最终提议分布中重新抽取一批新鲜样本。
在代码中体现为 `normals = rng.normal(v[0], v[1], R)`,并以口头方式描述为执行一次常规的重要抽样估计。
针对原始分布与最终提议分布的密度函数,为这批新鲜样本计算似然比。
在代码中体现为 `lrs = stats.norm.pdf(normals, u[0], u[1]) / stats.norm.pdf(normals, v[0], v[1])`。
将每个似然比乘以该样本是否超过目标阈值的示性函数,从而构造加权的稀有事件贡献项。
在代码中体现为 `ests = lrs * (normals > gamma)`。
将加权示性函数的样本均值作为稀有事件概率的估计值。
在代码中体现为 `fHat = ests.mean()`。
使用加权项的样本标准差,报告一个近似的95%置信半宽。
代码中体现为 `oHat = ests.std()` 和 `widthCI = 1.96 * oHat / np.sqrt(R)`。
将蒙特卡洛估计值与标准正态分布的精确生存函数进行比较。
代码中体现为 `print(f"理论值:这条公式需要核验,请通过页面反馈入口报告。")`。
最终数值估计由收敛后的提议分布进行普通重要性抽样得到,并附有近似置信区间,以及与理论尾部概率的直接对比。
代码行展示了抽样、似然比计算、按 (normals > γ) 加权、求均值、计算标准差以及置信区间宽度。
输出行显示了 CE 估计值、上下界以及理论值的数值结果。
从均值为 v[0]、标准差为 v[1] 的提议正态分布中抽取 R 个样本。
直接在代码单元格中显示。
在每个采样点处,计算参数为 `u` 的正态密度与参数为 `v` 的建议密度之间的似然比。
直接在代码单元格中显示。
将每个似然比乘以稀有事件 `normals > γ` 的示性函数。
直接在代码单元格中显示。
取样本均值作为概率估计值,样本标准差作为变异性度量,并构造一个近似的95%置信半宽。
直接在代码单元格中显示。
打印输出给出数值估计值、区间半宽以及理论对比值。
直接在输出块中可见。
可见代码实现了一个基于似然比加权的蒙特卡洛估计器,并同时报告了估计值和理论对比值。
主讲人说:‘如果我们遍历这个列表,就可以在某个 x 值网格上计算每个建议分布的概率密度函数。’
代码显示 `xs = np.linspace(-2, 6.5, 500)`, `ys = np.empty((len(xs), len(vs)))`, 以及 `ys[:,i] = stats.norm.pdf(xs, v[0], v[1])`。
创建一个固定的网格,包含500个x值,范围大致从-2到6.5。
直接在代码单元格中展示。
分配一个矩阵,用于存储每个提议分布对应的一列概率密度函数(PDF)值。
直接在代码单元格中展示。
对每个已存储的参数向量`v`,在同一网格上计算其正态分布PDF,并将结果存入第`i`列。
直接在代码单元格中展示,并在音频中加以说明。
将所有已存储的列对齐公共x网格作图,生成多条重叠的提议曲线。
直接在代码单元格中展示。
提议分布图是通过对每个已存储的正态密度函数在共享x网格上求值,并将所有曲线一同绘制而得到的。
代码展示了`xOverGamma = xs[xs > γ]`、`l = stats.norm.sf(γ)`、`gStar = stats.norm.pdf(xOverGamma) / l`以及`plt.plot(xOverGamma, gStar)`。
主讲人表示将绘制目标分布`g star`,因为其归一化常数`l`是已知的。
将绘图网格限制在尾部区域,即满足 `` 的范围。
直接在代码单元格中展示。
将归一化常数计算为标准正态分布的生存函数在 `γ` 处的取值。
直接在代码单元格中展示,并在音频中标识为已知的归一化常数。
通过除以 `l`,对尾部区域上的标准正态密度进行归一化。
直接在代码单元格中展示。
在尾部区域上绘制所得的归一化目标密度曲线。
直接在代码单元格中展示。
图中所示的目标曲线,是将标准正态密度限制在 `` 区域后、再以 `l = stats.norm.sf(γ)` 归一化所得。
笔记本给出了完整的示例:估计 `P(X > gamma)`,其中 `X ~ Normal(0, 1)` 且 `gamma = 5`,所用建议分布形式为 `Normal(mu, sigma^2)`。
讲解者将此作为非常简单的例子,用以演示改进的交叉熵方法。
估计 对于 ,使用 通过改进的交叉熵法和正态重要性抽样建议分布。
对应的式子为:。
对应的式子为:。
提议分布族为。
首次拒绝采样批次大小为。
最终重要性采样批次大小为。
获得稀有事件概率的数值估计值及其置信区间,并与理论值进行比较。
将阈值设为。
如笔记本单元格 `gamma = 5` 中所示。
生成个标准正态样本,并仅保留大于的样本。
通过 `Xs = rng.normal(size=R)` 和 `Xs = Xs[Xs > gamma]` 实现;讲解者称此为拒绝采样。
保留的样本数量为152。
输出行显示为 `Number of g* samples: 152`。
利用这152个保留样本的样本均值和样本二阶中心矩的平方根,拟合一个正态提议分布。
通过 `mu = np.mean(Xs)` 和 `sigma = np.sqrt(np.mean((Xs-mu)**2))` 实现;讲解中指出这是最大似然估计。
从拟合的正态提议分布中抽取个样本。
通过 `**6` 和 `normals = rng.normal(mu, sigma, R)` 实现。
计算似然比和加权指示变量,然后取平均值得到估计量。
通过 `lrs = stats.norm.pdf(normals, 0, 1) / stats.norm.pdf(normals, mu, sigma)`、`ests = lrs * (normals > gamma)` 和 `lHat = ests.mean()` 实现。
报告估计值、置信区间上下界以及理论基准值。
输出行显示 `ICE estimate`、`ICE low bound`、`ICE upp bound` 和 `Theoretical`。
笔记本打印 `ICE estimate: 2.8499557494141556e-07 (+/- 8.28267698086911e-10)`、`ICE low bound: 2.841672802433268e-07`、`ICE upp bound: 2.8582381563950423e-07` 和 `Theoretical: 2.866515718791933e-07`。
该估计值将直接与同一输出块中打印的理论标准正态生存概率进行比较。
Markdown 明确任务:估计 `P(X > gamma)`,其中 `X ~ Normal(0, 1)`,且 `gamma = 5`。
第一个代码单元格实现了交叉熵循环,参数为 `**5`、``、`maxIter = 50`、``,以及 ``。
第二个代码单元格执行最终的重要性抽样,参数为 `**6`,并打印结果。
主讲人解释了该循环、停止规则、似然比、参数更新,以及最终的重要性抽样估计。
收敛后精确的中间提议分布参数在本片段可见输出中未以数值形式展示。
所显示的方差更新使用了 `eliteXs.mean()` 而非 `mu_i`,导致其与口头描述的最大似然估计存在微小不一致。
使用交叉熵法估计稀有事件概率,其中且。
原始分布参数 ``。
初始建议分布 ``。
交叉熵循环的抽样规模 `**5`。
精英比例 ``。
最大迭代次数 `maxIter = 50`。
最终重要性抽样的样本规模 `**6`。
目标阈值 `gamma = 5`。
计算的蒙特卡洛估计值,获得近似置信区间,并与理论值进行比较。
将建议分布初始化为原始的标准正态分布。
在代码中体现为 `` 之后执行 ``。
最多运行50次自适应迭代。
代码中体现为 `for i in range(maxIter):`,其中 `maxIter = 50`。
每次迭代从当前提议分布中抽取 100、000 个样本。
代码中体现为 `Xs = rng.normal(v[0], v[1], R)`,其中 `**5`。
将精英截断值设为当前样本批次的经验 95 分位数。
代码中体现为 `gamma_i = np.quantile(Xs, 1-p)`,其中 ``;主讲人称其为 95% 阈值。
一旦精英截断值达到目标阈值,即停止自适应过程。
代码中体现为 `if gamma_i >= gamma: break`。
仅保留高于本轮截断值的精英样本。
代码中体现为 `eliteXs = Xs[Xs > gamma_i]`。
在精英样本上计算原始标准正态密度与当前提议密度之间的似然比。
代码中体现为 `eliteLRs = stats.norm.pdf(eliteXs, u[0], u[1]) / stats.norm.pdf(eliteXs, v[0], v[1])`。
根据加权的精英样本统计量更新提议参数,并将新参数对存入历史列表中。
代码中观察到:`mu_i = np.average(...)`,`sigma_i = np.sqrt(np.average(...))`,`v = (mu_i, sigma_i)`,以及 `vs.append(v)`。
收敛后,从最终的建议分布中重新生成一百万个样本。
在第二个代码单元格中观察到:`normals = rng.normal(v[0], v[1], R)`,其中 `**6`。
通过平均经似然比加权的稀有事件指示器,来估计尾部概率。
代码中观察到:`lrs = ...`,`ests = lrs * (normals > gamma)`,以及 `fHat = ests.mean()`。
根据加权项样本标准差,报告一个近似的95%置信半宽。
代码中观察到:`oHat = ests.std()` 和 `widthCI = 1.96 * oHat / np.sqrt(R)`。
屏幕上显示的结果为 `CE estimate: 2.8433488092847927e-07 (+/- 1.1057152778688466e-08)`,上下界分别为 `2.732772014979008e-07` 和 `2.9539203370716776e-07`,并与 `Theoretical: 2.866515718791933e-07` 进行对比。
该例题结果与标准正态分布的精确生存概率`stats.norm.sf(5)`进行比对,该精确值以`2.866515718791933e-07`形式输出;讲解者还指出,估计值约为`2.8乘以10的负7次方`,但置信区间宽度却大得多。
输出块显示 `CE 估计值:2.8433488092847927e-07 (+/- 1.1057152778688466e-08)`、`CE 下界:2.732772014979008e-07`、`CE 上界:2.953920337016776e-07`,以及 `理论值:2.866515718791933e-07`。
上方代码利用 `normals`、`lrs` 和 `ests` 计算出这些量。
使用显示的交叉熵/重要性采样风格代码估计稀有事件概率,并将其与理论值进行比较。
R 等于 10 的 6 次方
从 rng.normal(v[0], v[1], R) 中抽取建议样本
似然比使用 stats.norm.pdf(normals, u[0], u[1]) / stats.norm.pdf(normals, v[0], v[1])
稀有事件指示器为 (normals > γ)
获得交叉熵估计值、置信区间边界及理论值对比结果。
构造加权稀有事件贡献项。
如代码单元格中所示。
对加权贡献项取平均,得到估计值。
如代码单元格中所示。
计算近似置信区间的半宽。
显示在代码单元格中。
从输出中读取报告的估计值及其不确定性。
在输出块中可见。
从输出中读取理论对比值。
在输出块中可见。
重要性抽样估计值 = 2.8433488092847927e-07,半宽为 1.1057152778688466e-08;理论值 = 2.866515718791933e-07。
打印出的下界与上界与输出块中所示的 `fHat +/- widthCI` 一致。
屏幕从主示例处向上滚动至更早的导入单元格,再向下滚回。
讲解者表示将快速向上滚动以展示导入语句及软件包版本。
Jupyter 笔记本单元格
导入语句
版本输出块
视图从“改进的交叉熵方法”小节向上滚动至更早的单元格。
版本信息变得可见。
视图返回主示例。
数学问题陈述在滚动前后保持不变。
这一视觉操作仅揭示软件依赖关系,并不改变示例的数学内容。
执行后,第一个仿真单元格显示“g* 样本数量:152”和“运行时间:12.6 秒”。
代码单元格
输出文本
该单元格由未执行状态变为已执行状态。
保留的样本数量显示为152。
阈值保持为,原始抽样次数保持为。
输出量化了通过稀有事件滤波器后幸存的样本数量之少,从而凸显了采用重要性抽样提议的必要性。
最终单元格输出显示ICE估计值、下界、上界、理论值以及运行耗时。
代码单元格
数值输出行
估计值与区间值变得可见。
理论基准值显示在估计值下方。
沿用前一个单元格中拟合得到的相同提议参数。
可视化输出验证了改进后的交叉熵工作流所得数值结果,及其与理论尾部概率的接近程度。
屏幕录制内容展示了一个滚动浏览 Jupyter 笔记本的过程,其中包含 Markdown 文本、Python 代码单元格及打印输出。
Markdown 标题:`Cross-entropy method`
问题陈述:`使用交叉熵法估计 P(X > gamma),其中 X 服从正态分布 Normal(0, 1),且 gamma = 5`。
第一个代码单元格,实现自适应循环。
第二个代码单元格,实现最终的重要性抽样。
打印的数值输出,包括交叉熵估计值、置信界、理论值以及运行耗时。
画面起始于第一个代码单元格顶部附近。
随后向下滚动,逐步展示循环体及参数更新语句。
继续滚动至第二个代码单元格及其打印输出。
最终可见画面显示数值估计结果与理论值的对比。
目标始终一致:估计标准正态变量的 。
原始分布参数保持为 ``。
目标阈值保持为 `gamma = 5`。
视觉演进过程与算法顺序一致:先定义自适应交叉熵搜索,再利用所得建议分布进行最终的重要性抽样估计,并与理论值比较。
一个包含 Python 代码的 Jupyter 笔记本单元格位于输出块上方,该输出块包含数值结果及 `Wall time: 428 ms`。
Python 代码单元格
输出文本块
鼠标光标
开场数秒内,屏幕画面静止于代码及输出内容上。
在此时间段内,所显示的代码与数值输出均保持不变。
本片段在笔记本滚动至可视化代码之前,确立了已实现的估计量及其数值结果。
页面从首个代码/输出单元格向下滚动至一个新代码单元格,该单元格以 `xs = np.linspace(-2, 6.5, 500)` 开头。
笔记本页面
新代码单元格
标题“与朴素蒙特卡洛法比较”
首个输出块向上移出视野。
用于绘制提议分布的新代码单元格进入视野。
标题“与朴素蒙特卡洛法比较”随之在下方显现。
界面始终保持为包含代码单元格与文本标题的笔记本形式。
视觉过渡标志着从数值估算转向对提议分布的几何检验。
执行后,代码单元格下方会出现一幅图表。
该图显示了几条彩色的钟形曲线,以及一条靠近 x≈4.5 的灰色虚线。
每条曲线的确切颜色在各帧之间并非完全稳定,但多条明显不同的彩色曲线清晰可见。
多条彩色的类正态曲线
灰色虚线
坐标轴
图表边框
代码下方的空白区域被一幅渲染后的图表所取代。
多条提议曲线共同出现在同一组坐标轴上。
一条垂直虚线标出了阈值区域。
所有曲线均绘制在同一水平轴范围内。
虚线垂直线始终固定在阈值位置。
该图展示了存储的提议分布如何随迭代演进,并将其置于阈值与目标区域的相对位置中。
代码将量`widthCI = 1.96 * oHat / np.sqrt(R)`命名为`widthCI`,随后打印边界`lHat-widthCI`和`lHat+widthCI`。
人们可能将变量名 `widthCI` 理解为置信区间的总宽度。
在所展示的代码中,打印出的下界与上界均对 `lHat` 减去或加上同一数值,因此 `widthCI` 实际充当对称区间的半宽。
第一个单元格设置 `**8`;最后一个单元格重设 `**6`。
读者可能误以为 `R` 在整个笔记本中始终表示同一个固定的样本量。
在此段落中,`R` 首先表示用于拒绝采样的原始标准正态分布抽样次数,随后表示用于重要性采样估计的建议分布抽样次数。
主讲人说:‘在上面的例子中,我们有点取巧。’并解释道,由于该稀有事件并不十分稀有,因此可以直接使用拒绝采样从 g 星 中采样;但一般情况下,这样做耗时过长。
人们可能认为,只要遇到稀有事件问题,就可以直接从理想提议分布中采样,这是可以接受的。
视频明确警告:这种方法之所以奏效,仅仅是因为前面例子中的稀有事件并不十分稀有;一般而言,从这样的提议分布直接进行拒绝采样将耗时过长,这正是引入自适应交叉熵方法的原因。
主讲人说:‘别忘了,我们必须用似然比对样本加权。’
人们可能直接将精英样本当作来自原始分布的样本,用它们来更新提议参数。
视频强调,在计算更新后的参数时,精英样本必须按其似然比加权。
主讲人说:‘注意,enumerate 是 Python 中一个非常方便的函数,它能同时为我们提供列表中的每个元素 v 及其索引 i。’
有人可能认为,在 for i, v in enumerate(vs) 中,循环变量对 i 和 v 是任意选取的,或在索引之外还具有某种数学意义。
主讲人明确解释道,enumerate 会返回列表 vs 中的索引 i 及其对应的元素 v。
笔记本中明确写出 `( | X > gamma)`。
讲述者称 是 在稀有事件发生的条件下的分布。
零方差密度是原模型在稀有事件区域 上的条件版本。
文中指出要从 中抽样,方法是抽取大量 ,并从中筛选出满足条件的 。
讲述者将该过程命名为拒绝采样。
拒绝采样是视频中用于从条件密度生成样本的实际方法。
拟合单元作用于`Xs`,即上一个单元保留下来的样本。
讲解者指出,提议密度是通过对这些样本进行最大似然估计而构建的。
正态提议分布的拟合依赖于拒绝采样阶段所保留下来的样本。
最后一个单元使用先前计算出的`mu`和`sigma`,调用`rng.normal(mu, sigma, R)`进行采样。
讲解者指出,改进后的交叉熵算法已提供了一个良好的提议分布,随后他们继续采用标准重要性采样进行估计。
重要性采样估计量使用前一步拟合得到的提议参数进行计算。
`oHat`与`widthCI`直接由`ests`计算得出,其均值为`lHat`。
置信区间计算是附加在重要性采样估计量输出上的一个汇总统计。
主讲人指出,一旦交叉熵算法完成,他们便采用其所找到的提议分布,执行一次常规的重要性采样估计。
第二个代码单元格使用最终的 `v`,代入 `rng.normal(v[0], v[1], R)`,然后计算重要性权重。
交叉熵迭代所产生的自适应提议分布,被用作最终重要性采样估计器中的采样分布。
主讲人先介绍原始的交叉熵方法,再解释其循环机制。
该代码精确实现了所描述的迭代过程。
交叉熵方法的一般目标,在所示的迭代循环中得以具体体现,该循环用于构建更优的建议分布。
第二个代码单元格同时输出交叉熵估计值和“理论值:stats.norm.sf(gamma)”。
所展示的数值示例应用了正态分布尾部概率设定,并将蒙特卡洛结果与精确的生存函数进行了验证对比。
主讲人称,交叉熵(CE)方法将向量 v 存储在一个名为 vs 的列表中。
可视化代码对列表 vs 进行遍历。
提议序列的可视化依赖于先前的 CE 过程已将参数向量 v 存入 vs 中。
绘制〔gStar = stats.norm.pdf(xOverGamma) / l〕,使用 plt.plot(xOverGamma, gStar)。
主讲人表示,他们将绘制目标分布 g star,因为其归一化常数 l 是已知的。
归一化目标密度构造被应用于同一绘图工作流中,该工作流用于可视化提议分布。
主讲人指出,在这个简单情形下,归一化常数 `l` 是已知的。
代码使用 `l = stats.norm.sf(γ)` 来定义 `gStar`。
本片段中 `gStar` 的定义依赖于一个已声明的事实:该示例中的归一化常数 `l` 是已知的。
笔记本中定义了`( | X > gamma)`。
讲解者解释道:由于是给定稀有事件的条件分布,因此可以大量生成,然后仅保留其中超过阈值的那些样本。
代码计算 `mu = np.mean(Xs)` 和 `sigma = np.sqrt(np.mean((Xs-mu)**2))`。
代码计算 `lrs`、`ests` 和 `lHat = ests.mean()`。
代码计算 `widthCI = 1.96 * oHat / np.sqrt(R)` 并打印围绕 `lHat` 的置信区间上下界。
输出打印 ICE 估计值、置信区间上下界以及理论值。
主讲人解释道,之所以能通过拒绝采样直接从 g 星采样,仅仅是因为该稀有事件并非极度稀有;而一般情况下,这种方法耗时过长。
主讲人指出,本次迭代的阈值是 X 样本的95%分位数,且当该阈值高于 gamma 时,迭代停止。
代码显示 `gamma_i = np.quantile(Xs, 1-p)` 和 `if gamma_i >= gamma: break`。
主讲人指出,似然比是在原始分布与实际分布之间计算得出的,且样本必须按其似然比加权。
代码显示 `eliteLRs = stats.norm.pdf(eliteXs, u[0], u[1]) / stats.norm.pdf(eliteXs, v[0], v[1])`,以及用于 `mu_i` 和 `sigma_i` 的加权平均计算。
主讲人表示,他们采用交叉熵法(CE)得到的提议分布,并执行标准的重要性抽样估计。
代码显示 `ests = lrs * (normals > gamma)`、`fHat = ests.mean()` 以及 `widthCI = 1.96 * oHat / np.sqrt(R)`。
主讲人称该估计值约为 2.8 乘以 10 的负 7 次方,但置信区间的宽度却大得多。
输出显示 `CE 估计值:2.8433488092847927e-07 (+/- 1.1057152778688466e-08)` 和 `理论值:2.866515718791933e-07`。
代码显示 `fHat = ests.mean()`,输出标签为 `CE estimate`。
已覆盖 · 问题陈述与目标在音频讲解和笔记本文本中引入。
已覆盖 · 屏幕滚动至导入语句和版本信息;除软件环境配置外,不涉及新的数学内容。
已覆盖 · 定义并实现拒绝采样,最后输出 `Number of g* samples: 152`。
已覆盖 · 通过样本均值和样本二阶中心矩拟合正态提议分布,该方法被称为最大似然估计。
已覆盖 · 最终的重要性抽样估计、置信区间、理论对比以及总结性叙述。
已覆盖 · 开场旁白解释了为何在上一例中直接从 g* 进行拒绝抽样仅是可行的,并引出原始的交叉熵方法。
已覆盖 · 主讲人将交叉熵思想定义为构建不断改进的提议分布,并指出笔记本代码中 u、v 和 vs 所扮演的角色。
已覆盖 · 逐行讲解循环体:从当前提议分布抽样、计算 95% 分位阈值、若其超过 gamma 则停止、提取精英样本、构造似然比、并用加权估计更新 v。
已覆盖 · 交叉熵循环结束与最终估计单元之间有短暂停顿和滚动过渡;除已涵盖的循环内容外,无新增数学内容。
已覆盖 · 描述了最终的重要性抽样估计量,讨论了打印出的数值估计结果及其置信区间,并将结果与理论尾部概率进行比较。
已覆盖 · 静态笔记本视图,展示重要性采样(或交叉熵)风格的代码及其数值输出。
已覆盖 · 页面滚动从估计量输出过渡到可视化代码单元格。
已覆盖 · 主讲人在代码单元格保持可见的同时,解释了如何遍历已存储的建议向量,并构造归一化的目标密度。
已覆盖 · 执行后的图像出现,显示多条提议曲线以及一条虚线垂直阈值线。
已审核的主题路径
正态建议分布的参数是通过最大似然估计选择的。均值 设置为保留的 样本的样本均值,标准差 设置为这些样本的样本二阶中心矩的平方根。
适用条件:建议分布族仅限于正态分布。;用于拟合的数据是满足 的保留样本。
零方差密度 是随机变量 在稀有事件 发生的条件下的分布。它是理想的重要性采样建议分布,可以使估计量具有零方差。
适用条件:目标量是稀有事件概率 。; 仅在区域 上有支撑。
精英样本按似然比加权,因为它们是从当前建议分布中抽取的,而不是原始目标分布。似然比纠正了这种差异,确保更新后的建议分布参数准确反映了原始分布下的最大似然估计。
适用条件:精英样本是值高于迭代阈值 的样本。;似然比计算为原始密度除以建议密度。
使用拒绝采样是因为 恰好是 在 条件下的分布。通过从原始标准正态分布中抽取大量样本,并只保留那些超过阈值 的样本,保留下来的样本就服从 分布。
适用条件:可以直接从原始分布 中采样。;接受规则是 。
迭代阈值 定义为从建议分布中抽取的当前样本批次的经验 -分位数。当这个阈值 大于或等于目标稀有事件阈值 时,循环停止。
适用条件:样本是从当前建议分布中抽取的。;精英比例参数 设置为 0.05。;目标阈值是 。
视频指出,前面的例子“作弊”是因为稀有事件并不是非常稀有,这使得从 进行直接拒绝采样在计算上是可行的。一般来说,对于真正稀有的事件,直接拒绝采样会花费太长时间,这促使了自适应交叉熵方法的使用。
适用条件:背景是将改进的交叉熵方法与原始的交叉熵方法进行比较。;前面例子中的稀有事件具有相对较高的概率。
置信区间是围绕点估计构建的对称区间。半宽的计算方法是将 1.96 乘以加权估计量数组的样本标准差,然后除以建议样本数量的平方根。
适用条件:使用加权估计值的样本标准差。;区间是基于正态近似呈现的数值摘要。
最终估计量是似然比乘以稀有事件指示器的样本均值。它通过从拟合的正态建议分布中抽取样本来计算,计算标准正态密度与建议密度的比率,乘以样本超过 的指示器,并对结果求平均。
适用条件:样本是从拟合的正态建议分布中抽取的,而不是原始分布。;事件指示器是 。