the error pathways. Hidden layer $i$ is trained using local errors generated by a classifier with random fixed weights ${\bf M}^i$. The errors are randomly projected back using the matrix ${\bf K}^i$, and multiplied element-wise with the layer’s activation derivative to yield the error signal ${\bf e_y}^i$ which is then used to update the weights.[]{data-label="fig:local"}](local_learning_biological){width="50.00000%"}

We also use dropout [@Srivastava_etal14] in this training setting to minimize overfitting. All incoming/outgoing weights to/from a dropped neurons are not updated in the iteration in which the neuron is dropped. In some networks, we use batch normalization [@Ioffe_Szegedy15] before the layer’s non-linearity. The layer’s learnable parameters will then include a scaling factor (one for each neuron in a fully connected layer, or one for each feature map in a convolutional layer) that is also trained using local errors. For a fully connected layer, the input to the local classifier is taken after the dropout mask is applied (if dropout is used). For a convolutional layer, the input to the layer’s local classifier is taken after pooling and after applying the dropout mask. In all experiments, we initialize the fixed random classifier weights, as well as the trainable weights in the main network, from a 