最適化アルゴリズム、公式、アプリケーションのPyTorch-アダム原理

 コンセプト:アダムは、トレーニングデータに基づいて、従来の一次確率的勾配降下アルゴリズムの最適化プロセスは、反復的に、ニューラルネットワークの重みを更新することができますに代わるものです。:アダムは、(確率的最適化のための方法アダムは2015 ICLR紙にトロント大学に提出OpenAI Diederik KingmaとジミーのBaの始まりである ) 提案しました。頭字語ではなく、名前ではありません「アダム」という名前のアルゴリズム。その名は、適応トルク推定値(適応モーメント推定)から来ています

  本質的RMSprop運動量項を有するADAM(適応モーメント推定)、それはモーメント推定が動的各段階勾配の学習速度パラメータを調整することにより、二次モーメント推定されます。その主な利点は、パラメータは比較的安定しているように、オフセット補正の後、学習速度の各反復は、決定された範囲を有することです。次のように式は次のとおりです。

  

  GT | |、E | GT最初の2つの式は、勾配一次モーメントと二次モーメント推定推定されていることが望ましいEとして見ることができる | ^ 2 ;推定 
式3及び4は、2つの一次です推定された次モーメントを補正するので、所望の非バイアス推定値に近づけることができます。これは、勾配推定瞬間余分なメモリ要件に直接見ることができ、かつ動的勾配に基づいて調整することができます。最後に、動的学習制約指数nの前部が形成され、明確な範囲となります。

  利点:

1、良い疎勾配Adagrad RMSprop良いと非定常目標の利点を組み合わせ、 
2、より小さなメモリ要件; 
3、異なる適応学習レートが異なるパラメータについて計算され、 
図4に示すように、非凸最適化のほとんどに適用-大規模なデータセット、および高次元空間のため。

  アプリケーションとソースコード:

  パラメータの例:

クラスtorch.optim.Adam(paramsは、LR = 0.001、ベータ=(0.9、0.999)、EPS = 1E-08、weight_decay = 0)

  定義:

  paramsは(反復処理可能):反復最適化パラメータまたはパラメータ群を定義するために使用することができるdictsを。

  LR  (フロート、オプション):学習率(デフォルト:  。1E- 3)  のベータ版、  タプル[フロート、フロート]、オプション):

  勾配に使用される平均二乗係数を計算する(デフォルト:(0.9、  0.999))  EPS  (フロート、オプション):

  数値的安定性を改善するために、の分母の項に追加される(デフォルト:  。1E- 8)  weight_decay  (任意フロート):減衰量(例えば、L2ペナルティ)(デフォルト:  0)

  torch.optim.adam出典:

コードをコピー
1つのインポート数学
 .optimizerインポートオプティマイザから2 
 3 
 4クラスアダム(オプティマイザ):
 5デフ__init __(自己、paramsは、LR = 1E-3、ベータ=(0.9、0.999)、EPS = 1E-8、weight_decay = 0)。
 6デフォルト= dictの(LR = LR、ベータ=ベータ、EPS = EPS、weight_decay = weight_decay)
 7超(アダム、自己).__ INIT __(paramsは、デフォルト)
 8 
 9 DEF工程(自己、クロージャ=なし):
10のロス=なし
11閉鎖がNoneでない場合:
=クロージャ12件の損失()
13 
self.param_groupsのグループのための14:
群におけるp 15 [ 'のparamsは'] 
:16 p.gradなしであれば 
17は続行します
18グラ= p.grad.data 
19状態= self.state [P] 
20 
21#状態初期
22 lenは(状態)== 0の場合:
23状態[ 'ステップは'] 0 = 
勾配の24#指数移動平均値
25を状態[ 'exp_avg'] = grad.new()。resize_as_(卒業生).zero_()
二乗勾配の26#指数移動平均値
27の状態[ 'exp_avg_sq'] = grad.new()。resize_as_(卒業生).zero_ ()
28 
29 exp_avg、exp_avg_sq =状態[ 'exp_avg']、状態[ 'exp_avg_sq'] 
30ベータ1、ベータ2 =基[ 'ベータ'] 
31
32状態[ 'ステップ'] + = 1 
44 bias_correction2 = 1 -ベータ**状態[ 'ステップ'] 
45 step_size =基[ 'LR'] *数学。SQRT(bias_correction2)/ bias_correction1 
46] + = 1 
33
34基[ 'weight_decay'] = 0の場合:
35グラ= grad.add(群[ 'weight_decay']、p.data)
36 
37#ディケイ平均係数実行する第一及び第二モーメント
38 exp_avg.mul_(ベータ)を。 ADD_(1 -ベータ、卒業生)
39 exp_avg_sq.mul_(ベータ).addcmul_(1 -ベータ、卒業生、卒業生)
40 
41 denom = exp_avg_sq.sqrt()ADD_(群[ 'EPS'])。
42 
43 bias_correction1 = 1 -ベータ**状態[ 'ステップ']
47 p.data.addcdiv _( - step_size、exp_avg、denom)
48 
49リターンロス
コードをコピー

  例を使用します。

コードをコピー
1つのインポートトーチ
 2 
 3#Nはバッチサイズです。D_INは、入力の次元です。
 4#Hが隠さ寸法です。D_OUTは、出力の次元です。
 5 N、D_IN、H、D_OUT = 64、1000、100、10の
 6 
 7#は、入力および出力を保持するためのランダムテンソル作成
 8 X = torch.randn(N、D_IN)
 9、Y = torch.randn(N、D_OUT)
10 
11の#は、私たちのモデルと損失関数を定義するためにNNパッケージを使用してください。
12モデル= torch.nn.Sequential(
13 torch.nn.Linear(D_IN、H)、
14 torch.nn.ReLU()、
15 torch.nn.Linear(H、D_OUT)、
16)、
17 loss_fn = torch.nn .MSELoss(縮小= '合計') 
18 
19#の重みを更新するオプティマイザを定義するOPTIMパッケージを使用
20#私たちのためのモデル。ここでは、アダムが使用されます。OPTIMパッケージは、他の多くが含まれています
21#の最適化algoriths。アダムのコンストラクタの最初の引数は伝え
、それが更新する必要がありますテンソル22#オプティマイザを。
23 learning_rate = 1E-4 
24オプティマイザ= torch.optim.Adam(model.parameters()、LR = learning_rate)
の範囲内のT 25(500):
26位往路:計算モデルにXを通過させることにより、Yを予測しました。
27 y_pred =モデル(X)
28 
29#計算し、印刷損失。
30の損失= loss_fn(y_pred、Y)
31プリント(T、loss.item())  
32 
復路前に33#、ゼロの全てをオプティマイザオブジェクトを使用学習可能であり、それが更新された変数のための34の#勾配
モデルの35の#重み)。デフォルトでは、勾配があるためです
.backwardいつでも(すなわち、上書きされていない)バッファに蓄積された36#を() 
37位と呼ばれています。詳細はtorch.autograd.backwardのチェックアウトドキュメント。
38 optimizer.zero_grad()
39 
40#復路:モデルに対する損失の計算勾配
41#パラメータ
42 loss.backward()
43 
オプティマイザにステップ関数を呼び出す44#はそのに対して更新を行う
45#パラメータ
46オプティマイザ。ステップ()
コードをコピー

  ここでは、私は可能アップされているアプリケーションの大半に対処することを考えています。私の目的は、基本的に完了します。次のステップでは、アプリケーションの理解を深めています。

  

参照文献:

1 https://blog.csdn.net/kgzhang/article/details/77479737

2 https://pytorch.org/tutorials/beginner/examples_nn/two_layer_net_optim.html

著者: 仮想学生
説明:小さなもののシステムソリューション、良いものプロトコル(無線LAN、BT)とオーディオ処理アルゴリズムに焦点を当てています。
Eメール:ビジネスの協力と技術を議論[email protected] QQ :. 1173496664オーディオ市場のドッキング技術グループ:347 609 188

おすすめ

転載: www.cnblogs.com/jfdwd/p/11239534.html
おすすめ