邏輯迴歸與梯度下降詳解

邏輯迴歸

Sigmoid函數:

Sigmoid函數

梯度:

梯度的表達式

這個梯度是指:沿着x方向移動

個單位,沿着y方向移動
個單位。函數f(x,y)在這一點上有定義並且可微,每個單位長度自行設定,稱爲步長,記爲

梯度上升算法到達每個點後都會重新計算移動的方向,不斷迭代移動,直到滿足停止條件,停止條件可以是一個確定的迭代次數或是達到較小的誤差。在迭代過程中,梯度總是選取最佳的移動方向。

權值調整公式

利用該算法(梯度下降)進行求解優化問題:

權值Weights更新:weights=weights+alphadata.transpose()error 按誤差方向調整權重(迴歸係數)。即可以寫成:

權值根據誤差分方向進行調整

增量是關於誤差的一個函數。

隨機梯度上升算法:

梯度上升算法每次更新都需要遍歷整個數據集,如果數據量巨大,則耗時很大,複雜度高。改進方法:一次僅用戶一個樣本點來更新迴歸係數(隨機梯度上升)。由於其在新樣本到來時對分類器進行增量式更新,因而這是一個在線學習算法。

用代碼來看兩者的區別:

梯度上升:

for i in range(max_step):

      h = sigmoid(data_mat * weights)

      err = (label_mat - h)

      weights = weights + alpha * data_mat.transpose() * err

return weights

用全局的誤差來更新weights

隨機梯度上升:

for i in range(n):

        h = sigmoid(numpy.sum(data[i] * weights))

        err = label[i] - h

        weights = weights + data[i] * alpha * err

return weights

一個點只計算一次,遍歷時使用當前點計算出的誤差來調整本次的權值。

兩者區別在計算誤差的方式上。

其實怎麼選取不重要,根據實驗可以得到:隨機選取和遍歷每一個求得當前的誤差,最後在於循環計算的次數,當次數趨向於一個合適的值時,誤差穩定且較小,則此時分類即完成。

http://blog.csdn.net/qq_20945297/article/details/78552273

如果這不是一個凸優化問題,梯度下降勢必會遇到局部最小(極小值)的情況

如何應對其局部最小的問題:

1、 以多組不同參數值初始化多個神經網絡,按標準方法訓練後,取其中誤差最小的解作爲最終參數;這就是從多個不同的初始點開始搜索尋優,這樣陷入不同的局部極小值,從而選取更可能接近全局最小的解;

2、 使用模擬退火:以一定的概率接受比當前解更差的結果,每步迭代中,接受次優解的概率要隨着時間推移降低,保證算法能夠收斂;

3、 使用隨機梯度下降,這樣計算出的梯度仍可能不爲0,這樣就可能跳出局部極小值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章