在LSTM网络(Understanding LSTMs)中,为什么输入门和输出门使用tanh?这背后的直觉是什么? 它只是一个非线性变换? 如果是,我可以将两者都更改为另一个激活功能(例如ReLU)吗?
答案 0 :(得分:58)
Sigmoid
被用作LSTM
中3个门(进,出,忘记)的门控函数,因为它输出的值介于0和1之间,它可以让不流动或整个大门的完整信息流。另一方面,为了克服消失的梯度问题,我们需要一个函数,其二阶导数可以在达到零之前保持长距离。具有上述属性的Tanh
是一个很好的功能。
一个好的神经元单位应该是有界的,易于区分,单调(适合凸优化)并且易于处理。如果您考虑这些品质,那么我相信您可以使用ReLU
代替tanh
函数,因为它们是彼此非常好的替代品。但在选择激活功能之前,您必须知道您选择的优缺点是什么。我将简要介绍一些激活函数及其优点。
<强>乙状结肠强>
数学表达式:sigmoid(z) = 1 / (1 + exp(-z))
一阶导数:sigmoid'(z) = -exp(-z) / 1 + exp(-z)^2
优点:
(1) Sigmoid function has all the fundamental properties of a good activation function.
<强>双曲正切强>
数学表达式:tanh(z) = [exp(z) - exp(-z)] / [exp(z) + exp(-z)]
一阶导数:tanh'(z) = 1 - ([exp(z) - exp(-z)] / [exp(z) + exp(-z)])^2 = 1 - tanh^2(z)
优点:
(1) Often found to converge faster in practice
(2) Gradient computation is less expensive
Hard Tanh
数学表达式:hardtanh(z) = -1 if z < -1; z if -1 <= z <= 1; 1 if z > 1
一阶导数:hardtanh'(z) = 1 if -1 <= z <= 1; 0 otherwise
优点:
(1) Computationally cheaper than Tanh
(2) Saturate for magnitudes of z greater than 1
<强> RELU 强>
数学表达式:relu(z) = max(z, 0)
一阶导数:relu'(z) = 1 if z > 0; 0 otherwise
优点:
(1) Does not saturate even for large values of z
(2) Found much success in computer vision applications
Leaky ReLU
数学表达式:leaky(z) = max(z, k dot z) where 0 < k < 1
一阶导数:relu'(z) = 1 if z > 0; k otherwise
优点:
(1) Allows propagation of error for non-positive z which ReLU doesn't
这个paper解释了一些有趣的激活功能。你可以考虑阅读它。
答案 1 :(得分:34)
LSTM管理一个内部状态向量,当我们添加某个函数的输出时,其值应该能够增加或减少。 Sigmoid输出总是非负的;州内的价值只会增加。 tanh的输出可以是正的也可以是负的,允许状态的增加和减少。
这就是为什么tanh用于确定要添加到内部状态的候选值的原因。 LSTM的GRU表兄没有第二个tanh,所以从某种意义上说,第二个没有必要。查看Chris Olah的Understanding LSTM Networks中的图表和解释,了解更多信息。
相关问题,“为什么在LSTM中使用sigmoids它们在哪里?”也可以根据函数的可能输出来回答:“gating”是通过乘以0和1之间的数字来实现的,这就是sigmoids的输出。
sigmoid和tanh的衍生物之间没有真正有意义的差异; tanh只是一个重新缩放和转移的sigmoid:见Richard Socher的Neural Tips and Tricks。如果二阶导数是相关的,我想知道如何。