勾配降下法アルゴリズムを詳しく説明する

1. 勾配降下法アルゴリズムとは

勾配降下法 (勾配降下法) は、最急降下法とも呼ばれる 1 次最適化アルゴリズムです。勾配降下法を使用して関数の極小値を見つけるには、関数上の現在の点に対応する勾配 (または近似勾配) の反対方向に指定されたステップ距離点を繰り返し検索する必要があります。代わりに勾配の正の方向に繰り返し探索すると、関数の極大点に近づきます。このプロセスは勾配上昇法と呼ばれ、その逆は勾配降下法と呼ばれます。

1.1 画像の理解

山のどこかに立って山を下りたいときに勾配降下を理解することができます。この時点で、山を下る最速の方法は、最も急な場所、山をどこへ行くのか、この戦略を実施し続けることです。 n回
ここに画像の説明を挿入

ここに画像の説明を挿入
3D 画像の場合も、N 歩進むと山のふもとに到達するなど、同様の手順があります。

1.2 数学的理解 - 微分

勾配降下アルゴリズムとは何かを明らかにした後、それをコンピュータで解くことができるように数式や手法に変換し、ニーズに合ったアルゴリズムモデルを得る必要があります y = x^2 などの単一変数の関数については、中学校の二次関数の知識を使えば最小値が存在し、その最小値は (0, 0) であることがすぐに理解できます y などの複素関数や多変数関数を扱えるようにするには(x, y)=x^2+y^2、またはニューラル ネットワーク内の何千次元関数であっても、数式を使用してそれらを解いたり微分したりするのは非常に複雑です。差分は増分を反映しており、これはまさに勾配降下法アルゴリズムで最も速く下り坂を進む必要がある方向です。
例: d ( x 2 ) d ( x ) = 2 x \frac{d(x^2) }{d(x)}=2xd ( x )d ( x2 )=2 x
複素関数の場合、下図 y=sin(x)+cos(y) のように、このとき二重変数 x と y が存在するため微分中です。このとき得られる導関数は、二値関数 z = f ( x , y ) z=f\left ( x,y\right)
ここに画像の説明を挿入
z=f( x ,y たとえば、各変数∂ z ∂ xに対して連続 1 次偏導関数があるとします。×∂z _∂ z ∂ y \frac{\partial z} {\partial y}∂y _∂z _これら 2 つの偏微分によって形成されるベクトル[ ∂ z ∂ x , ∂ z ∂ y ] \left [ \frac{\partial z} {\partial x},\frac{\partial z} {\partial y} \right ][×∂z _∂y _∂z _]は二値関数の勾配ベクトルであり、一般に∇ f ( x , y ) として記録されます \nabla f\left ( x,y \right )∇f _( x ,y
したがって、一変量関数では、勾配は画像の傾きの変化を表し、多変量関数では、勾配はベクトルを表し、最も速く変化する場所が最も急な方向になります。

1.3 ステップサイズ (学習率) - aaある

私は、山を最速で下る方法、および山を最速で下る方法と山を下る方向を解決するために数学的手法を使用する方法について議論してきましたが、山を下る階段という問題を見落としていました。もちろん、段差が大きすぎると卵を引っ張りやすくなりますし、段差が小さすぎると下山するのが遅すぎますa、適切なステップを経た後、スムーズかつ最速で下り坂を移動できるようになります。最初は大きな一歩で山を下り、一番低いところから小さな一歩を踏み出し、どんどん最低点に近づいていくのが最善の方法だと考えることもできるかもしれません。ただし、最下位の最後の0.000001に限りなく近いと現時点では実用上意味がないので、一定の値も同時に決定する必要があり、一定の繰り返し後に判定と設定値の大小を判定し、それ以下であればループを停止する。
さまざまなステップ長の比較
ステップ サイズが小さい
ここに画像の説明を挿入と、計算量が多くなり、時間がかかりますが、精度は高くなります。

大きなステップと
ここに画像の説明を挿入大きなステップ サイズ、つまりより大きなaaa、パフォーマンスは変動しており、最低点を逃しやすく、計算量は比較的少ないです。
: 関数の凹凸により、凸関数の場合は無限に最適解に近づくことができますが、非凸関数の場合は局所的な最適解しか得られません。上図に示すように、異なる学習率またはステップ サイズ α \
ここに画像の説明を挿入
alphaに対してαでは、下り坂に異なるパス (パス A とパス B) があるため、局所最適解と呼ばれる異なる解が存在します。

1.4 勾配降下法アルゴリズムの実装

下りの方向と大きさを決定した後、勾配降下法アルゴリズムを実装できます。同様に、山を下りる前に A (x、y、説明しやすいように、この記事では 2 次元の座標を使用します。高次元の場合も同じ理由です) と仮定すると、A − a Δ Aa\ Delta のみとなります
a Δ は
、以前に説明したように、この時点では関数について、毎回少しずつステップダウンすることを意味しますΔ \DeltaΔ は方向を表すことができません ∇ \nbla,すなわち:
A − a ∇ Aa\nablaa
勾配を計算します
=θ α J ( θ )
式を指定した後の一般的な勾配降下法アルゴリズムのステップは次のとおりです。

1、给定待优化连续可微分的函数J(θ),学习率或步长a,以及一组初始值(真实值)
2、计算待优化函数梯度
3、更新迭代
4、再次计算新的梯度
5、计算向量的模来判断是否需要终止循环

在python中,需要将一维的数字和公式转化为矩阵的形式,这能显著提升算法的运行效率和计算时间
假设我们要对简单线性回归进行拟合,从高中知识或大学知识我们可得,简单线性回归其实就是找出一条直线y=kx+b,使得尽可能的穿过多的点,如下图:
ここに画像の説明を挿入
明显,直线C为最优的拟合直线,则其公式为:
J ( Θ ) = 1 2 m ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) 2 ​ J\left ( \Theta \right )=\frac{1}{2m}\sum_{i=1}^{n}\left ( h_{\theta } \left ( x^{\left ( i \right )}\right )-y^{\left ( i \right )} \right )^{2}​ J()=2m _1i = 1( h( ×( i ) )y( i ) )2
ここで、 1 2 メートル \frac{1}{2m}2m _1微分するのに便利で、結果には影響しません 勾配の計算式:
∂ J ( Θ ) ∂ θ j = 1 n ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) xj ( i ) \frac{ \partial J\left ( \Theta \right )}{\partial \theta _{j}}=\frac{1}{ n}\sum _{i=1}^{n}\left ( h_{\theta } \left ( x^{\left ( i \right )}\right )-y^{\left ( i \right )} \right )x_{j}^{\left (i \right )}∂θ _jJ( Θ )=n1i = 1( h( ×( i ) )y( i ) )バツj()
迭代公式:
θ = θ − α ∗ ∇ J ( θ ) θ=θ−\alpha∗\nabla J(θ)=θ α J ( θ )

1.5 勾配降下法アルゴリズムの種類

1.5.1 バッチ勾配降下法アルゴリズム

前の説明で使用した勾配降下法アルゴリズムの式は次のとおりです。
∂ J ( Θ ) ∂ θ j = 1 n ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) xj ( i ) \frac{ \partial J\left ( \Theta \right )}{\partial \theta _{j}}=\frac{1}{n}\ sum_{i=1} ^{n}\left ( h_{\theta } \left ( x^{\left ( i \right )}\right )-y^{\left ( i \right )} \right )x_{j}^{\left (i \right )}∂θ _jJ( Θ )=n1i = 1( h( ×( i ) )y( i ) )バツj()
コンピュータは毎回全データから勾配を計算し、その平均値を1回の反復の勾配として計算していることがわかりますが、高次元データの場合は計算量が非常に多くなるため、この勾配降下法アルゴリズムはバッチ勾配降下法アルゴリズムと呼ばれています

1.5.2 確率的勾配降下法アルゴリズム

確率的勾配降下法アルゴリズムは、バッチ勾配降下法アルゴリズムの欠点を利用して毎回すべてのデータを計算し、特定のデータをランダムに選択してこの反復の勾配として勾配を計算します。勾配の計算式: ∂ J ( Θ ) ∂ θ j = ( h θ ( x ( i ) ) − y ( i ) ) xj ( i ) \frac{\partial J\left ( \Theta \right )}{\partial \theta _{j} }=\left ( h_{\theta }\left ( x^{\left ( i \right )} \right )-y^{\left ( i \right )} \right )x_{j}^{\left ( i \right )
}∂θ _jJ( Θ )=( h( ×( i ) )y( i ) )バツj()
定義:
θ = θ − α ⋅ ▽ θ J ( θ ; x ( i ) ; y ( i ) ) \theta =\theta -\alpha \cdot \triangledown _{\theta }J\left ( \theta;x^{\left ( i \right )} ;y^{\left ( i \right )} \right );=あるJ(;バツ( i ) ;y( i ) )
ある点をランダムに選択することにより、合計と平均のプロセスが省略され、計算量が軽減され、計算速度が向上しますが、ランダムに選択されるため、大きなショックが生じます。

1.5.3 ミニバッチ勾配降下法アルゴリズム

小バッチ勾配降下法アルゴリズムは、バッチ勾配降下法アルゴリズムと確率的勾配降下法アルゴリズムの長所と短所を組み合わせたものです。サンプル内のデータの一部がランダムに選択されます。勾配の計算式: ∂ J ( Θ ) ∂ θ j = 1 k ∑ ii + k ( h θ ( x ( i ) ) − y ( i ) ) xj ( i ) \frac{\part ial J\left ( \Theta \right ) }{\partial \ theta _{j}}=\frac{1}{k}\sum_{i}^{i+k}\left ( h_{\theta } \left ( x^{\left ( i \right )}\right )-y^{\left ( i \right )} \right )x_{j}^{\left (i \right )
}∂θ _jJ( Θ )=k1+ k( h( ×( i ) )y( i ) )バツj()
迭代公式:
θ = θ − α ⋅ ▽ θ J ( θ ; x ( i : i + k ) ; y ( i : i + k ) ) \theta =\theta -\alpha \cdot \triangledown _{\theta }J\left ( \theta ;x^{\left ( i:i+k \right )};y^{\left ( i:i+k \right ) } \右)=あるJ(;バツ( i : i + k ) ;y( i : i + k ) ) は
、通常、最も一般的に使用される小規模バッチ勾配降下法アルゴリズムであり、高速な計算速度と安定した収束を備えています。

おすすめ

転載: blog.csdn.net/JaysonWong/article/details/119818497