一,深度学习三部曲
1,搭建神经网络结构。(提取特征)
我们现在来讨论传统神经网络和卷积神经网络。传统神经网络是全连接的,参数过多,会出现过拟合的问题,而卷积神经网络是局部关联的,例一个训练集中的一张图在一个神经元处的卷积核的参数是共享,从而减少了参数的数量,改善了传统神经网络所出现的过拟合的问题。
他们俩个的相同之处是卷积神经网络也是层级结构,用到卷积层、RELU激活层、Pooling池化层等等,而传统神经网络的中间层都是全连接的。
2,找到合适的损失函数。(例如交叉熵损失、均方误差)
3,找到一个合适的优化函数,更新参数。(例如BP、SGD)
二,卷积
一维卷积常用在信号处理中,用于计算信号的延迟累计,在图像处理中,我们所用到的基本都是二维卷积,接下来我们来深入学习一下二维卷积。
什么是卷积?卷积是对两个实变函数的一种数学操作,从定义的角度不易理解,接下来我们给出几个例子来解析一下什么是卷积。
例如,我们输入一张图(input),我们在计算机中使用一个二维的矩阵来存储这张图像。
假设我们存储了这么一张7*7的图(input),然后我们的卷积核(filter)是3*3的:
我们将蓝色部分与卷积核(卷积核的值在一开始有个初始化)进行相乘,然后向右移动步长(stride)个单位(向右移动到尽头后,再从一开始的位置向下移动步长个单位再向右移动),这里假设我们的步长为1,那我们最终会得到一个5*5的特征图(feature map)。
我们上述简单的讲解了一下二维卷积的计算,当选取的卷积核和步长的大小与输入的大小不匹配时,我们也会进行padding操作(零填充),更详细的读者可自行了解,这里不再赘述。
最终,我们给出输出的特征图大小的计算公式(N为input的大小、F为卷积核的大小、stride为步长):
无padding时:(N-F)/stride+1
有padding时:(N+padding*2-F)/stride+1
三,池化
Pooling池化过程其实就是一个缩放的过程,保留了主要特征的同时,减少了参数和计算量。
Max Pooling:假设池化的filter为2*2的,步长为2。
我们选取蓝色区域中,最大的作为池化后的值,然后和卷积核的计算相同,进行移动,最终得到一个2*2的矩阵。
Average Pooling:与上述步骤基本相同,只是求取平均值作为池化后的值。
四,典型结构
AlexNet、ZFnet、VGG16、VGG19、GoogleNet,ResNet都是以往经典的卷积神经网络的模型,深入学习神经网络,还是有必要去了解一下他们的核心思想的,这里就不再详细说明了。