这里涉及到的是神经网络中常用的全连接层(dense layer)的矩阵乘法约定,不同的表示方式会有不同的矩阵尺寸和乘法顺序,下面给出两种常见的约定,并解释如何让维度匹配: --- ### 方法一:以行向量表示输入 1. **设定输入为行向量:** 假设每个节点的隐藏状态由 LSTM 输出后表示为一个行向量,即 $$ h_i \in \mathbb{R}^{1 \times d''} $$ 这里 $d''$ 是 LSTM 隐藏单元的数量。 2. **全连接层权重矩阵:** 为了将行向量 $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$ 3. **加偏置得到最终输出:** 同时,全连接层有一个偏置向量 $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)$。 --- ### 方法二:以列向量表示输入 1. **设定输入为列向量:** 如果我们将每个节点的隐藏状态表示为列向量: $$ h_i \in \mathbb{R}^{d'' \times 1}, $$ 则需要调整矩阵乘法的顺序。 2. **全连接层权重矩阵:** 此时全连接层的权重矩阵应设置为 $$ 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''}