问题描述
(一如既往,请注意我不是专家,甚至不是工程师)我正在尝试了解 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,则算法会很好地结束。
我得到的公式如下图所示。
我的公式中和的项会快速减少,因为它们的乘积越来越多,总是 0
-
我应该在时间 t-1 时采用单元格的正确/预期值(正如我所做的那样)来计算此公式还是单元格实际给出的 h_t-1?
我希望得到任何建议。无论如何都不是这里的专家!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)