卷积神经网络学习笔记

前言

Why CNN for Image

  1. 部分有价值的信息或者模式是远小于整张图片的。例如:对图片分类,当某个神经元检测到鸟嘴、鸟爪后可以判断图片是不是鸟。
    每个神经元,连接到一个小块区域就好。
  2. 相同的模式可能出现在不同区域。例如:不同鸟的图片,鸟嘴的区域不尽相同。
  3. 图片可以做subsampling,对于人来说,是不会影响判断的。

CNN的一般框架

CNN框架CNN框架

  • 卷积对应前两个特性,即特征存在于图片的局部位置和相同的模式可能出现在图片的不同区域。
  • Max pooling 对应subsampling的操作

Layer详解

CNN

卷积神经网络会有多组filter,每个filter是一个矩阵,每个filter其实是相当于一个神经元,每个单元是需要学习的参数。

最简单的卷积过程

卷积过程其实就是filter在图片上进行移动,并且每次filter和图片对应区域进行点积(对应元素乘并相加)。
下面是两个动图方便直观理解,卷积在做什么事情。

卷积原理1卷积原理1

卷积原理2卷积原理2

filter其实是侦测某一种pattern,当某个区域与filter相近时,它们的点积也较大。同一个filter就可以侦测出相同pattern出现在不同区域的情况

  • feature map: 多个filter的结果,一起构成feature map。

问题:如果不同图片里,鸟嘴大小不同,CNN是不能处理这个问题的。

CNN_colorful image 多通道

此时,输入的是一组二维矩阵,相应的filter也成组。

多通道图片多通道图片

CNN vs Fully Connected

CNN可以看做是全连接层去掉部分权重后的结果。
想象把某个filter对应的图片展开,将filter想象成神经元,filter的结果就是某个神经元的输出。
以第一个区域[[1,0,0],[0,1,0],[0,0,1]]为例,将整个图片展开,该区域对应索引为(1,2,3, 7,8,9 13,14,15)的数值,fc就不叫全连接了,可以看成仅连接这几个输入,各参数即为filter的参数。

cnn vs fc(注意颜色对应)cnn vs fc(注意颜色对应)

Max Pooling

对feature map进行max pooling的过程是,对feature map进行分组,每组里面选择平均或者最大值。

max pooling结果max pooling结果

CNN学到了什么?

对于手写数字识别的任务。
假设第k个filter的输出是11x11的矩阵,输入为x
并定义这个filter有多受关注,
ak=i=111j=111aijk a^k = \sum_{i=1}^{11}{\sum_{j=1}^{11}{a_{ij}^k}}

想找出一个x,能让这第k个filter的aka^k最大。
x=argmaxxak x^* = arg max_{x}a^k
(gradient ascent)
我们会得到下面这种图片,它像是图片上的某种纹路。

给定模型,求使得各filter最大的输入的结果。给定模型,求使得各filter最大的输入的结果。

同理,分析fc层的神经元。
分析输出层的神经元。

分析输出层的神经元,什么样的图片可以使得该神经元的值最大。分析输出层的神经元,什么样的图片可以使得该神经元的值最大。

因此,不加任何约束,网络学到的东西和人类想象的东西不太一样。
x=argmax(yii,jxij) x^* = arg max(y^i - \sum_{i,j}{|x_{ij}|})

增加l1正则后,得到图片结果。增加l1正则后,得到图片结果。

看起来更规则一些,也比较像数字。

有意思的点是,alphaGO 也有用到CNN来进行监督的部分,因为围棋具有前两个特性,它的模式是小于棋盘的,且棋盘上可能同时存在多个同样的模式,但是对于特性三来说,直观上是不成立的,将棋盘放缩,它的模式也变了。因此AlphaGO的网络结构中是没有用到Max Pooling的。