柴夥说算法(1)-迭代法

迭代算法是计算机解决问题的一种基本方法。
                                                                                             --题记

 

       假设站在山脚下,目标是爬到山顶。如果把爬山的过程细化成很多步,那么每一步需要做的两件事情是:确定行进的方向和距离。确定好行进的方向和距离的一个原则是:每行进一步后,更接近山顶。当然,如果你的全局观足够好,这个时候每步行进的方向就能够选择地更好,能够更快地到达山顶(这里的“快”只考虑行进的总步数,并不考虑行进的总距离)。当然,由于视野或者能力的限制,最终到达的是你的目力所及的山顶,可能并不是附近最高的山顶。还有,你的初始位置也决定着到达山顶的难度和速度。
       将上述内容和迭代算法做类比。迭代算法中,每次迭代的时候需要考虑增量的方向和大小(行进的方向和距离),而每次迭代后的函数值更接近目标值(山顶),如梯度上升法(gradient ascent)以及与之对应的求解线性方程组的最速下降法(gradient descent),最大熵模型学习的改进的迭代尺度法(improved iterative scaling, IIS)等等。在有的算法中,如Newton迭代法,迭代的初值(爬山时所处的初始位置)对迭代的影响巨大。只爬到目力所及的山顶(局部最优解),没有爬到最高的山顶(全局最优解)。共轭梯度法(全局观足够好)比最速下降法的收敛速度更快。

       后记:

       1. 给自己挖个坑,初步计划每周更新一篇,更新的篇数以自己学到的内容为基础,希望这个系列做的时间能够长一些。

 

参考资料: 
[1] https://en.wikipedia.org/wiki/Gradient_descent
[2] https://en.wikipedia.org/wiki/Conjugate_gradient_method
[3] 李航,统计学习方法,p88-91,清华大学出版社,2012年

posted on 2018-06-23 09:33  caicailiu  阅读(362)  评论(0编辑  收藏  举报