为啥要对卷积神经网络进行预训练

Posted

技术标签:

【中文标题】为啥要对卷积神经网络进行预训练【英文标题】:why pretraining for convolutional neural networks为什么要对卷积神经网络进行预训练 【发布时间】:2014-12-12 22:58:35 【问题描述】:

通常反向传播NN存在梯度消失的问题。 我发现卷积神经网络 (CNN) 如何摆脱这种消失的梯度问题(为什么?)。

此外,在一些论文中,还讨论了一些用于 CNN 的预训练方法。 有人可以解释一下吗?

    (1) the resons for pretraining in CNN and 
    (2) what are the problems/limitations with CNN?
    (3) any relavent papers talking about the limitation of CNN?

提前致谢。

【问题讨论】:

只是关于第一点。 CNN 作为其他类型的深度学习方法尝试学习许多节点和层,这会削弱反向传播算法的能力。输出节点中 10% 的误差差异可能导致第一层更新 0.000001%。预训练(无监督方法)不会遇到这个问题,并且可用于在使用反向传播进行微调(并将模式与我们所需的输出相关联)之前更新网络以获得有意义的权重。 尝试在交叉验证中查找此内容:stats.stackexchange.com/search?q=cnn 【参考方案1】:

    预训练是一种正则化技术。它提高了模型的泛化精度。由于网络暴露于大量数据(我们在许多任务中有大量无监督数据),权重参数被带到一个更有可能代表整体数据分布的空间,而不是过度拟合基础数据的特定子集分配。神经网络,尤其是那些具有大量隐藏单元的高模型表示能力的网络,往往会过度拟合您的数据,并且容易受到随机参数初始化的影响。此外,由于初始层以监督方式正确初始化,梯度稀释问题不再那么严重。这就是为什么预训练被用作监督任务的初始步骤,通常使用梯度下降算法进行。

    CNN 与其他神经网络有着相同的命运。参数太多需要调优;最佳输入块大小、隐藏层数、每层特征图数、池化和步幅大小、归一化窗口、学习率等。因此,与其他 ML 技术相比,模型选择问题相对困难。大型网络的训练要么在 GPU 上进行,要么在 CPU 集群上进行。

【讨论】:

我不确定其他神经网络,但我相信 CNN 还不能有效地在集群上进行训练。它通常在 GPU 上完成。我当然希望得到纠正。 我在集群上训练它们,这显然不是一种有效的方法。但是,关于如何在没有 GPU 的大型机器上训练深度网络的工作仍在进行中。如果你好奇,我会推荐你​​看这篇论文:cs.stanford.edu/people/ang/…

以上是关于为啥要对卷积神经网络进行预训练的主要内容,如果未能解决你的问题,请参考以下文章

使用预训练的卷积神经网络__keras实现VGG16

[转] 轻松使用多种预训练卷积网络抽取图像特征

与标准卷积相比,为啥在训练网络时瓶颈结构更慢且占用更多内存?

总结了6种卷积神经网络压缩方法

具有任意数量输入通道(超过 RGB)的卷积神经网络架构

卷积神经网络参数解析