第一题:简述误差反向传播算法的基本原理
误差反向传播(BP)算法核心依托链式法则与梯度下降:
1. 前向传播:样本输入网络,逐层计算得到预测输出;
2. 计算损失:对比预测值与真实值,求解整体误差;
3. 反向传播:从输出层逆向至输入层,逐层计算各权重、偏置的误差梯度;
4. 参数更新:根据梯度下降法则调整网络参数,不断缩小损失;
反复迭代,最终实现模型拟合。
第二题:给定数据x以及卷积核w如下,设步长为 1,计算卷积输出
步骤1:明确输入与卷积核
- 输入3个通道:
$$
X_1 = \begin{bmatrix}1&0&1&1\0&1&0&0\0&0&1&1\1&0&1&0\end{bmatrix},
X_2 = \begin{bmatrix}2&1&2&2\0&2&1&1\1&2&0&2\0&0&0&1\end{bmatrix},
X_3 = \begin{bmatrix}1&0&0&0\0&0&1&1\1&1&1&1\0&0&1&0\end{bmatrix}
$$ - 卷积核3个通道:
$$
W_1 = \begin{bmatrix}1&0\0&1\end{bmatrix},
W_2 = \begin{bmatrix}1&1\0&0\end{bmatrix},
W_3 = \begin{bmatrix}1&1\1&0\end{bmatrix}
$$
步骤2:计算单通道互相关结果
(1)$X_1$与$W_1$的互相关结果$O_1$
$W_1$为2×2单位矩阵,互相关等价于窗口主对角线元素求和:
$$
O_1 = \begin{bmatrix}
1+1 & 0+0 & 1+0 \
0+0 & 1+1 & 0+1 \
0+0 & 0+1 & 1+0
\end{bmatrix}
= \begin{bmatrix}2&0&1\0&2&1\0&1&1\end{bmatrix}
$$
(2)$X_2$与$W_2$的互相关结果$O_2$
$W_2$仅第一行有效,互相关等价于窗口第一行元素求和:
$$
O_2 = \begin{bmatrix}
2+1 & 1+2 & 2+2 \
0+2 & 2+1 & 1+1 \
1+2 & 2+0 & 0+2
\end{bmatrix}
= \begin{bmatrix}3&3&4\2&3&2\3&2&2\end{bmatrix}
$$
(3)$X_3$与$W_3$的互相关结果$O_3$
$W_3$仅右下角元素为0,互相关等价于窗口前三个元素求和:
$$
O_3 = \begin{bmatrix}
1+0+0 & 0+0+0 & 0+0+1 \
0+0+1 & 0+1+1 & 1+1+1 \
1+1+0 & 1+1+0 & 1+1+1
\end{bmatrix}
= \begin{bmatrix}1&0&1\1&2&3\2&2&3\end{bmatrix}
$$
步骤3:多通道结果逐元素相加
最终输出$O = O_1 + O_2 + O_3$,对应位置求和:
$$
O = \begin{bmatrix}
2+3+1 & 0+3+0 & 1+4+1 \
0+2+1 & 2+3+2 & 1+2+3 \
0+3+2 & 1+2+2 & 1+2+3
\end{bmatrix}
$$
步骤4:最终卷积输出
$$
\boldsymbol{O} = \begin{bmatrix}
6 & 3 & 6 \
3 & 7 & 6 \
5 & 5 & 6
\end{bmatrix}
$$
第三题:
步骤1:计算前提说明
输入6×6矩阵:
$$
x = \begin{bmatrix}
1 & 2 & 1 & 2 & 1 & 2 \
1 & 3 & 1 & 4 & 1 & 3 \
2 & 3 & 2 & 3 & 1 & 5 \
6 & 2 & 2 & 5 & 4 & 1 \
1 & 2 & 5 & 4 & 1 & 3 \
4 & 4 & 3 & 1 & 6 & 7
\end{bmatrix}
$$
最大池化核心规则:对池化窗口内的所有元素取最大值作为输出;无重叠池化的步长=池化核尺寸,有重叠池化的步长<池化核尺寸。
步骤2:2×2和3×3无重叠最大池化
无重叠池化要求步长与池化核大小相等,保证窗口无重叠。
1. 2×2无重叠最大池化
- 池化核2×2,步长
stride=2 - 输出尺寸:$\frac{6-2}{2}+1=3$,即3×3矩阵
- 计算逻辑:将输入划分为9个不重叠的2×2子块,每个子块取最大值,结果如下:
$$
\boldsymbol{O}_{2\times2\text{无重叠}} = \begin{bmatrix}
3 & 4 & 3 \
6 & 5 & 5 \
4 & 5 & 7
\end{bmatrix}
$$
2. 3×3无重叠最大池化
- 池化核3×3,步长
stride=3 - 输出尺寸:$\frac{6-3}{3}+1=2$,即2×2矩阵
- 计算逻辑:将输入划分为4个不重叠的3×3子块,每个子块取最大值,结果如下:
$$
\boldsymbol{O}_{3\times3\text{无重叠}} = \begin{bmatrix}
3 & 5 \
6 & 7
\end{bmatrix}
$$
步骤3:步长为1的有重叠最大池化
该类题目默认使用2×2池化核(深度学习通用设定),计算如下:
- 池化核2×2,步长
stride=1 - 输出尺寸:$\frac{6-2}{1}+1=5$,即5×5矩阵
- 计算逻辑:窗口逐行逐列滑动(步长1),每个2×2窗口取最大值,最终结果:
$$
\boldsymbol{O}_{2\times2\text{步长1}} = \begin{bmatrix}
3 & 3 & 4 & 4 & 3 \
3 & 3 & 4 & 4 & 5 \
6 & 3 & 5 & 5 & 5 \
6 & 5 & 5 & 5 & 4 \
4 & 5 & 5 & 6 & 7
\end{bmatrix}
$$
第四题:计算损失函数
步骤1:交叉熵损失
对于多分类问题,交叉熵损失的公式为:
$$
L_{CE} = -\frac{1}{N}\sum_{i=1}^{N} \sum_{j=1}^{C} \hat{y}{ij} \ln(y{ij})
$$
其中 $N$ 为样本数,$C$ 为类别数。由于真实标签为 one-hot 向量,实际只计算真实类别对应的负对数似然。
- 样本 1:真实类别为第 3 类(索引 2),预测概率 $p_1 = 0.7$
$L_1 = -\ln(0.7)$ - 样本 2:真实类别为第 1 类(索引 0),预测概率 $p_2 = 0.6$
$L_2 = -\ln(0.6)$
平均交叉熵损失为:
$$
L_{CE} = \frac{-\ln(0.7) - \ln(0.6)}{2} = -\frac{\ln(0.42)}{2} \approx 0.4338
$$
步骤2:平滑 $L_1$ 损失 (Smooth L1 Loss / Huber Loss)
平滑 $L_1$ 损失的元素级定义为:
$$
\text{smooth}_{L_1}(x) =
\begin{cases}
0.5x^2, & |x| < 1 \
|x| - 0.5, & |x| \ge 1
\end{cases}
$$
对所有样本的所有输出节点求平均。先计算每个元素的预测值与真实值之差:
- 样本 1:$\mathbf{y}_1 = [0.1, 0.2, 0.7]^\top$,$\hat{\mathbf{y}}_1 = [0, 0, 1]^\top$
误差:$0.1,; 0.2,; -0.3$ - 样本 2:$\mathbf{y}_2 = [0.6, 0.2, 0.2]^\top$,$\hat{\mathbf{y}}_2 = [1, 0, 0]^\top$
误差:$-0.4,; 0.2,; 0.2$
所有误差的绝对值均小于 1,因此每个元素使用 $0.5x^2$:
$$
\begin{aligned}
&0.5 \times (0.1)^2 = 0.005 \
&0.5 \times (0.2)^2 = 0.02 \
&0.5 \times (-0.3)^2 = 0.045 \
&0.5 \times (-0.4)^2 = 0.08 \
&0.5 \times (0.2)^2 = 0.02 \
&0.5 \times (0.2)^2 = 0.02 \
\end{aligned}
$$
总和为 $0.005 + 0.02 + 0.045 + 0.08 + 0.02 + 0.02 = 0.19$。总元素个数为 $2 \times 3 = 6$,平均平滑 $L_1$ 损失为:
$$
L_{SmoothL1} = \frac{0.19}{6} \approx 0.03167
$$
步骤3:答案汇总
- 交叉熵损失:$\displaystyle -\frac{\ln(0.42)}{2} \approx 0.4338$
- 平滑 $L_1$ 损失:$\displaystyle \frac{0.19}{6} \approx 0.03167$
第五题:简述 Inception 模块的设计思想
1. 早期卷积网络的局限性
早期卷积网络(如 AlexNet、VGG)每一层只能使用单一尺寸的卷积核(如 3×3 或 5×5),一层接一层堆叠。这种设计的问题在于:
- 每层能捕捉的特征尺度完全固定;
- 需要依靠堆叠层数来扩大感受野,积累不同尺度信息。
2. Inception 的核心思想
Inception 模块的设计思路非常直接:既然无法提前确定这一层哪种尺寸的卷积核提取的特征最有用,不如将不同尺寸的卷积核并行放入网络,让网络自主学习哪些特征更重要。
每个 Inception 模块内部包含:
- 多种尺寸的卷积操作(如 1×1、3×3、5×5)
- 池化操作
这些并行分支在同一层级中:
- 小卷积核捕获细节纹理等小尺度特征;
- 大卷积核捕获轮廓、区域等大尺度特征;
- 分支输出在通道维度拼接,供后续层使用。
这样网络在同一阶段就能同时具备不同尺度的特征感知能力,无需单纯依靠堆叠层数来获取多尺度信息。
3. 1×1 卷积的关键作用
直接堆叠大尺寸卷积核会导致参数量和计算量爆炸。Inception 通过引入 1×1 卷积巧妙解决了这个问题:
- 降维作用:先用 1×1 卷积降低输入通道数,再进行 3×3、5×5 卷积;
- 示例:假设输入 256 通道特征图,直接用 5×5 卷积参数量巨大;先通过 1×1 卷积将通道降至 64,再做 5×5 卷积,参数量大幅减少;
- 额外收益:增加一层非线性激活,提升网络拟合能力,同时降低过拟合风险。
第六题:残差模块卷积计算
在残差模块中,常通过填充(Padding)使卷积输出与输入的特征图尺寸保持一致,以便进行跳跃连接相加。本题输入 $x$ 为 $4 \times 4$ 矩阵,卷积核 $w$ 为 $2 \times 2$,步长默认为 $1$。要获得与输入尺寸相同的 $4 \times 4$ 输出,需使用 “SAME” 填充方式,总填充量为 $1$,通常分配为上方 $0$、下方 $1$,左方 $0$、右方 $1$(不对称填充)。
步骤1:填充后的输入矩阵(尺寸 $5 \times 5$)
$$
x_{\text{pad}} =
\begin{bmatrix}
1 & 0 & 1 & 2 & 0 \
2 & 1 & 0 & 3 & 0 \
2 & 1 & 1 & 1 & 0 \
5 & 0 & 3 & 1 & 0 \
0 & 0 & 0 & 0 & 0
\end{bmatrix}
$$
步骤2:卷积计算
卷积核 $w = \begin{bmatrix} 1 & 0 \ 0 & 0 \end{bmatrix}$ 只有左上角元素为 $1$,其余为 $0$。输出矩阵 $y$ 的元素为:
$$
y[i,j] = \sum_{m=0}^{1}\sum_{n=0}^{1} x_{\text{pad}}[i+m,, j+n] \cdot w[m,n] = x_{\text{pad}}[i,j] \cdot 1 = x_{\text{pad}}[i,j]
$$
由于输出尺寸为 $4 \times 4$,取 $x_{\text{pad}}$ 左上角的 $4 \times 4$ 子矩阵,即原始输入 $x$。
步骤3:残差模块下的卷积输出
该卷积操作的结果(残差映射 $\mathcal{F}(x)$)为:
$$
\mathcal{F}(x) =
\begin{bmatrix}
1 & 0 & 1 & 2 \
2 & 1 & 0 & 3 \
2 & 1 & 1 & 1 \
5 & 0 & 3 & 1
\end{bmatrix}
$$
第七题:卷积神经网络前向传播计算
按照网络结构 Conv1+ReLU1 → MaxPooling1 → Conv2+ReLU2 → AvgPooling2 → FC+Softmax 逐步计算。
步骤1:输入数据
输入为5×5单通道矩阵:
$$
X = \begin{bmatrix}
1 & 0 & 1 & 1 & 1 \
1 & 0 & 1 & 1 & 0 \
0 & 1 & 0 & 1 & 0 \
1 & 0 & 1 & 1 & 0 \
1 & 1 & 0 & 1 & 1
\end{bmatrix}
$$
步骤2:Conv1 + ReLU1
- 卷积核参数:3×3单通道卷积核 $W=\begin{bmatrix}1&-1&1\0&1&0\0&1&-1\end{bmatrix}$,padding=1,stride=1
- 输出尺寸:$\frac{5-3+2×1}{1}+1=5$,即5×5矩阵
- 卷积计算结果(互相关):
$$
O_{conv1} = \begin{bmatrix}
2 & -1 & 1 & 2 & 1 \
-1 & 3 & 0 & 3 & 0 \
0 & 2 & 0 & 2 & 1 \
2 & 0 & 2 & 0 & 2 \
0 & 3 & 0 & 1 & 2
\end{bmatrix}
$$ - ReLU激活($max(0,x)$,负数置0):
$$
O_{relu1} = \begin{bmatrix}
2 & 0 & 1 & 2 & 1 \
0 & 3 & 0 & 3 & 0 \
0 & 2 & 0 & 2 & 1 \
2 & 0 & 2 & 0 & 2 \
0 & 3 & 0 & 1 & 2
\end{bmatrix}
$$
步骤3:MaxPooling1
- 池化参数:2×2核,stride=1,无padding
- 输出尺寸:$\frac{5-2}{1}+1=4$,即4×4矩阵
- 最大池化结果(每个2×2窗口取最大值):
$$
O_{pool1} = \begin{bmatrix}
3 & 3 & 3 & 3 \
3 & 3 & 3 & 3 \
2 & 2 & 2 & 2 \
3 & 3 & 2 & 2
\end{bmatrix}
$$
步骤4:Conv2 + ReLU2
- 卷积核参数:2个3×3单通道卷积核,padding=1,stride=1,输出2通道4×4特征图
$$W_1=\begin{bmatrix}1&0&0\1&-1&-1\0&1&1\end{bmatrix}, \quad W_2=\begin{bmatrix}0&-1&-1\1&1&-1\1&1&0\end{bmatrix}$$ - 输出尺寸:$\frac{4-3+2×1}{1}+1=4$,每个卷积核输出4×4矩阵
(1)W1卷积结果
$$
O_{conv2_w1} = \begin{bmatrix}
0 & 3 & 3 & 3 \
-2 & 4 & 4 & 5 \
2 & 6 & 5 & 5 \
-6 & 0 & 1 & 2
\end{bmatrix}
$$
ReLU激活后:
$$
O_{relu2_w1} = \begin{bmatrix}
0 & 3 & 3 & 3 \
0 & 4 & 4 & 5 \
2 & 6 & 5 & 5 \
0 & 0 & 1 & 2
\end{bmatrix}
$$
(2)W2卷积结果
$$
O_{conv2_w2} = \begin{bmatrix}
3 & 9 & 9 & 12 \
-4 & 1 & 1 & 7 \
-3 & 2 & 1 & 5 \
-4 & 0 & -1 & 2
\end{bmatrix}
$$
ReLU激活后:
$$
O_{relu2_w2} = \begin{bmatrix}
3 & 9 & 9 & 12 \
0 & 1 & 1 & 7 \
0 & 2 & 1 & 5 \
0 & 0 & 0 & 2
\end{bmatrix}
$$
步骤5:AvgPooling2
- 池化参数:4×4核,stride=1,无padding(全局平均池化)
- 输出尺寸:$\frac{4-4}{1}+1=1$,每个通道输出1个标量
- 计算结果:
- 通道1(W1):所有元素和为43,平均值 $43/16=2.6875$
- 通道2(W2):所有元素和为52,平均值 $52/16=3.25$
- 池化输出向量:$x_{fc} = [2.6875,\ 3.25]$
步骤6:FC + Softmax
- 全连接权重:$W_1=[0,1]^T$,$W_2=[-1,1]^T$,无偏置
- 全连接层输出:
$$z_1 = x_{fc}·W_1 = 2.6875×0 + 3.25×1 = 3.25$$
$$z_2 = x_{fc}·W_2 = 2.6875×(-1) + 3.25×1 = 0.5625$$ - Softmax激活($y_i=\frac{e^{z_i}}{e^{z_1}+e^{z_2}}$):
$$e^{3.25}≈25.7903,\ e^{0.5625}≈1.7551,\ 总和≈27.5454$$
$$y_1≈\frac{25.7903}{27.5454}≈0.936$$
$$y_2≈\frac{1.7551}{27.5454}≈0.064$$
步骤7:最终输出
网络最终的Softmax输出为:$\boldsymbol{[0.936,\ 0.064]}$
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 kipleyarch@gmail.com