一、深度学习的必要性
在上一篇文章当中,详细介绍了全连接网络(MLP)和BP神经网络及其优化器的基本原理。但是MLP由于连接的权重过多,算得太慢,且难收敛,同时可能陷入局部最小值,也容易产生过拟合问题。为了解决这些问题,我们可以减少权值的连接,每一个节点只连接到上一层的少数神经元,即局部神经网络。如下图所示。
具体如何解决呢?
让我们回想人类解决问题的思路:信息分层处理。也就是说,我们可以在某些层提取特征的基础上,对信息进行再处理,得到更高级别的特征。因此,人们提出卷积神经网络。
二、卷积神经网络
1 卷积神经网络的作用与发展
我们在前面说到,卷积神经网络是为了更好地提取事物的特征。因此,很容易想到,将卷积神经网络应用于图像分类、识别、目标监测等任务当中,如下图所示:
由于算力的迭代与发展,越来越多的卷积神经网络被提出
2 卷积的基本操作
卷积的操作非常简单,通常由一个或多个卷积核对数据进行处理
由于维数的要求,在某些时候会对数据进行填充(在矩阵的边界填充一些值,通常为0),即padding操作
在卷积过程当中,我们还可以设置卷积核的步长,即调整stride,此外,在特征过多的时候,我们可以采用局部统计特征的方法,求范围内的均值或者最大值,即平均池化和最大池化。
在卷积过程当中,我们还应该设置通道数(channels),以图像为例,输入的通道一般为3个,即RGB。
3 LeNet-5的网络结构及其代码实现
我们以LeNet-5网络为例,首先介绍一下它的结构。
从图里面可以知道,输入的长和宽是32×32,C1层又6个特征图组成,即6个通道,每个卷积核对输入进行卷积,卷积之后的长和宽发生变化,变成28×28,S2层是池化层,减少图的尺寸,提取重要的特征;之后在经过一次卷积和池化,再经过两个全连接层之后,再将输出映射到1×10的矩阵。
与现在的网络相比,LeNet-5十分简单,它在卷积时不进行填充(padding),池化层选用平均池化而非最大池化,非线性激活函数采用Sigmoid或tanh而非ReLU函数,且层数较浅,参数量较小(约为6万)
利用代码实现如下:
最后用一个手写字符识别的小项目测试LeNet-5的性能:https://adamharley.com/nn_vis/cnn/3d.html