The original idea with having these split off was to have the NeuralNetwork struct inputs have smart pointers to the layer before, but this never really was implemented (and is likely impossible to implement without big performance costs). Right now it is just a bunch of useless cloning to access certain functions.