あなたは今、深い霧に包まれた山の中にいます。
まわりの景色はよく見えません。
空も地平線も見えず、自分が山のどのあたりにいるのかもわかりません。
けれどあなたには、ひとつの目的があります。
それは、この山の中で、いちばん低い場所を見つけること。
AIが学習するときにしていることも、実はこれと少し似ています。
ニューラルネットワークは、最初から正しい答えを知っているわけではありません。
最初は重みも適当で、予測もよく外れます。
そこでAIは、誤差関数を使って「今の答えはどれくらい間違っているか」を確かめながら、少しずつ重みを調整していきます。
このときAIが目指しているのは、誤差ができるだけ小さくなる場所です。
誤差が小さいほど、予測は正解に近いからです。
だからAIは、誤差という山の地形の中で、より低い場所、より低い場所へと移動していこうとします。
この方法を勾配降下法(gradient descent)と呼びます。
勾配
ここでいう「勾配」とは、坂道の傾きのことです。
山の中にいて地面が少し傾いていたら、「こっちへ進めば下っていきそうだ」とわかりますよね。
AIも同じです。今いる場所で、どちらの方向へ進めば誤差が小さくなりそうかを、坂の傾きのような情報から判断します。
そしてその傾きにしたがって、少しずつ下っていく。
これが「勾配降下法」の基本的な考え方です。
イテレーション
ただし、AIは一気に谷底まで飛ぶわけではありません。
霧の中では、遠くの地形は見えません。
だからまずは、「今いる場所から見て、下り坂になっている方向へ、少し進んでみる」というやり方を取ります。
少し進んでは、また傾きを確かめる。また少し進んでは、もう一度確かめる。
この「1回、重みを更新すること」を イテレーション(iteration)と呼びます。
つまりイテレーションとは、AIが山の中で踏み出す一歩のようなものです。
一歩ごとに、今の位置を確かめ、坂の向きを見て、進む方向を決める。
その繰り返しで、AIは少しずつよりよい場所へ近づいていきます。
エポック
では、エポック(epoch)は何でしょうか。
エポックは、学習データ全体を1回ひととおり使い終えることです。
たとえば、100枚の画像データがあるとします。
その100枚を全部使って学習したら、1エポック。
そしてもう一度最初から100枚を使って学習したら、2エポック。
山の物語で言えば、イテレーションが「一歩」なら、エポックは「山道を一区切り歩き終えること」に近いかもしれません。
つまり、
・イテレーション → 1回の更新
・エポック → データ全体を1周すること
という違いがあります。
この2つは混同しやすいですが、G検定ではよく問われるポイントです。
学習率
さて、霧の山を下るときに大切なのは、どれくらいの大きさで一歩を踏み出すかです。
もし一歩が小さすぎると、安全ではありますが、なかなか前に進みません。
逆に一歩が大きすぎると、谷底を通り越してしまったり、バランスを崩して別の場所へ飛んでしまったりするかもしれません。
この「一歩の大きさ」にあたるのが学習率(learning rate)です。
学習率は、重みをどれくらいの大きさで更新するかを決める値です。
・学習率が小さい→ ゆっくり進む
・学習率が大きい→ 大きく進む
学習率が小さすぎると、学習にとても時間がかかります。
学習率が大きすぎると、よい場所を飛び越えてしまい、うまく収束できないことがあります。
だから学習率は、勾配降下法においてとても重要なハイパーパラメータの一つです。
大域最適解と局所最適解
ここで、山の地形をもう少し想像してみましょう。
もし山の中に「低い場所」が一つしかなければ、そこを目指せばよいだけです。
でも現実の地形は、そんなに単純ではありません。
霧の山には、
・ちょっと低いくぼみ
・もっと深い谷
・思いがけない平地
などがいくつもあるかもしれません。
AIの誤差関数の地形も同じです。誤差が小さい場所は一つではなく、いくつもあることがあります。
このとき、全体の中でいちばん低い場所を、大域最適解(global optimum)と呼びます。
そして、その近くでは低いけれど、全体で見ると最も低いわけではない場所を、局所最適解(local optimum)と呼びます。
山の中で歩いていると、目の前に小さなくぼみが見つかることがあります。
そこに降りると、たしかに今までよりは低い。でも本当は、もっと先にもっと深い谷があるかもしれない。
AIも、途中で見つけた「まあまあ低い場所」にとどまってしまうことがあります。これが局所最適解の問題です。
つまり勾配降下法は、いつも必ず「世界で一番良い答え」にたどり着けるとは限らないのです。
鞍点
さらに、山の地形には、もっとやっかいな場所があります。
それが、鞍点(saddle point)です。
「鞍」というのは、馬の背中に置く鞍のことです。
真ん中が少しくぼんでいて、前後には上がり、左右には下がるような形をしています。
地形として考えると、鞍点は、ある方向から見ると谷のように見える、でも別の方向から見ると山のようにも見える、という不思議な場所です。
つまり、完全な谷底ではないのに、勾配が小さくなって動きにくくなる場所なのです。
AIがここに来ると、「もう十分低いところまで来たのかな?」と迷ってしまうことがあります。
でも実際には、まだもっとよい場所が先にあるかもしれない。
鞍点は、勾配降下法がうまく進みにくくなる原因の一つとして知られています。
勾配降下法の本質
ここまでをまとめると、勾配降下法とは、誤差という山の地形の中で、坂の傾きを手がかりにしながら、より低い場所を少しずつ探していく方法です。
AIは、今の誤差を確認する→どちらに進めば誤差が下がるかを見る→学習率にしたがって少し進む→それを何度も繰り返す……という手順で学習していきます。
その一歩一歩がイテレーションであり、データ全体を一通り使い終える区切りがエポックです。
ただし道のりは単純ではありません。
途中には、局所最適解、鞍点、学習率の調整の難しさなど、さまざまな落とし穴があります。
それでもAIは、完全には見えない霧の中で、手探りでよりよい答えを探し続けます。
それが勾配降下法です。
まとめ
勾配降下法
→ 坂の傾きを手がかりに、誤差が小さくなる方向へ進む方法
学習率
→ 1回でどれくらい大きく進むかを決める値
イテレーション
→ 重みを1回更新すること
エポック
→ 学習データ全体を1回使い終えること
大域最適解
→ 全体の中でいちばん誤差が小さい場所
局所最適解
→ 近くでは低いが、全体で最も低いとは限らない場所
鞍点
→ 谷にも山にも見えるような、動きにくい不安定な場所
next ▶ 勾配降下法の学習方法