【李宏毅机器学习笔记】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
-------------------------------------------------------------------------------------------------------
1、图像中要识别的pattern只是整张图的一个区域,所以神经元没必要看整张图片。
上图中的神经元的工作就只是识别图中的鸟喙而已。
2、共享参数,减少参数量
同样的pattern(鸟喙)可能出现在图中的不同区域,但是如果用两个神经元来检测的话就太冗余。因为做的工作都差不多,所以就让这两个神经元的共用一组参数,这样就减少了参数量。
3、下采样图片不会改变物体特征
如上图,即便图片变小了。仍然能一眼看出左右图的鸟是一样的。 这样做也可以使参数量减少。
上图就是CNN的样子,等下会具体说每个部分做的工作。
刚才我们说的三个特点,和CNN中的部件的对应关系如图所示。
输入是一张6*6的黑白图片,数值1的格子代表有墨水。然后有一组filter 1、2……,它们就是network里的神经元。
每个filter就是一个matrix,里面的数值代表的就是参数,这些参数是network去学的,不是人为调的。
3*3的filter就代表它要检测的是3*3大小的pattern。
不同的stride,得到的feature map是不一样的。
这个filter 的主对角线都是1,就代表说这个filter的工作是检测图像有没有出现主对角线也都是1的地方。
如上图,feature map中值比较大的地方,就代表检测的特征出现在原图的地方。
这个就是文中开头说的,只用一个filter就把同一种pattern但是位置不一样都给找出来了。
一个network中会有很多的filter,不同的feature检测不一样的pattern。
这个原图和filter经过卷积运算后得到的就叫做feature map。
现在输入一张彩色图片,由于有R、G、B三个通道,所以等于输入了三张图片,大小为6*6*3。
所以filter也要变成3*3*3 。
filter可以看做是一个简化版的全连接层。如上图。
我们用 filter 1 与 图片做卷积运算后,得到feature map。
为了方便和全连接层对比,把filter的过程用类似全连接层的做法来做的话。就是把6*6的图片拉直,变成36*1的形状。这个全连接层的weight对应filter中的数值(按同样的颜色去对应),可以看到算出来就对应feature map的第一个数值。
可以看到,用 filter 的做法,它一个神经元只连接了9个input。而原本的全连接层是连接所有的input。这样就做到了参数比原来使用全连接层更少。
这时,把filter移动一格,计算出-1。这个过程对应右图新的神经元算出的 -1。
所以,把filter的工作过程按照全连接层的样子表示出来,可以看到对比:
上图是对 filter 1 和filter 2 算出的feature map 进行max pooling操作。就只是把每个框中最大的那个数字取出来,就完成了。
对原图进行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个。
把得到的feature map 拉直,变成N行1列,然后丢到全连接层就结束了。
CNN的input是高维的vector,高维的vector也叫tensor 。因为一张图片有长宽两个维度,再加上RGB颜色的通道就变成3个维度了。
上图的第一层卷积层的每一个filter有9个参数,因为每一个filter大小为3*3 。
上图的第二层卷积层的每一个filter有225个参数,因为它的input,即第一层有25个filter,每个filter有9个参数,所以第二层卷积层的每一个filter的大小其实是有25*3*3。
在网络的深层,每个filter在检测什么东西其实是人类无法理解的。这里介绍的方法可以知道每个filter在检测什么东西。
如上图,是一个feature map,从刚才的知识可以知道,feature map中的某一个值越大,代表这个地方有找到目标的特征。
而用 来代表这个filter被激活的程度,就是把feature map的所有值累加起来。
所以,只要用gradient ascent找出能使 最大的input,就知道这个filter在检测的东西是什么。
这个CNN网络是检测手写数字mnist的。
用刚才的方法之后,可以看到filter在检测的东西就是上图这些东西,12格代表12个filter在检测的特征。
反正就是人类看不懂的。。
上面讲的是卷积层的每一个filter(每一个神经元)检测的东西。下面看看全连接层里的神经元又在检测什么东西。
还是刚才的做法,可以看到仍然是一堆人类看不懂的特征。看不出和手写数字到底有什么联系。
不过还是能看出和刚才卷积层的filter检测的pattern是长不一样,因为全连接层的神经元看的是整张图,而卷积层的神经元(filter)看的只是图中的一小块。
接下来再看看output layer的神经元。
可以看到仍然没有数字的出现,在CNN看来这些图片就各自代表这些数字。
为了得到人类比较稍微能看得懂的东西,需要对找出来 x 加一些限制。
以人类的认知,如果一张图片有数字1的话,就只是中间那里有“墨水”(假设数值为1),其余的地方都应该是白色的(假设数值为0)。所以应该给生成的input x 加一些限制,使它有墨水的地方越小越好。
如上图,给 x 加一个L1 正则项(更多关于L1正则的内容可以看上一篇笔记)。
加了L1正则项后,可以看到生成的图片就有亿点像数字了。。。
这个做法可以让你看到CNN所看到的东西。步骤如下:
修改后的结果如右图所示。
这个做法还有一个进阶版,叫Deep Style。
步骤如下:
做法就是输入一张棋谱,让Network判断下一步应该怎么走。
这个过程,不用CNN也能做到,但用了CNN后会表现更好。
比如:用了CNN以后,即便相同的pattern在棋盘中不同的位置,也都能识别出来。
刚才说过Max Pooling会去掉图中的某些pixel,在物体检测可能不会造成太大影响。但如果是把棋盘的每一个格子都当成图像的pixel的话,就不能随便使用Max Pooling。
所以 Alpha Go中并没有使用Max Pooling。
把语音转成语谱图(spectrogram),把这张图丢给CNN去识别。
在语音识别中,filter的长和image的大小一样大,它的移动方向是frequency的方向(竖的),而不是time的方向(横的)。
把每个字母用vector表示,这样一个句子的所有字母排起来,就相当于这些vector排起来,就形成一张image。
当CNN用在文字处理上,filter的高和image的高是一样的。这个filter的方向沿着句子的方向向右移动的。