不少读者都应该知道,损失函数与评测指标的不一致性是机器学习的典型现象之一,比如分类问题中损失函数用交叉熵,评测指标则是准确率或者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)αgg=Z(g)Z(g)αgg
所以Δθ的方向就是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(Δθ|θ)Δθg12ΔθHΔθ=12(Δθ+H1g)H(Δθ+H1g)+12gH1g
很明显,因为p(Δθ|θ)的指数部分关于θ是二次的,所以p(Δθ|θ)是一个高斯分布,而上式则意味着该高斯分布的均值为H1g、协方差矩阵为H1,所以Δθ=H1g,这个结果对应的就是牛顿法了,因此可以说牛顿法是式(2)的二阶近似。

不可导目标 #

对于不可导的l(θ),上述的泰勒展开近似也就无法做到了,理论上我们只能通过直接采样的方式去估算Δθ了,而原论文则提出,我们可以通过重要性采样来提高采样效率和估算精度,这就是论文的核心思想和主要贡献了。

重要性采样 #

这里先一般化地简介一下重要性采样(Importance Sampling)概念。设有概率分布p(x),以及函数f(x),我们要估算
p(x)f(x)dx=Exp(x)[f(x)]
这也要求我们从p(x)中采样出若干个样本x1,x2,,xn出来,然后去算1nni=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=Exq(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,,xnq(x),我们就有
Exp(x)[f(x)]1nni=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=Exq(x)[p(x)q(x)]1nni=1p(xi)q(xi)
也就是说[1np(x1)q(x1),1np(x2)q(x2),,1np(xn)q(xn)]应当是近似归一化的,如果我们只知道p(x)ρ(x)而不知道归一化因子,那么我们可以手动完成归一化,此时式(11)变为
Exp(x)[f(x)]ni=1ρ(xi)/q(xi)ni=1ρ(xi)/q(xi)f(xi)
这就省去了归一化因子的计算。

借力可导 #

至此,我们所需要的数学工具都已经准备齐全了,可以正式迎接我们的不可导目标了。假设是l(θ)是评测指标,比如是平均正确率、平均BLEU等,它是我们需要优化的最终目标,但它是不可导的。不过在大多数场景下,我们都能找到一个可导的(近似的)优化目标˜l(θ),而通常我们都是直接用梯度下降优化˜l(θ),这就造成了优化目标与评测指标的不一致性。

但不得不说,很多时候˜l(θ)确实是l(θ)的一个良好近似,换言之θ˜l(θ)确实指出了一个比较靠谱(但不是最优)的更新方向,这时候我们就可以借助重要性采样了。构建q(Δθ|θ)为正态分布N(Δθ;θ˜l(θ),σ2),根据重要性采样的式(13),我们有
Δθ=EΔθq(Δθ|θ)[p(Δθ|θ)q(Δθ|θ)Δθ]ni=1e[l(θ+Δθi)l(θ)]/α/N(Δθi;θ˜l(θ),σ2)ni=1e[l(θ+Δθi)l(θ)]/α/N(Δθi;θ˜l(θ),σ2)Δθi
其中Δθ1,Δθ2,,ΔθnN(Δθ;θ˜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[Eypθ(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[Eypθ(y|xt)[l(yt,y)θlogpθ(y|xt)]]
这就是策略梯度的一般形式,也称为REINFORCE估计。

(14)和式(19)是两种从不同的角度得出的更新方向,它们的区别在哪呢?可以看到,核心的区别在于采样对象:式(14)的采样是EΔθq(Δθ|θ)(19)的采样是Eypθ(y|xt)。所以原论文提供的式(14)是“采样多组参数、每组参数输出一个样本”来计算更新量,策略梯度的式(19)则是“只需一组参数、但要采样输出多个样本”来计算更新量。

从计算量来看,应当是策略梯度计算量少一些,因为Eypθ(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}},
}