【AI入門】Adamとは?機械学習で最強の最適化手法を名前の由来から解説
こんにちは。ゆうせいです。
突然ですが、みなさんは「山登り」をしたことはありますか。あるいは、スキーやスノーボードで山を滑り降りる場面を想像してみてください。
深い霧の中で、周りがよく見えない状況だとしましょう。そんな中で、一番低い谷底までできるだけ早く、安全に降りていくにはどうすればいいでしょうか。
実は、人工知能(AI)が学習するプロセスは、この「霧のかかった山を降りる作業」にそっくりなんです。そして、その山降りのガイド役として、現在もっとも信頼されている最強のパートナーが Adam(アダム) です。
今日は、AI開発の現場で毎日のように使われているこの Adam について、その名前の由来から仕組みまで、一緒に紐解いていきましょう。数式を見ると頭が痛くなるという方も安心してください。高校生でもわかるように、噛み砕いてお話しします。
Adamって誰のこと?
まず最初に、この親しみやすい名前の正体からお話しします。もちろん、旧約聖書に出てくる最初の人間のことではありません。
Adam は Adaptive Moment Estimation (アダプティブ・モーメント・エスティメーション)という、少し長い英語の頭文字をとった言葉です。日本語に直訳すると「適応的なモーメント推定」となります。
これだけだと、何のことかさっぱりわかりませんよね。
でも、言葉を二つに分解すると、その本質が見えてきます。
- Adaptive(アダプティブ):適応する、状況に合わせる
- Moment(モーメント):物理でいう「勢い」や「慣性」
つまり、Adam とは「状況に合わせて、勢いをうまく使いながら進む方法」という意味が込められているのです。
なぜ Adam が必要なの?最適化手法の話
AI、特にディープラーニング(深層学習)が賢くなるためには、膨大なデータを使って、自分の中にある「重み」や「バイアス」と呼ばれるパラメータを調整しなくてはなりません。
この調整作業のことを「最適化」と呼びます。そして、その調整を行うアルゴリズムを「オプティマイザ(最適化手法)」と言います。
一番基本的な方法は「確率的勾配降下法(SGD)」と呼ばれるものです。これは、足元の傾斜だけを見て、「こっちが下がっているから、一歩進もう」と地道に降りていく方法です。
しかし、この方法には弱点があります。
慎重すぎて進むのが遅かったり、あるいは勢いあまって谷底を行き過ぎてしまったり、変な窪み(局所解)にハマって抜け出せなくなったりするのです。
そこで登場するのが、二つの強力な武器を合体させた Adam なのです。
武器1:Momentum(モーメント)
一つ目の武器は、物理の授業で習う「慣性」です。
ボールが坂道を転がるとき、最初はゆっくりですが、だんだんスピードに乗ってきますよね。そして、多少のデコボコがあっても、勢いで乗り越えていきます。
これと同じように、「今まで下ってきた勢い」を計算に加えることで、学習のスピードを加速させる仕組みです。これが名前にある Moment の部分です。
武器2:RMSprop(アールエムエスプロップ)
二つ目の武器は、足幅の自動調整機能です。
坂が急な場所では慎重に小刻みに進み、坂が緩やかな場所では大股で一気に進む。このように、場所(パラメータごとの勾配の大きさ)によって、学習する歩幅を「適応的(Adaptive)」に変える仕組みです。
Adam は、この「勢い」と「歩幅調整」の良いとこ取りをしたハイブリッドな手法なのです。だからこそ、最強のオプティマイザと呼ばれているわけですね。
高校生でもわかる Adam の計算式イメージ
ここで少しだけ、Adam が頭の中でどんな計算をしているのか、イメージを数式風の言葉で見てみましょう。
厳密な数式は複雑ですが、やっていることはシンプルです。次の式を見てください。
更新する量 学習率
勢いの推定値
過去の変動幅の合計
ここで注目してほしいのは、割り算の部分です。
もし「過去の変動幅の合計」が大きければ、分母が大きくなるので、「更新する量」は小さくなります。つまり、「今まで激しく動いてきた場所だから、これからは慎重にいこう」とブレーキをかけるわけです。
逆に、分母が小さければ、更新する量は大きくなり、「ここはあまり変化がなかったから、大胆に進んでみよう」とアクセルを踏みます。
これに「勢いの推定値」というスピード要素が掛け算されるので、Adam はカーブの手前で減速し、直線では加速するレーシングカーのように、効率よく谷底(正解)を目指せるのです。
Adam を使うメリットとデメリット
万能に見える Adam ですが、もちろん完璧ではありません。良い点と悪い点をしっかり理解して使い分けることが大切です。
メリット
- 設定が楽で、すぐに結果が出る初期設定のままでも、驚くほど良い性能を発揮します。「とりあえず Adam を使っておけば間違いない」と言われる最大の理由です。
- 学習スピードが速いSGD など他の手法に比べて、正解にたどり着くまでの時間が圧倒的に短いです。時間が限られているプロジェクトでは大きな助けになります。
デメリット
- 「本当の正解」を通り過ぎることがある勢いよく進むあまり、一番深い谷底(大域的最適解)ではなく、その手前の浅い谷(局所解)で満足してしまうことや、汎化性能(未知のデータに対する強さ)が少し劣る場合があります。
- 理論が複雑で理解しにくい内部で動いている計算が多いため、なぜ学習がうまくいかないのか、エラーの原因を特定するのが初心者には少し難しいかもしれません。
今後の学習の指針
ここまで読んでいただき、ありがとうございます。Adam が単なる人の名前ではなく、「勢い」と「適応力」を兼ね備えた賢いアルゴリズムだということが伝わったでしょうか。
AI の学習において、オプティマイザの選択は料理における「火加減」のようなものです。強火で一気に炒めるのか、弱火でじっくり煮込むのか。Adam は、自動で火加減を調節してくれる高級IHヒーターのような存在です。
これからのステップとして、ぜひ以下のことに挑戦してみてください。
- Python で実際に動かしてみるKeras や PyTorch などのライブラリを使えば、
optimizer='adam'と一行書くだけで使えます。 - 他の手法と比較してみるあえて古い手法である SGD と学習スピードを比べてみてください。Adam の速さに感動するはずです。
まずは「とりあえず Adam」から始めて、慣れてきたら他の手法との違いを肌で感じてみてくださいね。
皆さんのAI学習が、Adam のように勢いに乗ってスムーズに進むことを応援しています。
次の記事でまたお会いしましょう。