Começando pela camada final, uma "passagem para trás" diferencia a função de perda para calcular como cada parâmetro individual da rede contribui para o erro geral para uma única entrada.
Voltando ao nosso exemplo anterior do modelo classificador, começaríamos com os cinco neurônios na camada final, que chamaremos de camada L. O valor softmax de cada neurônio de saída representa a probabilidade, de 1, de uma entrada pertencer a sua categoria. Em um modelo perfeitamente treinado, o neurônio que representa a classificação correta teria um valor de saída próximo a 1, e os outros neurônios teriam um valor de saída próximo a 0.
Por enquanto, vamos nos concentrar na unidade de saída que representa a previsão correta, que chamaremos de Lc.A função de ativação de Lcé uma função composta, contendo as muitas funções de ativação aninhadas de toda a rede neural, da camada de entrada até a camada de saída. Minimizar a função de perda implicaria fazer ajustes em toda a rede que trouxessem a saída a função de ativação de Lc para mais perto de 1.
Para fazer isso, precisaremos saber como qualquer alteração nas camadas anteriores alterará a saída do próprio Lc. Em outras palavras, precisaremos encontrar as derivadas parciais da função de ativação de Lc.
A saída da função de ativação de Lcdepende das contribuições que ela recebe dos neurônios na penúltima camada, que chamaremos de camada L-1. Uma maneira de alterar a saída de Lcé alterar os pesos entre os neurônios em L-1 e Lc. Ao calcular a derivada parcial de cada peso de L-1 em relação aos outros pesos, podemos ver como aumentar ou diminuir qualquer um deles trará o resultado de Lc para mais perto (ou mais longe) de 1.
Mas essa não é a única maneira de alterar a saída de Lc. As contribuições que Lc recebe de neurônios de L-1 são determinadas não apenas pelos pesos aplicados aos valores de saída de L-1, mas pelos próprios valores de saída reais (pré-peso). Os valores de saída dos neurônios de L-1 , por sua vez, são influenciados por pesos aplicados às entradas que eles recebem de L-2. Portanto, podemos diferenciar as funções de ativação em L-1 para encontrar as derivadas parciais dos pesos aplicados às contribuições de L-2. Essas derivadas parciais nos mostram como qualquer alteração em um peso de L-2 afetará as saídas em L-1, o que posteriormente afetaria o valor de saída de Lc e, assim, afetaria a função de perda.
Por essa mesma lógica, também poderíamos influenciar os valores de saída que os neurônios de L-1 recebem dos neurônios de L-2 , ao ajustar as contribuições que os neurônios de L-2 recebem dos neurônios de L-3. Então, encontramos as derivadas parciais em L-3, e assim por diante, repetindo recursivamente esse processo até alcançarmos a camada de entrada. Quando terminamos, teremos o gradiente da função de perda: um vetor de sua derivada parcial para cada parâmetro de peso e viés na rede.
Agora, concluímos uma passagem para a frente e uma passagem para trás para um único exemplo de treinamento. No entanto, nosso objetivo é treinar o modelo para generalizar bem para novas entradas. Para fazer isso, é necessário treinamento em um grande número de amostras que reflitam a diversidade e a variedade de entradas em relação às quais modelo terá a tarefa de fazer previsões após o treinamento.