禁止转载
前言
如果只打算看和机器学习有关的变分法,只需要看到小结这一章即可,后面的内容可以不用看。
一个概率分布问题
介绍变分法之前,先抛出一个和机器学习有关的概率问题:
一个一维分布p(x):
- 若已知期望为μ,方差为σ2,熵最大的情况下p是什么分布?
- 不要问题1的条件,换成若已知随机变量的取值范围在(a,b),熵最大的情况下p是什么分布?
对于问题1,可形式化为
pmaxs.t.∫−∞∞−p(x)lnp(x)dx∫−∞∞p(x)dx=1∫−∞∞xp(x)dx=μ∫−∞∞(x−μ)2p(x)dx=σ2
对于问题2,可形式化为
pmaxs.t.∫ab−p(x)lnp(x)dx∫abp(x)dx=1
仔细观察之后,会发现上述问题并不好做,似乎和我们以前遇到的优化问题不同,区别在于优化目标p是一个函数,而不是一个或几个标量
为了解决这种优化问题,我们需要引入新的工具——变分法
变分法
- 泛函:首先引入泛函的概念,泛函指定义域为函数集合,值域为实数的“函数”,即函数的函数。而变分法则是处理泛函的数学领域(泛函分析则是研究对象主要为函数构成的函数空间的数学领域)
- 历史:变分法最早是为了解决最速降线问题而设计的,在理论物理当中应用非常多
预备定理
如果∫abM(x)η(x)dx=0,M在(a,b)上连续,η为任意函数,η(a)=0,η(b)=0,那么∀x∈(a,b),M(x)=0.
证明:
令η(x)=−M(x)(x−a)(x−b),则M(x)η(x)=M(x)2[−(x−a)(x−b)]≥0,所以M(x)=0.
类似的代数证法,可以扩展到多变量问题,若∫ab[M(x)η(x)+N(x)ξ(x)]dx=0,η,ξ为任意函数,且在a,b两点为0,则M(x)=0,N(x)=0.
这个定理先放在这,在推导Euler方程最后一步时会用
优化问题与函数集合
给定一个关于函数yˉ(x)的待求优化问题
yˉmin∫x1x2F(x,yˉ,yˉ′)dx
而且我们假定yˉ(x1)和yˉ(x2)已知,
如果y(x)是待求最优解,则函数yˉ可以描述为
yˉ(x)=y(x)+ϵη(x)
其中η是任意函数,满足η(x1)=0,η(x2)=0(很重要,后面要用),η可以看作是对F的一个扰动,ϵ是一个实数,通过改变η和ϵ,可以形成关于yˉ的函数族。
而且yˉ的一阶导数为
yˉ′=y′+ϵη′
所以原问题的目标函数可以写为
∫x1x2F(x,y+ϵη,y′+ϵη′)dx(1)
Euler方程第一形式
注意式(1)中y和η都是关于x的函数,所以式(1)的积分结果是一个关于ϵ的函数,记为I(ϵ)。
一方面,观察到当ϵ→0时,无论η取什么,都有yˉ→y. 也即,无论η取什么,ϵ=0都是I(ϵ)极小值点,所以
dϵdI∣∣ϵ=0=0(2)
另一方面,
dϵdI=∫x1x2∂ϵ∂Fdx(3)
对于∂ϵ∂F,记u=y+ϵη,v=y′+ϵη′,则
∂ϵ∂F=∂x∂F∂ϵ∂x+∂u∂F∂ϵ∂u+∂v∂F∂ϵ∂v=∂u∂Fη+∂v∂Fη′
带回式(3)得
dϵdI=∫x1x2(∂u∂Fη+∂v∂Fη′)dx
当ϵ=0时,u=y,v=y′,所以
dϵdI∣∣ϵ=0=∫x1x2(∂y∂Fη+∂y′∂Fη′)dx(4)
观察第二项,由分步积分公式∫udv=uv−∫vdu可得
∫x1x2∂y′∂Fη′dx=∂y′∂Fη∣∣x1x2−∫ηd(∂y′∂F)(5)
因为η(x1)=0,η(x2)=0,所以∂y′∂Fη∣∣x1x2=0,代入式(5)得
∫x1x2∂y′∂Fη′dx=−∫ηdxd(∂y′∂F)dx(6)
把式(6)代入式(4)得
dϵdI∣∣ϵ=0=∫x1x2[∂y∂Fη−ηdxd(∂y′∂F)]dx=∫x1x2[∂y∂F−dxd(∂y′∂F)]ηdx
注意η是任意函数,且η(a)=0,η(b)=0,又式(2)可得∫x1x2[∂y∂F−dxd(∂y′∂F)]ηdx=0,所以由预备定理
∂y∂F−dxd(∂y′∂F)=0(7)
式(7)即为Euler方程第一形式,也就是说如果ϵ=0是I的极值,那么就必须满足式(7).
当F不是y′的函数,仅为F(x,y)时,式(7)简化为∂y∂F=0.
概率分布问题的解决
至此,我们就已经可以解决一开始提出的概率分布问题了。
问题1的解决
把形式化再抄一遍,并把目标函数由max换成min:
pmins.t.∫−∞∞p(x)lnp(x)dx∫−∞∞p(x)dx=1∫−∞∞xp(x)dx=μ∫−∞∞(x−μ)2p(x)dx=σ2
用拉格朗日乘子法把该问题转化为无约束问题:
=∫−∞∞p(x)lnp(x)dx+λ1(∫−∞∞p(x)dx−1)+λ2(∫−∞∞xp(x)dx−μ)+λ3(∫−∞∞(x−μ)2p(x)dx−σ2)∫−∞∞[p(x)lnp(x)+λ1p(x)+λ2xp(x)+λ3(x−μ)2p(x)+C(x,λ1,λ2,λ3)]dx
其中C满足∫−∞∞C(x,λ1,λ2,λ3)dx=−λ1−λ2μ−λ3σ2,并看作是一个与p无关的函数。
我们假定p(x)在无穷远处为0,这样就满足了上述介绍的优化问题的形式,
记F(x,p)=plnp+λ1p+λ2xp+λ3(x−μ)2p+C,记最优解为p∗,则由Euler方程第一形式,可得
0=∂p∗∂F=lnp+1+λ1+λ2x+λ3(x−μ)2
即
p=exp{−1−λ1−λ2x−λ3(x−μ)2}(8)
注意这已经是一个高斯函数的形式!
又由三个限制方程
∫−∞∞p(x)dx=1∫−∞∞xp(x)dx=μ∫−∞∞(x−μ)2p(x)dx=σ2
可以从中解出λ1,λ2,λ3,带回式(8)得
p∗(x)=(2πσ2)211exp{−2σ2(x−μ)2}
所以在给定均值和方差的前提下,最大熵对应的分布是高斯分布。
问题2的解决
把形式化再抄一遍,并把目标函数由max换成min:
pmins.t.∫abp(x)lnp(x)dx∫abp(x)dx=1
同问题1,先用拉格朗日乘子法转化成无约束问题:
=∫abp(x)lnp(x)dx+λ1(∫abp(x)dx−1)∫ab[p(x)lnp(x)+λ1p(x)−b−aλ1]dx
我们假定p(x)在a,b两点概率为0,这样就满足了上述介绍的优化问题的形式,
记F(x,p)=plnp+λ1p−b−aλ1,记最优解为p∗,则由Euler方程第一形式,可得
0=∂p∗∂F=lnp+1+λ1
即
p∗=exp{−1−λ1}(9)
注意,这已经是一个均匀分布的形式!
又由限制方程
∫−∞∞p(x)dx=1
可以从中解出λ1,带回式(9)得
p∗(x)=b−a1
所以在有限区间内,最大熵对应的分布是均匀分布。此时无需均值和方差的约束。
小结
- 变分法在机器学习当中是一个很好用的技巧,其实机器学习当中输入为函数,输出为实数,这样的泛函例子并不少见,例如各种散度——衡量了两个分布之间的差异性,散度的泛函又引入了变分推断当中,例如变分自编码器
- 机器学习当中遇到的大多数变分问题都较为简单,往往被积函数F和待求函数y的导数是无关的,也即只需要满足Euler方程中∂y∂F=0就可以
- 后文将继续介绍完整的变分法理论,后续理论在机器学习当中的使用较为罕见,看到这里就可以提前退场了,如果看的很爽,那么就跟我继续看下去吧,2333
变分法(后续)
Euler方程第二形式
注意到
dxdF(x,y,y′)=∂x∂Fdxdx+∂y∂Fdxdy+∂y′∂Fdxdy′=∂x∂F+∂y∂Fy′+∂y′∂Fy′′(10)
因为
dxd(y′∂y′∂F)=y′′∂y′∂F+y′dxd(∂y′∂F)(11)
把式(10)等号右侧第三项带入式(11)可得
dxd(y′∂y′∂F)=[dxdF(x,y,y′)−∂x∂F−∂y∂Fy′]+y′dxd(∂y′∂F)=dxdF(x,y,y′)−∂x∂F−y′[∂y∂F−dxd(∂y′∂F)]
注意到∂y∂F−dxd(∂y′∂F)为Euler方程的第一种形式,所以上式继续化简为
dxd(y′∂y′∂F)=dxdF(x,y,y′)−∂x∂F
即
∂x∂F−dxd(F−y′∂y′∂F)=0(12)
式(12)即为Euler方程第二形式,注意如果F不显含x,那么∂x∂F=0,则有F−y′∂y′∂F=C. 在这种情况下,第二形式非常方便。
变分算子
yˉ=y+ϵη(x)=y+δy
其中,δy就称作对y的变分。
贴参考文献[1]的一张图,说明变分和微分的区别
- 微分:当x变化时,y的变化
- 变分:x不变,人为的对y加扰动
一般我们认为自变量的变分为0(或者说不能变分),例如y(x),认为δx=0,因为在自变量上加扰动没有意义,自变量这个时候应该看作是一个“标准”,其他量以这些“标准”为依据。
变分算子和微分算子的可交换性
dxdδy=dxdϵη(x)=ϵdxdη(x)=ϵη′
另一方面
δdxdy=y′ˉ−y′=ϵη′
所以,变分算子和微分算子的顺序可以交换。
变分算子和积分算子的可交换性
δ∫F(x)dx=∫F(x)dx−∫F(x)dx=∫Fˉ(x)dx−∫F(x)dx=∫[Fˉ(x)−F(x)]dx=∫δF(x)dx
所以,变分算子和积分算子的顺序可以交换。
函数与泛函的变分算子
对于F(x,y,z)
δF=∂x∂Fδx+∂y∂Fδy+∂z∂Fδz
上式子说明了对x,y,z的扰动,是如何产生对F的扰动的
除式的变分公式:
δ(gf)=g2gδf−fδg
多函数的变分
对于多函数的问题,先以两个函数为例:
fˉ,gˉminI=∫x1x2F(x,fˉ,gˉ,fˉ′,gˉ′)dx
类似单变量的方法令最优解为f,g,则有
fˉ=f+ϵηgˉ=g+ϵξ
一方面得到
dϵdI(ϵ)∣∣ϵ=0=0
另一方面
dϵdI(ϵ)∣∣ϵ=0=∫x1x2(Ffη+Fgξ+Ff′η′+Fg′ξ′)dx
用分布及分公式可得
∫x1x2Ff′η′dx=Ff′η∣∣x1x2−∫x1x2ηdFf′=−∫x1x2ηdxd(Ff′)dx
g做类似的处理,带回得
dϵdI(ϵ)∣∣ϵ=0=∫x1x2[(Ff−dxdFf′)]η+[(Fg−dxdFg′)]ξdx
由预备定理得
Ff−dxdFf′=0Fg−dxdFg′=0
上式为多变量得Euler方程,可以看到它与单变量得形式是一致的。对于更多变量得情况,推导结果类似。
双变量单函数的多重积分变分
记
I(ϵ)=∬DF(x1,x2,yˉ,∂x1∂yˉ,∂x2∂yˉ)dx1dx2
则有
dϵdI∣∣ϵ=0=∬D[∂y∂F∂ϵ∂y+∂(∂x1∂y)∂F∂ϵ∂(∂x1∂y)+∂(∂x2∂y)∂F∂ϵ∂(∂x2∂y)]dx1dx2=∬D[∂y∂F∂ϵ∂y+∂(∂x1∂y)∂F∂x1∂(∂ϵ∂y)+∂(∂x2∂y)∂F∂x2∂(∂ϵ∂y)]dx1dx2
首先给出格林公式
∬D[∂x1∂P+∂x2∂Q]dx1dx2=∫CPdx2−Qdx1(13)
如果令
P(x1,x2)=Φ(x1,x2)A(x1,x2)Q(x1,x2)=Φ(x1,x2)B(x1,x2)
带回式(13)得
∬D[A∂x1∂Φ+B∂x2∂Φ]dx1dx2=−∬D(∂x1∂A+∂x2∂B)Φdx1dx2+∫C(Adx2−Bdx1)Φ(14)
所以,如果令
Φ=∂ϵ∂yA=∂(∂x1∂y)∂FB=∂(∂x2∂y)∂F
即yˉ=y+ϵΦ,那么
dϵdI=∬D[∂y∂FΦ+A∂x1∂Φ+B∂x2∂Φ]dx1dx2
把后两项用格林公式(14)替换,得到
dϵdI=∬D[∂y∂F−(∂x1∂A+∂x2∂B)]Φdx1dx2
注意式(14)中的线积分∫C(Adx2−Bdx1)Φ=0,所以线积分直接舍去了,这里非常厉害!!!
线积分为0的原因在于Φ在边界一圈为0,类似於单变量中两个端点的η=0.
由预备定理
∂y∂F−(∂x1∂∂(∂x1∂y)∂F+∂x2∂∂(∂x2∂y)∂F)=0
上式即为双变量函数下的Euler方程,该式和单变量的形式其实是类似的。
参考文献
[1] 变分法 https://www.youtube.com/playlist?list=PL090BE404EFE679E9. B站上也有相同的资源,但是不全
[2] C M. Bishop. Pattern Recognition and Machine Learning Bishop 附录D