在LSTM网络(理解LSTM)中,为什么输入门和输出门使用tanh?
这背后的直觉是什么?
这仅仅是一种非线性变换吗?如果是的话,我可以将两者都改为另一个激活函数(例如ReLU)吗?
回答:
特别是,Sigmoid 被用作LSTM中三个门(输入门、输出门和遗忘门)的门控函数,因为它输出一个介于0和1之间的值,并且可以控制信息在各门之间的无流或完全流动。
另一方面,为了克服梯度消失问题,我们需要一个函数,其二阶导数能够在变为零之前维持较长时间。Tanh
就是一个具有上述属性的好函数。
一个好的神经元单元应该是有界的、容易微分的、单调的(有利于凸优化)并且易于处理。如果考虑这些品质,那么我认为你可以用ReLU
代替tanh
函数,因为它们是彼此非常好的替代品。
但在选择激活函数之前,你必须了解你选择的函数相对于其他函数的优缺点。我将简要描述一些激活函数及其优点。
Sigmoid
数学表达式:sigmoid(z) = 1 / (1 + exp(-z))
一阶导数:sigmoid'(z) = -exp(-z) / 1 + exp(-z)^2
优点:
(1) Sigmoid函数具备一个好的激活函数的所有基本属性。
Tanh
数学表达式: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) 在实践中通常发现收敛速度更快(2) 梯度计算成本较低
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) 计算成本比Tanh低(2) 当z的绝对值大于1时饱和
ReLU
数学表达式:relu(z) = max(z, 0)
一阶导数:relu'(z) = 1 if z > 0; 0 otherwise
优点:
(1) 即使z值很大也不会饱和(2) 在计算机视觉应用中取得了很大成功
Leaky ReLU
数学表达式:leaky(z) = max(z, k dot z) where 0 < k < 1
一阶导数:relu'(z) = 1 if z > 0; k otherwise
优点:
(1) 允许非正z的误差传播,这是ReLU所不具备的
这篇论文解释了一些有趣的激活函数。你可以考虑阅读一下。