凸最適化を読むその0―制約がないときの凸関数の最小点

公開:2020/11/20
更新:2020/11/20
13 min読了の目安(約12300字IDEAアイデア記事

以下のテキスト Convex Optimization – Boyd and Vandenberghe の第3部 Algorithms(9〜11章)を読みます。今回は9章 Unconstrained minimization(制約がないときの最小化) の冒頭部分(457ページ)をみて、出てくる言葉や数学的主張を確認するところまでです。
https://web.stanford.edu/~boyd/cvxbook/
第3部より前の部分についてはつまみ読みなのでテキストの流れに必ずしも沿っていません。数学的主張に定理番号等がふられていないので適当な名前を付けています。私の誤りは私に帰属します。

凸関数を最小化したい

💛 9章では、最小化したい f:RnRf: \mathbb{R}^n→\mathbb{R} は凸関数で2回連続微分可能であるとしているね。
💜 ff が凸関数であるとは、xx から yy に割合 θ\theta だけ歩いた点の値が、(x,f(x))(x, f(x)) から (y,f(y))(y,f(y)) に張った糸のその点での高さと同じかより小さいということでしたよね[1]。下にたわんでいるイメージです。

凸関数の定義
ff が凸関数であるとは、定義域内の任意の x,yx, y と任意の θ[0,1]\theta \in [0,1] に対し、以下が成り立つこと。

f((1θ)x+θy)(1θ)f(x)+θf(y)f( (1-\theta)x + \theta y ) \leqq (1-\theta)f(x) + \theta f(y)


凸関数の定義

💛 うん、そんな ff が最小になる点、最小点を探したい。ここで xx^\ast が最小点であることの定義は、定義域内の任意の xx に対して f(x)f(x)f(x^\ast) \leqq f(x) が成り立つことだね[2]。9章でやりたいのは、具体的にどうやってこの xx^\ast にたどり着くかだ。あ、ここでの仮定として ff に最小点 xx^\ast は存在することにする。対応する最小値を pinfxf(x)=f(x)p^\ast \equiv \inf_x f(x) = f(x^\ast) とおく。
💜 ff が凸関数なのに最小点が存在しないことなんてあるんですか? 下にたわんでいるのに?
💛 f(x)=xf(x) = xf(x)=exf(x) = e^x に最小点はある?
💜 あっ……。f(x)=xf(x) = xf(x)=exf(x) = e^x に最小点の定義を満たす点はないですね。どんな xx をとっても xx をもう少し小さくすればもっと値が小さくなりますから。ff が凸関数であることと、どこかに最小点があることは違いますね。

凸関数が最小になる点はどんな点

💛 さっそく最小点を探そう。といってもどんな点を探せばいいかだけど、ff が微分可能な凸関数ならば、xx^\astff の最小点であることの必要十分条件は f(x)=0\nabla f(x^\ast) = 0 だ(457ページの式9.2)。

微分可能な凸関数の最小点の必要十分条件(制約がない場合)
ff が微分可能な凸関数ならば、xx^\astff の最小点であることの必要十分条件は f(x)=0\nabla f(x^\ast) = 0

💛 だから勾配 f(x)\nabla f(x) がゼロベクトルであるような点 xx を探せばいい。
💜 えっ、うーん……なぜそのような点を探すのでいいんでしょうか。

凸関数の勾配が満たす条件

💛 じゃあ確認しておこう。参照されている 4.2.3 節は 139 ページだね。まず、ff が微分可能な凸関数ならば、定義域内の任意の x,yx, yf(y)f(x)+f(x)(yx)f(y) \geqq f(x) + \nabla f(x) \cdot (y-x) が成り立つ。これはわかる?

微分可能な凸関数の勾配が満たす条件
ff が微分可能な凸関数ならば、定義域内の任意の x,yx, y で以下が成り立つ。

f(y)f(x)+f(x)(yx)f(y) \geqq f(x) + \nabla f(x) \cdot (y-x)

💜 不等式ですね……凸関数の定義と似ていますが、凸関数の定義とは少し違いますね。凸関数の定義では関数の値の方が小さいといっていましたが、その式は関数の値の方が大きいといっているようです。並べて図示すると以下でしょうか。

凸関数の定義(左)と微分可能な凸関数の勾配が満たす条件(右)

💜 なぜ逆になっているんでしょうか……とりあえず、ff が凸関数であることの定義から出発しましょう。この式から f(x)f(x)f(y)f(y) を引っ張り出したいです。
 f((1θ)x+θy)(1θ)f(x)+θf(y)f( (1-\theta)x + \theta y ) \leqq (1-\theta)f(x) + \theta f(y)
 f((1θ)x+θy)f(x)θf(x)+θf(y)\Leftrightarrow f( (1-\theta)x + \theta y ) - f(x) \leqq - \theta f(x) + \theta f(y)
両辺を θ\theta で割れば右辺に f(x)f(x)f(y)f(y) が出ますね。割りましょう。以降 θ(0,1]\theta \in (0,1] としましょう。
 f((1θ)x+θy)f(x)θf(x)+f(y)\displaystyle \frac{f( (1-\theta)x + \theta y ) - f(x)}{\theta} \leqq - f(x) + f(y)
 f(y)f(x)+f((1θ)x+θy)f(x)θ\displaystyle \Leftrightarrow f(y) \geqq f(x) + \frac{f( (1-\theta)x + \theta y ) - f(x)}{\theta}
 f(y)f(x)+f(x+θ(yx))f(x)θ\displaystyle \Leftrightarrow f(y) \geqq f(x) + \frac{f( x + \theta(y-x) ) - f(x)}{\theta}
示したい式に寄せてみましたが……右辺第2項が微分係数の定義のような形をしていますね。微分係数の話にするために、一旦 θ\theta のみが変数であると考えたいです。g(θ)f(x+θ(yx))g(\theta) \equiv f( x + \theta(y-x) ) とおきましょう。なお、f(x)f(x) が微分可能であることより g(θ)g(\theta) も微分可能です。
 f(y)f(x)+g(0+θ)g(0)θ\displaystyle \Leftrightarrow f(y) \geqq f(x) + \frac{g(0 + \theta) - g(0)}{\theta}
これを θ0\theta \to 0 とすることにより、
 f(y)f(x)+dg(θ)dθθ=0\displaystyle f(y) \geqq f(x) + \left. \frac{dg(\theta)}{d\theta} \right|_{\theta = 0}
を得ます。連鎖律で gg の微分を ff の微分でかきましょう。以下、ff の変数を xx にすると最初に選んだ xx と紛らわしいので ff の変数を zz とします。zj(θ)z_j(\theta)x+θ(yx)x + \theta(y -x) の第 jj 成分とします。xj,yjx_j, y_jx,yx, y の第 jj 成分とします。
 dg(θ)dθθ=0=dz1(θ)dθθ=0f(z)z1z=x++dzn(θ)dθθ=0f(z)znz=x\displaystyle \left. \frac{dg(\theta)}{d\theta} \right|_{\theta = 0} = \left. \frac{d z_1(\theta)}{d \theta} \right|_{\theta = 0} \left. \frac{\partial f(z)}{\partial z_1} \right|_{z = x} + \cdots + \left. \frac{d z_n(\theta)}{d \theta} \right|_{\theta = 0} \left. \frac{\partial f(z)}{\partial z_n} \right|_{z = x}
     =(y1x1)f(z)z1z=x++(ynxn)f(z)znz=x\displaystyle \qquad \qquad \; \; = (y_1 - x_1) \left. \frac{\partial f(z)}{\partial z_1} \right|_{z = x} + \cdots + (y_n - x_n) \left. \frac{\partial f(z)}{\partial z_n} \right|_{z = x}
     =f(z)z=x(yx)\displaystyle \qquad \qquad \; \; = \left. \nabla f(z) \right|_{z=x} \cdot (y-x)
     =f(x)(yx)\displaystyle \qquad \qquad \; \; = \nabla f(x) \cdot (y-x)
これを代入することにより、f(y)f(x)+f(x)(yx)f(y) \geqq f(x) +\nabla f(x) \cdot (y-x) は示されますね。示せました!
💛 そうだね。あと、凸関数の定義と比べるなら、凸関数の定義は下図の上段だけど、θ\theta で割ると yy まで歩いたところで高さを比べていることになる(下図の中段)。さらにこの状態で θ0\theta \to 0 とすればいま示した不等式になるよ。だから、「青の点は緑の点より下にある」っていうのは一貫しているかな。

凸関数の定義が微分可能な凸関数の勾配が満たす条件になるまで
💜 あっ、確かに、ずっと青の点は緑の点より下にいますね。変わったのは2つの糸の高さを比べる場所だったんですね。

凸関数の最小点の勾配が満たす必要十分条件

💛 じゃあ次、ff は微分可能な凸関数として、xx^\astff の最小点ならば、定義域内の任意の yy に対して f(x)(yx)0\nabla f(x^\ast) \cdot (y-x^\ast) \geqq 0 であることはわかる?

微分可能な凸関数の最小点の必要十分条件(制約がない場合)(準備)
ff が微分可能な凸関数ならば、xx^\astff の最小点であることの必要十分条件は、定義域内の任意の yy に対して f(x)(yx)0\nabla f(x^\ast) \cdot (y-x^\ast) \geqq 0 であることである。

💜 えっと、まず、xx^\ast が最小点であろうとなかろうと、 f(y)f(x)+f(x)(yx)f(y)f(x)f(x)(yx)f(y) \geqq f(x^\ast) +\nabla f(x^\ast) \cdot (y-x^\ast) \, \Leftrightarrow \, f(y) - f(x^\ast) \geqq \nabla f(x^\ast) \cdot (y-x^\ast) が成り立つことは先ほど示しましたね。これより、任意の yy に対して f(x)(yx)0\nabla f(x^\ast) \cdot (y-x^\ast) \geqq 0 であれば任意の yy に対して f(y)f(x)0f(y) - f(x^\ast) \geqq 0 なので xx^\ast は最小点です。しかし、xx^\ast が最小点であれば任意の yy に対して f(x)(yx)0\nabla f(x^\ast) \cdot (y-x^\ast) \geqq 0 かというのは明らかではありませんね……。
💛 対偶を取ろう。f(x)(yx)<0\nabla f(x^\ast) \cdot (y-x^\ast) < 0 を満たす yy があれば xx^\ast は最小点ではないことを示そう。
💜 f(x)(yx)<0\nabla f(x^\ast) \cdot (y-x^\ast) < 0 なる yy があった場合ですか。以下のような状況でしょうか。

f(x)(yx)<0\nabla f(x^\ast) \cdot (y-x^\ast) < 0 なる yy があった場合
💜 こうしてみると、xx^\ast から yy の向きにほんの少しだけ歩けば ff の値はより小さくなりそうですね。それなら xx^\ast は最小点ではないですね。f(x)(yx)<0\nabla f(x^\ast) \cdot (y-x^\ast) < 0 であることを利用して少しだけ歩いたところの値を得たいですが……少しだけ歩いたところ……ん?

  • 先ほどは f(x+θ(yx))f( x + \theta(y-x) ) があって、θ0\theta \to 0 の極限を取って f(x)(yx)\nabla f(x) \cdot (y-x) を得ましたね。
  • 今回は逆です。先に f(x)(yx)\nabla f(x^\ast) \cdot (y-x^\ast) があって、とても小さい θ\thetaf(x+θ(yx))f( x^\ast + \theta(y-x^\ast) ) を知りたいのですから。

であれば……先ほど同様に、g(θ)f(x+θ(yx))g(\theta) \equiv f( x^\ast + \theta(y-x^\ast) ) とおきましょう。xxxx^\ast にかきかえただけです。f(x)(yx)\nabla f(x^\ast) \cdot (y-x^\ast) は負なので f(x)(yx)=α(α>0)\nabla f(x^\ast) \cdot (y-x^\ast) = - \alpha \, \, \, (\alpha > 0) とおきましょう。そして先ほどの逆をたどります。
 f(x)(yx)=α\nabla f(x^\ast)・(y-x^\ast) =-\alpha
 dg(θ)dθθ=0=α\displaystyle \Leftrightarrow \left. \frac{dg(\theta)}{d\theta} \right|_{\theta = 0} =-\alpha
 limθ0g(0+θ)g(0)θ=α\displaystyle \Leftrightarrow \lim_{\theta \to 0} \frac{g(0 + \theta) - g(0)}{\theta} =-\alpha
 limθ0f(x+θ(yx))f(x)θ=α\displaystyle \Leftrightarrow \lim_{\theta \to 0} \frac{f( x^\ast + \theta(y-x^\ast) ) - f( x^\ast )}{\theta} =-\alpha
そしてこの極限の意味は、任意の正数 ϵ\epsilon に対して、ある δ\delta が存在して、0<θ<δ0 < |\theta| < \delta ならば
 f(x+θ(yx))f(x)θ+α<ϵ\displaystyle \left| \frac{f( x^\ast + \theta(y-x^\ast) ) - f( x^\ast )}{\theta} + \alpha \right| < \epsilon
が成り立つことでしたから、ϵ=α/2\epsilon = \alpha / 2 と取れば 0<θ<δα/20 < |\theta| < \delta_{\alpha/2} を満たす θ\theta
 α2<f(x+θ(yx))f(x)θ+α<α2\displaystyle -\frac{\alpha}{2} < \frac{f( x^\ast + \theta(y-x^\ast) ) - f( x^\ast )}{\theta} + \alpha < \frac{\alpha}{2}
 f(x+θ(yx))f(x)<αθ/2\Rightarrow f( x^\ast + \theta(y-x^\ast) ) - f( x^\ast ) < -\alpha \theta / 2
が成り立ちます。よって xx^\ast は最小点ではありません!

f(x)(yx)<0\nabla f(x^\ast) \cdot (y-x^\ast) < 0 なる yy があったら xx^\ast は最小点ではない(θα\theta_\alpha が取れる)

💛 つまり、xx^\ast が最小点なら、任意の yyf(x)(yx)0\nabla f(x^\ast) \cdot (y-x^\ast) \geqq 0 でなければ駄目だね。
💜 はい。それで、気付いてしまったんですが。
💛 何に?
💜 いま、f(x)(yx)<0\nabla f(x^\ast) \cdot (y-x^\ast) < 0 なる yy があったら xx^\ast は最小点ではないことを示しましたが、f(x)(yx)>0\nabla f(x^\ast) \cdot (y-x^\ast) > 0 なる yy があったとしても xx^\ast は最小点ではないですよね。f(x)(yx)=β(β>0)\nabla f(x^\ast) \cdot (y-x^\ast) = \beta \, \, \, (\beta > 0) とおいて両辺にマイナスをかければ上の導出の要領で、 f(x+θ(xy))f(x)<βθ/2f( x^\ast + \theta(x^\ast - y) ) - f( x^\ast ) < -\beta \theta / 2 が導かれますから。逆向きにほんの少し歩けば ff の値は小さくなります。

f(x)(yx)>0\nabla f(x^\ast) \cdot (y-x^\ast) > 0 なる yy があっても xx^\ast は最小点ではない(θβ\theta_\beta が取れる)

💛 まあそうだね。いまは制約がない場合を考えているからね。
💜 制約?

(参考)制約があるときは

💛 いまは ff の最小点を Rn\mathbb{R}^n 全体から探そうと思っている。最小点を探す範囲に制約がない。でも、制約付きで考える場合もある。例えば「ax=ba \cdot x = b を満たす xx の中で最小化する」みたいに。そういうとき、制約を満たす xx の集合を実行可能領域[3]というよ。
💜 はあ。その制約があったら何か変わるんですか?
💛 さっき「逆向きにほんの少し歩けば」ff の値は小さくなるっていっていたけど、逆向きにほんの少し歩いたら実行可能領域からはみ出す可能性が出てくるんだよね。だったら xx^\ast が最小点でないとは限らない。

f(x)(yx)>0\nabla f(x^\ast) \cdot (y-x^\ast) > 0 なる yy があっても制約があったら xx^\ast はやっぱり最小点かもしれない
💜 ああ、そういうことですか……。いや、それをいったら f(x)(yx)<0\nabla f(x^\ast) \cdot (y-x^\ast) < 0 なる yy があっても xx^\ast は最小点かもしれないことになりませんか? xx^\ast から yy に少し踏み出した先が実行可能領域からはみ出ている可能性が出てくるんですよね?
💛 実行可能領域の形に何の仮定もないときはそうなっちゃうね。でも、そういうケースはこの本では扱わないかな。制約がある場合でも「凸最適化」といわれるケースのみを扱うと思うよ(テキスト名的に)。さしあたり9章は制約がないケースだからここでは詳しく説明しないけど、凸最適化は 136ページの 4.15 に定式化してある。さっきの必要十分条件を凸最適化の文脈でいうと以下かな。

最小点の必要十分条件(凸最適化の場合)
xx^\ast が凸最適化の最小点であることの必要十分条件は、 実行可能領域内 の任意の yy に対して f(x)(yx)0\nabla f(x^\ast) \cdot (y-x^\ast) \geqq 0 であることである( ff は凸最適化の目的関数)。

💛 これは xx^\ast から yy に少し踏み出しても実行可能領域を出ないんだ。なぜなら、凸最適化では、xx^\astyy が実行可能領域内にあれば xx^\astyy をつなぐ線分すべてが実行可能領域内に入っているから。
💜 ……ともかく、制約がある場合には最小点 xx^\ast の必要十分条件は変わってくるんですね。

結局凸関数が最小になる点はどんな点

💛 そうだね。それで、最初にわからなかったことはもう解決したよね。

微分可能な凸関数の最小点の必要十分条件(制約がない場合)
ff が微分可能な凸関数ならば、xx^\astff の最小点であることの必要十分条件は f(x)=0\nabla f(x^\ast) = 0

💜 え?
💛 だって、制約がなければ下図のどちらであっても xx^\ast は最小点ではないっていっていたよね。

f(x)(yx)<0\nabla f(x^\ast) \cdot (y-x^\ast) < 0 なる yy があっても f(x)(yx)>0\nabla f(x^\ast) \cdot (y-x^\ast) > 0 なる yy があっても xx^\ast は最小点ではない(より小さい値を取る点を与える θα\theta_\alphaθβ\theta_\beta が存在する)

💛 つまり、定義域内の任意の yy に対して f(x)(yx)=0\nabla f(x^\ast) \cdot (y-x^\ast) = 0 でなければならないんだよね。なら、y=x+f(x)y = x^\ast + \nabla f(x^\ast) に対してもこれが成り立たなければならないよね。いまは制約がないからこの yy がはみ出すとかはない。
💜 あ……確かに。f(x)f(x)=f(x)2=0\nabla f(x^\ast) \cdot \nabla f(x^\ast) = \| \nabla f(x^\ast) \|^2 = 0 でなければならないとなると、f(x)\nabla f(x^\ast) はゼロベクトルでなければならないですね……。


余談―だから何がうれしいのか

💛 だから f(x)=0\nabla f(x) = 0 であるような点 xx を探しに行こう。
💜 理解しました……が、それって、「f(x)f(x) が最小になる点を探そう」を「f(x)=0\nabla f(x) = 0 を満たす点を探そう」にいいかえただけですよね。それで何か解決になっているんですか?
💛 逆に、「f(x)f(x) が最小になる点を探そう」っていわれてどう探すの? Rn\mathbb{R}^n 内の点の値を全部調べるの? それで探し当てた点が最小点だってどうやっていえるの?
💜 いや、Rn\mathbb{R}^n 内の点を全部調べるのは無理ですよ……無限にあるじゃないですか……。
💛 対して f(x)=0\nabla f(x) = 0 を満たす点、いいかえると、この方程式の解は、ふつう Rn\mathbb{R}^n よりぐっと絞れるよ? 狭義凸関数[4]だったらこういう点があるなら1点しかないし。それってかなり解決になっているよね?
💜 あ……。そうですね、「f(x)f(x) が最小になる点」では具体的にどこにあるかの手がかりになっていませんが、「f(x)=0\nabla f(x) = 0 を満たす点」は解けるわけですからね。具体的な方程式ですから。
💛 まあ f(x)=cf(x) = c(定数関数)だったら全ての点で f(x)=0\nabla f(x) = 0 だから何も絞り込めないんだけど、それならそれで全ての点が最小点だしね。
💜 なるほど……ある点が任意の点より小さいことを調べたくて、その情報をある点のみで調べられる条件に凝縮した結果勾配に帰着したというイメージなんでしょうか。

余談―凸関数でなかったらどうなのか

💜 そういえば、今回は最初から ff が凸関数であるとされていましたけど、ff が凸関数であることってどこかで使いましたっけ。
💛 十分性の証明に使ったよ。「先ほど示しましたね。これより、」のところ。
💜 ああ確かに……これって、凸関数でなかったらどうなるんですか?
💛 そのまま十分性がなくなるってだけかな。必要十分条件じゃなくて必要条件になる。
💜 というと?
💛 ff が凸関数でなくても、xx^\ast が最小点であってそこで ff が微分可能であったら f(x)=0\nabla f(x^\ast) = 0 であることは変わらないよ。そっち向きの証明は微分可能性しか使っていないしね。ただ逆に、f(x)=0\nabla f(x^\ast) = 0 だからといって最小点とは限らなくなる。極小点や極大点の可能性が出てくるから。
💜 ああ……凸関数でなかったら極大値もあるかもしれませんし、極小値だって何箇所もあるかもしれませんね。
💛 でも、f(x)=0\nabla f(x^\ast) = 0 である点に候補を絞り込めばいいことは変わらないよ(制約がなければ)。最小点以外も引っかかっちゃうかもしれないってだけで。ただもし ff に微分可能でない点があったらそういう点は別途確認しないといけないけどね。そういう点は f(x)=0\nabla f(x^\ast) = 0 ではあぶり出せないから。まあ9章では ff は2回連続微分可能だからそんなことは考えなくていいけどね。


定義と主張のまとめ

凸関数の定義
ff が凸関数であるとは、定義域内の任意の x,yx, y と任意の θ[0,1]\theta \in [0,1] に対し、以下が成り立つこと。

f((1θ)x+θy)(1θ)f(x)+θf(y)f( (1-\theta)x + \theta y ) \leqq (1-\theta)f(x) + \theta f(y)

微分可能な凸関数の勾配が満たす条件
ff が微分可能な凸関数ならば、定義域内の任意の x,yx, y で以下が成り立つ。

f(y)f(x)+f(x)(yx)f(y) \geqq f(x) + \nabla f(x) \cdot (y-x)

微分可能な凸関数の最小点の必要十分条件(制約がない場合)(準備)
ff が微分可能な凸関数ならば、xx^\astff の最小点であることの必要十分条件は、定義域内の任意の yy に対して f(x)(yx)0\nabla f(x^\ast) \cdot (y-x^\ast) \geqq 0 であることである。

微分可能な凸関数の最小点の必要十分条件(制約がない場合)
ff が微分可能な凸関数ならば、xx^\astff の最小点であることの必要十分条件は f(x)=0\nabla f(x^\ast) = 0


凸関数の定義が微分可能な凸関数の勾配が満たす条件になるまで


f(x)(yx)<0\nabla f(x^\ast) \cdot (y-x^\ast) < 0 なる yy があっても f(x)(yx)>0\nabla f(x^\ast) \cdot (y-x^\ast) > 0 なる yy があっても xx^\ast は最小点ではない(より小さい値を取る点を与える θα\theta_\alphaθβ\theta_\beta が存在する)

脚注
  1. テキスト67ページです。 ↩︎

  2. テキスト128ページの Optimal and locally optimal points の定義を制約がない場合でかいています。 ↩︎

  3. テキストでは feasible set(127ページ)です。許容領域など他のよび方もあります。 ↩︎

  4. 凸関数の定義において、xyx \neq y かつ θ(0,1)\theta \in (0,1) のときは厳密に不等号が成り立つならば狭義凸関数です。どこでも必ずたわんでいるイメージです。67ページの strictly convex を参照してください。 ↩︎