• 7.1-卷积神经网络


    一、卷积神经网络(Convolutional Neural Network)

    • 考虑到图像的性质,网络是否可以简化?可以,将DNN简化为CNN
    • 有些图案(patterns)比整个图像要小得多
      • 因此神经元不需要看到整个图像就能发现图案(patterns)
      • 用较少的参数连接到小区域

    image-20220818184901729

    • 相同的图案(patterns)出现在不同的区域(regions)
      • 虽然下图中两只鸟嘴在图片的不同区域,但该网络是用来检测鸟嘴的,因此不需要额外再增加一个网络,他们可以共用相同的参数集

    image-20220818184935848

    • 对像素进行下采样(Subsampling)不会改变对象
      • 我们可以对像素进行下采样(Subsampling),使图像变小,从而使网络处理图像的参数更少

    image-20220818185823798

    • 上述过程综合起来如下

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2nIEac7w-1660888940226)(C:/Users/肖雄/AppData/Roaming/Typora/typora-user-images/image-20220818185919532.png)]

    image-20220818185946337

    1.1 卷积(Convolution)

    • 首先我们会设定很多组过滤器(Filter),每个过滤器就是一个矩阵(Matrix)
      • 性质一:每个过滤器检测一个小图案(3×3)
      • 性质二:每个过滤器都会与像素矩阵相乘,最后得到一个新的特征图(Feature Map)
      • 上面是单色图的卷积操作,同样对于彩色图的卷积操作也是如此
    • 卷积(Convolution)和全连接(Convolution)的关系
      • 实际上,卷积的本质就是全连接拿掉了网络中的一些权重后得到的结果,同时共享了网络中的一部分权重
      • 这样做的好处是极大减少了网络所需的参数,降低了运算量

    image-20220818191314940

    image-20220818191702451

    image-20220818191715994

    image-20220818192015976

    image-20220818192106687

    image-20220818192400203

    image-20220818192603697

    1.2 最大值池化(Max Pooling)

    • 将卷积后的结果分成4块,每块都只取一个最大值,这就是最大值池化的操作
      • 原来6X6的图片在经过一次由2个3X3的过滤器的卷积和最大值池化的操作后得到2X2的图片,比原始图像要小
      • 每个过滤器就是一个通道(channel)

    image-20220818193226495

    image-20220818193239706

    image-20220818193253442

    1.3 平整化 (flatten)

    • 如图将2X2的图像拉直成一维向量,然后输入到全连接前馈网络(Fully Connected Feedforward network)中,这就是平整化 (flatten)的过程

    image-20220818200105858

    二、用Keras实现CNN

    • 卷积操作
      • 只修改了网络结构和输入格式,高维的向量也被称为张量(tensor)
      • 如下图,第一层卷积层的过滤器只有3X3=9个参数,第二层卷积层的过滤器只有3X3X25=225个参数
    • 池化操作
      • model2. add (MaxPooling2D( (2,2))
    • 平整化操作
      • model2. add (Flatten())

    image-20220818200611651

    image-20220818201353246

    image-20220818201405964

    2.1 CNN学到了什么?

    • 卷积操作中的过滤器(filter)作用
      • 如图第k个过滤器的输出是一个11×11的矩阵。第k个过滤器的激活程度(Degree of the activation)是 ak
      • 此时我们为了搞清楚每个过滤器的作用,就对输入x做梯度上升(gradient ascent),找出让过滤器激活程度 ak 最高的 x
      • 图二就是找到的一组x,很明显,每个过滤器的作用就是找出有一定规则的条纹状图
    • 全连接网络中的神经元(neuron)作用
      • 每个图形对应一个神经元
      • 如图寻找图像 x*,使得神经元输出的 aj 最大化,从得到的图像可以看出神经元的作用是找出有一定规则的图案
    • 考虑输出 yi
      • 如图寻找图像 x*,使得全连接层输出的 yi 最大化,从得到的图像我们人类是无法区分图片所代表的具体数字的,但是机器却可以
      • 为了让将机器挑选的图片看起来更像数字,我们应该对 y 做一些正则化(regularization),对 x 做一些约束(constraint)。如图将 x i j x_{ij} xij 取绝对值并求和,这就是 L1正则化, x i j x_{ij} xij 代表图中每一个像素(pixel)
      • 做约束的这一过程,其实就是Deep Dream

    image-20220818212628839

    image-20220818212640995

    image-20220818212652607

    image-20220818212703988

    image-20220819122437988

    2.2 Deep Dream

    • Deep Dream就是给机器一张图片,机器会在这个图片里加上它看到的东西。
    • 如图,实际操作就是向CNN网络输入一张图片,然后取出某层网络里的过滤器,或者是全连接层里面的某一个隐层拿出来,得到的就是一个向量,我们将这个向量里的正值调大,负值调小,也就是让正值更正,负值更负。然后找一张修改后的图片输入到网络中,让它的输出更接近我们刚刚修改后的向量,这么做其实就是让CNN夸大化它看到的东西。也就是让它现在看到的东西更像它原来看到的东西,实际上就是让原本被激活的过滤器,激活程度变得更高,更敏感。

    image-20220819123422227

    image-20220819124103073

    2.3 Deep Style

    • 给机器一张照片,让它去修改这张图,使其有另一种图片的风格,这就是Deep Style,也是Deep Dream的进阶版本
    • 原理就是将原始图片输入到CNN中,然后得到过滤器的输出,输出代表这一张图像里面有什么样的内容;同样我们对另一张图片做同样的操作,但我们此时并不考虑过滤器的输出,而是考虑过滤器与过滤器之间输出的相关性(correlation),而这个相关性代表了一张图的风格。接下来我们用同一个CNN,来找一张图片,使这张图片的内容(过滤器的输出)要像原始图片,同时这张图片的风格(过滤器与过滤器之间输出的相关性)要像另一张图片

    image-20220819124135606

    image-20220819124145316

    image-20220819124201496

    三、CNN的其他应用

    3.1 Alpha Go

    • 实际上传统的DNN是可以实现Alpha Go的,但我们为什么要用CNN呢?
      • 首先用CNN会有更好的表现,其次它符合CNN的3个条件中的2个
        • 有些图案(pattern)比整个图像小得多
        • 相同的图案(pattern)出现在不同的地区
      • 由于棋盘不满足CNN的第三个性质:对像素进行下采样(Subsampling)不会改变对象,因此Alpha Go的CNN架构是没有最大值池化(Max Pooling)这个操作的

    image-20220819131116588

    image-20220819131126288

    image-20220819131140376

    image-20220819131150140

    3.2 语音(Speech)

    • 下图是一段声音的谱图(spectrogram),其横轴代表时间,纵轴代表这一段时间的频率(frequency)。
    • 图中红色部分代表在那一段时间里,那一个频率的能量比较大。实际上这是**”你好“**这段语音的谱图
    • 因此我们可以将语音谱图输入到CNN,由于在语音上,我们只考虑在频率方向(上下方向)移动的过滤器,也就是说我们的过滤器是长方形的,宽度和图片的宽度一样,移动过滤器时只做上下移动。
      • 这么做的原因是当不同人的发声内容相同时,实际上他们的图案(pattern)还是一样的,只是图片上的位置不同。
      • 这告诉我们用CNN设计网络时,一定要考虑具体的应用场景。

    image-20220819131250643

    3.3 文本 (Text)

    • 文字嵌入(word embedding):将每个单词用一列向量来表示,这就组成了一个句子矩阵S(sentence matrix),就可以用CNN的方法来进行求解了。并且过滤器移动的方向是句子衔接的方向(左右方向),而不会在文字嵌入的维度(上下方向)去移动过滤器

    image-20220819131308135

    3.4 其他学习内容

    image-20220819140056496

    image-20220819140111217

  • 相关阅读:
    Ubuntu Minkowski Engine安装
    Oracle-表空间管理
    MySQL数据库管理基操
    使用HTML制作静态网站作业——我的校园运动会(HTML+CSS)
    k8s的pod调度之节点选择器
    网页锚点功能实现<a>标签和scrollIntoView()方法
    WebRTC janus安装编译教程
    vSphere6.7创建Windows Server 2016虚拟机及磁盘扩容
    linux使用scp命令来在两台Linux设备之间传输文件
    【CH559l单片机入门篇】通过串口打印内部ID信息
  • 原文地址:https://blog.csdn.net/weixin_46227276/article/details/126423707