03.06 用同一數據集訓練神經網絡,每次訓練結果不一樣,有時正確率很高,有時很低,為什麼?

SuperMonking


其實這個問題本質就是,如果我們使用機器學習算法在數據集上訓練一次數據模型,保存模型,然後使用相同的算法和相同的數據集和數據排序再次訓練它,第一個模型是否與第二個模型相同?

這可能是因為在神經網絡使用增益或權重的隨機值進行初始化,然後在訓練階段每個模擬都有不同的起點。 如果想要始終保持相同的初始權重,可嘗試為初始權重固定種子,即可消除該問題。

如果我們深入研究這個問題,我們可以從它們的“確定性”對ML算法進行分類,當從同一數據集訓練時:

  • 一類是始終產生相同模型,並且記錄以相同順序呈現;

  • 二類是始終產生不一樣模型,並且記錄順序不同。

在實際情況中,一般情況下是“不確定性”居多,產生模型變化的原因可能是在機器學習算法本身中可能存在隨機遊走,權重隨機初始化不同,或概率分佈的採樣以分配優化函數的分量不同。

雖然模型“不確定性”可能對單次訓練結果造成干擾,但我們也可以利用該“不確定性”來確認模型的穩定性,例如決策樹、支持向量機(SVM)、神經網絡等,可通過多次迭代來最終確認模型的穩定性。


Hacker


weight在初始化的時候會隨機生成,這就造成梯度搜索的時候會產生不同的推演過程,這種情況下如果排除優化器的問題,主要原因是由於數據量不夠,如果希望產生可重現的結果,那麼可以用seed產生隨機種子,保證每次使用的隨機數是一樣的,並且使用單線程訓練,但是這樣可能會引起泛化效果不好,也就是說其實是過擬合的!


分享到:


相關文章: