[Música] Olá bem-vindos a quarta semana do curso de redes neurais Eu sou professor Marcos killes e nessa semana nós vamos aprender como configurar uma rede multilaser como configurar os seus parâmetros tal forma que ela consiga resolver bem o problema no Cola tá sendo aplicada então nessa vídeo aula específica Nossa décima vídeo aula nós vamos aprender a configurar os hiper parâmetros dessa rede e na aula seguinte nós vamos falar um pouco sobre o mecanismo de regularização e apresentar alguns algoritmos otimizados para o treinamento da rede então nessa aula basicamente a gente vai trabalhar como configurar o
topologia Ou melhor como configurar o número de camadas o número de neurônios e alguns parâmetros da rede a partir do próprio feedback que nós temos do processo de desenvolvimento da rede de treinamento da rede e como acelerar o treinamento dessa rede também algumas pequenas heurísticas que nós podemos adotar ao longo do processo de Treinamento visando acelerar a convergência do modelo acelerar o processo de Treinamento bom uma primeira ilustração se tivesse problema onde nós temos duas classes distintas uma classe representada pelo X em vermelho e pela pelo o em azul que que a gente precisaria para
separar essas duas classes a gente sabe pelo que nós vimos até então que apenas o único neurônio seria capaz de resolver essa classe que o neurônio aproxima reta ele aprende uma reta Então a gente poderia criar um neurônio com esse coeficiente angular alimentado por X1 e X2 definindo essa reta aqui então nós conseguimos separar o que está acima da reta Classic azul e o que tá baixo da reta classe em vermelho e se não estivessemos esse problema agora agora a gente não consegue mais passar uma reta separando que é vermelho do que Azul então a
gente precisa de uma superfície não linear para resolver esse problema só que nós já Vimos que a rede MP Ela não aprende neurônio neurônio uma superfície não linear cada nervore da rede sempre vai aprender uma superfície separação linear seja uma reta no plano bidimensional seja um plano no tridimensional seja um hiperplano no Hiper espaço então uma forma da gente resolver esse problema seria o seguinte nós podemos separar agora essa região do meio com esse polígono formado por três retas cada reta pode ser representada por um neurônio o que que nós precisaríamos depois um segundo neurônio
indicando se eu estou abaixo dessa primeira reta abaixo dessa outra reta ou acima dessa terceira reta se eu estou nessas três condições ou seja estou abaixo da primeira abaixo da segunda e acima da terceira eu estou dentro dessa região representando a classe X em vermelho então uma rede que resolve isso seria o que uma rede com três neurônios da camada oculta no qual cada neurônio Vai representar uma dessas retas e esse neurônio da camada de saída ele não faz nada mais nada menos do que uma porta e lógica uma porta end representado em cima dos
sinais gerados por esses três neurônios então da camada oculta vai falar tá acima ou abaixo da reta Então vamos pensar que esse primeiro neurônio aqui representa essa primeira reta de baixo se eu estou acima da reta esse neurônio representa esse outro eu estou abaixo dessa reta e estou abaixo dessa outra reta aqui então se as três posições as três saídas são positivas tem o valor um essa porta ainda vai ter uma saída um indicando que eu pertenço a classe 1 representando aqui o X em vermelho então com duas camadas a gente consegue criar essa para
separar essas duas classes e esse problema agora um pouquinho mais complexo agora nós temos não uma região que precisa ser separada mas duas regiões que precisam ser separadas aqui essa região de cima e essa região de baixo utilizando a mesma analogia que nós fizemos na no exemplo anterior eu posso utilizar neurônio de primeira camada oculta para traçar retas no meu espaço de atributos então poderia passar por exemplo os neurônios representando três neurônios representando a região de cima e três neurônios e amarelo representando a região de baixo logo na primeira camada oculta ela é composta por
6 neurônios três que representam aquelas três retas de cima e três que representam as três retas de baixo aí eu poderia ter uma segunda camada oculta que faz o seguinte essa esse primeiro neurônio aqui vai combinar essas três saídas dessas três retas formando esse polígono esse segundo neurônio Amarelo vai formar esse segundo polígono é importante sacar que isso aqui é uma residência então esses neurônios amarelos também alimentam esse neurônio Verde aqui de cima alimentação de baixo eu só omitir as conexões para facilitar a visualização Então os neurônios da primeira camada representam as retas segundo a
camada oculta representam a formação dos polígonos e esteróide de saída o que ele faz uma decisão simples uma porta ou indicando por exemplo se eu estou dentro dessa região ou dentro dessa região então eu pertenço a classe x se não eu pertence a outra classe então primeira camada reta segunda camada formação do polígono terceira camada indicando se eu estou em um desses polígonos formados então de forma bastante simples de forma bastante intuitiva a gente consegue definir qual que é a topologia da rede Qual que é a quantidade de neurônio de camadas que eu preciso para
resolver um dado problema só olhando para os dados Qual que é o problema dessa abordagem aqui eu consigo visualizar o meus dados são plantados no espaço de duas dimensões X1 e X2 que acontece se eu tinha um conjunto de dados em 100 dimensões em mil dimensões em 100 mil dimensões eu não consigo visualizar isso então a gente não consegue saber onde eu preciso traçar quais retas Quais planos quais hiperplanos de tal forma defini manualmente essa estrutura da rede então dificilmente a gente consegue visualizar espaço multidimensional né Então essa essa abordagem utilizada nos exemplos anteriores ela
só servem para casos didáticos por exemplos reais dificilmente a gente vai conseguir utilizar lá na prática Então como configurar topologia uma vez que a gente não pode definir manualmente as suas respectivas configurações alguns métodos primeiro de poder pensar em força bruta que que seria a força bruta eu vou testar todas as combinações possíveis eu começo com uma rede sem camada oculta depois uma rede com uma camada oculta com neurônio com dois neurônios 3 5 10 com duas camadas ocultas sendo tanto na primeira tanto na segunda e vou fazendo todas as combinações possíveis até encontrar aquela
rede que apresenta para a gente o melhor resultado a gente sabe que isso é inviável exceto para problemas muito pequenos Nos quais eu consiga treinar vários modelos você tem um problema grande eu demoro uma hora para treinar cada rede eu não conseguiria treinar muitas redes ao longo do desenvolvimento busca em grade aquecer uma versão um pouco mais simples da força bruta onde eu defino por exemplo a variação do número de camadas a variação do número de neurônios e eu configuro alguns pontos nessa grade e faço avaliação desses pontos nessa grade problema é que mesmo assim
a gente pode ter um conjunto de parâmetros e preparando-se configuráveis bastante alto deixando essa grade bastante comum múltiplas dimensões e bastante complexo a gente pode utilizar métodos de otimização como algoritmo genéticos para tentar evoluir a topologia da rede é o Simulator de otimização bastante utilizado também qualquer outra metaurística que vem a definir uma função de custo para avaliar com boa é uma data topologia não sei Aquela topologia boa ela tem uma chance de ser adotada como topologia final se ela é ruim ela é descartada e ela é evoluída ao longo do processo independente da meteorica
que a gente está utilizando é utilizar configuração empírica eu poderia e verificando defina uma topologia Inicial básica faça o treinamento desse modelo se esse modelo não conseguiu aprender por exemplo não consigo convergir o erro de treino para um valor baixo quer dizer que essa topologia não tá bem definida então poderia utilizar essa informação do processo de treinamento para tentar definir os parâmetros da rede de maneira empírica Então vou meio que customizando vou tentando customizar a topologias e preparamos no modelo até atingir o modelo adequado que é o que a gente vai ver nessa aula de
hoje então algumas formas que a gente tem para fazer seguir essa essa abordagem empírica a gente pode fazer aquela divisão treino validação e teste que nós já vimos as aulas anteriores e na nossa aula prática ou utilizar a validação cruzada Na verdade seria uma generalização do treino validação onde ao invés de fazer uma divisão treino validação eu faço múltiplas de Visões devido o conjunto de desenvolvimento em cafolds encapartes treino com k -1 e avalia o faça a validação com aquele cara que ficou de fora e faço isso para todas as combinações é minimizando a chance
de ter uma divisão inadequada no meu conjunto de dados então basicamente nessa ilustração eu vou mostrar para vocês como que seria a partir da divisão do conjunto em treino e validação então primeiro cenário aqui eu tenho uma rede definir uma rede com meus e por parâmetros a hora que a gente testa ela Verifica o que que tá acontecendo treinamento a gente observa que o erro de treino ele permanece um erro relativamente alto e o erro de validação muito alto e hora que a gente pro alto o resultado a gente tem uma reta Ou seja eu
tive eu utilizei o modelo linear então ao invés de conseguir aproximar esses dados que eu tenho aqui em azul o modelo conseguiu aprender simplesmente essa reta que pega a tendência dos dados mas ele não consegue aproximar de maneira precisa um segundo cenário a gente já tem que o erro de treino ele começa a de cair e converge a quase zero já o erro de validação ele começa a cair de repente ele começa a subir o que que esse caso ilustra para a gente significa que eu tenho um conjunto de parâmetros que a rede consegue aprender
os dados ou seja o conjunto de treino está em um valor muito próximo de zero a gente tá conseguindo aprender por outro lado aqueles exemplos que estão no conjunto de validação eles estão perdendo a sua acurácia a rede está começando a responder conforme a gente mais estranho nessa rede pior ficou erro de validação Ou seja a rede está perdendo aquela capacidade de generalizar para dados não vistos no treinamento isso aqui é um típico cenário de over Fit no qual nós temos um baixo erro de Treinamento baixo de treino e um alto erro de validação é
isso aqui pode indicar para gente que a gente tem ou falta de dados ou seja um conjunto de Treinamento nosso insuficiente ou nós temos uma quantidade excessiva de parâmetro de tal forma que a rede já está se especializando no conjunto de treino e perdendo a capacidade de generalizar para dados não vistos que que seria o cenário ideal onde nós temos uma convergência tanto do erro de treino quanto erro de validação para um valor muito próximo de zero claro que isso aqui é um cenário como eu falei ideal geralmente a gente observa quanto mais a gente
treina na rede em algum momento o conjunto de treino vai estagnar ou vai continuar descendo de maneira muito leve e o conjunto de validação vai começar a subir mostrando que a partir daquele momento eu tô super especializando os parâmetros do modelo e conduzindo o processo para um processo para um sobre ajuste para um cenário de overfield Então nesse caso Aqui nós temos uma rede com múltiplas camadas para aquele problema apresentado é o modelo consegue generalizar bem e apresenta um erro baixo tanto de treino quanto de validação Então qual que a ideia como que a gente
pode fazer para configurar uma topologia de uma rede Multilaser utilizando esse processo empírico a gente pode começar com a topologia mínima por exemplo antropologia linear só de uma camada de neurônio sem neurônios ocultos se se essa rede ela consegue resolver bem meu problema ou seja consegue apresentar para mim um baixo erro de treino um baixo erro de validação o que que isso significa que uma rede linear consegue resolver o problema meu problema tá encerrado e eu não preciso ir além disso por outro lado se o erro de treino ele é alto significa que aquele aquela
aquele modelo linear não consegue aprender o problema se ele não consegue aprender o problema precisa aumentar a flexibilidade e aprendizagem do problema por exemplo adicionando camadas ocultas ou mais neurônios na camada oculta que já existe então a gente precisa ampliar a quantidade de parâmetros do modelo aumentar a flexibilidade de aprendizagem desse modelo aí o erro de Treinamento atinge um patamar baixo um patamar aceitável aí que que a gente pode falar que o modelo Inicial que eu tenho nesse momento ele consegue aprender o conjunto de treino seja tem parâmetros suficientes para conseguir aprender aquele problema então
a gente tem um bom modelo Inicial como que a gente faz para sair de modelo de mínima configuração modelo linear até chegar nesse modelo ideal de novo um processo bastante empírico o que geralmente a gente faz a gente começa com sem nenhuma camada oculta Adiciona uma camada oculta com um número CAD neurônios e depois a gente começa a dobrar esse Card neurônios e observa o erro se chegou algum momento a partir do momento de cá esse erro não decai mais e mesmo assim continuar alto eu reduzo para o card novo o Caio a 10 por
exemplo e coloca uma segunda camada curta também com K = 10 aí eu começo a aumentar os neurônios tanto da primeira quanto da segunda camada oculta eu Geralmente costumo dobrar o número de neurônios a cada interação aí uma vez que eu atingir uma configuração que tem aquele apresenta para mim um erro de treino baixo eu falo que esse é o modelo inicial adequado e eu começo especializar esse neurônio a partir de então aí eu atingi um erro de treino baixo eu sei que aquele modelo tem flexibilidade suficiente para aprender o meu problema aí eu vou
avaliar o erro de validação se o erro de validação é baixo É eu sei que o modelo também ajustado ele consegue aprender e consegue generalizar Problema resolvido se o erro de validação é alto aí Possivelmente a gente tem uma presença de overvitch O que que significa isso o treinamento tá fazendo com que o modelo se especialize no conjunto de dreno e perde a capacidade de generalização então aqui a gente precisa ou fazer o processo inverso em vez de aumentar a quantidade de neurônios camadas reduzir a quantidade neurônios camadas diminuindo a flexibilidade do modelo para que
ele não interpole os dados de entrada ou utilizar a regularização que a gente vai ver na nossa próxima aula aqui só recordando um gráfico já apresentei para vocês aqui na esquerda nós temos um cenário linear ou seja um cenário com alto baias um alto viés onde eu tô forçando o aprendizado de modelo linear então a gente observa que a gente tem um alto índice de erros no cenário do meio a gente já tem um modelo complexo com a quantidade muito grande de parâmetros e a gente consegue interpolar exatamente a região separação dos dados com erros
zero qual que é o problema disso daqui nós temos uma alta variância qualquer pequena modificação que eu tenho no meu no meu X1 X2 eu posso alterar da classe 1 para Classe 2 é de maneira muito abrupta então aqui a gente tem um sobre ajuste dos dados o que não É um cenário ideal e aqui no lado direito nós temos um modelo que eu chamei de modelo quadrático então é uma curva aproximadamente quadrática aqui que seria um caso intermediário adequado Onde existem erros só que a curva minha é suave então aqui eu tenho um baias
um viés inferior mas também é uma variância inferior que seria um modelo ideal que é o que a gente busca ao longo do processo de configuração desse modelo e para isso a gente vai utilizar tanto o conjunto de treino quanto o conjunto de velação conjunto de treino estou conseguindo aprender conjunto de validação eu tô conseguindo generalizar basicamente Essa é a função de cada um desses conjuntos então se eu tenho problema com baias ou seja Tô tendo um erro de treino alto que que eu posso fazer eu posso aumentar os parâmetros da rede especificamente aumentar o
número de camadas ou treinar por mais tempo pode ser que é interrompir com poucas se eu continuar treinando por mais épocas o modelo vai convergir para um cenário adequado então a gente pode aumentar os parâmetros aumentar a flexibilidade do modelo ou treinar por mais tempo já quando eu tenho um erro de validação alto indicando para mim um over Fit e o erro de treino tá baixo indicando que o modelo consegue aprender aí eu já posso utilizar outras abordagens o cenário ideal pra gente conseguir mais dados quanto mais dados dados representativos melhor vai ser a Possivelmente
melhor vai ser a geração daquele modelo para atacar para resolver aquele problema que eu tô que eu tô resolvendo porque eu tô levando em consideração ou utilizar a regularização de regularização é restringindo a flexibilidade da rede ou ajuste na topologia especialmente regularização a gente vai na nossa próxima aula e ajuste na topologia seria aquele processo inverso eu cheguei numa topologia que consegue aprender só que tá tendo eu começo a reduzir os parâmetros e preparamos dessa rede por exemplo reduzindo números neurônios em cada camada ou reduzindo o mesmo o próprio número de camadas da rede neural
então o que que a gente busca ao longo desse processo a gente busca uma rede a menor rede possível capaz de resolver o problema se eu tenho um problema choro por exemplo eu poderia colocar uma rede com duas entradas uma saída e um monte de neurônios aqui no meio ela vai resolver mas não é o cenário ideal eu sei que com apenas dois hormônios da camada oculta eu consigo resolver bem esse problema então é um modelo que eu preciso atingir qualquer coisa além disso eu vou estar aumentando muito a flexibilidade o problema do modelo vou
estar aumentando a complexidade do modelo e não necessariamente é o que eu é o modelo que vai trazer para mim melhores resultados sem contar que o custo computacional dele possa ser maior então o que que a gente pode fazer agora para acelerar o treinamento eu sei que já tem um modelo configurado ele consegue aprender bem treino generaliza bem por conta de validação só que eu quero acelerar tentar deixar o treinamento mais eficiente então algumas formas para a gente alterar o padrão de Treinamento seria como que a gente vai treinar esses dados configuração inicial dos pesos
como que a gente vai fazer modificações na taxa de aprendizagem termo de momento em que algo muito importante ele reduz muito estabilidade da rede e faz as modelos que não convergem de maneira tão fácil convergerem de maneira mais adequada ou adicionar nós intermediários Pode ser que com dois neurônios na camada oculta eu consiga resolver mas eu resolvo com uma certa inflexibilidade se eu coloco um terceiro neurônio pode ser que eu faça eu consigo facilitar a separação a criação daquela Fronteira e a normalização do conjunto de dados é o que ajuda bastante também como eu já
comentei nas aulas anteriores então aqui a gente tem dois cenários de Treinamento que é o treino modo padrão esse gráfico de cima e o modo em lote ou também chamado em Beth embaixo O que que a gente observa claramente aqui no primeiro caso tem uma certa um certo ruído no treinamento cada linha dessa representa o conjunto de treino e de validação e já no de baixo eu tenho uma curva mais suave o que que acarreta isso no método padrão a gente faz o seguinte se eu tenho 100 exemplos meu conjunto de Treinamento vou pegar um
exemplo apresentar para rede propagar esse sinal até a saída Calcule os erros e volta reto propaganda e ajustando os pesos eu faço isso para cada padrão do meu conjunto de Treinamento uma vez que eu fiz para todos os padrões eu concluir a primeira época já no método em Lote a gente só volta atualizando após o final da época Então vou apresentar todos os padrões do meu conjunto de Treinamento calcula o erro médio para todos esses padrões e depois volta atualizando uma única vez com Gradiente médio calculado para todo o meu conjunto de dados não tem
uma estimativa melhor do vetor Gradiente e até por isso que a gente não tem essa busca lá vamos dizer assim estocástica na superfície de erro a partir da aleatoriedade dos sinais apresentados como a gente está calculando o gradiente médio a gente sempre vai para caminhar para aquela direção de maior decrescimento da função de custo é problema dessa segunda abordagem que geralmente ela demanda mais épocas em comparação com a abordagem padrão e uma maneira bastante utilizada atualmente é o método chamado mini Beat que seria um meio termo dos dois eu não vou nem utilizar todos os
exemplos de maneira separada e nem todos os conjuntos de forma única eu pego lá meus mil exemplos e quebram 10 lotes de 100 exemplos cada um que eu vou chamar de mini Beats então eu treino em lote para cada um desses sublótis então ao invés de fazer mil treinamentos para fazer 10 treinamentos onde cada treinamento é a média de 100 exemplos então mudando a forma de configuração do nosso processo de Treinamento a gente pode acelerar o processo de treinamento da rede a gente pode iniciar a rede com pesos pequenos aleatórios só que a gente pode
além disso a gente pode definir o a própria amplitude dos pesos de acordo com a quantidade de sinapses que eu tenho no neurônio como que a gente calcula o campo local induzido é o somatório ponderado das entradas pelos respectivos pesos se eu tivesse 1000 neurônios Se eu colocar uma amplitude de 0.1 assumindo que todas as entradas são positivas é vou ter mil entradas então é somatório Vai ser mil elementos mesmo com valor pequenos 0.1 o valor do campo localizado pode ser muito grande por outro lado seu tem poucos neurônios 10 por exemplo aí esse valor
do Peso já pode ser um pouco maior precisa colocar um valor de peso muito pequeno somando apenas 10 termos Pode ser que eu não consiga atingir um valor grande fica ali próximo do zero ainda então a gente pode ponderar o amplitude dos valores sinápicos a partir da quantidade de sinapses a gente pode utilizar a taxa de aprendizagem fixa como nós utilizamos exemplos Mas a gente pode utilizar uma taxa decrescente Qual que é a ideia se eu coloco uma taxa fixa pequena eu vou demorar muito tempo para fazer a convergência do modelo para atingir o nosso
mínimo de energia por outro lado se eu coloco uma taxa muito grande pode ser que eu fique oscilando entre duas regiões e jamais consiga atingir esse mínimo então o cenário ideal que começar com uma taxa maior para chegar na região promissora e depois reduzindo essa taxa para fazer especialização dos parâmetros uma das maneiras a gente fazer isso é definir o Eta para cada época onde ter representa época como sendo um Eta Inicial dividido por um mais a época dividido por tal onde esse tal vai controlar Qual que é o decaimento que eu tenho dessa taxa
de aprendizagem e assim diversas formas a gente fazer esse tratamento você quer só uma só uma delas da outra questão utilizar Taxa única para toda a rede ou utilizar uma taxa por neurônio uma taxa por sinapse não temos alguns algoritmos que definem ao invés de uma taxa para toda a rede uma taxa para cada neurônio e se mostra mais eficiente como o caso do r-prop e outros algoritmos da literatura temos de momento que algo bastante importante qualquer ideia se a gente pensar na abordagem tradicional a gente tem que o delta w ele é simplesmente o
Eta vezes o delta quando a gente utiliza o sistema de momento a gente vai falar eu vou depender do Delta que é o gradiente localizado instantaneamente Mas também de um Alfa multiplicado pelo passo que eu utilizei na abordagem anterior na atualização anterior então seria como se fosse uma média móvel é dos Passos utilizados então o passo ele vai depender do Gradiente e também do histórico de atualizações dos pesos duas formas que a gente pode representar é desmembrando o reta da taxa aprendizagem do Alfa ou colocando o Eta em evidência e colocando um menos Alfa para
o gradiente local e Alfa para o espaço de atualização passadas tá uma ilustração por exemplo se eu tô utilizando apenas o gradiente local se eu tô nesse ponto aqui eu calculo Gradiente e fala Vem para cá hora que eu chego nesse segundo ponto eu calculo Gradiente ele fala volta para cá ou seja vou ficar preso nesse local quando a gente coloca o termo de momento a gente insere uma espécie de inércia no processo se era como se eu colocasse uma energia cinética nessa bolinha Então a hora que ela chegar aqui ela vai ter uma desaceleração
pelo Gradiente contrário mas dados Passos anteriores que era nessa direção ela vai conseguir romper essa barreira de potencial e chegar nesse mínimo Essa é uma das elísticas muito importantes e tem um desempenho bastante significativo ao treinar redes neurais bom que que nós vimos essa aula Nós aprendemos a configurar Então se preparando de uma rede antropologia de uma rede Multilaser utilizando o conjunto do trailer validação e a gente pode generalizar isso pro pro validação cruzada abordar Seria a mesma sempre analisando o erro de treino erro de validação e definindo você precisa aumentar ou reduzir a quantidade
de parâmetros do modelo e conhecemos algumas eurídicas para acelerar o treinamento dos modelos na próxima aula como eu já comentei no início a gente vai definir alguns apresentar alguns algoritmos é mais eficientes para treinamento da rede Multilaser alguns metros para regularização dos pesos para atacar o processo de over Fitness bom é isso por enquanto e até a próxima aula [Música] [Música]