Matrix 在神经网络中实现偏差的正确方法

Matrix 在神经网络中实现偏差的正确方法,matrix,machine-learning,neural-network,dot-product,bias-neuron,Matrix,Machine Learning,Neural Network,Dot Product,Bias Neuron,我可以做一个神经网络,我只需要一个关于偏差实现的澄清。哪种方法更好:实现偏差矩阵B1,B2。。Bn对于各自层,将矩阵与权重矩阵分开,或,通过将1添加到前一层输出(该层的输入)中,包括权重矩阵中的偏差。在图片中,我询问此实现是否: 或此实现: 这是最好的。多谢各位 通过向上一层输出(该层的输入)添加1,将偏差包括在权重矩阵中 这似乎就是这里实现的:在“具有多个隐藏层的网络”一段中 我不知道这是不是最好的方法。(可能不相关,但仍然:在提到的示例代码中,它与sigmoid一起工作,但在我用ReLU

我可以做一个神经网络,我只需要一个关于偏差实现的澄清。哪种方法更好:实现偏差矩阵
B1,B2。。Bn
对于各自层,将矩阵与权重矩阵分开,,通过将
1
添加到前一层输出(该层的输入)中,包括权重矩阵中的偏差。在图片中,我询问此实现是否:

或此实现:

这是最好的。多谢各位

通过向上一层输出(该层的输入)添加1,将偏差包括在权重矩阵中

这似乎就是这里实现的:在“具有多个隐藏层的网络”一段中


我不知道这是不是最好的方法。(可能不相关,但仍然:在提到的示例代码中,它与sigmoid一起工作,但在我用ReLU替换它时失败)。

我认为最好的方法是使用两个单独的矩阵,一个用于weitghts,另一个用于bias。为什么

  • 我不认为计算量会增加,因为
    W*x
    W*x+b
    应该在GPU上运行。它们在数学上和计算上是等价的

  • 更大的模块化。假设您希望使用不同的初始值设定项(1、0、glorot…)初始化权重和偏差。通过有两个单独的矩阵,这是很简单的

  • 易于阅读和维护


在我看来,我认为为每一层分别实施偏差矩阵是一条可行之路。这将创建许多超参数,您的模型必须学习这些参数,但这将使您的模型更自由地收敛


有关更多信息,请阅读。

偏移的梯度通常比正常节点的梯度更容易计算。在Andrew Ng最初的ML课程(2012年)中,我记得在矩阵中包含了带有
1
s列的偏差,但在2016年的课程中,他将这些偏差分开。我假设将它们分开更有效,因为矩阵乘法比二次时间差。我不确定当你有GPU时,这种情况是否会改变。您可以尝试查看流行库的源代码,看看它们是如何实现的。从数学上讲,两者是等效的。就计算成本而言,在任何一种理智的实现中,以任何一种方式实现都不会有什么区别:如果下层有N个神经元,然后上层有M个神经元,然后,添加M个偏差的计算成本将与通过权重将下层活动传递给上层的M*MxN操作相形见绌。IMO唯一的实质区别在于代码可读性和可维护性。在从无到有地实现了几个backprop和RBM变体之后,我认为将偏差从权重中分离会导致更干净的代码,特别是如果您想使用学习规则或不同的初始化。但是,作为前缀,这只是一个意见。更正:
M*M x N
应该读上面评论中的
N*N x M