CS231n课程笔记7:卷积神经网络入门

本文从生物学角度出发,介绍了卷积神经网络(CNN)的基本概念、历史沿革及核心结构,包括卷积层、激活层、池化层、全连接层等。并通过对比全连接网络,阐述了CNN的独特优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CS231n简介

详见 CS231n课程笔记1:Introduction
注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。

课程笔记

因为卷积神经网络这个部分涉及繁多,也有不少无法用语言详细解释的细节,所以迟迟没有动笔。这次刚好帮老师做了这部分的PPT,就直接把PPT的部分转化过来,也保留了PPT的逻辑,只能说简单介绍了卷积神经网络,详细的部分会在以后的课程笔记中陆续的补充。
以下内容包括CNN的生物学基础、CNN的历史、CNN的结构元件(卷积层、激活层、池化层、全连接层、损失函数)、CNN的结构、CNN优于全连接前向网络的原因。

1. CNN的生物学基础

Hubel&Wisel在1960年左右做的一系列关于猫的视觉神经元的研究,有以下三个主要成果:
猫的大脑中第一层的视觉神经元(V1),只处理局部视觉中的简单基础结构信息(如某一方向的直线、点),且一类神经元只对一种特定的基础结构做出反应。(对应于CNN中的感受野和权值共享)
V1
而且V1神经元是会保留拓扑结构信息的,即相邻的神经元的感受野在图像中也相邻。(对应于中的滑动窗口)
topo
视觉神经元是有层次的,高层神经元处理更加复杂的特征(对应于CNN的层次化结构和降采样)。
hierarchy

2. CNN的历史

CNN的核心观点早在1980就被提出了,这么多年也经历了几次的起起伏伏。
最早提出并使用CNN的核心思想的是Fukushima在1980提出的Neurocognitron。这里面首次提出并使用了“三明治” 结构、局部感受野、池化层等思想。
Fukushima1
Fukushima2
而CNN在工业界的著名应用则是Lecun在1998年提出的LeNet-5,这个网络可以很好地识别手写数字,甚至可以识别手写字母。
LeNet-5
之后的一段时间整个深度学习都进入低谷,因为其难以训练收敛,当时的计算能力和数据量都不足。到了2012年,AlexNet在ImageNet数据集上打败了当时所有的传统图像处理方法,并且一下子将准确率提高了很多,从而又大放异彩。AlexNet和LeNet并没有太多技术上的差别,更多的是因为计算能力有了很大的提高,可以使用GPU加速,而且数据量也提高了几个数量级。
AlexNet

3. CNN的结构元件

卷积神经网络的经典结构是层次化的,每层都是以下结构元件的一种。最近的GoogLeNet和ResNet打破了层次化的经典结构,但是也是几种结构元件的复杂组合。
结构元件包括:卷积层、池化层、激活层、全连接层、损失函数,如下图:
CNN

3.1. 卷积层

卷积层的python简单实现代码请参考CS231n作业笔记2.6:卷积层以及池化层的实现
卷积层的输出由输入和滤波器组唯一确定,即 O=convolution(I,filters) ;其中输入和每个滤波器都唯一确定输出的一个通道(特征图, feature map),即 O={convolution(I,filter),for filter in filters}
conv
输入 I 的形状是HWC1,其中 H,W 分别是输入的高度和宽度, C1 是输入的通道数(深度)。
滤波器组 filters C2 个滤波器 filter 的集合。
滤波器的形状是 FF{C} ,附有参数 bias,P,S ,其中 F 是局部感受野的边长, bias是偏移量 (通常为1), P 是填充宽度,S是步长, {C} 是输入通道的组合,通常 {C}={1,2,,C1}
输出由输入和滤波器组唯一确定,其形状是 HWC2 ,其中 H=(HF+2P)/S+1 W=(WF+2P)/S+1 C2=C2
卷积操作的部分可以把滤波器想象成窗口(形状是 FF{C} ),一次卷积操作是窗口内部的输入与滤波器的卷积(乘积的和)加上 bias ,窗口按照给定的步长 S 在输入上滑动,每次都进行一次卷积操作,即可得到输出的一个通道(特征图)。
卷积层共有ΣC2i=0(FiFi|{C}i|+biasi)个参数,分别对应于 C2 个滤波器中,每个滤波器窗口内的每个输入节点的权重和最后加上的bias。
下图给出了 H=W=5,C1=1,C2=1,F=3,{C}=1,bias=0,S=1,P=0 情况下的例子。
example1
下面又给出了 H=5 , W=5 , C1=3 , C2=2 , F=3 , S=2 , P=1 的例子:
example2

3.2. 激活层

就是普通常见的激活函数作用于每个神经节点,即 O=f(I) ,其中输出 O 由激活函数f和输入 I 唯一确定,且O.shape=I.shape f 通常是非线性函数,常见的是ReLU函数(既有非线性,又可以避免梯度消失)。

3.3. 池化层

池化层的python简单实现代码请参考CS231n作业笔记2.6:卷积层以及池化层的实现
池化层和卷积层很类似,只不过每次窗口内部的操作不再是乘积的和,而变成了取最大值(最大池化层)、取均值(均值池化层)等操作。池化层只有超参数,没有参数,往往用于降采样。
其具有的超参数有FF+S,其中F是窗口长度,S是移动步长。常见的CNN都是使用最大化池化层,即输出窗口中的最大值。均值池化层(输出窗口内的均值) ,最近常用于替代全连接层。下图是F=2,S=2最大化池化的例子:
max pooling

3.4. 全连接层

常见的前向传播网络,每个神经网络节点与前一层的所有节点连接。全连接层可以看做 F=H=W , P=0 的卷积层。大型网络中常用均值池化层替代全连接层,从而减少参数个数,防止过拟合。

3.5. 损失函数

常见的有交叉熵,hinge, 平均平方误差等。

4. CNN的结构

4.1. CNN的典型结构

常见的CNN结构范式是:
[(CONVRELU)NPOOL?]M(FCRELU)K,SOFTMAX ,简单的说就是:
1. 每层卷积层之后都接激活层
2. 若干层卷积层之后接池化层
3. 最后使用全连接层+损失函数
LeNet, AlexNet, VGGNet都符合这一范式。
LeNet

4.2. GoogLeNet

用Inception模块融合了卷积层和池化层,使得输出同时具有多个尺度的信息,也使用了BottleNeck的trick。
Inception
GoogLeNet

4.3. ResNet(151层)

其加入短路使得梯度可以有效传播,从而加深网络结构。Bottleneck使得卷积层用更少的参数得到相同感受野上的更多的非线性能力。
BottleNeck
ResNet

5. CNN VS 全连接前向网络

除却最近对于CNN的多种发展,CNN相对于全连接前向网络的三个主要特色如下:
1. 局部感受野
它保留了图像的拓扑结构,并且可以提取图像的基础特征。
2. 权值共享
2.1. 权值共享有效的减少了可训练参数,防止过拟合。
2.2. 因为滤波器被用于图像的所有位置,使得滤波器更能学习到适用于图像的所有位置的基础特征,得到平移、扭曲不变性。
3. 降采样
降采样有效的减少了具体位置信息,得到具有代表性的层次化特征,减少具体位置对于最终结果的影响,从而得到平移、扭曲不变性。
以上部分主要参考Lecun1998年的论文,详情请参考LeNet论文阅读:CNN设计原理, LeNet论文阅读:LeNet结构以及参数个数计算

6. 参考资料

  1. Hubel, David H., and Torsten N. Wiesel. “Receptive fields, binocular interaction and functional architecture in the cat’s visual cortex.” The Journal of physiology 160.1 (1962): 106-154.
  2. Hubel, David H., and Torsten N. Wiesel. “Receptive fields of single neurones in the cat’s striate cortex.” The Journal of physiology 148.3 (1959): 574-591.
  3. Fukushima, Kunihiko, and Sei Miyake. “Neocognitron: A self-organizing neural network model for a mechanism of visual pattern recognition.” Competition and cooperation in neural nets. Springer Berlin Heidelberg, 1982. 267-285.
  4. LeCun, Yann, et al. “Gradient-based learning applied to document recognition.” Proceedings of the IEEE 86.11 (1998): 2278-2324.
  5. Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. “Imagenet classification with deep convolutional neural networks.” Advances in neural information processing systems. 2012.
  6. UNDERSTANDING CONVOLUTIONAL NEURAL NETWORKS FOR NLP
  7. CS231n: Convolutional Neural Networks for Visual Recognition
  8. Szegedy, Christian, et al. “Going deeper with convolutions.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2015.
  9. He, Kaiming, et al. “Deep residual learning for image recognition.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.
  10. CS231n作业笔记2.6:卷积层以及池化层的实现
  11. LeNet论文阅读:CNN设计原理
  12. LeNet论文阅读:LeNet结构以及参数个数计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值