为什么 LSTM 单元中有 tanh(x)*sigmoid(x)?

人工智能 神经网络 长短期记忆 激活函数 乙状结肠
2021-10-29 09:20:59

语境

我想知道为什么 LSTM 单元中有 sigmoid 和 tanh 激活函数。

在此处输入图像描述

我的直觉是基于流动的tanh(x)*sigmoid(x)

tanh(x)*sigmoid(x)

和导数tanh(x)*sigmoid(x)

(tanh(x)*sigmoid(x)')

在我看来,作者想要选择这样的函数组合,因为我们可以使用标准化数据和权重,所以导数可能会在 0 附近产生很大的变化。另一件事是,对于正值,输出将变为 1,对于负值,输出将变为 0,这很方便。

另一方面,我们在遗忘门中使用 sigmoid 似乎很自然,因为我们希望更好地关注重要数据。我只是不明白为什么输入门中不能只有一个 sigmoid 函数。

其他来源

我在网上找到的是这篇文章,作者声称:

为了克服梯度消失的问题,我们需要一种方法,其二阶导数可以在变为零之前维持 > 很长一段时间。Tanh 是一个很好的函数,它具有上述所有属性。

但是,他没有解释为什么会这样。

另外,我在这里找到了相反的说法,作者说激活函数的二阶导数应该为零,但是,没有证据证明这一说法。

问题

加起来:

  1. 为什么我们不能在输入门上放置一个只有 sigmoid 的信号?
  2. tanh(x)*sigmoid(x)为什么输入和输出门都有信号?
1个回答

单元内的 tanh 函数表示单元输出或单元状态。这些值要么传递到其他层,要么在层内传递到下一个时间步。理论上,这里可以根据喜好使用其他激活函数,类似于其他前馈或 RNN 网络。然而,-1 到 1 的 tanh 输出范围是有用的,我希望 tanh 已经被实验验证为一个很好的一般情况激活函数。

sigmoid 函数用作操纵原始 RNN 值的软门。对于您的分析而言,重要的是,没有任何 sigmoid 与任何 tanh 具有相同的输入。您问题中单元格图中的每个绿色框都有一组单独的可学习权重应用于组合的 input+hidden_​​state 向量。

这意味着您对 tanh(x)*sigmoid(x) 的分析没有实际意义。该函数实际上是 tanh(x)*sigmoid(y),因为每个激活函数的输入可能完全不同。

直觉是,当 sigmoid 函数应该为 0 或 1(取决于门函数和输入数据)时,LSTM 可以学习相对“硬”的开关进行分类。由于权重独立于门和输入值处理组件,因此单元输出和状态组件的梯度不是组合函数,而是简单地乘以相关开关的当前值。乘法硬开关 1 将允许梯度直接从输出损失流回到做出门决定的点——取决于哪个门被激活,这个改进的梯度信号要么是输入处理权重,要么是隐藏状态处理权重。

输入和单元状态处理也有可能混合在各种组合中,不保证梯度强。然而,在需要强记忆类信号的情况下(例如在处理文本时使用标点符号),可以观察 LSTM 学习这些信号,以高置信度(接近 0 或 1)有效地对输入进行分类,从而创建切换开关,计数器等,在细胞状态向量内。