訓練神經網路失敗的原因(上)

2021-08-19 23:24:24 字數 1302 閱讀 8052

根據原文講述 原因大致如下:

神經網路中對資料進行歸一化是不可忽略的步驟,網路能不能正常工作,還得看你有沒有做歸一化。這個步驟是非常重要的,深度學習領域的人都很清楚,因此**中也很少有提及到。但是對於初學者來說,很容易在這裡栽跟頭,比如說我。

一般來講,歸一化就是減去資料平均值除以標準差,通常是針對每個輸入和輸出特徵進行歸一化。

需要歸一化的首要原因就是大部分神經網路都是假設輸入資料和輸出資料都服從均值為0方差為1的正態分佈。這些假設在深度學習文獻中隨處可見,從權重初始化,啟用函式到訓練網路的優化演算法。

未經訓練的神經網路輸出值大致在-1到1。如果你希望輸出其它範圍內的值(例如畫素值為0到255的8位rgb影象),你就會遇到一些問題。當開始訓練這個網路的時候就會很不穩定,因為當預計值為255時,它將產生-1或1的值。這在大多數用於訓練網路的優化演算法中是錯誤的。因為這會產生乙個很大的梯度,訓練誤差將會越來越大。某種程度上,如果你的訓練正常的話那麼開始的幾個訓練階段也是浪費的,因為網路學習的第一件事就是將輸出值縮放並將其轉換為大致所需的範圍。如果你歸一化了你的資料,那麼這些問題將不存在。

你將網路訓練了幾個epoch,並且你可以看到誤差逐漸消失。但這並不意味這是一次成功的訓練。**可能仍然存在問題,可能是資料預處理,訓練**甚至是推理錯誤。誤差的消失並不意味這你的網路能夠真正學到有用的東西。

對於每個階段的資料檢查是非常重要的,你可以使用一些方法去顯示這些結果。

如果網路能夠正常執行的話,是有許多方法可以檢查這個網路。其中一部分是找出訓練誤差的真正含義。列印應用於訓練集中資料的網路結果,與真實值相比如何?你可能在訓練的時候看到誤差從1.0降到了0.01但是結果仍然不穩定。如果它在訓練集上工作,那麼請在驗證集上檢查是否仍然適用於以前未見過的資料。此處建議是你可以看看網路中的一切結果,而並不是只有網路出錯時才來檢視。

通常我們所知的事物資料是相似的,可能會有大量不同的數字表示。以角色動畫為例,如果我們使用角色關節相對於動作捕捉中心的三維位置來表示我們的資料,那麼在乙個位置執行乙個動作,或者面向乙個方向,可能會有大量不同的數字表示在不同的位置執行相同的運動,或者面向不同的方向執行相同的運動。我們需要做的是要表示出這些資料的差異性,即相似的動作可以用相似的資料表示

神經網路對輸入資料做了一些基本的假設,其中乙個重要的假設就是資料在空間中有一定的連續性。對於大多數空間,在兩個資料點中間的點某種程度上是這兩個點的混合以及這兩個臨近的資料點一定意義上代表了「相似」的東西。在資料空間存在很大的不連續性會導致學習變的很困難。

另一種資料預處理的方式是減少資料的冗餘 。例如,如果訓練人物動畫資料的神經網路必須為每個位置和方向的人物學習相同的一組動作,那麼網路的許多容量正在被浪費,並且很多學習過程被重複。

。 下半部分

神經網路訓練

學習了bp神經網路演算法,剛開始最終要的一點不明白的就是前一層和後一層 這裡指的只有三層,輸入層,隱藏層,輸出層 的權重,其實神經網路演算法中,前一層的每乙個節點和後一層的每乙個節點都有連線權重,初始權重是隨機的。而更新權重是通過輸出層的值來反向更新的。基本過程如下 1.輸入第乙個訓練樣本 對應的就...

神經網路的訓練

既然我們希望網路的輸出盡可能的接近真正想要 的值。那麼就可以通過比較當前網路的 值和我們真正想要的目標值,再根據兩者的差異情況來更新每一層的權重矩陣 比如,如果網路的 值高了,就調整權重讓它 低一些,不斷調整,直到能夠 出目標值 因此就需要先定義 如何比較 值和目標值的差異 這便是損失函式或目標函式...

神經網路訓練loss不下降原因集合

train loss 不斷下降,test loss不斷下降,說明網路仍在學習 train loss 不斷下降,test loss趨於不變,說明網路過擬合 train loss 趨於不變,test loss不斷下降,說明資料集100 有問題 train loss 趨於不變,test loss趨於不變,...