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()
前述のとおり、複数回の出力は、順伝搬のデータであれ、逆伝搬のデータであれ、加算されます。forward
とbackward
は、この加算を一旦リセットするために、それぞれ対象となる変数にNone
を代入しています。そのあとは順に各レイヤのforward
メソッドとbackward
メソッドを呼び出してデータおよび勾配を伝搬させます。
Layer.forward
とLayer.backward
については、「ゼロから作るDeep Learning」を参考にしながら、第2章で実装していきます。