局部最優怎么辦?


1、使用模擬退火算法SA(Simulate Anneal)

貪心算法是,在求最優解時,從a點開始試探,如果函數值繼續減少,那么試探過程繼續,到達b點時,試探過程結束(因為無論朝哪個方向努力,結果只會越來越大),因此找到了局部最優b點。

模擬退火算法以一定的概率來接受一個比當前解要差的解,因此有可能會跳出這個局部的最優解,達到全局的最優解。這個概率隨着時間推移逐漸降低(逐漸降低才能趨向穩定)。

過程:

  • 若f( Y(i+1) ) <= f( Y(i) ) (即移動后得到更優解),則總是接受該移動;
  • 若f( Y(i+1) ) > f( Y(i) ) (即移動后的解比當前解要差),則以一定的概率接受移動,而且這個概率隨着時間推移逐漸降低(逐漸降低才能趨向穩定)相當於上圖中,從B移向BC之間的小波峰時,每次右移(即接受一個更糟糕值)的概率在逐漸降低。如果這個坡特別長,那么很有可能最終我們並不會翻過這個坡。如果它不太長,這很有可能會翻過它,這取決於衰減 t 值的設定。

方法2:換個優化方法

局部最優一般是鞍點或者停滯區,就是在某一方向上他是極小值,但是在與它垂直的方向上,卻是一個極大值。

但是在這個方向上計算的梯度為0,可能算法就停止迭代了。

所以使用momentum沖量,在遇到停滯區或者鞍點時,靠慣性沖出這個小坑,到真正的大坑里面。算法停止的標准是沖量小於某一個值且梯度小於某一個值,或者指定一個迭代次數就行了。

方法三:調節學習率

對於學習率,采用adagrad、adadelta,自適應學習率。根據歷史學習率累計總量來決定當前學習率減小的成都。

adagrad初始學習率要手動指定,adadelta不需要。

adadelta在后期容易在局部最小值附近抖動。

RMSprop是adadelta的一個特例,需要手動設置全局學習率,效果在adagrad 和 adadelta之間。對RNN效果好。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM