在 LSTM 中使用 tanh 的直觉是啥? [关闭]

Posted

技术标签:

【中文标题】在 LSTM 中使用 tanh 的直觉是啥? [关闭]【英文标题】:What is the intuition of using tanh in LSTM? [closed]在 LSTM 中使用 tanh 的直觉是什么? [关闭] 【发布时间】:2017-04-07 06:27:31 【问题描述】:

在一个 LSTM 网络 (Understanding LSTMs) 中,为什么输入门和输出门使用 tanh?

这背后的直觉是什么?

只是非线性变换?如果是,我可以将两者都更改为另一个激活函数(例如 ReLU)吗?

【问题讨论】:

输入门和输出门都不使用 tanh 函数进行激活。我想这是一个误解。输入门 (i_t) 和输出门 (o_t) 都使用 sigmoid 函数。在 LSTM 网络中,tanh 激活函数用于确定候选单元状态(内部状态)值(\tildeC_t)并更新隐藏状态(h_t)。 【参考方案1】:

Sigmoid 特别是在LSTM 中用作三个门(输入、输出和忘记)的门控函数,因为它输出一个介于 0 和 1 之间的值,并且它可以让信息不流通或完全流通。

另一方面,为了克服梯度消失问题,我们需要一个二阶导数可以在很长一段时间内保持为零的函数。 Tanh 是一个很好的函数,具有上述属性。

一个好的神经元单元应该是有界的、易于微分的、单调的(有利于凸优化)并且易于处理。如果您考虑到这些品质,那么我相信您可以使用 ReLU 代替 tanh 函数,因为它们是很好的替代品。

但是在选择激活函数之前,你必须知道你的选择相对于其他选择的优缺点是什么。我将简要介绍一些激活函数及其优势。

Sigmoid

数学表达式: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

数学表达式: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

泄漏的 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

This paper 解释了一些有趣的激活函数。您可以考虑阅读。

【讨论】:

所以,假设我想将激活更改为 RelU,我必须同时更改输入门激活和输出乘法中的 tanh,这是正确的 @Wasi Ahmad 吗? 上面的论文链接好像失效了,但我相信它指的是:pdfs.semanticscholar.org/a26f/…/citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.43.6996。 sigmoid一阶导数有个小错误。它实际上等于:sigmoid'(z) = exp(-z) / (1 + exp(-z))^2 以上答案正确的地方,与问题无关。导数不区分 tanh 和 sigmoid,因为 tanh 只是一个重新缩放和移位的 sigmoid。 (见:cs224d.stanford.edu/lectures/CS224d-Lecture6.pdf) “另一方面,为了克服梯度消失问题,我们需要一个函数,它的二阶导数可以在很长一段时间内维持到零。” - 为什么??【参考方案2】:

LSTM 管理一个内部状态向量,当我们添加某个函数的输出时,其值应该能够增加或减少。 Sigmoid 输出总是非负的;该州的价值只会增加。 tanh 的输出可以是正数或负数,允许状态的增加和减少。

这就是为什么使用 tanh 来确定要添加到内部状态的候选值的原因。 LSTM 的 GRU 表亲没有第二个 tanh,因此从某种意义上说,第二个不是必需的。查看 Chris Olah 的Understanding LSTM Networks 中的图表和解释了解更多信息。

相关问题“为什么在 LSTM 中使用 sigmoid?”也可以根据函数的可能输出来回答:“门控”是通过乘以 0 到 1 之间的数字来实现的,这就是 sigmoid 的输出。

sigmoid 和 tanh 的导数之间并没有真正有意义的区别; tanh 只是一个重新缩放和移动的 sigmoid:请参阅 Richard Socher 的 Neural Tips and Tricks。如果二阶导数是相关的,我想知道如何。

【讨论】:

@End-2-End 听起来对我来说是正确的,但可能不必要的澄清是,通常整个事情都是在向量上运行的,所以边界在每个组件上。 @AaronSchumacher,您提到状态中的值应该能够增加和减少,并且由于 sigmoid 始终具有非负输出,因此 tanh 是输出的首选激活函数。那么 ReLU 不也是一样的,因为它们也总是非负数吗?这是否意味着如果我们将 tanh 替换为 ReLU,LSTM 将无法按预期工作? @End-2-End 听起来不错。 ReLU 是非负的。 @Quastiat 我们可以分别考虑加法和乘法部分:“值应该能够增加或减少当我们添加某个函数的输出。Sigmoid 输出总是非负的;该州的价值只会增加。”添加剂部分也是如此。但是,是的,乘以零到一之间的数字确实会降低绝对值。 (它仍然不能改变标志。) 虽然这解释了状态更新规则,但这未能解决 LSTM 的输出门包含一个 tanh 层的事实,h_t = o_t * tanh(C_t).. 其原因是它可以在状态更新加法操作后将隐藏状态重新归一化,使其位于 [-1,1] 之间。

以上是关于在 LSTM 中使用 tanh 的直觉是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

catboost算法中对称树背后的直觉是啥?

Keras中 LSTM 模型解读

lstm预测基于粒子群优化lstm预测matlab源码

lstm预测基于鲸鱼算法优化lstm预测matlab源码

Keras Lstm中dropout机制

Keras调用LSTM之函数接口介绍