从采样看优化:可导优化与不可导优化的统一视角
By 苏剑林 | 2020-06-23 | 64887位读者 |不少读者都应该知道,损失函数与评测指标的不一致性是机器学习的典型现象之一,比如分类问题中损失函数用交叉熵,评测指标则是准确率或者F1,又比如文本生成中损失函数是teacher-forcing形式的交叉熵,评测指标则是BLEU、ROUGE等。理想情况下,当然是评测什么指标,我们就去优化这个指标,然而评测指标通常都是不可导的,而我们多数都是使用基于梯度的优化器,这就要求最小化的目标必须是可导的,这是不一致性的来源。
前些天在arxiv刷到了一篇名为《MLE-guided parameter search for task loss minimization in neural sequence modeling》的论文,顾名思义,它是研究如何直接优化文本生成的评测指标的。经过阅读,笔者发现这篇论文很有价值,事实上它提供了一种优化评测指标的新思路,适用范围并不局限于文本生成中。不仅如此,它甚至还包含了一种理解可导优化与不可导优化的统一视角。
采样视角 #
首先,我们可以通过采样的视角来重新看待优化问题:设模型当前参数为θ,优化目标为l(θ),我们希望决定下一步的更新量Δθ,为此,我们先构建分布
p(Δθ|θ)=e−[l(θ+Δθ)−l(θ)]/αZ(θ),Z(θ)=∫e−[l(θ+Δθ)−l(θ)]/αd(Δθ)
其中α>0是一个超参数。这个分布的意义很明显,就是将Δθ视为一个随机变量,而使得l(θ+Δθ)越小的Δθ出现概率则越大。有了这个分布之后,我们定义下一步的更新量为它的期望
Δθ∗=∫p(Δθ|θ)Δθd(Δθ)=EΔθ∼p(Δθ|θ)[Δθ]
在这个视角里边,我们并没有对l(θ)的可导性做假设,因此上述定义对于可导和不可导的优化都是通用的。另外,我们可以通过调节α来控制更新的稳定性,当α→0时,由p(Δθ|θ)的定义可知只有使得l(θ+Δθ)最小的Δθ的概率才不为0,这意味着Δθ∗就是下降得最快的方向;当α→+∞时,p(Δθ|θ)趋于均匀分布,所以Δθ∗趋于0,也就是最稳。通过选择一个适合的α,理论上可以让优化过程在“快”与“稳”之间达到一个好的平衡,这在直觉上能取得泛化性能更好的结果。
当然,到目前为止的定义还是理论上的,我们还不知道p(Δθ|θ)的解析形式,也不知道如何从里边采样,更不用说算它的期望值的。下面我们将会看到,这个理论形式是如何逐步实践到可导场景和不可导场景的。
可导目标 #
对于可导的l(θ),我们虽然不能精确求出p(Δθ|θ)来,但是我们可以做泰勒展开得到一个近似分布,进而去估算Δθ∗。结果显示,展开到一阶、二阶近似,我们分别可以得到梯度下降法和牛顿法。也就是说,梯度下降和牛顿法某种意义上都只是该视角下的一个特例。
梯度下降 #
作为第一次尝试,我们假设l(θ)是一阶可导的,那么由泰勒展式可以得到
l(θ+Δθ)−l(θ)≈Δθ⊤∇θl(θ)
这也就是p(Δθ|θ)∼e−Δθ⊤∇θl(θ)/α,如果Δθ无约束,那么是无法完成归一化的,我们不妨限制‖Δθ‖≤ϵ,并且记∇θl(θ)=g,那么
p(Δθ|θ)=e−Δθ⊤g/αZ(g),Z(g)=∫‖Δθ‖≤ϵe−Δθ⊤g/αd(Δθ)
而很明显Δθ∗=−α∇glnZ(g),所以关键是求出Z(g)。设Δθ与g的夹角为η,那么
Z(g)=∫‖Δθ‖≤ϵe−‖Δθ‖×‖g‖×(cosη)/αd(Δθ)
这是一个在高维超球内的积分,由于各向同性的存在,所以当模长‖g‖固定后,整个积分结果也就固定了,也就是说Z(g)只跟g的模长有关,跟它的方向无关,所以也可以记为Z(‖g‖)。我们不需要知道Z(‖g‖)的具体形式,知道它仅仅是模长‖g‖的函数就行了,这时候
Δθ∗=−α∇glnZ(g)=−Z′(‖g‖)Z(‖g‖)α∇g‖g‖=−Z′(‖g‖)Z(‖g‖)αg‖g‖
所以Δθ∗的方向就是−g的方向,也就是梯度的反方向,这样我们就导出梯度下降了,可以说它是式(2)的一阶近似。另外,具体算出Z(g)也是可以的,只不过它并非初等函数,过程可以参考stackexchange上的讨论 Integral of exp over the unit ball。
牛顿法 #
如果l(θ)是二阶可导的,那么可以展开到二阶
l(θ+Δθ)−l(θ)≈Δθ⊤∇θl(θ)+12Δθ⊤∇2θl(θ)Δθ
记g=∇θl(θ),H=∇2θl(θ),我们就有
logp(Δθ|θ)∼−Δθ⊤g−12Δθ⊤HΔθ=−12(Δθ+H−1g)⊤H(Δθ+H−1g)+12g⊤H−1g
很明显,因为p(Δθ|θ)的指数部分关于θ是二次的,所以p(Δθ|θ)是一个高斯分布,而上式则意味着该高斯分布的均值为−H−1g、协方差矩阵为H−1,所以Δθ∗=−H−1g,这个结果对应的就是牛顿法了,因此可以说牛顿法是式(2)的二阶近似。
不可导目标 #
对于不可导的l(θ),上述的泰勒展开近似也就无法做到了,理论上我们只能通过直接采样的方式去估算Δθ∗了,而原论文则提出,我们可以通过重要性采样来提高采样效率和估算精度,这就是论文的核心思想和主要贡献了。
重要性采样 #
这里先一般化地简介一下重要性采样(Importance Sampling)概念。设有概率分布p(x),以及函数f(x),我们要估算
∫p(x)f(x)dx=Ex∼p(x)[f(x)]
这也要求我们从p(x)中采样出若干个样本x1,x2,…,xn出来,然后去算1nn∑i=1f(xi)。然而,这里边可能存在两个困难:
1、我们可能根本不知道怎么从p(x)里边采样;
2、就算我们知道怎么从p(x)中采样,但对于类似变分自编码器的场景,p(x)是带参数的,需要保留梯度,而直接采样计算不一定能做到这一点。
这种情况下,或许重要性采样能帮助我们,它需要我们找到一个既知道概率密度的表达式、又方便采样的分布q(x),然后作如下改写:
∫p(x)f(x)dx=∫q(x)[p(x)q(x)f(x)]dx=Ex∼q(x)[p(x)q(x)f(x)]
这时候采样转移到了q(x)上,而根据我们的假设,q(x)采样是容易进行的,并且q(x)的解析式已经知道,所以p(x)q(x)f(x)也是可以计算的,如果p(x)有参数需要计算梯度,那么它的梯度也得到了保留。很明显,如果q(x)越接近p(x),估算效率就越高,q(x)代表着对p(x)各个样本的“重要性”的一种先验估计,因此这种思路就称为重要性采样。
这样一来,假设x1,x2,…,xn∼q(x),我们就有
Ex∼p(x)[f(x)]≈1nn∑i=1p(xi)q(xi)f(xi)
不过,还有一个小问题,式(10)或式(11)都要求我们知道p(x)的精确表达式,有时候这一点我们也不能做到,比如前面的p(Δθ|θ)我们只知道它正比于e−[l(θ+Δθ)−l(θ)]/α,其归一化因子是没法直接算出来的。这种情况下,我们可以借助关系式
1=∫p(x)dx=∫q(x)[p(x)q(x)]dx=Ex∼q(x)[p(x)q(x)]≈1nn∑i=1p(xi)q(xi)
也就是说[1np(x1)q(x1),1np(x2)q(x2),…,1np(xn)q(xn)]应当是近似归一化的,如果我们只知道p(x)∼ρ(x)而不知道归一化因子,那么我们可以手动完成归一化,此时式(11)变为
Ex∼p(x)[f(x)]≈n∑i=1ρ(xi)/q(xi)n∑i=1ρ(xi)/q(xi)f(xi)
这就省去了归一化因子的计算。
借力可导 #
至此,我们所需要的数学工具都已经准备齐全了,可以正式迎接我们的不可导目标了。假设是l(θ)是评测指标,比如是平均正确率、平均BLEU等,它是我们需要优化的最终目标,但它是不可导的。不过在大多数场景下,我们都能找到一个可导的(近似的)优化目标˜l(θ),而通常我们都是直接用梯度下降优化˜l(θ),这就造成了优化目标与评测指标的不一致性。
但不得不说,很多时候˜l(θ)确实是l(θ)的一个良好近似,换言之−∇θ˜l(θ)确实指出了一个比较靠谱(但不是最优)的更新方向,这时候我们就可以借助重要性采样了。构建q(Δθ|θ)为正态分布N(Δθ;−∇θ˜l(θ),σ2),根据重要性采样的式(13),我们有
Δθ∗=EΔθ∼q(Δθ|θ)[p(Δθ|θ)q(Δθ|θ)Δθ]≈n∑i=1e−[l(θ+Δθi)−l(θ)]/α/N(Δθi;−∇θ˜l(θ),σ2)n∑i=1e−[l(θ+Δθi)−l(θ)]/α/N(Δθi;−∇θ˜l(θ),σ2)Δθi
其中Δθ1,Δθ2,…,Δθn∼N(Δθ;−∇θ˜l(θ),σ2)。除此之外,q(Δθ|θ)还可以使用混合模型,原论文使用的是:
q(Δθ|θ)=λN(Δθ;0,σ2)+(1−λ)N(Δθ;−∇θ˜l(θ),σ2)
大家可能比较关心采样数目,原论文在文本生成任务中选择了n=4,结果就有明显的改善了,说明有了q(Δθ|θ)的“指引”后,n不需要太大。
策略梯度 #
一般情况下,如果需要直接优化评测指标,常见的方法是通过强化学习中的“策略梯度(Policy Gradient)”,所以看到这里的读者也许会有疑问:上述方法跟策略梯度有什么区别吗?孰优孰劣?
假设单个样本的评测指标为l(yt,yp),其中yt是真实标签,yp是预测结果,那么总的平均指标为
l(θ)=E(xt,yt)∼D[l(yt,argmaxypθ(y|xt))]
不可导源于argmax操作,而策略梯度将其变为
˜l(θ)=E(xt,yt)∼D[Ey∼pθ(y|xt)[l(yt,y)]]
然后利用(参考《漫谈重参数:从正态分布到Gumbel Softmax》)
∇θ∫pθ(x)f(x)dx=∫f(x)∇θpθ(x)dx=∫pθ(x)f(x)∇θlogpθ(x)dx
得到
∇θ˜l(θ)=E(xt,yt)∼D[Ey∼pθ(y|xt)[l(yt,y)∇θlogpθ(y|xt)]]
这就是策略梯度的一般形式,也称为REINFORCE估计。
式(14)和式(19)是两种从不同的角度得出的更新方向,它们的区别在哪呢?可以看到,核心的区别在于采样对象:式(14)的采样是EΔθ∼q(Δθ|θ),(19)的采样是Ey∼pθ(y|xt)。所以原论文提供的式(14)是“采样多组参数、每组参数输出一个样本”来计算更新量,策略梯度的式(19)则是“只需一组参数、但要采样输出多个样本”来计算更新量。
从计算量来看,应当是策略梯度计算量少一些,因为Ey∼pθ(y|xt)这一步采样多个样本可以并行来;当然,理论上EΔθ∼q(Δθ|θ)采样多组参数来预测各自的样本也可以并行来,但并不好写。不过,策略梯度的问题也不少,典型问题就是梯度估计的方差太大,所以都需要普通的似然目标来预训练到差不多了,然后才用策略梯度来微调;而原论文的式(14)则自始至终都试图直接优化评测指标,并且借助可导目标来实现重要性采样,结合了可导优化和不可导优化的优势。
文章小结 #
本文介绍了一个理解优化算法的新视角,在该视角之下可导和不可导目标的优化得到了统一:对于可导的目标函数,在该视角之下分别做一阶和二阶展开,我们分别可以得到梯度下降法和牛顿法;而对于不可导的目标函数,我们借助可导近似来进行重要性采样,同样也可以完成不可导的目标优化。
转载到请包括本文地址:https://spaces.ac.cn/archives/7521
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Jun. 23, 2020). 《从采样看优化:可导优化与不可导优化的统一视角 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/7521
@online{kexuefm-7521,
title={从采样看优化:可导优化与不可导优化的统一视角},
author={苏剑林},
year={2020},
month={Jun},
url={\url{https://spaces.ac.cn/archives/7521}},
}
June 30th, 2020
通过阅读这篇文章,我了解到一种通过采样,对不可导的评测目标进行可导近似的方法,以实现优化目标与评测目标一致的目的。但我注意到,全文仅对评测目标的可导性进行了讨论。在我的理解里,不使用评测目标作为优化目标的原因,除了不可导,还可能是因为评测目标函数非凸。那么,在应用这种方法时,是否应该对近似函数的凸性进行讨论?
讨论这个没有什么意义,因为不管可不可导,深度学习的优化目标就没有几个是凸的,换句话说深度学习的优化目标几乎都是非凸的,而我们就只想要一个极小值点。
August 26th, 2020
你好,可以解释下为什么从(4),推出增量的最佳选择呢
不明白你想问什么,能表达清晰一点吗?
“很明显Δθ∗=−∇glnZ(g)“ 这里我也不太明白
直接根据Z(g)的定义算一下∇glnZ(g)就可以了。
是不是还差一个1/α
确实是,补上去了。
January 9th, 2021
为何将期望(公式2)做为下一步的更新量,这么做是出于什么样的考虑呢?
相当于枚举所有的Δθ,看l(θ+Δθ)相比于l(θ)的下降程度来定义一个权重,然后将所有的Δθ加权平均,作为最终的更新方向,直觉上应该是这样的选择是一个比较稳妥的做法?
并且可以通过调节α来调节平滑程度。比如α→0的话,实际上就相当于取使得l(θ+Δθ)最小的那个Δθ(但其实我们做不到)。
July 13th, 2021
请问“Ey∼pθ(y|xt)这一步采样多个样本可以并行来;当然,理论上EΔθ∼q(Δθ|θ)采样多组参数来预测各自的样本也可以并行来,但并不好写”这部分可以具体讲一下吗?为什么策略梯度的采样可以并行来?
从p(y|x)中采样一般都可以并行来的啊,比如seq2seq模型,对于给定输入x,可以通过随机采样算法,一次性解码出多个结果,甚至可以同时输入多个x,同时解码一批输出,这都不难实现。这取决于p(y|x)本身的设计,跟优化算法没关系。
就是我理解的程序应该是{[采样第一次,计算结果]、[采样第二次,计算结果]……[采样第n次,计算结果],对n次计算取平均}。您说的同时解码出多个结果是怎么样的一个形式吗,我还没有get到
采样也就是一种预测,预测时batch_size=1你就那么容易理解,batch_size > 1你就这么难理解?
还有,如果我要从正态分布中采样100个数,非得要采样完一个之后才能采样下一个?我不能np.random.randn(100)一次性生成?
独立重复采样,既然都说了“独立、重复”,每个样本的采样互不影响,那么可并行性是显然成立的。究竟你心中有哪个信条,让你对这么显然成立的事实都有所怀疑?
April 7th, 2024
(6)中 ∇θ‖g‖ 下标写错啦
谢谢,已经修正。
December 27th, 2024
苏神,公式(8)最后一项是不是应该是12g⊤H−1g?
噢,你是对的,已修正,感谢指出