凸関数とは、任意の2点を結ぶ線分が常にグラフの上側に位置する、器のような形状を持つ関数です。機械学習の最適化問題において極めて重要であり、損失関数が凸関数であれば、勾配降下法などのアルゴリズムを用いて局所最適解にとどまることなく、必ず全体の中で最適な大域的最適解に到達できることが保証されます。
凸関数とは
凸関数(とつかんすう)とは、関数上の任意の2点を結ぶ線分が、常にその関数自身のグラフよりも上側(または等しい位置)に位置する性質を持つ関数のことです。機械学習における最適化問題において、局所最適解が大域的最適解と一致することを保証する非常に重要な性質を持っています。
詳しく解説
機械学習やディープラーニングの学習プロセスは、モデルの予測誤差を表す損失関数を最小化する最適化問題として定式化されます。この損失関数が凸関数である場合、数学的に極小値(局所最適解)が必ず最小値(大域的最適解)となるため、勾配降下法などのアルゴリズムを用いて確実に最適なパラメータを見つけることができます。例えば、線形回帰の平均二乗誤差や、サポートベクターマシンのヒンジ損失などがこれに該当します。一方、現在の深層学習で用いられる多層ニューラルネットワークの損失関数は一般に非凸関数であり、大域的最適解に到達するのが難しくなります。
具体例・使われ方
日常生活のイメージとしては、「底が丸いボウル(お椀)」のような形を思い浮かべると理解しやすいでしょう。ボウルのフチのどの位置からボールを転がしても、最終的には必ず一番低い中心の底(大域的最適解)にたどり着きます。このように、どこからスタートしても勾配降下法によって迷わず最悪値を避けて最適なパラメータに到達できるのが凸関数の利点です。
似た用語との違い
「凹関数」は凸関数を上下反転させた形状(山のような形)をしており、最大化問題でよく用いられます。また、現実の多くの深層学習モデルで現れる「非凸関数」は、複数の谷や山が存在する複雑な形状をしています。非凸関数では、勾配降下法を用いても途中の浅い谷(局所最適解)にトラップされてしまい、真の最小値(大域的最適解)に到達できない現象が発生します。
注意点
凸関数は数理的な扱いが非常に容易で確実な最適化が可能ですが、現代の複雑なAIモデル(例えば大規模なニューラルネットワーク)の多くは損失関数が非凸関数になります。そのため、すべての最適化問題に凸最適化の理論がそのまま適用できるわけではない点に注意が必要です。非凸な問題に対しては、学習率の調整や確率的勾配降下法、最適化アルゴリズムの工夫によって実用的な局所最適解(あるいはそれに近い良好な解)を探索します。