1、什么是卷积神经网络
卷积网络也叫作卷积神经网络,是一种专门用来处理具有类似网格结构的数据的神经网络,例如时间序列数据(可以认为是在时间轴上有规律地采样形成的一维网格)和图像数据(可以看做二维的像素网格)。
————本段引用自花书《深度学习》
卷积神经网络中的卷积操作和信号处理中的卷积操作不同,至于卷积神经网络中的卷积操作为什么要那么定义,这不是关注的重点。对于神经网络来说,目标是能够学习到一个卷积核k(m, n)使得损失函数最小,至于k是否恰好是某种卷积的定义这并不重要。
————本段部分引用自《Tensorflow深度学习 深入理解人工智能算法设计》
2、一维卷积神经网络
当前在深度学习领域出现了很多优秀的深度学习开源框架,例如tensorflow、keras、pytorch和百度飞浆(paddlepaddle)等等。其中,tensorflow是应用较为广泛的开源框架,keras主要是对tensorflow和其他的一些开源框架的封装,使得接口更加友好,便于快速搭建深度学习模型(tensorflow2.0以上也内置了keras)。百度飞浆是百度公司开发的深度学习框架,近年来在国内取得了很好的成绩,值得一提的是它的文档有中英文两种。此外,MATLAB内置的深度网络设计器也可以方便的搭建深度学习模型。
不同的框架对于算法的实现过程不同,例如keras中要求的时间序列数据的0轴(纵轴)为时间步,1轴(横轴)为数据点,而MATLAB中0轴(纵轴)为数据点,1轴(横轴)为时间步。这可能是考虑到其他算法的兼容问题等等因素造成的,不过它们所实现的算法的基本原理是一致的。
下面将介绍MATLAB和keras对于1D卷积神经网络的前向计算过程。
1、数据集
我们采用一个加速度传感器的三轴加速度和合加速度作为卷积神经网络的数据,传感器的采样频率为50Hz,对其进行2.56秒的采样可以得到128个采样点,故数据形式为4 * 128(MATLAB)或者128 * 4(keras)。
2、基于MATLAB实现
1、数据形式
训练集的数据如下所示:
训练集包含2256个样本,每个样本的数据为4 * 128, 4代表每个时间步的四个数据点,128代表128个时间步。
请注意:时间步并不严格代表具体的时间,有时候可以认为是顺序,尤其是在自然语言处理中。
2、一维卷积的原理
一维卷积神经网络和二维卷积神经网络的不同在于卷积核的移动维度不同,而不是卷积核的维度。一维卷积神经网络的卷积核只会沿着时间步顺序进行卷积,故称为一维卷积神经网络,而二维卷积神经网络的卷积核会沿着图像的横轴和纵轴进行卷积,故称为二维卷积。
绿色代表卷积核和数据进行卷积操作。
1、第一层卷积
我们设置卷积核的大小为9,那么卷积核的尺寸为4 * 9,通道数为32,所得的权重矩阵和偏置矩阵如下所示:
经过第一层卷积之后所得到的数据为
请注意,按照MATLAB中的卷积核权重进行前向计算时会发现待卷积数据和卷积核的维度不一致,也就是说待卷积数据为4 * 9,而卷积核权重为9 * 4,需要对权重进行转置,然后进行点乘(哈达玛积)再求所有元素的和再加上偏置。
2、后面的卷积
当经过第一层卷积之后,数据变为上一层的通道数 * 时间步长(这里的时间步长要考虑卷积层是否填充,是否经过池化),所得数据如下所示。
第二层的卷积的尺寸设置为9,实际尺寸为32 * 9,通道数设置为64,所得权重矩阵和偏置矩阵如下所示:
第二层卷积结果如下所示:
为了便于理解,下面做了一个简图
3、基于keras的实现
keras的一维卷积和MATLAB的一维卷积没有本质上的不同,其主要表现在卷积核的维度上。
原始数据的格式为时间步长 * 数据点数(128, 4),keras的权重矩阵和偏置矩阵为:
第一层卷积:
第二层卷积:
与基于MATLAB的一维卷积神经网络相比,主要区别在于权重矩阵的存储上,其他并无区别。