卷积神经网络中的滤波器是如何初始化的

7
我读了很多关于卷积神经网络的论文,但有一件事我不太明白,卷积层中的滤波器是如何初始化的? 因为例如在第一层,滤波器应该检测边缘等等。 但如果是随机初始化的话,它可能不太准确?下一层和高级特征也是一样。 另外一个问题是,这些滤波器的值的范围是什么? 非常感谢你!
1个回答

8
你可以随机初始化过滤器,也可以在其他数据集上进行预训练。
一些参考资料:

http://deeplearning.net/tutorial/lenet.html:

请注意,随机初始化的滤波器非常类似于边缘检测器!请注意,我们使用与MLP相同的权重初始化公式。权重从均匀分布中随机抽样,在范围[-1/fan-in, 1/fan-in]内,其中fan-in是隐藏单元的输入数量。对于MLP,这是下一层中单元的数量。对于CNNs,我们必须考虑输入特征映射的数量和感受野的大小。

迁移学习

实际上,很少有人从头开始训练一个完整的卷积网络(使用随机初始化),因为很少有足够大的数据集。相反,通常会在非常大的数据集(例如ImageNet,其中包含120万张带有1000个类别的图像)上预先训练ConvNet,然后将ConvNet用作感兴趣任务的初始化或固定特征提取器。三种主要的转移学习场景如下:

  • ConvNet作为固定特征提取器。采用在ImageNet上预先训练的ConvNet,删除最后一个全连接层(该层的输出是不同任务(例如ImageNet)的1000个类别分数),然后将ConvNet的其余部分视为新数据集的固定特征提取器。在AlexNet中,这将为每个图像计算一个4096-D向量,其中包含分类器之前的隐藏层的激活。我们称这些特征为CNN代码。如果它们在ImageNet上的ConvNet训练期间也进行了阈值处理(通常情况下是这样),则对性能来说,重要的是这些代码被ReLUd(即阈值为零)。一旦您提取了所有图像的4096-D代码,请为新数据集训练线性分类器(例如,线性SVM或Softmax分类器)。
  • 微调ConvNet。第二种策略不仅是在新数据集上替换和重新训练ConvNet的分类器,而且还可以通过继续反向传播来微调预先训练网络的权重。可以微调ConvNet的所有层,也可以保持一些较早的层固定(由于过拟合问题),并仅微调网络的某些更高级别部分。这是因为ConvNet的早期特征包含更通用的特征(例如边缘检测器或颜色斑点检测器),应该对许多任务有用,但是ConvNet的后面几层逐渐变得越来越具体到原始数据集中包含的类别的细节。例如,在ImageNet的情况下,其中包含许多犬种,ConvNet的代表能力的相当大一部分可能被用于特定于区分犬种的特征。

预训练模型。由于现代ConvNets需要在ImageNet上跨多个GPU进行2-3周的训练,因此常见做法是看到人们发布最终的ConvNet检查点,以使其他人可以将网络用于微调。例如,Caffe库具有一个{{link1:模型动物园},人们在其中分享他们的网络权重。

何时以及如何微调?您如何决定在新数据集上执行哪种类型的迁移学习?这是几个因素的函数,但最重要的两个因素是新数据集的大小(小或大)以及其与原始数据集的相似性(例如,图像和类别的内容是否类似于ImageNet或非常不同,例如显微镜图像)。请记住,ConvNet特征在早期层中更通用,在后来的层中更具有原始数据集的特异性。以下是导航4个主要场景的一些常见经验法则:

  1. 新数据集较小且与原始数据集相似

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接