Como vimos, cada neurónio de uma rede neuronal está ligado, de alguma forma, a outros neurónios da rede. Estas ligações são descritas por pesos w, que representam, na verdade, os parâmetros da rede neuronal que precisam de ser aprendidos durante o treino. O número de parâmetros numa rede neuronal é, geralmente, elevado. Suponhamos, por exemplo, que uma rede neuronal totalmente ligada tem 5 neurónios na camada de entrada, uma camada escondida com 10 neurónios e uma camada de saída com 3 neurónios — o número de parâmetros a aprender seria 93. Na prática, as redes neuronais têm milhares, milhões ou até milhares de milhões de parâmetros! É por isso que é necessário um grande volume de dados para as treinar.

Sucesso! A camada de entrada não contém parâmetros desconhecidos – limita-se a fazer entrar os dados na rede. Cada neurónio da camada escondida está ligado a cada neurónio da camada de entrada, o que significa que cada uma dessas ligações tem 5 parâmetros e um termo independente (bias). Isto dá um total de 10x5 + 10x1 = 60 parâmetros. Cada neurónio da camada de saída está ligado a cada neurónio da camada escondida, o que significa que cada uma dessas ligações tem 10 parâmetros e um termo independente. Isto dá um total de3x10 + 3x1 = 33 parâmetros. Ao somar ambos os valores, obtemos 93 parâmetros.

As redes neuronais, tal como outros modelos, são treinadas com um conjunto de treino e avaliadas com um conjunto de teste. Como as redes neuronais são modelos complexos que conseguem aprender relações complexas entre atributos e saídas, podem ser facilmente sobre ajustadas (overfitting) aos dados. É por isso que usamos sempre um conjunto de validação durante o treino da rede. Este ajuda-nos a acompanhar o progresso do treino de forma mais precisa e a detetar mais cedo o sobre ajuste e outras propriedades indesejáveis do modelo.

Na introdução do curso, dissemos que os parâmetros desconhecidos do modelo são determinados através da definição de uma função de erro, e depois da aplicação de técnicas de otimização (como o gradiente descendente) com o objetivo de encontrar os valores de parâmetros que minimizem essa função de erro. Este procedimento aplica-se também às redes neuronais, mas os valores de erro não são calculados para instâncias individuais, mas sim para grupos de instâncias. A motivação para este desenho é, em primeiro lugar, a necessidade de lidar com grandes quantidades de dados e de paralelizar e acelerar todo o processo.

Depois, em proporção à sua contribuição, os erros da rede neuronal são propagados de trás para a frente na rede e os valores dos parâmetros são atualizados. Este processo de atualização dos parâmetros da rede é chamado backpropagation (propagação para trás) e permite-nos ajustar iterativamente os valores dos parâmetros até encontrar os valores ótimos.

Caso contrário, teríamos de começar tudo do zero.

Uma passagem por todo o conjunto de dados, ou seja, um processamento de todos os lotes do conjunto de treino, é chamada de época (epoch). As redes neuronais são treinadas ao longo de várias épocas. Depois de uma época ser concluída, os dados são "baralhados" (shuffled), voltam a ser divididos em lotes e passam novamente pela rede. O número de épocas necessário para treinar o modelo depende do sucesso do treino e dos recursos disponíveis. Como se trabalha com grandes volumes de dados, as redes requerem hardware especializado capaz de paralelizar os cálculos (por exemplo, placas gráficas ou unidades tensorais), pelo que o treino de redes é muitas vezes dispendioso e demorado.

Este método de treino da rede por épocas permite-nos acompanhar o progresso do treino com mais detalhe. No final de cada época, calcula-se o erro do modelo no conjunto de treino e o erro no conjunto de validação. Estes dois valores são depois representados num gráfico, em que o número da época aparece no eixo dos x e o valor do erro no eixo dos y. Podes ver um desses gráficos na imagem abaixo. Um bom treino é caracterizado por uma diminuição progressiva e comparável desses dois valores até um valor de erro satisfatório — quanto mais próximo de zero estivermos, melhor será o modelo. Recorda que esta conclusão tem por base o facto de o conjunto de validação conter dados separados do conjunto de treino e que a rede nunca viu antes.

Se repararmos que os valores da função de erro no conjunto de treino estão a diminuir, mas no conjunto de validação estão a aumentar, concluímos que o modelo está a sobreajustar-se (overfitting) e devemos parar o treino. Se os valores da função de erro do modelo na época anterior ao início do sobre ajuste forem satisfatórios, podemos manter essa versão do modelo para posterior teste no conjunto de teste (normalmente, durante o treino da rede, são guardadas várias versões do modelo com esse objetivo, ou para serem utilizadas caso seja necessário parar e retomar o processo de treino). Caso contrário, será necessário experimentar uma arquitetura de rede ligeiramente diferente ou um conjunto diferente de hiper parâmetros. Como cada camada da rede tem as suas próprias configurações (número de neurónios, função de ativação, conjunto inicial de parâmetros), as camadas podem estar ligadas de diferentes formas, é necessário acompanhar simultaneamente todas as definições do algoritmo de otimização (por exemplo, o gradiente descendente e o respetivo passo de aprendizagem), e que devem ser cumpridas certas expectativas em termos de qualidade do modelo, treinar uma rede neuronal é uma tarefa exigente e complexa.

É por isso que muitas vezes se diz que representa a arte de treinar (the art of coaching).

Monitorização do sobre ajuste da rede neuronal com base nos gráficos dos valores da função de erro no conjunto de treino e no conjunto de validação.

Last modified: Monday, 16 June 2025, 5:02 PM