RNN中为什么要采用tanh而不是ReLu作为激活函数?

  • Post author:
  • Post category:其他


转自知乎

RNN中为什么要采用tanh而不是ReLu作为激活函数?

原问题:

RNN中一个经典的问题是如果避免梯度消失?造成这个问题的一个很重要原因是采用了tanh作为激活函数,很容易造成梯度消失问题。其中一种解决方案是采Gate的LSTM,使梯度的乘法变成了加法。那么为什么一开始不采用ReLu作为激活函数,这样的话梯度始终为1,不是很好解决了这个问题吗?也用不着采用Leaky Unites等解决方法。



回答:


首先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除了实现简单外没什么优势。