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 版本。
在初始模型上"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 版本。