在Keras LSTM层中,多个内核是什么意思?

10
https://keras.io/layers/recurrent/上,我发现LSTM层有一个kernel和一个recurrent_kernel。它们的含义是什么?在我的理解中,我们需要为LSTM单元的4个门设置权重。然而,在Keras实现中,kernel的形状为(input_dim, 4*units),而recurrent_kernel的形状为(units, 4*units)。那么,它们两个是否都以某种方式实现了门控制呢?
1个回答

17

如果我理解错了,请纠正我,但是如果你看一下LSTM的方程:

enter image description here

你会发现有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:]

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


2
嗯,有趣。看起来有两个不同版本的LSTM。我指的是http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 它们将输入和隐藏状态连接在一起,因此只有4个权重矩阵。 - KrawallKurt
2
我猜Keras想让你为这两个矩阵指定单独的正则化器和约束条件。然后将权重分成单独的矩阵是有意义的。 - Stefan Dragnev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接