[DL]LeNet的网络结构分析
前言,本文从文章盗图不少,此外从顾险峰老师的文章《人工智能中的联结主义和符号主义》中盗了一些图,类似文章有很多,本文只是帮助自己去梳理网络结构的记录,在梳理的过程中感受这个结构,才是本文的目的,同时总结部分是自己的认识。
LeNet-5的连接方式包括:卷积层,下采样层和全连接层。卷积层做的事情如下所示:
比如对于第一个卷积层,输入是边缘填充过的图片(填充方法有多种),输出是feature maps,每一个feature map对应上图中的下一层节点矩阵,连接的参数矩阵是卷积核,每个feature map使用相同的卷积核,称为共享参数(注意每个卷积核对应一个bias)。将卷积结果加上bias送入激活函数,结果作为feature map的一个值。
下采样层的输入是feature maps,输出是下采样后的maps。具体的采样方式是用一个2x2的下抽样核,每次下抽样核移动两个像素,对应输入域(核)内元素求和后取平均,乘上一个系数后加上一个bias送入激活函数。
从上述过程来看,卷积层和下采样层在操作层面是类似的。不同的地方在于卷积核的每个参数通常不同(取决于训练结果),下采样层的参数都相同(或者说只有一个参数)。
C3和S2的连接方式很特别,C3的每个feature map和S2的多个map连接,具体连接方式如下:
其中C3中的map0的连接方式如下:
注意,上述卷积和的大小还是5x5,通常不对称的组合连接的方式有利于提取多种组合特征,在数据挖掘比赛中,特征工程中的一个重要部分也是对组合特征的使用。
S4层的图的大小是5x5,和卷积核大小相同,卷积后形成的图的大小为1x1,也就是C5层的图,LeNet-5形成120个卷积结果,连接方式如下:
LeNet-5的完整结构训练参数有60840,连接数340908。完整数字识别效果图如下:
高层特征是低层特征的组合,从低层到高层的特征表达越来越抽象和概念化,也即越来越能表现语义和意图。
下图是顾险峰老师在文章《人工智能中的联结主义和符号主义》中提到的深度神经网络在人脸识别任务中不同层学习到的人脸,依次是从低层到中层到高层。
在李飞飞老师的CS231n课程中,绪论讲述了人类视觉系统的研究,人类视觉系统在识别时,首先识别到边缘,然后到形状。从数字识别的效果图中可以看出,在特征表达层面越来越抽象,同时距离语义也越来越近。
总结:
本文较为详细的梳理了一个网络结构LeNet-5,相关著名的网络结构很多,在啊哈,CNN!文章中提到的文献有详细描述。在CS231n中,讲师们说做网络模型,就像搭积木。然而,每个人都可以做自己的结构,但是在benchmark上能够work的模型却非常有限。这句话包含几个意思,第一,目前相当大一部分结构是在MNIST,CIFAR10,CIFAR100等数据集上进行评测,但是放到真实世界,泛化能力怎样需要进行评估?第二,即使在benchmark上,也只有很少的一部分模型能够work,例如通过ImageNet等这种比赛产生的网络结构。之前看过一些深度学习中的优化算法的文章,其实与深度关系不太大了,文章的证明是很少甚至没有,但是直觉上的表述有很多,实验结果证明在精度和速度上的提升,这已经够了。因此,个人很不认同深度学习是黑盒这样的观点,这个是实验方法,同样也是科学,效果足够好就可以,个人认为追求解释性一部分是为了提高可控性,可是如果足够稳定,适当的弱解释性也是可以接受的。见过有些同学,直接深度学习,目前来看,这是可行的。但是从长远来看,读书的时候多花点时间在数学上应该不会错。上述观点仅仅是基于CNN的一些内容作出的一个不严格的感性的判断,不管怎样,萝卜白菜,各取所爱,不应对实验科学,对深度学习保留偏见(希望这段不被老板看到)。
参考:
问题的本质是sigmoid激活函数,导致的原因是误差反向传播过程中的连乘。Bengio在文章《Understanding the difficulty of training deep feedforward neural networks》中研究了不同的激活函数在深度训练过程中的表现。
2.《Gradient-Based Learning Applied to Document Recognition》
描述LeNet-5的原始文章,其中对该网络结构的描述比一般看到的文章要详细的多。