1. 程式人生 > >RNN中為什麼要採用tanh而不是ReLu作為啟用函式?

RNN中為什麼要採用tanh而不是ReLu作為啟用函式?

首先ReLU在RNN上是work的,而且work的很好。說一個可能很多人不知道的事實,ReLU根本最早就是發明來解決RNN的梯度消失問題的。論文包括

  1. E. Salinas & L.F. Abbott, “A model of multiplicative neural responses in parietal cortex”, Proc. National Academy of Science U.S.A., vol. 93, pp. 11956–11961, 1996.
  2. R.L.T. Hahnloser, “On the piecewise analysis of networks of linear threshold neurons”, Neural Networks
    , vol. 11, pp. 691–697, 1998.

你問我是怎麼知道的?是因為這個事情寫到了必讀論文裡:

X. Glorot, A. Bordes, & Y. Bengio, “Deep sparse rectifier networks,” Proc. AISTATS’11, Ft. Lauderdale, FL, USA, 2011.

為什麼

@何之源 答案裡提到的梯度爆炸問題其實不是什麼麻煩?因為現在大家都會做某種形式的Gradient clipping(也就是限定一下梯度絕對值的上限,超過就截斷)來避免梯度爆炸。覺得Gradient clipping很糙?其實一點都不糙,因為用SGD訓練深度模型數學上本身就已經糙的不能再糙了。覺得LSTM不需要這種東西?No。如果查查主流工具包,或者看看比較實際的LSTM應用論文,應該都至少這麼做了。比如Google在語音識別應用LSTM的這篇名作裡

H. Sak, A. Senior, & F. Beaufays, “Long short-term memory recurrent neural network architectures for large scale acoustic modeling”, Proc. Interspeech, Singapore, 2014.
LSTM需要clip的還不止梯度,甚至還包括memory cell value。

我自己在若干種語音識別問題,包括從大到1000小時語音(樣本數>360M)複雜資料,到小到3小時語音的TIMIT資料(約1M樣本)上 ,ReLU RNN和同樣維度的LSTM的效能差距很小(比如相對3%);如果運氣夠好(主要是weight decay調的好),有時候甚至沒有差別。但是LSTM的問題是如果不做low rank approximation之類的引數控制,運算量會是對應RNN的四倍以上。所以Gating其實是一種代價很高的方法。

那很奇怪的是為什麼LSTM這麼流行?流行到大家都預設解決Gradient vanishing就一定得用LSTM?我覺得一方面可能是LSTM確實魯棒性特別好,基本上只要別調的太差(一般是weight decay),在幾乎所有應用裡都有非常好的結果,尤其是擬合訓練集的水平特別好。另一方面也許是因為LSTM把memory和邏輯電路的概念結合起來的idea很棒(絕對是人見人愛)。但換個角度講,如果把ReLU RNN的引數增加四倍到跟LSTM的引數一樣多,它應該是會穩定好過LSTM的……所以猜測當年這裡沒有嚴格比較同參數下的效能,而且可以猜測早期促成LSTM流行的人其實並不太關心計算量問題(也許是他們當時分析比較多,實驗規模比較小吧)。最後,LSTM其實很容易使用前面提到的low rank approximation把引數減少個2~4倍,效能沒什麼太明顯的損失,所以現在標準ReLU RNN對LSTM除了實現簡單外沒什麼優勢。