转载自:/niuwei2/article/details/47399913
《CNN基础知识点》From:Convolutional Neural Networks (LeNet)
原文链接可以查看更多信息:/niuwei2/article/details/47399913
神经认知机。
卷积神经网络是受生物灵感的多层感知机的变体。从Hubel和Wiesel的早期对猫的视觉皮层的研究工作中得出,视觉皮层包含一组复杂的细胞排列。这些细胞会对很小的子区域敏感,称作Receptive Field(感受野细胞)。根据这个概念提出了神经认知机。它的主要作用就是Recept部分图像信息(或特征),然后通过分层局部相连,将各个局部特征组合成整个图像特征。 需要仔细阅读的论文包括:
(1)第一篇关于感受野功能的论文Receptive fields and functional architecture of monkey striate cortex,1968
(2)the NeoCognitronA self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position,1980
(3)HMAXRobust object recog-nition with cortex-like mechanisms,
(4)非常重要的LeNet-5Gradient-based learning applied to document recognition,1998
稀疏连接。
CNN层与层之间的连接并不全是全连接,而是局部连接,它的作用就是大幅度减少参数。
图1 层间连接示意图权值共享。
在CNNs中,每一种过滤器都可以通过重复堆叠而覆盖整个视野。这种堆叠就是复制自己,因此它们的单元共享同一个权值和偏置值,从而形成一张特征图。
图2中m层是由3个隐层单元构成的一张特征图。相同颜色的权值是共享的。梯度下降法仍然可以用来训练它们所共享的参数,不过需要在原算法基础上进行小的改动。共享权值的梯度就是简单的对每个共享参数的梯度求和得到。
图2 权值共享图详细计算说明。
为了更丰富的表示数据特征,每个隐藏层会包含多个特征图。
定义hk代表某层的第k个特征图。
公式hkij=tanh((Wk∗x)ij+bk)用来计算hk;其中∗是卷积操作。
以上公式是如何计算特征图的呢?是通过针对整个图像中不同的子区域数据,重复的调用同一个函数,最终覆盖整幅图像时,就得到了一张特征图。换句话说,就是用带有偏置项(bk)的线性滤波器(Wk)与输入图像(x)进行卷积运算(∗),再将结果通过一个非线性函数(tanh)所得到的结果(hk)。
图3 举例,一层中含4个特征图
图3中的CNN含有2层,m−1层包含4个特征图,m层包含2个特征图,记为h0和h1,h0和h1是由不同的卷积核在前一层所有map上作卷积并将对应元素累加后加一个偏置,再求sigmod得到的(假设m与m-1层全连接,则m层共有4*2=8个卷积核)。其中,h0和h1的权值W0和W1是一个3维张量,第一维表示前一层特征图的下标,后两维表示该特征图的坐标。综合起来,Wklij表示m层第k个特征图的每一个像素点的权重与m−1层第l个特征图的(i,j)像素点的权重相连接。
卷积运算。
用的是著名的Python库Theano. ConvOp。具体如何使用及运行效果,见我的另外一篇博客Python之Theano.ConvOp,讲的很详细。
最大池化。
CNN中另外一个很重的概念就是最大池化。它是一种非线性的下采样(个人理解其作用类似于降维)方法。最大池化把输入图像划分不相重叠的图像矩阵块,每一个子区域输出其最大值。最大池化方法在视觉处理问题中非常有效的两个原因是:
(1) 通过减少非最大值来降低对上层的计算复杂度。
(2) 池化结果支持平移不变性。在卷积层中,每个像素点有8个方向可以平移。当最大池化窗口为2∗2区域时,其中有3个方向会产生相同结果;当最大池化窗口为3∗3区域时,则会有5个方向会产生相同的结果。
在Theano中的应用举例就不介绍了。
至此,CNN的基本知识点基本介绍完毕。下一节学习一个完整的CNN模型–LeNet
参考资料
(1)/tutorial/lenet.html
(2)Deep Learning(深度学习)学习笔记整理系列之(七)
(3)Deep learning with Theano 官方中文教程(翻译)(四)—— 卷积神经网络(CNN)