nn訓練問題記錄(1)

  • 2020 年 12 月 15 日
  • AI

nn的output完全一樣或者基本差不多。

1、輸入沒做數據歸一化表現就是模型收斂很慢,損失剛幾個epochs就卡着不動下不去,主要原因和lr種輸入沒做歸一化導致的兩個問題,一個是模型優化問題,模型很難收斂,這一點和第二點類似;

除此之外,第二點,輸入如果某些維度非常大也會導致這個問題,特別是對於分類問題尤其嚴重(回歸問題比較少因為一般最後一層都是先行曾),本質上是分類問題的sigmoid或者softmax存在上下限,當輸入特別大的時候網路的輸出導致了激活函數飽和的問題;

2、學習率太大或太小,太大則損失函數一直在大幅震蕩,模型隨意學習,導致了某個情況下權重和所有的輸入值的計算結果都很大或者很小,這一點對於二分類問題來說尤其嚴重,當輸入都很大或者很小的時候,sigmoid的輸出基本上趨近於1或者0,看起來輸出都差不多的樣子;學習率太小則是網絡基本沒怎麼學習,此時主要和模型的初始化有關,這種問題引發的情況的可能性比較小;

3、問題本身的最佳輸出就是可訓練到的完全相同的輸出,例如對於回歸問題:

對於nn來說,上述的直線是很好擬合到的,而曲線的擬合難度相對大的多,在某些特定的情況下,例如網絡結構設計的比較簡單,難以學習到複雜的折線,此時完全相同的輸出的mse是最小的,這種情況下也可能出現輸出完全一樣的問題;

4、dead relu problem,relu可以是某一層或者輸出層,因為dead relu 的問題,某一層的輸出全為0,導致後面的輸出也都是0,從而表現出輸出完全相同的情況,此時的輸出完全是bias的計算結果,weights廢了;

5、樣本極度不均衡,並且大類樣本之間非常相似,例如簡單的對原始的大類樣本進行多次的repeat產生的數據集就存在這樣的預測問題;

6、其它待補充:


輸出一致的本質問題出在f(x)的計算上,要不就是nn的某些層f出現了問題,要不就是樣本x出現了問題,當然前者居多一些,最好的方式還是通過一些手段例如可視化等去debug整個nn的結構,看每一層的輸出情況,梯度的更新情況等等,干看調試起來費勁,後續有時間整理一下nn的debug方法