卷积神经网络的导出与实现
概述
本文档由Jake Bouvrie撰写,讨论了卷积神经网络(CNNs)的导出和实现,以及一些简单的扩展。卷积神经网络通过架构本身实现了形式上的正则化,并自动提供了一定程度的平移不变性。本文特别关注于从数据驱动的方式学习滤波器,以提取输入的特征描述。
全连接网络的经典反向传播
在典型的卷积神经网络中,早期分析包括交替的卷积和子采样操作,而架构的最后阶段由通用的多层网络组成。当将最终的二维特征图作为输入传递给全连接的1维网络时,通常会将所有输出图中的特征拼接成一个长输入向量,然后应用标准的反向传播算法。
卷积神经网络
卷积层通常与子采样层交替使用,以减少计算时间并逐步建立更高级的空间和配置不变性。卷积层的前一层特征图与可学习的核进行卷积,并通过激活函数形成输出特征图。每个输出图可能结合多个输入图的卷积。
学习特征图的组合
在文献中,形成给定输出图的输入图通常由手工选择。然而,我们可以在训练过程中尝试学习这些组合。通过softmax函数,我们可以对权重进行约束,以实现稀疏组合。
实现细节
在MATLAB中实现CNN时,主要的计算瓶颈包括在前向传播中对卷积层输出图的下采样,以及在反向传播中对较高子采样层的delta进行上采样以匹配较低卷积层的输出图大小。使用MATLAB内置的图像处理函数进行上采样和下采样操作可能会带来显著的开销。一个更快的替代方法是使用Kronecker积函数。
实际训练问题
在训练CNN时,需要考虑批量更新与在线更新、学习率的选择、误差函数的选择以及使用有限差分来检查反向传播实现的正确性等问题。
参考文献
[1] C.M. Bishop, “Neural Networks for Pattern Recognition”, Oxford University Press, New York, 1995.
[2] FJ. Huang and Y. LeCun, “Large-scale Learning with SVM and Convolutional for Generic Object Categorization”, In: Proc.2006