Optimization

關於感知器規則、梯度下降和隨機梯度下降實現的說明

  • February 15, 2015

我對不同的感知器實現進行了一些試驗,並想確保我是否正確理解了“迭代”。

Rosenblatt 的原始感知器規則

據我了解,在 Rosenblatt 的經典感知器算法中,權重會在每個訓練示例之後同時更新

在哪裡是這裡的學習規則。目標和實際都是閾值(-1 或 1)。我將其實現為 1 次迭代 = 1 次遍歷訓練樣本,但權重向量在每個訓練樣本後更新。

我將“實際”值計算為

隨機梯度下降

然而,target與感知器規則相同,actual不是閾值而是真實值。此外,我將“迭代”視為訓練樣本的路徑。

SGD 和經典感知器規則都在這種線性可分的情況下收斂,但是,我在梯度下降實現方面遇到了麻煩。

梯度下降

在這裡,我檢查了訓練樣本並總結了 1 次訓練樣本的權重變化,然後更新了權重,例如,

對於每個訓練樣本:

在 1 次通過訓練集後:

我想知道,如果這個假設是正確的,或者我是否遺漏了什麼。我嘗試了各種(最多無限小)學習率,但從來沒有讓它顯示出任何收斂的跡象。所以,我想知道我是否誤解了某事。這裡。

謝謝,塞巴斯蒂安

您的更新中有幾個錯誤。我認為通常您會將當前權重的值與當前權重與先前權重之間的*差異混淆。*你有符號散落在不應該有的地方,而 += 你應該有 = 的地方。

感知器:

,

在哪裡是模型對訓練示例。

這可以被視為以下“感知器損失”函數*的隨機次梯度下降方法:

感知器損失:

.

.

由於感知器已經SGD 的一種形式,我不確定為什麼 SGD 更新應該與感知器更新不同。使用非閾值編寫 SGD 步驟的方式,如果您預測的答案正確,您將蒙受損失。那很糟。

您的批處理梯度步驟是錯誤的,因為您在應該使用“=”時使用了“+=”。為每個訓練實例添加當前權重。換句話說,你寫它的方式,

.

它應該是:

.

此外,為了使算法收斂於每個數據集,您應該按計劃降低學習率,例如.


  • 感知器算法在感知器損失上與 SSGD並不完全相同。通常在 SSGD 中,在平局的情況下 (),, 所以,因此您將被允許不採取任何措施。因此,感知器損失可以最小化,這是沒用的。但是在感知器算法中,你需要打破平局,並使用次梯度方向如果你選擇了錯誤的答案。

所以它們並不完全相同,但是如果你假設感知器算法是一些損失函數的 SGD,並對損失函數進行逆向工程,那麼你最終會得到感知器損失。

引用自:https://stats.stackexchange.com/questions/137834

comments powered by Disqus