4

我試圖用xor函數訓練簡單的反向傳播神經網絡。當我使用tanh(x)作爲激活函數時,使用衍生1-tanh(x)^2,我在約1000次迭代後得到正確的結果。但是,當我使用g(x) = 1/(1+e^(-x))作爲激活函數,並使用衍生g(x)*(1-g(x))時,我需要大約50000次迭代才能獲得正確的結果。可能是什麼原因?多層感知器的激活函數

謝謝。

+1

太小的學習率可能?:p您如何編碼XOR數據集? '1 0 = 1'或'-1 1 = 1'? –

+0

但是爲什麼學習常數對於tanh是好的,但對邏輯函數來說還不夠好?我認爲「1」輸出爲真,「0」爲假。 – user1767774

+0

「結果」是什麼意思?兩個激活函數500次後的預測有多好? – alfa

回答

9

是的,你觀察到的是真的。在使用反向傳播訓練神經網絡時,我也有類似的觀察結果。對於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):

activation funcs

  • 左側是標準的邏輯功能:1/(1+e^(-x))
  • 右側是tanh函數,也稱爲雙曲正切。

很容易看出tanh是關於原點的反對稱。

根據efficient Backprop

對稱S形作爲tanh這樣經常收斂比標準邏輯函數更快。

同樣來自維基Logistic regression

從業告誡說S形函數與反向傳播訓練網絡時其是反對稱關於原點(例如,雙曲正切)導致更快收斂。

請參閱efficient Backprop瞭解更多詳情,在此解釋直覺。

查看elliott替代tanh更容易計算。它在下面顯示爲黑色曲線(藍色是原始的tanh)。

enter image description here

enter image description here

兩件事情應該從上面的圖表中脫穎而出。首先,TANH通常比Elliott需要更少的迭代訓練。因此,對於編碼器來說,Elliott的訓練精度並不高。但是,請注意培訓時間。 Elliott在TANH的一半時間內完成了它的整個任務,即使需要進行額外的迭代。這是一個巨大的改進,字面意思是在這種情況下,Elliott會將你的訓練時間縮短一半,並提供相同的最終訓練錯誤。雖然它需要更多的訓練迭代才能達到目標,但每次迭代的速度要快得多,但仍然會導致訓練時間縮短一半。