Image Classification
假设图片大小相同
对图片的处理
- 当成三维的tensor
- 高(H),宽(W),channel(C)
- 高与宽代表pixel,图片的大小,channel是RGB
- 每个数值是RGB的强度
- 拉长为向量,向量长度为
Model
一种思路
if Fully Connected Network
- 参数量过大
- 尽管模型弹性变大,但是容易overfitting,而且不好练
Obeservation 1
每个神经元并不需要看到整张图片,只需要看到其中一部分(pattern)就可以
Simplication 1
设定一个Receptive field(感受野)
也就是在3-D tensor中圈定一个范围
一个神经元只考虑自己的Receptive field
如何确定Receptive field
自己决定(domain knowledge)
- 同一个范围可以多个receptive field,
- receptive field之间可以重叠
- 不同神经元使用不同大小的receptive field
- 不同神经元使用不同的channel
- 非正方形的receptive field
Typical Setting 1
- 考虑全部的channel
- receptive field的大小称为 kernel size,不会太大,一般
- 那pattern一定能在的范围内侦测出来吗 关于kernel
- 一个receptive field有一组neurons(例如64个)
- receptive field经过一个步幅(称stride,一般1或2),垂直与水平移动,产生下一个receptive field
- 在边缘时做或不做padding,有多种padding方法
Observation 2
同一个pattern可能出现在图片的不同地方
在上面的简化中,receptive field覆盖了所有地方,即使不同的地方也会被检测到
实际上这几个神经元作用是一样的,为了简化,考虑共享参数
Simplication 2
功能一样的neuron参数一样
他们的参数一样,但是输入不一样,输出就不一样 同一个receptive field的neuron如果参数一样,输出也会一样,所以一般不这么做
Typical setting 2
以receptive field为单位,所有的receptive field的多个neuron一一对应。
receptive field一一对应的神经元参数都是一样的,每一个神经元对应的参数称为filter
Result
模型弹性减小,FC加上receptive field, 加上parameter sharing就是convolutional layer
到这里只讨论了卷积层
使用了convolutional layer称为convolutional neural network,即CNN
另一种思路
在一个网络层里,设定一系列的filter,在图片中获取pattern
如何获取pattern
每个filter里的数值就是模型参数,通过训练固定了某种以数值表示的模式,当这种模式与RGB数值相乘时(图片信息),获得了图片了pattern
- 如何相乘
- 从左到右从上到下以固定stride遍历 (称为convolution)
- 计算inner product(elementwise)
- 每个filter都遍历了整张图,得到一个feature map
- 所有filter得到的feature map叠起来,看作是另一张图片,维度为filter的个数(feature map)
- 对这张新的图片进行下一轮卷积操作
- 此时filter的超参数变成自己设定的大小和图片的channel数 (e.g. 3,3,64)
- 而此时图片的channel数实际上是上一次卷积的filter数目,每次的filter数目是自己设定的
- 不断卷积直到获得足够的pattern信息
关于kernel size
^3eb341
大小的kernel size能否获取到足够的信息描述一个pattern
可以这么理解
在第一层卷积的时候,在原图大小是
在第二层卷积的时候,每个数值都包含着大小的信息,所以再次进行的卷积时,原图大小会变成
随着卷积层数,每次看到的原图信息会增加,不会因为kernel size过小而看不到足够信息
但是应该会有损失
Pooling
Observation 3
对图片进行subsampling不会影响图片的pattern(对应的object)
把偶数列拿掉之类的
Simplication 3
pooling 更接近于activation function,对filter得到的feature map做subsampling
例如max pooling
- 选定一个范围为一组,选其中最大的
一般是几次convolution一次Pooling
Pooling也会一定程度损害结果,所以可能也不用
Entire model
- flatten 把最后的结果拉平然后过一层FC
- 经过softmax计算概率得到分类结果
Application
Alpha GO
棋盘的现状作为输入,下一步落子位置作为输出
当成分类问题的话就是多个棋盘位置的类别选一个类别下
- 棋盘用一个向量表示
- 使用FC可以做
- 但是CNN结果更好
CNN方法
-
把棋盘当成的图片
-
原论文把每个位置使用48个channel表示(domain knowledge)
-
CNN是图像特化的,使用需要与图片有相同的特性
- 棋盘也有小的pattern (原论文作为第一个kernel size)
- 相同的pattern可以出现在不同位置
-
但是棋盘不能subsampling
- 所以直接不用pooling
也可以用在语音,文字上
Problem
普通的CNN没办法处理图像放大缩小或旋转的问题(data argumentation)
这些变化改变了图片的数值,可能会影响结果
- Filter 大小固定,学出来判断多大的pattern也是固定的
- 数据集里有可能可以
- 一些translation可能可以容忍(pooling消除掉了transform的影响)
- 但是总体上应该是 invariant to scaling and rotation
什么样的网络能够解决(现在应该有更多了)
见Spatial Transformer Layer