Decidi preparar este artigo no sentido de deixar mais didático um assunto tão árido. Uma dica inicial é para preparar o grafo abaixo: sites como este fazem o trabalho pesado para você, e contêm alguns algoritmos para você se adiantar. As bolas são as arestas, as linhas, os vértices, e sobre cada vértice temos os pesos (sinápticos). O nó 0, por ser o bias, possui sempre peso 1 em seus vértices. Em nosso exemplo, suponha que temos as entradas binárias 0 e 1, e sua saída alvo é 1.
O método mais popular para treinar uma RNA é a Backpropagation. Usado para ajustar os pesos sinápticos da rede, para que ela atinja seu objetivo: extrair as características do conjunto de dados de treinamento e ter uma taxa de acerto aceitável. Esse método consiste em duas fases:
- Fase forward: calcula variáveis intermediárias que vão do sentido da camada de entrada até a saída da rede;
- Fase backward: ajuste dos pesos através do cálculo dos erros que são combinados e aplicados com a regra delta de aprendizagem. O sentido do processamento vai da saída até a entrada dos dados.
Os pesos sinápticos podem ser gerados de diversas formas, inclusive aleatoriamente. Para fazer o processamento do algoritmo, vamos estabelecer o valor do parâmetro taxa de aprendizado (η). Vamos utilizar η=0,7.
Agora, vamos calcular a fase forward com os seguintes passos:

Calcular a soma do produto dos pesos. Isso é feito com as entradas para os nós 1 e 2 da camada 2. Para ficar mais claro, optei por preparar uma rápida tabela. Pegue um nó de cada camada e multiplique por suas entradas binárias.
| Camada 1 | Camada 2 | Cálculos |
| Nó 1, peso 0,25, entrada binária 0 | Nó 1, peso 0,7 | s1=0,25(0)+0,4(1)+1(1) =1,40 |
| Nó 1, peso 0,3, entrada binária 0 | Nó 2, peso 0,3 | s2=0,3(0)+0,5(1)+1 =1,50 |
| Nó 2, peso 0,4, entrada binária 1 | ||
| Nó 2, peso 0,5, entrada binária 1 | ||
| Nó 3, peso 1, entrada binária 1 | ||
| Nó 3, peso 1, entrada binária 1 |
A seguir (passo 2), calcule a função de ativação dos nós 1 e 2. Vou deixar em Latex para ficar com formatação padronizada (cole o texto abaixo aqui). Agora, com a Camada 3, pegue os pesos desta Camada e multiplique pelos valores obtidos pelas funções de s1 e s2. Vou deixar os dois cálculos juntos.
\text{Passo 2: } \newline f(s1)=\frac{1}{1+e^{-s1}}\to \frac{1}{1+e^{-1,4}}=0,8021 \newline f(s2)=\frac{1}{1+e^{-s2}} \to \frac{1}{1+e^{-1,5}}=0,8175 \newline \newline \text{Passos 3 e 4: } \newline s=0,7(0,8)+0,3(0,8175)+1(1)=1,80525 \newline
y=f(s)=\frac{1}{1+e^{-1,80525}}=0,8587
Lembremos que o valor alvo é d=1. O próximo passo (passo 4) é calcular a função de ativação. Usamos, para isso, a mesma fórmula do passo 2 (deixei este cálculo no código acima). Agora, calculamos o módulo da diferença entre os valores obtidos e o alvo, que dá: |y – d| =0,14. Quanto mais próximo de zero for o erro no nó de saída, mais bem ajustado o modelo estará.
Se você achou a tabela, no começo deste artigo, didática demais, saiba que meu entendimento deste conteúdo, para entregar mastigadinho a vocês, só destravou depois dela. Me parece, então, um life hack importante para se aprender qualquer coisa nova: se está difícil, talvez seja porque você ainda não converteu o conteúdo em uma tabela.
E encerrou-se a etapa forward. Agora, passamos a fazer os ajustes dos pesos: a fase backward. O delta do nó de saída é calculado com a fórmula abaixo:
δ = (d – y) f(s)(1-f(s))
(0,14) 0,8587(1 – 0,8587) = 0,0169
Lembra-se do parâmetro taxa de aprendizado (η), mencionado no começo do artigo? Isso, η=0,7. Agora vamos usá-lo para calcular os ajustes dos pesos das conexões entre os nós das camadas 2 e 3. Trouxe a tabela de volta para mais clareza. 👇👇👇
| Camada 1 | Camada 2 | η | δ | Função de ativação | Cálculo de ajuste dos pesos | Ajuste dos pesos das conexões |
| Nó 1, peso 0,25, entrada binária 0 | Nó 1, peso 0,7 | 0,7 | 0,0169 | 0,8021 | 0,0095 | 0,7095 |
| Nó 1, peso 0,3, entrada binária 0 | Nó 2, peso 0,3 | 0,7 | 0,0169 | 0,8175 | 0,0097 | 0,3097 |
| Nó 2, peso 0,4, entrada binária 1 | | 0,7 | 0,0169 | |||
| Nó 2, peso 0,5, entrada binária 1 | | 0,7 | 0,0169 | |||
| Nó 3, peso 1, entrada binária 1 | | 0,7 | 0,0169 | |||
| Nó 3, peso 1, entrada binária 1 | | 0,7 | 0,0169 | — | 0,0118 | 1,0118 |
Nessa etapa, devemos ajustar os pesos das conexões entre os nós das camadas 2 e 3. Isso é feito na última coluna da tabela acima. Some o peso do nó de cada camada com o cálculo do ajuste.
Para o próximo passo, vamos relembrar os dados obtidos até agora, para calcular os valores de delta para os nós da camada 2. Em seguida, farei o inevitável: trazer aquela sopa de letrinhas tão comum para fórmulas e funções. Foi possível evitá-las até agora, calma… estamos no final. 🫨
δ = 0,0169; s1 = 0,8021; s2 = 0,8175
δ1 = δf(s1) (1 – f(s1)) = 0,0027
δ2 = δf(s2) (1 – f(s2)) = 0,0024
O próximo passo é calcular os ajustes dos pesos das conexões entre as conexões 1 e 2. Confira a tabela acima para lembrar-se dos valores usados. Deixei as contas mastigadinhas porque, apesar de serem cálculos simples, podem tornar-se difíceis depois de tantos passos.
Δw112 = ηδ1×1 = 0,7 * 0,0027 * 0 = 0
Δw212 = ηδ2×1 = 0,7 * 0,0027 * 0 = 0
Δw122 = ηδ1×1 = 0,7 * 0,0027 * 1 = 0,00189
Δw222 = ηδ2×2 = 0,7 * 0,0024 * 1 = 0,00168
Δwbias12 = ηδ1 = 0,7 * 0,0027 = 0,00189
Δwbias22 = ηδ2 = 0,7 * 0,0024 * 1 = 0,00168
E por último, faça os ajustes dos pesos. 💪
w112 = w112 + Δw112 = 0,25
w212 = w212 + Δw212 = 0,30
w122 = w122 + Δw122 = 0,40189
w222 = w222 + Δw222 = 0,50168
wbias12 = wbias12 + Δwbias12 = 1,00189
wbias22 = wbias22 + Δwbias22 = 1,00168
E encerro por aqui. Se estiver com dificuldades em sua faculdade ou escola, me mande uma mensagem para um orçamento de aula particular. Nem sempre o tema estudado é difícil, às vezes estamos apenas escolhendo a amostragem ou o material errados.
Deixe um comentário