从动力学角度看优化算法(七):SGD ≈ SVM?
By 苏剑林 | 2020-12-21 | 40030位读者 |众所周知,在深度学习之前,机器学习是SVM(Support Vector Machine,支持向量机)的天下,曾经的它可谓红遍机器学习的大江南北,迷倒万千研究人员,直至今日,“手撕SVM”仍然是大厂流行的面试题之一。然而,时过境迁,当深度学习流行起来之后,第一个革的就是SVM的命,现在只有在某些特别追求效率的场景以及大厂的面试题里边,才能看到SVM的踪迹了。
峰回路转的是,最近Arxiv上的一篇论文《Every Model Learned by Gradient Descent Is Approximately a Kernel Machine》做了一个非常“霸气”的宣言:
任何由梯度下降算法学出来的模型,都是可以近似看成是一个SVM!
这结论真不可谓不“霸气”,因为它已经不只是针对深度学习了,而是只要你用梯度下降优化的,都不过是一个SVM(的近似)。笔者看了一下原论文的分析,感觉确实挺有意思也挺合理的,有助于加深我们对很多模型的理解,遂跟大家分享一下。
SVM基础 #
一般的SVM可以表示为如下形式:
y=g(β+∑iαiK(x,xi))
其中{(xi,yi)}是训练数据对,αi,β是可学习参数,标准核机器的输出是一个标量,所以这里考虑的y,αi,β都是标量。K(x,xi)则称为“核函数”,它衡量了输入x与训练样本xi之间的某种相似度。SVM是更广义的“核机器(Kernel Machine)”模型的一种(可能是最出名的一种),属于“核方法”范畴。
直观理解,其实SVM就是一个检索模型,它检索了输入与所有训练样本的相似度K(x,xi),然后加权求和。所以,严格上来说,SVM的参数量除了各个αi和β外,还包括训练集的输入xi,说白了,它就是把整个训练集都给记下来了。相比之下,深度学习模型也有很多参数,但这些参数都是直接由梯度下降求出来的,并不是直接把训练集存起来,而由于这个特点,所以深度学习模型通常认为是能自动学习到更智能的特征。
解析推导 #
SVM理论不是本文的重点,我们知道它的形式如(1)即可。在这一节中,我们将会推导梯度下降的一个解析解,并且发现这个解跟式(1)具有非常相似的形式,因而我们说梯度下降出来的模型都可以近似看成一个SVM模型。
假设我们的模型是y=fθ(x),θ是可训练参数,单个样本的损失函数是l(yi,fθ(xi)),那么训练所用的损失函数为
L(θ)=∑il(yi,fθ(xi))
为了使得后面的推导更简洁,这里使用了求和的形式,一般情况下是求平均才对,但这不影响最终的结果。在“从动力学角度看优化算法”系列文章中,我们坚持的观点是梯度下降求解参数θ,相当于在求解动力系统
dθdt=−∂L(θ)∂θ=−∑i∂l(yi,fθ(xi))∂θ=−∑i∂l(yi,fθ(xi))∂fθ(xi)∂fθ(xi)∂θ
这同样也是本文的重要出发点。现在,我们考虑fθ(x)的变化情况:
dfθ(x)dt=∑j∂fθ(x)∂θjdθjdt=−∑j∂fθ(x)∂θj∑i∂l(yi,fθ(xi))∂fθ(xi)∂fθ(xi)∂θj=−∑i∂l(yi,fθ(xi))∂fθ(xi)∑j∂fθ(x)∂θj∂fθ(xi)∂θj
可以看到,对j求和这一步,事实上就是梯度的内积⟨∇θfθ(x),∇θfθ(xi)⟩,在神经网络中它还有一个非常酷的名字,叫做“Neural Tangent Kernel”,我们将其记为
Kθ(x,xi)=⟨∇θfθ(x),∇θfθ(xi)⟩=∑j∂fθ(x)∂θj∂fθ(xi)∂θj
并且记αθ,i=−∂l(yi,fθ(xi))∂fθ(xi),那么
dfθ(x)dt=∑iαθ,iKθ(x,xi)
可见,模型fθ(x)每个时刻的变化量都是一个SVM,假如我们已经知道优化过程中θ的变化轨迹为θ(t),t∈[0,T],那么最终的模型就是
fθT(x)=fθ0(x)+∑i∫T0αθ(t),iKθ(t)(x,xi)dt
结果分析 #
经过一番推导,我们的得到了式(7),它是当学习率趋于0的梯度下降的理论解。从推导过程可以看到,这个结果只依赖于梯度下降本身,跟模型具体结构没关系。对于式(7),我们可以从下面的角度理解它。
首先,我们将记β(x)=fθ0(x),它其实就是初始化模型,尽管它理论上是依赖于x的,但很多时候它会表现得接近一个常数(比如多分类模型时,初始化模型的输出通常接近一个均匀分布),因此我们可以将当它是一个常数项。然后,我们可以记
αi(x)=∫T0αθ(t),iKθ(t)(x,xi)dt∫T0Kθ(t)(x,xi)dt,K(x,xi)=∫T0Kθ(t)(x,xi)dt
那么
fθT(x)=β(x)+∑iαi(x)K(x,xi)
这在形式上就跟SVM很像了,区别就在于SVM的αi,β应该是独立于x的,而这里则依赖于x。β(x)我们已经分析过了,而αi(x)由于它是数学期望的形式,被期望的对象不依赖于x,而是权重依赖于x,那么它可能对x的依赖也相对弱些,因此跟β(x)一样,我们也许可以近似地忽略它对x的依赖。不过,在笔者看来,依不依赖x并不算是关键,最重要的是最终的结果呈现出了∑iαi(x)K(x,xi)的形式,那就意味着它在一定程度上也是学习到了一个检索训练集的过程,这才是它真正跟SVM的相似之处。
上述讨论的是输出标量的模型,如果输出是一个d维向量,那么最终形式也是相同的,只不过此时β(x),αi(x)也是一个d维向量,而K(x,xi)是一个d×d的矩阵,这种情况下哪怕β(x),αi(x)与x无关,也不是我们通常意义下的(多分类)SVM模型。但它依然具有∑iαi(x)K(x,xi)的形式,因此某种意义上来说它仍然是检索训练集的操作。
此外,上述结论针对的是(全量)梯度下降,而对于随机梯度下降(SGD)来说,我们不再是用全量数据来算损失函数,对此我们在第一篇《从动力学角度看优化算法(一):从SGD到动量加速》也做过讨论,可以认为SGD是在梯度下降的基础上引入了噪声,也就是收敛路径θ(t)带有随机噪声,其余结果基本不变,因此上述结论对SGD也是成立的。
拓展思考 #
那么,这个结果能给我们带来什么思想冲击呢?原论文在“Discussion”那一节花了相当长的篇幅讨论这个事情,这里我们也来琢磨一下这个事情。
从深度学习的视角来看,这个结果揭示了深层神经网络模型与传统的核方法之间的联系,借助核方法的可解释性来增强神经网络的可解释性。比如,通过梯度内积作为相似度度量,我们或许可以从训练集中检索出与输入相近的训练样本,以解释输出的决策过程。更进一步地,如果该方向能够得到更为精确的量化,那么它有可能大大改进增量学习的方法,即对于新来的标注样本,我们可能只需要想办法往模型中添加ai(x)K(x,xi)的项,而不需要重新训练模型。
反过来看,该结果也许能促进核机器、核方法的发展。传统的核函数依赖于人为定义,而上述梯度内积形式的核函数给我们带来了新的构建核函数的思路,增强核方法对复杂函数的建模能力。同时,由于梯度下降与核机器的相似性,我们最终或许可以通过梯度下降来训练核机器,从而克服核机器在大规模数据下的训练难题,等等。
还有一些别的脑洞可以发散一下,比如我们知道对于凸优化问题有唯一解,并且理论上梯度下降总可以找到这个解,而前面又说梯度下降相当于一个SVM。所以,这是不是意味着所有凸优化问题的解都相当于一个SVM?这个脑洞够不够大?
总之,揭示梯度下降与核机器之间的联系,有助于两者的进一步借鉴与融合,并且有可能发展出一些新的研究思路。
转载到请包括本文地址:https://spaces.ac.cn/archives/8009
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Dec. 21, 2020). 《从动力学角度看优化算法(七):SGD ≈ SVM? 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/8009
@online{kexuefm-8009,
title={从动力学角度看优化算法(七):SGD ≈ SVM?},
author={苏剑林},
year={2020},
month={Dec},
url={\url{https://spaces.ac.cn/archives/8009}},
}
December 21st, 2020
[...]苏剑林. (2020, Dec 21). 《从动力学角度看优化算法(七):SGD ≈ SVM? 》[Blog post]. Retrieved from https://kexue.fm/archives/8009[...]
March 11th, 2021
意味着DNN的能力可能应该是小于等于SVM的? 如果我们提高了SVM的检索速度是不是至少也能打平DNN。
你这样理解也没错,但问题的关键在于SVM的效果依赖于核函数的定义,核函数相当于两个样本之间的相似度,如何去衡量两个样本的相似度这没有通用的解法,比如两张图片的相似度不能用MSE简单度量,而两个句子的相似度就更复杂了。
所以如何根据具体数据来得到更合理的度量?可能还是需要神经网络来学一个度量。OK,这又绕回来神经网络了。
May 20th, 2021
苏神,SVM中α大于0小于C时表示支持向量的点。请求公式(9)中的α的物理含义是什么?
不能是同样的含义吗?
April 29th, 2022
苏老师,如果按照式(7),如果n个样本训练模型有:
fnθT(x)=fθ0(x)+∑i≤n∫T0αθ(t),iKθ(t)(x,xi)dt
m个样本训练模型有:
fmθT(x)=fθ0(x)+∑i≤m∫T0αθ(t),iKθ(t)(x,xi)dt
m+n个样本训练模型有:
fθT(x)=fθ0(x)+∑i≤(m+n)∫T0αθ(t),iKθ(t)(x,xi)dt
也就是 m+n个样本训练模型与m个样本和n个样本独立训练得到的模型有如下关系?
fθT(x)=fnθT(x)+fmθT(x)−fθ0(x)
其实这只是个有启发性的形式解,它并不像看上去那么显式。比如不同数目样本训练的时候,其实θ(t)也是不一样的,所以严格来讲θ(t)也是样本的函数,因此你这个分解就不成立了(也就是说前三个式子的θ(t)并非同一个θ(t))
March 12th, 2025
很有趣,碰巧看过一篇文章和拓展思考中的idea非常相似。
Learning to Reweight Examples for Robust Deep Learning
https://arxiv.org/abs/1803.09050
正确的思路都是相似的~