人们在处理带内核的SVM时为什么使用二次编程技术(例如SMO)?梯度下降有什么问题?不能与内核一起使用还是速度太慢(为什么?)。
这里有一些上下文:为了更好地理解SVM,我使用了Gradient Descent通过以下成本函数来训练线性SVM分类器:
我正在使用以下符号:
- 是模型的特征权重,是其偏差参数。
- 是第训练实例的特征向量。
- 是实例的目标类(-1或1)。
- 是训练实例的数量。
- 是正则化超参数。
我从该方程式导出了一个(子)梯度向量(关于和),而Gradient Descent效果很好。
现在,我想解决非线性问题。我可以在成本函数中用替换所有点积,其中是内核函数(例如高斯RBF,),然后使用演算来导出(子)梯度向量并继续进行Gradescent Descent?
如果太慢,那为什么呢?成本函数不是凸的吗?还是因为梯度变化太快(Lipschitz不是连续的),所以算法在下降过程中会不断跳越谷底,因此收敛非常慢?但是,即使那样,又怎么会比二次编程的时间复杂度O({n_ \ text {samples}} ^ 2 \ times n_ \ text {features})更糟呢?如果是局部最小值的问题,采用模拟退火的随机GD不能克服它们吗?