簡體   English   中英

在神經網絡的學習階段反向傳播后會發生什么?

[英]What happens after backpropagation in the learning phase within Neural Network?

在學習階段的神經網絡內,有兩種機制發生。 前饋和反向傳播。 以異或運算為例。

A   B   Q
0   0   0
0   1   1
1   0   1
1   1   0

對於第一遍(0,0->0)前饋發生,然后反向傳播發生。在這一步之后,所有的權重都被重新計算。
現在會發生什么?

問題 1:同樣的輸入 0,0 前饋與新計算的權重(在反向傳播期間),然后反向傳播直到錯誤變為零? 如果是,如果錯誤永遠不會為空會發生什么? 這讓我想到下一個問題。

問題 2:下一次 (0,1->1) 的學習何時發生?

問題 3:假設第一遍的結論權重為 10.3,-2.3,5.5 。第二遍(0,1->1) 以第一遍的結論權重開始前饋?


如果我必須通過代碼來描述以下哪個代碼是正確的

以下選項的通用代碼

averageErrorUntilLearn = 0.002;
inputs = [
[0, 0],
[0, 1],
[1, 0],
[1, 1]
];
outputs = [0, 1, 1, 0];
inputNeurons = 2;
hiddenLayers = 1;
outputNeurons = 1;

//initialize the Neural Net
neuralNetObj = NeuralNet();
neuralNetObj.createTopology(inputNeurons, hiddenLayers, outputNeurons);
weightsForTheNetwork = randomWeights();


問題 3 場景 - 每次傳遞計算的權重被發送到下一次傳遞

//learn 
while (averageError > averageErrorUntilLearn):
    for i in range(0,len(input)):
        console.log("Current Pass-" + i);
        neuralNetObj.learningParams(inputs[i], outputs[i]);
        neuralNetObj.initializeWeights(weightsForTheNetwork);
        neuralNetObj.feedforward();
        neuralNetObj.backPropagate();
        weightsForTheNetwork=neuralNetObj.getNewWeights();
        averageError = neuralNetObj.getAverageError();

問題 1 場景 - 每次傳遞都使用自己的權重計算,直到達到所需的學習,然后將權重發送到新的傳遞

//learn 
for i in range(0,len(input)):
    while (averageError > averageErrorUntilLearn):
        console.log("Current Pass-" + i);
        neuralNetObj.learningParams(inputs[i], outputs[i]);
        neuralNetObj.initializeWeights(weightsForTheNetwork);
        neuralNetObj.feedforward();
        neuralNetObj.backPropagate();
        weightsForTheNetwork = neuralNetObj.getNewWeights();
        averageError = neuralNetObj.getAverageError();


或者我在這里完全錯誤並且上述情況都不正確?

前向-后向傳遞是訓練的一個步驟,它計算梯度,稍后用於通過近似方法(SGD、RMSProp、Adam 等)調整權重。

您所描述的是一次學習一個輸入,即對(0,0->0)進行向前-向后傳遞,然后對(0,1->1)進行向前-向后傳遞,依此類推。 每一步都使用上一步計算的權重,它不知道之前的數據是什么。

然而,在實踐中,訓練通常是分批進行的,即網絡對批[(0,0->0), (0,1->1)]采取一步,然后對下一批進行,依此類推. 順序是隨機的,因此批次可以不同地形成。 在某些模型中,每個下一批都是隨機抽取的,因此有可能將相同的輸入連續多次饋送到網絡,盡管可能性不大。 但通常的方法是:混洗所有訓練數據(在您的案例中為 4 個示例)並批量迭代所有數據。 然后重復。

在極少數情況下,批次包含所有訓練數據,這基本上意味着它是普通的梯度下降(非隨機)。 在這種情況下,每一步都會一遍又一遍地接受相同的輸入。

總而言之:您可以隨意以任何您想要的順序饋送網絡,但通常人們會以隨機順序進行。 此外,錯誤永遠不會完全為空,因此您只需在迭代一定次數后停止。

1) 是的,反向傳播步驟將繼續更新權重,直到前饋步驟出現 0 錯誤。 無論它是否達到 0 錯誤,您都必須定義一個停止標准來告訴它何時停止。 最簡單的就是設置固定的迭代次數來訓練。 這是一個很好的、簡單的入門方法。 真正的問題將使用更復雜的方法,例如定期檢查單獨驗證步驟的准確性,並在准確性停止提高時停止。 但是,只需對 XOR 問題使用固定次數的迭代即可。 由您決定並告訴它停止標准是什么。

2)不想在一個實例上重復訓練(比如0,0->0),然后切換到不同的實例。 如果您一次訓練一個實例,請先執行第一個實例(前向和反向傳播步驟),然后再執行下一個實例,依此類推,直到訓練數據結束。 然后再次從頭開始並再次遍歷每個實例。 通過這種方式,它對訓練數據中表示的每個案例進行交錯訓練。 正如@Maxim 所說,分批訓練更為常見。 在批處理中,它將同時執行所有前向傳遞並收集網絡對答案的所有猜測。 然后它將計算批次的每個實例的誤差,並反向傳播一次以校正批次中所有實例的平均誤差。 因此,它正在學習如何同時處理批次中的所有案例。 這比一次執行一個實例要快,但網絡應該能夠以任何一種方式學習問題。 這里的重點是它同時學習訓練數據中的所有案例,而不是一個一個。

3) 是的,一旦您執行反向傳播步驟,它將對權重應用更新,而下一個訓練步驟將使用新的權重。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM