美文网首页
【李宏毅机器学习】CNN卷积神经网络

【李宏毅机器学习】CNN卷积神经网络

作者: jenye_ | 来源:发表于2021-06-23 17:14 被阅读0次

    引子:图像分类

    对计算机来说图片是什么?

    一张图片是一个三层的tensor

    把tensor拉直成为一个向量就可以作为一个network的输入。


    这里用全链接层,可以发现如果我们是对100*100大小的图片做分类,需要训练的参数weight个数高达3X10^7,这么多的参数很容易导致过拟合问题。

    那么考虑到图片分类的问题上,可以发现其实不一定每个Neuron都需要考虑整张图片的每个位置也就是向量的每个x。

    如何理解这个说法呢?
    其实对于分类一张图片来说,其实可以理解成对图片每个部分的一个匹配,比如观察一张图片是不是鸟,可能会分别观察它的嘴、眼睛、爪子。。。并不是直观的从整张图片上来看(全链接层),也就是说每个Neuron其实可以负责图片的一部分特征的观察,也就是观察到了某些patter,综合这些信息就能对图片进行分类了。


    • 第一次简化
      那么从以上说法我们就可以对全链接做第一次简化,每一个Neuron我们设置一个Recptive field,也就是这个Neuron关心的区域,其他区域就不管了。



      那Recptive field如何决定呢?这就需要自己来决定了,取决于你要观察什么位置,要观察什么范围。
      需要注意的是Recptive field是可以重叠甚至可以是一样的(两个Neuron观察不同的pattern)



      灵位Recptive field也可以覆盖不同的区Chanel,形状都是自己决定了,不一定是正方形,这些都取决于你想要识别什么样的Pattern。

    那其实最经典的Recptive field如下

    • 覆盖所有channels33大小
    • 一个Recptive field一门会分配一组Neuron, 比如一个Rf分配64个Neuron
    • Rf一般是设置一定的步长覆盖整个图片,而且相互会有重叠,这个目的是为了识别可能在两个Rf之间的Pattern。
    • 按上面的方法Rf超过了图片的范围一般用padding,进行补值(一般是0)


      8E52838F-F328-4852-B630-203CC636965F.png

    第二个问题,同样的Patterns可能在图片的不同位置,比如鸟嘴可能会出现在图片的不同位置,那么是不是每个位置都需要有一个Neuron来识别鸟嘴呢?这样嘴其实是很低效的()。


    这就引出了第二个简化:共享参数




    让不同rf的Neuron共享参数。
    让不同rf的Neuron能够识别同一个Pattern

    常见的共享参数的方法:



    共享参数的Neuron我们叫它filter1,filter2...
    实际上,回到图片分类的问题,就是每个Rf我们要对图片的每个Pattern进行识别(每一个区域我们都需要判断是鸟嘴、爪子、眼睛...)

    加上参数共享之后,这个过程可以说是卷积层了。

    那么卷积层和全链接层有什么联系呢?



    其实按我自己的理解Neuron反而变多了,但是Neuron的拟合能力变差了,也就是w变少了。全链接层就是可以自定义rf大小没用参数共享的卷积层,而卷积就是全链接层做了针对图像问题的一些限制。

    如果之前有学过CNN,其实是另一种描述方法

    其实不管是哪种方式,只是换一个角度描述而已。
    Filter 理解成抓取特征的一个模块



    通过filter抓取特征之后生成featrue map



    我们可以再加一层卷积层,也就是对featrue map再做一次特征抓取,使用同样大小的filter抓取的范围就变大了。



    对比两个版本对于卷积层的描述


    其实所谓filter里面的数字,就是前版本描述的neuron的权重,只是在描述的时候忽略掉了bias的描述,其实两者是完全一样的。

    第二个版本的Filter的滑动抓取,其实就是第一个版本的共享参数。



    这个滑动的过程其实就是所谓卷积



    池化


    比如把偶数的像素拿掉,只会影响图片的大小,不会影响图片是什么东西。

    Max Pooling


    Max Pooling 之后


    Pooling的目的其实就是把图片变小

    Pooling实际上没有w需要学习,所以不称为一个层,Pooling的方式,和大小都是可以自己根据实际问题选择的

    实际上,如果需要侦测的pattern比较小,Pooling可能会导致某些特征消失,尤其是现在计算能力不断变强,很多架构在做卷积的时候都去掉了Pooling的过程。

    完整的CNN架构

    Playing Go 用来下棋的CNN

    把棋盘作为一个19X19分类的问题,选择下一步落子的位置。
    这个问题完全可以用全链接层,但其实CNN的效果更好,也就是把一个棋盘看作一张图片。

    直观看怎么理解?


    其实在下棋的问题上,从局部也可以发现一些Pattern

    但是Pooling呢?



    实际上在alpha go的CNN架构中,并没有用到Pooling。
    所以实际上,CNN不一定要有Pooling

    今年来其实也用在一些其他的领域



    这些Respective field会有不一样的设计。

    More

    实际上,CNN是没法解决图片放大、缩小、旋转的问题。
    所以我们在训练的时候需要做augmentation,也就是在数据集加上旋转、放大缩小的问题。
    那有什么架构可以解决这些问题吗 》 Spatial Transformer Layer


    相关文章

      网友评论

          本文标题:【李宏毅机器学习】CNN卷积神经网络

          本文链接:https://www.haomeiwen.com/subject/wxybyltx.html