質問: np.sum(dY, axis=0) ``` なぜ渡ってきた値(dY)の和を計算しているか納得できませんでした。 誤差逆伝播法の計算グラフにおいて、「+」ノードでは前から来た値をそのまま下位ノードへ渡すと認識しております。そのため、dYをそのまま下位ノードで渡すのことが自然な処理と考えておりました。 なぜバッチ版ではN行のデータであるdYの和を下位ノードへ渡しているのか ご教示頂きたく存じます。 どうぞよろしくお願いいたします。
回答: バッチの場合、順伝播の計算時にbはもう一方の項`np.dot(x,W)`に合わせて、つまりはバッチサイズに合わせて自動的に拡大して足し合わされます。 これにより「+ノードの下位ノード」はbそのものではなく、bに対して演算を施したものになっています。 バイアス項は入力1、重みbのことですから、順伝播ではそれをかけ合わせていると考えれば逆伝播の`db`の求め方は`dW`と同じ形になるはずです。ですから ``` self.db = np.sum(dY, axis=0) ``` は`dW`の計算 `dW=np.dot(x.T, dY)` と同じ形の ``` self.db = np.dot(1が並んだ長さがバッチサイズのベクトル, dY) ``` のことだと考ればいいのではないですか。 なお諸兄諸姉のご参考に、該当のソースコードは で見れます。