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效果好。
