有人可以向我解释初始化 keras lstm 层中传递的激活参数和循环激活参数之间的区别吗?

Posted

技术标签:

【中文标题】有人可以向我解释初始化 keras lstm 层中传递的激活参数和循环激活参数之间的区别吗?【英文标题】:Can someone explain to me the difference between activation and recurrent activation arguments passed in initialising keras lstm layer? 【发布时间】:2017-12-10 09:33:22 【问题描述】:

有人可以向我解释在初始化 keras lstm 层中传递的激活参数和循环激活参数之间的区别吗?

据我了解,LSTM 有 4 层。如果我没有将任何激活参数传递给 LSTM 构造函数,请解释一下每一层的默认激活函数是什么?

【问题讨论】:

【参考方案1】:

根据 Andrew Ng 在这个视频1 中的解释,更新、遗忘和输出门这三个门需要一个 sigmoid 类型的激活函数。因此,keras 文档中的激活是指这些激活值。

更新候选所需的激活和输出是 tanh。所以循环激活对应于 Keras 文档中的这些激活。RA-Recurrent Activation, Act.-Activations

【讨论】:

【参考方案2】:

开启code

1932 年的线路

i = self.recurrent_activation(z0)
f = self.recurrent_activation(z1)
c = f * c_tm1 + i * self.activation(z2)
o = self.recurrent_activation(z3)
h = o * self.activation(c)

recurrent_activation 用于激活输入/忘记/输出门。

激活 如果用于单元状态和隐藏状态。

【讨论】:

【参考方案3】:

一个 LSTM 单元除了一个候选隐藏状态 (g) 和一个输出隐藏状态 (c) 之外,还有 3 个门,称为输入门、遗忘门和输出门。

LSTMCell 类中的 build 方法包含调用这些激活的实现 (https://github.com/keras-team/keras/blob/master/keras/layers/recurrent.py#L1892)。

recurrent_activation 参数适用于输入、遗忘和输出门。此参数的默认值是硬 S 型函数。 activation 参数适用于候选隐藏状态和输出隐藏状态。此参数的默认值是双曲正切函数。

【讨论】:

【参考方案4】:

我验证了您的问题,以下是我的结论: - 激活:tanh; - 循环激活:sigmoid(keras 中默认 hard_sigmoid); 对于一个单元格中的 4 个门: - i、f、o 使用循环激活; - C 和更新 h 使用激活;

【讨论】:

【参考方案5】:

所以当调用LSTM 层时,会执行两种操作:

实现内部记忆单元的内部循环激活计算 - 为此使用recurrent_activation(默认值为hard_sigmoid)。 计算层的最终输出。在这里,您正在应用 activation 函数(默认值为 tanh)。

Here你可以阅读详细信息。

【讨论】:

我刚刚阅读了您分享的文章。我的理解是一个 LSTM 块中有四层。 1.忘记层,它决定从单元状态中忘记什么。 2.输入门层决定我们将更新单元状态的哪些值 3. tanh 层创建一个新的候选值向量,可以添加到状态中。 4.最后一个sigmoid层决定我们要输出什么。现在请你告诉我这四个中哪些是循环激活,哪些是正常激活。

以上是关于有人可以向我解释初始化 keras lstm 层中传递的激活参数和循环激活参数之间的区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

Keras 的 LSTM 层中的 4D 输入

Keras中units参数的含义如何解释清楚?

Keras 如何处理单元格和隐藏状态(RNN、LSTM)的初始值以进行推理?

keras 何时重置 LSTM 状态?

在 Keras 自定义层中连接多个形状为 (None, m) 的 LSTM 输出

如何使用 Keras 实现深度双向 LSTM?