从本节开始,将介绍卷积神经网络。本节将介绍卷积函数。
卷积,是一种通过两个函数 f ( ⋅ ) 和 f(\cdot)和 f(⋅)和 g ( ⋅ ) g(\cdot) g(⋅)生成第三个函数 h ( ⋅ ) h(\cdot) h(⋅)的数学运算。而这个数学运算本质上是一种积分变换。
这里选择两个例子:
此时我们手中有 2 2 2组牌,每组牌中包含 5 5 5张牌,并且牌中的数字分别是 1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,5:
假设各 CardPile \text{CardPile} CardPile中每张牌选择的概率是相同的,我们的任务是:从 CardPile1 \text{CardPile1} CardPile1中随机选择一张牌,再从 CardPile2 \text{CardPile2} CardPile2中随机选择一张牌,两张牌中数字之和等于 6 6 6的概率是多少 ? ? ?
我们可以通过概率的方式进行求解:
每个 CardPile \text{CardPile} CardPile中,每张牌被选择的概率均是 1 5 \begin{aligned}\frac{1}{5}\end{aligned} 51,我们令变量 C 1 \mathcal C_1 C1表示 CArdPile1 \text{CArdPile1} CArdPile1中选择牌的数字;令 C 2 \mathcal C_2 C2表示 CardPile2 \text{CardPile2} CardPile2中选择牌的数字。那么上述任务的概率结果可表示为如下形式:
P ( C 1 + C 2 = 6 ) = P ( C 1 = 1 ) ⋅ P ( C 2 = 5 ) + P ( C 1 = 2 ) ⋅ P ( C 2 = 4 ) + ⋯ + P ( C 1 = 5 ) ⋅ P ( C 2 = 1 ) ⏟ 5 项 = ∑ i = 1 5 P ( C 1 = i ) ⋅ P ( C 2 = 6 − i ) = 5 ⋅ 1 5 ⋅ 1 5 = 1 5 \begin{aligned} \mathcal P(\mathcal C_1 + \mathcal C_2 = 6) & = \underbrace{\mathcal P(\mathcal C_1 = 1) \cdot \mathcal P(\mathcal C_2 = 5) + \mathcal P(\mathcal C_1 = 2) \cdot \mathcal P(\mathcal C_2 = 4) + \cdots + \mathcal P(\mathcal C_1 = 5) \cdot \mathcal P(\mathcal C_2 = 1)}_{5项} \\ & = \sum_{i=1}^5\mathcal P(\mathcal C_1 = i) \cdot \mathcal P(\mathcal C_2 = 6-i) \\ & = 5 \cdot \frac{1}{5} \cdot \frac{1}{5} \\ & = \frac{1}{5} \end{aligned} P(C1+C2=6)=5项 P(C1=1)⋅P(C2=5)+P(C1=2)⋅P(C2=4)+⋯+P(C1=5)⋅P(C2=1)=i=1∑5P(C1=i)⋅P(C2=6−i)=5⋅51⋅51=51
基于该示例,我们可以将任务看做是目标值的一个函数:
P ( C 1 + C 2 = 6 ) ⇒ h ( x = 6 ) \mathcal P(\mathcal C_1 + \mathcal C_2 = 6) \Rightarrow h(x = 6) P(C1+C2=6)⇒h(x=6)
而对应选择各 CardPile \text{CardPile} CardPile的概率结果分别对应不同的函数:
P ( C 1 = i ) ⇒ f ( i ) P ( C 2 = 6 − i ) = g ( x − i ) ( x = 6 ) \mathcal P(\mathcal C_1 = i) \Rightarrow f(i)\quad \mathcal P(\mathcal C_2 = 6-i) = g(x -i) \quad (x=6) P(C1=i)⇒f(i)P(C2=6−i)=g(x−i)(x=6)
最终将上述任务转化为如下形式:
h ( x = 6 ) = ∑ i = 1 5 f ( i ) ⋅ g ( x − i ) = f ( x ) ∗ g ( x ) \begin{aligned} h(x = 6) & = \sum_{i=1}^5 f(i) \cdot g(x - i) \\ & = f(x) *g(x) \end{aligned} h(x=6)=i=1∑5f(i)⋅g(x−i)=f(x)∗g(x)
而上式中的 ∗ * ∗就表示卷积( Convolution \text{Convolution} Convolution)。这个卷积结果函数 h ( x ) h(x) h(x)可被描述为:函数 f ( ⋅ ) f(\cdot) f(⋅)和 g ( ⋅ ) g(\cdot) g(⋅)经过翻转、平移的重叠部分函数值乘积对重叠长度的积分。
上述例子当 x = 6 x = 6 x=6时, f ( ⋅ ) f(\cdot) f(⋅)和 g ( ⋅ ) g(\cdot) g(⋅)的重叠部分有哪些呢 ? ? ?
在
x = 6 x=6 x=6任务目标下,每一个函数
f ( i ) f(i) f(i)在范围内都能找到对应的‘重叠部分’
g ( x − i ) g(x-i) g(x−i).
如果是 x = 7 x=7 x=7呢 ? ? ?
很明显,重叠部分小了。因为
f ( 1 ) f(1) f(1)在任务
x = 7 x=7 x=7中范围内没有与其构成的重叠部分
g ( 6 ) g(6) g(6).
对应的卷积结果表示如下:
h ( x = 7 ) = ∑ i = 1 5 f ( i ) ⋅ g ( x − i ) = f ( 1 ) ⋅ g ( 6 ) ⏟ g ( 6 ) = P ( C 2 = 6 ) = 0 + ∑ i = 2 5 f ( i ) ⋅ g ( x − i ) = 4 25 \begin{aligned} h(x = 7) & = \sum_{i=1}^5 f(i) \cdot g(x - i) \\ & = \underbrace{f(1) \cdot g(6)}_{g(6)=\mathcal P(\mathcal C_2 = 6) =0} + \sum_{i=2}^5 f(i) \cdot g(x-i) \\ & = \frac{4}{25} \end{aligned} h(x=7)=i=1∑5f(i)⋅g(x−i)=g(6)=P(C2=6)=0 f(1)⋅g(6)+i=2∑5f(i)⋅g(x−i)=254
假设某个人一天的进食情况表示如下。其中横坐标表示时间;纵坐标表示进食的量(这里使用摄入的能量表示,单位是 Kcal \text{Kcal} Kcal):
图像来源见下方链接,侵删,下同。
很明显,这个人摄入的能量和时间长度 t t t之间构成了一个复杂函数 f ( t ) f(t) f(t)。其中的三个波峰可以理解为正餐(三餐所在时刻)他的能量摄入情况;其余的时间他也没闲着,也在吃一些零食来摄入能量,只不过要低于正餐时能量的摄入。
当然,人在摄入能量的同时,也在消耗能量。这里以最简单的食物消化为例,不包含如跑步等其他消耗能量的方式,随着时间推移,他的能量消耗情况表示为如下形式:
需要注意的是,‘能量消耗’图像中的横坐标
t t t和‘摄入能量’图像中的横坐标
t t t不是相同的参考系。一个是‘时刻’,一个是时间跨度。
其中横坐标表示时长,纵坐标表示能量消耗的比率。例如,在刚吃完食物那一刻,还没有来得及消耗,此时的比率为 1 1 1。随着时间的推移,能量的消耗,比率值逐渐降低,能量越来越少。
至此,具体任务描述:在下午两点时,这个人剩余多少能量 ? ? ?
由于时刻是一个连续变量,从而使用积分的形式描述。而
x x x则表示该示例中定积分
0 → t 0\to t 0→t之间的任意一个时刻。
根据上述两个例子,我们可以发现它们的共性:根据任务的描述,基于函数 f ( x ) f(x) f(x)中的某个值 x x x,需要在 g ( ⋅ ) g(\cdot) g(⋅)中找到对应的结果对 f ( x ) f(x) f(x)进行修饰/描述,最终将这些被修饰的结果相加。
关于图像的描述,我们可以将其视作一个三维矩阵。它的维度具体表示为 ( H , W , C ) (\mathcal H,\mathcal W,\mathcal C) (H,W,C),其中 H \mathcal H H表示图片的高 ( Height ) (\text{Height}) (Height),也就是矩阵的行数; W \mathcal W W表示图片的宽 ( Width ) (\text{Width}) (Width),表示矩阵的列数。 C \mathcal C C表示图片的通道数:
而图像卷积操作是使用一个点阵(这里以 H , W \mathcal H,\mathcal W H,W均为3的矩阵为例)与图像矩阵进行操作,这个点阵也被称作卷积核 ( Convolution Kernel ) (\text{Convolution Kernel}) (Convolution Kernel):
不可否认,这个操作看起来是简单的。并且也能从中观察到卷积操作的影子,但问题在于:为什么要用卷积去处理这个事情,这种操作背后的物理意义是什么 ? ? ?
回顾上面吃饭的例子,可通过观察发现:描述食物消化的函数是稳定的,人的消化函数不会发生剧烈的变化。胖子和瘦子他们的消化函数可能存在差别,但不会出现一天一种结果;相反,人摄入能量的函数相比于消化函数存在更大的波动。
因而上面的卷积函数可以理解为:从时间角度观察,某一时刻的卷积结果可看做之前时刻对该时刻结果影响的叠加,而每一个叠加的项是由当前时刻的状态 f ( x ) f(x) f(x)与描述其规律 g ( t − x ) g(t -x) g(t−x)的加权结果。
如果从空间角度观察呢 ? ? ? 很明显图像数据就可看作摄入能量函数,各个图像某位置的像素点的差异是较大的;但是我们的卷积核是确定的,我们可以根据不同的卷积核描述不同的任务,但相同任务下对卷积核的描述是稳定的。
而将卷积核与被卷积核覆盖的像素点做卷积最终生成一个像素点这个过程可以描述为这个生成的新像素点包含了该位置周围的像素点信息,也就是说,卷积核规定了周围像素点如何对该像素点产生影响的。
即该位置各个方向的像素点信息通过‘某种规律加权的方式’映射在了该位置上。
一个明显的例子就是平滑操作。它的卷积核可表示为如下形式(示例):
这个卷积核对应的卷积操作就是将被卷积核覆盖的像素点取均值。最终卷积后产生的新图像的结果会存在一种模糊的效果。
相关参考:
卷积——百度百科
从“卷积”、到“图像卷积操作”、再到“卷积神经网络”,“卷积”意义的3次改变