卷积神经网络 Batch Normalization作用与原理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuxiangxxl/article/details/85248470

弄清楚CNN,需要解决两个问题,一是卷积层(Convolution层),二是池化层(Pooling 层)

卷积层

为什么要卷积

有没有思考过一个问题,为什么CNN大多使用在图像场景,而RNN大多使用在文本的场景中?有了全连接层,为什么还要CNN?现在来揭晓答案吧.图像数据通常是长,高,通道方向上的3维形状.含有空间信息特征.比如说,相邻的空间,像素应该是相近的. 而卷积的特征是可以保持形状不变.也就是说,如果输入一个3维形式的数据,那么输出一个同样3维的数据到下层,所以卷积这个操作更加有可能提取出隐藏的本质模式.与卷积相反,以全连接层为输入,忽视形状,将3维的输入拉直为一维向量,例如将MNIST输入图像,(1,28,28)的形状,拉直成784的向量, 所以无法利用与形状相关的信息.

卷积如何运算

一句话来说明卷积运算就是按照通道,把输入数据和滤波器卷积运算,结果相加,得到输出.

cnn.jpg

输入的3维数据和滤波器都可以表示成一个多维数组,用(channel ,height,width )来表示.上图可以得到,经过计算后可以看到输出是一张特征图.如果需要通道上也有多个卷积计算输出,那么需要多个滤波器.

cnn-2.jpg

这个时候的多维数组,用(output_channel ,input_channel , height,width )来表示.比如通道数3,10个大小2*2的滤波器,就可以写成(10,3,2,2).

池化层

如果说卷积层的作用是提取特征,那么池化层又是一个什么存在?池化层直观的作用就是减少网络的参数,然后进一步提取局部特征. 池化层的专业解释是池化是缩小高,长方向上的空间运算

pool.jpg


看图说话,对于原始

4*4

特征图,用一个

2*2

做maxpooling.最后特征图就缩小到一个

2*2

大小的特征图了.对于一个庞大的网络来说,通过这样的方法,能大大减少网络的参数和复杂度.

因为池化层不存在参数学习,只对特征图做局部的运算,所以就算输入数据发生微小的偏差,池化都会返回相同的结果,严谨的语言表述就算池化对微小位置变化具有鲁棒性.为什么这么说,我们在一个步幅内(比如2*2),不管是avg, max, min及其组合,都是取一个最值,那么在这个步幅内,就算输入的值有微小差别,池化也会返回相同的值.认真看上图,左右两边4*4特征图,可以发现是不同的,但是经过相同的(2*2) maxpooling之后,最后得到的特征是相同的.

结束语

CNN的代表网络LeNet ,AlexNet ,虽然很复杂,但是拆看看,除了用了一些trick, 就是卷积和池化的组合使用,读者可以看看论文,看他们的是怎么组合使用的.

机器学习领域有个重要假设:IID独立同分布假设

假设训练数据和测试数据是满足相同分布

独立同分布假设是通过训练集得到的模型在测试集能有好效果的基本保障。

Batch Normalization作用 :

在深度神经网络训练过程,使得每一层神经网络的输入保持相同分布。

神经网络随着深度加深,训练变得困难。

relu激活函数, 残差网络都是解决梯度消失等由于深度带来的问题。

BN同样也是为了解决深度带来的问题。

Batch Normalization基本思想 :

神经网络在训练过程中,随着深度加深,输入值分布会发生偏移,向取值区间上下两端靠近,如Sigmoid函数,就会导致反向传播时低层神经网络的梯度消失,这是深层网络收敛越来越慢的重要原因。

Batch Normalization通过一定的规范化手段,把每层神经网络输入值的分布强行拉回到均值为0方差为1的标准正态分布。(纠偏回正过程)

使得分布回到非线性函数对输入比较敏感的区域,使得损失函数能发生较大的变化(梯度变大),避免梯度消失问题。

同时梯度变大能加快模型收敛速度,提高训练速度。

猜你喜欢

转载自blog.csdn.net/liuxiangxxl/article/details/85248470