1

雙曲正切激活我一直在努力的UFLDL教程(在MATLAB /八度):稀疏自動編碼器與UFLDL

http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial

,並已嘗試在不同的數據集稀疏自動編碼器。我嘗試在時間序列數據上運行它並遇到問題。由於輸入數據具有負值,所以S形激活函數(1/1 + exp(-x))不合適。當替換爲tanh時,優化程序minfunc(L-BFGS)失敗(步長在TolX下)。我沒有改變就大幅降低了TolX常數。 我改變輸出層爲線性,保持輸入層sigmoid,但這不是一個可取的解決方案。自編碼器的輸出由一個常數(0.5)放大,這會擾亂成本函數。所以....簡而言之:

爲什麼Tanh激活函數不適用於L-BFGS? (或者是其他錯誤)?

..我錯過了什麼?在任何地方都可以讀到它說激活函數是可以互換的。我知道有解決方法(重新調整數據,使用FFT係數等),但我不明白爲什麼這不起作用。

無論如何,先謝謝任何人的答案!在這裏的第一篇文章,我一直在閱讀這些類型的論壇越來越多,我發現它們越來越有幫助..

+0

你知道tanh函數的導數是否正確導出? – 2012-07-11 12:48:04

+0

1 - tanh(x)^ 2對不對? – 2012-07-11 13:14:07

+0

http://www.wolframalpha.com/input/?i=derivative+tanh – 2012-07-11 13:18:27

回答

2

我想我可能已經想通了。感謝你們兩位回答!稀疏性懲罰使用Kullback Leibler Divergence。看到這個鏈接,稍微超過了頁面的一半。 (你能在乳膠在此處鍵入?)這可能是有點長反正..

http://deeplearning.stanford.edu/wiki/index.php/Autoencoders_and_Sparsity

英文:稀疏性懲罰試圖最小化隱藏單元的激活,但它假定與輸出乙狀結腸範圍在0到1之間,因爲KL div只在0到1之間。 如果tanh的平均激活爲0(這是我們想要的一個稀疏自動編碼器),那麼該頁面上給出的KL div是不滿意的。 我四處張望,沒有運氣;

是否有一種KL div的形式,它具有tanh激活的適當範圍?有人可以指點我的任何引用?在上面鏈接的那個網站上,作者說很多稀疏性懲罰的選擇都沒問題,但沒有詳細說明這些其他選擇可能是什麼。謹慎地做出一些事情..?或者尋找接受的東西。再次感謝!

0

我有點鬆散,遵循UFLDL,我遇到了同樣的問題。我試圖(beta/2 * m)*平均(平均(abs(a2)))來規範稀疏性的成本,認爲隨着一個神經元激活的增加將會線性匹配其他神經元激活的減少。我希望這會比吉隆坡帶來更好的稀疏性;在p附近KL的低導數意味着當a2_j接近於p時,a2_j中的進一步減小導致成本的較小降低,使得a2_j達到p的可能性越來越小;線性成本沒有這個問題。

但是我很難弄清楚如何修改d2以在反向傳播期間獲得正確的梯度。你現在可能已經找到了一些其他的解決方案,但是如果沒有的話,這可能值得搞清楚。如果你(或其他人!)弄清楚,我很樂意得到答案=)

編輯:d2 = d2 +((network.beta /(2 * network.examples))* exp(-a2 );)。* z2_grad;似乎給了好的結果。

edit2:不,它不。對不起'回合

0

我已經嘗試了UFLDL之後的稀疏自動編碼器算法。我正在使用fortran90。

在我的代碼中,我使用了tanh激活函數。所述p_hat術語已被修改,以使用範圍[0,1],

p_hat = (p_hat+1.0)/2.0 

因此稀疏懲罰不會變得不可行。我的成本函數平穩收斂,但隱藏層中的激活節點不會變爲非活動狀態(-1)。我無法理解這一現象。這不利於我減少輸入向量維數的目的。