神经网络中前向传递的首选数学表示是什么?

人工智能 神经网络 Python 前馈神经网络 前传
2021-11-11 10:35:29

我知道这可能是语义问题,但我总是看到不同的文章解释前向传递略有不同。例如,有时它们代表标准神经网络中隐藏层的前向传递np.dot(x, W),有时我认为它np.dot(W.T, x)有时是np.dot(W, x)

以这张图片为例。它们将输入数据表示为矩阵[NxD]和权重数据,[DxH]其中 H 是隐藏层中神经元的数量。这似乎是最自然的,因为输入数据通常采用表格格式,其中行作为样本,列作为特征。

例子

现在是 CS231n 课程笔记中的一个示例。他们在下面的示例中讨论了这个,并引用了用于计算它的代码:

f = lambda x: 1.0/(1.0 + np.exp(-x)) # activation function (use sigmoid)
x = np.random.randn(3, 1) # random input vector of three numbers (3x1)
h1 = f(np.dot(W1, x) + b1) # calculate first hidden layer activations (4x1)
h2 = f(np.dot(W2, h1) + b2) # calculate second hidden layer activations (4x1)
out = np.dot(W3, h2) + b3 # output neuron (1x1)

哪里W[4x3]和 x 是[3x1]我希望权重矩阵的维度等于 [n_features, n_hidden_​​neurons] 但在此示例中,它们似乎在使用之前自然地转置了它。

示例 2

我想我只是对在计算神经网络前向传递时如何一致地塑造和使用数据的一般命名法感到困惑。有时我看到转置,有时我没有。有没有一种标准的、首选的方式来根据像这样的图表来表示数据?这个问题可能很愚蠢,但我只是想讨论一下。谢谢你。

1个回答

我认为没有表达前向传递的“标准方式”:您在需要使用转置时使用它,这取决于您如何定义权重和输入矩阵,以及您的神经网络的架构。例如,在一个全连接的前馈神经网络中,你知道前一层的每个神经元都连接到当前层的每个神经元,所以,只要在矩阵相乘时满足这一点,你是否是否使用转置,我认为,在计算方面,是否使用转置没有任何区别。(顺便说一句,如果你在写东西,我建议你总是指定你的矩阵的维度和你的约定)。

当然,如果你想使用像 TensorFlow 这样的库,你可能需要遵循库的约定,但这是另一回事。