写点什么

李宏毅《机器学习》丨 6. Convolutional Neural Network(卷积神经网络)

作者:AXYZdong
  • 2022 年 7 月 22 日
  • 本文字数:1977 字

    阅读完需:约 6 分钟

李宏毅《机器学习》丨6. Convolutional Neural Network(卷积神经网络)

Author:AXYZdong

自动化专业 工科男

有一点思考,有一点想法,有一点理性!

定个小小目标,努力成为习惯!在最美的年华遇见更好的自己!

更多精彩文章前往:👉 个人主页

一、为什么 CNN 用于图像处理

当我们用 fully connect feedforward network 来做图像处理的时候,往往我们会需要太多的参数,举例来说,假设这是一张 100 *100 的彩色图(一张很小的 imgage),你把这个拉成一个 vector,(它有多少个 pixel),它有 100 *100 3 的 pixel。


如果是彩色图的话,每个 pixel 需要三个 value 来描述它,就是 30000 维(30000 dimension),那 input vector 假如是 30000dimension,那这个 hidden layer 假设是 1000 个 neural,那么这个 hidden layer 的参数就是有 30000 *1000,那这样就太多了。


那么 CNN 做的事就是简化 neural network 的架构。我们根据对图像的认识,某些 weight 用不上的,我们一开始就把它滤掉。不是用 fully connect feedforward network,而是用比较少的参数来做图像处理这件事。所以 CNN 比一般的 DNN 还要简单。


▲ 为什么CNN用于图像处理


CNN 就是用 power-knowledge 去把原来 fully connect layer 中一些参数拿掉。


为什么我们有可能把一些参数拿掉(为什么可以用比较少的参数可以来进行图像处理)


  • 一些特征图像远小于整个图像

  • 同样的特征会出现在不同的区域



  • 像素缩放不会对图像造成太大影响


二、CNN 架构

首先 input 一张 image,这张 image 会通过 convolution layer,接下来是 max pooling,然后再做 convolution,再做 max pooling。


上述过程可以反复无数次(反复多少次你是要事先决定的,它就是 network 的架构(就像 neural 有几层一样),要做几层的 convolution,做几层的 Max Pooling,在定 neural 架构的时候,要事先决定好)。


做完要做的 convolution 和 Max Pooling 以后,就要进行 flatten,再把 flatten 的 output 丢到一般 fully connected feedforward network,然后得到图像识别的结果。


▲ CNN架构

三、卷积(Convolution)

第一个 filter 是一个 3* 3 的 matrix,把这个 filter 放在 image 的左上角,把 filter 的 9 个值和 image 的 9 个值做内积,两边都是 1,1,1(斜对角),内积的结果就得到 3。


(移动多少是事先决定的)移动的距离叫做 stride(stride 的值也可以事先设置),内积等于-1。图中的 stride 等于 1。



▲ 如何Convolution

四、Convolution 和 Fully Connected 之间的关系

将 stride=1(移动一格)做内积得到另外一个值-1,假设这个-1 是另外一个 neural 的 output,这个 neural 连接到 input 的(2,3,4,8,9,10,14,15,16),同样的 weight 代表同样的颜色。


在 fully connect 里面的两个 neural 本来是有自己的 weight,当我们在做 convolution 时,首先把每一个 neural 连接的 wight 减少,强迫这两个 neural 共用一个 weight。这件事就叫做 shared weight,当我们做这件事情的时候,我们用的这个参数就比原来的更少。


▲ Convolution和Fully Connected之间的关系

五、最大池化(Max Pooling)

相对于 convolution 来说,Max Pooling 是比较简单的。我们根据 filter 1 得到 4*4 的 maxtrix,根据 filter2 得到另一个 4 *4 的 matrix,接下来把 output ,4 个一组。每一组里面可以选择它们的平均(平均池化)或者选最大(最大池化)的都可以,就是把四个 value 合成一个 value。这个可以让 image 缩小。


池化本质上的作用是:缩小图像,减少特征。



▲ Max Pooling

六、压平(Flatten)

把多维的输入一维化,常用在从卷积层到全连接层的过渡。


flatten 就是 feature map 拉直,拉直之后就可以丢到 fully connected feedforward netwwork。


▲ Flatten

七、To learn more ......

  • The methods of visualization in these slideshttps://blog.keras.io/how-convolutional-neural-networks-see-the-world.html

  • More about visualizationhttp://cs231n.github.io/understanding-cnn/

  • Very cool CNN visualization toolkithttp://yosinski.com/deepvishttp://scs.ryerson.ca/~aharley/vis/conv/


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

八、总结

Datawhale 组队学习,李宏毅《机器学习》Task6. Convolutional Neural Network(卷积神经网络)。包括为什么 CNN 用于图像处理、CNN 架构、卷积(Convolution)、Convolution 和 Fully Connected 之间的关系、最大池化(Max Pooling)、压平(Flatten)和其他的一些参考资料。


主要是原理部分的介绍,在实际运用中可能一行代码就实现了对应的功能。对于初学者而言,很多地方我觉得可以不求甚解,等到具体应用的时候再深挖一下,这样可以提高效率。


本次的分享就到这里


如果我的文章对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦!

听说 👉 点赞 👈 的人运气不会太差,每一天都会元气满满呦!^ _ ^

码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了👉 关注 👈我哦!

如果以上内容有任何错误或者不准确的地方,欢迎在下面👇留个言。或者你有更好的想法,欢迎一起交流学习~~~


发布于: 1 小时前阅读数: 11
用户头像

AXYZdong

关注

没有伞的孩子要学会奔跑! 2020.06.01 加入

自动化专业 工科男 有一点思考,有一点想法,有一点理性。 定个小小目标,努力成为习惯。

评论

发布
暂无评论
李宏毅《机器学习》丨6. Convolutional Neural Network(卷积神经网络)_机器学习_AXYZdong_InfoQ写作社区