Matrix 神经网络中偏差单元的良好实现
我正在学习神经网络,在此过程中,我实现了几个完全连接的网络。我通常添加一个Matrix 神经网络中偏差单元的良好实现,matrix,machine-learning,neural-network,linear-algebra,matrix-multiplication,Matrix,Machine Learning,Neural Network,Linear Algebra,Matrix Multiplication,我正在学习神经网络,在此过程中,我实现了几个完全连接的网络。我通常添加一个列偏差单位(1s)在输入marix和权重矩阵中的一行额外的权重中,因为这就是我在参加在线课程后学习实现神经网络的方式,但在github上的许多实现中,我发现它也可以实现,而无需在矩阵中插入偏差单位,但可以单独添加:XW+b,其中b是偏置单位 我不明白它是怎么工作的。这似乎是一个更好、更高效的实现,但我不理解。例如,考虑下面的例子: 1 2 3 4 0.5 0.5 X = 1 4 5 6
列偏差单位
(1s)在输入marix和权重矩阵中的一行额外的权重中,因为这就是我在参加在线课程后学习实现神经网络的方式,但在github上的许多实现中,我发现它也可以实现,而无需在矩阵中插入偏差单位,但可以单独添加:XW+b
,其中b是偏置单位
我不明白它是怎么工作的。这似乎是一个更好、更高效的实现,但我不理解。例如,考虑下面的例子:
1 2 3 4 0.5 0.5
X = 1 4 5 6 W= 2 3 X*W = [4x2 matrix]
1 8 9 5 5 8
2 3
X中的第一列是偏差单位,W中的第一行也是偏差单位
但是,如果在不直接插入偏差列的情况下,单独添加偏差列,则会变成:
2 3 4 2 3
X= 4 5 6 W= 5 8 b = 0.5 0.5 X*W = [3x2 matrix]
8 9 5 2 3
可以清楚地看到,来自第二个表达式的X*W+b
不等于第一个表达式。此外,b,a1x2矩阵
不能添加到X*W
中,即3x2矩阵
那么,如何使用第二种方法实现偏差呢?所示的方法是相同的。
最重要的是:
权重只能假定值介于-1和1之间
注:第一个示例也将给出一个3x2矩阵
1 2 3 4 0.5 0.5 27.5 42.5
X = 1 4 5 6 W= 2 3 X*W = 45.5 70.5
1 8 9 5 5 8 71.5 111.5
2 3
在最后一个矩阵中,每行是一组输入,每列是一个神经元
图示方法相同:
稍后添加偏差不是问题 以第二个例子:
|27 42 | |27 42 | |0.5 0.5|
X*W = |45 70 | X*W+b = |45 70 | + |0.5 0.5| : Same Result.
|71 111| |71 111| |0.5 0.5|
如果问题在这里:
在下面的链接中使用公式:
它假设一个有1个输入、1个隐藏和1个输出神经元的神经网络,它不涉及矩阵的乘积。这是一个前馈通道:
sumH1=I x w1+b x wb
注:(b x wb=1 x wb=wb)
这一段在“实施”段落中编码:
z1 = x.dot(W1) + b1
a1 = np.tanh(z1)
z2 = a1.dot(W2) + b2
或在此:
在这里,他用2个输入、500个隐藏和2个输出神经元做了一个假设的例子,其中w1是I和H之间2x500连接中的一个,b1是H的500个偏压中的一个,w2是H和O之间2x500连接中的一个,b2是O的2个偏压中的一个
总结
你可以使用矩阵做前馈,但是你必须为每个连接增加偏差。您展示的第一个示例是最简单的方法。很清楚
如果你选择第二个,你就不能做1xN矩阵与3x2的乘积。但您可以在调用激活函数时添加偏差加法:
a1 = tanH(z1 + b[1]);
这两种方法都不是比其他方法更好或更有效的实现
在第二个示例中,您将该matix拆分为两部分:
I*W :matix[3x4] and b:vector[3] = { 1, 1 , 1 }
在这种情况下,你也需要在每个隐藏的神经元上添加偏差。
在第一个示例中,您直接添加了偏差,其中:
矩阵[0][0]=1 x 0.5+2 x 2+3 x 5 ecc..
注:矩阵[0][0]=sumH1代码>
在第二个示例中,您在后面添加了偏差,其中:matrix[0][0]=2x2+3x5 ecc..
和sumH1=matrix[0][0]+B[0]
注:对于“B”,我们表示B的权重;B=1
也许在第二个示例中,代码会更加有序。没别的了。计算机性能或内存占用没有显著变化。是的,我明白了。但这意味着BAI的维度应与输入和权重相乘后的结果矩阵相同,但许多文章称权重矩阵为MxN,则偏差应为1xN矩阵。请将其中一些文章链接以进行澄清?转到“我们的网络如何进行预测”部分,再检查一件事的维度。为什么这两种方法都不比其他方法更好或更有效?显然,在第一个实现中,我们需要在矩阵中插入一列1,但在第二个实现中,我们只需要添加另一个矩阵。