回答:
勾配降下法は、提案した方法ではうまく機能しませんが、同様の問題が発生する可能性があります。
バッチから平均損失を計算するのではなく、損失関数の平均勾配を計算します。勾配は、重みに関する損失の導関数であり、ニューラルネットワークでは、1つの重みの勾配はその特定の例の入力に依存し、モデル内の他の多くの重みにも依存します。
モデルに5つのウェイトがあり、ミニバッチサイズが2の場合、次のようになります。
コメントに応じて編集:
コメントでリンクしたチュートリアルコードでは、Tensorflowを使用して平均損失を最小限に抑えています。
これを最小化するために、各重みに関する平均損失の勾配を計算し、勾配降下を使用して重みを更新します。
微分は和の中に入れることができるので、私の例のアプローチからの式と同じです。
ミニバッチを使用する理由は、その効果を平均化することでノイズの可能性が低減されるように、十分な量のトレーニング例を用意することですが、多くのデータセットで大量のメモリを必要とする可能性があるのは完全なバッチではありません。重要な事実の1つは、評価するエラーは常に距離であることです。予測された出力と実際の出力の間:つまり、負になることはないため、キャンセルした2と-2のエラーは発生しませんが、代わりに4のエラーになります。次に、すべての重みに関して誤差の勾配を評価するので、重みのどの変化が最もそれを減らすかを計算できます。そうしたら、学習率アルファの大きさに基づいて、その方向に「一歩」進みます。(これは基本的な概念です。ディープNNのバックプロパゲーションについては詳しく説明しません)特定の数のエポックについてデータセットでこのトレーニングを実行した後、学習ステップが大きすぎない場合は、ネットワークが収束することを期待できます。発散させます。あなたはまだ極小値になるかもしれません、これは、重みを異なる方法で初期化し、異なるオプティマイザーを使用して、正則化を試みることで回避できます。