md_files/科研/草稿.md

68 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

这里涉及到的是神经网络中常用的全连接层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''}