バッチ方式を使用してニューラルネットワークを構築する方法を教えてください。
バッチモードで、トレーニングセットのすべてのサンプルについて、ネットワーク内の各ニューロンの誤差、デルタ、したがってデルタの重みを計算し、重みをすぐに更新する代わりに、それらを累積してから開始することを読みました次のエポックでは、重みを更新します。
また、バッチ方式はオンライン方式に似ていますが、違いはトレーニングセット内のすべてのサンプルのエラーを合計し、平均を取り、それを使用して重みを更新することだけです次のようにオンラインの方法で行います(違いはちょうどその平均です)。
for epoch=1 to numberOfEpochs
for all i samples in training set
calculate the errors in output layer
SumOfErrors += (d[i] - y[i])
end
errorAvg = SumOfErrors / number of Samples in training set
now update the output layer with this error
update all other previous layers
go to the next epoch
end
- これらのうち、本当に正しいバッチ方式はどれですか?
- 最初のものの場合、すべてのデルタの重みを累積すると膨大な数になりませんか?
1
「正しい」方法はコンテキストに依存します。多くの場合、エポックごとに1回だけ重みを更新すると、確率的な更新(各例の後の重みの更新)よりもはるかにゆっくり収束することがわかります。一般に、何らかの形式のバッチ更新を使用したいというコンセンサスがありますが、エポックごとに1倍よりもはるかに頻繁です。
—
ターラー