在 LSTM 网络中(Understanding LSTMs),为什么输入门和输出门都使用 tanh?
这背后的直觉是什么?
只是非线性变换?如果是,我可以将两者都更改为另一个激活函数(例如,ReLU)吗?
在 LSTM 网络中(Understanding LSTMs),为什么输入门和输出门都使用 tanh?
这背后的直觉是什么?
只是非线性变换?如果是,我可以将两者都更改为另一个激活函数(例如,ReLU)吗?
具体来说, Sigmoid被用作LSTM中三个门(输入、输出和忘记)的门控函数,因为它输出一个介于 0 和 1 之间的值,并且它可以不让信息在整个门中流动或完全流动。
另一方面,为了克服梯度消失问题,我们需要一个二阶导数可以在很长一段时间内保持为零的函数。Tanh
是具有上述性质的良好功能。
一个好的神经元单元应该是有界的、易于微分的、单调的(有利于凸优化)并且易于处理。如果您考虑这些品质,那么我相信您可以使用ReLU
代替tanh
功能,因为它们是彼此非常好的替代品。
但是在选择激活函数之前,你必须知道你的选择相对于其他人的优点和缺点是什么。我将简要介绍一些激活函数及其优势。
乙状结肠
数学表达式:sigmoid(z) = 1 / (1 + exp(-z))
一阶导数:sigmoid'(z) = -exp(-z) / 1 + exp(-z)^2
好处:
(1) The 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
硬谭
数学表达式: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
泄漏的 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
本文解释了一些有趣的激活函数。你可以考虑读一读。
LSTM 管理一个内部状态向量,当我们添加某个函数的输出时,其值应该能够增加或减少。Sigmoid 输出总是非负的;该州的价值只会增加。tanh 的输出可以是正数或负数,允许状态的增加和减少。
这就是为什么使用 tanh 来确定要添加到内部状态的候选值。LSTM 的 GRU 表亲没有第二个 tanh,所以从某种意义上说,第二个不是必需的。查看 Chris Olah 的理解 LSTM 网络中的图表和解释了解更多信息。
相关的问题,“为什么在 LSTM 中使用 sigmoid?” 也根据函数的可能输出来回答:“门控”是通过乘以 0 到 1 之间的数字来实现的,这就是 sigmoids 的输出。
sigmoid 和 tanh 的导数之间没有真正有意义的区别;tanh 只是一个重新调整和移动的 sigmoid:请参阅 Richard Socher 的神经技巧和技巧。如果二阶导数是相关的,我想知道如何。