卷积神经网络CNN |李宏毅机器学习【9】
卷积神经网络(Convolutional Neural Network, CNN)是一类具有特殊结构的神经网络,在图像识别和语音识别领域领域具有不可替代的作用。CNN的神奇之处在于它考虑了图像数据的特点,通过特殊的convolution和Pooling结构,在减少参数的同时可以提取到更加抽象的图像特征。
CNN为什么可以应用于图像识别呢?
property1: 下图中的“鸟喙”是一个小的pattern,识别类似的小pattrens不需要整个图片。(神经元部分连接,考虑了像素位置关系)
property2: 相同pattern可能重复出现,可以用同一组参数去detect(权值共用)
property3: 对图片下采样不影响图像识别(下采样,去除不重要特征)
CNN的结构
【convolution—>Max Pooling】*n—>Flatten—>Fullly Connected Feedforward Network
其中convolution—>Max Pooling可以重复很多次
Convolution对应前面的Property1和2,Max Pooling对应Property3.
convolution利用filter来侦测pattern,每个filter是一个参数矩阵,这些参数是需要学习的。
如果图像数据有多层,那么每个filter也应该有相同的层数,而filter的数量是需要人为设定的。
每个filter可以视为一个特殊的pattern detector,只有输入特定的数据,它才可以被“**”(得到较大的值)。如下图中,左上和左下两个pattern刚好可以使得Filter得到较大的值3。
每个filter就可以产生一个Featre Map,所以有多少个filter,就有相同数量的Feature Map。
其实CNN可以看做FCFN的简化版,相比于FCFN,CNN只连接了特定部分的神经元,减少了参数数量。
而且通过权值共享进一步减少了参数数量!
通过Max Pooling留下重要的特征,图像的变得更“小”。
Flatten,将数据展开为一个向量,作为全连接神经网络的输入。
keras实现
第一次convolution,每个filter参数个数是3*3 = 9
第二次convolution,每个filter参数个数是25*3*3 = 225(每个filter有25层)
CNN到底学了什么?
在本例中,第二次convolution会产生59个11*11的feature map。那么逆向思考一下,什么样的图像才能**这些filter?
可以看到,不同的图片可以**对应的filter,这些图片由一些重复的图案组成。
下图展示了可以**后层神经元的图片,可以看到这些图片更加的复杂抽象了一些。
CNN在AlphaGo中的应用
一个棋盘可以看做一张图片
通过下棋的历史数据训练得到下一步落子的位置。
围棋中也存在小的pattern,而且是可能重复出现的。
因为围棋下采样没有什么意义,所以在AlphaGo的CNN中没有用Max Pooling!