了解顺序模型层中的单元数

数据挖掘 机器学习 神经网络 深度学习 rnn
2022-03-11 23:07:13

我正在尝试自学 RNN,但我有一个问题。

因此,想象一下 2 层:具有三个神经元的输入层和具有 2 个神经元和激活函数 f 的经典循环层。我将写出循环层每个神经元的输出。原来,这种情况下怎么办?(x1,x2,x3)ht1=f(W[x1,[0,0,N]]+b)ht2=f(W[x2,ht1]+b)x3

此外,让我们想象一个稍微不同的 RNN 架构。

具有两个神经元的输入层和具有 3 个神经元和激活函数 f 的经典循环层。我将写出循环层每个神经元的输出。原来RNN层的第3个神经元没有用到,这种情况怎么办?(x1,x2)ht1=f(W[x1,[0,0,N]+bias])ht2=f(W[x2,ht1]+bias)

请帮我弄清楚神经网络在这些情况下是如何工作的。谢谢!

UPD:
我意识到如果循环层中的神经元数量不等于(!=)输入数量我不知道循环神经网络如何工作

我有一个想法:
输入的数量必须始终等于RNN 层。但下面的代码与我的猜测相矛盾。

model = Sequential()
model.add(Embedding(maxWordsCount, 256, input_length = inp_words))
model.add(SimpleRNN(128, activation='tanh'))
model.add(Dense(maxWordsCount, activation='softmax'))
model.summary()

这是预测下一个单词的模型。

2个回答

RNN 细胞与神经元

你在 RNN 细胞和神经元之间犹豫不决。我了解您在问题中指的是 RNN 单元。因此,传统上,序列模型的任何层都将始终具有与序列长度或嵌入大小相同的单元数。

在这里查看细胞和神经元之间的区别:细胞状态和隐藏状态之间的区别

在此处查看序列模型的输入大小:如何将展开的 RNN 描绘为正常的前馈网络?

关于; 代码片段

SimpleRNN中,第一个参数是每个单元格中的单元数,即每个单元格中的神经元数。单元的数量不是顺序层中的参数,并且始终等于输入序列的长度或嵌入层的大小。

model = Sequential()
model.add(Embedding(maxWordsCount, 256, input_length = inp_words))
# Below, 128 is the neurons of each cell, and relates to the cell memory capacity.
model.add(SimpleRNN(128, activation='tanh'))

SimpleRNN输入内部(维度为 256)通过矩阵乘法被投影到维度为 128 的表示空间上。RNN 操作使用这些大小为 128 的向量。如果查看 的源代码SimpleRNN,可以看到投影矩阵存储在名为 的成员变量中kernel您可以看到方法SimpleRNNCell.call 中的第一件事是如何使用K.dot(inputs, self.kernel).

PD:对我来说,“神经元”类比一直具有误导性。我喜欢从可微矩阵运算的角度来考虑神经网络:矩阵乘法、矩阵加法、位置变换,如 sigmoid、双曲正切、ReLU 等。这使得推理每个输入和输出的维度变得更容易计算步骤。