keras lstm层中的多个内核是什么意思?

Kra*_*urt 7 neural-network lstm keras

https://keras.io/layers/recurrent/ 上,我看到 LSTM 层有 akernel和 a recurrent_kernel。它们的含义是什么?根据我的理解,我们需要 LSTM 单元的 4 个门的权重。但是,在 keras 实现中,kernel形状为 (input_dim, 4*units),recurrent_kernel形状为 (units, 4*units)。那么,他们都以某种方式实现了门吗?

Ste*_*nev 14

如果我错了,请纠正我,但如果你看看 LSTM 方程:

在此处输入图片说明

您有 4 个用于转换输入的W矩阵和 4 个用于转换隐藏状态的U矩阵。

Keras保存这些套4点矩阵入kernelrecurrent_kernel重量阵列。从使用它们的代码

self.kernel_i = self.kernel[:, :self.units]
self.kernel_f = self.kernel[:, self.units: self.units * 2]
self.kernel_c = self.kernel[:, self.units * 2: self.units * 3]
self.kernel_o = self.kernel[:, self.units * 3:]

self.recurrent_kernel_i = self.recurrent_kernel[:, :self.units]
self.recurrent_kernel_f = self.recurrent_kernel[:, self.units: self.units * 2]
self.recurrent_kernel_c = self.recurrent_kernel[:, self.units * 2: self.units * 3]
self.recurrent_kernel_o = self.recurrent_kernel[:, self.units * 3:]
Run Code Online (Sandbox Code Playgroud)

显然,这 4 个矩阵存储在沿第二维连接的权重数组中,这解释了权重数组的形状。

  • 嗯,有趣。LSTM 似乎有两个不同版本。我指的是 http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 它们连接输入和隐藏状态,因此只有 4 个权重矩阵 (2认同)
  • 我猜 Keras 希望允许您为两个矩阵指定单独的正则化器和约束。然后将权重分成单独的矩阵是有意义的。 (2认同)