勾配法の幕開け

勾配法とは、関数の最小値(最大値)を求める方法です。 こうした問題は最適化問題と呼ばれ、その歴史は最急降下法というアルゴリズムにさかのぼります。

最急降下法は最も有名な数学者のひとりである、カール・フリードリヒ・ガウスによって発見されました。 ガウスといえば複素数や正規分布を考案した業績で知られています。 大学受験では、電磁気の磁束密度の単位である「ガウス」に頭を悩ませた人も多いでしょう。

ガウスの生きた18~19世紀は、科学が飛躍的に進歩した時代でした。 ちょうど蒸気機関が実用化されて、産業革命が始まろうとする激動の時代です。 そのような情勢の中で、天文学も発展を遂げていました。 ガウスは1809年に著書『天体運行論』を発表し、 最急降下法と最小二乗法を組み合わせることで、天体の動きを予測する術を知らしめました。注1

最急降下法と最小二乗法

最小二乗法とは、観測したデータと予測した値の差の二乗を取り、 その誤差がもっとも小さい値になるようにすることで、正確な予測値を得ようとするアプローチです。 観測値と予測値が一致すれば誤差もなくなるという考えから、 誤差を少なくすればより正確な予測値が得られるという、逆転の発想をしている訳です。 さすがは天才、物の見方が違います。

ちなみに、わざわざ差の二乗を取る理由は、符号を考えないようにするためです。 たとえば観測値が+1で予測値が+2の場合、 観測値から予測値を引くと-1になり、予測値から観測値を引くと+1になってしまいます。 こうした符号の関係を考えると、計算がややこしくなってしまうので、二乗してむりやりプラスにしてしまうのです。

さて、最小二乗法が誤差をもっとも小さい値にすることを目的にしていることがわかりました。 それはどのように達成されて、また最急降下法とどのように関わるのでしょうか。

まず最小二乗法では、予測値の形を決めます。 予測値が何らかの関数に従っていると考えて、どのような式で置き換えるか考えてみます。 たとえば直線の関係、原因が2倍になったら結果も2倍になる、というような関係だったら、 直線の関数である1次関数 $ y=ax+b $ を予測値の関数とします。

この予測関数yには、3つの記号が含まれています。aとxとbです。 そのうちxは観測したデータなので、残るaとbが、まだ定義されていない値となります。 これらの値はパラメータと呼ばれ、直線の形を決める役割を果たします。 たとえばa=1、b=0だったら、正比例の直線になりますし、 a=-1、b=0だったら、逆に入力値xが大きくなればなるほど、どんどんyは小さくなります。

これらのパラメータを調整して、観測データにもっとも近い形の直線を得ることが、最終的な目的です。 そしてその調整の手段こそが、最急降下法(勾配法)です。

最急降下法とは、誤差関数の最小値を探し出すアルゴリズムです。 少し見慣れない言葉が出てきましたね。誤差関数とは一体何のことでしょうか。

実は、誤差関数の説明はさきほど済ませてしまいました。 「観測したデータと予測した値の差の二乗」・・・これがまさしく誤差関数です。 予測した値というのを直線の関数で置き換えると、この誤差が値ではなく、数式(関数)であることがわかりますね。

この誤差関数を紐解いてみましょう。 具体的に、誤差関数の数式を用意して式展開します。 \begin{align} E = \frac{1}{2} \sum_{i=1}^{n} (y_i - x_i)^2 \end{align}

上の式が、基本となる「観測したデータと予測した値の差の二乗」を表す式です。 シグマ記号があるので不安に思われる方もいるでしょうが、 シグマとはデータの数を指すだけのものです。

たとえば2回観測を行って、1回目に「10」、2回目に「12」が得られたとしましょう。 このとき1回目の予測値が「9」、2回目の予測値が「11」だったら、 上の式は以下のようになります。 \begin{align} E &= \frac{1}{2} \sum_{i=1}^{2} (y_i - x_i)^2 \\ &= \frac{1}{2} \{ (y_1 - x_1)^2 + (y_2 - x_2)^2 \} \\ &= \frac{1}{2} \{ (9 - 10)^2 + (11 - 12)^2 \} \\ &= 1 \end{align}

いまの例では予測値を使って誤差値を求めましたが、 予測値の代わりに予測関数を使うと、誤差関数が得られます。 \begin{align} E &= \frac{1}{2} \sum_{i=1}^{n} \{ (ax_i+b) - x_i \}^2 \\ &= \frac{1}{2} \sum_{i=1}^{n} \{ (ax_i+b)^2 - 2(ax_i+b)x_i + {x_i}^2 \} \\ &= \frac{1}{2} \sum_{i=1}^{n} \{ (a^2{x_i}^2 + 2ax_i+b + b^2) - (2a{x_i}^2 + 2bx_i) + {x_i}^2 \} \\ \end{align}

いかがでしょうか。パラメータaとbはそれぞれ、二次までの項を持っています。 このことから、誤差関数は二次関数の形を取ることがわかります。 二次関数といえば、一番シンプルな形である$y=x^2$が思い浮かぶことでしょう。 $y=x^2$には$x=0$という最小値があります。

このように二次関数では最小値が存在します。 最小値とは、誤差関数の最小値、言い換えれば誤差が一番小さくなるようなパラメータの値です。 すなわち最急降下法を使って誤差関数の最小値を求めることで、正確な予測関数が得られるようになるのです。