artificial-intelligence - 在 LSTM 中,[h(t-1)] 的大小如何与 [h(t)] 相同?
问题描述
我似乎无法在任何地方找到这个特定问题的答案。我正在从头开始重新创建 LSTM,因为我想更好地理解它。
我已经列出了我目前对 LSTM 的理解,并将其附加到这篇文章中。
如果它采用 h(t-1) 并将其与 x(t) 连接,则将生成一个比 h(t-1) 更大的向量。稍后将 Sigmoid 应用于此连接向量,并将 tanh 应用于单元状态,然后将它们相乘。这会产生新的隐藏状态。
那么 h(t) 的大小如何不大于 h(t-1)?为什么隐藏状态不会随着每个时间步长而增长?
解决方案
嗯,图中的一些步骤里面隐藏了一些投影步骤。图中的“sigmoid”符号实际上意味着将 sigmoid 函数应用于线性投影操作的输出。那是; 用于 @
矩阵乘法,numpy
样式,您不是简单地采用sigmoid([h(t-1); x(t)])
,您实际上是采用sigmoid(W @ x(t) + U @ h(t-1))
(暂时不考虑偏差项),W, U
具有学习参数的投影矩阵在哪里。
在矩阵域中,这在数学上确实等同于连接hx(t) = [h(t-1); x(t)]
和学习一些V
适当大小的参数,这V @ hx(t)
就是你的 sigmoid 的输入。实际上,V
只是U, W
从上方(按此顺序)的水平串联。
现在,让我们完成图中的示例。您有h(t-1)
with shape(3,)
和x(t)
with shape (2,)
,我们将学习W
shape(3, 2)
和U
with shape(3, 3)
以产生 shape 的最终输出(3,)
,这与h(t-1)
. 请注意,如果我们决定将其表示为hx(t)
带有 shape的连接向量(5,)
,实际上,我们可以水平合并U, W
以达到带有 shape 的东西(3, 5)
——这仍然会产生所需 shape 的最终输出(3,)
。
要达到h(t)
,您需要使用单元状态项(在图中标记的节点处)再进行一次元素乘法x
,但结果也有形状(3,)
。
Wikipedia 页面还提供了所有操作和维度的精确概述,这是Gers、Schmidhuber 和 Cummins 的第 2 节中提供的方程的更紧凑形式。
推荐阅读
- java - Angular 和播放框架从源访问 XMLHttpRequest 已被 CORS 策略阻止
- javascript - OpenLayers 6 - 全窗口弹出
- javascript - 未处理的 GraphQL 订阅错误 [错误:无法解构“未定义”的属性“数据”,因为它未定义。]
- css - 使用 CSS Grid 将无序列表分隔到不同的列/行
- python - 如何在 python 中从多个键/值对创建矩阵?
- glsl - 修复 2D glsl 阴影着色器
- python - 如何执行href内容的第n次迭代 - Python Selenium
- c# - Codedom 和 SourceGenerator
- c# - 找到我正在寻找的值后,如何使用 StreamReader 跳到下一行?
- arrays - 在一次交易中将地址列表写入智能合约 - 字符串数组到合约