LeNet
LeNet是经典的卷积神经网络,早期应用于手写数字识别。模型结构对于现在较为基础,下面是模型的内部结构图:
可以看到,模型主要是卷积、池化与全连接层组成。输入数据为一张32x32的灰度图(这里加了一点padding,原始手写数字的图片是28x28),输出为10维向量对应输入属于哪一类的概率。模型第一层为卷积层,输出结果为6x28x28的张量(可推得卷积核为6x5x5);第二层为average pooling层,对每个cahnnel做形状为2x2的pooling,这里的pooling的窗口不会重叠(与pytorch的pooling机制一样),输出通道为6,形状为14x14;第三层又是一个卷积层,此时的任务为多输入多输出,卷积核形状应该为16x6x5x5,输出通道为16,形状为10x10。第四层还是pooling层,依旧是2x2,输出channel为16,形状为5x5。最后3层都是全连接,模型把最后的pooling层输出拉成一个16x5x5维向量,乘上一个(120,16x5x5)形状的矩阵,sigmoid激活,输出120维向量;再全连接激活输出64维向量,最后全连接输出10维向量。
AlexNet
AlexNet实际上就是更深更大的LeNet,下面是模型的内部结构图:
AlexNet的输入是padding后的3x224x224的彩色图片,网络包含8个带有权重的层;前五个是卷积的(包括池化),其余三个是全连接。最后一个全连接层的输出被馈送到一个1000路的softmax,它产生一个超过1000个类标签的分布。这里需要说明的是作者用了两块GPU,上图可以看到有明显的上下两个部分,分别用不同的GPU运行,期间还有数据的交互(第三层卷积层的核与第二层的所有核映射相连接)。第二卷积层将第一卷积层(包括最大池化)的输出作为输入,使用size5×5×48的256个核对其进行过滤(计算出来stride和padding应该都是是2)。第三、第四和第五卷积层相互连接,没有任何中间的池化或标准化层。第三层卷积层有384个size3×3× 256kernel(stride为2)连接到第二层卷积层的(归一化,池化)输出。第四层卷积层包含384个size3×3×192内核,第五层卷积层包含256个size3×3×192内核。完全连接的每一层都有4096个神经元。
后面作者使用data argument、dropout提高泛化能力,具体可见下面的原论文。
AlexNet的架构虽然在如今看来比较简单,不像如今的transformer、bert等等,但它对深度学习的发展有不可磨灭的影响,它让那时人们的视角从新聚焦在深度学习,在硬件设施不断发展的今天,其中的细节确实给了人们许多启发性的想法,在卷积神经网络中的地位不言而喻。
原论文链接:AlexNet
参考资料:李沐—动手学深度学习v2
深度学习学习笔记 11-05