model = Sequential()
model.add(LSTM(32, batch_input_shape=(None, 10, 64)))
以上LSTM的第一个参数units=32,指的并不是一层LSTM有32个LSTM单元。
在很多LSTM的框图中,我们都会将LSTM单元按照时间顺序排列开来,句子的长度是多少我们就会画出多少个LSTM单元。这也是给我们带来误解的地方。实际上一层LSTM的每个‘单元’是共享参数的,所以并没有所谓的那么多个LSTM单元,我们可以理解为它们其实是同一个LSTM单元,只有一个单元的参数量。
这里我们设置的units=32的大小,其实代表得是LSTM单元内的隐藏层的尺寸。
对于LSTM而言,每个单元有3个门,对应了4个激活函数(3个sigmoid,一个tanh)。也就是说有4个神经元数量为32的前馈网络层。
对于LSTM的计算过程,我们这里举一个简单的例子:
假如我们样本的每一句话包含5个单词,每个单词用16维的词向量表示。对于LSTM(units=32),我们可以把LSTM内部的计算过程计算过程简化为:
Y=X1×16W16×32,这里X为(1,16)的向量,W为(16,32)的矩阵,所以运用矩阵乘法,将16维的X转化为32维的向量。
如下图所示:
我们可以简单的将LSTM内部的各种计算想象成全连接的之间的矩阵计算。
所以units代表的不是一层单元的个数,而是单元内部隐藏层的大小。