全连接层(Fully Connected Layer,也称为稠密层或线性层)的计算量公式是 输入特征数 × 输出特征数,这个公式的推导基于全连接层的数学运算方式。以下是详细的解释:
1. 全连接层的数学运算
全连接层的计算可以表示为矩阵乘法:
[
\mathbf{y} = \mathbf{W} \cdot \mathbf{x} + \mathbf{b}
]
其中:
- (\mathbf{x}) 是输入向量,维度为 (C_{\text{in}})(输入特征数)。
- (\mathbf{W}) 是权重矩阵,维度为 (C_{\text{out}} \times C_{\text{in}})。
- (\mathbf{b}) 是偏置向量,维度为 (C_{\text{out}})。
- (\mathbf{y}) 是输出向量,维度为 (C_{\text{out}})。
计算步骤:
- 矩阵乘法:计算 (\mathbf{W} \cdot \mathbf{x})。
- 每个输出特征 (y_i) 是输入特征 (x_j) 和权重 (W_{ij}) 的加权和。
- 每个 (y_i) 需要 (C_{\text{in}}) 次乘法和 (C_{\text{in}}) 次加法。
- 总共有 (C_{\text{out}}) 个输出特征,因此总的浮点运算量为:
[
C_{\text{in}} \times C_{\text{out}} \quad \text{(乘法)} + C_{\text{in}} \times C_{\text{out}} \quad \text{(加法)} = 2 \times C_{\text{in}} \times C_{\text{out}}
]
- 偏置加法:计算 (\mathbf{y} = \mathbf{W} \cdot \mathbf{x} + \mathbf{b})。
- 每个输出特征 (y_i) 需要一次加法(加上偏置 (b_i))。
- 总共有 (C_{\text{out}}) 次加法。
总计算量:
[
2 \times C_{\text{in}} \times C_{\text{out}} \quad \text{(矩阵乘法)} + C_{\text{out}} \quad \text{(偏置加法)}
]
由于 (C_{\text{out}}) 通常远小于 (2 \times C_{\text{in}} \times C_{\text{out}}),因此偏置加法的计算量可以忽略不计。最终的计算量近似为:
[
\text{FLOPs} \approx 2 \times C_{\text{in}} \times C_{\text{out}}
]
2. 为什么公式是 (C_{\text{in}} \times C_{\text{out}})
在实际应用中,通常只计算乘法操作的数量(因为乘法比加法更耗资源),因此全连接层的计算量公式简化为:
[
\text{FLOPs} = C_{\text{in}} \times C_{\text{out}}
]
这是因为:
- 每个输出特征 (y_i) 需要 (C_{\text{in}}) 次乘法。
- 总共有 (C_{\text{out}}) 个输出特征。
因此,总的乘法操作数为 (C_{\text{in}} \times C_{\text{out}})。
3. 举例说明
假设一个全连接层的输入特征数 (C_{\text{in}} = 1024),输出特征数 (C_{\text{out}} = 512),则:
[
\text{FLOPs} = 1024 \times 512 = 524,288
]
这表示该全连接层需要 524,288 次浮点乘法操作。
4. 总结
全连接层的计算量公式 输入特征数 × 输出特征数 是基于矩阵乘法的操作数推导出来的。每个输出特征需要与所有输入特征进行一次乘法操作,因此总的计算量为 (C_{\text{in}} \times C_{\text{out}})。如果需要更精确的计算量,可以加上加法操作(即 (2 \times C_{\text{in}} \times C_{\text{out}})),但在实际应用中通常只考虑乘法操作。