1.5 順伝搬と逆伝搬

これまでに、レイヤを積み重ねることでモデルを構築する方法について説明しました。次に、このモデルで順伝搬と逆伝搬を行う仕組みについて説明します。

Modelクラスは、順伝搬を行うforwardメソッドと逆伝搬を行うbackwardメソッドを実装しています。

Code 1.1 Model.forwardメソッドおよびModel.backwardメソッド

    def forward(self, predict=False):
        for variable in chain(self.output_variables, self.loss_variables):
            variable.data = None
        for layer in self.layers:
            if predict and isinstance(layer, LossLayer):
                continue
            layer.forward()

    def backward(self):
        for variable in chain(self.input_variables, self.weight_variables):
            variable.grad = None
        for layer in reversed(self.layers):
            layer.backward()

前述のとおり、複数回の出力は、順伝搬のデータであれ、逆伝搬のデータであれ、加算されます。forwardbackwardは、この加算を一旦リセットするために、それぞれ対象となる変数にNoneを代入しています。そのあとは順に各レイヤのforwardメソッドとbackwardメソッドを呼び出してデータおよび勾配を伝搬させます。

Layer.forwardLayer.backwardについては、「ゼロから作るDeep Learning」を参考にしながら、第2章で実装していきます。