系列文章见: 《回忆AI时代-从图灵机到人工智能》
文章目录
什么是CNN
CNN(Convolutional Neural Network,卷积神经网络)是一种专门用于处理图像数据的深度学习模型,它最大的特点是能够自动从图像中学习特征,而无需人工设计图像的特征。
譬如下图是一张猫的图片,人类几乎一眼就能判断这是一只猫但对于计算机来说,它看到的并不是猫,而是一大堆数字。因为图片实际上是由大量像素组成,每个像素都对应着 RGB(三原色)数值,计算机需要从这些数字中发现规律,最终判断图片中是否存在一只猫。
为什么是CNN
前文介绍过神经网络,为什么CNN比普通的神经网络更适合处理图像呢?譬如有一张100 × 100的灰度图片,共包含100 × 100 = 10000个像素。如果直接将这10000个像素,全部输入到普通的全连接神经网络中,那么每一个神经元都需要与所有输入相连接,当网络层数增加时,参数数量很容易达到数千万甚至更多,不仅训练速度慢、内存开销大,而且非常容易出现过拟合的现象。
CNN则采用了完全不同的思路。它认为没有必要一开始就观察整张图片,而是像人观察事物一样,先看局部,再逐渐组合成整体。
CNN会利用卷积操作,在图片上用一个较小的窗口(卷积核)不断滑动,每次只关注图片中的一小块区域,例如边缘、纹理、颜色变化等局部特征。随着网络不断加深,这些简单特征会逐渐组合成更加复杂的特征,最终识别出眼睛、耳朵、鼻子,甚至整只猫。
CNN的出现,使计算机第一次能够自动学习图像特征,摆脱了传统计算机视觉中依赖人工设计特征(Feature Engineering)的方法,极大地提升了图像识别的准确率。
CNN的发展过程
第一阶段(1962年),David Hubel(大卫·休伯尔)和Torsten Wiesel(托斯坦·威泽尔),他们研究猫的大脑视觉皮层时发现,猫的大脑并不是一次性识别整个图像,而是由许多神经元分别负责检测不同的特征,例如:
- 横线
- 竖线
- 边缘
- 方向
- 运动
这些研究后来获得了1981年的诺贝尔生理学或医学奖,也成为CNN的重要生物学启发。
第二阶段(1980年),Kunihiko Fukushima(福岛邦彦,日本科学家)他提出了Neocognitron(新认知机),首次引入了许多今天CNN的核心思想。它首次引入了许多今天 CNN 的核心思想:
- 局部感受野(Local Receptive Field)
- 分层提取特征
- 卷积思想
- 池化(类似现代 Pooling)
- 从低级特征逐步组合成高级特征
不过,它还不能用现代的反向传播算法进行高效训练,因此影响力有限。可以认为Neocognitron是CNN的祖先。
第三阶段(1989-1998年),1989年Yann LeCun(法国裔美国计算机科学家、人工智能研究员,也是现代深度学习领域最具影响力的人物之一)开始把卷积、反向传播、梯度下降结合起来训练纯CNN,并发表了LeNet-5,而LeNet能识别手写数字、邮政编码和银行支票数字,这是世界上第一个真正投入实际应用的CNN。
第四阶段(2012年),Geoffrey Hinton和他的学生们发表了AlexNet,在著名的《ImageNet Large Scale Visual Recognition Challenge 2012》全球图像识别竞赛中,AlexNet将图像分类错误率大幅降低,远远超过当时其他方法,震惊了整个AI界。这一突破成为深度学习发展的重要里程碑,也开启了计算机视觉高速发展的新时代。
| 年份 | 模型 | 错误率 |
|---|---|---|
| 2010 | 传统CV方法 | 28.2% |
| 2011 | 传统CV方法 | 25.8% |
| 2012 | AlexNet | 16.4% |
| 2013 | ZFNet | 11.7% |
| 2014 | VGG | 7.3% |
| 2014 | GoogLeNet | 6.7% |
| 2015 | ResNet | 3.6% |
| 2016 | ResNeXt等 | 3.0% |
| 2017 | SENet | 2.3% |
| Human | 人类 | 5.1% |
CNN是如何工作的
CNN识别图片共分为五步:
- 1.输入图片(Input)
- 2.特征提取(Feature Extraction)
- 3.重复提取特征
- 4.特征整合(Classification)
- 5.输出结果(Output)
1.输入图片(Input)
CNN接收一张图片作为输入。对于计算机来说图片本质上是一组数字。例如,一张100 × 100的彩色图片,会被表示为100 × 100 × 3个RGB数值。
2.特征提取
CNN首先利用卷积层(Convolution)在图片上不断滑动,提取局部特征,例如:
- 边缘
- 纹理
- 颜色变化
- 简单形状
随后,ReLU激活函数增强模型的表达能力,Pooling(池化)层则压缩数据规模,同时保留最重要的特征。这一步核心在做从图片中找出有价值的信息,过滤掉不重要的信息。
3.重复提取特征
CNN 通常不会只有一层卷积,而是由多层卷积组成。随着网络不断加深,提取到的特征也越来越复杂。
1 | 第一层:边缘、线条 |
4.特征整合(Classification)
经过多层特征提取后,CNN已经获得了图片的大量高级特征。这些特征会送入全连接层(Fully Connected Layer),综合分析各种特征之间的关系,并计算图片属于各个类别的可能性。
5.输出结果(Output)
最后,通过Softmax函数将计算结果转换为概率。例如:
1 | 猫 98% |
概率最高的类别就是CNN的最终识别结果。