seegongsik
人工知能

勾配降下 わかりやすく

濃い霧に包まれた丘に立っているとしましょう。いちばん低い谷へ行きたいのですが、遠くて見えません。それでも、足もとがどちらにかたむいているかは感じられます。かたむいた方へ一歩、また一歩と下りていけば、やがて底にたどり着きます。損失を減らす学習も、このように一歩ずつ直していくことで、この方法を勾配降下法といいます。

01

霧の丘を下りる

前のレッスンで、損失はモデルがどれくらいまちがっているかを測る数で、小さいほどよいと話しました。では、損失はどうやって減らすのでしょうか。モデルの値の一つを横軸に、その値のときの損失を縦軸にえがいてみると、まんなかがくぼんだ谷の形になります。
谷の底が、損失がいちばん小さい場所です。そこへ向かって下りればよいのですが、実際のモデルでは、この図全体を前もって見ることはできません。分かるのは、今立っている場所の傾きだけです。

3
今の損失 = 9
足もとの傾きを感じて、低い方へ下りてみましょう

一歩下りるボタンを押してみましょう。ボールが足もとの傾きの示す低い方へ転がり、損失が減ります。

一歩下りるたびに、ボールの高さ、つまり損失が減りました。底が見えなくてもかまいません。足もとがどちらにかたむいているかさえ分かれば、下りる方向はいつでも分かります。
右が下り坂なら値を大きくし、左が下り坂なら値を小さくすればよいのです。方向が分かったので、次は値を実際にどれだけ変えるかです。

02

値を少しずつ直す

ここでの値は、回せるつまみのようなものです。前に見た線の傾きと切片が、まさにこうしたつまみです。つまみを回すと損失が上がったり下がったりし、足もとの傾きを見れば、どちらへ回せば損失が減るかが分かります。
その方向へ、値をほんの少しだけ変えます。言葉で書くと、新しい値は、今の値から、傾きに小さな数をかけたぶんを引いたものです。傾きの反対側、つまり下り坂へ動かすわけです。これをくり返すことが、かなめです。

0損失 = 36
値(つまみ) = 6
傾きの示す方へ、値を少しずつ直してみましょう

値を少し直すボタンを押してみましょう。傾きの示す方へ値が少し変わり、そのぶん損失が減ります。

一歩進むごとに、値は谷のまんなかに近づき、損失の棒がだんだん短くなりました。傾きが急なところでは一度に大きく動き、底に近づくほど傾きがゆるやかになって、歩幅も小さくなります。
直す量が傾きに比例するからです。でも、決めなければならないことが一つ残っています。傾きにかけるその小さな数、つまり一歩の大きさを、どれくらいにすればよいのでしょうか。

03

歩幅が大きすぎると飛びこえる

一歩の大きさを決めるこの数を、学習率と呼びます。学習率が大きいと速く下りられそうですが、落とし穴があります。底の近くで歩幅が大きすぎると、底をそのまま通りすぎて、反対側の斜面を上ってしまうのです。
そうして左右を行ったり来たりして、かえって損失が大きくなることもあります。反対に、学習率が小さすぎると安全ですが、底まで行くのにずいぶん時間がかかります。

3
位置 = 0.40 · 損失 = 6.76
歩幅を選んで、一歩ずつ歩いてみましょう

小さい歩幅と大きい歩幅を選んで歩いてみましょう。小さいとこつこつ底へ向かい、大きすぎると底を飛びこえて反対側へはねます。

小さい歩幅はこつこつ下り、大きすぎる歩幅は底をこえて左右にはね、だんだん遠ざかりました。だから、学習率は大きすぎず、小さすぎないように選ばなければなりません。
実際には、いくつかの値を試してみて選び、学習が進むにつれて学習率を少しずつ小さくする方法も使われます。では、ちょうどよい歩幅で最後まで歩いてみましょう。

04

歩みをくり返して底に着く

これで、方法がそろいました。傾きで方向を決め、ちょうどよい歩幅で一歩進み、また傾きを見て一歩進みます。これをくり返していくと、値は谷の底に近づいていきます。
底に近づくほど傾きはほとんど平らになり、歩幅も自然に小さくなって、最後にはほとんど動かなくなります。このように一か所に落ち着くことを、収束するといいます。

3
0歩目 · 損失 = 9.00
歩みをくり返して、底へ収束させてみましょう

一歩を押し続けてみましょう。底に近づくほど歩幅が小さくなり、損失がいちばん小さい点に収束します。

歩みを重ねると、ボールは谷の底に落ち着き、損失の棒もいちばん短くなりました。霧の中でも、足もとの傾きだけをたよりに一歩ずつ下りて、底にたどり着いたのです。
実際のモデルの損失は、この図のように谷が一つだけの形ではないことがよくあります。谷がいくつもあると、いちばん深い底ではなく、近くの浅い谷で止まってしまうこともあります。また、つまみが何百万個もあるので、つまみごとに傾きを別々に測って、いっぺんに直します。データを少しずつに分けて、そのつど傾きを測るやり方も広く使われています。

05

まとめ

まとめるとこうです。損失を値に合わせてえがくと、谷の形になります。底は見えませんが足もとの傾きは測れるので、かたむいた方へ値を少し直すと損失が減ります。この一歩をくり返すと、底に近づいていきます。
一歩の大きさである学習率は、大きすぎると底を飛びこえ、小さすぎると遅くなります。傾きを測って一歩ずつ下りていくこと、これが勾配降下法です。

要点を1から順に押して振り返りましょう

要点を順に押して振り返りましょう。(損失は谷 → 傾きで方向 → 一歩ずつ直す → 歩幅が大切 → 底に収束)

これで、損失を減らすいちばん基本の方法が分かりました。傾きを測って一歩ずつ直していくこの方法が、機械が自分で学ぶ秘けつです。
では、こうしたつまみは、実際にはどこについているのでしょうか。次のレッスンでは、ニューラルネットワークをつくるいちばん小さな単位であるニューロンを見て、ニューロンが重みとバイアスというつまみをどう直しながら学ぶのかを見ていきます。

一言でいうと勾配降下法とは、損失を減らすために傾きを測り、より低い方へ値を一歩ずつ直していく方法です。損失を値に合わせてえがくと谷の形になり、今立っている場所の傾きを見れば、どちらが下り坂かが分かります。新しい値は、今の値から傾きに学習率をかけたぶんを引いたものなので、傾きが急なほど大きく、ゆるやかなほど小さく動きます。学習率が大きすぎると底を飛びこえて反対側へはね、小さすぎると下りはしても遅くなります。ちょうどよい学習率で歩みをくり返すと、損失がいちばん小さい点に収束します。実際のモデルでは、数えきれないつまみの傾きをいっぺんに測って直し、谷がいくつもあれば、浅いところで止まることもあります。
← 人工知能
このページがお役に立ったなら支援する