论文出处:
文章1:《Convolutional Neural Support Vector Machines: Hybrid Visual Pattern Classifiers
for Multi-robot Systems》 ICMLA2012(C类)
文章2:《Deep Learning using Linear Support Vector Machines》 ICML2013 Workshop
简述
- 这两篇文章的模型是一致的(在第二篇的Introduction提到了:Our models are essentially same as the ones proposed in (Zhong & Ghosh, 2000; Nagi et al., 2012), with the minor novelty of using the loss from the L2-SVM instead of the standard hinge loss.)
- 模型可以简单理解成,由于训练集较大,所以需要用到SGD来求解SVM(可以参考文章1中的引用[22] R. Wijnhoven and P. de With, “Fast training of object detection using stochastic gradient descent,” inProc. of the ICPR, Aug. 2010, pp. 424–427),同时,可以通过将SVM的梯度传到CNN中,达到联合训练的目的。(注,事实上,笔者对这两篇文章的模型的理解也不是太有把握,先按照目前的理解进行描述,第二篇作者给出了源码,如果往后有必要了,可能会进行阅读来加深理解)
- 下面描述分成两大部分
- 如何用SGD训练SVM
- 如何将SVM的梯度传回到CNN中进行BP
如何用SGD训练SVM
这部分的描述,主要可以参考文章1的引文[22]。
为什么要用SGD,因为适用了大数据:
- 训练收敛快,耗时短
- 可以在线学习
具体过程:
L1-SVM的损失函数可以写成:
SGD需要导数,于是就是求个导:
另外,文章1做出了改进,加入了一个投影(下图红色部分):
作者做出的解释是:
如何将SVM的梯度传回到CNN中进行BP
这部分的描述,主要可以参考文章2。
由于文章2明确地说它的novelty就是将L1-SVM loss转换成L2-SVM loss,所以我只摘录了文章2如何将SVM梯度传回去CNN的部分。
顺带一提为什么要用L2-SVM loss
- L1-SVM loss,即hinge loss,不是严格可导的(其实只是在单点上不可导,影响不大,作者也给出了它的(刨除了不可求导点的)求导公式)
- 从实验效果看,效果比L1-SVM好一点。
鼠绘了一个渣图来帮助描述。。
如上图,现在需要将loss传回到$\omega_{cnn}$
$\omega_{cnn}$只影响到了$h_n$,而由于SVM中的$\omega_{svm}$已经通过SGD求解得到,可以看成常数,所以$h_n$只影响到loss,于是如果想把梯度传回到CNN,本质上是要知道loss对$\omega_{cnn}$的偏导,根据链式法则,有:
其中第二项参考常规CNN或者NN的BP公式就可以了。第一项作者给出L1-SVM和L2-SVM的公式: