神经网络的学习过程,亦如我们设置了一系列的函数,通过学习,让参数更加合理化,从而拟合从输入到输出的映射关系。
下面,通过 ResNet 结构,来理解神经网络的学习过程。
原图是一张 224x224 的图片,每个像素由 RGB 三种颜色组成。所以,这样图的原始数据量是 224x224x3.
卷积
我们先通过卷积,发现、提取图片的特征。
卷积的输出通道是 64,即卷积核的数量是 64。我们可以选择一个 7x7x3 的卷积核,来捕捉更大的视觉特征,然后通过 padding 来保持特征图的大小不变,它的尺寸和原图一样,都是 224x224。
池化
我们通过池化,降低特征图的维度,更好的提升模型的泛化能力。重在特征的筛选。
卷积完成之后,我们选择一个 3x3 的池化窗口,步长为 2,对每个平面进行池化。每个输出值由 9 个特征决定,且相邻的两个窗口存在重叠,共享信息。
采样过程经过了 2 次,在第一次,我们把 224x224 的特征图(由于不够大,所以需要 padding, 变成 226x226),采样成了 112x112 的特征图。在第二次,我们把 112x112 的特征图,采样成了 56x56 的特征图。
两次池化采样,可以保证特征的连续性。
可以看到,卷积和池化都具备一个窗口,这个窗口可以理解为特征的提取器。但是,它们之间还是有区别的,卷积的窗口内参数是可以通过反向传播调整的,具备有可学习性,而池化窗口的规则是固定的,强调降维和特征不变性。
残差块
接下来,是一系列的隐藏层,它们的作用是提取更抽象的特征。
每个隐藏层都是一个残差块。每个残差块包含两组卷积操作。
第一个卷积,走向归一化处理。归一化通过统一特征图的分布,让特征图的分布更加均匀,从而让模型训练的更加稳定。
归一化后,通过激活函数,把特征图的分布变成非线性的。
重复上述过程,进行第二次卷积和归一化。
第一次卷积并归一化,可以识别多个边缘特征,第二次卷积归一化,将这些特征片段组合起来,形成更复杂的特征。
最终,将两次卷积归一化的结果和捷径连接相加,最后经过激活函数,得到最终的特征图。
为了能够将数据降维并增加通道数,我们可以将数据进一步卷积,向下一层传递。
最终,得到了 7x7x512 的特征图。
全局平均池化
全局平均池化,将特征图的每个通道的特征图,进行平均池化,得到 1x1x512 的特征图。
池化的窗口是 7x7,步长是 1,所以池化后的特征图大小为 1x1。
全连接
池化完成之后,我们把特征图展平成 1x512 个高级特征。然后通过全连接层,把特征图映射到一定数量的类别上。
映射的公式是output = W × feature_vector + b
损失函数和反向传播
以上,其实是一个前向传播过程。我们还需要损失函数和反向传播来修正模型参数。
损失函数,是衡量模型预测值和真实值之间差异的函数。
反向传播,是根据损失函数,调整模型参数的过程。
参考链接
神经网络算法 - 一文搞懂ResNet(残差神经网络)
A 3D Hand Attitude Estimation Method for Fixed Hand Posture Based on Dual-View RGB Images