在采样期间实现自适应步长包括根据实时反馈动态调整步长,以平衡计算效率和准确性。核心思想是监控一个指标——例如局部误差估计或接受率——然后增加或减少步长以维持所需的性能。例如,在数值积分或求解微分方程时,可以在平滑区域使用较大的步长,但在系统快速变化时减小步长。类似地,在马尔可夫链蒙特卡洛 (MCMC) 采样中,步长(例如,提议分布宽度)被调整以维持最佳接受率,确保采样器有效地探索参数空间。
数值方法中自适应步长的常用方法是嵌入式 Runge-Kutta 方法(例如,RK45)。在这里,在每个步骤中计算不同阶数的两个近似值(例如,4 阶和 5 阶)。它们之间的差异提供了误差估计。如果误差超过容差阈值,则拒绝该步,并减小步长(例如,减半)。如果误差低于阈值,则接受该步,并且可以增加步长(例如,加倍)。在 MCMC 中,自适应通常以 20-40% 之间的接受率为目标。例如,如果在一段时间内的接受率太低(例如,10%),则减小提议步长(例如,乘以 0.9)以避免过于激进的移动;如果太高(例如,60%),则增加步长(例如,乘以 1.1)以鼓励探索。
在实施自适应步长时,实际考虑因素是关键。首先,设置最小和最大步长范围,以防止数值不稳定或过度计算。其次,使用平滑技术——例如接受率的指数移动平均线——以避免对短期波动反应过度。第三,平衡计算开销:频繁的步长调整可以提高准确性,但会增加成本。例如,在 MCMC 中,可以每 100 步进行一次调整以减少噪声。像 SciPy 的 ODE 求解器或 PyMC3 的 MCMC 采样器这样的库可以自动执行这些步骤,但自定义实现需要仔细测试,以确保在各种场景中的收敛性和稳定性。