卷积神经网络的历史
略
卷积和池化
全连接层
全连接层- 32x32x3的图像输入,将所有像素展开的得到3072x1的向量
- 把向量和权重相乘,假设权重10个
- 得到这一层的输出,一个数字,一共是10个输出值
卷积层
图片.png- 与全连接的区别是“保全空间结构”
- 输入不变还是32x32x3的图像输入
- 替换权重为卷积核,5x5x3的filter
- 将这个卷积核滑过图像的每个位置,计算出每个空间定位时的点积结果
详细介绍卷积过程
- 卷积核总是会将输入量扩展至完全,所以总是一小块空间区域,通常会遍历所有通道。在这采用5x5x3的大小
- 在卷积核和给定图像空间进行点积运算,将卷积核的所有值与图片区域对应的值相乘求和(即点积)再加上偏移值
- 从左上角开始遍历输入图像的所有像素点,每个位置都进行点积,得到一个激活输出
- 滑动的步长,影响输出的大小
- 我们可以使用多个卷积核,用来处理不同的模式或概念
- 六个卷积核会得到6层的激活映射,28x28x6
例子
- 卷积的结果使用ReLU这样的激活函数进行处理
- 或者经过池化层
小结
- 我们一般使用多个卷积核(filter)对输入进行处理,每个卷积核得到一个激活映射,叠加成一个卷积网络(ConvNet),就完成了对这几个卷积核的学习
- 前几层的卷积核一般代表了一些低阶的图像特征,例如:边界
- 而中间层可以得到更加复杂的图像特征,例如:边角、斑点等
- 高层可以获得比中间层更加丰富的内容
- 一个图片输入
- 让它通过好多层
- 先是卷积层(conv),然后通常是非线性层(relu),有了卷积层和非线性层以后会用到池化层(pool)
- 得到输出后,利用全连接层,连接所有卷积输出,并用其获得一个最终的分支函数
例子
- 在这个例子中,我们是如何得到28x28x1的激活映射的呢?
- 下面是一个简化的例子,每次移动一个像素格,得到5x5的输出:
2
3
4
5
- 每次移动两个像素格,得到3x3的输出:
2
3
- 如果一次移动3个像素格呢?
- 输出大小的计算:
- 零填补边界后
- 为什么做零填补?
- 答:保持输出和之前输入大小相同
- 通常卷积核的大小是:3x3,5x5,7x7
- 与之对应零填补的大小:1,2,3
- 如果不进行零填补,经过几个卷积层后,激活映射会快速减小,这是不合适的
计算练习
计算输出大小参数个数计算
总结
总结1x1的卷积层
- 我们也可以做1x1的卷积层,这也是有意义的,相当于在每个深度上计算
卷积层在深度学习框架中的使用
TorchCaffe
视觉之外的卷积神经网络
图片.png 图片.png- 5x5的卷积核代表神经学的5x5的感受野
- 与全链接层对比,全链接层是所有像素与输出联系,而卷积是输入的局部区域与输出联系
池化层的作用
图片.png- 降采样
- 减少参数的数量
- 池化不改变深度
- 一般使用最大池化实现
- 步长的设定,区域不产生重叠
池化层总结
- 接收一个卷积层输入W1×H1×D1
- 需要两个超参数,
- filter(过滤器):F
- stride(步长):S
- 产生一个W2×H2×D2的卷积
- W2=(W1-F)/S+1
- H2=(H1-F)/S+1
- D2=D1
- 没有引入超参数,因为它计算是对输入的一个计算
- 池化层一般不进行零填补
全链接层的作用
- 把所有的信息聚合到一起
一个模拟程序
- 可以在这个模拟程序中模拟卷积神经网络
网友评论