机器学习周报第五周(7.22-7.28)

摘要

本周以图像识别为例,从两个角度学习了卷积神经网络(CNN),以及CNN的全过程总结和应用,学习了CNN的三种简化参数的方法。

Abstract

This week, taking image recognition as an example, we learned convolutional neural network (CNN) from two perspectives, as well as the whole process summary and application of CNN, and learned three methods of simplifying parameters of CNN.

卷积神经网络(CNN)

卷积神经网络是一种非常典型的网络架构,常用于图像分类等任务。

所谓的图像分类,就是给机器一张图片,由机器去判断这样图片里面有什么东西,比如判断这张图片里面是猫,狗,汽车等

假设输入的每张图片的尺寸都相同比如为:100像素×100像素。
对于机器,可以把图片看成是一个三维的张量(tensor),分别代表图像的宽,高以及图像的通道(channel)的数目。

通道(channel):彩色图像的每个像素都可以描述为红色(red)、绿色(green)、蓝色(blue)的组合,这 3 种颜色就称为图像的 3 个色彩通道。

在这里插入图片描述

把这个三维张量“拉直”,组成一排作为一个巨大的向量,作为网络的输入

在这里插入图片描述

假如把向量作为全连接网络的输入,输入的特征向量长度为100×100×3,由于每个神经元跟输入的向量中的每个数值都需要一个权重,且第 1 层有 1000 个神经元时,第 1 层的权重就需要 1000×100×100×3 = 3 × 1 0 7 10^7 107 个权重。更多的参数会使模型有更大的弹性和能力,但是也增加过拟合的风险。

简化一Receptive field

假如我们在进行让机器识别出图像的动物时,只需要对图像中的特别重要的模式(pattern),这些pattern能够代表出某一种动物。

如下图中, 能识别出图中某一块很小的部分中的(鸟嘴,眼睛,鸟爪)就可以判断出是否是一只鸟。只要看非常小的范围。这些神经元不需要把整张图像当作输入,只需要把图像的一小部分当作输入,就足以让它们检测某些特别关键的模式是否出现。

在这里插入图片描述

卷积神经网络会设定一个区域,即Receptive field(感受野),每个神经元都只关心自己的感受野里面发生的事情,感受野是由我们自己决定的。

这个神经元会把 3 × 3 × 3 的数值“拉直“变成一个长度是 3 × 3 × 3=27 维的向量,再把这 27 维的向量作为神经元的输入,这个神经元会给 27 维的向量的每个维度一个权重,所以这个神经元有 3 × 3 × 3 = 27 个权重,再加上偏置(bias)得到输出。这个输出再送给下一层的神经元当作输入。

  • 不同的神经元可以有不同大小的receptive field
  • receptive field 可以只考虑一个channel
  • receptive field 也可以非得是正方形的

在这里插入图片描述

最经典的receptive field 安排方式

在描述receptive field 一般会考虑所有的channel,这样就只讲这个receptive field 的高和宽了,其深度就是channel数,同时,高和宽称为kernel size(核大小)。一般同一个receptive field会有一组神经元去守备这个范围,比如 64 个或者是 128 个神经元去守备一个receptive field的范围。
在这里插入图片描述

  • 不同的receptive field之间的关系:我们将一个receptive field进行移动之后,制造出一个新的receptive field。移动的量称为**步幅(stride)**是认为设定的大小,因为希望感受野跟感受野之间是有重叠的,所以步幅往往不会设太大,一般设为1或2。
  • 同时我们希望不同的receptive field之间要有重叠。可能有的pattern正好出现在两个receptive field的交界上面,就没有任何神经元去检测它,这个模式可能会丢失

在这里插入图片描述
receptive field在移动时可能会超出图像为范围,我们就要考虑对超出范围做填充(padding),一般是零填充(zero padding)。

简化二 parameter sharing

同一种pattern(比如鸟嘴)可能出现在图片的不同部位,每一个receptive field其守备的神经元中都会有这个检测鸟嘴的神经元。比如假设每个学院都需要深度学习相关的课程,但是没必要在每个院系都开设深度学习课程,可以开一个比较大型的课程,让所有院系的学生都可以来上课。

在这里插入图片描述
在图像处理上,则可以让不同receptive field的神经元共享参数(parameter sharing),即两个神经元的权重完全一样,但由于输入的不同,输入也就不同

在这里插入图片描述

在这里插入图片描述

典型的parameter sharing 的方式:每个感受野都有一组神经元在负责守备,比如 64 个神经元,它们彼此之间可以共享参数。下图中使用一样的颜色代表这两个神经元共享一样的参数,所以每个receptive field 都只有一组参数,就是上面receptive field的第 1 个神经元会跟下面receptive field的第 1 个神经元共用参数,上面receptive field的第 2 个神经元跟下面receptive field 的第 2 个神经元共用参数 · · · · · · 所以每个感受野都只有一组参数而已,这些参数称为滤波器(filter)

在这里插入图片描述

  • Fully Connected 网络是弹性最大的,可以决定它看整张图像还是只看一个范围,如果它只想看一个范围,可以把很多权重设成 0。全连接层(fully-connected layer)可以自己决定看整张图像还是一个小范围。

  • 加上receptive field 概念之后,只能看一个小范围,网络的弹性是变小的。

  • 共享参数(parameter sharing)又进一步限制了网络的弹性。

在这里插入图片描述

receptive field加上parameter sharing 就是卷积层(convolutional layer),用到卷积层的网络叫卷积神经网络。卷积神经网络的偏差比较大。但模型偏差大不一定是坏事,因为当模型偏差大,模型的灵活性较低时,比较不容易过拟合。卷积层就是专门为图像设计的。

CNN的另一种介绍方式

对于一层卷积层,我们有很多个Filter,可以认为每一个Filter都是为了侦测某一个特征,其大小为设为( 3 × 3 × channel) ,而filter中的参数就是我们要通过学习得到的。假设我们已知参数,计算的过程称为Convolution。
在这里插入图片描述

  • 图像是彩色的channel为3
  • 图像是黑白的channel为1

假设我们已经通过学习将filter中的数值找到,如下图其中一个filter为右上角的数值,将filter的数值跟图像的每一个receptive field 对应的九个值相乘再相加(也就是做内积)。再设置好stride大小,重复上述操作,得到模式的检测结果。

例如:由下图得到filter1检测的pattern在图像的左上角和左下角

在这里插入图片描述

接下来把每个filter都做重复的过程。比如说有第 2 个filter,它用来检测图像 3 × 3 范围内中间一列都为 1 的模式。把第 2 个filter先从左上角开始扫起,得到一个数值,往右移一个步幅,再得到一个数值再往右移一个步幅,再得到一个数值。重复同样的操作,直到把整张图像都扫完,就得到另外一组数值。

在这里插入图片描述

如果有N个filter,就可以得到N组数字,这组数字称为特征映射(feature map)

而这个新的feature map可以看作是一个新的图片(channel为64),此时对于第二个卷积层,输入图像为3×3×64,第二个卷积层中的filter为3×3×64

在这里插入图片描述

同时我们发现在第二层卷积层filter同样设置高×宽为3×3时,当我们看第 1 个卷积层输出的feature map的 3 × 3 的范围的时候,在原来的图像上是考虑了一个5×5的范围。所以网络越深,同样是3×3的filter,它看的范围越来越大。
在这里插入图片描述

在这里插入图片描述

  1. 在一个版本中,receptive field作为输入到一个神经元中所×的权重,这些权重就是第二个版本中的filter。
  2. 在第一个版中不同的神经元可以共享参数,去守备不同的receptive field。而共享权重其实就是用filter扫过一张图像,这个过程就是卷积。

在这里插入图片描述

在这里插入图片描述

简化三pooling(汇聚)

下采样不影响模式检测。把一张比较大的图像做下采样(downsampling)把图像偶数的列都拿掉,奇数的行都拿掉,图像变成为原来的 1/4,但是不会影响里面是什么东西

在这里插入图片描述
做pooling之前,先将filter产生的数值分组,比如:2×2,3×3,4×4一组。做pooling的时候,先将这些数字分组,然后在每一组内选一个代表。max pooling 就是在每一组选择最大的哪一个,mean pooling(平均汇聚)就是取每一组的平均值。

最大汇聚(max pooling为例,max pooling在每一组里面选一个代表,选的代表 就是最大一个

在这里插入图片描述
一般在实践上,往往就是卷积跟汇聚交替使用,可能做几次卷积,做一次汇聚。比如两次卷积,一次汇聚。不过汇聚对于模型的性能可能会带来一点伤害。假设要检测的是非常微细的东西,随便做下采样,性能可能会稍微差一点。所以近年来图像的网络的设计往往也开始把汇聚丢掉。

在这里插入图片描述

做完几次卷积和汇聚以后,把汇聚的输出做扁平化(flatten),再把这个向量丢进全连接层里面,最终还要过个 softmax 来得到图像识别的结果。

扁平化(flatten)就是把图像里面本来排成矩阵样子的东西“拉直”,即把所有的数值“拉直”变成一个向量

在这里插入图片描述

总结

通过这一周的学习,我简单学习了CNN的相关基础,学会了CNN三种简化参数的方法。以同一个例子,两个不同的视角对CNN有了一定的了解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值