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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

绿洲213

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

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

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

打赏作者

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

抵扣说明:

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

余额充值