Machine-Learning

經過一定次數的迭代後,成本函數變成了 nan

  • January 28, 2018

我有一個問題,想听聽社區怎麼說。假設您正在訓練一個深度學習神經網絡。實施細節與我的問題無關。我很清楚,如果你選擇的學習率太大,你最終會得到一個可能變成 nan 的成本函數(例如,如果你使用 sigmoid 激活函數)。假設我使用交叉熵作為成本函數。典型的二元分類(甚至是使用 softmax 的多類)問題。我也知道為什麼會這樣。我經常觀察到以下行為:我的成本函數很好地降低了,但經過一定數量的 epoch 後,它變成了 nan。降低學習率會使這種情況在以後發生(所以在更多的時期之後)。這真的是因為(例如)梯度下降在非常接近最小值後無法穩定自身並開始瘋狂反彈嗎?我認為該算法不會完全收斂到最小值,但應該圍繞它振盪,在那里或多或少保持穩定……想法?

好吧,如果您在成本函數中獲得 NaN 值,則意味著輸入在函數域之外。例如 0 的對數。或者它可能在解析域中,但由於數值錯誤,我們會遇到同樣的問題(例如,一個小值被四捨五入為 0)。這與無法“安定”無關。

因此,您必須確定給定成本函數的不允許的函數輸入值是什麼。然後,您必須確定為什麼要將該輸入輸入到成本函數中。您可能必須更改輸入數據的縮放比例和權重初始化。或者你只需​​要像 Avis 建議的那樣具有自適應學習率,因為成本函數環境可能非常混亂。或者可能是因為其他原因,例如架構中某些層的數值問題。

使用深度網絡很難說,但我建議您開始查看輸入值到您的成本函數(激活層的輸出)的進展,並嘗試確定原因。

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

comments powered by Disqus