表示a[2, 3]
为尺寸为2x3的矩阵。假设每个输入中有10个元素,并且网络是一个包含两个元素的分类器(例如,猫或狗)。假设只有一层致密层。目前,我忽略了偏向矢量。我知道这是一个过于简化的神经网络,但这仅用于此示例。可以将神经网络的密集层中的每个输出计算为
output = matmul(input, weights)
其中weights
权重矩阵为10x2,input
输入向量为1x10,output
输出向量为1x2。
我的问题是:可以使用单个矩阵乘法同时计算整个输入序列吗?看来你可以计算
output = matmul(input, weights)
其中总共有100个输入input
,分别weights
是100x10、10x2和output
100x2。
在反向传播中,你可以执行类似的操作:
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
。
但是,我尝试从头开始以这种方式实现神经网络,但目前还不成功。我想知道我是否还有其他错误,或者我的方法根本上是错误的。
谢谢!
如果有人想知道,我找到了问题的答案。由于某些原因,这实际上是行不通的。本质上,以这种方式计算所有输入就像运行批处理大小等于输入数量的网络一样。权重不会在输入之间更新,而是一次全部更新。因此,虽然看起来一起计算将是有效的,但它使得每个输入都不会单独一步一步地影响训练。然而,在一个合理的批量大小,你可以做二维矩阵乘法,该输入是batch_size
通过input_size
以加快训练速度。
另外,如果对许多输入进行预测(例如在测试阶段),则由于没有权重被更新,因此可以运行num_inputs
by的整个矩阵乘法input_size
来并行计算所有输入。
感谢您分享这一点。您可以将答案标记为我猜的答案。