是一種不斷用變數的舊值遞推新值的過程
,跟迭代法相對應的是
直接法(或者稱為一次解法),即一次性解決問題
。迭代演算法是用計算機解決問題的一種基本方法。它利用計算機運算速度快、適合做重複性操作的特點,讓計算機對一組指令(或一定步驟)進行重複執行,在每次執行這組指令(或這些步驟)時,
都從變數的原值推出它的乙個新值
。利用迭代演算法解決問題,需要做好以下三個方面的工作:
一、
確定迭代變數
。
在可以用迭代演算法解決的問題中,
至少存在乙個直接或間接地不斷由舊值遞推出新值的變數
,這個變數就是迭代變數。
二、
建立迭代關係式
。
所謂迭代關係式,
指如何從變數的前乙個值推出其下乙個值的公式(或關係)
。迭代關係式的建立是解決迭代問題的關鍵,通常可以使用遞推或倒推的方法來完成。
三、
對迭代過程進行控制
。
在什麼時候結束迭代過程?這是編寫迭代程式必須考慮的問題
。不能讓迭代過程無休止地重複執行下去。迭代過程的控制通常可分為兩種情況:一種是所需的迭代次數是個確定的值,可以計算出來;另一種是所需的迭代次數無法確定。對於前一種情況,可以構建乙個固定次數的迴圈來實現對迭代過程的控制;對於後一種情況,需要進一步分析出用來結束迭代過程的條件。
不知大家有沒有發現,自從我們進入到機器學習這個領域,迭代就陰魂不散,隨處可見,不管哪篇**,哪個演算法,我們都能看到它的影子。那你有沒有想過為什麼?為什麼迭代那麼強大呢?那為什麼它無處不在?很多常規手段解決不了的問題,迭代一過來就引刃而解了。迭代真得那麼神?
為什麼使用如此頻繁呢?
個人理解因為其實無論什麼機器學習演算法,最終都要求助於計算機解決,它又表現為在特定函式空間按某優化目標去搜尋乙個解出來。
什麼意思?
我們的目標是讓機器去學習和了解這個物理世界,而這個物理世界是隨機的,所以我們就需要去猜測,我們對某個事物會有很多猜測,那麼哪個猜測最靠譜,那就得有指標去衡量吧,那指標是什麼呢?就有誤差最小還是效能指標最大吧?那你怎麼求它的最小還是最大呢?你說我們有求導,有拉格朗日?是沒錯,但他們能使用的本質條件是什麼?是這些誤差函式或者效能函式有解析式的時候。但是世界很多訊號都是非平穩的,或者很難知道其統計特性的,這時候就沒法得到其準確的解析式了,那這時候怎麼找最大或者最小值啊。迭代?什麼是迭代?
優化問題,要麼求是最大值,要麼求最小值,或者說要麼從山腳爬上山頂,要麼從山頂下坡到山腳。拿爬山也就是求最大值來舉例。如果你一開始站在山腳下,一抬頭見不到山頂,你怎麼知道山頂在哪?你只知道如果我每一步都往高處爬,那麼我肯定能爬上山頂。所以你是一步步往上爬,每爬一小段的時候,停下來,看看四周哪個方向上山最快,也就是坡度最陡(也就是效能曲面的梯度了),然後你就沿著這個方向再爬一小段,再停下來觀測最快的上山方向,一直這樣直到你爬上山頂。這個就是最速上公升法(呵呵,標準來說一般在找最小值的時候稱最速下降法)。
如果你在山腳,看到了山頂,你就不管三七二十一了,直接就往山頂那個方向不要命的衝,直到到達山頂。這個就是牛頓迭代法。
如果你在山腳開始,每爬一小段,然後下一步的方向你就隨便蒙,聽天由命,因為你相信,上帝會把你帶到山頂的(上帝就是那個操縱概率的手),這個就是隨機搜尋演算法。
好了,當你歷經千辛萬苦爬上乙個山頂的時候,發現還有更高的山頂,但沒辦法啊,如果想到那個更高的山頂,你就得先下坡,再爬上那個山頂。這時候,有些人就滿足了,看到了他想看到的美景,樂於他的區域性最大值,不想折騰了。但有些人就不滿足,你渴望那種「山頂絕頂我為峰,一覽眾山小」的心境,所以你就縱身一跳,滾到了山腳,如果你好運,那你就滾到了那個最高山頂的山腳,這時候,你再往上爬,就可以到達最高峰了。這個就是避免陷於區域性最大值,尋找全域性最大值的演算法,叫模擬退火或者衝量等等。
所以個人理解,爬山或者尋找最優值取決了三個因素:
1)每步你走哪個方向;
2)每步你走多遠;
3)對從區域性最大跳出到達全域性最大的要求是否高。
個人感覺這三個因素就構成了不同的優化演算法,或者說迭代演算法。
其實人生就是乙個迭代的過程,每天都在乙個新的狀態,每天都在不斷的更新,慢慢地向你美好的理想靠近。有時候你發現生活很累,感覺成功遙遙無期,那是因為你的收斂速度太慢了;有時候你過於急功近利了,就可能錯過了目標,意外的翻過了山頭。所以你人生的迭代方向和步伐的選擇都非常重要。呵呵。
另外,迭代法對於求解某些運算量大的計算非常有幫組。例如求矩陣的逆?呵呵,在影象領域,矩陣夠大吧,那麼我們求解矩陣的逆一般用克萊姆法則,即求矩陣的伴隨矩陣和它的行列式的比,這個計算量足以讓人驚嘆了,雖然更快的演算法和更快的硬體出現,但對於實時性要求比較高的程式來說,這個速度是比較難接受的。但是迭代卻會讓你很爽,因為這一次的計算結果用到的上次的結果,例如第n+1次用到第n次求的逆,這樣就不需要再第n+1時刻,重新計算n+1維的方陣的逆(呵呵,可以這樣理解)。例如你要一棟100層的大樓,那麼你直接在一座99層的樓上加一層總比你另開爐灶,在一片空地上蓋100層的樓要快多了。這個就像什麼序貫迭代法啊什麼的,呵呵。
迭代法是個很有內涵的東西,就我這麼粗淺蒼白的語言很難表達他的巨集厚和豁達,只有在茫茫的知識海中不斷與其相遇、相識、相知和相愛!
淺說機器學習中「迭代法」
淺說機器學習中 迭代法 zouxy09 qq.com 利用迭代演算法解決問題,需要做好以下三個方面的工作 一 確定迭代變數。在可以用迭代演算法解決的問題中,至少存在乙個直接或間接地不斷由舊值遞推出新值的變數,這個變數就是迭代變數。二 建立迭代關係式。所謂迭代關係式,指如何從變數的前乙個值推出其下乙個...
淺說機器學習中「迭代法」
淺說機器學習中 迭代法 zouxy09 qq.com 利用迭代演算法解決問題,需要做好以下三個方面的工作 一 確定迭代變數。在可以用迭代演算法解決的問題中,至少存在乙個直接或間接地不斷由舊值遞推出新值的變數,這個變數就是迭代變數。二 建立迭代關係式。所謂迭代關係式,指如何從變數的前乙個值推出其下乙個...
淺說機器學習中「迭代法」
機器學習關於迭代法的介紹,很有哲理,淺顯易懂 來自zouxy09 淺說機器學習中 迭代法 zouxy09 qq.com 利用迭代演算法解決問題,需要做好以下三個方面的工作 一 確定迭代變數。在可以用迭代演算法解決的問題中,至少存在乙個直接或間接地不斷由舊值遞推出新值的變數,這個變數就是迭代變數。二 ...