Skip to content

调和级数的前 n 项和 ​

在推导大模型 Decoder 的自注意力的算术强度时,遇到了如下的数列求和问题:

∑i=1Sout1Sin+i= ∑i=1Sout1i−∑i=1Sin1i

这涉及到求调和级数的前 n 项和。所以,本文来研究这个问题。

调和级数的敛散性 ​

我们知道,p-级数具有如下敛散性

∑n=1∞1np{ 发散,p⩽1 收敛,p>1

当 p=1 时,原级数即为调和级数

∑n=1∞1n

为了求出调和级数的前 n 项和,我们需要构造和函数

fn(x)=∑k=1nxkk

将调和级数表示成幂级数 fn(x) 在 x=1 处的函数值 fn(1)。首先对 fn(x) 求一阶导数

fn′(x)=∑k=1nxk−1=1−xn1−x

两边积分,得到

fn(x)=∫1−xn1−xdx⟹fn(1)=∫011−xn1−xdx+fn(0)=∫011−xn1−xdx

求解上述定积分需要借助 Gamma 函数和 Digamma 函数。

Gamma 函数和 Digamma 函数 ​

我们知道,Gamma 函数的定义最初是为了快速计算阶乘的值。它满足

Γ(x)=xΓ(x−1)

欧拉给出了 Gamma 函数的积分定义形式

Γ(x)=∫0+∞tx−1e−tdt

Gamma 函数也被称为第二类欧拉积分。而 Digamma 函数的定义为伽玛函数的对数的导数,即

Ψ(x)=dln⁡Γ(x)dx=Γ′(x)Γ(x)

对 Gamma 函数求导,有

Γ′(x)=ddx∫0+∞tx−1e−tdt=∫0+∞tx−1e−tln⁡tdt⟹Γ′(1)=∫0+∞e−tln⁡tdt=∫01e−tln⁡tdt+∫1+∞e−tln⁡tdt=∫01e−t−1tdt+∫1+∞e−ttdt=−limn→∞(∑k=1n1k−ln⁡n)

这里省略了中间非常复杂的计算。不过,最终我们得到了一个极限,其中恰好包含调和级数和对数函数。如果能够证明这个极限收敛,就能求出调和级数的前 n 项和。

调和级数与对数函数的关系 ​

首先给出结论:虽然调和级数以及极限

limn→∞ln⁡n

都发散,但是它们的差

γ=limn→∞γn=limn→∞(∑k=1n1k−ln⁡n)

收敛。通过 γn 单调递减且有下界,可以证明这个极限存在。我们可以通过计算机求解出这个近似值为

γ≈0.5772156649

它被称作欧拉常数。目前,尚不能证明欧拉常数是有理数还是无理数。

这同时也说明了,调和级数和对数函数是同阶无穷大,即当 n→∞ 时

∑k=1n1k∼ln⁡n

至此,其实我们可以估算调和级数的前 n 项和为

∑k=1n1k≈ln⁡n+γ

并且可以证明

ln⁡(n+1)<∑k=1n1k<ln⁡n+1

Digamma 函数的积分形式 ​

有了欧拉常数 γ,通过一系列推导,可以得到 Digamma 函数的积分形式

Ψ(x)=−γ+∫011−tx−11−tdt

做好了上述铺垫后,我们就可以用 Digamma 函数来计算调和级数的前 n 项和

∑k=1n1n=fn(1)=∫011−tn1−xdx=Ψ(n+1)+γ
最近更新