勾配降下法

勾配降下法は、制約のない最適化問題を解くために最もよく使用される方法の1つです。これは反復法です。各ステップの主な操作は、現在の位置の負の勾配方向を検索として使用して目的関数の勾配ベクトルを解くことです。方向。
直感的な表現は、次の図で表すことができます。

ここでの各円は関数勾配を表し、その中心は関数の極値点を表します。各反復は、現在の位置(検索方向を決定し、ステップと一緒に前進速度を決定するために使用されます)およびステップから取得された勾配に基づいて新しい位置を見つけます、反復反復が最終的に目的関数の局所的な最良の利点に到達するようにする(目的関数が凸型の場合、グローバルな最良の利点に到達します)。
勾配降下法の本質は、偏微分を求め続け、収束するまで損失関数を更新することです
1.
勾配ベクトルを見つけることの重要性は何ですか?ジオメトリに関しては、関数の変更が最も速く増加する場所です。具体的には、関数f(x、y)の場合\((x_0、y_0)\)での勾配ベクトルの方向は\((\ frac {\ partial f} {\ partial x_0}、\ frac {\部分f} {\部分y_0})^ T \)の方向は、f(x、y)が最も速く増加する場所です。言い換えれば、勾配ベクトルの方向に沿って、関数の最大値を見つけるのは簡単です。逆に、ある勾配ベクトルの反対方向、\( - (\ FRAC {\部分F} {\部分X_0} \ FRAC {\部分F} {\部分Y_0})^ T \) 方向、勾配は最も速く減少し、関数の最小値を見つけやすくなります。
2.勾配降下法と勾配上昇
法機械学習アルゴリズムでは、損失関数が最小化されている場合、勾配降下法を使用して段階的に解決し、最小化された損失関数とモデルパラメーター値を取得できます。逆に、損失関数の最大値を見つける必要がある場合は、勾配アセント法を使用して反復する必要があります。
勾配降下法と勾配上昇法は相互に変換することができます。たとえば、損失関数f(θ)の最小値を見つける必要があります。次に、勾配降下法を使用して反復的に解く必要があります。しかし、実際には、損失関数-f(θ)の最大値を逆に解くことができるので、勾配上昇法が便利です。
3.勾配降下アルゴリズムの詳細な説明
3.1 勾配降下の直感的な理解
まず、勾配降下の直感的な説明を見てみましょうたとえば、私たちは大きな山のどこかにいます。山を下る方法がわからないため、一度に1歩踏み出すことにしました。つまり、ある位置に到達したら、現在の位置の勾配を、勾配の負の方向に沿って解決しますつまり、現在の最も急な位置から1歩下がってから、現在の位置の勾配を解決し続け、この階段が最も急で下降しやすい位置にある位置に向かって1歩進みます。山のふもとに到達したと感じるまで、このように少しずつ進んでいきます。もちろん、このままでは山のふもとまで到達できず、山頂のある低いところまで到達できないかもしれません。
上記の説明からわかるように、勾配降下法は必ずしも大域的な最適解を見つけるとは限らず、局所的な最適解である場合があります。もちろん、損失関数が凸型の場合、勾配降下法で得られる解は大域的最適解でなければなりません。

3.2勾配降下法の関連概念

  1. 学習率学習サイズは、勾配降下中の勾配の負方向の各ステップの長さを決定します。上記の下り坂の例を使用すると、ステップの長さは、現在のステップで最も急で簡単な下り坂の位置に沿ったステップの長さです。
  2. 特徴(特徴):2つの単一特徴サンプルなどのサンプルの入力部分を指します\((x ^ {(0)}、y ^ {(0))})、(x ^ {(1)}、y ^ {(1))})\)、最初のサンプルフィーチャは\(x ^ {(0)} \)、最初のサンプル出力は\(y ^ {(0)} \)
  3. 仮説関数(仮説関数):教師あり学習では、入力サンプルを近似するために使用される仮説関数は\(h_ \ theta(x)\)と記述されます。たとえば、単一の特徴のm個のサンプル\((x ^ {(i)}、y ^ {(i)})(i = 1,2、...、m)\)の場合、近似関数は次のように使用できます:\ (h_ \ theta(x)= \ theta_0 + \ theta_1x。\)
  4. 損失関数(損失関数):モデルの適合度を評価するために、通常、損失関数を使用して適合度を測定します。損失関数の最小化は、適合度が最良であり、対応するモデルパラメーターが最適パラメーターであることを意味します。線形回帰では、損失関数は通常、サンプル出力と仮説関数の差を二乗します。たとえば、m個のサンプル\((x_i、y_i)(i = 1,2,3 ...、m)\)の場合、線形回帰が使用され、損失関数は次のようになります。

\ [J(\ theta_0、\ theta_1)= \ sum_ {i = 1} ^ m(h_ \ theta(x_i)-y_i)^ 2 \]

その中で、\(x_iはi番目のサンプルフィーチャを表し、y_iはi番目のサンプルに対応する出力を表します。h_\ theta(x_i)\)は、関数
3.3勾配降下を想定する詳細なアルゴリズムです。勾配降下
法の代数的方法の説明

1.前提条件:最適化モデルの仮説関数と損失関数を決定します

たとえば、線形回帰の場合、関数は次のように表されると想定します。\(h_ \ theta(x_1、x_2、... x_n)= \ theta_0 + \ theta_ {1} x_1 + ... + \ theta_ {n} x_ {n} \ ) >> \(\ theta_i(i = 0,1,2、...、n)\)はモデルパラメーターであり、\(x_i(i = 0,1,2 ...、n)\)は各サンプルのn個の特徴値について、次のように簡略化できる特徴\(x_0 = 1 \)を追加します

\ [h_ \ theta(x_0、x_1、... x_n)= \ sum \ limits_ {i = 0} ^ {n} \ theta_ {i} x_ {i} \]

上記の仮説関数に対応して、損失関数は次のとおりです。

\ [J(\ theta_0、\ theta_1 ...、\ theta_n)= \ frac {1} {2m} \ sum \ limits_ {j = 0} ^ {m}(h_ \ theta(x_0 ^ {(j)} 、x_1 ^ {(j)}、... x_n ^ {(j)})-y_j)^ 2 \]

2.アルゴリズム関連のパラメーターの初期化:主に初期化\(\ theta_0、\ theta_1 ...、\ theta_n \)、アルゴリズムの終了距離\(\ varepsilon \)およびステップサイズ\(\ alpha \)事前知識がない場合は、すべての\(\ theta \)を0に、ステップサイズを1 初期化ます。チューニング時に再度最適化します。
3.アルゴリズムプロセス:

1)現在の位置での損失関数の勾配を決定します\(\ theta_i \)の場合、勾配式は次のとおりです。

\ [\ frac {\ partial} {\ partial \ theta_i} J(\ theta_0、\ theta_1 ...、\ theta_n)\]

  1. 電流の減少から得られた損失関数の勾配のステップサイズ、すなわち、乗算される(\ \アルファ\ FRAC {\部分} {\部分\ theta_i} Jが(\ theta_0、\ theta_1 ...、\ theta_n)\) に対応前の登山の例に一歩踏み込んでください。
  2. すべての\(θ_i\)、勾配降下距離がε未満であるかどうかを判断します。ε未満の場合、アルゴリズムは終了し、現在のすべての\(θ_i(i = 0,1、... n)\)が最終結果です。それ以外の場合は、手順4に進みます。
  3. すべてのθを更新します。\(θ_i\)の場合、更新式は次のとおりです。更新が完了したら、ステップ1に進みます。

\ [\ theta_i = \ theta_i-\ alpha \ frac {\ partial} {\ partial \ theta_i} J(\ theta_0、\ theta_1 ...、\ theta_n)\]

勾配降下を詳細に説明する例として、線形回帰を取り上げます。

サンプルが次のとおりであるとします:\((x_1 ^ {(0)}、x_2 ^ {(0)}、... x_n ^ {(0)}、y_0)、(x_1 ^ {(1)}、x_2 ^ {( 1)}、... x_n ^ {(1)}、y_1)、...(x_1 ^ {(m)}、x_2 ^ {(m)}、... x_n ^ {(m)}、y_m )\)
損失関数は前の前提条件で説明したとおりです:\(J(\ theta_0、\ theta_1 ...、\ theta_n)= \ frac {1} {2m} \ sum \ limits_ {j = 0} ^ {m }(h_ \ theta(x_0 ^ {(j)}、x_1 ^ {(j)}、... x_n ^ {(j)})-y_j)^ 2 \)\(の
アルゴリズムプロセスステップ1 θ_i\)の偏微分は次のように計算されます

\ [\ frac {\ partial} {\ partial \ theta_i} J(\ theta_0、\ theta_1 ...、\ theta_n)= \ frac {1} {m} \ sum \ limits_ {j = 0} ^ {m} (h_ \ theta(x_0 ^ {(j)}、x_1 ^ {(j)}、... x_n ^ {(j)})-y_j)x_i ^ {(j)} \]

サンプルにはx0がないため、すべての\(x ^ j_0 \)は1に設定されます。
ステップ4の\(\ theta_i \)の更新式次のとおりです。

\ [\ theta_i = \ theta_i- \ alpha \ frac {1} {m} \ sum \ limits_ {j = 0} ^ {m}(h_ \ theta(x_0 ^ {(j)}、x_1 ^ {(j) }、... x_n ^ {j})-y_j)x_i ^ {(j)} \]

この例から、現在のポイントの勾配方向はすべてのサンプルによって決定され、理解を容易にするために\(\ frac {1} {m} \)追加されていることがわかります。ステップサイズも一定であるため、その可能性も一定であるため、ここ> \(\ alpha \ frac {1} {m} \)は定数で表すことができます。
勾配降下法の行列の説明

  1. 前提条件:3.3.1と同様に、最適化モデルの仮説関数と損失関数を確認する必要があります。

線形回帰の場合関数\(h_ \ theta(x_1、x_2、... x_n)= \ theta_0 + \ theta_ {1} x_1 + ... + \ theta_ {n} x_ {n} \)の行列式が:

\ [h_ \ mathbf {\ theta}(\ mathbf {X})= \ mathbf {X \ theta} \]

その中で、関数\(h_ \ mathbf {\ theta}(\ mathbf {X})\)がmx 1のベクトルであり、n + 1の代数モデルパラメーターを持つと仮定します。Xはmx(n + 1)次元の行列です。mはサンプルの数を表し、n + 1はサンプルの特徴の数を表します。
損失関数の式は次のとおりです:\(J(\ mathbf \ theta)= \ frac {1} {2}(\ mathbf {X \ theta}-\ mathbf {Y})^ T(\ mathbf {X \ theta}- \ mathbf {Y})\)、ここでYはサンプルの出力ベクトル、次元はmx1

  1. アルゴリズム関連のパラメータ初期化:代数的手法と同じ
  2. アルゴリズムプロセス:
  1. 現在の位置での損失関数の勾配を決定します。\(\ theta \)ベクトルの場合、勾配式は次のようになります。

\ [\ frac {\ partial} {\ partial \ mathbf \ theta} J(\ mathbf \ theta)\]

  1. ステップサイズに損失関数の勾配を掛けて、現在の位置が下がる距離を取得します。つまり、前の上昇の例のステップの\(\ alpha \ frac {\ partial} {\ partial \ theta} J(\ theta)\)
  2. 決定する(\シータ\)\各値ベクトル内側、勾配降下が少ない距離よりも\(\ varepsilon \)未満である(\ varepsilon \)\アルゴリズムは停止し、その後、現在の\(\シータ\)ベクターが最終結果。それ以外の場合は、ステップ4に進みます。
  3. 更新\(\シータ\)以下のように表現が更新されたベクター。更新が完了したら、ステップ1に進みます。

\ [\ mathbf \ theta = \ mathbf \ theta- \ alpha \ frac {\ partial} {\ partial \ theta} J(\ mathbf \ theta)\]

例として線形回帰を考えます。

\(\ theta \)ベクトルの損失関数の偏微分は、次のように計算されます。

\ [\ frac {\ partial} {\ partial \ mathbf \ theta} J(\ mathbf \ theta)= \ mathbf {X} ^ T(\ mathbf {X \ theta}-\ mathbf {Y})\]

手順4のθベクトルの更新式は次のとおりです。

\ [\ mathbf \ theta = \ mathbf \ theta- \ alpha \ mathbf {X} ^ T(\ mathbf {X \ theta}-\ mathbf {Y})\]

これは、行列導出チェーン規則と2つの行列導出式を使用します。

\ [式1:\ frac {\ partial} {\ partial \ mathbf {x}}(\ mathbf {x ^ Tx})= 2 \ mathbf {x} \; \; xはベクトル\]

\ [式2:\ nabla_Xf(AX + B)= A ^ T \ nabla_Yf、\; \; Y = AX + B、\; \; f(Y)is a scalar \]

3.4勾配降下アルゴリズムの調整

勾配降下法を使用する場合は、調整が必要です。何を調整する必要がありますか?

  1. アルゴリズムステップの選択。
  2. アルゴリズムパラメータの初期値の選択。
  3. 正規化。サンプル内のさまざまな特徴の値の範囲が異なるため、反復が非常に遅くなる可能性があります。特徴値の影響を減らすために、特徴データを正規化できます。つまり、各特徴xについて、期待値\(\上線{x} \)と標準偏差std(x)、次に変換:

\ [\ frac {x-\ overline {x}} {std(x)} \]

この機能の新しい期待値は0で、新しい分散は1です。反復速度を大幅に加速できます。

4勾配降下法の大きなファミリ(BGD、SGD、MBGD)
4.1
バッチ勾配降下法バッチ勾配降下法バッチ勾配降下法は、勾配降下法の最も一般的に使用される形式です。特定の方法は、すべてのサンプルを使用してパラメーターを更新することです。更新、このメソッドは上記の3.3.1の線形回帰勾配降下アルゴリズムに対応しています。つまり、3.3.1の勾配降下アルゴリズムはバッチ勾配降下法です。 

\ [\ theta_i = \ theta_i- \ alpha \ sum \ limits_ {j = 1} ^ {m}(h_ \ theta(x_0 ^ {(j)}、x_1 ^ {(j)}、... x_n ^ { (j)})-y_j)x_i ^ {(j)} \]

m個のサンプルがあるので、すべてのm個のサンプルの勾配データを使用して勾配を見つけます。
4.2確率
的勾配降下法(Stochastic Gradient Descent)確率的勾配降下法は、実際にはバッチ勾配降下法に似ています。違いは、勾配を計算するときにデータのすべてのmサンプルを使用する代わりに、勾配を見つけるために1つのサンプルjのみを使用することです。対応する更新式は次のとおりです。

\ [\ theta_i = \ theta_i- \ alpha(h_ \ theta(x_0 ^ {(j)}、x_1 ^ {(j)}、... x_n ^ {(j)})-y_j)x_i ^ {(j )} \]

確率的勾配降下法と4.1のバッチ勾配降下法は2つの極端で、1つは勾配降下にすべてのデータを使用し、もう1つは勾配降下に1つのサンプルを使用します。自然な長所と短所は非常に顕著です。トレーニング速度については、確率的勾配降下法は1つのサンプルのみを使用して毎回反復し、トレーニング速度は非常に高速ですが、サンプルサイズが大きい場合、バッチ勾配降下法はトレーニング速度を満たすことができません。正確さのために、確率的勾配降下法を使用して、1つのサンプルのみで勾配方向を決定します。その結果、最適ではない可能性が高い解が得られます。収束速度については、確率的勾配降下法は一度に1つのサンプルを反復するため、反復方向が大きく変化し、局所的な最適解にすばやく収束できません。
それでは、両方の方法の利点を組み合わせた平均的な方法はありますか?はい!これは、小さなバッチ勾配降下法です。
4.3
ミニバッチ勾配降下法(ミニバッチ勾配降下法)ミニバッチ勾配降下法は、バッチ勾配降下法とランダム勾配降下法の折衷案です。つまり、mサンプルの場合、xを使用して反復します。1<x < m。一般的には、x = 10をとることができますが、xの値はサンプルデータに応じて調整できます。対応する更新式は次のとおりです。

\ [\ theta_i = \ theta_i- \ alpha \ sum \ limits_ {j = t} ^ {t + x-1}(h_ \ theta(x_0 ^ {(j)}、x_1 ^ {(j)}、.. .x_n ^ {(j)})-y_j)x_i ^ {(j)} \]

5勾配降下法とその他の非制約最適化アルゴリズムの比較
機械学習では、勾配降下に加えて、制約なし最適化アルゴリズムにも、ニュートン法と準ニュートン法に加えて、前述の最小二乗法があります。
最小二乗法とは異なり、勾配降下法ではステップサイズを選択する必要がありますが、最小二乗法では選択しません。勾配降下法は反復解法であり、最小二乗法は分析解法です。サンプルサイズがそれほど大きくなく、分析ソリューションがある場合、最小二乗法は勾配降下法よりも優れており、計算速度は高速です。ただし、サンプルサイズが大きい場合、最小二乗法では非常に大きな逆行列が必要になるため、解析解の解決が困難または時間がかかります。反復勾配降下法には利点があります。
ニュートン法/準ニュートン法と比較して、勾配降下法は反復的ですが、勾配降下法は勾配解であり、ニュートン法/準ニュートン法は、2次ヘッセ行列の逆行列または疑似逆行列を使用して解かれます。 。相対的に言えば、ニュートン法/準ニュートン法は収束が速くなります。ただし、各反復の時間は勾配降下法よりも長くなります。

リファレンス:https : //www.cnblogs.com/pinard/p/5970503.html

おすすめ

転載: www.cnblogs.com/whiteBear/p/12727080.html