在初始模型上进行“转移学习”或“再训练”的常见方法是从模型中提取瓶颈层,将瓶颈张量压缩为一个平坦的2048个神经元层,然后添加一个最后一层,再加上与类别数目相匹配的神经元数(最终是softmax)。
我的问题是:将这个瓶颈层训练成一个神经元网络,为什么不将这些高度抽象的2048特征提供给支持向量机,这可能会取得更好的效果?
非常感谢!
发布于 2018-07-09 16:53:27
现在的趋势是执行端到端的学习,而不是让模型学习一些抽象的表示,然后将这个表示提供给其他模型(例如支持向量机)。
这种趋势背后的直觉是:如果您在某个子任务A上优化一个模型B,在另一个子任务S2上优化一个模型B,那么这两个模型都会收敛到一些局部最优解。与通过对整个任务S = (S1 + S2)进行优化所获得的最优相比,两个局部最优组合被认为是次最优。当对模型进行端到端的优化时,您可以一起调整模型的所有部分,以便更好地解决任务。然而,当您拆分您的模型并分别训练它的不同部分时,您会破坏各部分之间的直接信号,并使改进模型A的输出变得更加困难,因为您没有一种直接的方法来同时优化这两个模型。
你的建议在过去很受欢迎。例如,Girshick最初的RCNN论文是使用预先训练的卷积神经网络来提取特征,然后输入支持向量机进行分类。
然而,这种方法在being,快速RCNN的后续迭代中被放弃,支持向量机的步骤被一个softmax所取代。在“快速R-CNN”的表8第5.4节中,作者将同一模型与SVM和softmax进行了比较,得出了softmax略优于SVM版本的结论。
https://stackoverflow.com/questions/51248920
复制相似问题