什么是决定何时终止期望最大化算法的好标准。
我知道这个想法是,当数据日志可能性的变化“小”或模型参数的变化在一次(或几次)迭代中“小”时,您应该终止。但是如何确定“小”呢?
到目前为止,我的文献搜索只提供了证明在不同条件下收敛的论文,或者提供了专门的技术来提高收敛速度。关于何时在实际使用中终止算法,我还没有看到好的、实用的结果。
什么是决定何时终止期望最大化算法的好标准。
我知道这个想法是,当数据日志可能性的变化“小”或模型参数的变化在一次(或几次)迭代中“小”时,您应该终止。但是如何确定“小”呢?
到目前为止,我的文献搜索只提供了证明在不同条件下收敛的论文,或者提供了专门的技术来提高收敛速度。关于何时在实际使用中终止算法,我还没有看到好的、实用的结果。
实际上,您设置了可能性的变化,例如,sklearn中默认的 1e-3 ,或者/并且您将最大迭代设置为 100。您尝试了几种不同的初始化,以防止收敛到局部最优点,并选择最佳模型。
如果时间和计算允许,您可以扩大迭代或/和使似然变化阈值更小,如 1e-4 等。
您可以使用绝对误差标准(例如,连续迭代之间的差异)。您还可以选择相对误差标准,例如。这在某种程度上更合理,因为您并不真正知道您的对数似然有多大或多小,并且标准化使您的停止条件与规模无关。只要确保您没有将所需的公差设置得太小,否则您将永远无法实现。
TLDR:首先尝试像这样的默认阈值。如果这很慢,请切换到使用/近似 Hessian 的比线性更快的算法。
这很大程度上取决于。如果您的对数似然曲率较低,那么您可能需要等待很长时间才能使目标函数增量低于固定阈值,例如。这是因为 EM 只是一阶优化方法。
因此,我的建议是首先使用默认建议之一运行您的 EM 算法,例如。顺便说一句,这个默认数字应该是相对于平均目标的(例如,将 ELBO 和除以样本大小)。理想情况下,它将相对较快地终止。但是,如果您陷入一个长循环,其中每一步总是仅将目标函数增加少量(但大于您的阈值),那么您应该研究一种具有更好收敛速度的算法。例如,如果您可以计算 EM 步骤,则可能可以计算梯度(方程 8)。使用梯度,您可以运行比线性更快的算法,例如广泛实施的BFGS. 就个人而言,这个技巧为我节省了无数个小时。