勾配降下法とその変種
誤差を小さくする方向へ重みを動かす勾配降下法を学びます。基礎層では、傾きの下る方向へ一歩ずつ進んで谷を目指すことをつかみます。深掘り層では、学習率の意味、バッチ学習・ミニバッチ学習・オンライン学習のちがい、確率的勾配降下法(SGD)、そしてイテレーションとエポックという学習の数え方を数式も交えて説明できるようになります。
ねらい
このレッスンでは、誤差を小さくする方向へ重みを動かす勾配降下法(こうばいこうかほう)を学びます。
基礎
「傾きの下る方向へ、一歩ずつ進んで谷を目指す」という全体像をつかみます。
1. 勾配降下法は、傾きの下る方へ一歩ずつ進みます
濃い霧の中で、谷底へ下りたいとします。遠くは見えませんが、足もとの地面の傾きだけは分かります。そこで、いちばん急に下っている方向へ一歩進みます。進んだ先でまた足もとの傾きを調べ、下る方向へまた一歩進みます。これをくり返せば、少しずつ谷底へ近づけます。
勾配降下法は、これとまったく同じ考え方で重みを動かします。誤差関数の値を地面の高さ、重みを立っている位置だと思ってください。勾配、つまり傾きが分かるので、誤差が下る方向へ重みを少しだけ動かします。動かした先で、また勾配を求め、下る方向へまた少し動かします。これをくり返すと、誤差関数の値がだんだん小さくなり、ずれの小さい重みへとたどり着きます。
一回でどれだけ動かすかを決めるのが、後で学ぶ学習率です。ここでは、「傾きの下る方向へ、一歩ずつ重みを動かして谷を目指す」とつかんでください。
ポイント
勾配降下法は、誤差関数の傾きが下る方向へ、重みを少しずつくり返し動かして、誤差を小さくしていく方法です。
ここまでの要点
- 誤差逆伝播法で各重みの傾きが分かります。
- 勾配降下法は、その傾きの下る方向へ、重みを少しずつ動かして谷を目指します。
まずは全体像をつかめれば十分という人は、ここで区切って大丈夫です。「傾きの下る方へ一歩ずつ進む」と押さえられていれば、この先の深掘りに進む土台はできています。
発展
ここからは、一歩の大きさや、一歩を決めるのに使うデータの量を数式も交えて見ます。
2. 学習率は、一歩の大きさです
勾配降下法で重みを動かす計算は、式で書くと、新しい重み = いまの重み − 学習率 × 勾配 となります。読み下すと、新しい重みは、今の重みから、学習率と勾配をかけたものを引いた値です。傾きの分だけ、下る向きに重みを動かす、と耳で読めば意味がつかめます。
このとき、一歩の大きさを決めるのが学習率(がくしゅうりつ)です。学習率が大きいほど、一回で大きく動きます。
学習率は、大きすぎても小さすぎてもうまくいきません。大きすぎると、谷を通り越して反対側へ飛び出し、行ったり来たりして谷底に落ち着けません。小さすぎると、一歩が小さすぎて、谷底にたどり着くまでに時間がかかりすぎます。ちょうどよい学習率を選ぶことが、学習をうまく進めるうえで大切になります。
理解の確認
学習率は、勾配降下法で重みを動かす一歩の大きさです。大きすぎると谷を飛び越えて落ち着かず、小さすぎると学習に時間がかかりすぎます。
動かして確かめる
学習率を、下のトレーナーで実際に動かして確かめてみましょう。小さくしすぎると10回動かしても谷底に近づき きらず、大きくしすぎると谷を通り越して反対側へ飛び出し続けます。ちょうどよい学習率を探してください。
スタディード / G検定 / 動く解説
一歩を大きくしすぎると、谷を飛び越えてしまう。
学習率(一歩の大きさ)を動かすと、重みが谷底(誤差の最小値)へどう近づくかが変わります。10回の更新の軌跡を確かめてください。
3. 一歩を決めるのに、どれだけのデータを使うか
勾配を求めるには、データを使います。一歩を決めるのに、手もとのデータをどれだけ使うかによって、学習のやり方が分かれます。
バッチ学習は、すべての訓練データをまとめて使い、その全体から勾配を求めて一歩を動かします。全体を見るため一歩は安定しますが、データが多いと一歩ごとの計算が重く、更新の回数を増やしにくくなります。
オンライン学習は、逆に、データを一つずつ使って、その一つごとに一歩を動かします。こまめに更新できますが、一つのデータに引きずられて、進む方向がぶれやすくなります。
ミニバッチ学習は、その中間です。訓練データを小さなかたまりに分け、そのかたまりごとに勾配を求めて一歩を動かします。かたまりの大きさは、数十から数百ほどにすることが多いです。全体を使うほど重くなく、一つずつよりは方向が安定するため、ディープラーニングではミニバッチ学習が広く使われます。
とくに、一歩ごとに使うデータをランダムに選んで勾配降下法を行うやり方を確率的勾配降下法(SGD)といいます。SGDは、エスジーディーと読みます。ランダムに選んだ一部から勾配を求めるため、進む方向は多少ぶれますが、そのぶれが、かえって悪い谷にはまり込むのを避ける助けになることもあります。実際には、ミニバッチを使う確率的勾配降下法が標準的に使われます。
理解の確認
バッチ学習は全データ、オンライン学習は一つずつ、ミニバッチ学習は小さなかたまりごとに勾配を求めて一歩を動かします。確率的勾配降下法(SGD)は、一歩ごとに使うデータをランダムに選ぶやり方で、実際にはミニバッチと組み合わせて使われます。
4. イテレーションとエポック
学習の進み具合を数えるのに、二つの単位を使います。
イテレーションは、重みを一回更新すること、つまり一歩を数える単位です。ミニバッチ学習なら、一つのかたまりで勾配を求めて重みを一回動かすと、一イテレーションです。
エポックは、訓練データ全体をひととおり使い切ることを数える単位です。すべてのかたまりを一度ずつ使い終えると、一エポックです。式で書くと、一エポックのイテレーション数 = 訓練データの数 ÷ かたまりの大きさ となります。読み下すと、データ全体をかたまりの大きさで割った回数だけ更新すると、一エポックが終わる、という意味です。たとえば訓練データを100個のかたまりに分けたなら、100イテレーションで一エポックになります。
学習では、同じデータを何エポックもくり返し使い、少しずつ重みを調整していきます。何エポック学習させるかは、学習の進み具合を見ながら決めます。
理解の確認
イテレーションは重みを一回更新する単位、エポックは訓練データ全体をひととおり使い切る単位です。データを100個のかたまりに分けたなら、100イテレーションで一エポックになります。
理解度の確認
説明できる項目にチェックを入れましょう。すべて確認できたら、完了ボタンで記録します。
分からなかった点・気になった点
読み込み中です。