ニューラルネットワークの最適化方法

I.概要

良いニューラルネットワークの訓練の後、唯一の我々は、アシスタントを呼び出して、より正確なパラメータ更新するように私たちが望む効果を最適化することによって実現されます。
一般的に2つの段階にニューラルネットワークの学習プロセス:

  • 第一段階は、順方向伝搬アルゴリズムの予測値と予測値との比較のために実際の値が、両者の間のギャップを算出します。
  • 勾配各パラメータの逆伝播アルゴリズム、次いで勾配降下アルゴリズムを用いて算出された第2の位相損失関数は、勾配と学習率に応じて各パラメータを更新します。

ネットワークの最適化の第2の方法

1、学習率を最適化します

あなたが学習の均一なレートを使用することはできませんので、異なる目的関数の各パラメータ依存性は、いくつかのパラメータが近い最小限に最適化されている、いくつかのパラメータは、まだ、勾配の多くを持って、学習率が小さすぎると、非常に遅い収束があるでしょうスピード、偉大な学習率は、不安定な同じ最適化されたパラメータについてであったであろう、一般的には、パラメータごとに異なる学習レートを設定することが妥当です。三つの異なる適応学習率最適化アルゴリズムがあります。

  • AdaGrad
    AdaGradアルゴリズムは、独立して、すべての学習率モデルパラメータに適合するように、各パラメータのスケーリングは、すべての歴史的平均勾配の和の平方根に反比例しますコスト関数パラメータの最大勾配を持つ学習率の急速な低下を持っており、パラメータはそれに応じて料金を学んで比較的小さな下落の小さな勾配を有します。
  • RMSProp
    RMSProp勾配アルゴリズムはAdaGradの修飾された指数加重移動平均として蓄積し、それが非凸良好に設定されているように、。
  • アダム

独立の学習率を設定
学習の指数関数的な減衰率
指数関数的減衰率が急速に優れたソリューションを得るために、より大きな学習率を使用することを学んで、その後の反復を続け、徐々に学習速度を低下させる、モデルに後半でより多くのトレーニングを行っているが安定しました。

tf.train.exponential_decay(learning_rate,global_step,decay_steps,decay_rate,staircase=False,name=None)

パラメータ

初期学習率learning_rateの
減衰係数decay_rateは、
減衰率制御decay_steps
global_steps現在のトレーニングラウンドの
ブール値:階段を。Trueの場合、decay_steps最終的に機能を学習する前に、ステップ関数になりますどのように多くのラウンド学習率パラメータ更新の繰り返しを表します

2、勾配降下最適化

https://blog.csdn.net/itchosen/article/details/77200322
一般的な考え方:
勾配降下法が参照を(誘導体を逆方向に増加する)下り坂損失関数に沿って反復的に更新されたパラメータは、勾配降下と呼ばれ目的は、パラメータ、その結果、最小損失関数値を探すことです。また、学習速度パラメータを定義する必要があり、各運動の振幅を指す勾配降下が初期値の最終結果に影響を与えるパラメータを受信し、または場合にのみので、勾配降下方法は、大域的最適解を達成するために最適化された非凸関数を保証するものではありません損失関数は、ときに、グローバルに最適な凸関数を実現することができます。勾配降下は、3つに分割され、主な違いは、選択されたサンプルの数であります

  • バッチ勾配降下法(バッチグラデーションディセント)

パラメータを更新する際に使用し、すべてのサンプルがために更新されます

  • 確率的勾配降下法(確率的勾配降下)

確率的勾配降下法は、実際には、同様の原理とバッチ勾配降下法は、そこにすべての需要勾配でのデータサンプルの間に違いはありませんが、単に選択勾配を見つけるために、サンプルを

  • 小バッチ勾配降下(ミニバッチグラデーション降下)

小バッチ勾配降下法は、バッチ勾配降下及び確率的勾配降下法の妥協である試料の選択された部分の勾配を更新します

確率的勾配降下法と比較バッチ勾配降下法

  • 一方、大規模なバッチ勾配降下法場合サンプルサイズ各反復は、迅速にトレーニングにのみサンプルを使用しているため、訓練速度、確率的勾配降下法のために、スピードトレーニングは満足のいくものではありません。
  • 溶液を、得られた唯一のサンプルの勾配方向決定が最も可能性が高いではない最適な精度のために、確率的勾配降下法が使用されます。SGD通常のトレーニングに長いが、良い初期の場合は、レートスケジューリング方式、より信頼性の高い結果を学習。
  • 収束速度のために、なぜならサンプルの確率的勾配降下法の反復の方向の繰り返しの大きな変化をもたらす、迅速に局所最適解に収束しません。局所最適に収束する可能性が高い、といくつかのケースでSGDはサドルポイント(ない最小の点が最大のポイントではありません)の中に閉じ込めすることができます

勾配降下を使用して、チューニングポイント

  1. 選択肢のレートアルゴリズムを学びます。先に説明したアルゴリズムでは、私は研究が1だったが、実際には、値がデータサンプルに依存し、最大から最小まで、いくつかの値以上かかることがあり、機能の喪失場合、反復の効果を見てアルゴリズムを実行している言及取ります小さく、その実効値を示すか、学習速度を上昇させます。彼は以前に述べました。学習率は速すぎても、最適解が見逃す可能性、反復引き起こす可能性があり、大きすぎます。学習率は、アルゴリズムは非常に長い時間の終わりにはできません、小さすぎる、遅すぎるの繰り返しです。だから、レートアルゴリズムを学習した後に、より最適な値を取得するために数回実行する必要があります。

  2. パラメータ選択アルゴリズムの初期値。、最小値が得られる異なる初期値も、これだけ決定勾配降下極小異なっていてもよい。もちろん、損失関数が凸必ずしも最適解である場合。局所最適解のリスク、アルゴリズムを実行するために必要な最小で数回、キーの損失関数異なる初期値に起因して、損失関数の初期値が最小化されている選択します。

  3. 正規化。サンプル範囲の異なる特性に新しい機能など0,1新しい分散を期待し、非常に遅い反復につながる値特性の影響を低減するために、データの正規化を特徴とすることができるが、同じではない、反復回数を大幅にすることができます加速しました。

Tensorflowは通常、勾配降下の最適化と適応学習率、learning_rate学習率、損失の損失関数を使用して行われます。参照ページ 1、ページ2はじめに

train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
##梯度下降,使用全部样本更新参数

train_step = tf.train.AdagradOptimizer(learning_rate).minimize(loss)
##实现Adagrad优化器

train_step = tf.train.RMSPropOptimizer(learning_rate)).minimize(loss)
 ##实现RMSProp优化器
 
 train_step = tf.train.AdamOptimizer(learning_rate)).minimize(loss)
 ##实现Adam优化器

オーバーフィットフィット感と最適化のために3、

三つの一般的な方法があります参照して、過剰適合最適化プロセスをunderfitting過剰適合の最適化方法をunderfitting

  • ドロップアウト
    ニューラルネットワークの過学習を防ぐためです。その主なアイデアは作ることです(前方含むと伝播をリバース)各反復の隠れ層のノードを(キープPROB)をする機会を持って失敗したので、オーバーフィッティングを防止します。なお、補正値は、種々のパラメータに対してよりバランスのとれた分布の広がりを逆にすることができるように、ノード上の強い依存性を回避するために、主に
    (1)ドロップアウトのみで発生するトレーニング段階モデル、テスト段階がドロップアウトではないと予測
    (2)ドロップアウトランダムニューロンを削除した後、ネットワークが小さくなり、トレーニングフェーズが速くなり
    (3)ドロップアウトと、ネットワークがASなくなり、高重量プラス機能のいずれか(元を備えて、入力ニューロンをランダムに削除される可能性があるとして)、最終的には収縮ドロップアウトの効果が二乗生成ノルム重み
    (4)ドロップアウトとなる主要な欠点は、機能の損失が明確に定義されていないれるトレーニング中に、損失関数の値が単調に減少しないように、
    (5)を使用し、ドロップアウトを閉じるために、損失は、次にオープンドロップアウト単調減少関数であることを、1にキープPROBを提供

  • バギング参照総合学習の紹介

  • 正則化法
    (1)L1正則化
    (2)L2正則

     #在权重参数上实现L2正则化
     regularizer = tf.contrib.layers.l2_regularizer(0.01)
     regularization = regularizer(weight1)+regularizer(weight2)+regularizer(weight3)
     tf.add_to_collection("losses",regularization)     #加入集合的操作
     
     #get_collection()函数获取指定集合中的所有个体,这里是获取所有损失值
     #并在add_n()函数中进行加和运算
     loss = tf.add_n(tf.get_collection("losses"))#损失包括误差和正则项
     tf.add_to_collection("losses", error_loss)      #加入集合的操作
    
  • そして、データの面で特徴づけ

我々は、再洗浄する必要があり、オーバーフィッティングデータがある場合は、1)再クリーニングのデータを、オーバーフィッティングデータの原因も、不純で発生することができます。

2)合計データの割合が小さすぎると、トレーニングデータをトレーニングデータの量を増加させ、そして一つの理由は、我々は、トレーニングに起因するデータの量のためには小さすぎることです。

3)あまりフィット感のために、あなたは時々我々はモデルが不十分なため、リードの機能項目の時間に合わせて表示され、あなたは良い解決策に他の機能の項目を追加することができます借りて、他の機能項目を追加する必要があります。例えば、「組み合わせ」、「一般」、「関連性」三つの特徴は、追加機能の重要な手段です。例えば、線形モデルまたは立方用語は能力を一般化二次モデルを添加することによって、前記多項式の追加、。オーバーフィッティングのために、機能削除する必要がある
4)を低減正則化制約の下で取り付けることができる、また、オーバーフィッティング制約正則化を増加させることができます

おすすめ

転載: blog.csdn.net/qq_39751437/article/details/88541337