文章目录
整体思路
在多层感知机中,一层中的 输入输出关系 可以以矩阵相乘 的形式 描述:
v
i
=
W
v
i
−
1
v_i = W_{v_{i-1}}
vi=Wvi−1
卷积神经网络中,隐藏层的输入输出关系由卷积描述(权重矩阵必须是 Toeplitz)
v j = ∑ i = 1 6 w i x i + j − 1 ; j = 1 , 2 , 3 , 4 v_j = \sum_{i=1}^6 w_i x_{i + j - 1}; j = 1, 2, 3, 4 vj=i=1∑6wixi+j−1;j=1,2,3,4
{ w i } i = 1 6 \{w_i\}_{i =1}^6 {wi}i=16 构成所有四个隐藏神经元共享的相同权重集。
卷积神经网络 (CNN) 是一类特殊的多层感知器,非常适合处理具有 网格状拓扑结构 (grid-like topology) 的数据。
这种数据包括:
- 时间序列数据 (time-series data): 一维网格定期采样。
- 图像数据 (Image data): 二维像素网格。
CNN 是在至少一层中使用卷积代替 一般矩阵乘法 的网络。
CNN 是一种将 先验信息 (prior information) 构建到神经网络设计中的方法。
- 网络架构限制 (network architecture restriction) - 使用本地连接 (local connection) 或称 感受野 (receptive fields)。
- 突触权重选择的限制 - 使用权重共享 (weight sharing)。
CNN 有时被设计来 识别二维形状,其对 平移 (translation)、缩放 (scaling)、倾斜 (skewing) 和其他扭曲 (distortions) 具有高度不变性 (high degree of invariance)。
CNN 中的结构约束旨在实现:
- 特征提取 (feature extraction): 每个神经元 从 神经元的局部感受野 获取突触输入,使得它们能提取局部特征。
- 特征映射 (feature mapping): 每个计算层有多个特征映射,它们形成平面,其中神经元*共享相同的突触权重集,有益影响包括: (1) 位移不变性 (shift invariance): 通过卷积和激活函数实现。(2) 减少*参数的数量: 通过权重共享实现。
- 子采样 (subsampling) 或 池化 (pooling): 卷积层之后跟一个 执行局部平均和子采样的计算层。这使得特征图分辨率降低。也能 降低特征图输出 对 移位和其他失真 的敏感性。
典型当代CNN架构
上图表示了 手写字体识别 的 CNN架构设计。四个隐藏层以及一个输出层。
- 第一个隐藏层: 卷积,一共四个 24 × 24 24 \times 24 24×24 神经元 的特征图 (feature maps),每个 神经元 被分配了 大小为 5 × 5 5 \times 5 5×5 的感受野。
- 第二个隐藏层: 子采样以及局部平均,一共 四个 12 × 12 12 \times 12 12×12 神经元 的特征图,每个神经元拥有大小为 2 × 2 2 \times 2 2×2 的感受野。
- 第三个隐藏层: 卷积,一共十二个 8 × 8 8 \times 8 8×8 神经元 的特征图。
- 第四个隐藏层: 子采样以及局部平均,一共 十二个 4 × 4 4 \times 4 4×4 神经元的特征图。
- 最后一层卷积,26 个神经元被分配了可能的 26 个类别,每一个神经元被分配了 4 × 4 4 \times 4 4×4 的感受野。
数学认知
给定两个函数
x
(
n
)
x(n)
x(n)和
ω
(
n
)
\omega(n)
ω(n),这两个函数的卷积被写为:
s
(
n
)
=
∑
k
x
(
k
)
ω
(
n
−
k
)
=
∑
k
x
(
n
−
k
)
ω
(
k
)
s(n) = \sum_kx(k)\omega(n - k) = \sum_kx(n-k)\omega(k)
s(n)=k∑x(k)ω(n−k)=k∑x(n−k)ω(k)
上式表达,将 函数
ω
(
n
)
\omega(n)
ω(n) 相对于
x
(
n
)
x(n)
x(n) 翻转 并将其 滑过 函数
x
(
n
)
x(n)
x(n),每次计算 重叠样本的乘积,注意 卷积的交换性质 (commutative property)。
在神经网络中, x ( n ) x(n) x(n) 是输入,而 ω ( n ) \omega(n) ω(n) 是 核 (kernel) 且 s ( n ) s(n) s(n) 是 特征图。
在二维的情况下,我们有:
s
(
n
,
m
)
=
∑
k
,
l
x
(
k
,
l
)
ω
(
n
−
k
,
m
−
l
)
=
∑
k
,
l
ω
(
k
,
l
)
x
(
n
−
k
,
m
−
l
)
s(n, m) = \sum_{k, l} x(k, l) \omega(n - k, m - l) \\= \sum_{k, l} \omega(k, l) x(n - k, m - l)
s(n,m)=k,l∑x(k,l)ω(n−k,m−l)=k,l∑ω(k,l)x(n−k,m−l)
求和 超过内核 的非零值,通常定义为空间范围有限。
上式中定义的卷积很少被用于 机器学习,机器学习中使用 互相关 cross-correlation (也称为卷积)
s ( n , m ) = ∑ k , l x ( k , l ) ω ( n + k , m + l ) s(n, m) = \sum_{k, l} x(k, l) \omega(n + k, m + l) s(n,m)=k,l∑x(k,l)ω(n+k,m+l)
上图表示了 二维 卷积操作。
卷积的优势
稀疏交互 (Sparse Interactions)
稀疏权重 (sparse weight) 导致需要更少的参数来存储,并提高统计效率。
在深度 CNN 中,更深的层 与 大部分输入间接交互,从而使得网络能够有效地描述复杂的交互。
上图表示 从输入观察的 稀疏连接。
上图表示 从输出观察的 稀疏连接。
参数共享 (Parameter sharing)
我们只学习一组参数,而不是为每个位置学习单独的一组参数。
由于内核通常远小于输入数据大小,因此卷积比密集矩阵乘法更有效。
上图表示了 参数共享,上面指 三元素内核 的中心元素被多次使用。下面指 权重矩阵的中心元素 在全连接架构中 使用一次。
等方差 (Equivariance)
此处考虑的 卷积 导致了一种参数共享形式。该形式生成 称为 平移等方差 (equivariance to translation) 属性。在信号处理中,这与 线性时间不变性 相同。
等方差 意味着 如果输入改变,输出也会以同样的方式改变。
比如,我们让 g g g 将一张图片 I I I 映射为 另一张图片 I ′ I^{'} I′, I ′ = g ( I ) I ′ ( x , y ) = I ( x − 1 , y ) I^{'} = g(I)I^{'}(x, y) = I(x - 1, y) I′=g(I)I′(x,y)=I(x−1,y)。映射之后,应用卷积 与 应用卷积之后转换 的结果相同。
在数据流中,如果我们在 时间 (空间) 上 延迟一个特征,则相同的表示会稍后出现在输出中 (按延迟量)。
池化 (Pooling)
池化函数 用 附近输出的汇总统计量 (summary statistic) 替换 特定位置的网络输出。
例子:
- 最大池化 (max-pooling) 操作 报告 矩形邻域内 的最大输出。
- 矩形邻域 的 L 2 L_2 L2 范数。
- 基于与 中心像素距离的 加权平均值 (weighted average)。
最大池化的例子 (宽是 3,步幅 (stride) 为 1)
池化有助于使 表示 对输入的小转换 近似不变 (approximately invariant)。
上图表示 宽度为 3 和 步幅为 1 的最大池化 和 输入向右移动 (以显示平移不变性)
池化的使用 可以解释为使用 强先验 (strong prior),即正在学习的函数 (在层中) 必须对小平移 保持不变。
对 空间区域 (spatial region) 的池化导致平移不变性。
对 分离参数化卷积 (separately parametrized convolutions) 的池化 导致 学习转换不变性 (learning transformation that are invariant)。
如上图,池化 使用 单独参数 学习的 多个特征 可以学习对输入的变换保持不变。
上图表示 下采样池化 (downsampling pooling): 最大池化,池宽为 3,池之间的步幅为 2。