Tensorflow Inception 模型重新训练,为什么不将瓶颈提供给 SVM?

Tensorflow Inception model retraining, why not feed bottleneck to an SVM?

在初始模型上"transfer-learning"或"retraining"的常用方法是从模型中取出瓶颈层,将瓶颈张量压缩为平坦的 2048 个神经元层,然后添加一个最终的神经元数量与要分类的类别数量相匹配的层(最终是 softmax)。

我的问题是:为什么不将这些高度抽象的 2048 特征提供给 SVM,而不是将这个瓶颈层训练为神经网络,这可能会取得更好的结果?

非常感谢!

如今的趋势是执行端到端学习,而不是让模型学习一些抽象表示,然后将该表示提供给其他模型(例如 SVM)。

这种趋势背后的直觉如下:如果您在某些子任务 S1 上优化模型 A 并在另一个子任务 S2 上优化模型 B,两者模型将收敛到一些局部最优解。与通过优化 full 任务 S = (S1 + S2) 获得的最优值相比,两个局部最优值的组合预计是次优的。在端到端优化模型时,您可以一起调整模型的所有部分以更好地解决任务。但是,当您拆分模型并分别训练其不同部分时,您 break 部分之间的直接 signal 并且更难改善输出模型 A 用于改进模型 B 结果的特定任务,因为您没有直接的方法来同时优化这两个模型。

你的建议在过去很受欢迎。例如,Girshick 的原始 RCNN 论文使用预训练的卷积神经网络提取特征,然后将这些特征馈送到 SVM 进行分类。

然而,这种方法在 R-CNN 的后续迭代中被放弃,Fast RCNN,SVM 步骤被 softmax 取代。在 Fast R-CNN 的 table 8 第 5.4 节中,作者将同一模型与 SVM 与 softmax 进行了比较,他们得出的结论是 softmax 略优于 SVM 版本。