収束率とは?#
私たちが小学 3 年生の時に学んだ数値解析によれば、もし関数 f(x) が収束するならば、すなわち limk→∞∣∣xk−x∗∣∣=0 であり、limk→∞f(xk)=x∗ であるならば、次のようになります:
limk→∞∣∣xk−x∗∣∣∣∣xk+1−x∗∣∣=a
ここで、 a は f(x) の収束率です。
基本理論#
SGD 基礎#
深層学習の問題において、私たちは一般的に次のような問題を解決しようとします:
minxf(x)=∑i=1nfi(x)
ここで、f(x) はモデル、i は各サンプル、x は最適化するパラメータ、n は全サンプルの数です。
そして、SGD を使用してモデルを更新する際は、一般的に次のように更新します:
xt+1=xt−μ∇fixt
これは皆さんも理解できると思いますが、これは勾配更新の公式です。
L- リプシッツと μ- 強凸#
深層学習の分野では、10,000 本の最適化に関する論文を見て、9,900 本は証明の前に次の一文を加えます:
... f は L- 滑らかで μ- 強凸である...
すべてが非常に当然のことのように思えますが、ただ一つの疑問があります —— この 2 つの概念は一体何なのでしょうか? まだ多くの人がこの 2 つの言葉を見るとこの部分を飛ばす条件反射を持っています(私のように)。恐れに直面する時が来ました!
μ- 強凸#
まず、μ- 強凸は関数 f(x) が強凸であることを示し、数学的には次のように表現されます:
f(x2)≥f(x1)+∇f(x1)T(x2−x1)+2μ∣∣x2−x1∣∣2
ここで x1,x2∈Q、Q は f(x) の定義域です。私たちは、凸関数の定義は次のようになります:
f(x2)≥f(x1)+∇f(x1)T(x2−x1)
この式の直感的な意味は、任意の x1 に対して f(x) の接線 f′(x1) が存在し、f(x)≤f′(x1) であることです。
強凸の数学的表現は、実際には凸の条件に二項式 2μ∣∣x2−x1∣∣2 が追加されているだけです。なぜなら、凸関数では、私たちは関数が接線の上にあることを制限していますが、どれだけ上にあるかは言及していません。つまり、関数は接線に無限に近づくことができ、そのような関数は最適化において実行不可能です。したがって、私たちは凸の「度」を下限で制限し、最適化を定量化可能にしています。
詳細な証明については、こちらの文章を参照してください。
L- リプシッツ#
L- リプシッツについては、非常に良い知乎のコラムがありますので、時間がある方はぜひご覧ください。時間がない方のために、私の理解を簡単に説明します。
リプシッツ連続とは、関数 f(x) に対して、すべての x1,x2∈Q(Q は f(x) の定義域)に対して次の条件を満たすことを指します:
∣∣f(x1)−f(x2)∣∣≤L∣∣x1−x2∣∣
非常に直感的に、この式が表す意味は ∣∣f′(x)∣∣≤L であり、したがって f(x) の関数値はある範囲に制限されているということです。
リプシッツ連続の他にも、リプシッツ連続勾配やリプシッツ連続ヘッセ行列があります。リプシッツ連続勾配は関数 f(x) の勾配 / 導関数に関するものです。言い換えれば、もし f′(x) がリプシッツ連続であれば、f(x) はリプシッツ連続勾配を満たします。リプシッツ連続ヘッセ行列も同様で、f′′(x) がリプシッツ連続であれば、f(x) はリプシッツ連続ヘッセ行列を満たします。
私たちが深層学習でよく使うのはリプシッツ連続勾配 (L- 滑らか) です。したがって、私たちはその数学的表現を理解する必要があります:
∣f(x2)−f(x1)−⟨f′(x2),x2−x1⟩≤2L∣∣x2−x1∣∣2
直感的には、これは私たちが f(x) の変化の傾向に制限を加えたことを示しています。絶対値を開くと、この制限がより明確に現れます:
{f(x2)≤f(x1)+⟨f′(x2),x2−x1⟩+2L∣∣x2−x1∣∣2f(x2)≥f(x1)+⟨f′(x2),x2−x1⟩+2L∣∣x2−x1∣∣2
詳細な証明については、こちらの文章を参照してください。
SGD の収束率#
それでは、少し試してみて、SGD の収束率を計算してみましょう。
まず、L- 滑らかの条件を示します:
f(xt+σ)≤f(xt)+∇f(xt)Tσ+2L∣∣σ∣∣2
ここで σ=xt+1−xt=−μ∇fixt です。σ を上式に代入すると:
f(xt+σ)=f(xt−μ∇fixt)=f(xt+1)≤f(xt)−μ∇f(xt)T∇fi(xt)+2μ2L∣∣∇fi(xt)∣∣2
次に、上式の両辺に対して i の期待値を取ります:
Ei(f(xt+1))≤f(xt)−μ∇f(xt)TEi(∇fi(xt))+2μ2LEi∣∣∇fi(xt)∣∣2
ここで、4 つの期待値があります。最初の 2 つの期待値はそのままにしておき、3 つ目の期待値 Ei(∇fi(xt)) は次のようになります:
Ei(∇fi(xt))=n1i=1∑n∇fi(xt)=∇f(xi)
4 つ目の期待値 Ei∣∣∇fi(xt)∣∣2 は少し複雑で、分散を定義して求める必要があります。
私たちは勾配の分散 Var=n1∑i=1n∣∣∇fi(xt)−∇f(xt)∣∣2 と仮定し、この分散を展開すると:
Var=n1i=1∑n∣∣∇fi(xt)−∇f(xt)∣∣2=n1[i=1∑n∣∣∇fi(xt)∣∣2]+n1[i=1∑n∣∣∇f(xt)∣∣2]−n2[i=1∑n⟨∇fi(xt),∇f(xt)⟩]=∣∣∇f(xt)∣∣2+n1[i=1∑n∣∣∇f(xt)∣∣2]−2∣∣∇f(xt)∣∣2=n1i=1∑n∣∣∇f(xt)∣∣2−∣∣∇f(xt)∣∣2
したがって、Ei∣∣∇fi(xt)∣∣2 は次のようになります:
Ei∣∣∇fi(xt)∣∣2=n1∑i=1n∣∣∇fi(xt)∣∣2=Var+∣∣∇f(xt)∣∣2
したがって、上で計算した 2 つの単項期待値を全体に代入すると:
E(f(xt+1))≤E(f(xt))−μ∇f(xt)T∇f(xi)+2μ2L(Var+∣∣∇f(xt)∣∣2)=E(f(xt))−(μ−2μ2L)∣∣∇f(xt)∣∣2+2μ2LVar
次に、私たちは λ- 強凸(ここで λ を使用しているのは、例の学習率と混同しないためです)の数学的表現は次のようになります:
f(x)≥f(x0)+∇f(x0)T(x−x0)+2λ∣∣x−x0∣∣2
私たちは x=x∗,x0=x と置くと、加減を組み合わせて平方和にすると:
f(x∗)≥f(x)+∇f(x)T(x∗−x)+2λ∣∣x∗−x∣∣2=f(x)+2λ1∣∣∇f(x)+λ(x∗−x)∣∣2−2λ1∣∣∇f(x)∣∣2≥f(x)−2λ1∣∣∇f(x)∣∣2
したがって、次のようになります:
∣∣∇f(x)∣∣2≥2λ(f(x)−f(x∗))
上式を期待値の不等式に代入すると:
E(f(xt+1))≤E(f(xt))−2λ(μ−2μ2L)(f(xt)−f(x∗))+2μ2LVar
最後に、μ=L1 とすると:
E[f(xt)−f(x∗)f(xt+1)−f(x∗)]=(1−Lσ)+H
ここで H は SGD が GD に対してもたらす干渉です。