我们已经知道梯度下降的每一次迭代可以看作求^f(x)=f(xk)+⟨∇f(xk),x−xk⟩+12η∥x−xk∥2的最小值,而^f(x)的选取其实并不是唯一的,换言之我们不一定要选取二次函数。二次函数的特殊性(例如对称性)有时并不能很好的刻画原函数f(x)的几何特性,这可能使得梯度下降算法表现得不那么优秀。假设我们选取另一个函数g(注意必须是凸函数),当然我们还是希望保证其线性部分是不变的,因此实际上我们关注的是g(x)−g(xk)−⟨∇g(xk),x−xk⟩这一项。这一项称为Bregman divergence(布雷格曼散度),记为Dg(x,xk),表示一个函数与自己线性近似的误差。我们的新算法要求f(xk)+⟨∇f(xk),x−xk⟩+1ηDg(x,xk)的最小值,也就是等价地要求⟨∇f(xk),x⟩+1nDg(x,xk)的最小值。注意到∇2xDg(x,y)=∇2xg(x),既然g是凸函数,因此Dg(x,y)关于x也是凸函数。而⟨∇f(xk),x⟩是仿射项,因此⟨∇f(xk),x⟩+1nDg(x,xk)整个函数是凸函数,其最小值点xk+1应当满足梯度为0,因此∇f(xk)+1η∇xDg(xk+1,xk)=0,其中根据定义∇xDg(x,xk)=∇g(x)−∇g(xk),化简得到∇g(xk+1)=∇g(xk)−η∇f(xk)。这就是我们做梯度下降的新方法。
如果选定g,∇g(xk)是容易求出的,但得到了右边的结果∇g(xk+1)以后,怎么反过来求出xk+1呢?这意味着我们要能够求出梯度的逆映射(Rn→Rn)。这要用一个称为Convex conjugate(凸共轭)的方法。我们对于凸函数f定义它的共轭函数f∗(v)=maxy{⟨v,y⟩−f(y)},下面我们证明(∇f)−1(v)=∇f∗(v)始终成立:注意到⟨v,y⟩关于v是仿射的,f是凸的,而对凸函数逐点求最大值依然是凸函数,因此f∗是凸函数。如果v取∇f(x),那么由凸函数的一阶条件有f(y)≥f(x)+⟨v,y−x⟩,整理得到⟨v,y⟩−f(y)≤⟨v,x⟩−f(x),也即f∗(v)=maxy{⟨v,y⟩−f(y)}≤⟨v,x⟩−f(x),而当且仅当y=x时取到等号,因此有f(x)+f∗(v)=⟨v,x⟩对任意x成立。而根据共轭函数的定义,对于任何的v都有f∗(v)≥⟨v,x⟩−f(x),而当v≠∇f(x)时等号不成立。因此f(x)+f∗(v)=⟨v,x⟩这个等式成立当且仅当v=∇f(x)。现在我们发现f∗∗=f始终成立,任何一个函数共轭两次就会回到本身,因为f∗∗(x)=maxv{⟨v,x⟩−f∗(v)}=maxv{⟨v,x⟩+minv′{−⟨v′,v⟩+f(v′)}}≤maxv{⟨v,x⟩−⟨x,v⟩+f(x)}=f(x),f∗∗(x)=maxv{⟨v,x⟩−f∗(v)}≥⟨∇f(x),x⟩−f∗(∇f(x))=f(x),因此f∗∗(x)=f(x)。那么依然取v=∇f(x),那么f(x)+f∗(v)=⟨v,x⟩可以写作f∗∗(x)+f∗(v)=⟨v,x⟩,把这看作上式关于f∗的结论写作f∗(v)+f∗∗(x)=⟨v,x⟩,根据取等条件必须是梯度得到x=∇f∗(v),也即(∇f−1)(v)=∇f∗(v)。
我们把以上这个方法称为镜像下降法(Mirror Descent)。“镜像”其实是从高观点来看上面的算法:我们发现,梯度下降并不是一个仿射不变的算法,这本质上是由于xk+1=xk−η∇f(xk)本身就不是一个“合理”的表达式——梯度并不完全是一个“向量”,因为梯度是微分,而微分是线性映射。只不过在有限维欧氏空间中我们可以用矩阵来表示线性映射,但这种表示是非常依赖于坐标选取的。一个线性空间Rn中所有的线性映射(泛函)Rn→R构成了对偶空间,梯度本质上是对偶空间中的向量。通过上面“镜像下降”的方法,我们实际上把xk+1=xk−η∇f(xk)换作了∇g(xk+1)=∇g(xk)−η∇f(xk),这样的递推式就显得合理了,因为一切都是在对偶空间这一“镜像”中完成了。我们要做的就是通过∇g这一从原空间到对偶空间的映射把xk投影到镜像,在对偶空间中做一步下降,然后再用逆映射还原到原空间。
如何选取凸函数g呢?我们希望Dg是容易求最小值的,并且能比较好地反应f的几何性质。如果g是严格凸的,那么根据凸函数的一阶条件Dg(x,y)>0当且仅当x≠y,同时Dg(x,x)=0。可见Bregman divergence很像是在描述一种“距离平方”。而恰恰,我们现在正是要用它来代替原来的12η∥x−xk∥2这一项。我们有Bregman divergence意义下的余弦定理Dg(x,y)+Dg(x,z)=Dg(x,z)+⟨∇g(z)−∇g(y),x−y⟩。利用距离平方和可以描述钝角,在Bregman divergence意义下就是Dg(y,x0)≥Dg(y,x∗)+Dg(x∗,x0)。这个结论附加上一个凸函数也依然是正确的,因此L(y)+Dg(y,x0)≥L(x∗)+Dg(y,x∗)+Dg(x∗,x0)。结合f(y)>f(xk)+⟨∇f(xk),y−xk⟩得到f(y)−f(xk)≥1η(Dg(y,xk+1)−Dg(xk,xk+1)−Dg(y,xk))。分析可得,如果f是Dg意义下L-Lipschitz的, 那么如果迭代T轮则可以取η=2L√RT,那么有f(xk)≤f(x∗)+L√RT;如果f是L-smooth且g是σ-强凸的(两者的范数必须是同一个,但形式可以自选,这是Mirror Descent优势),那么假设Dg有上界R,那么取η=σL运行T轮有f(xk)≤f(x∗)+LRσT。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
2023-01-03 C++中的模板