李宏毅2021年机器学习笔记———卷积神经网络


卷积神经网络

  • Observation1:感受野
  • Observation2:权值共享
  • Observation3:Max Pooling
  • The whole CNN

??我们开始探讨Network的架构设计,第一个Network架构的变形是Convolutional的Neural Network,它的缩写是CNN,它是被专门用在影像上的。透过这篇文章,大家可以知道Network的架构的设计有什么样的想法,为什么设计Network的架构可以让我们的Network结果做的更好。接下来讲的例子和影像有关。我们假设说要做影像的分类,也就是给机器一张图片,它要去决定说这样图片里面有什么样的东西,那应该怎么做呢?
??在以下的讨论里面,我们假设模型输入的图片大小都是固定的,不会突然出现大小不一的照片。模型分目标是是分类,所以我们会把每一个类别表示成一个one-hot的Vector,模型的目标叫做 y ^ \widehat{y} y ?。在这个Vector里面,假设现在图片里物体的类别是一个猫,猫所对应的Dimension的数值就是1,其他物体对应的Dimension的数值就是0。Dimension的长度决定了模型辨识物体种类的个数,如果向量的长度是2000,就代表这个模型可以辨识出2000种不同的东西。
李宏毅2021年机器学习笔记———卷积神经网络
文章图片

模型的输出通过softmax以后,输出是y‘,我们希望模型的实际输出y’和模型目标 y ^ \widehat{y} y ?的Cross Entropy越小越好。
??接下来的问题是怎么把一张图片当作一个模型的输入呢?对电脑来说,一张彩色图片其实就是一个三维的Tensor(维度大于2的矩阵就是Tensor),一维代表图片的高,一维代表图片的高,还有一维代表图片Channel的数目。把这个三维的Tensor拉直,拉直之后就可以将它输入到Network里面去了。
李宏毅2021年机器学习笔记———卷积神经网络
文章图片

??Network的输入是一个向量。在这个例子里,一个三维的Tensor又100×100×3个数字,把这些数字拿出来排成一排就可以形成一个向量,这个向量里面的某一个数字,就是彩色图片某一个Pixel中某一个颜色的强度。
??假设采用全连接网络处理图象识别的问题,第一层的Neuron有1000个,那么第一层将有3×107个weight。增加参数,可以增加模型的弹性,但是也增加了overfitting的风险。考虑到图像识别这个问题本身的特性,我们其实并不一定需要全连接网络,也就是说我们并不需要每一个Neuron和Input的每一个Dimension都有一个Weight。接下来就是对图像识别这个问题的特性的一些观察。
Observation1:感受野 李宏毅2021年机器学习笔记———卷积神经网络
文章图片

??这张图片有一只动物,这个动物是一只鸟,要怎么做呢?对一个图像识别的系统而言,要侦测这张图片里有没有出现一些特别重要的Pattern,这些Pattern是代表了某种物件的。举例来说,如果某个Neuron看到了鸟嘴这个Pattern,某个看到了眼睛这个Pattern,这些Pattern综合起来就代表说我们看到了一只鸟。Neuron现在要做的事情就是判断图片中有没有某种Pattern出现,那我们并不需要每一个Neuron都去看一张完整的图片,看一个小范围就知道了。这些neuron并不需要把整张图片当作输入,只需要把图片的一小部分当作输入,就足以让它们侦测某些特别关键的Pattern有没有出现。这是第一个观察,根据这一个观察,我们就能做第一个简化。设定
【李宏毅2021年机器学习笔记———卷积神经网络】Receptive Field(RF)
李宏毅2021年机器学习笔记———卷积神经网络
文章图片

??每一个Neuron都只关心自己的Receptive Field里面发生的事情就好了,举例来说就是右上角蓝色的neuron负责的范围就是红色方框围住的Receptive Field,这个RF里面有3×3×3的数值,把它变成一个27维的向量,并成为蓝色neuron的输入,这个neuron会给27维向量的每个Dimension一个weight,再加上bias就得到一个neuron的输出。RF大小可以自己定义,彼此之间可以重叠。
RF的经典设置方式
李宏毅2021年机器学习笔记———卷积神经网络
文章图片

??①看所有的Channel:在描述一个RF的时候,只讲高跟宽就好了,就不用讲它的深度,反正深度一定会考虑全部的Channel。
??②Kernel Size:而这个高跟宽合起来叫做Kernel Size,在这个例子里面Kernel Size就是3×3。一般的Kernel Size不会设的太大,在影像辨识里面做个3×3的Kernel Size足够了。
??③Sriede:把一个RF往右移动,就可以制造一个新的RF,移动的量叫做Stride,Stride是一个自己决定的参数,RF之间是有重叠的。若两个RF之间没有重叠,那有一个Pattern就会出现在两个RF的交界上面,那就没有任何Neuron去侦测这个Pattern,那有可能会错过这个Pattern。
??④Padding:在移动的过程中可能会超出影像的范围,超出的范围就做Padding(补值)。
??通过这个方式可以扫过整张图片,整张图片的每一个区域都是有被RF覆盖的。
Observation2:权值共享 ??出现在左上角的鸟嘴,它落在某个RF里面,因为RF是盖满整个图片的,所以图片里面没有任何地方不是在Neuron的守备范围内,所以这个地方一定是某个Neuron的RF。假设在RF里面有一个Neuron的工作就是侦测鸟嘴的话,那鸟嘴就能侦测出来,即使鸟嘴出现在中间也没有关系。现在的问题是:这些侦测鸟嘴的Neuron做的事情是一样的,只是守备的范围是不一样的。
??解决方法:让不同RF的Neuron共享参数,也就是Parameter Sharing。两个Neuron的Weight完全是一样的,但是上下两个Neuron守备的范围不一样,所以这两个Neuron的输出是不一样的。
李宏毅2021年机器学习笔记———卷积神经网络
文章图片

Observation3:Max Pooling ??Convolutional Layer,在做影像辨识的时候呢,其实还有第三个常用的东西,这个东西呢 叫做 Pooling,那 Pooling 是怎麼来的呢?Pooling来自于另外一个观察,我们把一张比较大的图片做subsampling。举例来说就是你把偶数的Column都拿掉,奇数的law都拿点,图片就变为原来的1/4,但是不会影响里面是什么东西。
李宏毅2021年机器学习笔记———卷积神经网络
文章图片

??那Pooling是怎么运作的呢?Pooling这个东西它本身没有参数,所以它不是一个Layer,它里面没有Weight,没有要learn的东西。所以有人会告诉你Pooling比较像一个Activation Function,比较像Sigmoid那些。Pooling有很多不同的版本,我们这里讲Max Pooling。
李宏毅2021年机器学习笔记———卷积神经网络
文章图片

??Max Pooling是怎么运作的呢?我们刚才说每一个Filter都产生一堆数字,要做Pooling的时候,我们就把这些数字几个几个一组。例如我们现在是2×2一组,每一组里面选一个代表,在Max Pooling里是选最大的那个。尺寸和形式是由自己决定的。
The whole CNN ??那一般以后,CNN的架构就是 Convolution 加 Pooling,刚才讲过说 Pooling 是可有可无啦,今天很多人可能会选择不用 Pooling,好 那如果做完几次 Convolution 以后,接下来呢,最终怎麼得到最后的结果呢?
李宏毅2021年机器学习笔记———卷积神经网络
文章图片

??我们需要拿 Pooling 的输出做一件事情,叫做 Flatten。Flatten 的意思就是,把这个图像裡面啊,本来排成矩阵的东西拉直,把所有的数值拉直变成一个向量,再把这个向量,丢进 Fully Connected 的 Layer 裡面。最终还要过个 Softmax,得到图像识别的结果,这就是一个经典的图像识别的Network。

    推荐阅读