Inicialización del gradiente

El primer paso es sencillo: inicializar con ceros las estructuras grad_b y grad_w que contienen las derivadas parciales para todos los parámetros. Como hay que hacer esto para todas las capas, volvemos a recurrir a una list comprehension:

grad_b = [np.zeros(b.shape) for b in self.biases]
grad_w = [np.zeros(w.shape) for w in self.weights]

Básicamente estamos replicando las estructuras self.biases y self.weights inicializando las copias con ceros.