Math World Lab

凸最適化の基礎

凸関数が保証する「局所最適解 = 大域最適解」という最適化理論の要

この単元の発見をシェア
3行要約(Key Takeaways / AIOサマリー)
1
関数 ff が「凸関数」であるとは、グラフ上の任意の2点を結ぶ線分がグラフより常に上(またはグラフに接する)にある性質であり、直感的には「谷が1つしかないお椀型」の関数を指す
2
凸関数には『局所的な最小値は必ず大域的な最小値でもある』という強力な性質があり、どこから探索を始めても勾配降下法などの局所探索が必ず唯一の最適解に収束することが数学的に保証される
3
サポートベクターマシン(SVM)の損失関数は凸関数であるため学習が必ず最適解に収束するが、ニューラルネットワークの損失関数は一般に非凸(谷がいくつも存在する)であり、初期値によって異なる局所解に落ち着くことがある

なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値

Purpose & Motivation

なぜ生まれたのか?

関数 $f$ が「凸関数」であるとは、グラフ上の任意の2点を結ぶ線分がグラフより常に上(またはグラフに接する)にある性質であり、直感的には「谷が1つしかないお椀型」の関数を指す

身につく武器・思考力

凸関数には『局所的な最小値は必ず大域的な最小値でもある』という強力な性質があり、どこから探索を始めても勾配降下法などの局所探索が必ず唯一の最適解に収束することが数学的に保証される

実社会・ITでの活躍現場

  • •機械学習モデルの学習における凸損失関数と非凸損失関数の違い
  • •ITシステム・アルゴリズム実装における論理設計
  • •データ分析やシミュレーションにおける数理モデリング

Layer 1 — 直感・シミュレーター

凸関数(お椀型)と非凸関数(谷が複数ある波形)をボタンで切り替えて、点をドラッグして異なる初期位置から「勾配降下」を実行してみよう。凸関数ではどこから始めても同じ谷底(大域最小値)にたどり着くが、非凸関数では初期位置によって異なる谷(局所最小値)に捕まってしまうことがある。

点をドラッグして初期位置を変え、実行ボタンで谷底まで降下させてみよう。

現在地 xx = -3.000、f(x)f(x) = 6.900

更新式: xt+1=xt−η⋅f′(xt)x_{t+1} = x_t - \eta \cdot f'(x_t)

凸関数では、点をどこに置いても勾配降下は必ず同じ谷底(大域最小値 x=1)に収束する。局所最小値=大域最小値が保証されるため。

↑ SVMの凸損失関数は「どこから学習を始めても同じ最適解に収束する」ことが保証されるが、ニューラルネットワークの非凸損失関数ではその保証がない代わりに、実務上は十分良い解が得られることが多い。

直感チェック!ミニクイズ

関数 ff が凸関数であるとき、勾配降下法によって見つかった「局所的な最小値」について正しい記述はどれか?

Layer 2 — 定義・受験・証明

定義

定義域が凸集合であるような関数 f:R→Rf: \mathbb{R} \to \mathbb{R} が「凸関数」であるとは、任意の2点 x,yx, y と任意の λ∈[0,1]\lambda \in [0,1] に対して次の不等式が成り立つことをいう。

f(λx+(1−λ)y)≤λf(x)+(1−λ)f(y)f(\lambda x + (1-\lambda) y) \le \lambda f(x) + (1-\lambda) f(y)

これは「グラフ上の任意の2点を結ぶ線分(弦)が、グラフそのものより下に来ることは決してない」という幾何学的な意味を持つ。2回微分可能な関数の場合、f′′(x)≥0f''(x) \ge 0 がすべての xx で成り立つことと凸性は同値である。

公式・数理モデル

f(λx+(1−λ)y)≤λf(x)+(1−λ)f(y),f′′(x)≥0  ⟺  f は凸,局所最小  ⟹  大域最小f(\lambda x + (1-\lambda)y) \le \lambda f(x) + (1-\lambda) f(y), \quad f''(x) \ge 0 \iff f \text{ は凸}, \quad \text{局所最小} \implies \text{大域最小}

証明・導出

凸関数の局所最小値が大域最小値であることの証明(背理法): ff を凸関数とし、x∗x^* を局所最小値(x∗x^* の近傍で最小)とする。ここで、ある点 yy が存在して f(y)<f(x∗)f(y) < f(x^*) であると仮定する(大域的にはもっと小さい値がある、という仮定)。

凸性の定義より、任意の λ∈(0,1)\lambda \in (0,1) に対して

f(λy+(1−λ)x∗)≤λf(y)+(1−λ)f(x∗)f(\lambda y + (1-\lambda)x^*) \le \lambda f(y) + (1-\lambda) f(x^*)

仮定 f(y)<f(x∗)f(y) < f(x^*) より、右辺は

λf(y)+(1−λ)f(x∗)<λf(x∗)+(1−λ)f(x∗)=f(x∗)\lambda f(y) + (1-\lambda)f(x^*) < \lambda f(x^*) + (1-\lambda) f(x^*) = f(x^*)

したがって

f(λy+(1−λ)x∗)<f(x∗)f(\lambda y + (1-\lambda) x^*) < f(x^*)

が任意の小さな λ>0\lambda > 0 について成り立つ。λ→0\lambda \to 0 とすると、点 λy+(1−λ)x∗\lambda y + (1-\lambda)x^* は x∗x^* にいくらでも近づけるので、x∗x^* のどんなに小さな近傍内にも f(x∗)f(x^*) より小さい値を取る点が存在することになる。これは x∗x^* が「局所最小値」であるという仮定(近傍内で最小)に矛盾する。 よって、f(y)<f(x∗)f(y) < f(x^*) となるような yy は存在せず、局所最小値 x∗x^* は同時に大域最小値でもあることが示された。

押さえておきたいポイント

  • 凸関数の判定条件: 1変数なら f′′(x)≥0f''(x) \ge 0(下に凸)、多変数ならヘッセ行列が半正定値であること
  • 凸関数の重要な帰結:『局所最適 = 大域最適』が保証されるため、勾配降下法などの局所探索アルゴリズムが必ず正しい解に収束する
  • サポートベクターマシン(SVM)やリッジ回帰・ロジスティック回帰の損失関数は凸関数として設計されており、学習の収束性が理論的に保証されている
  • ニューラルネットワークの損失関数は一般に非凸(複数の谷=局所最小値を持つ)であり、初期値や最適化手法によって異なる解に到達しうるが、実務上は十分良い解が得られることが経験的に知られている
参照基準・学習指導要領との対応

本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。

Layer 3 — 工学応用・現場実装

機械学習モデルの学習における凸損失関数と非凸損失関数の違い

SVMのヒンジ損失やロジスティック回帰の対数尤度損失は凸関数として設計されているため、勾配降下法は初期値によらず必ず唯一の大域最適解に収束する。一方、ディープラーニングの損失関数(多数の重みパラメータに対する非線形関数)は一般に非凸であり、初期値の違いによって異なる局所最小値に収束しうる。以下は同じ勾配降下ロジックを凸関数と非凸関数の両方に適用し、収束先が初期値に依存するかどうかを比較するコードである。

1// 凸関数の例: f(x) = (x-2)^2 + 1 (谷はただ1つ、x=2で最小)
2function convexLoss(x: number): number {
3 return (x - 2) ** 2 + 1;
4}
5function convexGradient(x: number): number {
6 return 2 * (x - 2);
7}
8
9// 非凸関数の例: 複数の谷(局所最小値)を持つ関数
10function nonConvexLoss(x: number): number {
11 return 0.3 * x ** 4 - 2 * x ** 2 + 0.5 * x + 5; // x ≈ ±1.8 付近に2つの谷
12}
13function nonConvexGradient(x: number): number {
14 return 1.2 * x ** 3 - 4 * x + 0.5;
15}
16
17// 汎用の勾配降下法: 初期値 x0 から steps 回だけ更新する
18function gradientDescent(
19 gradient: (x: number) => number,
20 x0: number,
21 learningRate: number,
22 steps: number
23): number {
24 let x = x0;
25 for (let i = 0; i < steps; i++) {
26 x = x - learningRate * gradient(x);
27 }
28 return x;
29}
30
31// 凸関数: どの初期値から始めても必ず同じ最小点 x=2 に収束する
32console.log(gradientDescent(convexGradient, -5, 0.1, 100).toFixed(3)); // 2.000
33console.log(gradientDescent(convexGradient, 8, 0.1, 100).toFixed(3)); // 2.000
34
35// 非凸関数: 初期値によって異なる局所最小値に収束してしまう
36console.log(gradientDescent(nonConvexGradient, -3, 0.02, 200).toFixed(3)); // 左側の谷に収束
37console.log(gradientDescent(nonConvexGradient, 3, 0.02, 200).toFixed(3)); // 右側の谷に収束(別の値)
この単元につながる学習ロードマップ

次に学ぶならコレ!おすすめトピック

この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元

数理モデル・概念が近い関連トピック

関連度高工学応用

勾配降下法

谷底を探すAIの基本アルゴリズム

関連度高工学応用

ニューラルネットワークの数学(順伝播と活性化関数)

入力に重みを掛けて足し合わせ、非線形関数で発火させるAIの基本素子

関連度高大学数学

ベイズの定理(条件付き確率と事前・事後確率)

新たな情報や証拠(エビデンス)を得て「確信度」を更新する確率論

同じレベルで次に挑戦したいトピック

同レベル推薦大学数学

固有値・固有ベクトル

行列で変換しても「向きが変わらない」特別な方向

同レベル推薦大学数学

フーリエ変換と周波数分解

どんなに複雑な波も、単純なサイン波の重ね合わせに分解できる

同レベル推薦大学数学

正規分布と中心極限定理

あらゆるランダムなばらつきが最終的に収束する「釣鐘型の山」

工学・実社会での応用先でつながるトピック

工学・実践連携小学校・算数

平均値・中央値・データの活用

棒グラフを動かして、平均と中央値の違いを体で覚えよう

工学・実践連携中学数学

四分位範囲・箱ひげ図

データを並べて4等分すると、散らばり具合が一目でわかる

✨1% 排出100連ガチャ当選 63.4%爆死 36.6%1/e の法則
工学・実践連携中学数学

ガチャ確率と大数の法則(確率の心理バイアス)

「確率1%を100回引けば当たる?」余事象と二項分布が暴くスマホゲームの現実

あなたの数学力をさらに伸ばす

数学の弱点診断や算数パズルに挑戦してみませんか?

簡単な質問に答えてあなたにぴったりの学習ロードマップを発見したり、直感を試すパズルで数の面白さを体験できます。