神经网络(基础框架) -> 深度学习(解决特定问题)
- 卷积(图像相关, 视觉)
- 循环(反复使用, 输入不定长, 时间序列)
- 注意力(为输入分配不同权重, 时间序列)
- …
卷积
- 图像分类
- ImageNet 数据集
- 目标检测
- 图片读取转换文字描述
- 图像风格迁移
- …
什么是视觉
人, 动物, 计算机 看到的是一样的世界么?
人: 光 - 视觉系统 - 总结概念
计算机: 图片像素矩阵 - 模型 - 模型结果
图片: 灰度图(单通道), 彩色图(三通道 RGB)
ANN 实现图片分类
二维数据展开, 构建全连接网络, 通过 softmax 计算得出多分类问题概率
缺陷:
- 二维信息展开丢失维度信息
- 输入层与隐藏层全连接引发维度灾难
卷积神经网络识别图像
- 识别目标逻辑: 特征 - 小特征 - 更小特征…
- 要识别的目标 - 子图
- 点乘(相同位置相乘, 求和) - 乘积大小, 表示特征与子图一致性大小
卷积运算
m 目标图像矩阵(切子图) × n 卷积核(小特征)
=(点乘)=>
m-n+1 新矩阵(激活值), 步长=1
=(激活函数)=>
m-n+1 新图像矩阵(特征图)
一般把图片和特效图统称为 通道
. 一般卷积核称为为过滤器
. 卷积 即 卷积运算, 即点乘运算.
卷积核要素:
- 卷积核形状 shape
- 卷积核值
- 每次计算在目标矩阵移动步长 stride
单通道单卷积核
1 通道输入 - 1 通道卷积核 - 1 特征图
多通道单核卷积
每个通道都有独立的卷积核, 每个通道得到各自特征图后进行融合(求和), 最终得到一个融合特征图.
n 通道输入 - n 通道卷积核 - n 通道临时特征图 - 1 通道融合特征图
多通道多核卷积
n 通道输入 - n×n 通道卷积核 - n×n 通道临时特征图 - n 通道融合特征图
池化运算
卷积后得到的 m 特征图 × n 池化运算(算法,步长)
=(池化算法,求最大值/平均值)=>
m/n 池化矩阵, 步长=池化核 shape
=(通常无激活,或者线性激活)=>
m/n 矩阵
池化要素:
- 池化核形状 shape
- 滑动步长(一般不重叠, 步长=shape)
- 池化方式(最大,平均)
ps: 池化核中没有值, 是一个空框, 算法是计算框中的 max 或 avg.
- 最大池化 $a_n = max(z_n)$
- 平均池化 $a_n = avg(z_n)$
- 带激活函数的池化 $a_n = act(pooling(z_n))$
卷积的特征
卷积与池化拥有如下特征
1. 平移不变性
图像平移, 不影响识别位置变化的图像.
2. 稀疏连接与权值共享
全连接神经网络: 输入矩阵 m => 输出矩阵 n, 链接数 m×n, 参数=连接数 × 2 (w,b)
卷积神经网络: 输入矩阵 m × 卷积核 n => 输出激活矩阵(m-n+1), 连接数 n × (m-n+1), 参数=卷积核数 × 2 (w,b)
稀疏链接: 链接数少; 权值共享: 卷积核参数被多条链接共享.
卷积核大小
卷积核大小与运算量的关系:
运算量 = 卷积核大小 $n^2$ × 特征图大小 $(m-n+1)^2$ ≈ 在 $m=n$ 时 达到最大
卷积层数叠加产生的效果:
例如 $5×5 =(3×3)=> 3×3 =(3×3)> 1×1$, 说明第二次叠加后 $3×3$ 的卷积核再原图上作用的大小因为层数叠加而放大了.
卷积核大小的选择, 一般使用较小的卷积核, 叠加更多层数, 靠前的网络卷积核大小略大于后面层数的卷积核大小.
卷积的图像填充
为了避免经过多层网络运算后, 特征图逐渐变小, 需要在运算前对图像进行填充. 而且在进行填充后, 也可以更好的利用边界值信息参与运算.
一般情况, 填充内容为 0 或者与边界值相同.
填充 p(padding), 步长 s(stride), 图像大小 i(input), 特征图大小 o(output), 卷积核大小 n
o -> i, p, n, s
例如 1: 4×4 =(3×3)=> 2×2, 这时为了保证输出与输入大小不变, 将原输入图扩充卷积核步长 1 得到新输入 6×6 (4×4 周围扩大一圈 1×1 得到 6×6), 4×4 =(1×1 扩充)=> 6×6 =(3×3)=> 4×4.
例如 2: 4×4 =(5×5)=> 1×1, 这时为了得到原图大小, 需要填充 2 得到 8×8 的输入.
o=math.ceil((i+2p-n)/s)+1
卷积流程
- 选择模型, 选择卷积核大小, 选择池化核大小
- 扩充输入
- 卷积计算
- 池化计算
- 反向传输优化参数
卷积发展历史
LeCun - LeNet(MNIST) - AlexNet(ImageNet) -
- VGG 16 - VGG 19 - ResNet
- NIN - GoogleNet - Incption V3/V4 - ResNet
- RCNN - Fast RCNN - SSD
- FCN - StNet - CNN + RM/LSTM
LeNet 手写数字识别(MNIST)
题目, 摘要, 网络结构图
- input: 要处理的图片
32×32
- convolutions:
C
, 卷积 - feature maps:
F
或f.maps
, 特征图6@5×5
- subsampling:
S
, 向下采样 (pooling 池化过程) - full connection: 或 dense,
F
,FC
全连接 - layer: 层
- output: 输出的结果
AlexNet (ImageNet)
- 使用 ReLu 激活函数
- 使用 dropout 技术缓解过拟合: 随机关闭一些神经元不参与运算
- 重叠最大池化: 不使用池化核大小作为步长
VGG
基于 AlexNet 做出的调整, 更灵活适应不同任务