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:
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)
Antes de começar, disclaimer rápido: ChatGPT não é 100% confiável
No entanto, vão surgir outros chatbots similares e essa tecnologia vai evoluir. Assim, é importante começar a se habituar e usá-la para se tornar mais produtivo no cotidiano
Mas lembre-se, ela ainda erra muito!
Outro ponto: nunca se satisfaça com a primeira resposta, especialmente se ela não estiver boa
Lembre-se que você sempre pode incluir mais informações no seu pedido, até ficar satisfeito.
Aprender com os usos que outras pessoas estão fazendo na Internet é bem importante!
Edsger Dijkstra é um famoso cientista da computação neerlandês (da região popularmente conhecida como Holanda) e que deu inúmeras contribuições para a Ciência da Computação existir como é hoje.
No entanto, seu trabalho mais conhecido é o "Algoritmo de Dijkstra", um jeito de calcular o caminho de menor distância entre dois pontos conectados por "estradas".
Pra fugir do clichê do primeiro algoritmo, você sabia que a Ada já apareceu em um episódio de Doctor Who?
Mais especificamente, Ada apareceu no episódio "Spyfall, Parte 2" da décima segunda temporada de Doctor Who.
É um pouco difícil explicar o que acontece no episódio sem acompanhar a série, mas o mesmo também conta com a aparição de Charles Babbage, mentor de Ada e provavelmente o idealizador do computador de propósito geral como conhecemos hoje.
Nesse post vamos falar de Alan Turing, famoso cientista da computação e que ficou bastante popular em 2014, com o filme "Jogo da Imitação", inspirado em uma fase de sua vida.
Além da contribuição na quebra da criptografia nazista, Turing foi fundamental no surgimento da Ciência da Computação.
Talvez algum dia eu comente ou faça um corte elaborando um pensamento de que: "a pior decisão que vc pode tomar na sua vida profissional é se envolver mais do que você dá conta no seu emprego, especialmente no aspecto emocional/expectativa"
Acho que foi o pior erro que cometi
Em meados de 2017, eu tive um burnout grave (mas grave mesmo, de tomar remédio tarja preta, 10 meses de cama e coisas piores) como consequência de um excesso de trabalho exagerado
Eu achava que eu tinha que ser um super-herói, no sentido de resolver tudo e achava que as pessoas
valorizariam esse esforço
Muitos até valorizaram, mas uma grande parcela não achou nada demais ou viu até brecha de cair em cima de mim, exigindo o impossível
Enfim, fiquei doente (e tenho que ser maduro em reconhecer que não foi culpa do meu emprego, mas minha) e oq rolou?