機械学習で最もよく使われる最適化の1つ - 勾配降下法最適化アルゴリズムのレビュー

機械学習で最もよく使われる最適化の1つ - 勾配降下法最適化アルゴリズムのレビュー

勾配降下アルゴリズムは、機械学習で非常に広く使用されている最適化アルゴリズムであり、多くの機械学習アルゴリズムの中で最も一般的に使用されている最適化方法でもあります。現在、ほぼすべての最先端の機械学習ライブラリやディープラーニングライブラリには、勾配降下アルゴリズムのさまざまなバリエーションが含まれています。ただし、それらはブラックボックス最適化装置のように動作し、その長所と短所を実際的に説明することは困難です。この記事の目的は、勾配降下アルゴリズムのさまざまなバリエーションを紹介し、ユーザーが特定のニーズに応じてアルゴリズムを使用できるようにすることです。

この記事では、まず勾配降下アルゴリズムの 3 つのフレームワークを紹介し、次にそれらが抱える問題と課題を紹介し、次にこれらの問題を解決するための改善点を紹介します。その後、並列環境または分散環境で勾配降下アルゴリズムを使用する方法を紹介します。 ***、勾配降下法に有益ないくつかの戦略を指摘してください。

目次

3つの勾配降下法最適化フレームワーク

バッチ勾配降下法

確率的勾配降下法

ミニバッチ勾配降下法

問題と課題

勾配降下法最適化アルゴリズム

勢い

ネステロフ加速勾配

アダグラード

アダデルタ

RMSプロップ

アダム

アルゴリズムの視覚化

どの最適化アルゴリズムを選択すればよいでしょうか?

並列および分散型SDG

ホグワイルド!

豪雨 SGD

SGD の遅延耐性アルゴリズム

テンソルフロー

弾性平均SGD

その他のSDG最適化戦略

トレーニングセットのランダムシャッフルとカリキュラム学習

バッチ正規化

早期終了

勾配ノイズ

要約する

参考文献

3つの勾配降下法最適化フレームワーク

勾配降下アルゴリズムは、目的関数 J(θ) パラメータ θ∈R の勾配 (1 次導関数) の反対方向に沿ってモデル パラメータを継続的に更新し、更新ステップ サイズ η で目的関数の最小点 (収束) に到達します。

勾配降下アルゴリズム フレームワークには 3 つあります。それらの違いは、各学習 (モデル パラメータの更新) に使用されるサンプルの数にあります。更新ごとに異なるサンプルを使用すると、各学習の精度と学習時間が異なります。

バッチ勾配降下法

毎回、トレーニングセットのサンプルの全量を使用してモデルパラメータを更新します。つまり、θ=θ−η⋅∇θJ(θ)

コードは次のとおりです。

epochs は、ユーザーが入力した反復の最大回数です。上記のコードから、損失関数 loss_function の勾配 params_grad が毎回すべてのトレーニング セット サンプルを使用して計算され、学習率 learning_rate を使用してモデルの各パラメーター params が勾配の反対方向に更新されることがわかります。一般的に、既存の機械学習ライブラリの中には、勾配計算 API を提供するものがあります。自分で計算コードを記述する場合は、プログラムのデバッグプロセス中に勾配計算が正しいかどうかを確認する必要があります。

バッチ勾配降下法では、各学習にトレーニング セット全体を使用するため、各更新が正しい方向に行われ、極値点への収束が保証されるという利点があります (凸関数はグローバル極値点に収束し、非凸関数はローカル極値点に収束する可能性があります)。ただし、各学習時間が長すぎるという欠点があり、トレーニング セットが大きすぎて大量のメモリが消費されると、完全な勾配降下法ではオンライン モデル パラメータ更新を実行できません。

確率的勾配降下法

確率的勾配降下法アルゴリズムは、毎回学習のためにトレーニングセットからランダムにサンプルを選択します。つまり、θ=θ−η⋅∇θJ(θ;xi;yi)

バッチ勾配降下法では毎回すべてのトレーニング例が使用されるため、毎回まったく同じ例のセットが使用されるため、これらの計算は冗長になります。確率的勾配降下アルゴリズムは、モデルパラメータを更新するために毎回ランダムに 1 つのサンプルを選択するだけなので、各学習は非常に高速で、オンラインで更新できます。

コードは次のとおりです。

確率的勾配降下法の欠点は、各更新が正しい方向に行われない可能性があるため、以下に示すように最適化の変動 (摂動) を引き起こす可能性があることです。

図1 SGD摂動

しかし、別の観点から見ると、確率的勾配降下法によってもたらされる変動の利点の 1 つは、盆地のような領域 (つまり、多くの局所的最小値点) の場合、この変動の特性によって、最適化の方向が現在の局所的最小値点から別のより良い局所的最小値点にジャンプする可能性があるため、非凸関数の場合、最終的にはより良い局所的極値点、さらにはグローバルな極値点に収束する可能性があることです。

変動により反復回数(学習回数)が増加し、つまり収束速度が遅くなります。ただし、最終的には、完全な勾配降下アルゴリズムと同じ収束、つまり、凸関数はグローバルな極値に収束し、非凸損失関数はローカルな極値に収束します。

ミニバッチ勾配降下法

ミニバッチ勾配降下法は、バッチ勾配降下法と確率的勾配降下法を組み合わせて、各更新の速度と更新回数のバランスを実現します。各更新では、トレーニング セットから m,m がランダムに選択されます。

  1. θ=θ−η⋅∇θJ(θ;xi:i+m;yi:i+m)

コードは次のとおりです。

確率的勾配降下法と比較して、ミニバッチ勾配降下法は収束の不安定性を低減します。つまり、パラメータ更新の分散を低減し、更新をより安定させます。完全な勾配降下法と比較すると、各学習の速度が向上します。また、メモリのボトルネックを心配する必要がないため、行列演算を使用して効率的な計算を行うことができます。一般的には、更新が行われるたびに、[50, 256]サンプルがランダムに選択されて学習されます。ただし、選択は特定の問題にも依存します。実際には、複数の実験を行って、更新速度と更新回数の両方に適したサンプル数を選択できます。ミニバッチ勾配降下法は収束を保証できるため、ニューラル ネットワークでよく使用されます。

問題と課題

勾配降下法アルゴリズムはうまく機能し、広く使用されていますが、解決する必要がある課題や問題もいくつかあります。

適切な学習率を選択するのは困難です。学習率が小さすぎると、収束が遅くなります。学習率が大きすぎると、収束が妨げられ、極端な点を中心に振動することになります。

学習率調整(学習率スケジュールとも呼ばれる)[11]は、アニーリングなどの各更新プロセス中に学習率を変更しようとします。一般的には、事前に設定された戦略が使用されるか、各反復でより小さなしきい値が減少します。いずれの調整方法においても、事前に固定設定を行う必要があり、学習ごとにデータセットの特性に適応することができない[10]。

モデルのすべてのパラメータは、毎回同じ学習率を使用して更新されます。データの特徴がまばらであったり、各特徴の統計特性や値の空間が異なる場合は、各更新で各パラメータに同じ学習率を使用することはできません。めったに出現しない特徴には、比較的大きな学習率を使用する必要があります。

非凸目的関数の場合、ニューラル ネットワークなどのように、最適ではない局所的な極値点に陥りやすくなります。では、どうやってそれを避けるか。ドーフィン[19]は、より深刻な問題は局所的な極値点ではなく鞍点にあると指摘した。

勾配降下法最適化アルゴリズム

次のセクションでは、上記の問題を解決するためにディープラーニング コミュニティで一般的に使用されているいくつかの勾配最適化方法について説明します。ただし、ニュートン法などの高次元データには実行できないアルゴリズムは含まれていません。

勢い

峡谷地域(一部の方向が他の方向よりもはるかに急勾配で、局所的な極限地点でよく見られる)[1]にいる場合、SGDはこれらの領域の周りで振動し、収束が遅くなります。この場合、運動量が問題を解決することができます[2]。

運動量はパラメータ更新項に更新量(すなわち運動量項)だけ追加される。すなわち、νt=γνt−1+η ∇θJ(θ), θ=θ−νt

運動量項ハイパーパラメータ γ<1 は、通常 0.9 以下です。

その機能は下の図に示されています。

図2 勢いがない

図3 勢いをつける

運動量の項を追加することは、山の頂上からボールを​​転がすようなものです。ボールが転がり落ちるにつれて、以前の運動量が蓄積され(運動量が増加し続けます)、速度は端に到達するまでどんどん速くなります。同様に、モデル パラメータを更新する場合、現在の勾配方向が以前の勾配方向と同じであるパラメータは強化され、つまり、これらの方向で高速化されます。また、現在の勾配方向が以前の勾配方向と異なるパラメータは削減され、つまり、これらの方向で低速化されます。したがって、収束速度が速くなり、振動が低減されます。

  1. ネステロフ加速勾配法 (NAG)

丘の頂上から転がり落ちるボールは、盲目的に斜面を選択します。より良い方法は、上り坂に遭遇する前に速度を落とすことです。

ネステロフ加速勾配法(NAG)は、パラメータの勾配を計算する際に、運動量項を追加するだけでなく、損失関数から運動量項を減算します。つまり、∇θJ(θ−γνt−1)を計算します。この方法は、パラメータの次の位置を推定します。今すぐ:

  1. νt=γνt−1+η⋅∇θJ(θ−γνt−1)、θ=θ−νt

次の図に示すように:

図4 NAGアップデート

詳しい紹介については、イリヤ・スツケヴァー博士論文[9]を参照してください。運動量係数パラメータ γ = 0.9 と仮定すると、まず上の図の小さな青いベクトルで示されるように、現在の勾配項を計算し、次に運動量項を追加して、上の図の大きな青いベクトルで示されるように、大きなジャンプが得られます。これは、モメンタム項のみを含む更新です。 NAG は最初に大きなジャンプ (運動量項) を行い、次に運動量で計算された現在の勾配 (上図の赤いベクトル) を使用して小さな補正を追加し、上図の緑のベクトルを取得します。これにより、RNN [8]のように、急速な更新を防ぐことで応答性を向上させることができます。

上記の 2 つの方法により、各学習プロセス中に損失関数の傾きに応じて適応的な更新を実現し、SGD の収束を加速することができます。次のステップは、各パラメータをその重要度に基づいて適応的に更新することです。

アダグラード

Adagrad[3]も勾配ベースの最適化アルゴリズムであり、パラメータごとに異なる学習率を適応させることができます。スパースな特徴に対しては大きな学習更新を、非スパースな特徴に対しては小さな学習更新を得ることができます。そのため、この最適化アルゴリズムはスパースな特徴データの処理に適しています。 Deanら[4]は、AdagradがSGDの堅牢性を大幅に向上できることを発見し、Googleはそれを大規模なニューラルネットワークのトレーニング(Youtube動画の猫の認識)に使用しました。 Penningtonら[5]は、Adagradを使用してGloVeの単語埋め込みを訓練し、頻繁に出現する単語には小さな更新を与え、あまり出現しない単語には大きな更新を与えた。

Adagrad の主な利点は、一般的な手動設定が 0.01 であるのに対し、パラメータごとに異なる学習率を適応できることです。同時に、その欠点は、パラメータ勾配シーケンスの二乗和を計算する必要があり、学習率の傾向が常に減少し、最終的に非常に小さな値に達することです。この問題を解決するために、以下に説明する Adadelta が使用されます。

アダム

適応モーメント推定 (Adam) も、さまざまなパラメータを持つ適応学習率の方法です。Adadelta や RMSprop との違いは、履歴勾配減衰の計算方法が異なることです。履歴二乗減衰は使用しません。減衰方法は、次のようにモメンタムに似ています。

  1. mt=β1mt−1+(1−β1)gt
  2. vt=β2vt−1+(1−beta2)g2t

mt と vt は、それぞれ勾配の加重平均と加重偏り分散です。これらは最初は 0 ベクトルです。Adam の著者は、特に減衰係数 (減衰率) β1 と β2 が 1 に近い場合、これらは 0 ベクトル (0 ベクトルに近い) になる傾向があることを発見しました。この問題を改善するために、

MT と VT はバイアス補正されています。

  1. mt^=mt1−betat1  
  2. vt^=vt1−betat2

最後に、Adam の更新方程式は次のようになります。

  1. θt+1=θt−ηvt^−−√+ϵmt^

論文で推奨されているデフォルト値は、β1=0.9、β2=0.999、ϵ=10−8です。この論文では、Adam を他のいくつかの適応学習率と比較していますが、結果はすべて優れています。

アルゴリズムの視覚化

次の 2 つの図は、図に示すように、上記の最適化方法を視覚的に比較したものです。

図5 損失面におけるさまざまなSGD最適化手法のパフォーマンス

上図からわかるように、Adagrad、Adadelta、RMSprop は損失面上で正しい移動方向に即座に移行し、迅速な収束を実現できます。勢いとNAGは軌道から外れてしまいます。同時に、NAG は勾配補正に基づいて応答性を向上させるため、逸脱後に迅速に進路を修正することができます。

図6 損失面の鞍点における各種SGD最適化手法のパフォーマンス

上図からわかるように、鞍点(つまり、ある次元では勾配がゼロで、ある次元では勾配がゼロでない)では、SGD、Momentum、NAG は常に鞍点の勾配がゼロの方向に振動し、鞍点位置の対称性を破ることは困難ですが、Adagrad、RMSprop、Adadelta は勾配がゼロでない方向に素早く移行できます。

上記の 2 つの図からわかるように、適応学習率法 (Adagrad、Adadelta、RMSprop、Adam) は、これらのシナリオで収束速度と収束性が優れています。

SGDオプティマイザーの選択方法

データ機能がスパースである場合は、反復プロセス中に学習率を手動で調整する必要がないため、適応学習率 SGD 最適化手法 (Adagrad、Adadelta、RMSprop、Adam) を使用する必要があります。

RMSprop は Adagrad の拡張機能であり、Adadelta に似ていますが、Adadelta の改良版では RMS を使用して学習率を自動的に更新し、初期学習率を設定する必要がありません。 Adam は、RMSprop に基づく運動量とバイアス補正を使用します。 RMSprop、Adadelta、Adam は同様の状況で同様のパフォーマンスを発揮します。 Kingma[15]は、収束に近づくにつれて勾配がより疎になるため、バイアス補正の利点によりAdamはRMSpropよりもわずかに優れていると指摘した。したがって、Adam は現在最高の SGD 最適化方法である可能性があります。

興味深いことに、最近の多くの論文では、単純な学習率アニーリング調整(運動量項なし)を備えたバニラ SGD 勾配降下アルゴリズムが使用されています。既存の結果では、SGD は最小点に収束できることが示されていますが、他の SGD よりも時間がかかる可能性があり、堅牢な初期値と学習率のアニーリング調整戦略に依存し、局所的最小値や鞍点に陥りがちです。したがって、収束速度や、深く複雑なネットワークのトレーニングを重視する場合は、適応学習率を備えた SGD 最適化手法を選択する必要があります。

並列および分散SGD

非常に大規模なデータセットを扱っていて、マシンのクラスターを利用できる場合は、並列または分散 SGD がプロセスを大幅に高速化できるため、非常に良い選択です。 SGD アルゴリズムの性質により、それがシリアル (ステップバイステップ) であることが決定されます。そのため、非同期処理をどのように行うかが問題となります。シリアル化により収束が保証されますが、トレーニング セットが大きい場合は速度がボトルネックになります。非同期更新を実行すると、非収束が発生する可能性があります。以下では、並列または分散 SGD を実行する方法について説明します。並列とは一般に、同じマシン上のマルチコア並列処理を指し、分散とはクラスター処理を指します。

ホグワイルド

Niu[23]はHogwildと呼ばれる並列SGD手法を提案した。このメソッドは、複数の CPU 時間にわたって並列に実行されます。プロセッサは共有メモリを介してパラメータにアクセスし、これらのパラメータはロックされません。重複しないパラメータの一部を各 CPU に割り当て (割り当ては相互に排他的)、各 CPU は担当するパラメータのみを更新します。この方法は、スパースなデータ機能を処理する場合にのみ適しています。この方法では、CPU 間で同じ情報が書き換えられないため、ほぼ絶対的な収束速度を実現できます。

豪雨 SGD

Downpour SGDは、Dean[4]によって提案され、DistBelief(Google TensorFlowの前身)で使用されているSGDの非同期バリアントです。トレーニング サブセット上で複数のモデル コピーを同時にトレーニングします。これらのレプリカはそれぞれの更新をパラメータ サーバー (PS) に送信し、各パラメータ サーバーはパラメータの相互に排他的な部分のみを更新し、レプリカ間の通信は行われません。したがって、パラメータの発散を引き起こし、収束に悪影響を与える可能性があります。

SGD の遅延耐性アルゴリズム

McMahanとStreeter[12]は、過去の勾配に適応するだけでなく遅延を更新する遅延耐性アルゴリズムを開発することでAdaGradを拡張しました。この方法は実際に効果があることが証明されています。

テンソルフロー

TensorFlow[13]はGoogleがオープンソース化した大規模機械学習ライブラリである。その前身はDistBeliefである。多数のモバイルデバイスや大規模な分散クラスターで使用されており、実践で実証されています。分散実装はグラフ コンピューティングに基づいており、グラフを複数のサブグラフに分割します。各コンピューティング エンティティはグラフ内のコンピューティング ノードとして機能し、Send/Receive を介して通信します。

  1. 弾性平均SGD

Zhangら[14]は、各ワーカーを弾性力(パラメータを保存するパラメータサーバセンター)を介して接続し、非同期パラメータ更新を実行するElastic Averaging SGD(EASGD)を提案した。

SGD最適化戦略の詳細

次に、SGD のパフォーマンスをさらに向上させるための SGD 最適化戦略をさらに紹介します。他にも多くの最適化戦略があります。[22]を参照してください。

  1. シャッフルカリキュラム学習

学習プロセスをより偏りのないものにするためには、トレーニング セット内のサンプルを各反復でランダムにシャッフルする必要があります。

一方、多くの場合、問題を段階的に解決し、トレーニングセットを意味のある順序で配置すると、モデルのパフォーマンスとSGDの収束性が向上します。トレーニングセットの意味のある配置を確立する方法は、カリキュラム学習と呼ばれます[16]。

ZarembaとSutskever[17]は、カリキュラム学習を使用してLSTMを訓練し、いくつかの単純な問題を解決する場合、訓練セットを訓練の難易度の昇順で並べ替えるよりも、組み合わせた戦略またはハイブリッド戦略の方が優れていることを示しました。 (意味は分かりません、悪いです)

  1. バッチ正規化

トレーニングを容易にするために、通常はパラメータを平均 0、分散 1 で初期化します。トレーニングが進むにつれて、パラメータはさまざまな程度に更新され、これらのパラメータは平均 0、分散 1 の分布特性を失います。これにより、ネットワーク構造が深くなるにつれて、トレーニング速度が低下し、パラメータの変化が増幅されます。

バッチ正規化[18]は、各ミニバッチバックプロパゲーションの後にパラメータを平均0、分散1に再正規化する。これにより、学習率が向上し、パラメータの初期化にかかる労力が軽減されます。バッチ正規化は正規化子として機能し、ドロップアウトの必要性を減らすか、完全に排除します。

  1. 早期終了

検証セットでの複数の連続した反復で損失関数が大幅に減少しなくなった場合は、トレーニングを早期に終了する必要があります。詳細については、NIPS 2015 チュートリアル スライドを参照するか、オーバーフィッティングを防ぐ方法を参照してください。

  1. 勾配ノイズ
  2. 勾配ノイズ[21]は、各反復における勾配計算にガウス分布N(0,σ2t)のランダム誤差を加える。つまり、  
  3. gt,i=gt,i+N(0,σ2t)

ガウス誤差の分散はアニールする必要があります。

  1. σ2t=η(1+t)γ

勾配にランダム エラーを追加すると、初期パラメーター値が適切に選択されていない場合でもモデルの堅牢性が向上し、特に深く複雑なネットワークのトレーニングに適しています。その理由は、ランダム ノイズを追加すると、ローカルの極値点をスキップして、より適切なローカルの極値点を見つける可能性が高くなるためです。これは、ディープ ネットワークでより一般的です。

要約する

上記では、勾配降下法アルゴリズムの 3 つのフレームワークを紹介しましたが、最も広く使用されているのはミニバッチ勾配降下法です。次に、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam などの SGD 最適化メソッドと、いくつかの非同期 SGD メソッドに焦点を当てました。 *** は、トレーニング セットとカリキュラム学習のランダム シャッフル、バッチ正規化、早期停止、勾配ノイズなど、SGD パフォーマンスを向上させるためのその他の最適化提案も導入しました。

この投稿が、さまざまな勾配最適化アルゴリズムの使用方法についてのガイダンスを提供できたことを願っています。最適化に関する提案や方法が他にもあれば、ぜひ教えてください。あるいは、SGD をより良くトレーニングするためにどのようなテクニックや方法を使用していますか? よろしくお願いします。

<<:  機械学習から学習する機械まで、データ分析アルゴリズムにも優れた管理者が必要だ

>>:  Pinyou Interactive の Han Jingbo: インターネット広告クラウド アルゴリズムのアーキテクチャとアプリケーション

ブログ    
ブログ    

推薦する

マイクロソフト、ヘルスケア業界がデータの価値を解き放つための新しい AI ソリューションをリリース

ヘルスケア業界とそのサービス技術が急速に発展するにつれて、大量のデータと情報が生成されます。統計レポ...

AIとブロックチェーンの統合:6つの予測と可能性

今のところ、AI とブロックチェーン技術がもたらす可能性について聞いたことも、気付いていないのであれ...

AdobeなどがAIを活用しアニメキャラクターのポーズ移行を実現する新タイプの「パペットアニメーション」を提案

人形アニメーションの制作は、クリエイターの手描きに頼るアニメーションと比べると、非常に手間のかかる作...

5G、自動運転、AIがどの段階に到達したかを示す曲線

最近、世界で最も権威のあるIT市場調査およびコンサルティング会社であるガートナーは、新しいテクノロジ...

...

人材獲得競争で大学に残ることを選んだAI研究者

[[265622]]ビッグデータダイジェスト制作著者: リン・アナン、周素雲AI 人材の需要が高まる...

Amazon が企業による生成 AI の利用を支援する新機能と Bedrock を発表

Amazon Web Services Inc. は本日、自社のエコシステムにおいて、企業顧客が独自...

人間と機械のコラボレーション: セキュリティ業務における人工知能

商業的な AI の成功のほとんどは、教師あり機械学習 (ML) に関連しています。たとえば、スマート...

もう読み間違えないでください!人工知能と人間の知能の違いを理解する

人工知能が賢くなるにつれて、人類を絶滅させるだろうという主張が次々と現れています。実際、多くの有力者...

...

フランスの科学者がアリのように移動できる六脚ロボットを開発

通常、ロボットやその他のデバイスは GPS を使用して屋外で自律的に移動を行います。しかし、フランス...

機械学習の実際の応用は何ですか?

簡単に言えば、機械学習とは、非常に複雑なアルゴリズムと技術に基づいて、人間の行動を無生物、機械、また...

中国でApp Storeのランキング操作を禁止しアルゴリズムを調整

国内アプリプロモーション機関APPYINGはこのほど、アップルのApp Store Chinaランキ...

...