【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)

 

【李宏毅机器学习笔记】1、回归问题(Regression)

【李宏毅机器学习笔记】2、error产生自哪里?

【李宏毅机器学习笔记】3、gradient descent

【李宏毅机器学习笔记】4、Classification

【李宏毅机器学习笔记】5、Logistic Regression

【李宏毅机器学习笔记】6、简短介绍Deep Learning

【李宏毅机器学习笔记】7、反向传播(Backpropagation)

【李宏毅机器学习笔记】8、Tips for Training DNN

【李宏毅机器学习笔记】9、Convolutional Neural Network(CNN)

【李宏毅机器学习笔记】10、Why deep?(待填坑)

【李宏毅机器学习笔记】11、 Semi-supervised

【李宏毅机器学习笔记】 12、Unsupervised Learning - Linear Methods

【李宏毅机器学习笔记】 13、Unsupervised Learning - Word Embedding(待填坑)

【李宏毅机器学习笔记】 14、Unsupervised Learning - Neighbor Embedding(待填坑)

【李宏毅机器学习笔记】 15、Unsupervised Learning - Auto-encoder(待填坑)

【李宏毅机器学习笔记】 16、Unsupervised Learning - Deep Generative Model(待填坑)

【李宏毅机器学习笔记】 17、迁移学习(Transfer Learning)

【李宏毅机器学习笔记】 18、支持向量机(Support Vector Machine,SVM)

【李宏毅机器学习笔记】 19、Structured Learning - Introduction(待填坑)

【李宏毅机器学习笔记】 20、Structured Learning - Linear Model(待填坑)

【李宏毅机器学习笔记】 21、Structured Learning - Structured SVM(待填坑)

【李宏毅机器学习笔记】 22、Structured Learning - Sequence Labeling(待填坑)

【李宏毅机器学习笔记】 23、循环神经网络(Recurrent Neural Network,RNN)

【李宏毅机器学习笔记】 24、集成学习(Ensemble)

------------------------------------------------------------------------------------------------------

【李宏毅深度强化学习】视频地址:https://www.bilibili.com/video/av10590361?p=21

课件地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html

-------------------------------------------------------------------------------------------------------

Why CNN for Image

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第1张图片

 1、图像中要识别的pattern只是整张图的一个区域,所以神经元没必要看整张图片。

上图中的神经元的工作就只是识别图中的鸟喙而已。

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第2张图片

2、共享参数,减少参数量

同样的pattern(鸟喙)可能出现在图中的不同区域,但是如果用两个神经元来检测的话就太冗余。因为做的工作都差不多,所以就让这两个神经元的共用一组参数,这样就减少了参数量。

3、下采样图片不会改变物体特征

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第3张图片

如上图,即便图片变小了。仍然能一眼看出左右图的鸟是一样的。 这样做也可以使参数量减少。

The whole CNN

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第4张图片

上图就是CNN的样子,等下会具体说每个部分做的工作。

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第5张图片

 刚才我们说的三个特点,和CNN中的部件的对应关系如图所示。

CNN – Convolution

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第6张图片

输入是一张6*6的黑白图片,数值1的格子代表有墨水。然后有一组filter 1、2……,它们就是network里的神经元。

每个filter就是一个matrix,里面的数值代表的就是参数,这些参数是network去学的,不是人为调的。

3*3的filter就代表它要检测的是3*3大小的pattern。

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第7张图片

 不同的stride,得到的feature map是不一样的。

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第8张图片

这个filter 的主对角线都是1,就代表说这个filter的工作是检测图像有没有出现主对角线也都是1的地方。

如上图,feature map中值比较大的地方,就代表检测的特征出现在原图的地方。

这个就是文中开头说的,只用一个filter就把同一种pattern但是位置不一样都给找出来了。

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第9张图片

一个network中会有很多的filter,不同的feature检测不一样的pattern。

这个原图和filter经过卷积运算后得到的就叫做feature map。 

CNN – Colorful image

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第10张图片

现在输入一张彩色图片,由于有R、G、B三个通道,所以等于输入了三张图片,大小为6*6*3。

所以filter也要变成3*3*3 。

Convolution 和 Fully Connected 的关系

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第11张图片

 filter可以看做是一个简化版的全连接层。如上图。

我们用 filter 1 与 图片做卷积运算后,得到feature map。

为了方便和全连接层对比,把filter的过程用类似全连接层的做法来做的话。就是把6*6的图片拉直,变成36*1的形状。这个全连接层的weight对应filter中的数值(按同样的颜色去对应),可以看到算出来就对应feature map的第一个数值。

可以看到,用 filter 的做法,它一个神经元只连接了9个input。而原本的全连接层是连接所有的input。这样就做到了参数比原来使用全连接层更少

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第12张图片

这时,把filter移动一格,计算出-1。这个过程对应右图新的神经元算出的 -1。

所以,把filter的工作过程按照全连接层的样子表示出来,可以看到对比:

  1. 全连接层是连接所有input,而filter中神经元只有连接9个input ,参数量减少。
  2. 全连接层不同的神经元使用的参数是不一样的,而filter的做法是强制不同神经元共享同一组参数,所以参数量再次减少。

Max Pooling

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第13张图片

上图是对 filter 1 和filter 2 算出的feature map 进行max pooling操作。就只是把每个框中最大的那个数字取出来,就完成了。

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第14张图片

 对原图进行Convolutional操作和Max pooling 操作后,得到如图的feature map。

有几个filter就有几个channel。 

问题:如果第一层卷积层有25个filter,第二层卷积层也有25个filter,那这样第二层的output会是25*25个feature map吗?

答:不是,output仍然是25个,只是这25个output的形状是一个立体的正方体。可以把这些正方体每一个看成是25个feature map叠起来的。所以不严谨的说,仍然有25*25个feature map,只是这些feature map以25个为一组,组成25个正方体,所以output才只有25个。

Flatten

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第15张图片

把得到的feature map 拉直,变成N行1列,然后丢到全连接层就结束了。

CNN in Keras

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第16张图片

CNN的input是高维的vector,高维的vector也叫tensor 。因为一张图片有长宽两个维度,再加上RGB颜色的通道就变成3个维度了。

上图的第一层卷积层的每一个filter有9个参数,因为每一个filter大小为3*3 。

上图的第二层卷积层的每一个filter有225个参数,因为它的input,即第一层有25个filter,每个filter有9个参数,所以第二层卷积层的每一个filter的大小其实是有25*3*3。

What does CNN learn?

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第17张图片

在网络的深层,每个filter在检测什么东西其实是人类无法理解的。这里介绍的方法可以知道每个filter在检测什么东西。

如上图,是一个feature map,从刚才的知识可以知道,feature map中的某一个值越大,代表这个地方有找到目标的特征。

而用 a^k 来代表这个filter被激活的程度,就是把feature map的所有值累加起来。

所以,只要用gradient ascent找出能使 a^k 最大的input,就知道这个filter在检测的东西是什么。

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第18张图片

这个CNN网络是检测手写数字mnist的。

用刚才的方法之后,可以看到filter在检测的东西就是上图这些东西,12格代表12个filter在检测的特征。

反正就是人类看不懂的。。

 

上面讲的是卷积层的每一个filter(每一个神经元)检测的东西。下面看看全连接层里的神经元又在检测什么东西。

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第19张图片

还是刚才的做法,可以看到仍然是一堆人类看不懂的特征。看不出和手写数字到底有什么联系。

不过还是能看出和刚才卷积层的filter检测的pattern是长不一样,因为全连接层的神经元看的是整张图,而卷积层的神经元(filter)看的只是图中的一小块。

接下来再看看output layer的神经元。

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第20张图片

可以看到仍然没有数字的出现,在CNN看来这些图片就各自代表这些数字。

为了得到人类比较稍微能看得懂的东西,需要对找出来 x 加一些限制。

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第21张图片

以人类的认知,如果一张图片有数字1的话,就只是中间那里有“墨水”(假设数值为1),其余的地方都应该是白色的(假设数值为0)。所以应该给生成的input x  加一些限制,使它有墨水的地方越小越好。 

如上图,给 x 加一个L1 正则项(更多关于L1正则的内容可以看上一篇笔记)。

加了L1正则项后,可以看到生成的图片就有亿点像数字了。。。 

 

Deep Dream

这个做法可以让你看到CNN所看到的东西。步骤如下:

  1. 先输入一张普通图片(左图)
  2. 选取其中某一层layer的output,让它正的越大,负的越小。这一步就是使CNN看到的东西更加“夸大化”。
  3. 重新输入一张图片,让这张新的图片经过刚才修改过的layer,得到越接近修改过的output越好。

修改后的结果如右图所示。

这个做法还有一个进阶版,叫Deep Style。

Deep Style

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第22张图片

步骤如下:

  1. 把一张普通的图片丢给CNN,然后得到filter的output,即这张图片包含怎样的特征。 
  2. 把呐喊这样图也丢到CNN,得到filter间的corelation。
  3. 用一个CNN,生成一张图片,这张图片的filter output的value要像左边的图,而filter间的corelation又要像右边的图。
  4. 然后就得到一张类似两者融合过的图。

CNN的应用

下围棋

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第23张图片

做法就是输入一张棋谱,让Network判断下一步应该怎么走。

这个过程,不用CNN也能做到,但用了CNN后会表现更好。

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第24张图片

比如:用了CNN以后,即便相同的pattern在棋盘中不同的位置,也都能识别出来。 

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第25张图片

刚才说过Max Pooling会去掉图中的某些pixel,在物体检测可能不会造成太大影响。但如果是把棋盘的每一个格子都当成图像的pixel的话,就不能随便使用Max Pooling。

所以 Alpha Go中并没有使用Max Pooling。

语音识别

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第26张图片

把语音转成语谱图(spectrogram),把这张图丢给CNN去识别。

在语音识别中,filter的长和image的大小一样大,它的移动方向是frequency的方向(竖的),而不是time的方向(横的)。

 文字识别

【李宏毅机器学习笔记】9、卷积神经网络(Convolutional Neural Network,CNN)_第27张图片

把每个字母用vector表示,这样一个句子的所有字母排起来,就相当于这些vector排起来,就形成一张image。

当CNN用在文字处理上,filter的高和image的高是一样的。这个filter的方向沿着句子的方向向右移动的。

 

你可能感兴趣的:(机器学习,深度学习,机器学习,深度学习)