李宏毅笔记第三讲:CNN

199 阅读4分钟

3. CNN(用于影像分类)

实操见刘二大人第9-11讲-从全连接到CNN-有代码9. 多分类问题 本节介绍如何用softmax解决多分类问题,以及具体解决 - 掘金

CNN用于image分类

注意:所有图片的大小都必须一样

一张输入的图片实际上是RGB三个通道的tensor

image.png

3.1 第一个版本故事-neural简化

3.1.1 简化1:提取特征不需要观察整张图

image.png

图片分类不需要看整个图片,而是一部分即可,我们设定区域,每个neural只需要关注自己的一个小范围即可

image.png

注意:neural之间的范围可以重叠,甚至可以一样(同一个范围可以多个neural)

常见问题:

可不可以不同的neural使用不同的size?可以

能不能只考虑某些channel?可以

可不可以是长方形的?可以

最经典的设置是:

  • 侦测所有channel
  • 一般都3*3正方形,高和宽都叫kernel size
  • stride一般1或者2,希望有重叠

3.1.2 简化2:相同特征在不同图片所在区域不同

image.png

每个receptive field 都需要一个鸟嘴的检测器吗?不,可以让不同的neural之间共享参数

最经典的设置是:每一个区域都有多个neural检测,但是各个区域的neural的参数都共用一组这一组参数叫filter

image.png

3.1.2.3 总结

image.png

Fully Connected Layer通过这两次简化,就有了Convolutional Layer。用Convolutional Layer的Neural Network就是CNN。

3.2 第二个版本故事-filter

image.png

一个Convolution中就是有很多的filter,每个filter就是用来检测图片中的特征的

3.2.1 filter的运算

将filter与区域做数乘(对应相乘)后相加,在按照stride移动运算。依次类推运算

image.png

这个运算中filter怎么检测特征?

image.png

如图举例:对角线三个1,其他都-1,此时区域中对角线三个1,其他都0时,计算结果最大,其他情况慢慢变小

说明左上角和左下角有出现特征,这样将所有channel扫描完成,就可以得到另外一群数字,叫Feature Map

image.png

3.2.2 多重Convolutional Layer

这串新的数字可以看作一张新的图片,就可以使用多重Convolutional Layer

image.png

上图举例第一层使用64个filter,这样输出就是64的通道的图片,在第二层中输入就是64通道的图片

3.2.3 问题:3*3的filter会不会不够用?

不会,因为在下一层的一个3*3就可以对应到上一层图片的5*5

image-20250612212714000.png

只要够深,可以检测到一个很大的区域

3.3 两个故事比较

image.png

左边每一条权重就对应右边每一个数字,只是右边忽略了bias

为什么叫convolution?convolution就是指把一个filter扫过一个区域的过程

neural版本故事filter版本故事
每个神经元只盯着一小块区域(receptive field)看有一组filter,专门找图像里的小特征
不同receptive field的neural用的是同一套参数每个filter都会在图像上一点点“扫过去”(卷积操作)

其实说的是一回事!

3.4 下采样(池化)

对一个比较大的图像做下采样不会改变对象

Pooling没有参数,不需要学习

image.png

3.4.1 Max Pooling

在一组之中选择最大的

image.png

池化后为

image.png

问题:

一定要最大值吗?不一定,还有Mean Pooling等等

一定2*2吗?不是,只是这里设置一组为2*2

3.4.2 卷积+池化

image-20250612214534085.png

3.4.3 问题

池化是压缩数据,一定会有损失,当特征比较精密时或者算力足够时,可以考虑不做池化,采用Full Convolution

不是所有的CNN都要用Pooling

3.5 应用举例:Alpha Go

3.5.1 怎么用CNN

查看论文附件发现Alpha Go 没有用Pooling

image-20250612215854039.png

是将一个棋盘看作是一张48个channel的19*19图片

image-20250612215319104.png

3.5.2 为什么可以用CNN

因为满足两个neural简化

image-20250612215530857.png

3.6 完整的CNN

image-20250612214811077.png

做完卷积+池化后,拉平交给全连接层,通过SoftMax实现多分类

3.7 CNN的问题

image.png

CNN不能处理影像放大缩小和旋转,比如上两张图放缩后内部数字差别很大,CNN就认不出来了。这时就需要data augmentation