我試圖用xor
函數訓練簡單的反向傳播神經網絡。當我使用tanh(x)
作爲激活函數時,使用衍生1-tanh(x)^2
,我在約1000次迭代後得到正確的結果。但是,當我使用g(x) = 1/(1+e^(-x))
作爲激活函數,並使用衍生g(x)*(1-g(x))
時,我需要大約50000次迭代才能獲得正確的結果。可能是什麼原因?多層感知器的激活函數
謝謝。
我試圖用xor
函數訓練簡單的反向傳播神經網絡。當我使用tanh(x)
作爲激活函數時,使用衍生1-tanh(x)^2
,我在約1000次迭代後得到正確的結果。但是,當我使用g(x) = 1/(1+e^(-x))
作爲激活函數,並使用衍生g(x)*(1-g(x))
時,我需要大約50000次迭代才能獲得正確的結果。可能是什麼原因?多層感知器的激活函數
謝謝。
是的,你觀察到的是真的。在使用反向傳播訓練神經網絡時,我也有類似的觀察結果。對於XOR
問題,我用建立2x20x2
網絡,物流功能需要3000+發作得到如下結果:
[0, 0] -> [0.049170633762142486]
[0, 1] -> [0.947292007836417]
[1, 0] -> [0.9451808598939389]
[1, 1] -> [0.060643862846171494]
在使用tanh
爲激活功能,這裏是後800分集的結果。 tanh
一致收斂速度快於logistic
。
[0, 0] -> [-0.0862215901296476]
[0, 1] -> [0.9777578145233919]
[1, 0] -> [0.9777632805205176]
[1, 1] -> [0.12637838259658932]
兩個函數形狀看起來像下面(來源:efficient backprop):
1/(1+e^(-x))
。tanh
函數,也稱爲雙曲正切。很容易看出tanh
是關於原點的反對稱。
對稱S形作爲
tanh
這樣經常收斂比標準邏輯函數更快。
同樣來自維基Logistic regression:
從業告誡說S形函數與反向傳播訓練網絡時其是反對稱關於原點(例如,雙曲正切)導致更快收斂。
請參閱efficient Backprop瞭解更多詳情,在此解釋直覺。
查看elliott替代tanh
更容易計算。它在下面顯示爲黑色曲線(藍色是原始的tanh
)。
兩件事情應該從上面的圖表中脫穎而出。首先,TANH通常比Elliott需要更少的迭代訓練。因此,對於編碼器來說,Elliott的訓練精度並不高。但是,請注意培訓時間。 Elliott在TANH的一半時間內完成了它的整個任務,即使需要進行額外的迭代。這是一個巨大的改進,字面意思是在這種情況下,Elliott會將你的訓練時間縮短一半,並提供相同的最終訓練錯誤。雖然它需要更多的訓練迭代才能達到目標,但每次迭代的速度要快得多,但仍然會導致訓練時間縮短一半。
太小的學習率可能?:p您如何編碼XOR數據集? '1 0 = 1'或'-1 1 = 1'? –
但是爲什麼學習常數對於tanh是好的,但對邏輯函數來說還不夠好?我認爲「1」輸出爲真,「0」爲假。 – user1767774
「結果」是什麼意思?兩個激活函數500次後的預測有多好? – alfa