首页 > 解决方案 > 循环神经网络/LSTM 结构:c_t+1 = i_t * k_t + c_t * f_t

问题描述

LSTM 的来源: https ://medium.com/@jon.froiland/recurrent-neural-networks-part-6-d585c7af8923

output_t = activation(dot(state_t, Uo) + dot(input_t, Wo) + dot(C_t, Vo) + bo)
i_t = activation(dot(state_t, Ui) + dot(input_t, Wi) + bi)
f_t = activation(dot(state_t, Uf) + dot(input_t, Wf) + bf)
k_t = activation(dot(state_t, Uk) + dot(input_t, Wk) + bk)

通过组合 i_t、f_t 和

c_t+1 = i_t * k_t + c_t * f_t

我理解 f_t 和 i_t OR k_t 的必要性,但是,我不直观地理解为什么 i_t 和 k_t 都是必要的。每个都包含相同的输入数据(state_t 和 input_t)。是否出于实现目的,在矩阵维数方面帮助与 c_t * f_t 对齐?对此的任何想法表示赞赏!

标签: keraslstmrecurrent-neural-network

解决方案


在经典的 LSTM 中,这两者具有不同的激活函数。i_t称为具有 sigmoid 激活函数的输入门,k_t也称为具有 tanh 激活函数的“候选值”。我还阅读了术语输入和“输入”和“输入调制”(例如Gal & Ghahramani)。引用Christopher Olah 关于 LSTM的精彩博客文章,

下一步 [在遗忘门层之后] 是决定我们将在单元状态中存储哪些新信息。这有两个部分。首先,称为“输入门层”的 sigmoid 层决定我们将更新哪些值。接下来,一个 tanh 层创建一个新的候选值向量,C~t,可以添加到状态中。在下一步中,我们将结合这两者来创建状态更新。

他指的输入门层是你的i_t,候选值是k_t。基本上,

sigmoid 层告诉我们要更新哪些(或多少比例)值,tanh 层告诉我们如何更新状态。

(在博客文章讨论中引用 Jann Krynauw)。请务必查看该帖子,我发现它对理解 LSTM 非常有帮助!


推荐阅读