矩阵卷积操作详解 - 可视化教程
什么是卷积?
卷积是一种数学运算,可以理解为"滑动加权求和"。在深度学习中,卷积被广泛用于提取特征。
基础示例:6×6矩阵与3×3卷积核的卷积
我们使用一个简单的6×6输入矩阵 \(I\) 和一个3×3卷积核 \(K\):
输入矩阵 \(I\):
\[I = \colorbox{lightblue}{$
\begin{array}{cccccc}
1 & 2 & 3 & 4 & 5 & 6\\
7 & 8 & 9 & 10 & 11 & 12\\
13 & 14 & 15 & 16 & 17 & 18\\
19 & 20 & 21 & 22 & 23 & 24\\
25 & 26 & 27 & 28 & 29 & 30\\
31 & 32 & 33 & 34 & 35 & 36\\
\end{array}
$}
\]
卷积核 \(K\):
\[K = \colorbox{lightgreen}{$
\begin{array}{ccc}
k_1 & k_2 & k_3\\
k_4 & k_5 & k_6\\
k_7 & k_8 & k_9\\
\end{array}
$}
= \colorbox{lightgreen}{$
\begin{array}{ccc}
0.1 & 0.2 & 0.3\\
0.4 & 0.5 & 0.6\\
0.7 & 0.8 & 0.9\\
\end{array}
$}
\]
这是一个简单的3×3卷积核,每个元素的值都不同,以便更清楚地展示计算过程。
卷积计算步骤(步幅=1,无填充)
第1步:计算输出矩阵(0,0)位置的元素
将卷积核放在输入矩阵的左上角:
\[\colorbox{lightblue}{$
\begin{array}{cccccc}
\colorbox{lightcoral}{1} & \colorbox{lightcoral}{2} & \colorbox{lightcoral}{3} & 4 & 5 & 6\\
\colorbox{lightcoral}{7} & \colorbox{lightcoral}{8} & \colorbox{lightcoral}{9} & 10 & 11 & 12\\
\colorbox{lightcoral}{13} & \colorbox{lightcoral}{14} & \colorbox{lightcoral}{15} & 16 & 17 & 18\\
19 & 20 & 21 & 22 & 23 & 24\\
25 & 26 & 27 & 28 & 29 & 30\\
31 & 32 & 33 & 34 & 35 & 36\\
\end{array}
$}
\otimes
\colorbox{lightgreen}{$
\begin{array}{ccc}
k_1 & k_2 & k_3\\
k_4 & k_5 & k_6\\
k_7 & k_8 & k_9\\
\end{array}
$}
\]
逐元素相乘:
\[\begin{aligned}
&\colorbox{lightcoral}{1}\times k_1 + \colorbox{lightcoral}{2}\times k_2 + \colorbox{lightcoral}{3}\times k_3 + \\
&\colorbox{lightcoral}{7}\times k_4 + \colorbox{lightcoral}{8}\times k_5 + \colorbox{lightcoral}{9}\times k_6 + \\
&\colorbox{lightcoral}{13}\times k_7 + \colorbox{lightcoral}{14}\times k_8 + \colorbox{lightcoral}{15}\times k_9
\end{aligned}
\]
代入数值计算:
\[\begin{aligned}
&= 1\times0.1 + 2\times0.2 + 3\times0.3 + \\
&7\times0.4 + 8\times0.5 + 9\times0.6 + \\
&13\times0.7 + 14\times0.8 + 15\times0.9
\end{aligned}
\]
逐步计算:
- 第一行:\(0.1 + 0.4 + 0.9 = 1.4\)
- 第二行:\(2.8 + 4.0 + 5.4 = 12.2\)
- 第三行:\(9.1 + 11.2 + 13.5 = 33.8\)
总和:
\[1.4 + 12.2 + 33.8 = \colorbox{lightyellow}{47.4}
\]
第2步:计算输出矩阵(0,1)位置的元素
将卷积核向右移动1格:
\[\colorbox{lightblue}{$
\begin{array}{cccccc}
1 & \colorbox{lavender}{2} & \colorbox{lavender}{3} & \colorbox{lavender}{4} & 5 & 6\\
7 & \colorbox{lavender}{8} & \colorbox{lavender}{9} & \colorbox{lavender}{10} & 11 & 12\\
13 & \colorbox{lavender}{14} & \colorbox{lavender}{15} & \colorbox{lavender}{16} & 17 & 18\\
19 & 20 & 21 & 22 & 23 & 24\\
25 & 26 & 27 & 28 & 29 & 30\\
31 & 32 & 33 & 34 & 35 & 36\\
\end{array}
$}
\otimes
\colorbox{lightgreen}{$
\begin{array}{ccc}
k_1 & k_2 & k_3\\
k_4 & k_5 & k_6\\
k_7 & k_8 & k_9\\
\end{array}
$}
\]
逐元素相乘:
\[\begin{aligned}
&\colorbox{lavender}{2}\times k_1 + \colorbox{lavender}{3}\times k_2 + \colorbox{lavender}{4}\times k_3 + \\
&\colorbox{lavender}{8}\times k_4 + \colorbox{lavender}{9}\times k_5 + \colorbox{lavender}{10}\times k_6 + \\
&\colorbox{lavender}{14}\times k_7 + \colorbox{lavender}{15}\times k_8 + \colorbox{lavender}{16}\times k_9
\end{aligned}
\]
代入数值计算:
\[\begin{aligned}
&= 2\times0.1 + 3\times0.2 + 4\times0.3 + \\
&8\times0.4 + 9\times0.5 + 10\times0.6 + \\
&14\times0.7 + 15\times0.8 + 16\times0.9
\end{aligned}
\]
逐步计算:
- 第一行:\(0.2 + 0.6 + 1.2 = 2.0\)
- 第二行:\(3.2 + 4.5 + 6.0 = 13.7\)
- 第三行:\(9.8 + 12.0 + 14.4 = 36.2\)
总和:
\[2.0 + 13.7 + 36.2 = \colorbox{lightcyan}{51.9}
\]
第3步:计算输出矩阵(0,2)位置的元素
将卷积核继续向右移动1格:
\[\colorbox{lightblue}{$
\begin{array}{cccccc}
1 & 2 & \colorbox{peachpuff}{3} & \colorbox{peachpuff}{4} & \colorbox{peachpuff}{5} & 6\\
7 & 8 & \colorbox{peachpuff}{9} & \colorbox{peachpuff}{10} & \colorbox{peachpuff}{11} & 12\\
13 & 14 & \colorbox{peachpuff}{15} & \colorbox{peachpuff}{16} & \colorbox{peachpuff}{17} & 18\\
19 & 20 & 21 & 22 & 23 & 24\\
25 & 26 & 27 & 28 & 29 & 30\\
31 & 32 & 33 & 34 & 35 & 36\\
\end{array}
$}
\otimes
\colorbox{lightgreen}{$
\begin{array}{ccc}
k_1 & k_2 & k_3\\
k_4 & k_5 & k_6\\
k_7 & k_8 & k_9\\
\end{array}
$}
\]
逐元素相乘:
\[\begin{aligned}
&\colorbox{peachpuff}{3}\times k_1 + \colorbox{peachpuff}{4}\times k_2 + \colorbox{peachpuff}{5}\times k_3 + \\
&\colorbox{peachpuff}{9}\times k_4 + \colorbox{peachpuff}{10}\times k_5 + \colorbox{peachpuff}{11}\times k_6 + \\
&\colorbox{peachpuff}{15}\times k_7 + \colorbox{peachpuff}{16}\times k_8 + \colorbox{peachpuff}{17}\times k_9
\end{aligned}
\]
代入数值计算:
\[\begin{aligned}
&= 3\times0.1 + 4\times0.2 + 5\times0.3 + \\
&9\times0.4 + 10\times0.5 + 11\times0.6 + \\
&15\times0.7 + 16\times0.8 + 17\times0.9
\end{aligned}
\]
逐步计算:
- 第一行:\(0.3 + 0.8 + 1.5 = 2.6\)
- 第二行:\(3.6 + 5.0 + 6.6 = 15.2\)
- 第三行:\(10.5 + 12.8 + 15.3 = 38.6\)
总和:
\[2.6 + 15.2 + 38.6 = \colorbox{palegreen}{56.4}
\]
第4步:计算输出矩阵(0,3)位置的元素
将卷积核移动到最右边:
\[\colorbox{lightblue}{$
\begin{array}{cccccc}
1 & 2 & 3 & \colorbox{thistle}{4} & \colorbox{thistle}{5} & \colorbox{thistle}{6}\\
7 & 8 & 9 & \colorbox{thistle}{10} & \colorbox{thistle}{11} & \colorbox{thistle}{12}\\
13 & 14 & 15 & \colorbox{thistle}{16} & \colorbox{thistle}{17} & \colorbox{thistle}{18}\\
19 & 20 & 21 & 22 & 23 & 24\\
25 & 26 & 27 & 28 & 29 & 30\\
31 & 32 & 33 & 34 & 35 & 36\\
\end{array}
$}
\otimes
\colorbox{lightgreen}{$
\begin{array}{ccc}
k_1 & k_2 & k_3\\
k_4 & k_5 & k_6\\
k_7 & k_8 & k_9\\
\end{array}
$}
\]
逐元素相乘:
\[\begin{aligned}
&\colorbox{thistle}{4}\times k_1 + \colorbox{thistle}{5}\times k_2 + \colorbox{thistle}{6}\times k_3 + \\
&\colorbox{thistle}{10}\times k_4 + \colorbox{thistle}{11}\times k_5 + \colorbox{thistle}{12}\times k_6 + \\
&\colorbox{thistle}{16}\times k_7 + \colorbox{thistle}{17}\times k_8 + \colorbox{thistle}{18}\times k_9
\end{aligned}
\]
代入数值计算:
\[\begin{aligned}
&= 4\times0.1 + 5\times0.2 + 6\times0.3 + \\
&10\times0.4 + 11\times0.5 + 12\times0.6 + \\
&16\times0.7 + 17\times0.8 + 18\times0.9
\end{aligned}
\]
逐步计算:
- 第一行:\(0.4 + 1.0 + 1.8 = 3.2\)
- 第二行:\(4.0 + 5.5 + 7.2 = 16.7\)
- 第三行:\(11.2 + 13.6 + 16.2 = 41.0\)
总和:
\[3.2 + 16.7 + 41.0 = \colorbox{blanchedalmond}{60.9}
\]
继续计算第二行
第5步:计算输出矩阵(1,0)位置的元素
将卷积核向下移动1格,回到左边:
\[\colorbox{lightblue}{$
\begin{array}{cccccc}
1 & 2 & 3 & 4 & 5 & 6\\
\colorbox{lightcoral}{7} & \colorbox{lightcoral}{8} & \colorbox{lightcoral}{9} & 10 & 11 & 12\\
\colorbox{lightcoral}{13} & \colorbox{lightcoral}{14} & \colorbox{lightcoral}{15} & 16 & 17 & 18\\
\colorbox{lightcoral}{19} & \colorbox{lightcoral}{20} & \colorbox{lightcoral}{21} & 22 & 23 & 24\\
25 & 26 & 27 & 28 & 29 & 30\\
31 & 32 & 33 & 34 & 35 & 36\\
\end{array}
$}
\otimes
\colorbox{lightgreen}{$
\begin{array}{ccc}
k_1 & k_2 & k_3\\
k_4 & k_5 & k_6\\
k_7 & k_8 & k_9\\
\end{array}
$}
\]
逐元素相乘:
\[\begin{aligned}
&\colorbox{lightcoral}{7}\times k_1 + \colorbox{lightcoral}{8}\times k_2 + \colorbox{lightcoral}{9}\times k_3 + \\
&\colorbox{lightcoral}{13}\times k_4 + \colorbox{lightcoral}{14}\times k_5 + \colorbox{lightcoral}{15}\times k_6 + \\
&\colorbox{lightcoral}{19}\times k_7 + \colorbox{lightcoral}{20}\times k_8 + \colorbox{lightcoral}{21}\times k_9
\end{aligned}
\]
代入数值计算:
\[\begin{aligned}
&= 7\times0.1 + 8\times0.2 + 9\times0.3 + \\
&13\times0.4 + 14\times0.5 + 15\times0.6 + \\
&19\times0.7 + 20\times0.8 + 21\times0.9
\end{aligned}
\]
逐步计算:
- 第一行:\(0.7 + 1.6 + 2.7 = 5.0\)
- 第二行:\(5.2 + 7.0 + 9.0 = 21.2\)
- 第三行:\(13.3 + 16.0 + 18.9 = 48.2\)
总和:
\[5.0 + 21.2 + 48.2 = \colorbox{lightcoral}{74.4}
\]
第6步:计算输出矩阵(1,1)位置的元素
将卷积核向右移动1格:
\[\colorbox{lightblue}{$
\begin{array}{cccccc}
1 & 2 & 3 & 4 & 5 & 6\\
7 & \colorbox{lavender}{8} & \colorbox{lavender}{9} & \colorbox{lavender}{10} & 11 & 12\\
13 & \colorbox{lavender}{14} & \colorbox{lavender}{15} & \colorbox{lavender}{16} & 17 & 18\\
19 & \colorbox{lavender}{20} & \colorbox{lavender}{21} & \colorbox{lavender}{22} & 23 & 24\\
25 & 26 & 27 & 28 & 29 & 30\\
31 & 32 & 33 & 34 & 35 & 36\\
\end{array}
$}
\otimes
\colorbox{lightgreen}{$
\begin{array}{ccc}
k_1 & k_2 & k_3\\
k_4 & k_5 & k_6\\
k_7 & k_8 & k_9\\
\end{array}
$}
\]
逐元素相乘:
\[\begin{aligned}
&\colorbox{lavender}{8}\times k_1 + \colorbox{lavender}{9}\times k_2 + \colorbox{lavender}{10}\times k_3 + \\
&\colorbox{lavender}{14}\times k_4 + \colorbox{lavender}{15}\times k_5 + \colorbox{lavender}{16}\times k_6 + \\
&\colorbox{lavender}{20}\times k_7 + \colorbox{lavender}{21}\times k_8 + \colorbox{lavender}{22}\times k_9
\end{aligned}
\]
代入数值计算:
\[\begin{aligned}
&= 8\times0.1 + 9\times0.2 + 10\times0.3 + \\
&14\times0.4 + 15\times0.5 + 16\times0.6 + \\
&20\times0.7 + 21\times0.8 + 22\times0.9
\end{aligned}
\]
逐步计算:
- 第一行:\(0.8 + 1.8 + 3.0 = 5.6\)
- 第二行:\(5.6 + 7.5 + 9.6 = 22.7\)
- 第三行:\(14.0 + 16.8 + 19.8 = 50.6\)
总和:
\[5.6 + 22.7 + 50.6 = \colorbox{lavender}{78.9}
\]
完整卷积结果(前几项)
按照同样的方法计算所有位置,我们得到4×4的输出矩阵:
完整计算过程:
- 位置(0,0): 47.4
- 位置(0,1): 51.9
- 位置(0,2): 56.4
- 位置(0,3): 60.9
- 位置(1,0): 74.4
- 位置(1,1): 78.9
- 位置(1,2): 83.4
- 位置(1,3): 87.9
- 位置(2,0): 101.4
- 位置(2,1): 105.9
- 位置(2,2): 110.4
- 位置(2,3): 114.9
- 位置(3,0): 128.4
- 位置(3,1): 132.9
- 位置(3,2): 137.4
- 位置(3,3): 141.9
最终结果:
\[\text{卷积结果} = \colorbox{lightyellow}{$
\begin{array}{cccc}
47.4 & 51.9 & 56.4 & 60.9\\
74.4 & 78.9 & 83.4 & 87.9\\
101.4 & 105.9 & 110.4 & 114.9\\
128.4 & 132.9 & 137.4 & 141.9\\
\end{array}
$}
\]
观察规律
从计算结果我们可以观察到:
- 每一行内,数值从左到右递增(差值都是4.5)
- 每一列内,数值从上到下递增(差值都是27.0)
- 这是因为输入矩阵是均匀递增的,而卷积核的权重也是递增的
总结
卷积操作步骤:
- 将卷积核放在输入矩阵的左上角
- 逐元素相乘:输入矩阵的每个元素乘以卷积核对应的元素
- 求和:将所有乘积相加,得到输出矩阵的第一个元素
- 滑动:将卷积核向右滑动(步幅=1),重复2-3步
- 到达最右边后,回到最左边,向下滑动一行
- 重复直到覆盖整个输入矩阵
输出大小公式:
如果输入矩阵大小为 \(n \times n\),卷积核大小为 \(k \times k\),步幅为1,无填充:
\[\text{输出大小} = (n-k+1) \times (n-k+1)
\]
在我们的例子中:\(n=6\), \(k=3\),输出大小为 \((6-3+1) \times (6-3+1) = 4 \times 4\)
数学表达式:
对于输出矩阵中的元素 \(O_{i,j}\):
\[O_{i,j} = \sum_{m=0}^{2}\sum_{n=0}^{2} I_{i+m,j+n} \times K_{m,n}
\]
通过这个详细的例子,我们能清楚地理解卷积操作的计算过程了!
下面再讲解多通道卷积
多通道卷积详解
什么是多通道卷积?
在深度学习中,我们经常处理多通道数据,比如彩色图片有3个通道(红、绿、蓝)。多通道卷积是单通道卷积的扩展,每个输入通道都有一个对应的卷积核,最后将所有通道的结果相加。
示例:2通道输入,2个卷积核
假设我们有一个2通道的4×4输入,使用2个卷积核,每个卷积核也是2通道的3×3大小:
输入张量 \(I\)(2通道,4×4):
通道1:
\[I_1 = \colorbox{lightblue}{$
\begin{array}{cccc}
1 & 2 & 3 & 4\\
5 & 6 & 7 & 8\\
9 & 10 & 11 & 12\\
13 & 14 & 15 & 16\\
\end{array}
$}
\]
通道2:
\[I_2 = \colorbox{lightgreen}{$
\begin{array}{cccc}
17 & 18 & 19 & 20\\
21 & 22 & 23 & 24\\
25 & 26 & 27 & 28\\
29 & 30 & 31 & 32\\
\end{array}
$}
\]
卷积核 \(K\)(2个卷积核,每个有2通道):
卷积核1:
\[K_1^{(1)} = \colorbox{lightcoral}{$
\begin{array}{ccc}
0.1 & 0.2 & 0.3\\
0.4 & 0.5 & 0.6\\
0.7 & 0.8 & 0.9\\
\end{array}
$}
\quad
K_1^{(2)} = \colorbox{lavender}{$
\begin{array}{ccc}
1.0 & 1.1 & 1.2\\
1.3 & 1.4 & 1.5\\
1.6 & 1.7 & 1.8\\
\end{array}
$}
\]
卷积核2:
\[K_2^{(1)} = \colorbox{peachpuff}{$
\begin{array}{ccc}
2.1 & 2.2 & 2.3\\
2.4 & 2.5 & 2.6\\
2.7 & 2.8 & 2.9\\
\end{array}
$}
\quad
K_2^{(2)} = \colorbox{lightcyan}{$
\begin{array}{ccc}
3.1 & 3.2 & 3.3\\
3.4 & 3.5 & 3.6\\
3.7 & 3.8 & 3.9\\
\end{array}
$}
\]
计算第一个卷积核的输出
第一步:计算输出位置(0,0)
卷积核1的两个通道分别与对应的输入通道卷积:
通道1的卷积:
\[\colorbox{lightblue}{$
\begin{array}{cccc}
\colorbox{lightyellow}{1} & \colorbox{lightyellow}{2} & \colorbox{lightyellow}{3} & 4\\
\colorbox{lightyellow}{5} & \colorbox{lightyellow}{6} & \colorbox{lightyellow}{7} & 8\\
\colorbox{lightyellow}{9} & \colorbox{lightyellow}{10} & \colorbox{lightyellow}{11} & 12\\
13 & 14 & 15 & 16\\
\end{array}
$}
\otimes
\colorbox{lightcoral}{$
\begin{array}{ccc}
0.1 & 0.2 & 0.3\\
0.4 & 0.5 & 0.6\\
0.7 & 0.8 & 0.9\\
\end{array}
$}
\]
计算:
\[\begin{aligned}
&1\times0.1 + 2\times0.2 + 3\times0.3 + \\
&5\times0.4 + 6\times0.5 + 7\times0.6 + \\
&9\times0.7 + 10\times0.8 + 11\times0.9 \\
&= 0.1 + 0.4 + 0.9 + 2.0 + 3.0 + 4.2 + 6.3 + 8.0 + 9.9 \\
&= 34.8
\end{aligned}
\]
通道2的卷积:
\[\colorbox{lightgreen}{$
\begin{array}{cccc}
\colorbox{lightyellow}{17} & \colorbox{lightyellow}{18} & \colorbox{lightyellow}{19} & 20\\
\colorbox{lightyellow}{21} & \colorbox{lightyellow}{22} & \colorbox{lightyellow}{23} & 24\\
\colorbox{lightyellow}{25} & \colorbox{lightyellow}{26} & \colorbox{lightyellow}{27} & 28\\
29 & 30 & 31 & 32\\
\end{array}
$}
\otimes
\colorbox{lavender}{$
\begin{array}{ccc}
1.0 & 1.1 & 1.2\\
1.3 & 1.4 & 1.5\\
1.6 & 1.7 & 1.8\\
\end{array}
$}
\]
计算:
\[\begin{aligned}
&17\times1.0 + 18\times1.1 + 19\times1.2 + \\
&21\times1.3 + 22\times1.4 + 23\times1.5 + \\
&25\times1.6 + 26\times1.7 + 27\times1.8 \\
&= 17.0 + 19.8 + 22.8 + 27.3 + 30.8 + 34.5 + 40.0 + 44.2 + 48.6 \\
&= 285.0
\end{aligned}
\]
两个通道结果相加:
\[34.8 + 285.0 = \colorbox{lightyellow}{319.8}
\]
所以卷积核1在位置(0,0)的输出是 319.8
第二步:计算输出位置(0,1)
卷积核1的两个通道分别卷积:
通道1(向右滑动一格):
\[\colorbox{lightblue}{$
\begin{array}{cccc}
1 & \colorbox{lightyellow}{2} & \colorbox{lightyellow}{3} & \colorbox{lightyellow}{4}\\
5 & \colorbox{lightyellow}{6} & \colorbox{lightyellow}{7} & \colorbox{lightyellow}{8}\\
9 & \colorbox{lightyellow}{10} & \colorbox{lightyellow}{11} & \colorbox{lightyellow}{12}\\
13 & 14 & 15 & 16\\
\end{array}
$}
\otimes
\colorbox{lightcoral}{$
\begin{array}{ccc}
0.1 & 0.2 & 0.3\\
0.4 & 0.5 & 0.6\\
0.7 & 0.8 & 0.9\\
\end{array}
$}
\]
计算:
\[\begin{aligned}
&2\times0.1 + 3\times0.2 + 4\times0.3 + \\
&6\times0.4 + 7\times0.5 + 8\times0.6 + \\
&10\times0.7 + 11\times0.8 + 12\times0.9 \\
&= 0.2 + 0.6 + 1.2 + 2.4 + 3.5 + 4.8 + 7.0 + 8.8 + 10.8 \\
&= 39.3
\end{aligned}
\]
通道2:
\[\colorbox{lightgreen}{$
\begin{array}{cccc}
17 & \colorbox{lightyellow}{18} & \colorbox{lightyellow}{19} & \colorbox{lightyellow}{20}\\
21 & \colorbox{lightyellow}{22} & \colorbox{lightyellow}{23} & \colorbox{lightyellow}{24}\\
25 & \colorbox{lightyellow}{26} & \colorbox{lightyellow}{27} & \colorbox{lightyellow}{28}\\
29 & 30 & 31 & 32\\
\end{array}
$}
\otimes
\colorbox{lavender}{$
\begin{array}{ccc}
1.0 & 1.1 & 1.2\\
1.3 & 1.4 & 1.5\\
1.6 & 1.7 & 1.8\\
\end{array}
$}
\]
计算:
\[\begin{aligned}
&18\times1.0 + 19\times1.1 + 20\times1.2 + \\
&22\times1.3 + 23\times1.4 + 24\times1.5 + \\
&26\times1.6 + 27\times1.7 + 28\times1.8 \\
&= 18.0 + 20.9 + 24.0 + 28.6 + 32.2 + 36.0 + 41.6 + 45.9 + 50.4 \\
&= 297.6
\end{aligned}
\]
两个通道结果相加:
\[39.3 + 297.6 = \colorbox{lightcyan}{336.9}
\]
计算第二个卷积核的输出
第一步:计算输出位置(0,0)
卷积核2的两个通道分别与对应的输入通道卷积:
通道1的卷积:
\[\colorbox{lightblue}{$
\begin{array}{cccc}
\colorbox{lightyellow}{1} & \colorbox{lightyellow}{2} & \colorbox{lightyellow}{3} & 4\\
\colorbox{lightyellow}{5} & \colorbox{lightyellow}{6} & \colorbox{lightyellow}{7} & 8\\
\colorbox{lightyellow}{9} & \colorbox{lightyellow}{10} & \colorbox{lightyellow}{11} & 12\\
13 & 14 & 15 & 16\\
\end{array}
$}
\otimes
\colorbox{peachpuff}{$
\begin{array}{ccc}
2.1 & 2.2 & 2.3\\
2.4 & 2.5 & 2.6\\
2.7 & 2.8 & 2.9\\
\end{array}
$}
\]
计算:
\[\begin{aligned}
&1\times2.1 + 2\times2.2 + 3\times2.3 + \\
&5\times2.4 + 6\times2.5 + 7\times2.6 + \\
&9\times2.7 + 10\times2.8 + 11\times2.9 \\
&= 2.1 + 4.4 + 6.9 + 12.0 + 15.0 + 18.2 + 24.3 + 28.0 + 31.9 \\
&= 142.8
\end{aligned}
\]
通道2的卷积:
\[\colorbox{lightgreen}{$
\begin{array}{cccc}
\colorbox{lightyellow}{17} & \colorbox{lightyellow}{18} & \colorbox{lightyellow}{19} & 20\\
\colorbox{lightyellow}{21} & \colorbox{lightyellow}{22} & \colorbox{lightyellow}{23} & 24\\
\colorbox{lightyellow}{25} & \colorbox{lightyellow}{26} & \colorbox{lightyellow}{27} & 28\\
29 & 30 & 31 & 32\\
\end{array}
$}
\otimes
\colorbox{lightcyan}{$
\begin{array}{ccc}
3.1 & 3.2 & 3.3\\
3.4 & 3.5 & 3.6\\
3.7 & 3.8 & 3.9\\
\end{array}
$}
\]
计算:
\[\begin{aligned}
&17\times3.1 + 18\times3.2 + 19\times3.3 + \\
&21\times3.4 + 22\times3.5 + 23\times3.6 + \\
&25\times3.7 + 26\times3.8 + 27\times3.9 \\
&= 52.7 + 57.6 + 62.7 + 71.4 + 77.0 + 82.8 + 92.5 + 98.8 + 105.3 \\
&= 700.8
\end{aligned}
\]
两个通道结果相加:
\[142.8 + 700.8 = \colorbox{peachpuff}{843.6}
\]
所以卷积核2在位置(0,0)的输出是 843.6
第二步:计算输出位置(0,1)
卷积核2的两个通道分别卷积:
通道1(向右滑动一格):
\[\colorbox{lightblue}{$
\begin{array}{cccc}
1 & \colorbox{lightyellow}{2} & \colorbox{lightyellow}{3} & \colorbox{lightyellow}{4}\\
5 & \colorbox{lightyellow}{6} & \colorbox{lightyellow}{7} & \colorbox{lightyellow}{8}\\
9 & \colorbox{lightyellow}{10} & \colorbox{lightyellow}{11} & \colorbox{lightyellow}{12}\\
13 & 14 & 15 & 16\\
\end{array}
$}
\otimes
\colorbox{peachpuff}{$
\begin{array}{ccc}
2.1 & 2.2 & 2.3\\
2.4 & 2.5 & 2.6\\
2.7 & 2.8 & 2.9\\
\end{array}
$}
\]
计算:
\[\begin{aligned}
&2\times2.1 + 3\times2.2 + 4\times2.3 + \\
&6\times2.4 + 7\times2.5 + 8\times2.6 + \\
&10\times2.7 + 11\times2.8 + 12\times2.9 \\
&= 4.2 + 6.6 + 9.2 + 14.4 + 17.5 + 20.8 + 27.0 + 30.8 + 34.8 \\
&= 165.3
\end{aligned}
\]
通道2:
\[\colorbox{lightgreen}{$
\begin{array}{cccc}
17 & \colorbox{lightyellow}{18} & \colorbox{lightyellow}{19} & \colorbox{lightyellow}{20}\\
21 & \colorbox{lightyellow}{22} & \colorbox{lightyellow}{23} & \colorbox{lightyellow}{24}\\
25 & \colorbox{lightyellow}{26} & \colorbox{lightyellow}{27} & \colorbox{lightyellow}{28}\\
29 & 30 & 31 & 32\\
\end{array}
$}
\otimes
\colorbox{lightcyan}{$
\begin{array}{ccc}
3.1 & 3.2 & 3.3\\
3.4 & 3.5 & 3.6\\
3.7 & 3.8 & 3.9\\
\end{array}
$}
\]
计算:
\[\begin{aligned}
&18\times3.1 + 19\times3.2 + 20\times3.3 + \\
&22\times3.4 + 23\times3.5 + 24\times3.6 + \\
&26\times3.7 + 27\times3.8 + 28\times3.9 \\
&= 55.8 + 60.8 + 66.0 + 74.8 + 80.5 + 86.4 + 96.2 + 102.6 + 109.2 \\
&= 732.3
\end{aligned}
\]
两个通道结果相加:
\[165.3 + 732.3 = \colorbox{lightcyan}{897.6}
\]
完整输出结果
按照同样的方法计算所有位置,我们得到:
卷积核1的输出(2×2):
\[O_1 = \colorbox{lightyellow}{$
\begin{array}{cc}
319.8 & 336.9\\
371.4 & 388.5\\
\end{array}
$}
\]
卷积核2的输出(2×2):
\[O_2 = \colorbox{peachpuff}{$
\begin{array}{cc}
843.6 & 897.6\\
951.6 & 1005.6\\
\end{array}
$}
\]
最终输出(2个通道的2×2特征图):
通道1(卷积核1的输出):
\[\begin{array}{cc}
319.8 & 336.9\\
371.4 & 388.5\\
\end{array}
\]
通道2(卷积核2的输出):
\[\begin{array}{cc}
843.6 & 897.6\\
951.6 & 1005.6\\
\end{array}
\]
多通道卷积公式
对于输入 \(I\) 有 \(C_{in}\) 个通道,卷积核 \(K\) 有 \(C_{out}\) 个,每个卷积核有 \(C_{in}\) 个通道,则输出 \(O\) 的第 \(k\) 个通道在位置 \((i,j)\) 的值为:
\[O_k(i,j) = \sum_{c=0}^{C_{in}-1} \left( \text{卷积}(I_c, K_k^{(c)}) \right) + b_k
\]
其中:
- \(I_c\) 是输入的第 \(c\) 个通道
- \(K_k^{(c)}\) 是第 \(k\) 个卷积核的第 \(c\) 个通道
- \(b_k\) 是第 \(k\) 个卷积核的偏置(本例中为0)
- \(\text{卷积}(A,B)\) 表示单通道卷积操作
总结
多通道卷积的关键点:
- 输入通道数 = 卷积核通道数:每个输入通道都有一个对应的卷积核通道
- 输出通道数 = 卷积核个数:每个卷积核产生一个输出通道
- 计算过程:每个卷积核的所有通道分别与对应的输入通道卷积,然后相加
- 维度变化:输入维度为 \((C_{in}, H_{in}, W_{in})\),输出维度为 \((C_{out}, H_{out}, W_{out})\)
参数数量计算:
- 每个卷积核的参数:\(C_{in} \times K_h \times K_w\)
- 总参数:\(C_{out} \times C_{in} \times K_h \times K_w\)
在我们的例子中:
- \(C_{in} = 2\), \(C_{out} = 2\), \(K_h = K_w = 3\)
- 总参数 = \(2 \times 2 \times 3 \times 3 = 36\)
通过这个详细的例子,使用不同的卷积核值,可以更清晰地看到多通道卷积的计算过程!