2.9 KiB
这里涉及到的是神经网络中常用的全连接层(dense layer)的矩阵乘法约定,不同的表示方式会有不同的矩阵尺寸和乘法顺序,下面给出两种常见的约定,并解释如何让维度匹配:
方法一:以行向量表示输入
-
设定输入为行向量:
假设每个节点的隐藏状态由 LSTM 输出后表示为一个行向量,即h_i \in \mathbb{R}^{1 \times d''}
这里
d''
是 LSTM 隐藏单元的数量。 -
全连接层权重矩阵:
为了将行向量h_i
映射到预测的二维坐标,设计全连接层的权重矩阵W_{\text{fc}}
的尺寸为W_{\text{fc}} \in \mathbb{R}^{d'' \times 2}
这样,乘法操作
h_i \cdot W_{\text{fc}}
的计算是:h_i
的尺寸:1 \times d''
W_{\text{fc}}
的尺寸:d'' \times 2
- 相乘结果:
1 \times 2
-
加偏置得到最终输出:
同时,全连接层有一个偏置向量 $b_{\text{fc}} \in \mathbb{R}^{1 \times 2}$,故有\hat{y}_i = h_i \cdot W_{\text{fc}} + b_{\text{fc}} \in \mathbb{R}^{1 \times 2},
表示该节点预测的二维坐标 $(x, y)$。
方法二:以列向量表示输入
-
设定输入为列向量:
如果我们将每个节点的隐藏状态表示为列向量:h_i \in \mathbb{R}^{d'' \times 1},
则需要调整矩阵乘法的顺序。
-
全连接层权重矩阵:
此时全连接层的权重矩阵应设置为W_{\text{fc}} \in \mathbb{R}^{2 \times d''},
这样通过矩阵乘法:
\hat{y}_i = W_{\text{fc}} \cdot h_i + b_{\text{fc}},
W_{\text{fc}}
的尺寸:2 \times d''
h_i
的尺寸:d'' \times 1
- 乘积结果为:
2 \times 1
对应的偏置
b_{\text{fc}} \in \mathbb{R}^{2 \times 1}
后,最终输出为 $2 \times 1$(可以看作二维坐标)。
总结说明
-
两种约定等价:
实际实现时,只要保持输入和权重矩阵的乘法顺序一致,确保内维度匹配,输出最终都会是一个二维向量。在深度学习框架中(例如 Keras 或 PyTorch),通常默认每个样本以行向量形式表示(形状为 $(\text{batch_size}, d'')$),因此全连接层权重设置为 $(d'', 2)$,计算h \cdot W
会得到形状为(\text{batch\_size}, 2)
的输出。 -
回答疑问:
“你这里W
和h
怎么能矩阵乘法呢”——关键在于你要统一向量的表示方式。如果你使用行向量表示每个节点,则h
的维度是 $1 \times d''$;对应的全连接层权重W_{\text{fc}}
为 $d'' \times 2$。这样乘法h \cdot W_{\text{fc}}
内维度d''
正好匹配,输出得到1 \times 2
的向量。如果反之使用列向量表示,则需要调整权重矩阵为2 \times d''
并将乘法表达为 $W_{\text{fc}} \cdot h$。
W_{\text{fc}} \in \mathbb{R}^{2 \times d''}