首先来点八股文(来自百度百科):迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
利用迭代算法解决问题,需要做好以下三个方面的工作:
一、确定迭代变量。
在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式。
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制。
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。
不知大家有没有发现,自从我们进入到机器学习这个领域,迭代就阴魂不散,随处可见,不管哪篇论文,哪个算法,我们都能看到它的影子。那你有没有想过为什么?为什么迭代那么强大呢?那为什么它无处不在?很多常规手段解决不了的问题,迭代一过来就引刃而解了。迭代真得那么神?
为什么使用如此频繁呢?个人理解因为其实无论什么机器学习算法,最终都要求助于计算机解决,它又表现为在特定函数空间按某优化目标去搜索一个解出来。什么意思?我们的目标是让机器去学习和了解这个物理世界,而这个物理世界是随机的,所以我们就需要去猜测,我们对某个事物会有很多猜测,那么哪个猜测最靠谱,那就得有指标去衡量吧,那指标是什么呢?就有误差最小还是性能指标最大吧?那你怎么求它的最小还是最大呢?你说我们有求导,有拉格朗日?是没错,但他们能使用的本质条件是什么?是这些误差函数或者性能函数有解析式的时候。但是世界很多信号都是非平稳的,或者很难知道其统计特性的,这时候就没法得到其准确的解析式了,那这时候怎么找最大或者最小值啊。迭代?什么是迭代?
优化问题,要么求是最大值,要么求最小值,或者说要么从山脚爬上山顶,要么从山顶下坡到山脚。拿爬山也就是求最大值来举例。如果你一开始站在山脚下,一抬头见不到山顶,你怎么知道山顶在哪?你只知道如果我每一步都往高处爬,那么我肯定能爬上山顶。所以你是一步步往上爬,每爬一小段的时候,停下来,看看四周哪个方向上山最快,也就是坡度最陡(也就是性能曲面的梯度了),然后你就沿着这个方向再爬一小段,再停下来观测最快的上山方向,一直这样直到你爬上山顶。这个就是最速上升法(呵呵,标准来说一般在找最小值的时候称最速下降法)。
如果你在山脚,看到了山顶,你就不管三七二十一了,直接就往山顶那个方向不要命的冲,直到到达山顶。这个就是牛顿迭代法。
如果你在山脚开始,每爬一小段,然后下一步的方向你就随便蒙,听天由命,因为你相信,上帝会把你带到山顶的(上帝就是那个操纵概率的手),这个就是随机搜索算法。
好了,当你历经千辛万苦爬上一个山顶的时候,发现还有更高的山顶,但没办法啊,如果想到那个更高的山顶,你就得先下坡,再爬上那个山顶。这时候,有些人就满足了,看到了他想看到的美景,乐于他的局部最大值,不想折腾了。但有些人就不满足,你渴望那种“山顶绝顶我为峰,一览众山小”的心境,所以你就纵身一跳,滚到了山脚,如果你好运,那你就滚到了那个最高山顶的山脚,这时候,你再往上爬,就可以到达最高峰了。这个就是避免陷于局部最大值,寻找全局最大值的算法,叫模拟退火或者冲量等等。
所以个人理解,爬山或者寻找最优值取决了三个因素:
1)每步你走哪个方向;
2)每步你走多远;
3)对从局部最大跳出到达全局最大的要求是否高。
个人感觉这三个因素就构成了不同的优化算法,或者说迭代算法。
其实人生就是一个迭代的过程,每天都在一个新的状态,每天都在不断的更新,慢慢地向你美好的理想靠近。有时候你发现生活很累,感觉成功遥遥无期,那是因为你的收敛速度太慢了;有时候你过于急功近利了,就可能错过了目标,意外的翻过了山头。所以你人生的迭代方向和步伐的选择都非常重要。呵呵。
另外,迭代法对于求解某些运算量大的计算非常有帮组。例如求矩阵的逆?呵呵,在图像领域,矩阵够大吧,那么我们求解矩阵的逆一般用克莱姆法则,即求矩阵的伴随矩阵和它的行列式的比,这个计算量足以让人惊叹了,虽然更快的算法和更快的硬件出现,但对于实时性要求比较高的程序来说,这个速度是比较难接受的。但是迭代却会让你很爽,因为这一次的计算结果用到的上次的结果,例如第n+1次用到第n次求的逆,这样就不需要再第n+1时刻,重新计算n+1维的方阵的逆(呵呵,可以这样理解)。例如你要一栋100层的大楼,那么你直接在一座99层的楼上加一层总比你另开炉灶,在一片空地上盖100层的楼要快多了。这个就像什么序贯迭代法啊什么的,呵呵。
迭代法是个很有内涵的东西,就我这么粗浅苍白的语言很难表达他的宏厚和豁达,只有在茫茫的知识海中不断与其相遇、相识、相知和相爱!
http://blog.csdn.net/zouxy09/article/details/8537872