提到卷积这个词,并不陌生,在复变函数与积分变换,概率论,控制工程,信号处理,傅里叶变换中经常遇到,这篇文章我想来深入挖掘卷积背后的数学理论(因为网络上都是各种图,看的眼花缭乱的),并且卷积的应用非常广泛,我将会以人工智能,计算机视觉里最火的卷积神经网络(CNN)作为应用。
先用数学的角度认识他
书本上的性质
卷积定理
即时域的卷积等于频域相乘
时域卷积定理为:
频域卷积定理为:
时域信号可以分解成一串不同频率正弦信号的叠加。根据卷积的分配率,两个时域信号的卷积最终可以展开成两两正弦信号的卷积的和。由于不同频率的正弦信号的卷积为0,所以最终只剩下相同频率的正弦信号的卷积。而卷积的结果就是频率不变,幅度相乘。在频域里边就表现为直接相乘。
为了更好地理解这些问题,我们先给出两个典型的应用场景:
- 信号分析中的卷积:
假设我们有一个输入信号f(t)和一个系统的单位冲击响应g(t)。卷积操作可以表示为f(t) g(t),其中""表示卷积。卷积的结果就是输出信号。
想象一下,我们将输入信号f(t)和冲击响应g(t)都展开成一系列脉冲(或点),然后进行叠加。具体来说,对于f(t)中的每一个点,我们都将其乘以g(t)中对应的点,然后将所有的乘积加起来。这个过程就得到了输出信号。
这里以离散信号为例
接着对g(t)进行g(-t)操作,也就是翻转,关于y轴对称。
接着计算T时刻的卷积时,要维持的约束就是:t+ (T-t) = T,也就是将g(-t往右边移动),找到信号直接重叠的部分
然后进行叠加(是相加不是相乘),和线性时不变系统一样
- 图像处理中的卷积:
在图像处理中,卷积核g(x,y)通常是一个二维矩阵,用于与输入图像f(x,y)进行卷积操作。这个操作可以看作是将卷积核在输入图像上滑动,然后在每个位置上都计算卷积核和图像对应区域的乘积之和。
例如,如果我们使用一个模糊卷积核,那么输出图像将会得到模糊效果;如果我们使用一个边缘检测卷积核,那么输出图像将会得到边缘强化效果。
下面就来了解卷积神经网络
它由三个部分组成
首先是卷积层
卷积本来就是把两个函数合体来得出一个新函数的运算,自然可以做成滤波器(也叫卷积核,filter),不过值得注意的是图像处理中的卷积核是不需要翻转的(但是一般为了演示卷积这个按照数学公式进行操作时,用翻转便于理解---f(x)→f(-x),绕y轴对称一下)。
左边也就输入层(input layer),中间卷积核,输出得到的是特征图(feature map) ,每次卷积操作的一个步骤例如左边图上9个点叫做感受野
为了保证输入输出维度一致,会给原始图像矩阵周围补上零,像这样:
刚好找到一个动图,5×5的矩阵在3×3的卷积核卷积下,步长设为1,则得到的矩阵是3×3的
延x轴或者y轴滑动,就可以求出图像中各个位置的卷积,其输出结果是处理以后的图像(即经过平滑、边缘提取等各种处理的图像)。
通过这一步就可以提取出图像的特征。
接着是池化层(pooling)
因为即使做完了卷积,图像仍然很大(因为卷积核比较小),所以为了降低数据维度,就进行下采样。
忽略掉个别像素的偏差,其意义不光能降低数据维度,降低训练参数和运算量,同时还能避免所谓的过拟合。
最后是全连接层
全连接层也就是传统的神经网络该做的事了
那神经网络又是什么?
我感觉他有点像一元的线性回归方程,也类似与非线性回归(但它是针对高阶,又像泰勒展开一样),其实说白了也就是每一个输入都有不同的权重w,然后进行累加,加入偏置b,就得到线性方程y=kx+b。
但是神经网络这么高级的东西,怎么可能这么简单,科学家们在后续加入激活函数(也就感知机)加入非线性。我的理解是,如果不加入激活函数,那么
常用的非线性激活函数有sigmoid、tanh、relu等等,前两者sigmoid/tanh比较常见于全连接层,后者relu常见于卷积层。 经过事实证明还是,Relu函数最好用,也最简单。
这个也叫做前向传播,相应的也有反向传播(自己去搜,也就是计算残差率,学习率,模型评估)
用visio画的神经网络图
经过卷积层和池化层降维过的数据,全连接层才能”跑得动”,不然数据量太大,计算成本高,效率低下。
以上就是卷积神经网络入门的知识了,事实上,这已经是很早就流行的东西了,现在的科研论文基本都是在此基础上进行优化改进,调整参数,权重,模型等等,亦或是用在很多未知领域上,后续就是如何搭建和训练自己的卷积神经网络,在后文会给出代码。
最后,卷积神经网络的运用,不用多说,随着深度学习理论的提出和数值计算设备的改进,卷积神经网络得到了快速发展,并被大量应用于计算机视觉(图片分类,目标定位检测,图像分割)、自然语言处理等领域 ,我想,未来将在机械工程(故障诊断,无人驾驶),信号处理,核工程,医学影像等领域大放异彩。