最適化アルゴリズム:賢い谷の下り方
勾配降下法をより賢くする最適化アルゴリズムを学びます。基礎層では、まっすぐ下るだけでは行き詰まることがあり、勢いや歩幅を工夫することをつかみます。深掘り層では、局所最適解・大域最適解・鞍点という行き詰まりの正体と、モーメンタム・AdaGrad・AdaDelta・RMSprop・Adam・AdaBound・AMSBoundという手法の系譜を説明できるようになります。
ねらい
このレッスンでは、勾配降下法をより賢くする最適化アルゴリズムを学びます。
基礎
「まっすぐ下るだけでは行き詰まることがあり、勢いをつけたり歩幅を工夫したりして乗り越える」という全体像をつかみます。
1. まっすぐ下るだけでは、行き詰まることがあります
霧の中で谷を下る話を思い出してください。足もとの傾きだけをたよりに下ると、二つの困りごとが起こります。
一つは、本当の谷底ではない浅いくぼみにはまって、そこで動けなくなることです。まわりを見れば、もっと深い谷があるかもしれないのに、足もとが平らになったので下りをやめてしまいます。
もう一つは、傾きがとても小さい平らな場所で、進みがのろのろになることです。傾きが小さいと一歩も小さくなり、なかなか先へ進めません。
こうした行き詰まりを避けるために、進み方に工夫を加えます。代表的な工夫は二つです。一つは、これまで進んできた勢いを利用して、浅いくぼみを勢いで通り抜けることです。もう一つは、場所や方向に応じて一歩の大きさを自動で変え、平らな場所では大きく、急な場所では控えめに進むことです。こうした工夫を取り入れた重みの動かし方を最適化アルゴリズムと呼びます。
ポイント
素直な勾配降下法は、浅いくぼみや平らな場所で行き詰まることがあります。最適化アルゴリズムは、勢いや歩幅を工夫して、これを乗り越えます。
ここまでの要点
- まっすぐ傾きを下るだけでは、浅いくぼみや平らな場所で行き詰まることがあります。
- 最適化アルゴリズムは、勢いをつけたり歩幅を変えたりして、これを乗り越えます。
まずは全体像をつかめれば十分という人は、ここで区切って大丈夫です。「賢い谷の下り方の工夫」と押さえられていれば、この先の深掘りに進む土台はできています。
発展
ここからは、行き詰まりの正体と、それを乗り越える手法の系譜をくわしく見ます。
2. 局所最適解・大域最適解・鞍点
まず、行き詰まりの正体を三つの言葉で整理します。
大域最適解(たいいきさいてきかい)とは、誤差関数が全体でいちばん低くなる、本当の谷底のことです。学習で本来たどり着きたい場所です。
局所最適解(きょくしょさいてきかい)とは、まわりよりは低いけれど、全体で見ればいちばん低くはない、浅いくぼみのことです。素直な勾配降下法は、いったんこのくぼみに落ちると、まわりが上りに見えるため、そこを谷底だと思って止まってしまいます。
鞍点(あんてん)とは、ある方向から見ると下りなのに、別の方向から見ると上りになっている、平らな点のことです。馬の背に乗せる鞍の形に似ていることからこの名があります。鞍点のまわりでは傾きがとても小さくなるため、進みが止まりやすくなります。とくに重みの数が多いディープラーニングでは、鞍点が学習を止める大きな原因になると考えられています。
理解の確認
大域最適解は全体でいちばん低い本当の谷底、局所最適解はまわりより低いだけの浅いくぼみ、鞍点はある方向は下りで別の方向は上りの平らな点です。局所最適解や鞍点は、素直な勾配降下法が行き詰まる原因になります。
3. 勢いをつけるモーメンタム
行き詰まりを乗り越える最初の工夫がモーメンタムです。モーメンタムとは「勢い」「慣性」という意味です。
モーメンタムは、今の傾きだけで一歩を決めるのではなく、これまで進んできた向きの勢いを少し引き継いで、一歩に足し合わせます。ボールが坂を転がるように、これまでの動きの勢いがのっているイメージです。
勾配降下法のレッスンで見た一歩は、学習率 × 勾配 でした。モーメンタムは、ここに前回の一歩を足します。式で書くと、今回の一歩 = 前回の一歩 × 引き継ぐ割合 + 学習率 × 勾配 となります。読み下すと、前回どちらへどれだけ進んだかを一定の割合だけ持ちこして、今回の傾きから決めた一歩に足す、という意味です。引き継ぐ割合は0から1までの値で、大きいほど勢いが長く残ります。この勢いのおかげで、浅いくぼみに入っても勢いで通り抜けやすくなり、同じ向きに下り続ける場面では加速して速く進めます。
理解の確認
モーメンタムは、これまで進んできた向きの勢いを引き継いで一歩に足す工夫です。勢いのおかげで、浅いくぼみを通り抜けやすく、同じ向きに下り続けるときは加速できます。
4. 歩幅を自動で調整する手法の系譜
もう一つの工夫は、一歩の大きさ、つまり歩幅を重みごとに自動で調整することです。ここから、改良を重ねた手法の系譜が生まれます。
AdaGrad(アダグラッド)は、これまで大きく動いてきた重みほど歩幅を小さくし、あまり動いていない重みほど歩幅を大きく保ちます。重みごとにちょうどよい歩幅を自動でつけられます。ただし、学習が進むにつれて歩幅がどんどん小さくなり、途中でほとんど進まなくなる弱点がありました。
RMSprop(アールエムエスプロップ)とAdaDelta(アダデルタ)は、この弱点を改良した手法です。過去のすべてをためこむのではなく、最近の動きを重く見るようにして、歩幅が下がりすぎないようにしました。
Adam(アダム)は、モーメンタムの勢いと、AdaGradやRMSpropの歩幅の自動調整を両方組み合わせた手法です。勢いと歩幅調整のよいところを合わせ持つため、多くの場面で安定して速く学習でき、現在も標準的な選択肢としてよく使われます。
AdaBound(アダバウンド)とAMSBound(エーエムエスバウンド)は、Adamをさらに改良した手法です。歩幅が極端に大きくなったり小さくなったりしないように、上限と下限を設けます。学習の序盤はAdamのように速く、終盤は素直な勾配降下法のように安定して進むことをねらっています。
これらは、より賢く谷を下るための工夫を少しずつ積み重ねてきた系譜だととらえられます。
理解の確認
AdaGradは重みごとに歩幅を自動調整しますが歩幅が下がりすぎる弱点があり、RMSpropとAdaDeltaがそれを改良しました。Adamは、モーメンタムの勢いと歩幅の自動調整を組み合わせた標準的な手法で、AdaBoundとAMSBoundは歩幅に上限と下限を設けたAdamの改良版です。
理解度の確認
説明できる項目にチェックを入れましょう。すべて確認できたら、完了ボタンで記録します。
分からなかった点・気になった点
読み込み中です。