我试图用numpy来构建一个LSTM来尝试并了解最新情况,但是我对LSTM矩阵如何工作的理解遇到了问题。我从RNN的http://colah.github.io/posts/2015-08-Understanding-LSTMs/
找到了这张图片根据我对RNN的理解,x t 是用重量矩阵生成的点,我们称之为W x,h 和h t-1 是用权重矩阵W h,h 生成的点,结果汇总在一起:
这是有道理的,因为x t 的形状是(b,d),其中b是批量大小,d是维度,W x,h 是形状(d,h)因此得到的基质将具有形状(b,h)。
类似地,h t-1 具有形状(b,h)和W h,h 具有形状(h,h),从而产生尺寸的矩阵( b,h)也。因此,将这些相加在一起将导致形成(b,h)形状的矩阵,这是完美的,因为它与h t-1 的形状相同。
这是我遇到问题的地方,看看这个图,也来自http://colah.github.io/posts/2015-08-Understanding-LSTMs/
事情开始没有多大意义。如果我们看一下等式
我知道堆叠h t-1 和x t 并使用W f 进行点积与分裂完全相同W f 分成两个较小的矩阵并做与上面RNN相同的事情,问题在于尺寸。 x t 的形状是(b,d),h t-1 的形状是(b,h)。为了使它们彼此叠加,h必须等于d,但情况并非如此。
因此,假设我对x t 和h t-1 的形状有误,我猜我们需要做点积在进入细胞之前,x t 的形状与h t-1 的形状相同(均为(b,h))。但即便如此,我们遇到问题,通过堆叠两个矩阵,我们最终得到一个(2b,h)矩阵,不幸的是我们不能通过任何权重矩阵对这个矩阵进行积分产生(b,h)矩阵,因此输入h t + 1 将具有形状(2b,h),因此逐渐增加此向量中的行数将随着更多输入的增加而增加。
我的问题是我的理解有什么问题。看看:https://www.quora.com/In-LSTM-how-do-you-figure-out-what-size-the-weights-are-supposed-to-be看来我在传入lstm单元之前做点积的假设是正确的,但由于某种原因,这个人说堆叠(b,h)矩阵后会产生一个(b,h)矩阵并没有多大意义。