李宏毅《机器学习》丨 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 就是用 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,然后得到图像识别的结果。
三、卷积(Convolution)
第一个 filter 是一个 3* 3 的 matrix,把这个 filter 放在 image 的左上角,把 filter 的 9 个值和 image 的 9 个值做内积,两边都是 1,1,1(斜对角),内积的结果就得到 3。
(移动多少是事先决定的)移动的距离叫做 stride(stride 的值也可以事先设置),内积等于-1。图中的 stride 等于 1。
四、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,当我们做这件事情的时候,我们用的这个参数就比原来的更少。
五、最大池化(Max Pooling)
相对于 convolution 来说,Max Pooling 是比较简单的。我们根据 filter 1 得到 4*4 的 maxtrix,根据 filter2 得到另一个 4 *4 的 matrix,接下来把 output ,4 个一组。每一组里面可以选择它们的平均(平均池化)或者选最大(最大池化)的都可以,就是把四个 value 合成一个 value。这个可以让 image 缩小。
池化本质上的作用是:缩小图像,减少特征。
六、压平(Flatten)
把多维的输入一维化,常用在从卷积层到全连接层的过渡。
flatten 就是 feature map 拉直,拉直之后就可以丢到 fully connected feedforward netwwork。
七、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)和其他的一些参考资料。
主要是原理部分的介绍,在实际运用中可能一行代码就实现了对应的功能。对于初学者而言,很多地方我觉得可以不求甚解,等到具体应用的时候再深挖一下,这样可以提高效率。
本次的分享就到这里
如果我的文章对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦!
听说 👉 点赞 👈 的人运气不会太差,每一天都会元气满满呦!^ _ ^
码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了👉 关注 👈我哦!
如果以上内容有任何错误或者不准确的地方,欢迎在下面👇留个言。或者你有更好的想法,欢迎一起交流学习~~~
版权声明: 本文为 InfoQ 作者【AXYZdong】的原创文章。
原文链接:【http://xie.infoq.cn/article/42ec25be28c3d80a8459ebe79】。文章转载请联系作者。
评论