Dense layer -> Convolution layer
-
通过一个有10k维度的单隐藏层的MLP学习ImageNet(有1000个类别的300x300图像)
- 导致了10亿的可学习参数,太大了
- 全连接:一个输出是所有输入的加权求和
-
图片中物体识别两个原则
- 平移不变性:同样的输出不管这个物体在图片的哪个位置
- 本地性:局部像素更和相近的像素相关,图片是连续的
-
将先验信息在模型结构中构建
- 实现更少的参数建模
Convolution layer
-
本地性:全部丢入全连接肯定不行,图片里面像素局部识别就可以了,所以一个输出只从 $k\times k$ 的输入窗口计算
-
平移不变性:目标在图片中平移应该也能用同一套参数计算出来,而不是重新学习,所以输出用同一个 $k\times k$ 的权重(kernel)
-
这样模型的参数大小就不依赖于输入和输出的大小了
-
一个核可以识别出一种模式
Code
- 单通道的卷积
1 | # both input `X` and weight `K` are matrices |
Pooling Layer
-
卷积层对位置是敏感的
- 一个输入像素的平移导致一个像素输出的平移,这当然是不好的,太敏感了鲁棒性就降低了,所以引入了池化层,这样对就对k个像素内的平移就不敏感了
-
一个池化层计算 $k\times k$ 窗口的平均/最大
1 | # h, w: pooling window height and weight |
Convolutional Neural Networks (CNN)
- 一个神经网络用卷积层堆叠来抓取特征
- 在每个卷积层后面使用激活函数
- 使用池化层来降低位置敏感度
- CNN模型是有很多超参数和层连接的深度神经网络