タグ付けされた質問 「sgd」

3
バッチ勾配降下と確率的勾配降下
トレーニングセットがます。また、トレーニングセットで何らかのタイプの教師あり学習アルゴリズムを実行するとします。仮説はます。と間の「距離」を最小化するパラメーターを見つける必要があります。ましょう(x(i),y(i))(x(i),y(i))(x_{(i)}, y_{(i)})i=1,…,mi=1,…,mi = 1, \dots, mhθ(x(i))=θ0+θ1x(i)1+⋯+θnx(i)nhθ(x(i))=θ0+θ1x(i)1+⋯+θnx(i)nh_{\theta}(x_{(i)}) = \theta_0+\theta_{1}x_{(i)1} + \cdots +\theta_{n}x_{(i)n}θθ\mathbf{\theta}y(i)y(i)y_{(i)}hθ(x(i))hθ(x(i))h_{\theta}(x_{(i)})J(θ)=12∑i=1m(y(i)−hθ(x(i))2J(θ)=12∑i=1m(y(i)−hθ(x(i))2J(\theta) = \frac{1}{2} \sum_{i=1}^{m} (y_{(i)}-h_{\theta}(x_{(i)})^{2} 次に、を最小化するを見つけます。勾配降下では、各パラメーターを初期化し、次の更新を実行します。θθ\thetaJ(θ)J(θ)J(\theta)θj:=θj−α∂∂θjJ(θ)θj:=θj−α∂∂θjJ(θ)\theta_j := \theta_j-\alpha \frac{\partial}{\partial \theta_{j}} J(\theta) バッチ勾配降下と確率的勾配降下の主な違いは何ですか? 両方とも上記の更新ルールを使用します。しかし、一方が他方より優れていますか?

2
確率的勾配降下法を発明したのは誰ですか?
勾配降下法と確率勾配降下法の歴史を理解しようとしています。グラディエントディセントは1847年にコーシーで発明されました。システムエクイテーションシステムの同時解法により作成されました。pp。536–538詳細については、こちらを参照してください。 それ以来、勾配降下法は開発を続け、私はそれらの歴史に精通していません。特に、確率的勾配降下法の発明に興味があります。 学術論文で歓迎される以上に使用できるリファレンス。

6
凸問題の場合、確率的勾配降下(SGD)の勾配は常にグローバルな極値を指しますか?
最適化にSGDを使用する凸型コスト関数を考えると、最適化プロセス中の特定のポイントに勾配(ベクトル)があります。 私の質問は、凸面上の点を考えると、勾配は関数が最も速く増加/減少する方向だけを指すのですか、それとも勾配は常にコスト関数の最適/極値を指すのですか? 前者はローカルコンセプトであり、後者はグローバルコンセプトです。 SGDは、最終的にコスト関数の極値に収束できます。凸面上の任意の点に与えられた勾配の方向と、グローバルな極値を指す方向との違いについて疑問に思っています。 グラデーションの方向は、関数がそのポイントで最も速く増加/減少する方向である必要がありますよね?

3
バッチサイズはSGDの収束にどのように影響しますか?
ミニバッチのサイズが大きくなると、SGDの収束が実際に難しく/悪化するという、多くの議論から同様の結論を見ました。たとえば、このペーパーとこの回答です。また、早い段階で小さな学習率やバッチサイズなどのトリックを使用して、大きなバッチサイズでこの問題に対処する人もいると聞きました。 ただし、ミニバッチの平均損失は、データ分布で予想される損失の近似と考えることができるため、直感に反するように見えます。 バッチサイズが大きいほど、正確になります。なぜ実際にはそうではないのですか?1|X|∑x∈Xl(x,w)≈Ex∼pdata[l(x,w)]1|X|∑x∈Xl(x,w)≈Ex∼pdata[l(x,w)]\frac{1}{|X|}\sum_{x\in X} l(x,w)\approx E_{x\sim p_{data}}[l(x,w)] 以下に、説明しようとする私の(おそらく間違った)考えをいくつか示します。 モデルのパラメーターは相互に大きく依存しています。バッチが大きくなりすぎると、一度に多くのパラメーターに影響を与え、パラメーターが安定した固有の依存関係に達するのが難しくなりますか?(バッチ正規化ペーパーで言及されている内部共変量シフト問題のように) または、ほぼすべてのパラメーターがすべての反復で責任がある場合、冗長な暗黙のパターンを学習する傾向があるため、モデルの容量が減少しますか?(つまり、数字の分類の問題については、いくつかのパターンがドット、エッジの原因となるはずですが、これが発生すると、すべてのパターンがすべての形状を担当しようとします)。 それとも、バッチサイズがトレーニングセットのスケールに近づくと、相関するミニバッチの確率が高くなるため、ミニバッチはデータ分布からiidとして認識できなくなるためですか? 更新 Benoit Sanchezの回答で指摘されているように、1つの重要な理由は、1つの更新を完了するために大きなミニバッチにより多くの計算が必要であり、ほとんどの分析が比較のために一定のトレーニングエポックを使用することです。 しかし、この論文(Wilson and Martinez、2003)は、十分な量のトレーニングエポックが与えられたとしても、バッチサイズを大きくすると依然として不利であることを示しています。一般的にそうですか?

1
確率的勾配降下は、標準の勾配降下と比較して、どのように時間を節約できますか?
標準勾配降下法は、トレーニングデータセット全体の勾配を計算します。 for i in range(nb_epochs): params_grad = evaluate_gradient(loss_function, data, params) params = params - learning_rate * params_grad 事前に定義された数のエポックの場合、最初にパラメーターベクトルparamsに対するデータセット全体の損失関数の勾配ベクトルweights_gradを計算します。 対照的に、確率的勾配降下法は、各トレーニング例x(i)およびラベルy(i)のパラメーター更新を実行します。 for i in range(nb_epochs): np.random.shuffle(data) for example in data: params_grad = evaluate_gradient(loss_function, example, params) params = params - learning_rate * params_grad SGDははるかに高速であると言われています。ただし、まだすべてのデータポイントでループが発生している場合、それがはるかに高速になる方法はわかりません。GDの勾配の計算は、各データポイントのGDの計算よりもはるかに遅いですか? コードはここから来ます。

4
サドルポイントにどうやって閉じ込められますか?
私は現在、ミニバッチ勾配降下がescent点にどのように閉じ込められるかに戸惑っています。 解決策はあまりにも取るに足りないかもしれません。 あなたはすべてのエポック新しいサンプルを取得し、コスト関数は各バッチに対してのみ静的であるので、それは、新しいバッチに基づいて新しいエラーを計算した勾配は、各ミニバッチの変更..しかしに応じなければならないことを意味し、これはすべきバニラの実装にはサドルポイントに問題がありますか? ニューラルネットワークに共通する高度に非凸の誤差関数を最小化するもう1つの重要な課題は、多数の準最適な局所最小値にとらわれないようにすることです。ドーフィン等。[19]困難は実際には極小値ではなく点、つまり、ある次元が上に傾斜し、別の次元が下に傾斜する点から生じると主張しています。これらのaddle点は通常、同じ誤差のプラトーに囲まれ、勾配がすべての次元でゼロに近いため、SGDが逃げにくいことで有名です。 収束に向かって変動するため、特にSGDは点に対して明確な利点があることを意味します...変動とランダムサンプリング、およびエポックごとに異なるコスト関数は、1つに閉じ込められないための十分な理由になります。 完全なバッチ勾配の場合、誤差関数は一定であるため、gradient点にトラップされる可能性があります。 私は他の2つの部分について少し混乱しています。

1
RMSPropとAdamとSGD
RMSProp、Adam、SGDのネットワークを使用して、EMNIST検証セットの実験を行っています。SGD(学習率0.1)とドロップアウト(0.1ドロップアウト確率)、およびL2正則化(1e-05ペナルティ)で87%の精度を達成しています。同じ正確な構成をRMSPropとAdamでテストし、初期学習率0.001をテストすると、85%の精度と大幅に滑らかでないトレーニングカーブが得られます。この動作を説明する方法がわかりません。トレーニング曲線が滑らかでなく、精度が低く、エラー率が高い理由は何ですか?

1
深い生成モデルのVAEと確率的バックプロパゲーションの違いは何ですか?
ディープ生成モデルの自動エンコード変分ベイズと確率的バックプロパゲーションの違いは何ですか?両方の方法での推論は同じ結果につながりますか?著者の両方のグループが互いに引用しているにもかかわらず、2つの方法の明確な比較については知りません。

2
ケラスのSGDでミニバッチサイズを設定する方法
私はケラスが初めてで、あなたの助けが必要です。 私はケラスでニューラルネットをトレーニングしており、損失関数は二乗差b / wネットの出力とターゲット値です。 勾配降下法を使用してこれを最適化したいと思います。ネット上のリンクをたどると、一般的に使用される3種類の勾配降下法があることがわかりました。 単一サンプル勾配降下:ここで、勾配は反復ごとに1つのサンプルのみから計算されます->勾配はノイズが多い場合があります。 バッチ勾配降下:ここで、勾配はデータセット内のすべてのサンプルから計算された勾配の平均です->勾配はより一般的ですが、巨大なデータセットには扱いにくいです。 ミニバッチ勾配降下:バッチGDに似ています。データセット全体を使用する代わりに、いくつかのサンプル(batch_sizeによって決定される)のみを使用して、すべての反復で勾配を計算します->あまりノイズが多くなく、計算上扱いにくい->両方の長所。 質問: ケラスでミニバッチ勾配降下法を実行したいと思います。これどうやってするの?SGDオプティマイザーを使用する必要がありますか? SGDを使用する場合、batch_sizeを設定するにはどうすればよいですか?batch_sizeを設定するためのSGD関数のパラメーターがないようです。 optimizer = keras.optimizers.SGD(lr=0.01, decay=0.1, momentum=0.1, nesterov=False) Kerasのmodel.fit()にbatch_sizeパラメータがあります。 history = model.fit(x, y, nb_epoch=num_epochs, batch_size=20, verbose=0, validation_split=0.1) これはミニバッチ勾配降下法のバッチサイズと同じですか?そうでない場合、入力のバッチでトレーニングするとはどういう意味ですか?「batch_size」という意味ではありませんか。のスレッドが並列に実行され、モデルの重みを並列に更新しますか? それが役立つ場合は、これまでに書いたpythonコードスニペットを次に示します。

3
非凸関数の勾配降下
非凸関数について、勾配降下が収束する(臨界点または局所/大域最小値のいずれかに)示される可能性がある場所について、私たちはどのような状況を知っていますか? 非凸関数のSGDについては、1種類の証明がここで確認されてい ます。http://www.cs.cornell.edu/courses/cs6787/2017fa/Lecture7.pdf

2
SGDトレーニングでの小さいバッチサイズの処理
確率的勾配降下法(SGD)を使用して、大規模モデル(カフェを使用したディープネット)をトレーニングしようとしています。 問題は、私がGPUメモリ容量の制約を受けているため、各確率的勾配推定に対して大きなミニバッチを処理できないことです。 トレーニングでこの不安定さを克服するにはどうすればよいですか? 私が考えていたのは、モーメンタムを使用して、デフォルトの通常の設定よりも高い値に設定することでした。これは有効な戦略ですか? Caffeをたまたま使用している人にとって、Caffeがすでにミニバッチ全体の勾配の累積を実装していることを知るのは興味深いかもしれません(Indie Alによって提案されています)。あなたは、単に定義する必要がiter_sizeで'solver.prototxt'。 これはpytorchでも実行できます。たとえば、この投稿を参照してください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.