李宏毅《机器学习》Task06 - 卷积神经网络(CNN)

卷积神经网络(Convolution Neural Network)是一种神经网络的架构设计,专门用于影像处理上。

一、卷积层

现在用不同方式来介绍卷积神经网络。

角度一:神经元版本

给出一个图像,我们如何用神经网络将其分类呢?现在我们来观察图片的特点。

1. 观察一

对于不同大小的图片,先将其处理为大小相同,再进行后续步骤

例如:

  • 输入:一批100*100固定大小的图片
  • 输出:动物类别,表示为一个列向量,每个纬度表示一个动物的种类,且非零即一(0代表“不是该类别”,1代表“是该类别”),记作 y ^ \hat y y^

图像分类
其实我们在判断一个事物种类的时候,往往就是抓最重要的特征!因此我们要神经元做的事情就是 有没有某种特征出现,并不需要让它们去看完整的图像。

特征查看

简化一:设计神经网络

在这里插入图片描述

  • 让每个神经元关注一部分区域,这个区域就是神经网络 感受野(receptive field)1
  • 现假设 特征图填充宽度(padding)2 为3×3×3,将其变为一个27维的列向量作为神经元的输入
  • 感受野的决定在于我们自己,并且感受野是可以重叠的,多个神经元可以有同一个感受野。
    • 假设有两个完全没有重叠,有的特征就正好出现在两个感受野的交界上面,就会没有神经元去侦测它,导致错过这个特征。因此希望两个感受野之间有高度的重叠
Q&A
  • Q:感受野的尺寸是否随不同的神经元大小而改变?
    A:因为有些特征需要一些适当的尺寸才能被侦测出来,因此需要变换大小。
  • Q:感受野是否能只考虑某些通道?
    A:可以,但是一般CNN里面不考虑此法。
  • Q:感受野可以是任意矩形吗?
    A:可以,这是自己设计。
  • Q:卷积步长 (stride) 的设计中,必须让每个感受野相邻或重叠吗?
    A:最好是相邻,因为要完全遍历找出特征。但是解决一些特殊问题可以不相邻。

2. 观察二

  • 同样的图案可能出现在图片的不同区域里

不同区域
但是这些侦测鸟嘴的神经元的功能都是一样的,只是扫描的范围不一样。为了简化程序,不需要在每一个地方都安排一个相同功能的神经元,这就需要做 参数共享(parameter sharing)

简化2:参数共享

参数共享

  • 不同的神经元共享相同的参数

3. 简化方法总结

总结

  • 全连接层,一个神经元检测所有范围或某个范围,网络弹性最大,但是我们不需要看整张图片,看一小部分就能侦测到重要的特征
  • 加入感受野,强制神经元检测某个小范围,网络弹性变小
  • 加入参数共享,进一步限制了网络的弹性。

感受野 + 参数共享 → 卷积层(Convolutional Layer),使用卷积层的神经网络,就称为CNN.

CNN的模型偏差比较大,不容易过拟合,专为影像设计

角度二:卷积核版本

查看 卷积核filter和kernal的区别

卷积层里面有很多卷积核(filter),假设它们的大小是3×3×通道(彩色为3,黑白为1)
卷积层
下面是卷积层的计算:
计算

  • 用卷积核与图像进行矩阵乘积运算,这样做可以在我们想要的特征上进一步增强,其余削弱
  • 经过所有卷积核运算输出的n组数字,称为Feature Map3
  • 卷积核扫描图像的过程就叫做卷积

两种角度都是同一件事情

神经元版本卷积核版本
每个神经元只需要考虑一个感受野用一组卷积核检测一小部分范围
不同的神经元共享参数
(同样的特征可能出现在图片的不同位置)
每个卷积核要扫过整张图片

二、池化层 (Pooling Layer)4

池化层位于卷积层之后,其作用就是把图片变小:把一张图片做 下采样(subsampling)5,把一张大的图片缩小,且保留关键信息,降低卷积网络计算的复杂度。

池化有很多不同的版本,这里介绍的是Max Pooling

最大池化(Max Pooling)

Max Pooling

运作:

  • 每个卷积核都产生一组数字
  • 池化的时候,把每个卷积核产生的数字分组(例如:2×2,自行决定)
  • 每一组里面选最大一个 (局部最大值)
  • 经过池化层,图像的通道不变,但是图片变小

做完几次卷积和池化操作以后,需要对池化的输出做 扁平化(Flatten) 操作:把矩阵拉直成列向量。再把向量输入进全连接层,可能需要做softmax激活,最终输出得到结果。

  • 整个CNN流程如下:
    整个CNN流程

三、CNN的应用:围棋 Alpha Go

下围棋其实就是一个分类的问题

输入(棋盘上黑子和白子的位置)→ 神经网络 → 下一步落子的位置

  • 棋盘:19 * 19 的向量
  • 黑子:1;白子:-1;空:0

相比于全连接网络,该问题用CNN的效果更好:

  • 棋盘看做19*19的图片,每个像素代表可以落子的位置
  • 每一个像素(棋盘的位置),用48个通道(数字)来表示

为什么CNN能用于下围棋?因为围棋和影像有共同的特性

  • 很多重要的图案,只需要观察小范围
    • Alpha Go 里面第一层的卷积核大小为 5 * 5
    • 小范围
  • 同样的图案可能出现在不同的位置
    • 在这里插入图片描述
  • Alpha Go 并没有用池化层
    • 池化会丢失棋盘大小信息
    • 在这里插入图片描述

CNN 还可以用于语音、自然语言处理上,这里的CNN是独立设计的,并不能直接从图像上照搬过去。

另外,CNN不能处理图像放大缩小以及旋转的问题,我们往往要对它做 数据增强(Data Augmentation) 。Spatial Transformer Layer6 能处理这个问题。

  • 假设给CNN输入了一张图片,输出为“狗”。然而把图片放大后,它可能不会辨识出是一只狗(矩阵拉长为向量,里面的数值都不一样,因此对CNN来说,二者是非常不一样的)。

  1. 神经网络感受野(receptive field)推到分析与计算(总结) ↩︎

  2. 图解卷积层stride,padding,kernel_size 和卷积前后特征图尺寸之间的关系 ↩︎

  3. CNN中的feature map ↩︎

  4. 池化层理解 ↩︎

  5. 图像语义分割中的下采样(subsampling)和上采样(Upsampling) ↩︎

  6. 台湾大学李宏毅机器学习课程 - Spatial Transformer Layer ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beta Lemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值