机器学习之五(读书笔记)

  • Convolutional Neural Network

十、Convolutional Neural Network

  为什么CNN会被用于图像?
  (1)CNN简化neuron network 架构,过滤掉不需要的参数。
  (2)大部分pattern比整张image还要小,一个neuron只需要链接到一小块区域,不需要连接到整张图片;假设现有一张图片,需要侦测是否有“鸟嘴”:
在这里插入图片描述
  (3)同样的pattern出现在不同的区域,可以用同样的neuron侦测出来;假设现有两张图片,一个的鸟嘴在左上角,一个在中间,要求这两个neuron共享同一组参数,减少参数的用量:
在这里插入图片描述
  (4)对图片做subsampling(二次抽样),不会对结果造成影响,利用这个概念把图片变小,可以减少需要用的参数:
在这里插入图片描述
  整个CNN架构为:对图片进行Convolution,再进行Max pooling,以上两步反复数次,反复的次数事先决定,做完这件事情就进行Flatten(压平),之后把结果丢到Fully Connected Feedforward network(全连接前馈网络),得到最终结果:
在这里插入图片描述
  其中,以上提到的不需要侦测整张图片以及同样pattern出现在不同区域的两种问题使用Convolution解决,两次抽样使用Max pooling解决:
在这里插入图片描述
(一)CNN-Convolution

  假设network input是一张6x6的image,黑白图片,1代表有墨水,0代表无墨水,现有一组filter(滤波器),每一个filter其实就是一个3x3的矩阵,这个矩阵中每一个element值就是network parameter,是自动学习出来的,因为filter为3x3的矩阵,说明要侦测的pattern也是3x3的:
在这里插入图片描述
  运作方式:把一个filter放在image的左上角,然后把此处image的9个值和这个filter的9个值做内积运算,然后挪动filter的位置,挪多少事先决定好,用stride表示,假设此处设置stride=1:
在这里插入图片描述
  这步Convolution将6x6的matrix变成了4x4的matrix:
在这里插入图片描述

  观察这个filter:
在这里插入图片描述

  它的对角线为1 1 1,所以它的工作就是侦测有没有在对角线出现连续的1 1 1,在这个图片中,左上角和左下角都侦测出这个值,使用同一个filter就可以侦测出“同样的pattern出现在不同的区域”。
  在一个Convolution中会有很多filter,会有另外的filter里面有不同与filter1的参数,和filter1做同样的事情,做卷积运算,得到另外一个4x4的matrix,这个4x4的matrix和上一个得到的4x4的matrix合起来就叫做Feature Map(特征图):
在这里插入图片描述

  彩色的图像是由RGB组成,一个彩色的image是由好几个matrix叠在一起,立方体形,这个时候处理彩色image的filter就不再是一个matrix,也是一个立方体,不同颜色的内积不是分开算,一个filter就已经包含了不同颜色:
在这里插入图片描述

Convolution和Fully Connected的关系:
  其实Convolution就是一个neuron network,相当于fully connected拿掉了一些weight。假设现在用一个filter对一个6x6的image做卷积,在左上角的第一次卷积运算得到3(如图),这就等同于把这个6x6的image拉直,同时有一个neuron的output是3,那么这个output就是编号1 2 3 7 8 9 13 14 15的pixel链接到这个neuron得到的,而其中的9个weight就来源于filter,这个neuron本来应该链接36个input,现在只链接了9个(不需要链接整张image,用了比较少的参数):
在这里插入图片描述

  现在,filter往这个image的右边挪一步,得到卷积运算结果-1,此时这个neuron连接到input的weight与前一个相同,也就是weight共享了,这样需要的参数就更少了:
在这里插入图片描述

(二)CNN-Max Pooling
  根据Fliter 1得到一个4x4的matrix,根据Fliter 2得到另一个4x4的matrix,然后把所有output四个一组,然后在每组选择它们的平均/最大的那个值:
在这里插入图片描述

  经过一次Convolution和Max Pooling,6x6的image就变成了一个2x2的image,而这个2x2的image的深度由filter的个数决定:
在这里插入图片描述

  经历过一组Convolution+Max Pooling的过程后,图片会变小,每经过一次就会变小一次,并且得到的结果的深度=filter的个数,这个深度并不会随着Convolution+Max Pooling的次数变多而改变,例如第一次Convolution+Max Pooling之后得到2x2,深度为25的image,下一次Convolution+Max Pooling时的filter就不再是一个matrix,而是一个深度为25的立方体了:
在这里插入图片描述

(三)CNN-Flatten
  把feature map拉直,然后丢到Fully Connected Feedforward network:
在这里插入图片描述

(四)CNN in keras
  Convolution+Max Pooling的过程和之前一样,唯一需要更改的部分就是network structure 和输入格式(vector->3-D tensor);
  Convolution代码:

model2.add(Convolution2D(25,3,3,input_shape=(1,28,28)))

  25,3,3:有25个3x3的filter
在这里插入图片描述
  input_shape=(1,28,28)代表input是28x28的image,前面的数字1代表black/white,黑白,如果为3,就代表RGB;

  Max Pooling代码:

model2.add(MaxPooling2D((2,2)))

  代表每次把2x2的feature map里的最大的那个拿出来;

  假设现在,把shape为1x28x28的图片经过(25,3,3)的convolution之后得到的output为25x26x26,其中channel为25,image大小为26x26;接下来做(2,2)的Max pooling,output就为25x13x13的;接下来再经过(50,3,3)的convolution,得到的output为50x11x11;接下来再做(2,2)的Max pooling,output就为50x5x5的。
  其中,在第一次卷积时每一个filter的参数为9个(因为这时的filter为一个matrix,是3x3的);在第二次卷积时每一个filter的参数为225个(因为这时的filter为一个立方体,3x3一层,一共25层)。
在这里插入图片描述

  把得到的50x5x5的结果拉直变成一个1250的vector,丢到Fully Connected Feedforward network里得到最终结果。
  Flatten代码:

model2.add(Flatten())

  Fully Connected Feedforward network代码:

model2.add(Dense(output_dim=100))
model2.add(Activation('relu'))
model2.add(Dense(output_dim=10))
model2.add(Activation('softmax'))

在这里插入图片描述

  Deep Dream:假设给machine一张image,它会加上它“看见”的东西;CNN exaggerates what it sees;
  Deep Style:假设给machine一张image,会让这张图片有另一张图片的风格(A Neural Algorithm of Artistic Style):
在这里插入图片描述
(Gradient Ascent)
  
  More Aoolication:Playing Go(下围棋)
  input为棋盘19x19的matrix,output为下一步落子位置:
在这里插入图片描述
在这里插入图片描述

  为什么CNN可以用在围棋上?
在这里插入图片描述
Alpha Go没有使用Max Pooling。
  
  More Aoolication:Speech
  把一段声音表示成Spectrogram(光谱图),把其中一段当成image,移动filter从上往下:
在这里插入图片描述

  
  More Aoolication:Text(文字)
  每一个word都用一个vector表示,把所有的word排在一起就变成image,filter的高和image的高一样,在时间的序列上移动:
在这里插入图片描述
  
  How to let machine draw an image:

  • PixelRNN:https://arxiv.org/abs/1601.06759
  • Variation Autoencoder(VAE):https://arxiv.org/abs/1312.6114
  • Generative Adversarial Network(GAN):http://arxiv.org/abs/1406.2661
      
      

本文是对blibli上李宏毅机器学习2020的总结,如有侵权会立马删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值