Warm tip: This article is reproduced from serverfault.com, please click

machine learning-可以将许多输入上的密集层表示为单个矩阵乘法吗?

(machine learning - Can a dense layer on many inputs be represented as a single matrix multiplication?)

发布于 2020-11-28 06:43:35

表示a[2, 3]为尺寸为2x3的矩阵。假设每个输入中有10个元素,并且网络是一个包含两个元素的分类器(例如,猫或狗)。假设只有一层致密层。目前,我忽略了偏向矢量。我知道这是一个过于简化的神经网络,但这仅用于此示例。可以将神经网络的密集层中的每个输出计算为

output = matmul(input, weights)

其中weights权重矩阵为10x2,input输入向量为1x10,output输出向量为1x2。

我的问题是:可以使用单个矩阵乘法同时计算整个输入序列吗?看来你可以计算

output = matmul(input, weights)

其中总共有100个输入input,分别weights是100x10、10x2和output100x2。

在反向传播中,你可以执行类似的操作:

input_err = matmul(output_err, transpose(weights))
weights_err = matmul(transpose(input), output_err)
weights -= learning_rate*weights_err

其中weights相同,分别output_err为100x2和100x10 input

但是,我尝试从头开始以这种方式实现神经网络,但目前还不成功。我想知道我是否还有其他错误,或者我的方法根本上是错误的。

谢谢!

Questioner
Meredith
Viewed
0
Meredith 2020-11-29 02:23:24

如果有人想知道,我找到了问题的答案。由于某些原因,这实际上是行不通的。本质上,以这种方式计算所有输入就像运行批处理大小等于输入数量的网络一样。权重不会在输入之间更新,而是一次全部更新。因此,虽然看起来一起计算将是有效的,但它使得每个输入都不会单独一步一步地影响训练。然而,在一个合理的批量大小,你可以做二维矩阵乘法,该输入是batch_size通过input_size以加快训练速度。

另外,如果对许多输入进行预测(例如在测试阶段),则由于没有权重被更新,因此可以运行num_inputsby的整个矩阵乘法input_size来并行计算所有输入。