Baixe o app para aproveitar ainda mais
Prévia do material em texto
Fundamentos de Deep Learning André Luís Resende Monteiro 2022 2 Fundamentos de Deep Learning Bootcamp: Arquiteto(a) de Machine Learning André Luis Resende Monteiro © Copyright do Instituto de Gestão e Tecnologia da Informação. Todos os direitos reservados. 3 Sumário Capítulo 1. Introdução ao Deep Learning ............................................................... 5 Aprendizado de Máquina .......................................................................................... 5 Tipos de aprendizado ................................................................................................ 7 Aprendizado supervisionado ................................................................................. 7 Aprendizado não-supervisionado .......................................................................... 8 Aprendizado semi-supervisionado ......................................................................... 8 Aprendizado de Máquina e Deep Learning ................................................................ 9 Resumo ................................................................................................................... 11 Capítulo 2. Redes Neurais Artificiais ..................................................................... 12 Motivação ............................................................................................................... 12 Estrutura básica ....................................................................................................... 14 Neurônio artificial.................................................................................................... 16 Funcionamento básico ............................................................................................ 18 Resumo ................................................................................................................... 21 Capítulo 3. Modelos de Redes Neurais Artificiais .................................................. 23 Perceptron .............................................................................................................. 23 Rede Perceptron de Múltiplas Camadas (MLP) ........................................................ 26 Algoritmo de retropropagação ................................................................................ 31 O que é o algoritmo de retropropagação então? ................................................. 35 Resumo ................................................................................................................... 38 Capítulo 4. Aplicações de Redes Neurais Artificiais ............................................... 40 4 Reconhecimento de padrões e classificação de imagens ......................................... 40 Séries temporais ...................................................................................................... 42 Geração de conteúdo .............................................................................................. 44 Precificação dinâmica .............................................................................................. 46 Outras aplicações .................................................................................................... 47 Resumo ................................................................................................................... 49 Capítulo 5. Deep Learning .................................................................................... 51 Introdução ao deep learning.................................................................................... 51 Redes Neurais Convolucionais (CNN) ....................................................................... 53 Redes Neurais Recorrentes ...................................................................................... 56 Redes LSTM e GRU .................................................................................................. 58 Redes Neurais Recursivas ........................................................................................ 60 Redes GAN .............................................................................................................. 62 Overfitting (Sobreajuste) ......................................................................................... 64 Métodos de avaliação.............................................................................................. 67 Definição de hiperparâmetros da rede .................................................................... 69 Fine-tuning em redes neurais .................................................................................. 71 Resumo ................................................................................................................... 73 Referências……….. ....................................................................................................... 75 5 Capítulo 1. Introdução ao Deep Learning Neste capítulo, veremos o que é o aprendizado de máquina, como ele se relacionada com o Deep Learning e algumas das motivações pelas quais estudá-lo. Aprendizado de Máquina Para resolver qualquer problema computacional, é necessário o desenvolvimento de um algoritmo, que tem como objetivo receber um conjunto de dados de entrada e produzir uma determinada saída. Por exemplo, para ordenar um valor de números, podemos construir um algoritmo que receba como entrada um vetor aleatório e produza como saída o mesmo vetor com os seus elementos ordenados. Considere que queiramos construir um algoritmo que classifique um e-mail em duas categorias: spam ou não-spam. Ou seja, dada uma entrada de uma mensagem de e-mail, a saída produzida deverá ser a categorização daquela mensagem em sendo spam ou não sendo spam. Para um problema como esse, não é factível (ou mesmo possível) a criação de um algoritmo eficiente, uma vez que a definição de spam varia ao longo do tempo e é particular para cada usuário. Contudo, podemos utilizar dados anteriores para solucionar esse problema. É possível consolidar milhares de mensagens que se saiba previamente que se tratem ou não de spam, com o objetivo de ajudar na tomada de decisão da categorização. O que se procura nesse caso é um processo que aprenda com os dados anteriores e que consiga, através desses exemplos, definir o que categoriza uma mensagem como sendo spam. Em outras palavras, o que se espera é que a máquina desenvolva automaticamente um algoritmo para desempenhar essa tarefa. Com os avanços em hardware e a popularização de mecanismos de armazenamento, os dados gerados todos os dias possuem um volume gigantesco, 6 podendo ser acessados de diversas localidades geográficas através da Internet. Contudo, transformar esses dados em informações úteis para um negócio, de forma estratégica, continua sendo um desafio e objeto de estudo em diversas áreas da ciência da computação. Considere um outro exemplo: uma loja virtual, que comercializa centenas de itens por dia. A cada compra, os bancos de dados da empresa armazenam dados diversos, tais como a localidade e idade do comprador, a hora da transação e o caminho que o cliente fez até realizar a compra. Isso tipicamente gera um volume de vários gigabytes todos os meses. Enquanto esses dados estão apenas armazenados nos servidores da empresa, não possuem muita relevância, a não ser, por exemplo, contabilizar as compras e calcular a lucratividade do negócio. Contudo, será possível o desenvolvimento de um algoritmo que, baseado nesses dados anteriores, possa predizer quais os consumidores mais possíveis para um determinado item? Novamente, não há um algoritmo de fácil construção para esse problema. Assim como no exemplo das mensagens de spam, a solução varia com a localidade, com o tempo ou até mesmocom o tipo de produto comercializado. Procura-se nesse caso, portanto, uma solução que consiga automaticamente gerar um algoritmo que prediz corretamente (ou com a maior aproximação possível) os clientes mais aptos a comprar determinado tipo de item. A partir desse ponto, os dados da organização passam a ser mais bem aproveitados e tornam-se muito mais valiosos para a empresa. No exemplo anterior, talvez não seja possível identificar as relações entre os itens e consumidores de forma perfeita. Entretanto, o objetivo do aprendizado de máquina é a construção de modelos computacionais, a partir da identificação de padrões, que tenham uma aproximação boa e útil. O que é uma aproximação “boa” e “útil” irá variar dependendo do problema que iremos solucionar. 7 Tipos de aprendizado As tarefas que uma solução de aprendizado de máquina visa executar podem ser classificadas de acordo com a natureza do aprendizado desempenhado. Aprendizado supervisionado Em aprendizados do tipo supervisionado, há a presença de um conjunto de dados ou amostras como entrada, e para cada uma das entradas, também se conhece a sua saída. Considere novamente o problema de classificação de e-mails entre spam ou não-spam. Em uma solução de aprendizado do tipo supervisionada, vários e-mails previamente categorizados entre spam ou não-spam estariam disponíveis. Ou seja, para cada entrada (e-mail), se saberia previamente a sua saída correspondente (spam ou não- spam). O objetivo do aprendizado supervisionado é encontrar uma forma de relacionar os dados de entrada (e-mails) com as suas respectivas saídas (spam ou não-spam), de forma que, quando uma nova amostra é obtida, possa-se predizer a sua saída através da relação encontrada. A saída de cada amostra é conhecida como label, rótulo ou classe. Esse processo de aprendizagem funciona obtendo-se relações que mapeiem as entradas em saídas e verificando a sua corretude através da comparação com os dados previamente disponíveis. Problemas em que só se possui a presença de duas classes (spam ou não-spam, por exemplo) são tradicionalmente conhecidos como problemas binários. Contudo, várias classes podem existir em um cenário. Por exemplo, considere a tarefa de classificar os dados de um cachorro em uma raça específica, através de dados como peso, altura, idade, tamanho do focinho etc., a partir de um conjunto de amostras pré- 8 classificadas. Esse problema pode possuir várias classes possíveis, cada uma correspondendo a uma raça de cachorro presente no cenário analisado. Aprendizado não-supervisionado Em soluções de aprendizado do tipo não-supervisionado, há a presença de um conjunto de amostras de entrada, porém não se conhece as suas respectivas saídas ou classes. O objetivo nesses casos é encontrar regularidades ou relações entre as entradas, através da identificação de padrões que ocorrem mais em relação a outros. Como não se possui a presença das classes relativas a cada amostra, não é possível avaliar a solução em termos de acurácia. Um método muito utilizado de treinamento não-supervisionado é o que se conhece como clustering, ou agrupamento, em que o objetivo é agrupar os elementos em um conjunto de grupos, a partir da relação e semelhança entre eles. Considere novamente o exemplo de uma companhia que comercializa produtos on-line. Uma solução de agrupamento poderia ser utilizada para agrupar os clientes da companhia em determinados perfis de clientes, através da semelhança entre os seus hábitos de consumo e comportamento no site. Dessa forma, o setor de marketing da empresa poderia adotar estratégias de publicidade específicas para cada grupo, de forma a otimizar os recursos gastos e otimizar a conversão dos clientes. Aprendizado semi-supervisionado Em soluções de aprendizado do tipo semi-supervisionado, há a presença de um grande conjunto de amostras, porém apenas algumas são previamente mapeadas. É um meio termo entre os aprendizados supervisionado e não supervisionado. No mundo real, não são todos os problemas que se possui a facilidade de obter amostras previamente mapeadas, como o exemplo de classificação de e-mails como 9 spam ou não-spam. Muitas das vezes obter essas amostras pode ser custoso em termos de tempo ou custo. Considere, por exemplo, o problema de se classificar a imagem de um sapo entre as diversas espécies de sapos existentes. Mesmo se obtendo um conjunto grande de imagens de sapos (entrada), a classificação de cada imagem na sua respectiva classe (saída) demanda a presença de um especialista no domínio, o que torna o processo custoso em termos financeiros. Vários problemas de aprendizado de máquina acabam lidando com esse tipo de situação. Uma situação possível pode ser a utilização de soluções denominadas de active learning, ou aprendizado ativo, em que se busca selecionar as melhores amostras para serem categorizadas por um especialista no domínio, evitando a necessidade de todas as amostras serem mapeadas. Aprendizado de Máquina e Deep Learning O Deep Learning, ou aprendizagem profunda, é parte de um conjunto de métodos de aprendizado de máquina, que tem como objetivo, dentre outros propósitos, oferecer uma alternativa às soluções de aprendizado de máquina construídas de forma manual. O Deep Learning tem a sua origem nas Redes Neurais Artificiais (RNAs), a serem discutidas no próximo capítulo, que tiveram a utilização aumentada de forma acentuada com a popularização das unidades de processamento gráficas (GPUs), e a da disponibilidade de um grande conjunto de dados através da Internet. Várias soluções que utilizam Deep Learning já são conhecidas em diversos setores. É importante ressaltar que deep learning também é um tipo de aprendizado de máquina. Contudo, para facilitar o entendimento ao decorrer deste texto, chamaremos 10 de “aprendizado de máquina” aquelas soluções tradicionais de aprendizado, em detrimento ao deep learning. Vamos supor que você deva desenvolver uma solução que receba uma imagem e indique se ela se refere a um cachorro ou a um gato. Em uma solução de aprendizado de máquina tradicional, tipicamente iríamos definir manualmente características que distinguem essas duas classes (cachorros e gatos). Por exemplo, poderíamos utilizar o tamanho do focinho ou das orelhas para realizar essa diferenciação. Contudo, nessa abordagem, algumas questões começam a aparecer. Por exemplo, será que outra característica, que ainda não havíamos pensado, consiga diferenciar melhor essas duas classes (talvez a distância entre os olhos?). Soluções baseadas em Deep Learning possuem a vantagem de realizar a definição das melhores características que distinguem essas duas categorias de forma automática, podendo utilizar aspectos que não havíamos previsto. Outra característica de soluções baseadas em deep learning é que elas extraem as características de forma hierárquica. Por exemplo, uma solução desse tipo primeiramente poderia identificar bordas que diferenciam os dois animais, agrupar essas bordas para formar estruturas mais complexas e agregar todas essas informações para obter a resposta final. Se compararmos soluções tradicionais de aprendizado de máquina com Deep Learning, veremos que soluções tradicionais necessitam de menos dados históricos para operarem bem, porém a performance do Deep Learning com um conjunto grande de dados é maior. Em relação a hardware, deep learning necessita de maiores recursos para funcionar bem, devido ao seu funcionamento interno, que iremos abordar nos próximos capítulos. 11 Soluções tradicionais de deep learning necessitam de um especialista no domínio do problema para definir manualmente as características que serão utilizadas para realizar o processamento. Contudo, em alguns problemas (por exemplo, diferenciarvárias espécies de sapos ou identificar tumores em uma imagem médica), o especialista pode não estar disponível ou ser muito oneroso a sua utilização. Por fim, soluções baseadas em deep learning levam mais tempo para serem construídas (o que será abordado mais a frente como fase de treinamento). Além disso, apresentam a característica de serem fim-a-fim, ou seja, muitas vezes não é trivial entender as características que foram utilizadas para realizar a computação, já que muitas vezes só são significativas pelo computador. A inteligibilidade da solução, portanto, é menor que em soluções tradicionais. Resumo Neste capítulo, entendemos o que é o aprendizado de máquina. Vimos que são soluções que utilizam dados históricos para automaticamente conseguirem obter relações entre dados e desenvolver algoritmos. Diferenciamos também aprendizado supervisionado (em que há a presença de dados pré-categorizados), não supervisionado (onde não há anotações) e semi-supervisionado (em que apenas um subconjunto das amostras está categorizado). Por fim, entendemos a diferença entre soluções tradicionais de aprendizado de máquina e deep learning, chegando à conclusão de que deep learning obtém características do problema de forma automática, hierárquica, mas que é menos inteligível e que demanda maior capacidade computacional e dados para funcionar bem. 12 Capítulo 2. Redes Neurais Artificiais Neste capítulo, serão abordados os modelos computacionais que deram origem ao Deep Learning, conhecidos como Redes Neurais Artificiais (RNAs). Serão estudados o processo de evolução das RNAs e o seu funcionamento. Motivação As pesquisas com RNAs iniciaram-se através da constatação de que o cérebro humano era particularmente bom para determinar tarefas específicas particulares, como o reconhecimento de padrões. Por exemplo, considere a tarefa de identificação de dígitos escritos a mão. Apesar de o mesmo dígito, escrito por pessoas diferentes, tenha características distintas, como espessura e angulação, conforme exibido na Figura 1, o cérebro humano consegue de forma relativamente fácil distingui-los. Figura 1 – Exemplos de dígitos escritos a mão. Contudo, o mesmo não acontece com o computador digital convencional, que processa informações de uma forma diferente. Por exemplo, para os computadores, é fácil o processamento de multiplicações de números grandes, como 24 x 72, o que não é uma tarefa fácil para o cérebro humano. 13 Diante disso, a motivação para criar uma estrutura computacional que remetesse ao funcionamento do cérebro humano teve ao menos duas motivações principais: 1) Entendimento detalhado do cérebro humano: A partir da criação de modelos computacionais que simulassem o funcionamento do cérebro humano, seria possível entender melhor o seu próprio funcionamento, o que propiciaria avanços em pesquisas de diversas áreas, como a medicina, biologia e psiquiatria. 2) Automatização de tarefas: Através da criação de modelos computacionais que simulassem o funcionamento do cérebro humano, tarefas fáceis de serem executadas por humanos, como o reconhecimento de dígitos, poderiam ser realizadas também por computadores. Essa é uma motivação inerente da área da ciência da computação. Dessa forma, a primeira citação ao termo neuro computação remete a 1943, em artigos que sugeriam a criação de uma máquina inspirada na estrutura do cérebro humano. De fato, de forma geral uma rede neural artificial é uma máquina que é projetada para simular a forma com que o cérebro humano desempenha uma tarefa específica. Avanços na ideia de uma máquina que simulasse o funcionamento do cérebro humano foram acontecendo, até que, em 1975, a primeira rede neural artificial com várias camadas foi proposta. Contudo, devido à limitação de processamento disponível na época, as redes neurais levavam semanas ou meses para terminarem o seu processamento, o que tornava a sua utilização inviável. A partir do ano de 2009, devido sobretudo à popularização de processamento e facilidade de obtenção de GPUs (que conseguem paralelizar diversos cálculos executados pelas redes), as RNAs começaram a ser referência na área de inteligência 14 artificial, começando a vencer diversas competições de reconhecimento de padrões e aprendizado de máquina. Estrutura básica Uma RNA tem como objetivo funcionar de forma parecida com o funcionamento do cérebro humano. O cérebro humano consiste em um conjunto bastante denso de células nervosas interconectadas, responsáveis por processar informações, denominadas neurônios. De acordo com Shepherd (2003), o cérebro humano possui aproximadamente 10 milhões de neurônios e 60 trilhões de conexões entre eles, denominadas sinapses. Os sinais elétricos são propagados de um neurônio para os outros através de reações eletroquímicas pelas sinapses, e as suas intensidades podem ser alteradas, por exemplo, dependendo dos padrões que estejam sendo analisados. Isso leva ao fato de que a intensidade das conexões entre os neurônios varia, e inclusive novas conexões entre neurônios distintos podem ser formadas. O cérebro humano pode ser considerado um grande sistema complexo, não- linear e que realiza processamento paralelo. As informações são armazenadas e processadas simultaneamente por toda a rede neural cerebral. Além disso, possui a capacidade de aprender através das experiências, alterando a sua constituição de sinapses e neurônios. O processo de aprendizado é uma tarefa fundamental no cérebro humano, razão pela qual não é difícil concluir que o seu funcionamento atraiu interessados em estudá-lo para o desenvolvimento de soluções de aprendizado de máquina. Apesar de a aproximação das RNAs com o cérebro humano ser muito primitiva, seus resultados são animadores. As redes neurais artificias, assim como a rede neural 15 cerebral é capaz de aprender com experiências passadas e generalizar o seu aprendizado a outras amostras que ainda não haviam sido encontradas. A estrutura básica de uma RNA é exibida na Figura 2. Ela consiste em um conjunto de unidades de processamento, chamadas neurônios, e diversas ligações, responsáveis por transmitir informações de um neurônio a outro, a exemplo do que ocorre no cérebro humano. Cada ligação entre um par de neurônios tipicamente tem um peso, novamente inspirado no que acontece nas sinapses cerebrais. Cada neurônio pode receber uma ou mais informações de entrada de outros neurônios, porém produz apenas uma saída, apesar de ela poder ser conectada a vários outros neurônios. Cada neurônio nas RNAs é organizado no que se conhece como camadas. Uma camada é exibida como um conjunto de neurônios organizados na vertical. No exemplo da figura, existem três camadas: a primeira (rosa) é denominada camada de entrada, e é onde as informações começam a trafegar. A última camada (verde) é conhecida como camada de saída, e onde se localizam os neurônios que irão dar a resposta da rede. As camadas localizas entre as de entrada e saída são denominadas camadas ocultas (ou hidden), e é onde as informações são processadas até que sejam enviadas à camada de saída. Figura 2 – Estrutura básica de uma RNA. 16 Neurônio artificial A estrutura de um neurônio artificial é detalhada na Figura 3. Todos os neurônios da rede, com exceção dos neurônios da camada de entrada, recebem como entradas informações oriundas de outros neurônios (x1, x2 … xn) cada uma delas associada a um peso diferente (w1, w2 … wn). Figura 3 – Estrutura básica de uma RNA. O neurônio então agrega todos esses resultados através do somatório do valor de cada entrada multiplicado pelo seu respectivo peso. Um outro parâmetro, chamado bias, é somado ao valor final, e tem como objetivo funcionar ao modo de uma constante em uma função linear.O valor final do cálculo do neurônio é então dado por , em que b é o valor do bias. Contudo, antes de propagar o valor calculado para os próximos neurônios, o resultado passa por uma função denominada função de ativação. O seu objetivo é transformar a função linear presente nos neurônios em uma função não-linear, o que permite à rede modelar cenários cada vez mais complexos. Caso não fosse utilizada uma função de ativação não-linear, toda a RNA poderia ser resumida a uma única função linear. ∑ xiwi+b 17 Diversas funções de ativação diferentes tiveram seu funcionamento explorado em redes neurais artificiais. A primeira delas, proposta ainda na década de 1940, utiliza a função degrau como função de ativação. Após o neurônio calcular o valor das entradas e adicionar o bias, o resultado é comparado com um valor de limiar Θ. Caso o valor calculado seja menor que o limiar estabelecido, o resultado do neurônio é -1. Caso contrário, é 1. A função de ativação degrau é exibida na Figura 5, em que X é o valor calculado no neurônio. Esse modelo de neurônio é conhecido como neurônio MCP. Figura 4 – Função degrau. Outras funções de ativação bastante utilizadas são as funções sinal, sigmoid e linear, cujos comportamentos são exibidos na Figura 5. Figura 5 – Funções de ativação de um neurônio artificial. Y= {+1, se X≥ θ 0, se X<θ 18 A função sinal transforma o valor de entrada em um valor igual a -1 ou 1 e, assim como a função degrau, é utilizada para tarefas de classificação e reconhecimento de padrões. A função sigmoid transforma a entrada, independentemente do seu valor, em uma saída entre 0 e 1. A função linear provê uma saída igual à entrada e, como dito anteriormente, não agrega características não-lineares ao modelo, não sendo utilizada geralmente para a modelagem de cenários complexos. Funcionamento básico Abordaremos agora o funcionamento genérico de uma rede neural artificial (detalhes mais específicos de funcionamento serão abordados nos próximos capítulos). Considere, por exemplo, a tarefa de se reconhecer um dígito presente em uma imagem escrita à mão. De uma forma simplificada e ingênua (veremos uma forma mais otimizada adiante), cada pixel da imagem poderia ser lido e associado a um neurônio da camada de entrada. Essas informações então seriam propagadas aos neurônios das camadas ocultas, que executariam operações matemáticas sobre eles. Os resultados dessas operações seriam transmitidos aos neurônios da camada de saída, que agregariam o resultado e dariam uma resposta, indicando a qual dígito aquela imagem se refere. Esse tipo de rede em que não há ciclos, ou seja, a informação sempre percorre uma mesma direção, são chamadas de redes do tipo feedforward. O mecanismo de aprendizado de uma rede neural feedforward pode ser comparado por analogia ao mecanismo de aprendizado humano. Inicialmente, os pesos das ligações entre cada neurônio e seu bias podem ser iniciados de forma aleatória, quando ainda não se sabe sobre o domínio do problema que se está analisando. Para que a rede consiga ajustar os seus pesos em um aprendizado supervisionado, são necessárias amostras pré-classificadas, que formam o que se conhece como conjunto de treinamento. No exemplo dos dígitos escritos à mão, um conjunto de treinamento 19 seria formado por várias imagens de dígitos escritos à mão, previamente categorizadas (0, 1, 2, 3 … 9). A cada iteração da rede, as imagens do conjunto de treinamento são processadas, entrando pelos neurônios da camada de entrada, passando pelas camadas ocultas e chegando até à camada de saída. O resultado obtido no neurônio da camada de saída é então comparado com o resultado previamente categorizado daquela amostra (no caso do problema de dígitos escritos à mão, haveria 10 saídas possíveis no neurônio da camada de saída, correspondendo aos dígitos de 0 a 9). A função que calcula a diferença entre o resultado obtido pela rede para uma determinada amostra e o seu resultado previamente categorizado é chamada de função de perda. A função de perda é calculada para cada amostra no conjunto de treinamento. O ideal em uma rede é que a função de perda sempre se iguale a zero. Dessa forma, a predição que a rede estaria fazendo e a categorização real do objeto seriam iguais. Uma função de perda comumente utilizada é a função de perda 0-1, cuja fórmula é exibida na Figura 6. Figura 6 – Função de perda 0-1. Nessa função, o valor previamente categorizado da amostra (a) é subtraído do valor encontrado pela rede (a’). Caso o resultado seja maior que um limiar (Θ), a função assume o valor 1; caso contrário, assume o valor 0 (ou seja, não há perda). L= {1, se|a− a '|≥ θ 0, se|a− a '|<θ 20 Obviamente, a função 0-1 apenas retorna os valores 0 ou 1, indicando se houve ou não perda. Contudo, outras funções que retornam valores intermediários podem ser utilizadas, dependendo da aplicação que esteja sendo desenvolvida. A função que agrega os resultados individuais das funções de perda obtidas para amostra é denominada função de custo, e indica a perda total que se teve em relação às amostras do conjunto de treinamento. Uma função utilizada é a função erro quadrático médio, exibida na Figura 7. Essa função realiza a média das funções de custo de cada amostra (xi) elevadas ao quadrado. Figura 7 – Função erro médio quadrático. Após a função de custo ser calculada, o comportamento padrão da rede neural envolve a atualização dos pesos de cada neurônio, com o objetivo de que a função de custo seja minimizada. Esse processo é denominado treinamento da rede. Determinar quanto os pesos vão ser alterados depende do resultado final da função de custo (se foi alta ou baixa) e de um outro parâmetro definido na rede: a taxa de aprendizado. A taxa de aprendizado, essencialmente, diz respeito à velocidade com que a rede realiza o seu aprendizado. Contudo, nem sempre definir uma taxa de aprendizado alta é uma boa escolha. Suponha, por exemplo, que, na primeira passada, a rede tenha categorizado corretamente a primeira metade das amostras de dígitos escritos à mão, porém tenha errado a segunda metade delas. Se a taxa de aprendizado for muito alta, os pesos serão alterados de forma a categorizar corretamente a segunda metade das amostras, porém pode vir a errar a primeira metade, e nunca chegar a convergir a um resultado satisfatório. C= 1 N∑i= 1 N L(x i) 2 21 Contudo, caso a taxa de aprendizado seja baixa demais, a rede pode demorar muito a terminar a sua execução. A definição desse parâmetro é uma solução de compromisso que deve ser feita, procurando um valor que seja baixo o bastante para que a rede consiga convergir a um resultado útil, mas alto o bastante para que ela não leve meses ou mesmo anos para terminar de ser treinada. Geralmente, o treinamento da rede termina em duas situações: quando o resultado da função custo atingir um valor considerável, o que significa que a rede alcançou uma alta taxa de acerto; ou quando um número determinado de passadas por todas as mostras de treinamento tenha sido alcançada. Cada passada pela rede por todas as amostras de treinamento recebe o nome de época. Resumo Neste capítulo, foram abordados os seguintes tópicos: 1) A motivação a partir da qual foram criadas as redes neurais artificiais. As RNAs foram criadas através da constatação de que o cérebro humano era muito eficiente para a realização de determinadas tarefas específicas, como reconhecimento de padrões, atividades difíceis de serem executadas por um computador. Foi proposta então a criação de um modelo computacional que simulasse o funcionamento do cérebro humano, para que fosse possível desempenhar tarefas que o mesmo desempenha bem. Contudo, apesar de ser uma ideia da década de 1940, devido a restrições emrecursos computacionais as redes neurais não tiveram uma utilização plena. Seu maior emprego só começou a ser possível por volta de 2009, quando avanços na área de hardware tornaram processadores e GPUs mais fáceis de serem obtidos. 2) A estrutura básica de uma RNA é feita para simular a constituição do cérebro humano. Os neurônios são unidades de processamento que recebem informações, processam-nas e propagam-nas para outros neurônios. Eles estão divididos em camada, 22 sendo que a primeira camada é conhecida como camada de entrada, a última é chamada de camada de saída e as intermediárias são chamadas de camadas ocultas. Os neurônios possuem ligações com neurônios das camadas imediatamente anterior e posterior. 3) Um determinado neurônio recebe informações de vários neurônios da camada anterior. Cada uma dessas informações possui um peso diferente, assim como acontece no cérebro humano. A tarefa do neurônio é agregar essas informações, tipicamente através de um somatório ponderado pelo peso de cada ligação, e somando o resultado a um bias, um valor que tem o mesmo objetivo de uma constante em um função matemática. Antes de enviar o resultado obtido para os neurônios da camada posterior, uma função de ativação é aplicada sobre ele. O objetivo é verificar o quanto aquele valor obtido ativou a ligação entre os neurônios e os demais. Vimos também que o neurônio MCP utiliza a função degrau como função de ativação. 4) Uma rede do tipo feedforward é uma RNA que não possui ciclos entre os neurônios, e em que a informação propaga sempre em uma só direção. Os neurônios da camada de entrada são responsáveis por obter as informações de entrada e propagá- los para os neurônios da camada seguinte, que fazem os cálculos e utilizam a função de ativação até que o resultado chegue nos neurônios da camada de saída. Uma RNA em um problema de aprendizado supervisionado aprende com um determinado conjunto de treinamento, uma série de amostras cujo resultado já se conhece. O processo de treinamento da rede envolve processar as amostras do conjunto de treinamento e comparar o resultado obtido com o resultado previamente conhecido, através de uma função de perda. A função de custo é a agregação da função de perda de todas as amostras individuais. Por fim, a taxa de aprendizado determina qual a velocidade com que a RNA irá mudar o conhecimento que já adquiriu, sendo necessário um valor intermediário desse parâmetro, de forma que a rede consiga produzir um resultado útil, porém não leve muito tempo para terminar de ser treinada. 23 Capítulo 3. Modelos de Redes Neurais Artificiais Neste capítulo, abordaremos alguns modelos de redes neurais artificiais utilizados e o seu funcionamento. Perceptron Em 1957, Frank Rosenblatt propôs a criação do primeiro modelo de rede neural artificial que se tem conhecimento, chamado de Perceptron, e que utiliza o neurônio MCP na sua operação. O modelo possui uma configuração muito simples, com apenas um neurônio, que consiste em um combinador linear utilizando a função de ativação degrau. O esquema da rede Perceptron é exibida na Figura 8. A primeira entrada na figura representa o bias. Figura 8 – Estrutura da rede Perceptron. A rede Perceptron não possui camadas ocultas na sua configuração. Com uma configuração tão simples, ela funciona aos moldes de um classificador linear binário. Ou seja, tem como objetivo classificar uma amostra com m características (o mesmo número de entradas) em uma de duas classes. Cada classe é associada a uma saída possível da função de ativação degrau, 0 ou 1. 24 A rede Perceptron pode ser aplicada em problemas cujo objetivo é dividir o espaço n-dimensional através de um hiperplano com duas regiões. Para simplificação, considere o espaço dimensional de duas dimensões, ou . Nesse espaço, cada amostra possui apenas duas características, ou seja, o neurônio da rede irá receber apenas duas entradas, além do bias. O objetivo da rede Perceptron é dividir esse espaço em duas regiões, conforme mostrado na Figura 9. Por mais simples que possa parecer, a rede é capaz de aprender onde posicionar a linha, procurando encontrar a separação mais efetiva possível. Quando uma nova amostra chega para classificação na rede, basta posicioná-la em um dos lados da divisão. Figura 9 – Amostras dividias em duas regiões no . O mecanismo de aprendizagem da rede Perceptron também é simples. Inicialmente, os pesos de cada entrada são definidos de forma aleatória, com valores que podem ir de -0,5 a +0,5, e continuamente ajustados para que se obtenha uma saída consistente com as amostras de treinamento. O processo de atualização dos pesos da rede Perceptron funciona da seguinte maneira: em cada época, todas as amostras do conjunto de treinamento são processadas pela rede. Após o processamento de cada amostra, o seu valor de perda é • 2 • 2 25 calculado como sendo a diferença entre o resultado previamente classificado (Yd) e o resultado calculado pela rede (Y), conforme mostra a Figura 10, em que p é a amostra analisada. Figura 10 – Função de perda utilizada pelo Preceptron. Por exemplo, caso o valor previamente classificado (Yd) seja 1 e o valor calculado pela rede (Y) seja 0, o resultado da função de perda, ou erro, será 1. Caso o valor do erro seja positivo, isso significa que o valor previamente obtido é maior que o valor calculado, então é necessário aumentar o valor da saída do neurônio para que se busque igualar a 0; caso seja negativo, é necessário reduzir esse valor. Esse processo é alcançado através da aplicação da fórmula exibida na Figura 11, para todas as entradas do neurônio. Figura 11 – Fórmula de atualização de pesos do Preceptron. O que essa fórmula indica é que o valor de cada peso (wi) terá seu novo valor como sendo ele mesmo somado com a multiplicação de uma taxa de aprendizado (α), do valor da entrada associada àquele peso (xi) e do erro calculado para aquela amostra (e). O algoritmo de funcionamento da rede Precepton é mostrado a seguir. Passo 1: Inicialização. ‒ Inicie todos os pesos e os bias como um valor aleatório entre -0,5 e +0,5. Passo 2: Ativação. e ( p)= Y d( p)− Y ( p) w i(p+1)= wi( p)+α• xi( p)• e ( p) 26 ‒ Ative o neurônio através da entrada dos valores x1, x2 … xn para todas as amostras p = 1 … m. ‒ Calcule o resultado da medição (Y) com da utilização da função de ativação degrau através da fórmula onde n é o número de entradas no neurônio e degrau é a função de ativação grau. Passo 3: ‒ Atualize os pesos do neurônio através da fórmula Passo 4: Iteração. ‒ Passe para próxima época do algoritmo, repetindo a execução a partir do passo 2, até que um número determinado de épocas seja alcançado ou que o erro não ocorra mais. Rede Perceptron de Múltiplas Camadas (MLP) Devido à sua simplicidade, a rede neural artificial Preceptron possui algumas limitações. Por exemplo, considere a Figura 12, em que são representadas amostras de duas classes distintas: as coloridas de vermelho e as coloridas de azul. Não é possível desenhar uma reta que divida esse espaço em duas regiões distintas, separando as amostras azuis das amostras vermelhas. Dessa forma, visto que redes neurais Preceptron tradicionais apenas podem ser aproximadas a funções lineares, ela não seria efetiva para esse problema. Y ( p)= degrau [∑ i= 1 n xi( p)• wi( p)+bias] w i(p+1)= wi( p)+α• x i ( p)• e ( p) 27 Figura 12 – Amostras dividias em duas regiões no . Essa limitação, contudo, pode ser superada através da expansão da rede Preceptron tradicional, com a inclusão de camadas ocultas entre as camadas de entrada e a camada de saída. Com essas camadas intermediárias, modelos mais complexos podem ser construídos, como o mostrado acima.A esse modelo de redes neurais artificiais dá-se o nome de Rede Precepton de Múltiplas Camadas (MLP, do inglês Multiplayer Preceptron). As camadas ocultas possuem esse nome pois o resultado que os seus neurônios produzem tipicamente não podem ser observados analisando-se o comportamento padrão da rede, de entrada e de saída. Não há forma trivial de se saber qual o resultado esperado dos neurônios das camadas ocultas. Na época da criação das redes MLP, na década de 1980, eram comum a criação dessas redes com no máximo uma ou duas camadas ocultas, visto que à medida que o número de camadas aumentava, crescia-se também o número de neurônios e o número de conexões entre eles. Dessa forma, o processamento computacional necessário para o treinamento da rede ficava muito alto, o que inviabilizava a sua utilização. A Figura 13 mostra um exemplo de uma rede MLP com duas camadas ocultas. Nessa configuração, cada neurônio apresenta uma conexão com todos os • 2 28 neurônios das camadas imediatamente anterior e posterior. Uma rede que segue esse padrão de conexão é denominada rede totalmente conectada (do inglês, fully- connected). Figura 13 – Uma arquitetura MLP com duas camadas ocultas. Além da inclusão de camadas ocultas, é necessário alterar a função de ativação dos neurônios de forma a atender modelos não-lineares. Isso decorre do fato de que, independentemente do número de camadas ocultas de uma rede, caso suas funções de ativação sejam lineares, a topologia da rede pode ser reduzida algebricamente a uma rede simples, sem camadas ocultas. Duas das funções comumente utilizadas são a função hiperbólica, que mapeia a entrada para um valor distribuído entre -1 e 1, e a função logística, que mapeia a entrada para um valor distribuído entre 0 e 1. A curva gerada pelas duas funções são mostradas na Figura 14. 29 Figura 14 – Curvas das funções hiperbólica e logística. Com camadas ocultas, consequentemente, o número de neurônios, a conexão entre eles e o número de pesos da rede aumentou. Dessa forma, um tempo maior de treinamento é necessário para que a RNA tenha seu treinamento concluído. Além disso, como mencionado anteriormente, não é possível através de uma forma simples obter e interpretar os resultados intermediários de uma camada oculta. Teoricamente, a complexidade das informações capturadas pelas camadas ocultas deveria aumentar. Por exemplo, a primeira camada oculta de uma rede que detecte dígitos escritos à mão poderia capturar informações simples, como traços e bordas, enquanto as camadas subsequentes capturariam informações mais complexas, como um conjunto de bordas que formam um pedaço do dígito. Contudo, elas muitas vezes podem não fazer sentido quando interpretadas por um observador humano. A Figura 15 mostra uma imagem formada pelos pesos de um dos neurônios de uma camada oculta de uma RNA, especializada em reconhecer dígitos escritos à mão. 30 Figura 15 – Imagem formada pelos pesos de um neurônio de uma camada oculta. Com mais neurônios e consequentemente mais ligações e pesos, o mecanismo de aprendizado é mais complexo do que o da rede Perceptron simples, que precisou ser aprimorado. Para se ter uma ideia, suponha que na nossa rede especializada em reconhecer dígitos escritos à mão, cada pixel corresponda a um neurônio na camada de entrada. Considerando uma imagem de entrada de 28x28 pixels, apenas na camada de entrada teríamos um total de 784 neurônios. Considere ainda que a rede possui duas camadas ocultas, cada uma com 16 neurônios, além de 10 neurônios na camada de saída (cada um representando o quanto aquela imagem se parece com um dos 10 dígitos possíveis). A configuração da rede ficaria, portanto, da seguinte forma: Camada de entrada: 784 neurônios Camada oculta 1: 16 neurônios Camada oculta 2: 16 neurônios Camada de saída: 10 neurônios 31 Total de parâmetros (pesos e bias): 13.002 Como pode ser visto, o total de parâmetros da nossa rede agora é 13.002, muito superior à rede Perceptron simples que tínhamos anteriormente. Felizmente, um algoritmo eficiente para o ajuste de todos esses parâmetros está disponível, e é conhecido como retropropagação (ou back-propagation, do inglês). Algoritmo de retropropagação O algoritmo de retropropagação é o algoritmo mais utilizado para realizar a atualização dos parâmetros que formam uma rede neural de múltiplas camadas. Não entraremos em detalhes matemáticos neste material, pois essencialmente o que nos interessa é a intuição por trás do algoritmo e o seu funcionamento básico. Contudo, aqueles que quiserem realizar um aprofundamento no seu funcionamento, podem consultar as referências disponibilizadas neste material, especialmente em Hecht- Nielsen (1992). A versão moderna do algoritmo de retropropagação foi proposta em 1970, por Seppo Linnainmaa, um estudante de mestrado finlandês. Ele passou por diversas melhorias durante os anos, mas sua essência continua a mesma. A motivação para a utilização do algoritmo é simples: como todos os parâmetros (pesos e bias) de uma rede neural podem ser atualizados da forma mais efetiva e computacionalmente viável, de forma que a acurácia (ou taxa de acerto) da RNA continue aumentando? A solução mais simples possível para isso seria utilizar a força bruta: poderíamos gerar todas as combinações possíveis de parâmetros e testá- las. Contudo, para a nossa rede de reconhecimento de dígitos escritos à mão, com 13.002 parâmetros, isso produziria um total de combinações que deixaria a RNA testando durante séculos! 32 Uma solução melhor é utilizar o conceito matemático de vetor gradiente. O vetor gradiente é uma ferramenta matemática que indica a direção na qual se obtém o crescimento máximo do valor de uma função qualquer. Por exemplo, considere a função de uma parábola exibida na Figura 16. Neste gráfico, considere um ponto X = 2, com seu respectivo valor Y = 4. Existem duas formas possíveis de se alterar o valor de Y: aumentando ou reduzindo o valor de X. Uma dessas alterações (aumentar ou reduzir X) irá provocar o maior aumento no valor de Y. Obviamente, nesse caso, ao se aumentar o valor de X, o valor de Y também aumenta. O cálculo do vetor gradiente nessa situação iria indicar justamente um valor positivo, ou seja, teríamos que aumentar o valor de X para que Y também aumentasse, assim como foi possível constatar em uma simples checagem visual. Figura 16 – Função representando uma parábola. Contudo, nem sempre é possível fazer essa checagem de forma visual. Considere agora a função em três dimensões exibida na Figura 17. Não é possível, saber visualmente com certeza qual a direção que maior maximiza o resultado da função (ou seja, aumentar ou diminuir os valores de X e Y), independente do ponto em que se esteja localizado. Todavia, através do cálculo do vetor gradiente, essa constatação poderia ser feita de forma relativamente simples. 33 Figura 17 – Função em três dimensões complexa. O mesmo raciocínio pode ser aplicado para a função de custo utilizada na rede neural artificial. Considerando novamente a RNA utilizada para reconhecer dígitos a mão com 10 neurônios na camada de saída (um representando o quanto a imagem corresponde a cada dígito), caso uma imagem de um dígito 2 entre na rede, idealmente o que espera são os seguintes resultados na camada de saída: Neurônio Dígito 0: 0,0 Neurônio Dígito 1: 0,0 Neurônio Dígito 2: 1,0 Neurônio Dígito 3: 0,0 Neurônio Dígito 4: 0,0 Neurônio Dígito 5: 0,0 Neurônio Dígito 6: 0,0 Neurônio Dígito 7: 0,0 34 Neurônio Dígito 8: 0,0 Neurônio Dígito 9: 0,0 Ou seja, nessa situação a RNA teria categorizado essa imagem da forma esperada. O único neurônio ativado haveria sido o que indica que o dígito 2foi encontrado, enquanto todos os outros estariam zerados. Utilizando como função de custo a função de erro médio quadrático, poderíamos calcular o quanto a rede errou em categorizar essa imagem, através da fórmula presente na Figura 18, em que Ydi representa o resultado desejado como saída no neurônio i (0, 0, 1, 0, 0, 0, 0, 0, 0, 0) e Yi representa o resultado obtido. Quanto maior o valor da função de custo, pior foi o resultado da rede na categorização daquela amostra. Figura 18 – Função erro médio quadrático utilizada como função de custo da rede. O valor de Yi pode ser reescrito essencialmente em função dos pesos e bias dos neurônios anteriores, já que é assim que ele é calculado. Dessa forma, a função de custo descrita poderia ser reescrita utilizando apenas pesos, bias e funções de ativação. O importante a se notar é que essa função de custo é uma função qualquer, como as duas anteriormente exibidas. Portanto, pode-se calcular o vetor gradiente da forma tradicional e obter-se a direção em que a função de custo iria aumentar à medida que alterasse os seus parâmetros (os pesos e bias). Contudo, como o nosso objetivo é reduzir a função de custo (de forma que se aproxime de 0, e que a saída da rede seja igual à resposta encontrada), calcula-se o oposto do vetor gradiente, multiplicando-o por -1. Ou seja, o vetor obtido indicaria em que direção devemos alterar os pesos e bias de toda a rede para que caminhemos em C= 1 10∑i= 1 10 (Y di− Y i)2 35 direção a um erro 0. Devido a isso, esse gradiente também é chamado de gradiente descendente. Considere uma rede simples com 2 pesos e 1 bias. Um resultado possível do vetor gradiente descendente seria, por exemplo, [0,5 ; 50 ; -2,3]. Isso indicaria que à medida que aumentássemos o valor do primeiro e do segundo pesos (já que são positivos) estaríamos caminhando em direção a um erro menor. Da mesma forma, deveríamos reduzir o valor do terceiro parâmetro (o bias, por exemplo). É interessante notar que o gradiente não nos revela o quanto devemos reduzir ou aumentar de um parâmetro, mas sim a sua direção. Contudo, ele pode nos revelar quais os parâmetros são mais impactantes no cálculo final da função de custo. No exemplo anterior, o segundo parâmetro impacta 100 vezes mais a função de custo do que o primeiro parâmetro, visto que ele teve um resultado de 50 versus um resultado de 0,5. Outro ponto a ser ressaltado é que o cálculo do vetor gradiente descendente deve ser realizado para todas as imagens do nosso conjunto de treinamento, e então deve-se obter um vetor gradiente descendente médio. Contudo, como isso tornaria o processo computacionalmente inviável se tivermos muitas amostras no conjunto de treinamento, a abordagem conhecida como gradiente descendente estocástico é utilizada. Ao invés de calcular o vetor gradiente descendente para todas as imagens, o gradiente estocástico separa aleatoriamente o conjunto de treinamentos em subconjuntos, e então calcula o vetor gradiente descendente médio apenas para esse subconjunto (obviamente, os conjuntos vão sendo alternados a cada nova iteração da rede). O que é o algoritmo de retropropagação então? O algoritmo de retropropagação é um algoritmo que transforma a função de custo da rede em uma função utilizando pesos, bias e funções de ativação e utiliza a 36 técnica do gradiente descendente estocástico, realizando cálculos de derivadas, para encontrar a direção média (considerando um conjunto de amostras) em que cada parâmetro da rede (pesos e bias) deveria seguir (aumentar ou diminuir) para que a rede caminhe a uma taxa de erro próxima a 0. Depois disso, utiliza o parâmetro de taxa de aprendizado (normalmente um valor menor que 1) para transformar o valor médio do vetor do gradiente descendente e atualizar os parâmetros da rede. Lembre-se: a taxa de aprendizado é utilizada pois, caso um valor muito alto fosse usado para atualizar os pesos, a rede poderia nunca chegar a uma convergência. Outro ponto importante é que para utilizar o gradiente estocástico (que não é tão efetivo quanto o gradiente padrão, mas que garante uma boa aproximação e um grande ganho computacional), as imagens de cada subconjunto devem ser equilibradas. Por exemplo, o que aconteceria caso o algoritmo de retropropagação apenas utilizasse imagens do dígito 2 para a definição dos pesos? Provavelmente a rede seria especializada em reconhecer dígitos 2, e não funcionaria com os demais. O algoritmo de retropropagação segue os seguintes passos: Passo 1: Transforme a função de custo em uma função que utilize pesos, bias e funções de ativação. Passo 2: Separe o conjunto de treinamento aleatoriamente em subconjuntos, para utilização do gradiente estocástico. Passo 3: Selecione um subconjunto de treinamento e, para cada amostra, realize a sua predição na rede. Passo 4: Calcule a função de perda para cada amostra. Passo 5: Calcule o vetor gradiente descendente para cada amostra. 37 Passo 6: Calcule o vetor gradiente descendente médio, utilizando o vetor gradiente descendente de cada amostra. Passo 7: Utilizando a taxa de aprendizado da rede, atualize os pesos e bias. Passo 8: Repita o passo 3 até que a rede alcance uma boa taxa de acurácia ou um número máximo de repetições. O funcionamento da rede segue, portanto, basicamente em duas direções, conforme exibida nas Figuras 19 e 20. No primeiro passo, denominado forward, a rede prediz um conjunto de amostras de treinamento e avalia o seu resultado. No segundo passo, denominado retropropagação, a rede atualiza os pesos e bias, baseando-se no vetor gradiente descendente calculado. Figura 19 – Fase de forward de uma rede feed-forward, onde amostras são estimadas. 38 Figura 20 – Fase de retropropagação de uma rede feed-forward, onde pesos e bias são atualizados. Resumo Neste capítulo, foram abordados os seguintes tópicos: 1) O modelo Perceptron é o modelo mais simples de RNA, proposto em 1957. Ele não possui camadas ocultas e possui apenas um neurônio MCP. Funciona aos moldes um classificador linear binário, já que só consegue indicar dois resultados de saída e solucionar problemas que podem ser resolvidos com uma reta. O Perceptron implementa um algoritmo de atualização de pesos, alterando os valores dos parâmetros do neurônio para conseguir classificar corretamente todas as entradas. 2) O modelo Perceptron de Múltiplas Camadas (MCP) é uma solução para as limitações do Perceptron. Ela possui mais de um neurônio, distribuídos em mais de uma camada. No modelo MCP, foi introduzida a presença de camadas ocultas para aumentar o rol de problemas solucionáveis. Vimos também que as camadas ocultas capturam informações cada vez mais complexas, de forma hierárquica, mas que os seus resultados podem não ser inteligíveis para os seres-humanos. Além disso, a presença de mais 39 neurônios na rede pode tornar o processo de treinamento mais lento, e que um novo mecanismo de aprendizado foi necessário. 3) O algoritmo de retropropagação é um algoritmo utilizado para atualizar os parâmetros de uma rede MCP. Ele utiliza o conceito de gradiente matemático, que indica em qual direção obtém-se o maior crescimento de uma função. Ao se modelar a função de custo de uma rede como uma função, é possível utilizar o algoritmo de retropropagação para calcular a direção de atualização de cada parâmetro de forma que o erro de treinamento da rede aproxime-se de zero. O gradiente descendente estocástico é um método que otimiza o tempo de treinamento da rede, realizando o cálculo do gradiente para apenas um subconjunto das amostras. A rede MCP possui duas fases básicas: na fase de forward, as amostras são processadas e a função de custo é obtida. Na fase de retropropagação, os pesos são atualizados através da utilizaçãodo algoritmo de retropropagação. 40 Capítulo 4. Aplicações de Redes Neurais Artificiais Neste capítulo, abordaremos alguns cenários em que as redes neurais artificiais são utilizadas, nas mais variadas áreas e mercados. Reconhecimento de padrões e classificação de imagens Suponha que os objetos pertencentes às duas classes representadas na Figura 25 devam ser classificados. Já vimos até aqui que soluções baseadas em aprendizado de máquina utilizam as características em cada objeto para realizarem essa tarefa. Mais especificamente, as classes diferentes podem ser distinguidas a partir da distribuição dos dados dos objetos pertencentes a elas. É esse o objetivo do reconhecimento de padrões, identificar regularidades nos dados para explicar determinada distribuição. Contudo, nem todos os dados são tão simples quanto o representado na Figura. Dois e-mails a serem categorizados entre spam ou não-spam também possuem padrões, que são provavelmente definidos a partir dos textos que os constituem; um diagnóstico médico para definir se uma determinada pessoa apresenta um exame também procura pela existência de padrões; um sistema que busca por anomalias para identificar se uma máquina está prestes a falhar também procura por padrões. As redes neurais artificiais se configuram como uma forma de realizar o reconhecimento de padrões de uma maneira automática. 41 Figura 21 – Objetos a serem categorizados. Uma classe de dados bastante utilizada em soluções de redes neurais artificiais são as imagens. Elas também possuem distribuições de dados, definidas pela distribuição das intensidades dos pixels que as constituem. Uma tarefa que lida com o reconhecimento de padrões em imagens é a classificação, que tem como objetivo justamente diferenciar imagens de classes diferentes. Por exemplo, classificação de imagens é utilizada para automaticamente identificar se uma imagem deve ser censurada (por apresentar nudez ou qualquer característica não desejada). Observe que a tarefa nesse caso é classificar a imagem em duas classes possíveis (censurada ou não censurada). Esse cenário é especialmente útil em redes sociais ou em ferramentas de mídia colaborativas. RNAs também são utilizadas para realizar a classificação de imagens do ambiente urbano, com o objetivo, por exemplo, de mapear todas as árvores de uma determinada cidade (cada classe representa a espécie da árvore), ou de classificar cada região de um mapa obtido por radar ou drone em uma classe específica (construção, área urbana, vegetação etc.). Carros autônomos também utilizam classificação de imagens para classificar as placas de trânsito identificadas entre uma de várias classes possíveis. 42 Uma tarefa mais complexa dentro da classificação de imagens acontece quando o cenário que se está analisando é considerado de alta-granularidade. Nesses casos, as classes são muito similares entre si. Por exemplo, um cenário de alta-granularidade poderia ser classificar um pássaro nas subespécies de uma espécie qualquer. Outra tarefa relacionada à identificação de padrões em imagens é a detecção de objetos. Nesses problemas, não se espera classificar uma determinada imagem em uma classe. O que se quer é identificar se um determinado objeto está presente naquela cena ou não. Por exemplo, sistemas de biometria faciais podem utilizar a detecção de imagens para verificar se um rosto está presente na câmera do celular e autorizar o login do dono do dispositivo. Tarefas de detecção de imagens também podem ser utilizadas para localizar dentro de um vídeo uma pessoa que apresente um comportamento suspeito, para fins de vigilância. Note que, nesse caso, a tarefa consiste em detectar uma pessoa e logo depois classificá-la entre comportamento normal ou suspeito. Uma outra tarefa relacionada a imagens é a segmentação. Ela tem como objetivo particionar toda a imagem em vários segmentos, cada um representando um objeto. Por exemplo, uma tarefa de segmentação de imagens poderia ser responsável por, dada uma imagem de um mar, separar toda a imagem em água ou lixo. Séries temporais Analise a Figura 26. Ela é a representação de três distribuições de dados particulares (azul, vermelho e verde), conhecidas como séries temporais. As séries temporais podem ser definidas como uma série de observações, cada uma com um determinado valor, feitas ao longo do tempo. As séries temporais são particularmente úteis em vários cenários. Por exemplo, no mercado financeiro, as séries temporais são utilizadas para representar a variação do valor de uma ação ao longo do tempo. Em cenários de Internet das Coisas (IoT, do inglês 43 Internet of Things), séries temporais são utilizadas para representar a variação de um determinado comportamento de algum dispositivo, como por exemplo a temperatura de uma máquina industrial. No setor médico, séries temporais são utilizadas para representar o ritmo cardíaco de um paciente em um exame de eletrocardiograma. Figura 22 – Exemplos de séries temporais. Duas operações são particularmente bem utilizadas em séries temporais através de Redes Neurais Artificiais: a detecção de anomalias e a previsão. Na detecção de anomalias, o objetivo é encontrar padrões nas séries temporais que se diferenciam dos padrões usualmente presentes naqueles dados. Por exemplo, uma anomalia em uma série temporal que mostre o número de acessos a um servidor WEB pode indicar que aquele recurso está sendo alvo de algum tipo de ataque de negação de serviço. A detecção de anomalias em recursos computacionais, como memória disponível, pode indicar que há algum processo consumindo memória de forma não desejada. A detecção de problemas cardíacos pode ser utilizada identificando-se 44 anomalias em uma série temporal que represente o eletrocardiograma de um indivíduo. Por fim, no setor bancário, a detecção de anomalias também pode ser utilizada para identificar fraude em cartões de créditos de clientes. A outra operação realizada com séries temporais consiste na predição. Nessa categoria, o objetivo é conseguir estimar com o menor erro possível como a série temporal irá se comportar no instante de tempo seguinte. Também no mercado financeiro, predições de séries temporais vêm sendo bastante exploradas como forma de antecipar o movimento do mercado e conseguir maximizar os lucros com a compra e venda de ativos. No setor meteorológico, a previsão pode ser utilizada para prever a variação da temperatura de um determinado local. Um outro cenário que também explora bastante a predição de séries temporais é o industrial. Nesse caso, o objetivo é, por exemplo, antecipar o comportamento de um determinado equipamento ou máquina, de forma a realizar manutenções preditivas e otimizar o uso do recurso. Geração de conteúdo Olhe atentamente para a Figura 27. Ela mostra, na primeira coluna, uma imagem em preto e branco. Nas outras, versões coloridas da mesma figura. O detalhe é que a segunda e terceira imagem foram coloridas de forma artificial por uma solução utilizando Rede Neural Artificial. 45 Figura 23 – Figura colorida artificialmente. Esse exemplo ilustra uma outra aplicação das RNAs: geração de conteúdo. Nesses cenários, o objetivo é, de forma automática, realizar a geração de algum tipo de conteúdo, da forma mais parecida possível com a geração de um ser-humano. No caso da Figura, a geração do conteúdo foi a colorização da imagem, porém ele pode se apresentar de diversas outras maneiras. Soluções baseadas em RNAs podem ser utilizadas para a geração automática de imagens. No campo textual, podem gerar e-mails ou manchetes de notícias que aumentem a taxa de conversão, ou seja, os textos escolhidos são aqueles que fazem com que as pessoas mais acessem o recurso principal(abram o e-mail ou entrem no corpo da notícia). RNAs podem ser utilizadas inclusive para gerar frases ou até mesmo textos inteiros, imitando inclusive o estilo literário de um escritor específico. Outra solução que vêm crescendo em popularidade são os chamados chatbots. O objetivo aqui é, em serviços on-line de atendimento a clientes, o usuário interagir com um computador em vez de um ser-humano, que procura imitar o comportamento de um atendente real. Tais soluções diminuem os custos de uma organização e podem ser mais efetivas que um atendente humano. 46 No ramo musical, soluções de geração de conteúdo podem ser utilizadas para criar músicas de forma automática, de determinado estilo musical ou até mesmo buscando imitar o estilo de um compositor específico. Ainda no ramo artístico, as redes neurais já estão sendo utilizadas para acrescentar automaticamente sons a filmes mudos, por exemplo. Precificação dinâmica O que acontece com os preços de um hotel quando é alta temporada? Na maioria das vezes, os preços sobem. Isso se dá devido a demandas e fatores de mercado, como a alta procura por acomodações naquela época do ano. Um outro cenário com bastante demanda para utilização de RNAs é o de precificação dinâmica. Nessas aplicações, o objetivo é realizar de forma automática a adaptação de preços (por exemplo, itens de um e-commerce), baseados em fatores específicos de mercado, como a demanda, preços de competidores, preferência dos consumidores etc. Como vimos, todas essas variáveis podem ser utilizadas como entradas de uma rede neural artificial que pode dar como saída o preço ideal de um produto. Observe também que o histórico de preços de um produto pode ser modelado como uma série temporal, que representa todos os preços que ele já teve distribuídos ao longo do tempo. Nesse caso, uma solução possível poderia ser a predição do preço futuro de um produto. O importante a se ressaltar é que um passo fundamental para a utilização de RNAs em diferentes aplicações é o entendimento do cenário e a sua modelagem da melhor forma possível, para que então uma solução baseada em rede neural possa ser utilizada. 47 Outras aplicações Diversos outros cenários estão explorando a utilização de redes neurais artificiais. Em seguida, apresentamos alguns deles. Em Dahl et al. (2017), pesquisadores da equipe do Google Brain desenvolveram uma solução que é capaz de restaurar imagens que originalmente estavam em baixa qualidade. A Figura 28 apresenta alguns dos resultados obtidos. A primeira imagem representa a imagem original, a segunda a reconstrução realizada de forma automática e a última, a foto verdadeira. Essa aplicação pode ser utilizada, por exemplo, na área forense, na recuperação de vídeos ou fotos de baixa qualidade. Figura 24 – Resultado da restauração automática de imagens. Outra aplicação é a descrição automática de fotos. Nesse cenário, dada uma imagem a solução é capaz de descrever automaticamente, em linguagem natural, os elementos que a constituem. Ainda utilizando imagens, é possível realizar a tradução automática dos textos de uma imagem em uma determinada linguagem para outra, conforme mostra a Figura 29. 48 Figura 25 – RNA aplicada na tradução de textos em imagens. RNAs são utilizadas para realizar a classificação automática de imagens de mapas, categorizando cada pixel em uma determinada classe. Como já dito anteriormente, carros autônomos também exploram cada vez mais as redes neurais artificiais no seu funcionamento interno. Na área de prevenção de desastres, pesquisadores iniciaram a utilização de redes neurais para conseguir prever a ocorrência de terremotos e, em dezembro de 2017, a Nasa anunciou que, em parceria com o Google, descobriu um novo planeta através do processamento de um conjunto gigantesco de imagens utilizando redes neurais artificiais (https://www.nasa.gov/press-release/artificial-intelligence-nasa- data-used-to-discover-eighth-planet-circling-distant-star). Na área médica, RNAs podem ser utilizadas para identificar e segmentar automaticamente tumores cancerígenos em imagens de ressonância magnética, por exemplo. Outra aplicação consiste na previsão de doenças em determinados pacientes, levando em consideração seus resultados de exames, predisposições genéticas e outros fatores. No ramo do e-commerce, redes neurais podem ser utilizadas para recomendar os produtos que os clientes mais possuem probabilidade de adquirir. Outra tarefa nesse cenário é a conhecida como análise de sentimentos. Com a utilização de RNAs, é possível 49 automaticamente obter informações de como os clientes estão reagindo ao lançamento de um novo produto no mercado, através da análise dos seus comportamentos em redes sociais e fóruns de trocas de mensagens. Resumo Neste capítulo, foram abordados os seguintes tópicos: 1) O reconhecimento de padrões consiste na identificação das regularidades em uma distribuição de dados. Em imagens, o reconhecimento de padrões pode ser aplicado levando em consideração os pixels que as constituem. A classificação de imagens consiste na determinação de uma determinada classe para uma determinada figura. Na detecção de imagens, por outro lado, o objetivo é detectar a presença de um objeto em uma cena, sem necessariamente classificá-lo. Na segmentação de imagens, o objetivo é separar todos os objetos que constituem certa figura. 2) Outra aplicação de RNAs é em séries temporais. Séries temporais são uma série de observação feitas ao longo do tempo, aplicadas nos mais diversos contextos. Duas tarefas essenciais quando se trabalha com séries temporais são a detecção de anomalias e a predição. No primeiro caso, o objetivo é verificar se algum ponto da série temporal se mostra diferente da distribuição comum; na predição, o intuito é prever como uma série temporal específica irá se comportar no futuro. 3) RNAs também podem ser utilizadas para geração de conteúdo de forma automática. Esses conteúdos podem ser textos, músicas ou imagens, por exemplo. Na geração de conteúdo de textos, destaca-se os chatbots, que são soluções que visam imitar o comportamento de um atendente humano. 4) A precificação dinâmica também pode ser realizada por redes neurais. Utilizando fatores de mercado como sazonalidade, nível da procura e preços dos 50 concorrentes, o objetivo é definir o preço de um produto da forma mais otimizada possível. 5) Diversas outras aplicações de redes neurais também foram apresentadas, nos mais diversos setores e segmentos. 51 Capítulo 5. Deep Learning Neste capítulo, será abordado com mais detalhes o deep learning, o que o caracteriza, o que o diferencia das redes neurais artificiais tradicionais e os tipos de soluções que podem ser desenvolvidas. Introdução ao deep learning Como já foi abordado em capítulos anteriores, as redes neurais são estruturas computacionais desenvolvidas há bastante tempo. Contudo, elas deixaram de ser utilizadas maciçamente durante um grande período, principalmente por dois motivos. O primeiro é alto custo de hardware necessário para realizar o seu treinamento, principalmente à medida que o número de neurônios e camadas aumenta. O segundo é a grande necessidade de muitos dados de treinamento para que o seu treinamento seja eficaz. Contudo, em 2012, um grande acontecimento começou a mudar a forma como as redes neurais era utilizadas. Desde 2010, uma competição de classificação de imagens denominada ImageNet acontece. O objetivo é avaliar algoritmos de reconhecimento visuais, a partir da classificação de uma série de imagens em várias categorias pré- definidas. Até 2011, a taxa mínima de erro do vencedor do concurso era de 25%. Contudo, em 2012, uma solução conseguiu reduzir esse número para cercade 16%, uma queda bastante expressiva. O motivo para essa redução foi a utilização de uma nova estrutura de rede neural, que possuía 7 camadas ocultas, muito diferentes das outras tradicionalmente empregadas, que não possuíam mais do que 2 camadas ocultas. Para que o treinamento da rede fosse computacionalmente viável, essa nova rede foi otimizada para realizar a sua operação utilizando unidades de processamento gráficos (GRU). A rede recebeu o nome de AlexNet e marcou uma nova época nas pesquisas com redes neurais artificiais. 52 As redes neurais profundas (do inglês, deep), são caracterizadas então pela presença de mais de uma camada oculta, em detrimento às redes neurais rasas (shallow), que possuem no máximo uma. A grande vantagem das redes neurais profundas é que, como já foi visto, elas conseguem modelar cenários cada vez mais complexos e não-lineares, visto que a complexidade suportada aumenta à medida que o número de camadas ocultas também cresce. Outra propriedade das redes neurais profundas é que as características que elas obtêm vão sendo construídas de forma hierárquica, conforme mostra a Figura 30. Nesse exemplo, as características extraídas pela rede correspondem ao rosto de um ser humano. É possível notar que as primeiras características extraídas são simples, correspondendo basicamente a bordas verticais e horizontais. À medida que se avança nas camadas ocultas da rede, as características anteriores vão sendo agregadas de modo a formar estruturas cada vez mais complexas, até que se consiga obter a visualização de faces humanas. Figura 26 – Características de um rosto humano extraídas por redes profundas. Algumas pesquisas mostram que redes profundas apresentam resultados melhores do que redes com menos camadas ocultas e com o mesmo número de neurônios, o que indica a importância dessas camadas para essas soluções. 53 Para fins de ilustração, desde 2012, quando as redes profundas foram inicialmente utilizadas na competição ImageNet, as taxas de erro continuaram caindo, chegando ao valor de menos de 5% de erro, em 2017. Esse resultado indica que muitas vezes o deep learning pode obter resultados melhores do que um classificador humano. Outra característica das redes neurais profundas é que elas podem assumir diversas configurações, muitas delas diferentes da estrutura convencional de uma rede MLP. Essas configurações diferentes e as suas aplicações serão abordadas no decorrer deste capítulo. Redes Neurais Convolucionais (CNN) Vamos retornar ao nosso exemplo dos dígitos escritos à mão. A solução que nós apresentamos para solucionar este problema foi a associação de cada pixel da imagem a um neurônio na camada de entrada da RNA tradicional, que estavam por sua vez conectados a todos os neurônios da camada posterior e assim sucessivamente. Porém, essa abordagem traz um problema: à medida que o número de camadas aumenta, o número de parâmetros também, e a rede demora mais tempo para ser treinada. Além disso, se precisássemos processar imagens com uma resolução espacial muito alta, como a coletada por drones, esse processo poderia ficar inviável, mesmo com a utilização de GPUs. A solução, proposta em 1998, foi a utilização de uma arquitetura diferente de rede neural, especializada no processamento de imagens. Essas redes são baseadas em uma série de convoluções matemáticas, e, portanto, receberam o nome de redes neurais convolucionais (CNN). Ao invés da ligar pixels aos neurônios, a CNN trabalha de uma vez com um conjunto de pixels, em uma estrutura conhecida como campo receptivo, conforme mostra a Figura 31. Esse campo receptivo é uma espécie de janela deslizante, que se 54 inicia no começo da imagem e a percorre, cada vez capturando um conjunto de pixels diferente. Figura 27 – Campo receptivo de uma rede CNN. Cada campo receptivo coletado passa então por um processo de convolução. A convolução matemática com matrizes consiste em uma operação matemática em que os elementos de uma matriz são multiplicados pelos elementos de uma outra matriz (cada elemento é multiplicado pelo elemento correspondente da outra matriz) e as multiplicações são então somadas, conforme mostra a Figura 32. Figura 28 – Processo de convolução matemática. Nas redes CNN, os campos receptivos coletados da imagem são multiplicados por matrizes cujos valores são os parâmetros a serem definidos na rede. O resultado das convoluções dos campos receptivos de uma imagem produz uma outra matriz, menor que a original, conhecida como feature map (ou mapa de características). Com o objetivo de tornar as características das imagens invariantes à rotação e translação, após 55 cada camada convolucional, uma camada especial denominada camada de pooling é adicionada, reduzindo ainda mais o tamanho da imagem. A Figura 33 mostra o processo de uma operação de pooling, utilizando a função max. Nesse exemplo, valores vizinhos são agrupados em cores iguais, e a matriz resultante armazena o maior valor dos vizinhos de mesma cor. Figura 29 – Processo de pooling utilizando a função max. Geralmente, as redes CNN utilizam uma função de ativação conhecida como ReLU, exibida na Figura 34. Figura 30 – Função rectified linear unit (ReLU). 56 A ImageNet, comentada anteriormente, é um exemplo de rede neural convolucional, e sua arquitetura é exibida na Figura 35. As camadas convolucionais (5 no total) são exibidas com o prefixo “conv”. O número embaixo de cada camada representa as dimensões do campo receptivo que será aplicado. Tipicamente, após cada camada convolucional existe uma camada de pooling. No final da rede, três camadas totalmente conectadas (com 4096, 4096 e 1000 neurônios) funcionam aos moldes de uma RNA comum, em que todos os neurônios são conectados a todos os neurônios da camada posterior. Figura 31 – Arquitetura da rede AlexNet. Redes Neurais Recorrentes Uma outra arquitetura de rede profunda é aquela conhecida como rede neural recorrente. Essas redes são especialmente projetadas para realizar o processamento de informações que possuem uma sequência de acontecimentos e que o resultado em um determinado ponto do tempo depende dos resultados nos tempos anteriores. Por exemplo, redes neurais recorrentes são utilizadas para realizar o processamento de séries temporais, que foram estudadas anteriormente. Suponha que queiramos projetar uma rede para traduzir a palavra “Deep”. A tradução correta seria “profundo”. Contudo, caso o termo a ser traduzido passe a ser 57 “Deep Learning”, a tradução correta passa a ser “aprendizado profundo”. Perceba que a ordem dos termos traduzidos foi invertida, ou seja, a tradução de um termo depende dos termos anteriormente presentes em uma sentença. Esse tipo de processamento não possível de ser feita em redes do tipo feed-forward. Contudo, redes neurais recorrentes possuem uma espécie de memória, de forma que os resultados anteriores influenciam os próximos resultados. Uma representação usual das redes recorrentes é a exibida na Figura 36. Nessa rede, os neurônios, além de ligações com os neurônios posteriores, possuem ligação com eles mesmos, de forma que o cálculo de um neurônio em determinado passo possa servir de entrada para os cálculos nos passos seguintes. Figura 32 – Representação de uma rede neural recorrente. Outra representação comumente utilizada de redes recorrentes é a representada na Figura 37. Diz-se que essa representação é de uma rede neural recorrente expandida. Cada rede na parte da direita da figura indica um passo diferente (representados pela letra h), e cada entrada em um determinado passo é representado pela letra X. Essa representação mostra que o resultado de uma computação em um determinado passo é propagado para os passos
Compartilhar