keras - 循环神经网络/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 对齐?对此的任何想法表示赞赏!
解决方案
在经典的 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 非常有帮助!
推荐阅读
- java - (Java) 如何使用 SecureRandom 生成 1 到 4 之间的随机整数
- c++ - 是否可以重载将抽象类的引用/指针作为输入的运算符?
- mysql - mysql查询从不同的表中添加列,左连接为空值
- arrays - 在 mongo 的数组中查找平均天数
- jquery - 在 div 内滚动时添加 CSS 动画溢出:滚动
- bash - 用于从文件中获取值并将其保存到其他文件的 Shell 脚本
- python - 试图让答案重复
- c++ -
未定义的引用 Native Android Activity VS 2019 - reactjs - React - 将状态作为道具传递给另一个组件
- c++ - 确定 DLL_PROCESS_DETACH 是否是最后一个