1.異なるオプティマイザについて学びます
2.コードオプティマイザを書く
3.Momentum
4次元の最適化を、確率的勾配降下最適化実施
5.Ada適応勾配調整方法
6.RMSProp
7.Adam
8.PyTorch種選択オプティマイザ
勾配降下:
1.標準的な勾配降下法:GD
一度下げ各サンプルを、容易に得る局所最適に向かって最も急な位置、及び遅いトレーニングの基準電流方向
2.バッチ降下法:BGDは
もはや一度調整したサンプルの入力ですが、調整のモデルパラメータを調整し、入力コスト関数と関連するすべてのサンプルを更新するためのデータを一括した後、それがほとんどを選択し、マスターの近くに横たわっ前に、あります優れた方向。
3.確率的勾配降下法SGD
ランダムに一括して試料中の選択されました。ブラインドがダウンし、常に山のベースに、一度計算勾配で歩きます。しかし、ノイズの導入は、エラーのダウン量の更新を引き起こす可能性があります。局所最適解だけでは克服することはできません。
運動量の最適化
基準の最適化の勢いの勢い
インパクトの重量がした後、現在の重量値を変更するには、変更されます。同様の下でボールを転がすと、スクロールを加速し、慣性を持って来るための時間でした。
NAGニュートン加速勾配
NAGニュートン加速勾配が現在の速度を適用した後に、運動量は、標準的な補正係数に加算されます。盲目的momentunペレット勾配が、NAGペレットを参照し、現在の位置パラメータを更新するために、一般的にここで次の位置を知って、そのベースを遅く来ます。
エイダ適応勾配調整方法:Adagrad:学習率が自動的にスパースデータのために調整されているアルゴリズムの特性。各パラメータに同じ学習率を使用して、各ステップでの勾配降下法は、そのような掃引手法は効果的に各データは、独自の特性を設定することはできません。Adadelta(Adagradは、アルゴリズムの改善):一つの問題は、Adagradはトレーニングとして、高速な学習率単調減衰を進行していることです。、代わりに全体の歴史の正方形の移動平均二乗勾配Adadelta。
RMSProp:RMSpropアルゴリズムは学習率の調整です。Adagradは急速にAdagrad問題を減少する前に、すべての二乗の勾配を蓄積されますが、唯一のためのアルゴリズムは学習率を軽減することができ、対応する平均値を算出しRMSprop。
ADAMは:正方形の内側及び第二モーメント勾配としてAdadelta勾配場合、勾配一次モーメントは、それ自体の合計です。Adadeltaの基礎と一次モーメントの導入にアダムアルゴリズムの二次モーメントです。最初の瞬間、実際には、運動量法の勢いの内部に似ています。
1 インポートトーチ 2 インポートデータとしてtorch.utils.data 3 インポートFとしてtorch.nn.functional 4 インポートPLTとしてmatplotlib.pyplot 5 6 = 0.01 LR 7 BATCH_SIZE = 32 8 EPOCH = 12 9 10、X = torch.unsqueeze(トーチ.linspace(-1,1,1000)、DIM = 1 ) 11、Y = x.pow(2)+ 0.1 * torch.normal(torch.zeros(* x.size())) 12 13 plt.scatter(X .numpy()、y.numpy()) 14 plt.show() 15 16 torch_dataset = Data.TensorDataset(x、y)は 17ローダ= Data.DataLoader(データセット= torch_dataset、BATCH_SIZE = BATCH_SIZE、シャッフル=真、num_workers = 2 ) 18 19 torch_dataset = Data.TensorDataset(x、y)は 20ローダ= Data.DataLoader( 21 セット= torch_dataset、 22 BATCH_SIZE = BATCH_SIZE 、 23 シャッフル= Trueの場合、 24 num_workers = 2 、 25 ) 26 27 クラスネット(torch.nn.Module): 28 デフ __init__ (自己): 29 スーパー(ネット、自己)。__init__ () 30 31 self.hidden = torch.nn.Linear(1,20 ) 32 self.predict = torch.nn.Linear(20,1 ) 33 34 DEF フォワード(自己、X): 35 、X = F.relu(self.hidden( X)) 36 、X = self.predict(X) 37 リターンX 38 39 net_SGD = ネット() 40 net_Momentum = ネット() 41 net_RMSprop = ネット() 42 net_Adam = ネット() 43ネッツ= [net_SGD、net_Momentum、net_RMSprop、 net_Adam] 44 45 #異なるオプティマイザ 46 opt_SGD = torch.optim.SGD(net_SGD.parameters()、LR = LR) 47 opt_Momentum = torch.optim.SGD(net_Momentum.parameters()、LR = LR、運動量= 0.8 ) 48 opt_RMSprop = torch.optim .RMSprop(net_RMSprop.parameters()、LR = LR、アルファ= 0.9 ) 49 opt_Adam = torch.optim.Adam(net_Adam.parameters()、LR = LR、ベータ=(0.9、0.99 )) 50オプティマイザ= [opt_SGD、 opt_Momentum、opt_RMSprop、opt_Adam] 51 52 loss_func = torch.nn.MSELoss() 53 losses_his = []、[]、[]、[]] #のレコード損失 54 55 #トレーニング 56 のためのエポックにおける範囲(EPOCH): 57 プリント(' エポック:' 、エポック) 58 のための工程、(b_x、b_y)に列挙(ローダ): #各トレーニング・ステップのための 59 のためのネットは、オプトイン、l_his に(ZIPネット、オプティマイザ、losses_his): 60 出力=ネット(b_x) #すべてのネットの出力を受ける 61の 損失= loss_func(出力、b_y) #のすべてのネットの計算損失 62 opt.zero_gradを() #次の電車のための明確な勾配 63 loss.backward() #のバックプロパゲーション、計算は、勾配 64 opt.step() #適用勾配 65 l_his.append(loss.data.numpy()) #1 レコーダ損失 66枚の 67ラベル= [ ' SGDを'、' 勢い'、' RMSprop '、' アダム' ] 68 用の I、l_his で列挙(losses_his): 69 plt.plot(l_his、ラベル= ラベルは[i])と 70 plt.legend(LOC = ' ベスト' ) 71 plt.xlabel(' ステップ' ) 72 plt.ylabel(' 損失' ) 73 plt.ylim((0、 0.2 )) 74 plt.show()
参考ます。https://blog.csdn.net/qingxuanmingye/article/details/90514018