在学习CNN之前,必须对BP神经网络有所了解这样才能更好的理解其架构和框架。这里有一篇博客写的比较通俗易懂,分享给大家。
http://blog.csdn.net/nicajonh/article/details/53142449?locationNum=14&fps=1
BP神经网络和CNN神经网络都是有着非常清晰的架构,可以进行一下对比学习:
1.BP神经网络简单结构示意图
其中隐藏层的激活函数是sigmoid函数,可以很容易的将一个实数压缩到0与1之间。其数学表达式为
2 CNN神经网络简单结构示意图:
在数据输入过程中,必须对数据进行预处理,通常使用的方法是0-1归一化,这也就是示意图中input数据的来源。
(1)将预处理的数据用卷积计算,加上偏置,得到相应的局部特征,其卷积核的尺寸以及个数会对模型效果有一定的影响。
(2)将前面的卷积输出结果进行非线性激活函数处理,目前最常用的是ReLu函数
(3)对激活函数的结果进行池化操作,所谓的池化层其实是取区域的平均或者最大值,保留最显著的特征,并提升模型的畸变容忍能力
(4)最后一层为全连接层进行输出。
这就是最简单的卷积神经网络的模型,面对不同的实际问题,所对其进行的优化,其实就是改变模型的参数与不同层数结构的调整。通常来说,卷积层一般需要和一个池化层连接,前面的卷积层主要做特征提取的工作,直到最后的全连接层才开始对特征进行组合匹配。
在CNN模型中,为了增强模型的泛化性,会有许多额外的处理方法,例如增加dropout层,随机丢弃一部分节点的数据减轻过拟合;对权重进行L2正则化(注:L1正则化会制造稀疏特征,大部分无用特征的权重会置为0,而L2正则化让权重不过大,使得权重比较平均);在每个卷积-最大池化层后面使用LRN层等方案。
3. 卷积层的运算:
(1)对原始数据进行padding边界处理,让卷积的输入和输出保持同样的尺寸
(2)设置卷积核,尺寸为3*3
(3)第一步的计算结果,依次遍历整个数据
4 池化层计算:
每个局部区间的最大值