为什么我们在对 LSTM 单元执行反向传播时会忽略过去的记忆?

问题描述

(一如既往,请注意我不是专家,甚至不是工程师)我正在尝试了解 LSTM 层的反向传播。我试图理解这样的想法,即必须在每一步计算导数并通过时间批量大小(例如一个句子)添加,但我不明白为什么我们在每一步都忽略来自记忆通道的过去信息。>

为了举例说明我的问题,我试图检查这个关于 LSTM 的遗忘门的误差函数的导数公式:(https://www.geeksforgeeks.org/lstm-derivation-of-back.../)

dE/df = E_delta * o * (1-tanh2 (ct)) * ct-1

where:

E is ERror,f is forget gate

o is output gate,(1-tanh^2(ct)) is the dervative of tanh(ct) with respect to ct and 

ct-1 is memory at time t-1

我的问题是:是否应该“需要”将 ct-1 视为也依赖于遗忘门,而不仅仅是作为一个常量?我们不应该把遗忘门(时间 t)和记忆(时间 t-1)的乘积看成 f(x)g(x) 的乘积吗?

那么我们将有:d(f(x)g(x))/dx = f'g + fg'。

第一部分已经在公式中,第二部分将带我们到 LSTM 记忆的最开始。如果在 t=0 时将 ct 设置为 0,则算法会很好地结束。

我得到的公式如下图所示。

enter image description here

我会添加两个额外的问题(假设我的公式不只是明显错误

  1. 我的公式中和的项会快速减少,因为它们的乘积越来越多,总是 0

  2. 我应该在时间 t-1 时采用单元格的正确/预期值(正如我所做的那样)来计算此公式还是单元格实际给出的 h_t-1?

我希望得到任何建议。无论如何都不是这里的专家!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)