アダムの最適化

AdaGrad(アダプティブグラデーション、適応勾配)

         調整するために異なるパラメータごとに異なる学習率、

          より小さなステップサイズ更新のパラメータの頻繁な変更、及びより大きなステップを有するスパースパラメータが更新されます。

 

tは時間ステップGT勾配を表す(に対応する各パラメータの偏導関数を含むベクターは、GT、iがi番目の時間パラメータtの偏微分を表します。)

GT2は、(それぞれの要素自体によって、すなわちGT要素毎の二乗演算を得、ベクター)は、時間ステップtの二乗の勾配を表します

利点:スパース・データ収束をより効果的に標準SGDアルゴリズムよりも、情報の疎な勾配とすることができます。

短所:母の勾配は、時間ステップが増加とともに、分母の増加を蓄積していき、最終的には学習率の縮小につながることは効果的に更新するには小さすぎる用語を乗。

 

 

 

アダムの更新ルール

時間ステップtの勾配を計算します。

 

 1.指数移動平均勾配、M0は0に初期化されます

   指数関数的減衰速度係数β1は、一般的に1に近い値をとる量分布(現在の運動量の勾配)を制御します。デフォルトは0.9です

 

2.指数移動平均勾配はゼロに初期化V0、二乗しました。

  指数関数的な減衰率係数β2、偏見勾配制御前の広場。デフォルト値は0.999であります

  

 

3. M0が0に初期化されるので、それを修正するために、0に傾向があり、MTをリードします

  

 

 初期トレーニング期VTに0とリードに初期化4.v0は、それを修正するために、0に傾向があり、

 

 

5.アップデートデフォルトは^ -8率α=0.001ε= 10の学習を前記パラメータは、除数を回避することはゼロとなります。

 

 6.コード


クラスアダム:
デフ__init __(自己、損失、重量、LR = 0.001、ベータ= 0.9、β2 = 0.999、epislon = 1E-8):
self.loss =損失
self.theta =重み
self.lr = LR
self.beta1 =ベータ1
self.beta2 =ベータ
self.epislon = epislon
self.get_gradient =グラ(損失)
self.m = 0
self.v = 0
self.t = 0
DEF minimize_raw(自己):
self.t + = 1
G = self.get_gradient (self.theta)
self.m = self.beta1 * self.m +(1-self.beta1)* G
self.v = self.beta2 * self.vの+(1-self.beta2)*(G * G)
自己.m_cat = self.m /(1-self.beta1 ** self.t)
self.v_cat = self.v /(1-self.beta2 ** self.t)
self.theta- = self.lr * self.m_cat /(self.v_cat ** 0.5 + self.epislon)
プリント(「ステップV {}:{} {シータ:4D} G:{} LR:{} M {}」形式(self.t、G、self.lr、self.m、self.v、self.theta))。
デフ自己(最小):
self.t + = 1
、G = self.get_gradient(self.theta)
LR = self.lr *(1-self.beta2 ** self.t)** 0.5 /(1-self.beta1 ** self.t)
self.m = self.beta1 * self.m +(1-自己。ベータ1)* G
self.v = self.beta2 * self.v +(1-self.beta2)*(グラム* gで)
self.theta- = lr.self.m /(self.v ** 0.5 + self.epislon )
        印刷( "ステップ{:4D} G:{} LR:{} M:{}、V:{}シータ{}" 形式(self.t、G、LR、self.m、self.v、self.theta。 ))

 

おすすめ

転載: www.cnblogs.com/hapyygril/p/11589963.html