Lucas (Universo Discreto) 👨‍💻 Profile picture
Professor que fala de Ciência da Computação no YouTube (https://t.co/nDNo10bnB7)

Jun 5, 2023, 30 tweets

🧵🧠 Você sabe como uma rede neural artificial (RNA) funciona? Quer entender por que elas são tão importantes?

Vou tentar explicar nessa superthread sobre #inteligenciaartificial, vem comigo!

RNAs são inspiradas no cérebro humano.

Assim como o cérebro biológico tem o neurônio, as RNAs também possuem neurônios artificiais

Ainda que existam algumas semelhanças, não se enganem: redes neurais biológicas e as redes neurais artificiais são profundamente diferentes

Uma RNA pode ser entendida como uma função f(x) = y, tal que, pra qualquer x, a rede diz o y esperado

RNAs permitem que seu x seja praticamente qualquer coisa

Por exemplo, se x forem os pixels de uma imagem, o y pode ser a indicação de qual objeto está alí (por ex., um gato)

Mais exemplos:

-Se x contiver o áudio de uma pessoa falando, y pode ser a transcrição do q foi dito
-Se x forem dados de um paciente, o y pode ser o diagnóstico de uma doença
-Se x forem os dados de sensores de um carro autônomo, y pode ser as decisões de direção tomadas

Para que uma RNA seja capaz de dizer o y esperado a partir de um conjunto x, precisamos realizar algo que chamamos de treinamento

O processo é simples: apresentamos uma série de exemplos para que a RNA saiba tomar a decisão correta

Vamos ilustrar isso com cachorros e gatos

Vamos criar uma RNA capaz de dizer automaticamente se uma foto é de cachorro ou gato

A 1º coisa que fazemos é criar uma pastinha no computador contendo apenas fotos de gatos.

Similarmente, criamos outra pasta contendo apenas cachorros.

Esse é a primeira etapa do treinamento

Fazendo uma analogia, é como se um aluno estivesse estudando para uma prova (respectivamente, uma RNA realizando treinamento)

Verificamos continuamente se a RNA "acertou um exercício" (adivinhou se é gato ou cachorro), corrigindo-a sistematicamente até não errar mais

Vamos pra um exemplo de RNA processando uma foto

Imagine que a primeira foto contendo gato está sendo lida pela rede neural

Para a explicação ficar mais simples, suponha que cada imagem é de 2x2 (apenas 4 pixels)

Tudo começa na camada de entrada (a 1º, de cima pra baixo)👇

No exemplo que mostrei, a camada de entrada apenas informa o x (a cor de cada pixel) para cada neurônio artificial da 1º camada oculta

É na camada oculta que o processamento é feito, vou explicar melhor

Cada neurônio da cam. oculta recebe os pixels da primeira imagem de gato

Além dos pixels recebidos, cada neurônio contém pesos, que são valores associados as setinhas verdes. Como são 4 pixels, então cada neurônio da 1º camada oculta contém 4 pesos

A "mágica" acontece nos pesos

Os pesos fazem o aprendizado acontecer.

O objetivo do treinamento é descobrir os pesos certos para que a rede neural determine corretamente o que é um cachorro ou gato

Quando a rede inicia seu treinamento, os pesos costumam ser valores sorteados ou "chutados"

Cada neurônio recebe os pixels e usa seus pesos, fazendo a seguinte conta:

z = pixel1 * peso1 + pixel2 * peso2 + pixel3 * peso3 + pixel4 * peso4

O que ele faz com esse z? Depende do neurônio usado na RNA em questão

Um neurônio simples faz o seguinte: aplica z em uma função que "transforma" ele em um número entre 0 e 1

Se esse z transformado for igual ou maior do que 0,5, então o neurônio "dispara" (é como se informasse "sim" para os neurônios da camada seguinte). Do contrário, não faz nada

Agora consideremos a camada seguinte.

Cada neurônio da segunda camada oculta recebe os "sim" e "não" de cada neurônio da 1º camada (ou seja, se "dispararam" ou não)

Com essa informação, cada neurônio da camada 2 fará algo parecido com o cálculo que expliquei antes

Eles farão a "continha" de multiplicação e soma de cada valor recebido (que nesse exemplos, é 0 se não houve disparo, e 1 se houve disparo) com seus pesos

Novamente, dependendo do valor (se for maior ou igual a 0,5), os neurônios "disparam" ou não pra última camada, a de saída

Na camada de saída, verificamos se nossa RNA acertou ou errou (se estimou corretamente se é cachorro ou gato)

O neurônio da camada de saída aplica uma função parecida ao z que calculamos, com uma diferença... se o valor final for maior ou igual a 0,5 , é gato. Se não, é cachorro

Se nesse primeiro exemplo, a rede tiver acertado e inferido que é gato (ainda que por acaso), tá tudo bem, tudo certo

Agora, se a decisão tomada é de que a foto tinha um cachorro, obviamente, houve um erro

Em caso de erro, precisamos ajustar os pesos dos neurônios ao longo de todas as camadas da RNA, para que da próxima vez, classifique certo

Isso é feito por um procedimento de Retropropagação (Backpropagation), desenvolvido pelo Geoffrey Hinton (o "padrinho" da IA moderna)

É difícil explicar a retropropagação sem muita matemática, mas a intuição é simples

Fazemos o caminho "inverso", até retornar a camada de entrada

A cada passo, "mudamos" os pesos para que, da próxima vez, os neurônios certos sejam disparados e a classificação se torne correta

"Lucas, que bruxaria é essa? Como ele vai saber quais pesos devem ser mudados e para quais valores?"

Pois então, isso é puro cálculo diferencial. Em resumo, é como se tivéssemos uma "bússola"

Não sabemos o valor exato que devemos mudar todos os nossos pesos de nossa RNA

Por meio do cálculo, só sabemos que determinados pesos devem "subir" um pouquinho ou "diminuir" um pouco (olhamos nossa "bússola" para os pesos dos neurônios)

Eu falo desse procedimento aqui em detalhe (se chama método do gradiente)

Vamos entender melhor com uma analogia completa. O treinamento de uma Rede Neural é como um grande escritório

As primeiras camadas ocultas contém funcionários de "baixo escalão". À medida que avançamos, encontramos subgerentes, gerentes, diretores, até chegar no CEO

Os funcionários de "baixo" escalão (1º camada oculta) recebem os pixels de cachorro e de gato e, dependendo das cores de pixels encontrados e seus pesos, eles "informam um relatório" para seus subgerentes

Dependendo das informações recebidas pelos subgerentes e seus pesos, eles vão analisar e "informar novos relatórios" aos gerentes e assim sucessivamente

É como se esses relatórios de gerentes resumissem os relatórios dos funcionários de baixo escalão

Esse processo se repete até que o CEO receba os relatórios resumidos de todos, que será usado para tomar a decisão final: se é cachorro ou gato

Se acertar, ok! Chefe feliz!

Se errar, o CEO vai "dar um esporro de trás pra frente", que será recebido por todos os funcionários

Todo mundo recebe um "esporro didático" que será usado para ajustar seus pesos internos e não errar na próxima

Esse procedimento "pra frente" (analisar os dados e enviar relatórios até chegar no chefe) e "pra trás" (ouvir o esporro e se corrigir) é repetido a exaustão

Após milhares de tentativas e fotos, a tendência é que cada funcionário e gerente (os neurônios) ajustem seus pesos de forma a não errar mais

Nessa situação, é o fim do treinamento. A expectativa agora é que, pra qualquer foto de gato e cachorro, ele não erre

Assim, nossa RNA consegue "generalizar", ou seja, por meio de exemplos de fotos e cachorros, ela passa a acertar se é cachorro ou gato para fotos que nunca viu antes!

Enfim, tem muito mais coisas... mas acho que exagerei na thread e é um bom ponto para terminar.

Esse exemplo é bem simples e desconsidera uma série de coisas... mas para uma introdução, é um bom ponto de partida

Tem um vídeo do meu canal em que eu implemento basicamente isso, uma RNA capaz de diferenciar gatos e cachorros por imagem

Se vocês tiverem gostado, não deixem de acompanhar minha playlist de RNAs do meu canal!

Desde 2020, estou tentando implementar RNAs de todos os tipos usando Python e Tensorflow

Continuam saindo vídeos até hoje (a conta-gotas, confesso)

youtube.com/playlist?list=…

Share this Scrolly Tale with your friends.

A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.

Keep scrolling