当一个层中的每个节点完全连接到相邻层中的每个节点时,我理解了如何构造矩阵,而在“不规则”神经网络中,我可以单独处理每个节点。然而,没有关于如何构造一个“不规则”神经网络的矩阵的在线解释或例子。我将如何处理经常发生的关系?我能用零来填补矩阵中的“空白”吗?以图中的不规则神经网络为例:

我可以以某种方式组合(或得到以下的点乘积):
[i0 i1 i2] and
[[w0 w1 0 w9 0 ]
[0 w2 w3 0 0 ]
[0 0 0 w4 0 ]
[0 0 0 w5 w7]
[0 w8 0 w6 0 ]]去找[o0 o1 o2]?我需要给输入向量多两个值0吗?
发布于 2020-04-25 18:17:01
在回答我自己的问题的过程中,我似乎创造了一种使用不规则神经网络的矩阵的新方法。现在,每个人都必须将此方法称为Capobianco Irregular Neural Network方法。CINN方法基本上把整个不规则神经网络看作是一个两层完全连接的网络,尽管你把大部分权重都看作是0 (因为它们不存在)。这导致了两个稀疏矩阵。要清楚的是,您将输入层看作是连接到每个隐藏神经元,即使它们在几个层之外。类似地,您将输出层视为连接到每个隐藏神经元和输入神经元。
下面的引用上述图片的示例使用了h0的初始0值和D4的h1值,这些值可以被认为是t0开头隐藏状态的值。我发现了两个窍门。
首先,将[i0 i1 i2]输入向量与隐藏状态向量连接起来,这给我们提供了:
[ i0 i1 i2 h0 h1 ]
接下来,将整个神经网络的权重矩阵连接起来,但输出权重除外:
( i0 i1 i2 h0 h1 )
(i0) [[ 1 0 0 w0 0 ]
(i1) [ 0 1 0 w1 w2 ]
(i2) [ 0 0 1 0 w3 ]
(h0) [ 0 0 0 w9 0 ]
(h1) [ 0 0 0 0 0 ]]每一行都显示括号中的值与相应的列值的输出权重,但输入向量值在其他情况下“交互”的区域除外。我们需要这个恒等矩阵来保留最后一步的原始输入值。
在此之前,用实数来增加我们所拥有的可能是有帮助的。为了清楚起见,您需要找到以下的点乘积:
[[ 1 0 0 w0 0 ]
[ 0 1 0 w1 w2 ]
[ i0 i1 i2 h0 h1 ] . [ 0 0 1 0 w3 ]
[ 0 0 0 w9 0 ]
[ 0 0 0 0 0 ]]http://matrixmultiplication.xyz/并不完全准确,但我非常喜欢它在视觉上向您展示了每一对术语是如何组合在一起的。这将产生一个新的向量[i0 i1 i2 h0* h1*]。h0*和h1*表示原始时间步长t0结束时隐藏状态的最终值(请注意,这些值将是t1开头的新h0和h1值),而i0、i1和i2则保持不变,因为我们使用了标识矩阵。
最后,我们所要做的就是将这个新向量乘以包含连接到输出层的所有权重的矩阵:
( o0 o1 o2)
(i0 ) [[ 0 0 0]
(i1 ) [ 0 0 w8]
(i2 ) [ 0 0 0]
(h0*) [w4 w5 w6]
(h1*) [ 0 w7 0]]我们也可以一次做到这一点:
[[ 1 0 0 w0 0 ] [[ 0 0 0 ]
[ 0 1 0 w1 w2 ] [ 0 0 w8 ]
[ i0 i1 i2 h0 h1 ] . [ 0 0 1 0 w3 ] . [ 0 0 0 ] = [ o0 o1 o2 ]
[ 0 0 0 w9 0 ] [w4 w5 w6 ]
[ 0 0 0 0 0 ]] [ 0 w7 0 ]]注意,这只是用于t0末尾的输出向量。如果您没有处理时间数据或使用RNN,您不需要担心这一点,但是如果您试图在稍后的时间步骤中确定输出,您将不得不这样做:
[[ 1 0 0 w0 0 ] [[ 1 0 0 w0 0 ] [[ 0 0 0 ]
(input @ t0) [ 0 1 0 w1 w2 ] (input @ t1) [ 0 1 0 w1 w2 ] [ 0 0 w8 ] (output @ t1)
[i0 i1 i2 h0 h1] . [ 0 0 1 0 w3 ] . [i0 i1 i2 h0* h1*] . [ 0 0 1 0 w3 ] . [ 0 0 0 ] = [o0 o1 o2]
[ 0 0 0 w9 0 ] [ 0 0 0 w9 0 ] [w4 w5 w6 ]
[ 0 0 0 0 0 ]] [ 0 0 0 0 0 ]] [ 0 w7 0 ]]请注意,此示例适用于使用遗传算法创建的INN,因此在此示例中没有必要进行反向传播。如果你想利用反向传播,你可以在计算出你的输出向量之后开始这个过程。
https://datascience.stackexchange.com/questions/72068
复制相似问题