RNN中為什麼要採用tanh而不是ReLu作為啟用函式?
首先ReLU在RNN上是work的,而且work的很好。說一個可能很多人不知道的事實,ReLU根本最早就是發明來解決RNN的梯度消失問題的。論文包括
- 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.
- R.L.T. Hahnloser, “On the piecewise analysis of networks of linear threshold neurons”, Neural Networks
你問我是怎麼知道的?是因為這個事情寫到了必讀論文裡:
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除了實現簡單外沒什麼優勢。