卷积神经网络CNN |李宏毅机器学习【9】

卷积神经网络(Convolutional Neural Network, CNN)是一类具有特殊结构的神经网络,在图像识别和语音识别领域领域具有不可替代的作用。CNN的神奇之处在于它考虑了图像数据的特点,通过特殊的convolution和Pooling结构,在减少参数的同时可以提取到更加抽象的图像特征。

 卷积神经网络CNN |李宏毅机器学习【9】

CNN为什么可以应用于图像识别呢?

property1: 下图中的“鸟喙”是一个小的pattern,识别类似的小pattrens不需要整个图片。(神经元部分连接,考虑了像素位置关系)

卷积神经网络CNN |李宏毅机器学习【9】

property2: 相同pattern可能重复出现,可以用同一组参数去detect(权值共用)

卷积神经网络CNN |李宏毅机器学习【9】

property3: 对图片下采样不影响图像识别(下采样,去除不重要特征)

卷积神经网络CNN |李宏毅机器学习【9】

CNN的结构

【convolution—>Max Pooling】*n—>Flatten—>Fullly Connected Feedforward Network

其中convolution—>Max Pooling可以重复很多次

卷积神经网络CNN |李宏毅机器学习【9】

Convolution对应前面的Property1和2,Max Pooling对应Property3.

卷积神经网络CNN |李宏毅机器学习【9】

convolution利用filter来侦测pattern,每个filter是一个参数矩阵,这些参数是需要学习的。

卷积神经网络CNN |李宏毅机器学习【9】 

如果图像数据有多层,那么每个filter也应该有相同的层数,而filter的数量是需要人为设定的

卷积神经网络CNN |李宏毅机器学习【9】

每个filter可以视为一个特殊的pattern detector,只有输入特定的数据,它才可以被“**”(得到较大的值)。如下图中,左上和左下两个pattern刚好可以使得Filter得到较大的值3。

卷积神经网络CNN |李宏毅机器学习【9】

每个filter就可以产生一个Featre Map,所以有多少个filter,就有相同数量的Feature Map。

卷积神经网络CNN |李宏毅机器学习【9】

其实CNN可以看做FCFN的简化版,相比于FCFN,CNN只连接了特定部分的神经元,减少了参数数量。

卷积神经网络CNN |李宏毅机器学习【9】

而且通过权值共享进一步减少了参数数量!

卷积神经网络CNN |李宏毅机器学习【9】

通过Max Pooling留下重要的特征,图像的变得更“小”。

卷积神经网络CNN |李宏毅机器学习【9】

卷积神经网络CNN |李宏毅机器学习【9】

Flatten,将数据展开为一个向量,作为全连接神经网络的输入。

卷积神经网络CNN |李宏毅机器学习【9】

keras实现

卷积神经网络CNN |李宏毅机器学习【9】

第一次convolution,每个filter参数个数是3*3 = 9

第二次convolution,每个filter参数个数是25*3*3 = 225(每个filter有25层)

卷积神经网络CNN |李宏毅机器学习【9】

卷积神经网络CNN |李宏毅机器学习【9】

CNN到底学了什么?

在本例中,第二次convolution会产生59个11*11的feature map。那么逆向思考一下,什么样的图像才能**这些filter?

卷积神经网络CNN |李宏毅机器学习【9】

可以看到,不同的图片可以**对应的filter,这些图片由一些重复的图案组成。

卷积神经网络CNN |李宏毅机器学习【9】

下图展示了可以**后层神经元的图片,可以看到这些图片更加的复杂抽象了一些。

卷积神经网络CNN |李宏毅机器学习【9】

CNN在AlphaGo中的应用

一个棋盘可以看做一张图片

卷积神经网络CNN |李宏毅机器学习【9】

通过下棋的历史数据训练得到下一步落子的位置。

卷积神经网络CNN |李宏毅机器学习【9】

围棋中也存在小的pattern,而且是可能重复出现的。

卷积神经网络CNN |李宏毅机器学习【9】

因为围棋下采样没有什么意义,所以在AlphaGo的CNN中没有用Max Pooling!

卷积神经网络CNN |李宏毅机器学习【9】