coordinate ascent, em, varitional em
来源:互联网 发布:赛尔网络 吴建平 编辑:程序博客网 时间:2024/06/03 20:26
numerical optimization把能够通过矩阵计算直接得到解的问题转换为迭代的方式进行求解。这种方式尤其适合large problem,当数据维度特别大时,你只好用迭代的方式,否则矩阵的计算能够算死你。当然在计算过程中,会有各种各样的问题,迭代方向和迭代步长问题,就是最核心的参数吧。
因为看到这个,我突然想到,为什么之前我一直没用到numerical optimization呢,也一直没有需要去看。我回头去看我之前了解的算法,我一般是直接计算,比如之前用的k-means, spectral clustering,而即使是topic models,我用的也是gibbs 采样。那么我就在想,这些为什么文章中没有看到过newton method, conjugate gradient或者trust region, 而这几个算法,看到的比较多的就是在logistic regression中用到,Limited-memory BFGS在其中用的比较多。在看过的分类器中,用的最多的迭代方法是em或者varitional em。 em简单来说,就是对似然函数求最大值。Expectation Maximization (EM) 是一种以迭代的方式来解决一类特殊最大似然 (Maximum Likelihood) 问题的方法,这类问题通常是无法直接求得最优解,但是如果引入隐含变量,在已知隐含变量的值的情况下,就可以转化为简单的情况,直接求得最大似然解。注意,在EM中,是存在隐变量的,一般是因为我们不引入这个隐变量问题是无法求解的。而且一般情况下,隐变量也是我们想要的。这个用别的迭代优化是无法得到的。
coordinate ascent或者descent,是说每次迭代只对一个coordinate进行求解,而不是全部。同时,由EM算法我们可以看到,这类算法和前面提到的各种梯度算法不同,是不进行微分的,直接对各个维度进行迭代,也就是对一个多元函数f()每次在一个方向上求解最优值。维基百科对coordinate descent做了解释。比如对权重系数W求解时,我们不是像其它优化算法那样just once得到所有维度的值,而是每次求解一个w_k,如果维度是d,那么需要求解d个参数。EM就是通过这种每一个维度的求解进行优化的,因此也是coordinate ascent。
因此,大概总结一下,通过对loss函数求最优值,得到最佳权重系数,numerical optimization用在supervised learning模型中,是不是更好点,比如在logistic regression中,我们可以通过最小化误差函数,对分类器进行优化,而且在supervised learning中,因为一般隐变量是label,而supervised learning是不需要隐变量的。而em 或者varitional em用在含有隐变量尤其是是在expoential family中,比如一般在generative model, 比如lda, hdp等模型中,在这个过程中,一般需要隐变量的,而且有些distribution是无法得到的。
参考:
http://metaoptimize.com/qa/questions/1303/why-are-coordinate-ascent-algorithms-em-variational-em-preferred-over-gradient-methods-for-generative-probabilistic-models
http://blog.pluskid.org/?p=81
感觉还是不是很清晰,我会继续思考,继续补充。
- coordinate ascent, em, varitional em
- em
- em
- EM
- EM
- EM
- EM
- 使用<em><em>
- EM 算法
- EM Grid
- em说明
- EM 算法
- em亂碼問題
- EM算法
- oracle EM
- [code] em
- EM资料库
- 使用em
- MVC数据从Controller传递到View之ViewModel
- C/C++的XML编程+libxml2的使用方法
- 服务器数据库系列 - MYSQL优化20条经验
- 视频播放器增加color space converter + In-Place Transform Filter
- Oracle job 定时器的执行时间间隔 学习汇总
- coordinate ascent, em, varitional em
- 统计ASCII 字符的出现次数
- 实体生成工具【可使用Oracle和SQL】
- C# GUID 知识点
- Socket发送邮件——java
- 对Erlang开发者的几点建议
- QC10.0+QTP10.0 集合详解
- poj1035 Spell checker
- 触发ASSERT(afxCurrentResourceHandle != NULL)错误的原因