卷积网络的 filters/kernels 从何而来?

Where do filters/kernels for a convolutional network come from?

我看过一些教程示例,例如 UFLDL covolutional net, where they use features obtained by unsupervised learning, or some others,其中内核是手工设计的(使用 Sobel 和 Gabor 检测器,不同的 sharpness/blur 设置等)。奇怪的是,我找不到关于如何为玩具网络以外的东西选择好的内核的一般指南。例如,考虑一个具有许多卷积池层的深度网络,每一层是否使用相同的内核,或者每一层是否有自己的内核子集?如果是这样,这些,更深层的过滤器来自哪里 - 我是否应该对通过第一个卷积和池化层对的数据使用一些无监督学习算法来学习它们?

我知道这个问题没有单一的答案,我很乐意只提供一般方法(一些评论文章会很棒)。

当前的技术水平建议使用反向传播从数据中学习所有卷积层 (ref)。

此外,this paper 推荐小内核 (3x3) 和池化 (2x2)。您应该为每一层训练不同的过滤器。

深度网络中的内核大多使用反向传播(计算梯度)和某些版本的随机梯度下降(优化算法)以监督方式(网络的已知输入和输出)同时进行训练。

不同层的内核通常是独立的。它们可以有不同的大小,它们的数量也可以不同。如何设计网络是一个悬而未决的问题,取决于你的数据和问题本身。

如果您想使用自己的数据集,您应该从现有的预训练网络开始 [Caffe Model Zoo] 并在您的数据集上对其进行微调。这样,网络的架构将被固定,因为您必须尊重原始网络的架构。您可以下载的网络是针对非常大的问题进行训练的,这使得它们能够很好地泛化到其他 classification/regression 问题。如果您的数据集至少部分类似于原始数据集,则经过微调的网络应该可以很好地工作。

获取更多信息的好地方是 Caffe @ CVPR2015 tutorial