Algoritmo
Agora, podemos verificar como funciona esse algoritmo na prática.
Algorithm 7 Backpropagation Algorithm
1: procedure \( BACKPROPAGATION \) (Training set \( [(x ^{(1)},y ^{(1)}), \dots , (x ^{(m)}, y^{(m)})] \))
2: Inicializar \( \Delta _{ij} ^{(l)} = 0 \)
3: for \( i=1 \) to \( m \) do
4: Inicializar \( a ^{(1)} = x ^{(i)} \)
5: Realizar forward propagation para computar \( a ^{(l)} \) \( \rhd \ para \ l=2,3, \dots , L \)
6: Usando \( y ^{(i)} \), computar \( \delta ^{(L)} = a ^{(L)} - y ^{(i)} \)
7: Computar \( \delta ^{(L-1)}, \delta ^{(L-2)}, \dots , \delta ^{(2)} \)
8: \( \Delta _{ij} ^{(l)} := \Delta _{ij} ^{(l)} + a _j ^{(l)} \delta _i ^{(l+1)} \)
9: end for
10: if \( j \neq 0 \) then
11: \( D _{(ij)} ^{(l)} := \frac{1}{m} \Delta _{ij} ^{(l)} + \lambda \Theta _{ij} ^{(l)} \) \( \rhd \frac{\partial}{\partial \Theta _{ij} ^{(l)}} J(\Theta) = D _{(ij)} ^{(l)} \)
12: else
13: \( D _{(ij)} ^{(l)} := \frac{1}{m} \Delta _{ij} ^{(l)} \)
14: end if
15:end procedure
Realizando uma análise do algoritmo, temos que na linha 2 inicializamos \( \Delta _{ij} ^{(l)} \) com zeros, gerando uma matriz de zeros. No loop for inicializamos as variáveis \( a ^{(1)} \) com os valores da input layer e, depois realizamos forward propagation para computar os valores de \( a ^{(l)} \). Para cada valor de \( a ^{(l)} \) definido, computamos os valores de \( \delta ^{(l)} \) através de backpropagation, na linha 6 e 7 sabendo que
\[ \large{} \delta ^{(l)} = ((\Theta ^{(l)}) ^T \delta (l-1)) * a ^{(l)} * (1-a ^{(l)}) \]
Computamos os valores de \( \delta ^{(l)} \) começando na camada \( L \) da rede neural até a camada 2. Utilizamos os valores de delta para armazenar o erro presente em cada um dos vetores dos nodos de ativação \( a ^{(l)} \).
Por fim, na linha 8, calculamos os valores de \( \Theta _{ij} ^{(l)} \) e determinamos o valor da derivada de \( J(\Theta) \), armazenando em \( D _{(ij)} ^{(l)} \) nas linhas 11 e 13.