Baixe o app para aproveitar ainda mais
Prévia do material em texto
14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 1/53 Redes neurais feedforward Prof. Fernando Cardoso Durier da Silva, Prof. Sérgio Assunção Monteiro Descrição Conceitos de redes neurais feedforward e sua aplicação em processos de descoberta de conhecimento em bases de dados. Propósito Conhecer redes neurais feedforward é fundamental para o profissional da área de ciência de dados, uma vez que os resultados oriundos de sua aplicação permitem descobrir padrões prévios, classificar novas observações ou calcular resultados de regressões. Preparação Para a compreensão dos exemplos e sua reprodução, é importante que você tenha instalado, em sua máquina de estudos, o Python na versão 3.8 ou acima, e as bibliotecas Pandas, Numpy, Sklearn e Plotly. Será necessária também uma ferramenta para execução de notebooks, como Jupyter, que pode ser instalado como uma biblioteca do Python, além do notebook que será utilizado na parte prática do tema. Objetivos https://stecine.azureedge.net/repositorio/00212ti/04163/docs/notebook.zip 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 2/53 Módulo 1 Conceitos básicos Identificar conceitos básicos de redes neurais artificiais. Módulo 2 Algoritmo de backpropagation Descrever o funcionamento do algoritmo de backpropagation e do otimizador de gradiente descendente. Módulo 3 Tensor�ow/Keras Aplicar redes neurais feedforward usando Tensorflow/Keras. Na área de inteligência artificial (IA), temos dois grandes grupos de conhecimento, um chamado de inteligência artificial simbólica e outro de inteligência artificial subsimbólica. Basicamente, o que os difere é o processo de aprendizado e, ainda que ambos se enquadrem em aprendizado supervisionado e não supervisionado, o tipo de processamento varia. Nos modelos simbólicos, temos o aprendizado baseado em regras, propriedades e lógica; nos modelos subsimbólicos, temos o aprendizado direto dos dados, ou a experiência, uma vez que esses modelos não precisam de etapas de pré-processamento para funcionar, pois isso já está "embutido" em seu funcionamento. As redes neurais artificiais, por exemplo, pertencem ao grupo de IA subsimbólica. Introdução 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 3/53 Frank Rosenblatt (1928-1971) Psicólogo americano conhecido no campo da inteligência artificial como criador do perceptron. Por vezes, é chamado de pai do aprendizado profundo, juntamente com outros pesquisadores de renome. 1 - Conceitos básicos Ao �nal deste módulo, você será capaz de identi�car conceitos básicos de redes neurais arti�ciais. Um dos primeiros modelos de IA subsimbólica foi o perceptron, criado em 1958, por Frank Rosenblatt, no laboratório aeronáutico da Universidade de Cornell. O perceptron simulava um neurônio que, assim como a sua contraparte biológica, tinha entradas e saídas por onde os estímulos passam, e uma função de ativação que leva entradas a um domínio desejado, de camada em camada, segundo o conjunto de dados. Individualmente, cada perceptron pode ser encarado como um classificador linear. O conjunto desses neurônios é uma rede neural artificial do tipo alimentação avante (feedforward), em que a saída de uma camada é usada como entrada para a próxima camada. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 4/53 Ligando os pontos Você sabe o que é uma rede neural artificial? Sabe que ela pode ser muito útil em diversas situações práticas? Para respondermos a essas perguntas, vamos analisar o caso abaixo. A empresa Pesquisa Aplicada S.A. (empresa fictícia) atua no ramo de manutenção preditiva de equipamentos de grande porte aplicados à mineração. Seu portfólio de clientes é composto por empresas de mineração que fazem a extração e o transporte de minério. Esses clientes utilizam equipamentos que possuem sistemas embarcados que armazenam os dados gerados por diversos sensores. Além disso, a Pesquisa Aplicada S.A. tem um time diversificado de profissionais que atua na área de tecnologia, relacionamento com o cliente e na pesquisa aplicada. Até recentemente, os dados dos equipamentos eram processados e tratados por métodos estatísticos com foco nos modelos de séries temporais. No entanto, os resultados produzidos por esses métodos sempre demandavam muita atenção posteriormente de especialistas. Um dos integrantes da Pesquisa Aplicada S.A. começou a pesquisar por outras formas mais adequadas para tratar esses dados e, nessa busca, conheceu os métodos de redes neurais artificias (RNA), que são modelos computacionais que tem como principal característica simular o comportamento do sistema neural biológico para generalizar resultados a partir de um processo de treinamento. Depois de estudar os conceitos e como os modelos de RNA funcionam, o pesquisador passou a realizar testes nos dados dos equipamentos. Ele apresentou os resultados para os demais integrantes da empresa e todos ficaram surpresos com a qualidade do que havia sido produzido. Um dos questionamentos feitos para o pesquisador foi se os resultados foram gerados pelos especialistas nos equipamentos. O pesquisador respondeu: “não, pois foi por isso mesmo que utilizei, modelos de redes neurais artificiais”. Ao final, os dirigentes da Pesquisa Aplicada S.A. ficaram satisfeitos com o que foi produzido e passaram a investir no desenvolvimento de soluções com RNA para analisar os dados dos equipamentos. E você, concorda com a decisão dos dirigentes da Pesquisa Aplicada S.A.? Após a leitura do case, é hora de aplicar seus conhecimentos! Vamos ligar esses pontos? 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 5/53 Questão 1 A Pesquisa Aplicada S.A. encontrou uma oportunidade de atuação no mercado de mineração. Em especial, na manutenção preditiva de equipamentos de grande porte. No seu ponto de vista, qual foi a condição fundamental que viabilizou essa oportunidade de atuação? Parabéns! A alternativa A está correta. A questão mais básica para poder atuar com métodos preditivos é ter à disposição dados confiáveis para serem analisados. Sem dados, não há como métodos de séries temporais ou de redes neurais artificiais produzirem resultados úteis. Questão 2 O cenário descrito no estudo de caso de Pesquisa Aplicada S.A. destaca a possibilidade de pesquisar e produzir um resultado com a utilização de métodos de redes neurais. Como você atribui essa abertura para a utilização de um novo método? A Os sistemas dos equipamentos gerarem dados. B A utilização de métodos de séries temporais. C Contar com especialistas na manutenção preditiva de equipamentos. D Atuar no segmento de mercado que investe em manutenção preditiva. E Contar com profissionais com diferentes formações. A É devido ao conhecimento comum de que métodos de redes neurais artificiais são reconhecidamente melhores do que os de séries temporais. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 6/53 Parabéns! A alternativa C está correta. Existem excelentes métodos para resolver problemas práticos que são pouco utilizados no mercado. Em especial, pela falta de uma cultura das empresas de investirem em pesquisa aplicada. No caso da Pesquisa Aplicada S.A., fica evidente que esta cultura de investir em pesquisa favoreceu o estudo e a aplicação dos métodos de redes neurais para resolver problemas práticos. Questão 3 Considere o seguinte cenário: você foi contratado pela Pesquisa Aplicada S.A. para estudar e apresentar os principais modelos de redes neurais artificiais e como eles podem ajudar a empresa a melhorar a qualidade dos serviços dela. Se o resultado do seu trabalho for bem- sucedido, vocêpoderá liderar um projeto de aplicação de redes neurais. Que estratégia você adotaria para cumprir essa missão? Digite sua resposta Chave de resposta B É provável que o pesquisador que propôs a utilização de métodos de redes neurais artificiais exerça grande influência dentro da Pesquisa Aplicada S.A. C Deve-se à cultura da empresa pela busca de métodos eficientes para resolver problemas práticos. D Os métodos de séries temporais são antigos e não produzem bons resultados. E A empresa percebeu a necessidade de acompanhar a tendência do mercado de utilizar métodos de redes neurais artificiais. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 7/53 A primeira ação a ser tomada é levantar quais são os serviços prestados pela Pesquisa Aplicada S.A. e quais são as necessidades de melhoria. Em seguida, fazer um levantamento dos modelos de redes neurais artificiais e encontrar correspondências de casos bem-sucedidos que possam ser aplicados aos serviços da empresa. Por último, é fundamental fazer um estudo de viabilidade para demonstrar para os tomadores de decisão da empresa que a aplicação de redes neurais para prestação de serviços é possível. Tipos de redes neurais arti�ciais Existem vários tipos de redes neurais, com arquiteturas e poderes computacionais diferentes, como: Redes neurais convolucionais Redes Neurais recorrentes Redes neurais feedforward A área de redes neurais é muito vasta e sempre está caminhando para novas evoluções e variações de modelos, dependendo apenas de quais problemas vamos tentar solucionar com essas redes. A seguir, conheceremos um pouco mais sobre as redes neurais mencionadas. Redes neurais convolucionais 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 8/53 As redes neurais convolucionais (convolutional neural networks ou CNN) são redes muito utilizadas em processamento de imagens. Sua arquitetura é composta de camadas de entrada (input), saída (output) e camadas escondidas (hidden ou camadas ocultas) diferenciadas dos demais tipos, por contarem com filtros, normalmente matrizes que “deslizam” sobre a entrada de dados. Essas redes mapeiam de forma equivariante os pesos e os filtros para as camadas subsequentes, por isso, são invariantes ao espaço e ao deslocamento. A imagem a seguir ilustra o funcionamento dessas redes. Rede Neural Convolucional. A grande vantagem desse tipo de rede neural é sua maior autonomia. Para processamentos de imagem, por exemplo, não é preciso ter filtros preestabelecidos pelo cientista de dados, pois a rede consegue apreender o melhor núcleo de filtragem (matriz de filtragem). Redes neurais recorrentes As redes neurais recorrentes (recurrent neural network ou RNN) são usadas em problemas sequenciais ou temporais. Tendo a estrutura de um grafo direcionado com ciclos, essa rede é capaz de recorrentemente fazer laços sobre as entradas, permitindo a compreensão de sequenciamento dos dados. A arquitetura mais conhecida de todas as redes neurais dessa categoria é a LSTM (long short-term memory), inventada por Hochreiter e Schmidhuber, em 1997. O que as diferencia de seus concorrentes é o fato de terem portas (gates) de esquecimento, superficialmente falando, fazendo com que a rede não exagere nos pesos (nem para mais, nem para menos), pois em redes RNN comuns, o gradiente (base do aprendizado desse tipo de modelo) pode acabar sumindo à medida que se propaga para trás, ou aumentando indiscriminadamente à medida que se propaga para frente. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 9/53 Redes neurais recorrentes. Hochreiter e Schmidhuber Josef Hochreiter é um cientista de computação alemão reconhecido na área de Machine Learning. Com seu professor e renomado pesquisador alemão, Jürgen Schmidhuber, tem contribuído com numerosas publicações na área de aprendizado profundo, com destaque para a rede neural recorrente denominada long short-term memory (LSTM). Para evitar o problema computacional de exageros nos gradientes, esse tipo de rede conta com as suas unidades de memória de curto prazo, que servem para se lembrar dos estados anteriores (evitando que o gradiente suma), e podem ser reguladas com pequenos episódios de perda de memória desejada (para não exacerbar os gradientes). Redes neurais feedforward Neste conteúdo, vamos focar nas redes neurais artificiais do tipo alimentação avante (feedforward neural networks ou FNN). Essas redes 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 10/53 neurais se caracterizam pelo fato de serem grafos bipartidos completos acíclicos, ou seja, todos os nós se conectam aos próximos da camada subsequente de modo a não fazer ciclos, e isso é possível graças ao fato de a propagação da informação ser feita apenas em uma direção. A imagem a seguir ilustra uma rede neural feedforward. Exemplo de Rede Neural Feedforward. Na imagem é possível perceber três diferentes tipos de camada: A camada de entrada é de tamanho (quantidade de nós) proporcional à dimensão do conjunto de dados em questão, em que cada característica se torna um nó da camada de entrada. Entre a entrada e a saída, temos as camadas escondidas (ocultas) de tamanhos variáveis, na quais acontece a construção do conhecimento para descobrir padrões e, por isso, a inteligência de um modelo neural não só é proporcional à extensão da camada escondida, como também está ali a encarnação desse conhecimento, assim como nosso sistema nervoso natural. A camada final é de tamanho proporcional às possibilidades de classificação em um problema (na classificação binária, podem Input layer ou camada de entrada Hidden layer ou camada oculta Output layer ou camada de saída 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 11/53 ser 2 nós, na ternária 3, e assim sucessivamente), e pode ter tamanho único, se estivermos falando de uma regressão. Atenção! Na rede neural feedforward, sendo a primeira a ser implementada e mais simples em termos de complexidade computacional, a informação flui da camada de entrada até a de saída, o que significa que não há loops na rede, já que os dados sempre são alimentados para a frente, nunca são enviados de volta. Por causa da natureza empírica e subsimbólica da rede neural, quanto maior e de melhor qualidade for o conjunto de dados, melhor será o desempenho final da rede, uma vez que, ao replicar o comportamento biológico, podemos até fazer uma associação com os anos que passamos estudando e/ou vivendo experiências para nos tornarmos bons profissionais em nossas áreas de atuação. Mas o principal motivo é que, diferentemente dos modelos subsimbólicos, os modelos simbólicos se equipam de regras de associação, ou formalismos pré- configurados em seus algoritmos, para fazerem inferências com menos dados do que uma rede neural, sem perder muito em acurácia ou precisão. Funções de ativação As redes neurais artificiais, assim como os modelos de IA simbólica, como a floresta aleatória, máquina de vetores de suporte etc., também possuem hiperparâmetros, que são configurações em modelos de aprendizado de máquina que regem seu bom funcionamento e servem para ajustar e sintonizar os seus resultados. Por exemplo: Árvore de decisão Temos altura, número máximo de folhas etc. Algoritmo KNN (K Nearest Neighbor) Temos o número K. Florestas aleatórias Temos altura das árvores, quantidade de classificadores por floresta etc. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 12/53 O primeiro hiperparâmetro das redes neurais de um modo geral, independentemente de tipo, são as funções de ativação. Funções de ativação são os elementosde decisão nesse tipo de modelo de aprendizado de máquina. Cada neurônio pode aprender limiares de decisão lineares e não lineares, baseados no tipo de função de ativação que ele adotar. E ainda há o tipo de função de ativação para normalizar os resultados, evitando que, por efeito cascata, os resultados de cada neurônio cresçam ou diminuam indiscriminadamente. A seguir, veremos algumas funções de ativação. Sigmoide A sigmoide mapeia um valor de entrada no eixo X para valores ente 0 e 1 no eixo Y. O nome sigmoide vem do formato em “S” da função, cuja função matemática correspondente para todo x real é: A imagem a seguir ilustra o gráfico da função sigmoide. Gráfico Função sigmoide. Extraído de MartinThoma / Wikimedia Commons / CC BY 3.0 f(x) = 1 1 + e−x 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 13/53 Tangente (tanh) É parecida com a sigmoide, mas tem uma extensão maior do contradomínio. Essa função mapeia valores de entrada no eixo X para valores entre -1 e 1 no eixo Y. O “h” em tanh vem de hiperbólica, também conhecida como tangente hiperbólica, obtida pela razão entre o seno e o cosseno hiperbólico, assim como a contraparte trigonométrica tradicional. Simplificadamente, é descrita com a equação seguir. A função tangente hiperbólica também pode ser descrita em gráfico, conforme ilustrado a seguir: Gráfico: Função tangente hiperbólica (tanh). Extraído de Geek3 / Wikimedia Commons / CC BY 3.0 ReLU (recti�ed linear unit) Também chamada de função de unidade retificada linear, a ReLU permite apenas a passagem de dados positivos, ou seja, mapeando valores de entrada no eixo X para valores positivos maiores ou iguais a zero no eixo Y. A função ReLU é denotada por: tanh(x) = ex − e−x ex + e−x 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 14/53 O gráfico da função ReLU e da sua alternativa GELU (gaussian error linear unit), que é uma aproximação do retificador com erro gaussiano, está ilustrado a seguir: Gráfico: Função ReLU em azul e GELU em verde. Extraído de Ringdongdang / Wikimedia Commons / CC BY-SA 4.0 Atenção! Existem muitas outras funções de ativação, além de ser possível a customização com funções próprias do cientista de dados. Cada função de ativação tem suas características, benefícios, desvantagens e motivos para serem usadas. Então, a escolha deve ser feita com cautela, pelo método de ajuste de hiperparâmetros (validação cruzada pelos resultados das variações de escolhas). Arquitetura de camadas Outro hiperparâmetro de uma rede neural é sua arquitetura de camadas, especificamente a das camadas escondidas, uma vez que as de entrada e de saída são travadas pelas dimensões do conjunto de dados e pelas especificações de resultados do problema em questão (classificação, ou regressão). f(x) = max(0,x) 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 15/53 Antes de discutirmos a camada oculta, precisamos entender uma especificidade da camada de saída, de onde são extraídas as predições. Cada tipo de problema a ser resolvido nos leva à escolha de uma função de ativação para essa camada, como os seguintes exemplos: Classi�cação binária Usaremos uma sigmoide, já que nosso domínio de respostas é 0 ou 1. Problemas multiclasse Usaremos a função softmax, que é uma generalização da sigmoide para mais de uma classe. Regressão Usaremos uma função de unidade linear. Vejamos as camadas da arquitetura de uma rede neural feedforward: Arquitetura de uma rede neural feedforward. A camada oculta ou escondida (do inglês hidden) pode ser mais profunda, ou seja, ter maior quantidade de subcamadas ocultas, e pode ser mais densa, ou seja, maior número de nós por subcamada oculta. Além disso, cada subcamada oculta por si só pode ter uma função de ativação, ou pode ter uma função diferente por subcamada. Tudo depende do tipo de problema em questão a ser resolvido. Exemplo 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 16/53 Uma rede neural que detecte imagens de números, pode ter 3 camadas (subcamadas) ocultas, sendo uma para detectar traços (com função de ativação ReLU), uma para detectar círculos (com função sigmoide), e uma camada que detecte a intersecção entre esses dois tipos de formas (com função tanh). Todas essas definições podem ser estabelecidas, inicialmente, de modo subjetivo; entretanto, como qualquer hiperparâmetro, devem ser ajustadas de modo a obter o melhor desempenho para resolução do problema em questão. Hiperparâmetros de aprendizado Os próximos hiperparâmetros dos quais falaremos estão diretamente ligados ao jeito como esse tipo de modelo aprende. São eles: É o algoritmo de otimização dos pesos da rede neural, e os mais clássicos são: SGD (stochastic gradient descent) LBFGS (limited memory BFGS: Broyden-Fletcher-Goldfarb- Shanno algorithm) Adam (adaptive moment estimation) Cada um pode implementar um jeito diferente de resolver o problema de otimização, e o escolhido será o que fizer a rede ter melhor resultado para resolver o problema em questão. É o que controla a velocidade de como a rede aprende, ou de como ela acha o ótimo global. Basicamente, o processo de aprendizado de uma rede neural, como veremos adiante, é iterativo e empírico, ou seja, a rede vai "descobrindo" os pesos Resolvedor de otimização de pesos Taxa de aprendizado 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 17/53 das funções de ativação entre neurônios. A taxa de aprendizado determina o tamanho da passada entre uma tentativa e outra. Existem outros hiperparâmetros que são mais operacionais, ou seja, relacionados ao ritmo da rede, que é o número máximo de iterações e de lotes de dados, como: Determina o processo de treinamento da rede, sendo que ela pode rodar um número determinado de passos até convergir seus pesos em um ótimo global, ou parar antes de um determinado limite. Cada iteração é chamada de época. Os dados são divididos em lotes e apresentados à rede pelas suas épocas, portanto, existe a possibilidade de você passar mais ou menos conteúdo de uma vez. Por isso, a quantidade de lotes é um hiperparâmetro de ritmo. Quanto maior o lote, mais sobrecarregada poderá ficar a rede e ela acabar decorando; quanto menor o lote, mais a rede demorará para aprender, correndo o risco de não aprender nada. Atenção! Como a rede neural tem hiperparâmetros muito específicos e em maior quantidade do que a maioria dos modelos clássicos, elas precisam de atenção redobrada na fase de escolha e configuração de modelo de descoberta de padrões: uma rede com mais camadas, ou com determinadas combinações de taxa de aprendizado (learning rate), ou com funções de ativação pode ter desempenhos drasticamente diferentes. Conceitos de redes neurais feedforward Número máximo de iterações Quantidade de lotes 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 18/53 Está na hora do nosso bate-papo sobre redes neurais feedforward e seus hiperparâmetros. Vamos lá! Falta pouco para atingir seus objetivos. Vamos praticar alguns conceitos? Questão 1 Qual o papel dos hiperparâmetros no treinamento de redes neurais? Parabéns! A alternativa A está correta. A opção A está correta porque o ajuste do resultado da rede neural é o objetivo da configuração dos hiperparâmetros durante o treinamento; a opção B é incorreta pois não ajudaria a rede; a opção C não se aplica aos hiperparâmetros; a opção D é tarefa de A Afinar o resultado final da rede. B Piorar o gradiente descendente. C Escolher as melhores métricas de monitoramento. D Embaralhar os dados. E Reduzir Dimensionalidade. 14/02/2024, 19:43 Redes neuraisfeedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 19/53 preparação dos dados; a opção E é uma técnica de pré- processamento de dados. Questão 2 Qual o motivo das redes neurais feedforward terem esse nome? Parabéns! A alternativa C está correta. A opção C é correta porque as redes neurais feedforward, como diz o nome, são de alimentação avante, isto é, não possuem feedback e são representadas por grafos sem ciclo; as opções A e B se referem à polígonos e não têm relação com esse tipo de redes neurais; a opção D não é verdade, pois as redes neurais são tudo menos esparsas; e a opção E não está errada por definição, mas não responde à pergunta em questão. A São estruturas geodésicas. B São polígonos convexos. C São grafos acíclicos. D São estruturas de dados esparsas. E São modelos subsimbólicos. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 20/53 2 - Algoritmo de backpropagation Ao �nal deste módulo, você será capaz de descrever o funcionamento do algoritmo de backpropagation e do otimizador de gradiente descendente. Ligando os pontos Você já ouviu falar sobre aprendizado de máquina? Sabia que existem vários algoritmos que são utilizados para essa finalidade? Para respondermos a essas perguntas, vamos analisar algumas situações práticas. A empresa Decisões Eficientes S.A. (empresa fictícia) atua no desenvolvimento de soluções de software que produzem recomendações que auxiliam gestores de segurança pública a direcionarem seus esforços para tratar problemas de forma focada. A empresa utiliza dados históricos e os relaciona a ações que foram executadas com êxito. Dessa forma, as soluções dela informam quais os melhores locais para alocar profissionais de segurança, com que periodicidade esses profissionais devem permanecer em determinado lugar e quais são os locais com maior chance de ocorrer situações que demandam por intervenção. Ao oferecer todos esses serviços, a Decisões Eficientes S.A. presta um precioso serviço para a sociedade. Há pouco tempo, a empresa recebeu uma nova solicitação: desenvolver uma solução para reconhecer suspeitos gravados por câmeras de segurança. O líder de pesquisa da Decisões Eficientes S.A. alertou para a dificuldade desse tipo de problema, mas, após analisar os pré- requisitos, concordou em aceitar o desafio de desenvolver a solução. O acordo foi de produzir uma aplicação utilizando um processo de 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 21/53 desenvolvimento ágil baseado em algoritmo de aprendizado das redes neurais, de modo que fossem feitas entregas parciais que passariam por testes os quais poderiam implicar mudança de metodologia de trabalho, ou mesmo compreensão das limitações dos resultados que a solução poderia gerar. O processo de construção, de forma muito resumida, funcionava, assim: Foram fornecidos dados de gravações com suspeitos já identificados para o modelo computacional. O modelo, por sua vez, passava por um processo de treinamento que tinha por objetivo aprender a relacionar as imagens dos vídeos com os suspeitos, sendo aplicado o algoritmo de backpropagation que repetidamente ajusta os pesos das conexões da rede de forma a minimizar a diferença entre valor de saída calculado e o valor real. Ao final, os resultados eram analisados por especialistas com o objetivo de medir a qualidade do processo de aprendizado. Quando o projeto foi concluído, ficou claro que havia algumas limitações que ainda precisavam ser superadas, mas, ainda assim, os resultados produzidos foram muito úteis na identificação de suspeitos e na melhoria do processo como um todo. E você, o que acha de utilizar métodos de aprendizado de máquina para melhorar serviços de segurança pública? Após a leitura do case, é hora de aplicar seus conhecimentos! Vamos ligar esses pontos? Questão 1 Como você viu, a Decisões Eficientes S.A. desenvolve soluções para suporte à tomada de decisão na área de segurança. Pensando em generalização de aplicações, selecione quais outras áreas a empresa poderia atuar mantendo uma estrutura de solução semelhante. A Armazenamento de dados com garantia de consistência. B Detecção de doenças através de análise de exames de imagens. C 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 22/53 Parabéns! A alternativa B está correta. Problemas de detecção de doenças através de exame de imagens são semelhantes em termos de estrutura aos de reconhecimento de suspeitos em vídeos de câmeras de segurança. Em ambos os casos, é necessário fornecer uma base de dados pré-classificada para que os modelos possam ser treinados e generalizar os resultados. Questão 2 Como você viu, os responsáveis pelo desenvolvimento de soluções da Decisões Eficientes S.A. desenvolveram uma estratégia para o andamento do projeto. Na sua opinião, que estratégia foi essa? Parabéns! A alternativa E está correta. Oferta de serviços na nuvem. D Produção de relatórios dinâmicos. E Produção de artigos técnicos. A Utilizar os algoritmos mais sofisticados de aprendizado de máquina. B Envolver apenas os profissionais especializados em aprendizado de máquina. C Aplicar métodos de processamento de imagens para identificar suspeitos. D Segregar o problema em outros menores para otimizar o trabalho de desenvolvimento. E Apresentar resultados parciais para facilitar detecção e ajustes de problemas. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 23/53 Para utilizar um algoritmo de aprendizado a fim de resolver problemas reais, é necessário envolver os diversos profissionais do projeto, pois os ajustes do modelo são mais eficientes quando existe uma compreensão clara das limitações dos resultados dele. No caso da Decisões Eficientes S.A., eles adotaram um processo de entregas parciais para receber respostas mais rápidas dos envolvidos e, assim, realizarem ajustes. Questão 3 Considere o seguinte cenário: você foi contratado para integrar o time de desenvolvimento de soluções da Decisões Eficientes S.A. e recebeu a seguinte incumbência: medir a qualidade de uma aplicação para realizar a identificação de pessoas desaparecidas que foram gravadas por câmeras de segurança. Há muitas expectativas sobre o que você produzir, pois, dependendo do resultado, a empresa pode ampliar a sua área de atuação e, assim, oferecer um novo serviço. Neste cenário, qual seria a estratégia que você adotaria? Digite sua resposta Chave de resposta Modelos de aprendizado de máquina, como os utilizados pela Decisões Eficientes S.A., são caracterizados por aprenderem a partir de um conjunto de dados pré-classificados conhecidos como dados de treinamento. E, depois de treinados, os modelos são submetidos a testes com outros conjuntos de dados também pré-classificados para verificar qual a qualidade dos seus acertos. No caso da aplicação para identificar pessoas desaparecidas, é necessário realizar um processo semelhante para treinar e validar o modelo. Portanto, é essencial dispor de uma base de treinamento e outra de testes. Conceitos gerais sobre backpropagation 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 24/53 O algoritmo de aprendizado de máquina de uma rede neural, assim como apresentado antes, é baseado no gradiente descendente estocástico. O algoritmo que faz essa otimização do gradiente se chama backpropagation, ou backprop, ou BP. O algoritmo consiste em computar o gradiente da função de perda (loss function) em relação aos pesos da rede neural para um exemplo de entrada e saída, e o faz de forma mais eficiente do que computar individualmente cada gradiente de cada peso. Seguindo a regra da cadeia, o algoritmo calcula cada camada por vez,iterando para trás desde a última camada. Suponhamos uma rede com a seguinte estrutura: Regra da cadeia No cálculo matemático, a regra da cadeia é uma fórmula para a derivada de uma função composta de duas funções. Ela foi desenvolvida por Gottfried Leibniz, cientista polímata alemão do século XVII, reconhecido por suas contribuições na Matemática, entre outras áreas do conhecimento. Estrutura de rede neural. Em que: x1, x2, x3, e x4 são as entradas da rede, preenchidas pelo valor das características dos dados (valores numéricos apenas); wi.j.l (i = camada, j = neurônio, l = ligação) representa um peso; N é o valor do neurônio dado por N=Wijl*x+bi; A é a função de ativação dada por f(N); b1 e b2 são os vieses de suas respectivas camadas escondidas; 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 25/53 Saída como resultado final do processamento (classe ou regressão). As equações das camadas escondidas 1 e 2 podem ser entendidas como: Camada 1 Camada 2 Camada 3 Atenção! O número entre parênteses acima das variáveis indica a camada de origem, para todos os similares naquela camada, assim evitando repetições, considerando que estejam no formato matricial. Cada neurônio tem o valor próprio em N, que é dado pela multiplicação de seu peso equivalente acrescido do viés da camada, sendo o resultado disso passado para a função de ativação A, que pode ser uma ReLU, sigmoide etc. Os resultados do processamento da entrada nos neurônios da primeira camada escondida são passados para a segunda como entrada, que fará um processamento parecido subsequentemente, até que se chegue ao fim da rede neural. Podemos enxergar como uma matriz de pesos da camada 1 com dimensões n, m: n é o número de neurônios de saída e m é o número de neurônio de entradas, assim para nós sendo (n, m) = (2, 4): N (1) = w(1)x + b(1) A(1) = f (N (1)) N (2) = w(2)A(1) + b(2) A(2) = f (N (2)) Saída = w(3)A(2) w(1) 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 26/53 A entrada da nossa rede também é uma matriz, porém, de dimensão 1, m, em que temos 4 entradas de dados. Desse modo: E isso também vale para os vieses (biases): Então, teríamos a soma das multiplicações dos pesos mais o viés: w(1) = ⎡⎢⎣w1.1.1 ⋯ w1.1.4⋮ ⋱ ⋮w1.2.1 ⋯ w1.2.4⎤⎥⎦x = ⎡⎢⎣x1x2x3x4⎤⎥⎦b = [ ]b1b2 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 27/53 Agora, você deve estar se perguntando: Como calcular o gradiente nesse emaranhado de multiplicações de matrizes? Isso é feito do seguinte modo: primeiro, pegamos o valor predito na saída, e comparamos contra o valor real no nosso conjunto de treinamento. A comparação entre esses dois valores é a função de custo, que pode ser desde um simples erro médio quadrático, até uma entropia cruzada. Para simplificar, vamos enxergá-la dessa forma: Com base no valor de C, o modelo se regulariza por meio do ajuste de seus parâmetros, de modo que chegue cada vez mais perto do valor real, e esse ajuste acontece com a backpropagation. Algoritmo de backpropagation A backpropagation funciona de acordo com a seguinte lógica: Repetidamente ajuste os pesos das conexões da rede de forma a minimizar a diferença entre valor de saída calculado e o valor real. N (2) = [(w1.1.1) ∗ x1 + ⋯ + (w1.1.4) ∗ (w2.1.1) ∗ x1 + ⋯ + (w2.1.4) ∗ C = custo(saída, real) ∣ real ⊂ {y, classe ⊂ {MSE, Cross − Entropy, out 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 28/53 O objetivo da backpropagation é uma minimização da função custo, em função dos pesos da rede e dos vieses das camadas. Vale mencionar que os vieses das camadas são os únicos valores modificáveis pela rede neste tipo de problema. O ajuste é determinado pelo gradiente da função de custos. Mas por que o gradiente? Se lembrarmos bem, um gradiente de uma função de n variáveis em um ponto x é o vetor de derivadas parciais de C em x. Matematicamente falando: Isso é importante, pois a derivada mede a sensibilidade da função para um argumento (lembre-se do gráfico no plano cartesiano, em que a derivada mede a inclinação da direção da função em dado momento, se está caindo ou subindo). Assim, medindo a sensibilidade, podemos entender o quanto xn tem de aumentar ou diminuir para que o custo do predito ao real se torne o menor possível. Complicado? Para simplificar, faremos uma analogia com mira de arco e flecha: O arqueiro ajusta a posição do braço como a backpropagation ajusta a função custo. dC dx = [ dC dx1 , … , dC dxn ] 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 29/53 A cada tentativa, o arqueiro move os braços mais para dentro do corpo, para diminuir a distância das flechadas ao meio do alvo; é mais ou menos isso que a backpropagation faz com a função custo; no caso do arqueiro, ele usa os olhos, no caso da backpropagation, ela usa o gradiente. A computação dos gradientes é feita pela regra da cadeia, uma técnica de cálculo, que matematicamente para um único peso : (de�nição do valor processado pelo neurônio, em que m é o número de neurônios da camada, e L-1 é a camada em questão). Isso também vale para o viés: wLjk dC dwL jk = dC dN Lj dN Lj dwL jk (regra da cadeia) N Lj = Σ m k=1w L jkA L−1 k + b L j dN Lj dwL jk = AL−1k (Derivando) dC dwL jk = dC dN Lj AL−1 k (Fim) dC dbLj = dC dN Lj dN Lj dbLj (regra da cadeia) 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 30/53 O que há em comum entre as duas equações é o gradiente local, que pode ser dito como: Assim, o algoritmo tem o seguinte laço em pseudocódigo: Enquanto (condição de parada ainda não obtida): Fim Sendo que: dN Lj dbLj = 1(Derivando) dC dbLj = dC dN Lj 1(Fim) δLj = dC dN Lj w := w − ϵ dC dw b := b − ϵ dC db 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 31/53 1. Valores iniciais de w e b são criados aleatoriamente (ou seja, nas primeiras épocas é bem ruim a acurácia do modelo). 2. Épsilon é a taxa de aprendizado dos hiperparâmetros que define a influência do gradiente. 3. w e b são representações matriciais dos pesos e vieses. Logo, a derivada de C em w e b é feita em nível matricial (fazendo derivadas parciais nos elementos da matriz). 4. A condição de término é a minimização do custo (na prática, a rede tem m épocas para treinar, logo, a condição de parada é a minimização do custo ou o fim do número de épocas). Não há uma regra, mas 200 épocas é um número comum para redes convergirem, devendo essa escolha ser feita de acordo com o problema e conjunto de dados. Esse tipo de raciocínio tende a ser matemático demais para a maioria das pessoas que estão começando a aprender sobre redes neurais; mas podemos fazer associações para suavizar esse “matematiquês”. Por exemplo, imagine um espaço 3D, em que o plano composto pelos eixos X, Y, Z é a função custo (podemos imaginar também que a função está aplicada ao conjunto de dados reduzido a 3 dimensões). Suponha, agora, o otimizador do gradiente descendente como uma bolinha, do tipo pula-pula. Vamos considerar a seguinte relação: Épocas Número de vezes em que a bolinha será jogada. Taxa de aprendizado A velocidade da bolinha ou a distância entre um salto e outro. Viés Lufadas de vento imaginárias. (ϵ) 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 32/53 Feito isso, o que acontece é o seguinte: a bolinha é solta de um ponto no plano (ou seja, a função de custo ainda está distante da realidade), e desliza em uma velocidade proporcional à taxa de aprendizado, procurando um vale. A bolinhaquicando representa as iterações da rede neural. A bolinha quicando dentro do plano, procurando um vale, representa a rede neural iterando pelas épocas. O objetivo da bolinha é achar o vale mais profundo, o máximo global, ou ótimo. Só que, assim como na realidade, essa busca por um máximo global pode ser limitada pelo número de tentativas (épocas), pela velocidade ou distância de pulo da bolinha (taxa de aprendizado); por isso, precisamos configurar bem os hiperparâmetros. Mas, por que os hiperparâmetros são tão importantes? Os hiperparâmetros impactam no processo de aprendizado. Resumindo Entendemos o cálculo por trás do gradiente descendente e a importância das derivadas e da regra da cadeia no algoritmo de backpropagation, visto que essas técnicas são formas de medir o impacto da mudança de pesos, durante a autorregularização desse modelo de aprendizado de máquina. Para isso, podemos fazer uma associação com uma bolinha pula-pula jogada em um terreno acidentado, imaginando que esse terreno seja o espaço geoespacial, em que medimos o custo pelos eixos x, y, e z. A bolinha pulando entre crateras é como se fosse o otimizador do gradiente, “explorando” os valores mínimos existentes (locais), e procurando o mínimo mais fundo (global), e as distâncias de pulos pode ser associada à taxa de aprendizado. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 33/53 Explicação sobre o algoritmo de aprendizado das redes neurais feedforward Está na hora de nosso bate-papo sobre o algoritmo de backpropagation. Vamos lá! Falta pouco para atingir seus objetivos. Vamos praticar alguns conceitos? Questão 1 Qual o objetivo das derivadas parciais na análise do gradiente descendente? A Medir a sensibilidade da alteração dos valores dos pesos. B Medir a distância da realidade. C Medir o conhecimento acumulado. D Medir a complexidade algorítmica da rede. E Medir a conectividade do modelo. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 34/53 Parabéns! A alternativa A está correta. A opção A está correta, pois as derivadas parciais medem a inclinação direcional nos pontos de função, ou seja, podemos saber se as alterações nos pesos estão melhorando ou piorando a função custo; a opção B é incorreta, pois o mais próximo a essa afirmação seria a função de custo C; a opção C não é verdade, pois o conhecimento ou o poder cognitivo de uma rede neural está nas camadas ocultas e as derivadas parciais são um dos requisitos para analisar e otimizar; a opção D é incorreta, pois não estamos falando de notação Big O (a real notação de complexidade algorítmica), que nem se aplica nesse contexto; a opção E é incorreta, pois o que mede o poder cognitivo de modelo são métricas como acurácia, precisão etc. Questão 2 Qual o papel de uma função de ativação no algoritmo de backpropagation? Parabéns! A alternativa D está correta. A opção D está correta porque a função de ativação dentro do neurônio recebe como entrada o valor da observação, e o resultado pós-cálculo é o estímulo percebido no neurônio; a opção A é incorreta, pois é uma métrica de monitoramento; a opção B é incorreta, pois o viés não é calculado pela função de ativação, mas A Calcular a acurácia. B Calcular o viés da rede. C Calcular o peso da rede. D Calcular o valor/estímulo no neurônio da rede. E Calcular o recall. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 35/53 pelo otimizador do gradiente descendente; a opção C é incorreta, pois os pesos não são calculados somente pela função de ativação, mas pelo otimizador do gradiente descendente seguindo o algoritmo de backpropagation; a opção E é incorreta, pois se trata de outra métrica de monitoramento de modelos. 3 - Tensor�ow/Keras Ao �nal deste módulo, você será capaz de aplicar redes neurais feedforward usando Tensor�ow/Keras. Ligando os pontos Você sabia que existem bibliotecas e frameworks que facilitam a utilização das redes neurais artificiais na prática? Sabe como essas bibliotecas podem ser muito úteis na prática? Para entendermos sobre os conceitos na prática, vamos analisar uma situação. Um grupo de profissionais, que são autodenominados de “fabricantes de máquinas inteligentes”, atua no desenvolvimento de aplicações que utilizam modelos de aprendizado de máquina, em especial, modelos de redes neurais artificiais feedforward. Com o objetivo de divulgar os projetos do grupo, decidiram criar canais nas redes sociais onde apresentam algumas de suas soluções. Apesar de terem obtido uma boa receptividade do público, eles perceberam a necessidade de ensinar as pessoas como desenvolver alguns projetos sem, é claro, a complexidade das soluções deles. Para isso, decidiram usar um 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 36/53 framework específico cujo nome é Tensorflow e a linguagem de programação Python. Uma das principais motivações por essa escolha é que o Tensorflow é muito bem documentado e possui diversos exemplos disponíveis, além de que a linguagem de programação Python é, atualmente, a mais importante para desenvolver projetos nessa área. Dessa forma, os fabricantes de máquina inteligentes construíram alguns exemplos e mostraram nas suas redes sociais como eles foram desenvolvidos e qual o potencial dos benefícios da aplicação deles para resolver problemas práticos. Para a surpresa deles, a procura por seus vídeos e demais materiais cresceu muito mais do que podiam prever. Com isso, tiveram que formalizar um curso para formação de desenvolvedores de soluções de aprendizado de máquina com o Tensorflow. Além do curso atender ao grande público, de um modo geral, eles também criaram cursos específicos para atender demandas de treinamento de empresas que atuam em diversos setores com suporte de tomada de decisão. E você, também gostaria de se tornar um fabricante de máquinas inteligentes usando o Tensorflow e o Python? Após a leitura do case, é hora de aplicar seus conhecimentos! Vamos ligar esses pontos? Questão 1 Como você leu no texto, os fabricantes de máquinas inteligentes foram surpreendidos pelo grande interesse do público em aprender a desenvolver soluções de aprendizado de máquina com o Tensorflow. A que você atribui esse interesse? A Aos algoritmos complexos que o Tensorflow já disponibiliza. B Pelo fato de ser um framework muito conhecido. C Devido ao fato de ser o framework que disponibiliza os melhores algoritmos já implementados. D A facilidade de desenvolver aplicações práticas com o Tensorflow. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 37/53 Parabéns! A alternativa D está correta. A área de aprendizado de máquina tem ganhado muita notoriedade nos últimos anos. Parte disso se deve aos recursos e ferramentas computacionais que facilitam o desenvolvimento de soluções concretas. No caso dos fabricantes de máquinas inteligentes ocorreu um grande interesse do público pelo fato de estarem usando um framework onde podiam implementar com facilidade algumas das soluções que eram apresentadas nas redes sociais. Questão 2 Como você leu no texto, existem dois grandes segmentos que demandam por soluções de aprendizado de máquina: empresas que precisam de aplicações para suportar a tomada de decisão e profissionais que precisam de treinamento. Pensando em termos da demanda do mercado real, você acha correto esquecer de todas as outras áreas da tecnologia da informação e investir apenas na compreensão de como funcionam os algoritmos de aprendizado de máquina usando o Tensorflow? E Por haver uma demanda muito maior de profissionais de aprendizado de máquina do que de outras áreas tradicionais. A Não está correto, pois as tecnologias e os conhecimentosse complementam para gerar soluções práticas. B É correto, pois a demanda do mercado por esse tipo de conhecimento é cada vez maior. C É correto, pois o domínio do Tensorflow é a melhor forma de aprender como aplicar os modelos de aprendizado de máquina. D É correto, uma vez que o Tensorflow é a mais popular das tecnologias voltadas para desenvolver soluções de aprendizado de máquina. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 38/53 Parabéns! A alternativa A está correta. As demandas do mercado raramente são voltadas para apenas uma área de conhecimento, ou mesmo o uso de uma única tecnologia. Apesar da importância dos modelos de aprendizado de máquina atualmente e do framework Tensorflow, é necessário investir em outras tecnologias e áreas de conhecimento. Para resolver um problema real prático, é necessário ter uma visão holística do negócio. Questão 3 Considere o seguinte cenário: você ingressou no grupo dos fabricantes de máquinas inteligentes. Sua primeira tarefa é montar um treinamento básico de como desenvolver um modelo de rede neural com o Tensorflow. Com base em sua experiência, como você organizaria esse curso? Digite sua resposta Chave de resposta É muito importante garantir que os alunos do curso saibam implementar soluções com o Tensorflow, portanto a primeira escolha a ser feita é sobre a linguagem de programação que será utilizada para realizar essas implementações. Atualmente, a melhor linguagem de programação com essa finalidade é o Python. Em seguida, é muito importante ensinar os conceitos básicos de um modelo de aprendizado de máquina e escolher um exemplo para mostrar como ele pode ser implementado com o uso do Python e do Tensorflow. Instalação da biblioteca Tensor�ow E Não é correto, pois existem outras tecnologias mais avançadas do que o Tensorflow. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 39/53 Vamos praticar o desenvolvimento de redes neurais, utilizando Python como nossa linguagem de programação e o Jupyter notebook como ambiente de desenvolvimento. Para praticarmos os conhecimentos de redes neurais especificamente, instalaremos o TensorFlow com o comando: TensorFlow É uma biblioteca de código aberto para aprendizado de máquina e de cálculos em dados descentralizados. Essa descentralização acontece porque o TensorFlow pode ser rodado em apenas um processador, ou em múltiplos, do tipo CPU (central processing unit ou unidade central de processamento) normal, ou GPU (graphics processing unit ou unidade de processamento gráfico), com capacidades computacionais incríveis. Isso é possível porque esse tipo de processador gráfico foi criado e aprimorado ao longo dos anos para lidar com multiplicações de matrizes e subproblemas derivados. Devido ao fato de cada vez mais evoluirmos nossa tecnologia e poder computacional, desde 2017, a Google disponibilizou uma versão light do TensorFlow, para rodar em dispositivos mobile chamada de TensorFlow Lite. Python Instalação do TensorFlow. Atenção! Lembre-se de que o TensorFlow pode apresentar restrições por sistema operacional, por isso é necessário prestar atenção nos logs do terminal, pois eles podem indicar instruções alternativas de instalação. Ou, então, basta criar um notebook compartilhado no Google Drive e fazer a experimentação pelo Google Colab. Depois, instalaremos as bibliotecas de ciência de dados que darão suporte a métricas e gráficos, como Scikit-Learn, Numpy e Matplotlib. Python 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 40/53 Instalação de bibliotecas. Instalação da biblioteca Keras Para finalizar a configuração do ambiente, iremos instalar o Keras. O interessante do Keras são seus recursos, com métodos de construção de camadas, métodos de funções de ativação das mais variadas, funções de perda/custo diferentes, otimizadores de gradiente etc. Por ser uma biblioteca de código aberto, basta procurar a documentação dela no Google, entrar em seu repositório do Github e acompanhar as trilhas de discussão, em caso de dúvidas, e fazer contato com os desenvolvedores. Keras É uma biblioteca para desenvolvimento de redes neurais projetada para permitir experimentação rápida. Ele oferece um conjunto de abstrações que serve de interface para outros frameworks de aprendizado de máquina, e pode rodar junto ao TensorFlow, Microsoft Cognitive Toolkit, Theano, PlaidML etc. Dica O mundo da computação, em geral, e do aprendizado de máquina, em particular, é colaborativo. Por isso, é comum quando encontramos erros no TensorFlow, Keras, Scikit etc., copiarmos o log de erro e procurarmos soluções em qualquer motor de busca. Encontraremos a resposta em algum fórum de discussão, como StackOverflow, Github, Reddit etc. Além de ser uma prática comum na comunidade de desenvolvimento de software e computação, isso nos possibilita aprender mais e mais. Para iniciarmos a instalação do Keras executaremos o seguinte código: Python Instalação do Keras. Agora que estamos preparados, importaremos as bibliotecas: 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 41/53 Python Importação de bibliotecas. No código, realizamos a importação dos seguintes métodos essenciais: Label Binarizer Método usado para regularizar as classes do nosso modelo. Sequential Base da construção de camadas. Dense Método de construção de camadas totalmente conectadas. SGD Otimizador de gradiente descendente tradicional. Além dos métodos essenciais, importamos também: classi�cation report Método que nos mostrará o resultado de nossa demonstração em detalhes (super recomendado para o uso no dia a dia com problemas de classificação de um modo geral). Pyplot 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 42/53 Será usado para visualizarmos a evolução do aprendizado no nosso modelo. MNIST Nosso conjunto de dados do qual falaremos adiante. Numpy Será usado para regularizar o dimensionamento dos nossos dados. Conjunto de dados MNIST Vamos, então, baixar nosso conjunto de dados para experimentação. Utilizaremos um dos conjuntos mais conhecidos e usados na área de redes neurais, o conjunto de dígitos escritos à mão do MNIST (Modified National Institute of Standards and Technology). Exemplo de conjunto de dígitos do MNIST. Basicamente, nossa rede neural vai aprender a reconhecer o padrão de escrita de números. Para conseguirmos esse conjunto, utilizaremos o seguinte bloco de código: Python 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 43/53 Acessando o MNIST. Agora baixado, o conjunto já vem no formato de treinamento e teste, como podemos ver na declaração do bloco de código anterior, mas será preciso rearrumar o conjunto da seguinte forma: Imagem Cada imagem do MNIST tem dimensões 28x28x1; entretanto, para a rede neural, precisaremos chapar a imagem em 28x28=784 pixels. Dados E em seguida, normalizaremos os dados para que fiquem entre 0 e 1, dividindo o conjunto por 255 (valor máximo de um pixel). Para realizar essas modificações, utilizaremos o código a seguir: Python Modificando o conjunto de dados. Agora, para adequar a última camada, a de saída, vamos binarizar a classe da seguinte forma: Python Binarizando o conjunto de dados. O Label Binarizer faz com o que o resultado da classe se torne binário, ou seja, em vez de lidarmos com a classe de valor 5, passaremos a lidar 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 44/53 com 0000100000. A conversão para a forma binária é importante, pois a camada �nal tem que ter tamanho proporcional àspossibilidades de resultados esperados. Em outro exemplo, se a rede classificasse animais em gato, cão ou peixe, teríamos 001,010,100 respectivamente. Essa prática é muito comum em problemas de classificação multiclasse, mas existe uma categoria que é a de multirrótulos, em que os resultados podem ser de mais de uma classe ao mesmo tempo. Por exemplo, categorias de autores de livros, como: terror, ficção científica, romance; se um livro fosse um terror de ficção científica, teria a binarização 110. Para cada caso desse tipo de problema, há uma função de custo diferente também. Treinamento do modelo de rede neural Definiremos a arquitetura da nossa rede neural. Com a ajuda do Keras isso pode ser feito de maneira simples, adicionando uma camada atrás da outra em sequência. Assim: Python Adicionando camadas. Como podemos ver, a arquitetura segue o seguinte formato: uma camada de entrada de 784 nós, um para cada pixel da imagem em questão, que se conectará a uma camada oculta densa de 256 nós, pela função de ativação da sigmoide. Depois, a primeira camada oculta se conectará à segunda de 128 nós, também por sigmoide. Esta se 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 45/53 conectará à última camada de predição, com 10 nós conectados a partir da Softmax. São 10 porque temos 10 possíveis dígitos. Para treinar o modelo, usaremos como otimizador do gradiente, o SGD, aquele baseado no gradiente descendente, com taxa de aprendizado 0.01. Utilizaremos a métrica de acurácia para acompanhar o modelo e, para calcular a perda, função de custo, usaremos a entropia cruzada categórica (categorical_crossentropy), que é a mais empregada em problemas de classificação. Para as épocas da nossa rede, escolheremos 100 épocas, ou seja, a rede tem 100 iterações para convergir e apreender, e apresentaremos lotes de 128 imagens cada por iteração. Para isso, utilizaremos o seguinte código: Python Treinando o modelo. Agora, veremos como nossa rede se saiu. Para isso, utilizaremos a classification_report, uma função do Sklearn que compara os valores preditos contra os reais passados como argumentos. Aplicaremos o seguinte bloco de código: Python Comparando valores. O resultado será um relatório de classificação e, como esse problema é multiclasse, isso é muito útil, pois além de mostrar a acurácia geral da classificação, mostrará também o resultado de cada classe possível. Eis o resultado: 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 46/53 Relatório de classificação. Para interpretarmos esse relatório, podemos observar que cada linha da matriz principal é uma possível classe; cada coluna, uma métrica de acompanhamento: precisão, recall, medida F1, e suporte (ou cobertura, isto é, quantos casos foram cobertos pelas métricas escolhidas). Nas linhas de baixo, temos a acurácia geral (accuracy), a média macro de acurácias e a média ponderada. A média macro e a ponderada nos trazem informações distintas: Média macro (macro avg) Comparação em nível macro de acurácia para cada classe, ou seja, feita sem considerar a distribuição da classe em relação às demais. Média ponderada (weighted avg) Leva em consideração a distribuição das observações por classe em relação às demais. Lembramos que as métricas macro e ponderada são muito importantes para conjuntos desbalanceados, visto que se tomarmos a métrica de um modo generalista, poderá dissuadir nossa avaliação de modelo, pois pode ser que o modelo tenha acertado tudo de algumas classes e pouco de outras, e essas métricas diferenciadas nos ajudam a encontrar esses detalhes. Podemos ver que o modelo tem mais facilidade em encontrar 1s do que outros dígitos e mais dificuldades de identificar 8s e 5s. Mas, de modo geral, a acurácia de 92% não é ruim, significando que em cerca de 9 a cada 10 tentativas, a rede acerta. Se analisarmos as métricas diferenciadas, podemos ver que os acertos entre classes estão bem equilibrados. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 47/53 Acompanhamento de métricas do modelo de rede neural Para finalizar, podemos ver como a rede evoluiu até chegar nestas métricas. Ou seja, como a função de custo foi sendo otimizada, e a acurácia foi subindo. Para isso, utilizaremos o seguinte bloco de código: Python Plotagem das métricas. A execução desse código resultará no gráfico a seguir: o resultado da função de custo (no caso, "training loss") diminui à medida que as épocas passam e a acurácia aumenta, o que é bastante intuitivo, pois a rede está aprendendo com o passar das épocas (iterações). Gráfico: acurácia e função de custo. Elaborado por Fernando Cardoso Durier da Silva 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 48/53 Retomando os conhecimentos teóricos sobre redes neurais, a cada época, a rede tenta um palpite nos seus pesos, de modo a tentar diminuir a função de custo (na maioria de bibliotecas e literatura na área, a função loss), para diminuir a distância entre a realidade e o predito, assim reduzindo a função loss e aumentando um pouco a acurácia. Depois, na rodada seguinte, o processo se repete, o otimizado do gradiente descendente gera um novo palpite, de modo a reduzir a função de custo, até que ele seja mínimo ou que o número de épocas acabe. Ao fim, teremos nosso modelo treinado e pronto para uso. Recomendação No dia a dia, o que é interessante fazer para verificar se o modelo está sobreajustado (overfitting) ou subajustado (underfitting), é apresentar um novo conjunto de dados ao modelo treinado e deixá-lo iterar sobre o conjunto. No final, pelo relatório de classificação se mede o quanto ele acertou. Se o modelo tiver errado muito, saberemos que houve overfitting ou underfitting; para tirar a dúvida de qual dos dois ocorreu, é necessário fazer uma rodada com os dados antigos. Se ele não errar nenhum ou quase nenhum, teremos um forte indício de overfitting. No entanto, se ele começar a gerar valores aleatórios e errar muito (mais da metade), então, terá ocorrido underfitting. De modo geral, redes neurais sofrem mais de overfitting do que de underfitting, uma vez que a condição de parada principal delas é a minimização da função custo. Para que você tenha os mesmos resultados em casa, utilize o notebook Jupyter, disponível para download na seção Preparação, para fins de prática e aprendizado. Demonstração de rede neural feedforward com Tensor�ow e Keras em Python Está na hora de nosso bate-papo sobre o modelo de rede neural feedforward com exemplos de linguagem Python. Vamos lá! 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 49/53 Falta pouco para atingir seus objetivos. Vamos praticar alguns conceitos? Questão 1 A biblioteca Keras serve para Parabéns! A alternativa A está correta. Keras é uma biblioteca de experimentação rápida de redes neurais que permite desenvolver redes neurais abstraindo de suas camadas; a opção B é incorreta, pois trata-se de tarefa do classification report; as opções C, D, e E são incorretas, pois são atividades de preparação dos dados. Questão 2 A abstrair a construção de camadas de redes neurais. B construir o relatório de métricas. C embaralhar os dados. D organizar os dados. E pré-processar os dados. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 50/53 Qual a finalidade do Tensorflow? Parabéns! A alternativa C está correta. A opção C está correta, pois o tensorflow foi primeiramente criado para cálculos matemáticos feitos de forma distribuída sobre grafos; a opção A é incorreta, pois o TensorFlow é um framework de cálculos distribuídos; a opção B é tarefa deoutras bibliotecas que não o TensorFlow; a opção D é incorreta, pois o TensorFlow pode calcular tensores, mas não é tarefa dele mantê-los como em um banco de dados; a opção E está incorreta, pois ele faz multiplicação de matrizes eventualmente, mas não é sua finalidade. Considerações �nais Neste conteúdo, entendemos a diferença entre modelos simbólicos e subsimbólicos, bem como o porquê de as redes neurais se encaixarem na categoria de modelos subsimbólicos. Vimos rapidamente os vários tipos de redes neurais existentes e como podem ser aplicadas, além de seus diferenciais. Estudamos as definições conceituais dos componentes principais das redes neurais, como as camadas de entrada, ocultas e de saída, e A Criar planilhas. B Criar relatórios. C Executar cálculos distribuídos. D Manter vetores. E Multiplicar matrizes. 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 51/53 entendemos quais são os hiperparâmetros e funções de ativação. Vimos como ocorre a relação entre a função de custo, muitas vezes medido pela perda (loss), e o aprendizado da rede, já que quanto menor o custo ou a distância da predição para a realidade, melhor se sairá o modelo. No final, conseguimos experimentar as redes neurais em uma grande caixa de ferramentas do cientista de dados moderno, com as bibliotecas TensorFlow e Keras na linguagem Python, no exemplo mais clássico, o MNIST, que serve até como benchmark de modelos de redes neurais de um modo geral. Ao demonstrarmos a implementação do modelo de redes neurais, entendemos não apenas os diferentes métodos do Keras, que permitem abstrair as camadas da rede, mas também vimos na prática, com os resultados, o processo de aprendizado, que começa com um custo alto, e vai decaindo à medida que a rede vai “entendendo” a realidade. Além disso, foi possível utilizar o relatório de classificação para que observássemos as métricas de interesse, e as métricas diferenciadas por valor possível de classe, um conceito importante no tratamento de problemas de classificação e multiclassificação. Podcast Para encerrar, vamos ouvir um resumo sobre redes neurais. Explore + Dentro da área de redes neurais, busque por LBGFS, o ADAM, e outros otimizadores de gradiente descendente. Para um aprofundamento matemático do tema, recomendamos revisar os conceitos de Cálculo, principalmente, otimização de duas variáveis, 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 52/53 regra de cadeia e cálculo do gradiente. Assista ao vídeo Mas o que *é* uma Rede Neural? Deep Learning, capítulo 1, no canal 3Blue1Brown Series no YouTube. Há a opção de legenda em português. Referências AMARAL, F. Introdução à Ciência de Dados: mineração de dados e big data. Rio de Janeiro: Alta Books, 2016. BENGIO, Y. Practical recommendations for gradient-based training of deep architectures. In: Neural networks: Tricks of the trade. Berlin: Springer, 2012. p. 437-478. ESCOVEDO, T.; KOSHIYAMA, A. Introdução a Data Science — Algoritmos de Machine Learning e métodos de análise. São Paulo: Casa do Código, 2020. GOODFELLOW, I.; BENGIO, Y.; COURVILLE, A. Deep learning. Cambridge: MIT Press, 2016. GOODFELLOW, I. J.; VINYALS, O.; SAXE, A. M. Qualitatively characterizing neural network optimization problems. Ithaca: Cornell University, 2014. Material para download Clique no botão abaixo para fazer o download do conteúdo completo em formato PDF. Download material O que você achou do conteúdo? javascript:CriaPDF() 14/02/2024, 19:43 Redes neurais feedforward https://stecine.azureedge.net/repositorio/00212ti/04163/index.html# 53/53 Relatar problema
Compartilhar