CNN入门全面介绍(李宏毅《机器学习》<深度学习方向>)

Datawhale202211——李宏毅《机器学习》P12



前言

CNN对于做AI领域的人应该是非常非常熟悉的,但深究网络的细节,又会感觉很陌生。跟着李宏毅老师,能够很顺畅地理解涉及的晦涩的概念,厘清CNN的前世今生,会让我们的认知上一个台阶。


一、为什么用CNN

在这里插入图片描述

之前的内容中曾经介绍过full connection (完全前馈神经网络),其实在CNN出现之前大多数网络(后文简称一般网络)会出现参数冗杂的问题,可以通过以下的一个例子直观感受一下:

假设这是一张100 *100的彩色图(一张很小的imgage),你把这个拉成一个vector,(它有多少个pixel),它有100 *100的pixel。如果是彩色图的话,每个pixel需要三个value来描述它,就是30000维(30000 dimension),那input vector假如是30000dimension,那这个hidden layer假设是1000个neural,那么这个hidden layer的参数就是有30000 *1000,那这样就太多了。那么CNN做的事就是简化neural network的架构。
在这里插入图片描述

二、CNN细节解析

CNN优化的角度

  • Insight 1 : 在特定的部位不需要所有的nerual都参与,如下图识别小鸟的嘴就使用对应的nerual即可。
    在这里插入图片描述

  • Insight 2 : 对于不同位置的同一特征使用同一个nerual即可,如下图中间位置的鸟嘴和左上角的鸟嘴用同一个nerual。
    在这里插入图片描述

  • Insight 3 :对图像进行subsampling,不会影响对图像的理解,但是大大减少了计算量。
    在这里插入图片描述

CNN架构

看图即可
在这里插入图片描述
(Convolution+Max Pooling)多次+Flatten
在这里插入图片描述

Convolution

  • 假设现在我们的network的input是一张6*6的Image,如果是黑白的,一个pixel就只需要用一个value去描述它,1就代表有涂墨水,0就代表没有涂到墨水。在这里插入图片描述
  • 后面的计算主要是按序用pixel和filter做内积,并且按照stride来移动。
    在这里插入图片描述
  • 计算过后,矩阵由66变成了44,根据结果显示本轮要找的特征集中在左上角和左下角,发现该特征后就不需要另外的filter来做冗余的计算。
    在这里插入图片描述
  • 整个CNN的层都在用不同的Filter做这样的计算,最后得到一个Feature Map,用于后续的分析。
    在这里插入图片描述
  • 对于彩色的图像,其输入则转换为一个立方体,对应的filter也是立方体的形式。
    在这里插入图片描述

Max pooling

  • Max pooling做的事情很简单,就是对于两个输出的4*4结果矩阵进行进一步处理,或取最大或取平均,让最终输出的image更小。
    在这里插入图片描述
    在这里插入图片描述
    做完一个convolution和一次max pooling,就将原来6 * 6的image变成了一个2 *2的image。这个2 *2的pixel的深度depend你有几个filter(你有50个filter你就有50维),得到结果就是一个new image but smaller,一个filter就代表了一个channel。

Flatten

flatten就是feature map拉直(因为一般网络的输入都是一维的),拉直之后就可以丢到fully connected feedforward netwwork,然后就结束了。
在这里插入图片描述

CNN in Keras

关注两个点:network structureinput format
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三、CNN的应用

CNN学到了什么

我们总说CNN像一个黑盒,输入输出可见,但中间过程却难以解释。但随着进一步发展,需要通过解释CNN的工作原理来进一步提升性能,那么我们就需要更了解它。李老师提供了一种思路,简而言之:
1.一个概念:Degree of the activation of the k-th filter.
(现在第k个filter有多被active<现在的input跟第k个filter有多match>)
2.一个思路:逆向思维——之前是通过loss找参数,现在是知道参数的前提下找最大化的degree

  • convolution and max pooling

如果我们随便取12个filter出来,每一个filter都去找一张image,这个image可以让那个filter的activation最大。现在有50个filter,你就要去找50张image,它可以让这些filter的activation最大。我就随便取了前12个filter,可以让它最active的image出来(如图)。
在这里插入图片描述
每一个filter的工作就是detain某一张pattern。比如说:第三图detain斜的线条,第四图是detain短的直线条,等等。每一个filter所做的事情就是detain不同角度的线条,如果今天input有不同角度的线条,你就会让某一个activation function,某一个filter的output值最大.

  • full connection

定义第j个neural,它的output叫做 a j a_j aj。接下来我们要做事情就是:找一张image(用gradient ascent的方法找一张X),这个image X你把它丢到neural network里面去,它可以让 a j a_j aj的值被maximize。找到的结果就是这样的(如图)
在这里插入图片描述
这些图跟刚才所观察到图不太一样,在刚在的filter观察到的是类似纹路的图案,在整张图上反复这样的纹路,那是因为每个filter考虑是图上一个小小的range(图上一部分range)。现在每一个neural,在你做flatten以后,每个neural的工作就是去看整张图,而不是是去看图的一小部分。

在这里插入图片描述

CNN Dream

Deep Dream是说:如果你给machine一张image,它会在这张image里加上它看到的东西。
在这里插入图片描述
这里就是很好的体现(感谢李老师供图),CNN检测到一些石头的形状很像动物,就会经过多轮训练让它更像某种动物。
在这里插入图片描述

CNN的应用

  • AlphGo
    在这里插入图片描述

  • 语音
    在这里插入图片描述

  • 文本
    在这里插入图片描述

四、参考文档

来自Datawhale的投喂

李宏毅《机器学习》开源内容1:
https://linklearner.com/datawhale-homepage/#/learn/detail/93
李宏毅《机器学习》开源内容2:
https://github.com/datawhalechina/leeml-notes
李宏毅《机器学习》开源内容3:
https://gitee.com/datawhalechina/leeml-notes

来自官方的投喂

李宏毅《机器学习》官方地址
http://speech.ee.ntu.edu.tw/~tlkagk/courses.html
李沐《动手学深度学习》官方地址
https://zh-v2.d2l.ai/

来自广大网友的投喂

深度学习优化算法Adam
https://www.jianshu.com/p/3e363f5e1a79
损失函数的全面介绍
点这里
损失函数对网络有什么影响
https://blog.csdn.net/weixin_33809981/article/details/89752960
在这里插入图片描述
在这里插入图片描述


总结

1.了解本课程中的概念可能已经很久了,但却从未真正理解,经过本次学习算是向前迈了一步。
2.李老师的课不像是在听讲,而是像一场故事汇,而且是很有想象空间逻辑清晰的故事,把很多非常抽象的概念讲得清晰生动,带着我们对经典的东西追本溯源,让我觉得这么做AI是扎实的深刻的,而不是外行所谓的空中楼阁。
3.感谢Datawhale组织者的倾情付出,特别是get it 小组成员的积极配合和坚定前进,又是一段收获满满的旅程,请个小愿本月能加入Datawhale,进一步深入开源工作。

猜你喜欢

转载自blog.csdn.net/weixin_50967907/article/details/128025729