Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

<p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 1/85</p><p>Redes Neurais Recorrentes</p><p>Prof. Sérgio Monteiro</p><p>false</p><p>Descrição</p><p>Conceitos sobre Redes Neurais Recorrentes – Recurrent Neural Network</p><p>(RNN): diferentes arquiteturas, aplicações para Processamento de</p><p>Linguagem Natural (PLN) e estudo de séries temporais.</p><p>Propósito</p><p>Compreender os conceitos das RNN é fundamental para profissionais</p><p>da área de ciência de dados por sua larga utilização no reconhecimento</p><p>de padrões em sequências de dados, como textos, números, genomas,</p><p>caligrafia, áudio e vídeo.</p><p>Preparação</p><p>É necessário criar uma conta no Google Colab para executar os</p><p>exemplos que foram desenvolvidos na linguagem Python.</p><p>Objetivos</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 2/85</p><p>Módulo 1</p><p>Fundamentos</p><p>Descrever fundamentos das RNN e suas aplicações.</p><p>Módulo 2</p><p>Arquiteturas</p><p>Distinguir as principais variações de arquiteturas de RNN.</p><p>Módulo 3</p><p>Aplicação em séries temporais</p><p>Empregar RNN em predição de séries temporais.</p><p>Módulo 4</p><p>Aplicação em Processamento de</p><p>Linguagem Natural</p><p>Empregar RNN em Processamento de Linguagem Natural.</p><p>Atualmente, temos à disposição tecnologias que nos ajudam a</p><p>fazer escolhas de produtos e serviços. Cada vez que acessamos</p><p>essas tecnologias, estamos consumindo e, ao mesmo tempo,</p><p>produzindo dados. Esses dados revelam muitas coisas sobre nosso</p><p>comportamento: o que pensamos sobre determinados assuntos,</p><p>quais são nossos interesses profissionais e de entretenimento e</p><p>quais são nossos anseios.</p><p>Introdução</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 3/85</p><p>1 - Fundamentos</p><p>Ao �nal deste módulo, você será capaz de descrever fundamentos</p><p>das RNN e suas aplicações.</p><p>Ligando os pontos</p><p>Você sabia que existem diferentes tipos de redes neurais de</p><p>aprendizado de máquina profundo? Sabia que algumas dessas redes</p><p>são aplicadas para problemas de predição? Para respondermos a estas</p><p>perguntas, vamos analisar algumas situações práticas.</p><p>A empresa Sentimentos Classificados S.A. atua no ramo de pesquisa de</p><p>mercado. Ela presta serviço para outras companhias com o objetivo de</p><p>Para processar tantos dados e conseguir extrair características que</p><p>nos permitam fazer generalizações, podemos utilizar métodos de</p><p>aprendizado de máquina. Entre os modelos disponíveis estão as</p><p>Redes Neurais Recorrentes – Recurrent Neural Network (RNN).</p><p>Essas redes possuem como principal característica trabalhar com</p><p>dados sequenciais, o que as torna muito interessantes para lidar</p><p>com Processamento de Linguagem Natural (PLN) e estudar séries</p><p>temporais. Ambos os assuntos têm diversas aplicações práticas e</p><p>métodos bem consolidados que nos permitem desenvolver</p><p>projetos com base em RNN.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 4/85</p><p>fazer um levantamento da opinião do público-alvo a respeito da</p><p>qualidade dos serviços e da força da marca dessas empresas.</p><p>A fonte de dados da Sentimentos Classificados está, principalmente,</p><p>nas redes sociais, onde segue a sequência de passos:</p><p>Identificar comentários sobre as empresas do seu portfólio de</p><p>clientes</p><p>Detectar se o comentário foi feito por uma pessoa ou um programa</p><p>Classificar o comentário como positivo, negativo, ou neutro</p><p>Até então, esse trabalho era feito por profissionais que utilizavam</p><p>ferramentas para auxiliá-los. No entanto, a empresa está tendo muitas</p><p>dificuldades de atender a demanda de seus clientes, além, é claro, não</p><p>tem nenhuma possibilidade de expandir os negócios dela no atual</p><p>cenário. Diante desse quadro, os gestores da empresa tiveram algumas</p><p>reuniões para reverter essa situação. Uma das ideias propostas foi a de</p><p>utilizar técnicas de aprendizado profundo no contexto do</p><p>processamento de linguagem natural. Em especial, foi dado destaque</p><p>para um modelo computacional chamado de Rede Neural Recorrente,</p><p>ou, como é mais conhecida, RNN. Isso porque esse modelo de rede é</p><p>aplicado com bastante sucesso exatamente para esse tipo de situação</p><p>que a Sentimentos Classificados atua.</p><p>A ideia teve uma boa recepção, mas não foi simples transformá-la em</p><p>realidade. Um dos principais problemas foi a carência de profissionais</p><p>que dominassem o conhecimento sobre as redes RNN. Em resumo, a</p><p>empresa traçou e executou um plano para qualificar seus profissionais,</p><p>além de fazer parcerias com algumas instituições de ensino para</p><p>acelerar o aprendizado e intensificar a colaboração. Hoje em dia, a</p><p>Sentimentos Classificados utiliza redes RNN nas suas soluções e está</p><p>obtendo excelentes resultados para seus clientes.</p><p>E você, concorda com a estratégia dos gestores da Sentimentos</p><p>Classificados S.A. para qualificar os colaboradores dela?</p><p>Após a leitura do case, é hora de aplicar seus conhecimentos! Vamos</p><p>ligar esses pontos?</p><p>Questão 1</p><p>A empresa Sentimentos Classificados S.A. utiliza as redes sociais</p><p>como uma fonte de dados para realizar análises. Analisando a</p><p>estratégia acima, qual o seu entendimento de como as redes RNNs</p><p>são úteis para auxiliar esse processo de análise?</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 5/85</p><p>Parabéns! A alternativa D está correta.</p><p>A Sentimentos Classificados S.A. observou duas coisas: primeira</p><p>delas é que as redes RNNs são excelentes para processamento de</p><p>linguagem natural; A segunda coisa é que elas não são simples de</p><p>serem usadas na prática. É necessário estudar bastante para</p><p>dominá-las e fazer com que apresentem resultados úteis.</p><p>Questão 2</p><p>O nome da empresa Sentimentos Classificados S.A. é bastante</p><p>curioso. Você relacionaria esse nome com as redes RNNs?</p><p>A As redes RNNs são adequadas para identificar os</p><p>perfis dos usuários das redes sociais.</p><p>B</p><p>A melhor forma de utilizar as redes RNNs são com</p><p>textos não estruturados como é o caso das redes</p><p>sociais.</p><p>C</p><p>As redes RNNs são a única opção de modelo</p><p>computacional para tratar processamento de</p><p>linguagem natural.</p><p>D</p><p>As redes RNNs são utilizadas com sucesso para</p><p>processamento de linguagem natural.</p><p>E</p><p>As redes RNNs são muito simples de serem</p><p>aplicadas para processamento de linguagem</p><p>natural.</p><p>A</p><p>Sim, pois chama a atenção do público para a</p><p>utilização de técnicas de inteligência artificial.</p><p>B</p><p>Sim, pois as redes RNNs podem ser úteis para</p><p>classificar qualquer coisa.</p><p>C</p><p>Sim, pois as redes RNNs são adequadas para</p><p>classificar quais sentimentos são refletidos em um</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 6/85</p><p>Parabéns! A alternativa C está correta.</p><p>O nome da empresa Sentimentos Classificados é devido ao fato de</p><p>que ela classifica um texto escrito em linguagem natural em</p><p>positivo, negativo ou neutro. E, para fazer isso, ela utiliza redes</p><p>RNNs que são adequadas para este tipo de situação.</p><p>Questão 3</p><p>Considere o seguinte cenário: os gestores da Sentimentos Classificados</p><p>S.A. desejam expandir sua área de atuação para classificar notícias de</p><p>redes sociais como falsas, ou verdadeiras. Você acha que faz sentido</p><p>utilizar uma rede RNN para esse tipo de aplicação?</p><p>Digite sua resposta aqui</p><p>Chave de resposta</p><p>Sim, pois o problema descrito na questão condiz exatamente a</p><p>uma aplicação de processamento de linguagem natural. O desafio</p><p>aqui é treinar a rede para ser capaz de aprender o que é uma</p><p>notícia falsa, ou verdadeira.</p><p>Redes neurais</p><p>texto.</p><p>D</p><p>Não, pois as redes RNN não são adequadas para</p><p>classificar sentimentos.</p><p>E</p><p>Não, pois o objetivo da empresa foi apenas fazer um</p><p>jogo com as palavras.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 7/85</p><p>As redes neurais artificiais são modelos computacionais baseados no</p><p>funcionamento das células neurais biológicas. Elas são aplicadas com</p><p>sucesso em diversos contextos relacionados ao reconhecimento</p><p>de equipamentos. Esse tipo de texto é bastante complexo,</p><p>pois tem significado técnico importante, que é compreendido apenas</p><p>pelas pessoas que atuam naquele contexto. Por exemplo, a expressão</p><p>“motor babando” significa que está ocorrendo um “vazamento de óleo</p><p>no motor”. Semelhante a esse exemplo, existem muitos outros que</p><p>possuem um significado importante e, quando traduzidos, geram a</p><p>oportunidade de produzir análises ricas que possibilitam descobrir</p><p>padrões de problemas recorrentes. Essa solução da Tradução S.A.</p><p>possui alto valor agregado, mas nem sempre foi, assim.</p><p>Até pouco tempo, a tradução dos textos era feita por especialistas. Na</p><p>prática, o processo era lento, subjetivo e caro. Era comum ocorrer</p><p>situações em que dois especialistas traduziam de forma diferente o</p><p>mesmo texto. Depois de perceber o problema, os gestores da Tradução</p><p>S.A. contrataram um professor universitário que trabalhava com</p><p>problemas semelhantes com finalidades acadêmicas. Esse professor</p><p>viu uma oportunidade muito interessante de usar seus conhecimentos</p><p>para resolver problemas reais. Tentou aplicar as técnicas que dominava,</p><p>mas não foi bem-sucedido de imediato. Ele chegou à conclusão de que</p><p>não era só uma questão de aplicar a melhor técnica, mas de</p><p>compreender o contexto da aplicação e fazer ajustes. Depois de mais</p><p>algumas tentativas e muito estudo, ele conseguiu desenvolver uma</p><p>solução robusta. O resultado de aplicar as RNNs para fazer a tradução</p><p>de textos coloquiais para termos técnicos superou a expectativa inicial</p><p>dos gestores da empresa e, assim, passaram a utilizar essas redes nas</p><p>suas soluções e o professor, agora, faz parte do quadro permanente da</p><p>empresa, ocupando um papel de destaque na área de pesquisa e</p><p>desenvolvimento aplicados.</p><p>E você, consegue visualizar outras aplicações para redes RNN</p><p>relacionadas ao processamento de linguagem natural?</p><p>Após a leitura do case, é hora de aplicar seus conhecimentos! Vamos</p><p>ligar esses pontos?</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 66/85</p><p>Questão 1</p><p>Como você leu no texto, o fundador da Tradução S.A. utilizava</p><p>outras soluções para realizar o tratamento de textos em linguagem</p><p>livre antes de utilizar as redes RNN. Na sua opinião, o que motivou</p><p>essa mudança?</p><p>Parabéns! A alternativa E está correta.</p><p>A solução que a Tradução S.A. utilizava antes das RNNs envolvia</p><p>especialistas no assunto. Isso tinha vários problemas, desde</p><p>encontrar esses especialistas, até mesmo na subjetividade das</p><p>opiniões deles que, em alguns momentos, eram conflitantes. A</p><p>utilização das redes RNN auxiliou na padronização e aumento de</p><p>escala do processo de tradução da empresa.</p><p>Questão 2</p><p>Em dado momento, os gestores da Tradução S.A. perceberam a</p><p>necessidade de modificar o processo de tratamento dos textos e</p><p>contrataram um professor universitário para auxiliá-los nesse</p><p>processo. Na sua análise, o que teria levado os gestores a tomar</p><p>essa decisão?</p><p>A</p><p>A utilização das redes RNNs foi uma decisão de</p><p>publicidade da empresa.</p><p>B</p><p>Devido a simplicidade de aplicar redes RNN para</p><p>tratar esse tipo de problema.</p><p>C</p><p>É muito simples encontrar profissionais que sabem</p><p>trabalhar com redes RNN.</p><p>D</p><p>O processo de aplicar redes RNNs não exigiu</p><p>nenhum tipo de esforço inicial.</p><p>E</p><p>A solução anterior era subjetiva e difícil de ser</p><p>obtida.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 67/85</p><p>Parabéns! A alternativa B está correta.</p><p>Está claro que a motivação dos gestores da Tradução S.A. foi a</p><p>necessidade de melhorar a solução que tinham, pois, além de cara</p><p>era subjetiva. Eles contrataram um professor universitário porque</p><p>entenderam que não se tratava de uma mera questão de trocar uma</p><p>solução por outra e, mesmo não sendo especialista no tratamento</p><p>de texto em linguagem livre voltado para manutenção, o professor</p><p>possuía conhecimento e metodologia de estudo suficientes para</p><p>aprofundar no assunto e desenvolver uma nova solução, como o</p><p>que aconteceu na prática.</p><p>Questão 3</p><p>Considere o seguinte cenário: você tem uma entrevista de emprego na</p><p>Tradução S.A. e deseja causar uma boa impressão, pois está muito</p><p>interessado em aprender como utilizar redes RNNs para tratar textos em</p><p>linguagem natural na prática. Com base em sua experiência, como você</p><p>se prepararia para essa entrevista?</p><p>A</p><p>Porque, em termos de custo, faz mais sentido</p><p>contratar um profissional para desenvolver uma</p><p>solução com RNN do que adquirir uma solução</p><p>pronta do mercado.</p><p>B</p><p>Por entender o potencial de agregação de valor e a</p><p>complexidade das redes RNNs.</p><p>C Porque foi a oportunidade que surgiu no momento.</p><p>D</p><p>Pela vasta experiência do professor em utilizar as</p><p>redes RNNs para fazer tradução de texto em</p><p>linguagem livre aplicado para manutenção.</p><p>E</p><p>Devido às claras oportunidades e processo</p><p>determinístico de utilizar redes RNNs para</p><p>tratamento de texto em linguagem natural.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 68/85</p><p>Digite sua resposta aqui</p><p>Chave de resposta</p><p>A primeira coisa a ser feita é aprender sobre a história da empresa,</p><p>sua filosofia de trabalho, área de atuação e perfis dos clientes.</p><p>Junto com isso, aprofundar o conhecimento nos conceitos de</p><p>redes RNNs e suas aplicações voltadas para tratamento de</p><p>linguagem natural, além de estudar bibliotecas computacionais</p><p>que disponibilizem funções para trabalhar especificamente com</p><p>redes RNNs. Feito esse dever de casa, preparar-se para a</p><p>entrevista e demonstrar interesse, de forma que seja viável para a</p><p>empresa fazer a sua contratação.</p><p>Aplicação de RNN para PLN</p><p>O Processamento de Linguagem Natural (PLN) consiste em um</p><p>conjunto de técnicas para tratamento automático de fala e texto. Alguns</p><p>exemplos de PLN são a análise de sentimentos, a tradução de texto e a</p><p>composição literária. Os problemas de PLN envolvem dados</p><p>sequenciais.</p><p>Como já estudamos até aqui, as RNN tratam exatamente esse tipo de</p><p>problema (SUSTSKEVER; VINYALS; LE, 2014). O primeiro passo para que</p><p>as RNN possam trabalhar com PLN é aplicarmos algumas técnicas de</p><p>transformações, pois essas redes neurais precisam de uma estrutura</p><p>matemática para trabalhar. Algumas dessas técnicas mais conhecidas</p><p>são:</p><p>Processo de separar um texto em palavras. Por exemplo,</p><p>considere o seguinte texto:</p><p>x ='o futebol é o esporte mais conhecido do país'</p><p>Tokenização </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 69/85</p><p>Sua tokenização por espaços é:</p><p>x_t =['o','futebol','é','o','esporte','mais','conhecido','do','país' ]</p><p>Forma de obter o radical de palavra base por meio da remoção</p><p>de prefixos e sufixos. Alguns exemplos de Stemming são:</p><p>Stemming(rapidamente) = rapida</p><p>Stemming(previsto) = visto</p><p>Remove apenas as desinências flexionais das palavras. É muito</p><p>útil para fazermos buscas sem a necessidade de nos</p><p>preocuparmos com as diversas flexões que uma palavra pode</p><p>ter. Alguns exemplos de lematização são:</p><p>Lematização(sabia, soube, saberei) = saber</p><p>Lematização(carro, carrinho, carrão) = carro</p><p>Nesta abordagem, as palavras recebem valores +1 ou -1 para</p><p>indicar uma interpretação semântica oposta. Ela é bastante útil</p><p>na análise de sentimentos. A seguir, apresentamos um exemplo</p><p>dessa técnica:</p><p>Tabela: Mapeamento entre palavras e sentimentos.</p><p>Elaborada por: Sérgio Monteiro.</p><p>Stemming </p><p>Lematização </p><p>Geração de listas polarizadas </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 70/85</p><p>Hot code e vetores de</p><p>palavras</p><p>Agora, vamos abordar duas técnicas que merecem uma atenção</p><p>especial: hot code e vetores de palavras. Essas técnicas são úteis para</p><p>transformar palavras em números, o que é um pré-requisito para</p><p>podermos aplicar RNN para PLN.</p><p>Hot code</p><p>A ideia é associar as palavras a números. Para isso, existem duas</p><p>abordagens. São elas:</p><p>Codi�cação única</p><p>Também conhecida</p><p>como</p><p>one-hot encoder.</p><p>Ela cria um vetor de</p><p>zeros do comprimento</p><p>do vocabulário para</p><p>cada palavra distinta no</p><p>texto e com o número 1</p><p>no índice que</p><p>corresponde à palavra.</p><p>Codi�cação com</p><p>número</p><p>É uma variação da</p><p>codificação única, em</p><p>que cada palavra é</p><p>associada a um número</p><p>natural.</p><p>Exemplo</p><p>Seja o texto: x = “gato cachorro leão golfinho”. A codificação das</p><p>palavras do texto é:</p><p>Na codificação única:</p><p>codificação_única(gato) = [1 0 0 0]</p><p>codificação_única(cachorro) = [0 1 0 0]</p><p>codificação_única(leão) = [0 0 1 0]</p><p>codificação_única(golfinho) = [0 0 0 1]</p><p>Na codificação com número:</p><p>codificação_número(gato) = 1</p><p>codificação_número(cachorro) = 2</p><p>codificação_número (leão) = 3</p><p></p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 71/85</p><p>codificação_número (golfinho) = 4</p><p>Vetores de palavras</p><p>Na técnica anterior, o vetor que representava o vocabulário (conjunto de</p><p>palavras) tinha muitos zeros. É o que chamamos de vetor esparso. Além</p><p>disso, os valores associados às palavras não traziam nenhuma</p><p>informação sobre o contexto em que elas apareciam.</p><p>Na técnica de vetores de palavras – mais conhecida pelo termo inglês</p><p>word embedding –, cada palavra é representada por um vetor de</p><p>tamanho fixo – que não depende do tamanho do vocabulário. Os valores</p><p>são obtidos por meio de uma rede neural que leva em consideração o</p><p>contexto em que as palavras estão relacionadas. A primeira camada da</p><p>rede RNN para trabalhar com PLN é a de embedding. A imagem a seguir</p><p>apresenta um exemplo:</p><p>Visão simplificada de RNN para análise de sentimentos.</p><p>Implementação de RNN</p><p>para PLN</p><p>Vamos apresentar o código de RNN para PLN. Esse exemplo é voltado</p><p>para a análise de sentimentos. Para fins didáticos, nossa</p><p>implementação é dividida nos seguintes passos:</p><p>1. Carga da base de dados;</p><p>2. Compreensão dos dados;</p><p>3. Separação dos dados;</p><p>4. Arquitetura do modelo RNN;</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 72/85</p><p>5. Compilação e treinamento do modelo;</p><p>6. Avaliação do modelo;</p><p>7. Uso do modelo para predições.</p><p>Estudaremos cada passo a seguir.</p><p>Passo 1: carga da base de dados</p><p>O TensorFlow disponibiliza algumas bases de dados que facilitam o</p><p>trabalho de testes do modelo. No caso, vamos fazer a importação dos</p><p>dados da Internet Movie Database (IMDB) por meio da biblioteca</p><p>tensorflow_datasets.</p><p>Para iniciar o projeto, temos de importar as bibliotecas do TensorFlow e</p><p>carregar os dados da IMDB, como no código a seguir:</p><p>Internet Movie Database (IMDB)</p><p>Base de textos com comentários sobre filmes.</p><p>Python </p><p>Os dados da IMDB já estão em um formato que facilita o trabalho com o</p><p>TensorFlow.</p><p>Passo 2: compreensão dos dados</p><p>Os dados já estão disponíveis na variável dataset. A variável info tem</p><p>informações sobre esses dados. Então, vamos codificar o programa</p><p>para ver informações sobre os dados que acabamos de importar.</p><p>Apresentamos o código a seguir:</p><p>Python </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 73/85</p><p>A saída da execução do código traz informações sobre o nome da base</p><p>de dados, qual o tamanho do vocabulário (palavras distintas), quantos</p><p>registros estão na base e como os dados estão separados para</p><p>treinamento e testes.</p><p>Passo 3: separação dos dados</p><p>Chegou o momento de realizar a separação dos dados. Como fizemos a</p><p>importação a partir do próprio TensorFlow, essa tarefa é bem simples.</p><p>Basta acessarmos a variável dataset e selecionarmos os índices 'train' e</p><p>'test'. No código a seguir, mostramos como fazer a separação do</p><p>conjunto de dados para treinamento e teste:</p><p>Python </p><p>Agora, vamos manipular os dados para aumentar a aleatoriedade em</p><p>que eles aparecem na base. Além disso, precisamos fazer um</p><p>preenchimento dos dados para que as sequências tenham o mesmo</p><p>comprimento. O código para essa finalidade é dado por:</p><p>Python </p><p>Com a função shuffle, fizemos o embaralhamento dos dados do</p><p>conjunto de treinamento e limitamos o comprimento das sequências</p><p>com a função padded_batch.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 74/85</p><p>Passo 4: arquitetura do modelo</p><p>RNN</p><p>Nosso próximo passo é construir a arquitetura de nossas RNN para</p><p>PLN. De início, precisamos carregar os pacotes responsáveis pelas</p><p>camadas da rede, pela função de erro (ou função de perda) e algoritmo</p><p>de otimização, conforme podemos ver a seguir:</p><p>Python </p><p>Aqui, a parte intrínseca das RNN são as camadas Bidirectional e LSTM.</p><p>A camada Embedding vai ser utilizada para transformar os dados de</p><p>entrada em vetores densos (não esparsos) de tamanho fixo.</p><p>Agora, fazemos a criação do modelo com as camadas devidamente</p><p>configuradas: basicamente, uma camada de codificação, duas camadas</p><p>LSTM envoltas em camadas bidirecionais, duas camadas densas e uma</p><p>camada de exclusão (YALÇIN, 2021, p. 177):</p><p>Python </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 75/85</p><p>Para vermos a arquitetura do modelo, implementamos o código a seguir:</p><p>Python </p><p>Dessa forma, podemos visualizar a arquitetura de nosso modelo:</p><p>Arquitetura do modelo.</p><p>O TensorFlow oferece uma maneira bastante interessante de visualizar</p><p>as RNN. Apresentamos o código a seguir de como fazer essa</p><p>visualização:</p><p>Python </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 76/85</p><p>Passo 5: compilação e</p><p>treinamento do modelo</p><p>Depois de criar o modelo, precisamos escolher a função de perda, o</p><p>algoritmo de otimização e a métrica para medir a qualidade do</p><p>aprendizado que ocorre durante o treinamento. Para isso,</p><p>implementamos o seguinte código:</p><p>Python </p><p>O próximo passo é treinar o modelo. Basta chamarmos a função fit do</p><p>objeto model e passarmos os parâmetros de treinamento, conforme</p><p>podemos ver no código a seguir:</p><p>Python </p><p>Também podemos visualizar o comportamento da função de erro para</p><p>os dados de treinamento e de validação com o seguinte código:</p><p>Python </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 77/85</p><p>Esse código produz como saída o gráfico a seguir:</p><p>Gráfico: Comportamento da função de erro durante o treinamento.</p><p>Elaborado por: Sérgio Monteiro / Plataforma on-line Google Colab.</p><p>Passo 6: avaliação do modelo</p><p>Nosso modelo já foi treinado. Então, precisamos verificar a qualidade do</p><p>treinamento. Para isso, utilizamos a função evaluate e medimos o erro e</p><p>a acurácia. A qualidade do treinamento será considerada melhor quando</p><p>o erro ou a perda for mais próximo de zero, e a acurácia, mais próxima</p><p>de 1, o que significa que o modelo está mais próximo do alvo.</p><p>Apresentamos aqui o código para avaliar o modelo:</p><p>Python </p><p>A seguir, podemos ver o resultado da execução do código:</p><p>Teste de Perda</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 78/85</p><p>0.3297092616558075</p><p>Teste de Acurácia</p><p>0.8688799738883972</p><p>Passo 7: uso do modelo para</p><p>predições</p><p>Finalmente, podemos usar nosso modelo para fazer predições. Antes de</p><p>chamar a função para realizar a análise de sentimentos, precisamos</p><p>fazer um tratamento nos dados de entrada, da mesma forma que</p><p>tivemos de fazer para enviar os dados ao processo de treinamento.</p><p>Então, faremos o preenchimento de um texto com zeros sempre que for</p><p>necessário por meio da seguinte função:</p><p>Python </p><p>Também precisamos codificar numericamente o texto de entrada,</p><p>conforme a função:</p><p>Python </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 79/85</p><p>Por fim, vamos verificar como nosso modelo funciona, na prática, para</p><p>fazer análises de sentimentos. Vamos escrever um comentário para</p><p>fazer a classificação:</p><p>Python </p><p>Agora, chamamos a função predict, que recebe como parâmetro o</p><p>comentário devidamente</p><p>ajustado e codificado numericamente.</p><p>Podemos ver, a seguir, o código da classificação de uma entrada:</p><p>Python </p><p>Enfim, temos o resultado da classificação:</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 80/85</p><p>Classificação de sentimentos.</p><p>Para classificar um comentário como positivo, o valor do modelo deve</p><p>ser maior do que 0.5. Caso contrário, ele é classificado como negativo.</p><p>No nosso exemplo, o comentário teve uma avaliação positiva.</p><p>Processamento de</p><p>linguagem natural com</p><p>RNN</p><p>Está na hora de nosso bate-papo sobre os conceitos que relacionam</p><p>RNN e processamento de linguagem natural, demonstrando uma</p><p>aplicação prática usando o framework TensorFlow. Vamos lá!</p><p>Falta pouco para atingir seus objetivos.</p><p>Vamos praticar alguns conceitos?</p><p>Questão 1</p><p>O PLN tem muitas aplicações práticas, como na tradução de texto.</p><p>Assinale a alternativa correta a respeito da aplicação de RNN para</p><p>PLN:</p><p></p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 81/85</p><p>Parabéns! A alternativa A está correta.</p><p>Aplicações de PLN envolvem dados sequenciais. Por isso, são</p><p>exemplos de aplicações adequadas para serem tratadas com RNN.</p><p>No entanto, é necessário que as palavras passem por um processo</p><p>de transformação, de modo que sejam transformadas em números,</p><p>o que é um pré-requisito para a aplicação de RNN.</p><p>Questão 2</p><p>As RNN podem ser aplicadas para PLN. Um dos frameworks mais</p><p>importantes para esse tipo de desenvolvimento é o TensorFlow. A</p><p>respeito da utilização desse framework, assinale a alternativa</p><p>correta:</p><p>A</p><p>Uma das preocupações do desenvolvedor de uma</p><p>aplicação de RNN para PLN é a transformação das</p><p>sentenças em números.</p><p>B</p><p>As palavras precisam passar pelo processo de</p><p>Stemming explicitamente antes que possam ser</p><p>processadas pelas RNN.</p><p>C</p><p>As RNN podem ser aplicadas para PLN, pois são um</p><p>exemplo de dados sequenciais. Portanto, as</p><p>palavras devem ser passadas sem nenhum tipo de</p><p>transformação para as RNN.</p><p>D</p><p>Uma das técnicas para transformação de palavras é</p><p>a lematização, que consiste na separação das</p><p>palavras dentro de um texto.</p><p>E</p><p>As aplicações de PLN são complexas, pois</p><p>envolvem a interpretação de um texto. Portanto, o</p><p>uso de RNN é bastante limitado para PLN.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 82/85</p><p>Parabéns! A alternativa D está correta.</p><p>O TensorFlow é um framework utilizado para aplicações de</p><p>aprendizado de máquina. Para construir RNN, ele oferece pacotes</p><p>sobre o modelo (tensorflow.keras.models) e sobre as camadas</p><p>(tensorflow.keras.layers), o que facilita bastante o processo de</p><p>implementação. Antes de enviar os dados para a rede, é necessário</p><p>que eles sejam transformados em números. Isso é feito facilmente</p><p>pela camada Embedding.</p><p>Considerações �nais</p><p>Ao longo do conteúdo, abordamos os conceitos relacionados às RNN. A</p><p>principal característica desse tipo de rede neural é trabalhar com dados</p><p>A Após o treinamento das RNN para PLN, devemos</p><p>fazer a avaliação do modelo com os dados de</p><p>treinamento.</p><p>B</p><p>Uma das imposições do TensorFlow para o</p><p>desenvolvedor é a utilização da camada de Dropout</p><p>para aumentar a taxa de aprendizado da rede.</p><p>C</p><p>Antes de os dados de treinamento de PLN serem</p><p>enviados para a rede, eles precisam ser</p><p>normalizados.</p><p>D</p><p>Antes de os dados serem enviados para as RNN,</p><p>eles precisam ser tratados pela camada Embedding,</p><p>que faz a transformação de palavras em números.</p><p>E</p><p>Devido à subjetividade da interpretação de um texto,</p><p>não é possível medir a acurácia de um modelo.</p><p>Portanto, é necessário fazer a interpretação de cada</p><p>predição do modelo.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 83/85</p><p>sequenciais. Podemos encontrar muitas aplicações que envolvem esse</p><p>tipo de dados, como séries temporais e PLN.</p><p>A arquitetura das RNN envolve a combinação de elementos estruturais,</p><p>chamados portas, que decidem quais informações devem ser enviadas</p><p>para a rede e quais devem ser esquecidas. Algumas variações</p><p>importantes de RNN são as redes LSTM, GRU e bidirecionais.</p><p>Ao final, fizemos a implementação de projetos de aplicações de séries</p><p>temporais e PLN, utilizando a linguagem de programação Python e o</p><p>framework TensorFlow.</p><p>Há muito o que estudar para dominar as RNN, mas é um fato que as</p><p>demandas acadêmicas e de mercado por esse assunto têm crescido e</p><p>que compensam os esforços envolvidos nesse estudo.</p><p>Podcast</p><p>Para encerrar, saiba mais sobre redes neurais recorrentes e suas</p><p>aplicações práticas.</p><p></p><p>Explore +</p><p>Pesquise o site oficial do pacote Tutoriais - TensorFlow e navegue pelos</p><p>conteúdos disponíveis para textos (embedding de palavras) e dados</p><p>estruturados (previsão de série temporal).</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 84/85</p><p>Referências</p><p>BAHDANAU, D.; CHO, K.; BENGIO, Y. Neural machine translation by</p><p>jointly learning to align and translate. San Diego: ICLR, 2015.</p><p>BENGIO, Y.; SIMARD, P.; FRASCONI, P. Learning long-term dependencies</p><p>with gradient descent is difficult. IEEE Transactions on Neural Networks,</p><p>v. 5, n. 2, p. 157-166, mar. 1994.</p><p>SOCHER, R. et al. Recursive deep models for semantic compositionality</p><p>over a sentiment treebank. In: CONFERENCE ON EMPIRICAL METHODS</p><p>IN NATURAL LANGUAGE PROCESSING, 2013, Seattle. Proceedings […].</p><p>Seattle: Association for Computational Linguistics, p. 1631-1642, 2013.</p><p>SUSTSKEVER, I.; VINYALS, O.; LE, Q. V. Sequence to sequence learning</p><p>with neural networks. In: INTERNATIONAL CONFERENCE ON NEURAL</p><p>INFORMATION PROCESSING SYSTEMS, 27, 2014, Montreal. Proceedings</p><p>[…]. Montreal: NIPS'14, v. 2, p. 3104-3112, 2014.</p><p>YALÇIN, O. G. Applied Neural Networks with TensorFlow 2: API oriented</p><p>deep learning with Python. California: Apress, 2021.</p><p>YU, Y. et al. A review of Recurrent Neural Networks: LSTM cells and</p><p>network architectures. Neural Computation, v. 31, n. 7, p. 1235-1270,</p><p>2019.</p><p>Material para download</p><p>Clique no botão abaixo para fazer o download do</p><p>conteúdo completo em formato PDF.</p><p>Download material</p><p>javascript:CriaPDF()</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 85/85</p><p>O que você achou do conteúdo?</p><p>Relatar problema</p><p>de</p><p>padrões. Entre as evoluções das redes neurais estão as Redes Neurais</p><p>Recorrentes – Recurrent Neural Network (RNN).</p><p>Rede Neural Recorrente.</p><p>As RNN são modelos de aprendizado profundo que se caracterizam por</p><p>usar dados sequenciais ou dados de séries temporais. Entre as</p><p>aplicações em que são utilizadas estão:</p><p></p><p>Processamento de Linguagem</p><p>Natural (PLN)</p><p>Fazem a tradução entre idiomas, reconhecimento de voz e legenda de</p><p>imagens.</p><p></p><p>Estimativa de valores</p><p>Obtêm o provável próximo valor de uma série temporal a partir da</p><p>análise do histórico.</p><p>Atenção!</p><p>Semelhantemente ao que ocorre com outros tipos de redes neurais</p><p>artificiais, as RNN também passam por algoritmos de treinamento, em</p><p>que extraem características dos dados para fazer generalizações.</p><p>Conceitos essenciais</p><p>As RNN têm muitos conceitos que precisamos conhecer antes de</p><p>estudarmos as particularidades de suas arquiteturas. Como veremos, os</p><p>termos das redes neurais são bastante referenciados pelos termos</p><p>originais em inglês. É importante sabermos disso, pois nos ajuda no uso</p><p>de pacotes computacionais para fazermos implementações. Aqui,</p><p>vamos apresentar alguns deles de forma resumida:</p><p>Características (Features) </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 8/85</p><p>Itens que se destacam nos dados de treinamento e que são</p><p>usados para que a rede aprenda. Em muitos textos, são</p><p>chamados de “recursos”.</p><p>Conjuntos de dados que são fornecidos para treinar as RNN. São</p><p>formados por pares de entrada e saída. A ideia é que o modelo</p><p>faça associação entre as características de uma entrada com</p><p>determinada saída.</p><p>Saídas do modelo, também referenciadas como dados nominais.</p><p>Conjunto de nós conectados entre si em uma rede neural. O</p><p>modo como as camadas são estruturadas caracteriza as</p><p>arquiteturas dos modelos.</p><p>Representação formal da rede neural.</p><p>Todos os nós em uma camada são conectados a cada nó na</p><p>camada anterior.</p><p>Exemplos </p><p>Rótulos (Label) </p><p>Camada (Layer) </p><p>Modelo (Model) </p><p>Camada densa e totalmente conectada </p><p>Pesos sinápticos e vieses (Biases) </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 9/85</p><p>Variáveis internas do modelo. São essas variáveis que queremos</p><p>otimizar, pois é por meio delas que aplicamos nosso modelo, a</p><p>fim de resolver os problemas para os quais foi projetado.</p><p>Diferença entre a saída desejada e a saída real. Também é</p><p>referenciada como função de erro e função de custo.</p><p>Tipo de função de perda que considera um pequeno número de</p><p>grandes discrepâncias como pior do que um grande número de</p><p>pequenas discrepâncias.</p><p>Utilizado para ajustar as variáveis internas do modelo, visando</p><p>minimizar a função de perda. O método calcula o gradiente da</p><p>função de custo associada a cada peso</p><p>e obtém o vetor gradiente,</p><p>, usando a seguinte equação:</p><p>Em que η corresponde ao parâmetro de taxa de aprendizagem.</p><p>Implementação específica do algoritmo de descida de gradiente.</p><p>Existem vários algoritmos que podem ser utilizados para isso,</p><p>Função de perda (loss) </p><p>Erro Quadrático Médio – Mean Squared Error (MSE) </p><p>Algoritmo de descida do gradiente (Gradient descent) </p><p>(wk)</p><p>ΔJ (wk)</p><p>wk+1 = wk − ηΔJ (wk)</p><p>Otimizador </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 10/85</p><p>como ADAptive with Momentum (ADAM).</p><p>Valor usado para ajustar os pesos sinápticos durante a execução</p><p>do algoritmo de descida do gradiente.</p><p>Conjunto de exemplos usados durante o treinamento da rede</p><p>neural.</p><p>Passagem completa sobre todo o conjunto de dados de</p><p>treinamento.</p><p>Cálculo dos valores de saída a partir da camada de entrada.</p><p>Corresponde à primeira fase do algoritmo de treinamento</p><p>backpropagation.</p><p>Fase de ajustes das variáveis internas do modelo, de acordo com</p><p>o algoritmo do otimizador. O fluxo de execução começa da</p><p>camada de saída e vai até a camada de entrada.</p><p>Funções de ativação</p><p>Este tipo de função é usado para ativar um neurônio por meio de um</p><p>sinal. A ideia, basicamente, é que um neurônio receba um valor,</p><p>calculado pela combinação da multiplicação dos pesos com suas</p><p>Taxa de aprendizagem </p><p>Lote (Batch) </p><p>Época (Epoch) </p><p>Passo para frente (Forward pass) </p><p>Passo de volta (Backward pass) </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 11/85</p><p>respectivas entradas e seus vieses, e o utilize como entrada para uma</p><p>função de ativação. Conheça as principais funções de ativação a seguir.</p><p>Função sigmoide ou logística</p><p>Sua fórmula e derivada são dadas por:</p><p>Função tangente hiperbólica</p><p>Sua fórmula e derivada são dadas por:</p><p>Função ReLU</p><p>Sua fórmula e derivada são dadas por:</p><p>σ(z) =</p><p>1</p><p>1 + e−z</p><p>σ′(z) = σ(z)(1 − σ(z))</p><p>tanh(z) = 2σ(2z) − 1</p><p>tanh′(z) = 1 − tanh2(z)</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 12/85</p><p>Softmax</p><p>É uma função que fornece probabilidades para cada classe de saída</p><p>possível. Ela é usada no final de uma rede neural. Sua fórmula é dada</p><p>por:</p><p>Em que:</p><p>i-ésimo resultado da função Softmax.</p><p>Resultado para o i-ésimo neurônio de saída.</p><p>ReLU(s) = max{0, s}</p><p>ReLU′(s) = {1,  se x ≥ 0</p><p>0,  caso contrário</p><p>pi =</p><p>ezi</p><p>∑n</p><p>j=1 ezj</p><p>pi</p><p>zi</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 13/85</p><p>Quantidade de neurônios de saída.</p><p>Aspectos intrínsecos</p><p>Nas redes neurais profundas tradicionais, as entradas e saídas são</p><p>consideradas independentes entre si. No caso das RNN, as informações</p><p>de entradas anteriores são usadas para influenciar a entrada e a saída</p><p>atuais, ou seja, a saída delas depende dos elementos anteriores da</p><p>sequência.</p><p>Exemplo</p><p>Quando queremos expressar que apreciamos um filme, podemos usar</p><p>uma frase do tipo: “O filme foi muito legal!”. Mas se disséssemos “Legal</p><p>muito foi o filme!”, apesar de termos aplicado exatamente as mesmas</p><p>palavras, a frase não faria sentido, pois a ordem das palavras é</p><p>importante para que a ideia fique clara. Esse exemplo ilustra como as</p><p>RNN consideram a posição de cada palavra na frase e usam essa</p><p>informação para prever a próxima palavra na sequência.</p><p>Outro fato em relação às características que distinguem as RNN de</p><p>outros modelos de redes neurais é a forma como o fluxo das</p><p>informações é processado. Veja dois exemplos de outros modelos:</p><p>FNN</p><p>Quando uma rede neural processa as informações em uma única</p><p>direção, que vai da camada de entrada para a camada de saída, ela é</p><p>chamada de feedforward (Feedforward Neural Network - FNN), também</p><p>conhecida como rede sem realimentação e, ainda, rede direta ou</p><p>alimentação avante.</p><p>CNN</p><p>As Redes Neurais Convolucionais (Convolutional Neural Networks - CNN)</p><p>extraem características dos objetos de forma automática e adaptativa</p><p>usando camadas em estruturas de hierarquias espaciais e são</p><p>aplicadas, principalmente, em visão computacional e reconhecimento de</p><p>imagens.</p><p>n</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 14/85</p><p>No caso das RNN, as camadas podem ser organizadas para processar</p><p>informações em duas direções. Elas usam estruturas de laços para</p><p>obter informações ao longo do processo computacional, as quais são</p><p>usadas para enviar informações de volta à rede. Isso conecta as</p><p>entradas e permite que as RNN processem dados sequenciais e</p><p>temporais (BENGIO; SIMARD; FRASCONI, 1994). Na imagem a seguir,</p><p>apresentamos o esquema conceitual de RNN:</p><p>Esquema básico de RNN.</p><p>No esquema, temos:</p><p>U = peso da camada oculta;</p><p>V = peso da camada de saída;</p><p>W = peso da camada de estado oculta;</p><p>= vetor de entrada no instante t;</p><p>= estado oculto no instante t, calculado como</p><p>, em que representa a função de ativação.</p><p>No caso das RNN, as funções de ativação mais comuns são sigmoide e</p><p>ReLU;</p><p>= vetor de saída no instante t, calculado como .</p><p>Processo de aprendizado</p><p>Para que as RNN possam ser aplicadas</p><p>para resolver problemas</p><p>práticos, elas precisam passar por um processo de aprendizado</p><p>parecido com o que ocorre com outras redes neurais tradicionais. As</p><p>redes neurais tradicionais são treinadas por meio do algoritmo</p><p>backpropagation, que atualiza os pesos sinápticos entre os neurônios,</p><p>de modo a extrair características (features) dos dados de treinamento,</p><p>usadas para fazer generalizações.</p><p>Como vimos, as RNN usam as entradas atuais e consideram as que</p><p>ocorreram antes delas para obter suas saídas. Isso representa uma</p><p>relação de dependência da saída atual com a entrada atual e das</p><p>xt</p><p>st</p><p>st = f(Uxt + Wst − 1) f</p><p>ot ot = f(V st)</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 15/85</p><p>entradas anteriores, o que chamamos de “memória”. As RNN são</p><p>treinadas, principalmente, pelo algoritmo BPTT, que tem o mesmo</p><p>princípio de funcionamento do backpropagation: treinar o modelo a</p><p>partir do cálculo dos erros de sua camada de saída para sua camada de</p><p>entrada. Esse cálculo nos permite ajustar os parâmetros do modelo de</p><p>forma adequada. Como as RNN compartilham seus parâmetros em</p><p>cada camada, o BPTT soma os erros em cada etapa de tempo, enquanto</p><p>as redes feedforward não precisam somar os erros, pois não</p><p>compartilham parâmetros entre suas camadas.</p><p>Nuvem de palavras.</p><p>BPTT</p><p>Backpropagation Through Time ou Retropropagação ao Longo do Tempo.</p><p>Devido às características das RNN, existem dois problemas que podem</p><p>ocorrer no processo de treinamento, devido à dependência das</p><p>camadas: dissipação do gradiente e explosão do gradiente. Felizmente,</p><p>existem soluções para esses problemas.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 16/85</p><p>Dissipação do gradiente (Vanishing</p><p>gradient)</p><p>Quando este problema ocorre, o modelo não aprende nada. Nessa</p><p>situação, o gradiente se torna muito pequeno. Isso significa que a</p><p>mudança dos pesos é insignificante para minimizar a função de erro. As</p><p>soluções para esse problema são:</p><p>Atribuir pesos iniciais</p><p>Para evitar que o algoritmo de treinamento atribua valores muito</p><p>pequenos para os pesos.</p><p>Aplicar o modelo indicado</p><p>Algumas redes neurais que já são estruturadas para evitar esse tipo de</p><p>problema – a mais importante é a LSMT.</p><p>LSTM</p><p>Long Short-Term Memory Networks ou Unidades de Memória Longa de</p><p>Curto Prazo</p><p>Explosão do gradiente</p><p>Nesta situação, ocorre exatamente o contrário em relação ao caso da</p><p>dissipação: o gradiente cresce excessivamente, e o modelo nunca</p><p>converge. As soluções para esse problema são:</p><p>Parar de retropropagar após determinada quantidade de iterações;</p><p>Penalizar ou reduzir artificialmente o gradiente;</p><p>Impor um limite máximo em um gradiente – técnica chamada de</p><p>“recorte de gradiente”.</p><p>Aplicações</p><p>As RNN são aplicadas em contextos em que os dados são sequenciais,</p><p>como nos casos de problemas de predição de séries temporais e</p><p>processamento de linguagem natural (SOCHER et al., 2013; BAHDANAU;</p><p>CHO; BENGIO, 2015).</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 17/85</p><p>Vamos apresentar alguns exemplos que nos ajudarão a visualizar casos</p><p>de sucesso de aplicações de RNN e como podemos adaptá-las para</p><p>outras situações.</p><p>Modelagem de linguagem e</p><p>geração de texto</p><p>Quando assistimos a algum filme ou lemos alguma história e</p><p>observamos os diálogos dos personagens, em muitos casos, podemos</p><p>ter uma boa noção do que eles vão falar em seguida. Isso ocorre porque</p><p>fazemos analogias com outras situações que já observamos e</p><p>conseguimos capturar características que nos ajudam a fazer</p><p>generalizações. De forma semelhante ocorre com as RNN.</p><p>As RNN recebem uma sequência de palavras</p><p>como entrada e, em seguida, tentam</p><p>predizer a possibilidade da próxima palavra.</p><p>No contexto de tradução de idiomas, essa abordagem é bastante</p><p>interessante, pois a frase mais provável tem mais chances de ser a</p><p>correta.</p><p>Máquina de tradução</p><p>No exemplo de aplicação anterior, estávamos interessados em predizer</p><p>a próxima palavra. Agora, nosso interesse é entender como as RNN</p><p>podem ser usadas para traduzir texto de um idioma para outro.</p><p>Se você já usou uma ferramenta para tradução de idiomas, é bastante</p><p>provável que tenha sido com RNN, pois muitos sistemas de tradução</p><p>aplicam alguma versão desse tipo de rede neural. Basicamente, essas</p><p>aplicações recebem como entrada um texto com o idioma de origem e</p><p>produzem um texto traduzido para o idioma de destino que o usuário</p><p>solicitou.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 18/85</p><p>Um dos grandes exemplos de programas de tradução que utiliza RNN é o Google Translate.</p><p>Reconhecimento de fala</p><p>Reconhecimento de fala.</p><p>Uma aplicação bastante interessante de RNN é o reconhecimento de</p><p>fala. Para isso, é necessário que as RNN recebam ondas sonoras como</p><p>fonte de entrada para predizer segmentos fonéticos.</p><p>E como podemos fornecer esses dados como entrada para o modelo?</p><p>Por meio do processamento das ondas sonoras, com a transformação</p><p>em sequências numéricas, que podem ser trabalhadas pela rede. A rede</p><p>RNN calculará os fonemas e, na sequência, gerará um segmento</p><p>fonético.</p><p>Gerando descrições de imagens</p><p>Este problema consiste em descrever o que está ocorrendo dentro de</p><p>uma imagem. Vamos ver um exemplo para entender melhor:</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 19/85</p><p>Pessoas correndo.</p><p>O que podemos interpretar da foto que estamos vendo?</p><p>Algumas pessoas estão participando de uma competição de corrida em</p><p>um dia claro. Se olharmos com mais cuidado, poderemos encontrar</p><p>mais características que informam melhor sobre o que está</p><p>acontecendo. Essas descrições das imagens podem ser obtidas com</p><p>uma combinação de CNN e RNN.</p><p>As redes CNN são um tipo de rede neural utilizado para problemas que</p><p>envolvem visão computacional. Então, o processo tem duas etapas:</p><p></p><p>CNN</p><p>Fazem a segmentação.</p><p></p><p>RNN</p><p>Usam os dados</p><p>segmentados para</p><p>recriar a descrição.</p><p>Tag de vídeo</p><p>Outra situação muito útil para aplicação de RNN é fazer pesquisa de</p><p>vídeo: fornecemos como entrada para o modelo uma descrição da</p><p>imagem de um vídeo, e a rede retorna o quadro do vídeo.</p><p>Resumo do texto</p><p>Este tipo de aplicação ajuda a resumir o conteúdo de textos, por meio do</p><p>processamento de linguagem natural, e a personalizá-los para entrega</p><p>em aplicativos que não podem suportar grandes volumes.</p><p></p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 20/85</p><p>Análise de centros de suporte</p><p>Atualmente, muitos serviços de suporte são realizados remotamente</p><p>por meio de chamadas telefônicas. Ao final das chamadas, há duas</p><p>situações:</p><p></p><p>O problema foi</p><p>resolvido.</p><p></p><p>O problema não foi</p><p>resolvido.</p><p>Uma aplicação muito interessante para RNN é fazer o processamento</p><p>do áudio do suporte e analisá-lo com base no resultado da chamada.</p><p>Em outras palavras, estamos interessados em saber se a equipe de</p><p>suporte teve sucesso e quais foram as medidas tomadas para resolver o</p><p>problema do cliente. Dessa forma, esse aprendizado pode ser analisado</p><p>e reaplicado a outros cenários semelhantes ou pode servir para treinar</p><p>outras pessoas de suporte.</p><p>A evolução desse processo é fazer a</p><p>automatização com base no uso de RNN, de</p><p>modo a processar e sintetizar a fala real da</p><p>chamada para �ns de análise.</p><p>Aplicações em séries temporais</p><p>As séries temporais são mais um exemplo de dados sequenciais. Há</p><p>muitas situações em que estamos interessados em estimar qual será o</p><p>próximo valor da série e identificar comportamentos anômalos. Entre as</p><p>aplicações de séries temporais estão a análise de séries financeiras,</p><p>níveis de poluição e estudos de fenômenos meteorológicos.</p><p></p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 21/85</p><p>Exemplo de série</p><p>temporal.</p><p>Saiba mais</p><p>É claro que as aplicações de RNN não se limitam às que apresentamos</p><p>aqui. Existem exemplos de aplicações para aprendizado de ritmo,</p><p>composição musical, reconhecimento de caligrafia, aprendizagem de</p><p>gramática, reconhecimento de ações humanas, além de diversas tarefas</p><p>de previsão na área de gerenciamento de processos de negócios e</p><p>previsão em caminhos de assistência médica.</p><p>Vantagens e desvantagens</p><p>Conheça as vantagens e desvantagens de utilizar as RNN:</p><p></p><p>Vantagens</p><p>Podem processar</p><p>entradas de qualquer</p><p>comprimento.</p><p>Lembram de cada</p><p>informação ao longo do</p><p>tempo e, por causa</p><p>disso, encaixam-se bem</p><p>em diversas aplicações</p><p>sequenciais.</p><p>Os pesos podem ser</p><p>compartilhados entre as</p><p>etapas de tempo.</p><p></p><p>Desvantagens</p><p>O cálculo de</p><p>treinamento é lento</p><p>devido à sua natureza</p><p>recorrente.</p><p>São propensas a</p><p>problemas como</p><p>explosão e</p><p>desaparecimento de</p><p>gradiente.</p><p></p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 22/85</p><p>Fundamentos das redes</p><p>recorrentes</p><p>Está na hora de nosso bate-papo sobre os principais conceitos sobre</p><p>Redes Neurais Recorrentes com foco na arquitetura básica da rede e em</p><p>algumas de suas principais aplicações. Vamos lá!</p><p>Falta pouco para atingir seus objetivos.</p><p>Vamos praticar alguns conceitos?</p><p>Questão 1</p><p>As RNN fazem parte dos algoritmos de aprendizado de máquina.</p><p>Como se trata de um tipo de rede neural, elas incorporam diversos</p><p>aspectos fundamentais para seu funcionamento. Assinale a</p><p>alternativa que apresenta um desses aspectos:</p><p></p><p>A</p><p>As RNN são adequadas para situações em que os</p><p>dados não possuem dependência entre si.</p><p>B</p><p>As RNN são caracterizadas por processos</p><p>sequenciais de processamento, que reduzem sua</p><p>dependência do conjunto de dados de testes.</p><p>C</p><p>As RNN precisam ser implementadas com funções</p><p>de ativação ReLU para fazer classificações.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 23/85</p><p>Parabéns! A alternativa D está correta.</p><p>De forma semelhante ao que ocorre com outros tipos de redes</p><p>neurais, as RNN têm por objetivo extrair informações do conjunto</p><p>de dados de treinamento que sejam úteis para fazer generalizações.</p><p>Essas informações são chamadas de características, também</p><p>conhecidas como recursos.</p><p>Questão 2</p><p>A recorrência é uma propriedade explorada por diversos problemas</p><p>de computação. Um exemplo clássico de aplicação de recorrência</p><p>ocorre no fatorial de um número, em que o cálculo do fatorial de</p><p>determinado número natural n depende do fatorial de n-1. Assinale</p><p>a alternativa que apresenta a aplicação correta das RNN para</p><p>resolver problemas:</p><p>D</p><p>O processo de incorporação de conhecimento das</p><p>RNN está diretamente relacionado à diversidade do</p><p>conjunto de dados de treinamento.</p><p>E</p><p>A principal característica das RNN é a utilização de</p><p>camadas ocultas, que eliminam a dependência</p><p>relacional entre os dados.</p><p>A</p><p>Uma das aplicações clássicas de recorrência é a</p><p>segmentação de imagens, que é resolvida com</p><p>sucesso por RNN.</p><p>B</p><p>Devido à sua natureza recorrente, as RNN são</p><p>especialmente adequadas para reconhecimento de</p><p>imagens.</p><p>C</p><p>As RNN são adequadas para prever a próxima</p><p>palavra de uma conversa.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 24/85</p><p>Parabéns! A alternativa C está correta.</p><p>O principal aspecto das RNN que as destacam em relação a outros</p><p>tipos de redes neurais é a captura de dependências entre os dados.</p><p>Isso as torna especialmente interessantes para tratar problemas de</p><p>séries temporais e PLN.</p><p>2 - Arquiteturas</p><p>Ao �nal deste módulo, você será capaz de distinguir as principais</p><p>variações de arquiteturas de RNN.</p><p>Ligando os pontos</p><p>Você sabe qual a importância de uma arquitetura de rede neural RNN?</p><p>Sabia que elas podem ter diferentes arquiteturas? Para respondermos a</p><p>D</p><p>Devido às características de recorrência das RNN,</p><p>sua aplicação mais adequada é para a resolução de</p><p>problemas de combinatória.</p><p>E</p><p>As RNN têm a capacidade de gerar informações que</p><p>as colocam como um exemplo de aprendizado de</p><p>máquina não supervisionado.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 25/85</p><p>estas perguntas, vamos analisar algumas situações práticas.</p><p>A empresa RNN Arquitetura S.A. é especializada no desenvolvimento de</p><p>arquitetura para redes neurais recorrentes (RNNs). É um ramo muito</p><p>específico, mas, ainda assim, tem altíssimo valor agregado. Isso porque</p><p>essas redes podem ser aplicadas a diversas áreas, como:</p><p>Previsão de preços de ativos do mercado financeiro;</p><p>Previsão de chuvas para determinada região;</p><p>Construção de legendas automáticas;</p><p>Análise de sentimentos de textos de escrita livre.</p><p>E a lista de aplicações está bem longe de se encerrar, mas já dá uma</p><p>boa ideia da importância desse tipo de rede. Mas para construir uma</p><p>rede RNN que produza excelentes resultados é necessário investir em</p><p>uma arquitetura e valores de parâmetros eficientes. E isso não é um</p><p>trabalho trivial. Muito pelo contrário! Foi aí que os fundadores da RNN</p><p>Arquitetura encontraram uma oportunidade de negócio: projetar e</p><p>desenvolver arquiteturas eficientes, além de realizar um elaborado</p><p>processo de testes que auxiliasse para fornecer os valores adequados</p><p>para os parâmetros da rede.</p><p>Existe mais um ponto que torna o modelo de negócio da RNN</p><p>Arquitetura ainda mais interessante: ela atua com diversas arquiteturas</p><p>de RNNs. Isso é fundamental, pois a utilização da rede para</p><p>determinadas finalidades está completamente vinculada à sua</p><p>arquitetura.</p><p>Para trabalhar em ramo tão específico, a RNN Arquitetura conta com um</p><p>programa de treinamento intenso em que são fornecidos cursos para</p><p>seus colaboradores. Além disso, ela faz parcerias com instituições de</p><p>ensino para buscar talentos que ainda estejam se formando.</p><p>E você, acha que a estratégia dos gestores da RNN Arquitetura vai</p><p>ajudar a expandir os negócios?</p><p>Após a leitura do case, é hora de aplicar seus conhecimentos! Vamos</p><p>ligar esses pontos?</p><p>Questão 1</p><p>Como você viu, a empresa RNN Arquitetura S.A. atua em um ramo</p><p>muito específico que é o de projetar e ajustar a arquitetura de uma</p><p>rede RNN. Na sua visão e no contexto da estratégia acima, qual a</p><p>importância da estrutura de uma arquitetura para uma rede RNN?</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 26/85</p><p>Parabéns! A alternativa E está correta.</p><p>Aspectos da arquitetura de uma rede RNN são fundamentais para o</p><p>tipo de aplicação que ela poderá ser utilizada, portanto influenciam</p><p>o comportamento da rede, como bem foi observado pela RNN</p><p>Arquitetura.</p><p>Questão 2</p><p>Como você viu, a parametrização de uma rede RNN também tem</p><p>considerável impacto sobre o desempenho dela. Como você</p><p>visualiza ser possível fornecer bons valores para as redes RNN?</p><p>A Garante que os resultados produzidos pela rede</p><p>serão de excelente qualidade.</p><p>B</p><p>Permite que a rede RNN possa ser aplicada para</p><p>aplicações de visão computacional.</p><p>C Torna mais fácil de se resolver problemas.</p><p>D</p><p>Permite que várias pessoas possam colaborar no</p><p>processo de construção.</p><p>E Influencia todo o comportamento da rede.</p><p>A Utilizando valores padrões fornecidos na literatura.</p><p>B Através de muitos testes.</p><p>C</p><p>Basta colocar todos os valores iniciais iguais a zero</p><p>que a rede vai se ajustar quando iniciar o</p><p>treinamento.</p><p>D O ideal é produzir valores aleatórios.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 27/85</p><p>Parabéns! A alternativa B está correta.</p><p>A RNN Arquitetura nos mostrou no texto que o processo de</p><p>parametrização de uma rede RNN envolve muitos testes. Logo que</p><p>fizermos a execução deles, precisamos estudar o comportamento</p><p>da rede e adotar os valores dos que produziram o melhor resultado.</p><p>Questão 3</p><p>Considere o seguinte cenário: na empresa que você trabalha, existe um</p><p>movimento para utilizar</p><p>as redes RNN, mas também existe uma</p><p>resistência quanto a isso, pois alguns argumentam que a arquitetura</p><p>dela é muito complexa. Neste cenário, como você argumentaria a favor</p><p>do uso das redes RNN?</p><p>Digite sua resposta aqui</p><p>Chave de resposta</p><p>De fato, a arquitetura de uma rede RNN não é simples. Como</p><p>vimos no caso da RNN Arquitetura S.A., existem muitos detalhes</p><p>que devem ser tratados explicitamente e não há uma referência</p><p>padrão que possa ser usada, é necessário realizar testes. Por</p><p>outro lado, as redes RNNs possuem excelentes casos de sucesso</p><p>para tratar problemas de dados sequenciais, como processamento</p><p>de linguagem natural e predição de valores. Portanto, vale a pena o</p><p>investimento para aprender como atuam e aplicá-las para resolver</p><p>problemas para as quais funcionam muito bem.</p><p>Visão geral da arquitetura</p><p>E</p><p>O mais importante é que os valores sempre sejam</p><p>os mesmos para todas as rodadas da rede.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 28/85</p><p>As RNN são redes neurais usadas para processar dados sequenciais.</p><p>Como vimos nas aplicações de redes recorrentes, existem muitos</p><p>exemplos em que os dados são sequenciais. Vejamos alguns:</p><p></p><p>Os vídeos são formados por uma sequência de quadros.</p><p></p><p>A música é a combinação de uma sequência de elementos sonoros.</p><p></p><p>O texto é tipicamente sequencial, pois surge de uma combinação de</p><p>caracteres.</p><p>As RNN fazem a modelagem de dados sequenciais por meio da</p><p>persistência dos dados que foram aprendidos nas instâncias anteriores.</p><p>Exemplo</p><p>Em um diálogo entre personagens, os argumentos são construídos com</p><p>o que um personagem disse em dado momento, para que haja</p><p>coerência no fluxo da conversa. De modo semelhante, as RNN</p><p>aprendem e se lembram dos dados para formular uma decisão baseada</p><p>no aprendizado adquirido na instância anterior.</p><p>Uma característica das RNN que as diferencia de outras redes neurais é</p><p>que elas não limitam nem a entrada, nem a saída como um conjunto de</p><p>tamanho fixo, e nos permitem treinar o modelo como uma sequência de</p><p>dados. Portanto, para que possamos utilizar as RNN da melhor forma,</p><p>precisamos conhecer aspectos sobre sua arquitetura.</p><p>Vamos começar nossa abordagem com os tipos de RNN. Essas redes</p><p>neurais podem ser classificadas em quatro tipos básicos de estrutura.</p><p>São eles:</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 29/85</p><p>Um-para-um</p><p>Um-para-muitos</p><p>Muitos-para-um</p><p>Muitos-para-muitos</p><p>Vamos analisar essas categorias com mais detalhes.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 30/85</p><p>Estrutura um-para-um</p><p>É uma estrutura de rede neural em que os comprimentos da entrada e</p><p>da saída são fixos e independentes da informação anterior. Na imagem</p><p>a seguir, apresentamos um exemplo de RNN com estrutura um-para-um:</p><p>Estrutura um-para-um.</p><p>Esse tipo de estrutura de RNN pode ser aplicado, por exemplo, para</p><p>classificação de imagens.</p><p>Estrutura um-para-muitos</p><p>É uma estrutura de RNN em que a entrada possui um tamanho fixo de</p><p>informação e que fornece uma sequência de dados como saída. Esse</p><p>tipo de estrutura é aplicado a problemas sequenciais em que os dados</p><p>de entrada têm uma etapa de tempo, e a saída contém um vetor de</p><p>valores múltiplos ou etapas de tempo múltiplas. Assim, há uma única</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 31/85</p><p>entrada e uma sequência de saídas. Na imagem a seguir, mostramos</p><p>um exemplo dessa estrutura de RNN:</p><p>Estrutura um-para-muitos.</p><p>Um exemplo de aplicação dessa estrutura ocorre na legendagem de</p><p>imagens, quando o modelo recebe uma imagem como entrada e produz</p><p>uma frase de palavras que faz uma descrição dela.</p><p>Estrutura muitos-para-um</p><p>Neste caso, a rede recebe uma sequência de informações como entrada</p><p>e produz uma saída de tamanho fixo. Na imagem a seguir, mostramos</p><p>esse tipo de estrutura:</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 32/85</p><p>Estrutura muitos-para-um.</p><p>Essa estrutura pode ser aplicada para fazer a análise de sentimentos e a</p><p>classificação de texto. No caso da análise de sentimentos, a entrada de</p><p>dados é uma frase, e a saída é uma classificação que expressa o</p><p>sentimento positivo ou negativo da frase.</p><p>Estrutura muitos-para-muitos</p><p>Esta estrutura recebe uma sequência de informações como entrada e</p><p>produz uma sequência de saídas recorrentes. Veja:</p><p>Estrutura muitos-para-muitos.</p><p>Um exemplo de aplicação dessa arquitetura é a tradução automática. As</p><p>RNN leem qualquer frase em um idioma de origem e, em seguida,</p><p>produzem a frase em um idioma de destino.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 33/85</p><p>Existe, ainda, outra versão para a estrutura muitos-para-muitos, em que</p><p>o comprimento da entrada é igual ao da saída. Na imagem a seguir,</p><p>apresentamos um exemplo:</p><p>Outra versão de estrutura muitos-para-muitos.</p><p>Essa outra estrutura pode ser aplicada no problema de reconhecimento</p><p>de entidades nomeadas. Tal problema consiste em identificar elementos</p><p>no texto que sejam relevantes para a compreensão dentro de um</p><p>contexto. Um exemplo aplicado à segurança pública corresponde a</p><p>identificar acusados e vítimas dentro do texto do Boletim de Ocorrência.</p><p>Arquiteturas LSTM e GRU</p><p>As arquiteturas LSTM e GRU foram criadas como solução para tratar o</p><p>problema de desaparecimento de gradiente que ocorre nas redes</p><p>recorrentes tradicionais. Elas têm mecanismos internos, chamados</p><p>portas, que podem regular o fluxo de informações. Devido à importância</p><p>dessas arquiteturas, vamos analisá-las com mais detalhes.</p><p>GRU</p><p>Gate Recurrent Unit ou Unidade Recorrente Bloqueada.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 34/85</p><p>LSTM</p><p>As RNN são apropriadas para trabalhar com dados baseados em</p><p>sequência, mas, à medida que as sequências aumentam, elas começam</p><p>a perder informações sobre a sequência de dados ao longo do tempo.</p><p>Como consequência, as saídas podem ser bem diferentes do que</p><p>esperávamos.</p><p>Para tratar o problema de perda de</p><p>informações, foi desenvolvida a arquitetura</p><p>de rede LSTM.</p><p>As LSTM têm a capacidade de lembrar de informações de dados</p><p>baseados em sequências bastante longas – esse é o motivo do nome</p><p>“memória longa” – e evitar problemas de dissipação do gradiente, que</p><p>pode ocorrer em redes neurais tradicionais treinadas pelo algoritmo</p><p>backpropagation. Normalmente, as LSTM são compostas por quatro</p><p>componentes:</p><p>Uma célula de memória</p><p>Guarda informações importantes por intervalos arbitrários de tempo.</p><p>Uma porta de entrada</p><p>Controla a entrada de informações em cada intervalo de tempo.</p><p>Uma porta de saída</p><p>Controla quanta informação é enviada para a próxima célula ou camada</p><p>superior.</p><p>Uma porta de esquecimento</p><p>Controla a quantidade de dados que serão perdidos em cada etapa de</p><p>tempo.</p><p>Cada porta está conectada a outra por meio de sua entrada e saída, e</p><p>várias conexões são recorrentes. Na imagem a seguir, apresentamos a</p><p>estrutura de uma LSTM:</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 35/85</p><p>Estrutura de uma LSTM.</p><p>Aqui, vemos muitos elementos estruturais que compõem a arquitetura</p><p>da LSTM. Vamos analisá-los com cuidado:</p><p></p><p>O símbolo representa blocos de memória,</p><p>chamados células, que compõem a LSTM.</p><p>Ct</p><p>Ct</p><p></p><p>O símbolo representa o estado oculto. Dois</p><p>estados são transferidos para a próxima célula: o</p><p>estado da célula e o estado oculto . O estado</p><p>da célula é a cadeia principal do fluxo de dados, o</p><p>que permite aos dados fluir para frente sem ser</p><p>alterados.</p><p>ht</p><p>ht</p><p>Ct ht</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 36/85</p><p>Ainda há mais alguns passos.</p><p> σ e</p><p>tanh</p><p>Os símbolos σ e tanh representam,</p><p>respectivamente, as funções sigmoide e tangente</p><p>hiperbólica. Os dados podem ser adicionados ou</p><p>removidos do estado da célula por meio de portas</p><p>sigmoides. Uma porta é semelhante a uma camada</p><p>ou série de operações de matriz, que contêm pesos</p><p>individuais diferentes, representados pelo símbolo</p><p>W.</p><p></p><p>O símbolo representa a função de ativação da</p><p>porta de esquecimento. Sua fórmula é dada por:</p><p>ft</p><p>ft</p><p>ft = σ (Wf [ht−1, xt] + bf)</p><p></p><p>O símbolo representa o vetor candidato. Sua</p><p>fórmula é dada por:</p><p>~</p><p>Ct</p><p>~</p><p>Ct</p><p>~</p><p>Ct = tanh (WC [ht−1, xt] + bC)</p><p></p><p>O símbolo representa a função de ativação da</p><p>porta de entrada que será combinada com o vetor</p><p>candidato ( ). Sua fórmula é dada por:</p><p>it</p><p>it</p><p>~</p><p>Ct</p><p>it = σ (Wi [ht−1, xt] + bi)</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 37/85</p><p>Atenção!</p><p>As LSTM são projetadas para evitar o problema de dependência de</p><p>longo prazo, porque usam portas para controlar o processo de</p><p>memorização.</p><p>GRU</p><p>Uma arquitetura de RNN que pode ser vista como uma simplificação da</p><p>LSTM é a GRU. Ela combina as portas de esquecimento e de entrada em</p><p>uma única porta, que é chamada de porta de atualização (update gate).</p><p>Além disso, a GRU possui uma porta de redefinição (reset gate). Na</p><p>imagem a seguir, mostramos um diagrama simplificado da GRU:</p><p>Arquitetura básica da GRU.</p><p>Semelhante à LSTM, a GRU trata do problema da dissipação do</p><p>gradiente por meio de suas portas. Agora, vamos analisar um pouco</p><p>mais a função das portas da GRU:</p><p> Precisamos calcular os valores da célula , de e</p><p>. O valor da célula é obtido pela fórmula:</p><p>Ct ot</p><p>ht Ct</p><p>Ct = ftCt−1 + it</p><p>~</p><p>Ct</p><p> Por fim, os valores de e são obtidos pelas</p><p>fórmulas:</p><p>ot ht</p><p>ot = σ (Wo [ht−1, xt] + bo)</p><p>ht = ot tanh (Ct)</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 38/85</p><p>Esta porta é responsável pelas informações que serão passadas</p><p>adiante. A fórmula da porta de atualização para a etapa de</p><p>tempo (t) é dada por:</p><p>Isso significa que, quando x_t conecta-se à unidade de rede, ele</p><p>será multiplicado por seu próprio peso ( ). A mesma lógica se</p><p>aplica para , que contém as informações das unidades t-1</p><p>anteriores e é multiplicado por seu próprio peso ( ). Em</p><p>seguida, somamos os resultados das multiplicações e aplicamos</p><p>uma função de ativação sigmoide, que vai produzir um valor</p><p>entre 0 e 1.</p><p>O modelo usa esta porta para decidir quanto das informações</p><p>anteriores deve ser esquecido. A fórmula da porta de redefinição</p><p>é dada por:</p><p>Como podemos notar, essa fórmula é muito parecida com a da</p><p>porta de atualização. Basicamente, a diferença entre elas está</p><p>nos pesos. Como fizemos anteriormente, multiplicamos e</p><p>por seus respectivos pesos, somamos os resultados e</p><p>aplicamos a função sigmoide.</p><p>Ainda precisamos tratar de mais dois passos: obter o conteúdo da</p><p>memória atual e a memória final na etapa de tempo atual. Então, vamos</p><p>analisar como esses passos são feitos:</p><p>Primeiro, começamos com o uso da porta de redefinição (reset</p><p>gate). Calculamos o novo conteúdo de memória da seguinte</p><p>forma:</p><p>Porta de atualização (update gate) </p><p>zt = σ (Wzxt + Uzht−1)</p><p>Wz</p><p>ht−1</p><p>Uz</p><p>Porta de redefinição (reset gate) </p><p>rt = σ (Wrxt + Urht−1)</p><p>ht−1</p><p>xt</p><p>Conteúdo da memória atual </p><p>~</p><p>ht = tanh (Wxt + rt ⊙ Uht−1)</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 39/85</p><p>O símbolo é usado para representar o produto de Hadamard,</p><p>que, basicamente, multiplica os elementos correspondentes de</p><p>duas matrizes e obtém uma matriz de mesmas dimensões. Por</p><p>exemplo, vamos imaginar duas matrizes (A e B), ambas com</p><p>duas linhas e duas colunas. Agora, vamos aplicar o produto de</p><p>Hadamard:</p><p>A rede precisa calcular o vetor , que contém as informações da</p><p>unidade atual e as transmite para a rede. Para isso, ela utiliza a</p><p>porta de atualização por meio do conteúdo da memória atual e</p><p>das etapas anteriores. Isso é feito da seguinte maneira:</p><p>Todas essas etapas mostram como as GRU são capazes de armazenar</p><p>e filtrar as informações, usando suas portas de atualização e</p><p>redefinição. Dessa forma, a arquitetura GRU elimina o problema do</p><p>gradiente de desaparecimento, pois o modelo não está levando a nova</p><p>entrada todas as vezes, mas mantém as informações relevantes,</p><p>passando-as para as próximas etapas de tempo da rede.</p><p>RNN bidirecionais</p><p>Uma variação da arquitetura das RNN são as RNN bidirecionais. Elas</p><p>são formadas por uma composição de duas RNN que extraem</p><p>informações dos dados em dois sentidos distintos. Dessa forma, podem</p><p>extrair características das entradas anteriores para fazer predições</p><p>sobre o estado atual, semelhante às RNN convencionais, e extrair</p><p>informações sobre dados futuros para melhorar a precisão das</p><p>estimativas. Na imagem a seguir, apresentamos uma RNN bidirecional:</p><p>⊙</p><p>[ ] ⊙ [ ] = [ ]a11 a12</p><p>a21 a22</p><p>b11 b12</p><p>b21 b22</p><p>a11b11 a12b12</p><p>a21b21 a22b22</p><p>Conteúdo da memória final na etapa de tempo atual </p><p>ht</p><p>ht = zt ⊙ ht−1 + (1 − zt) ⊙</p><p>~</p><p>ht</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 40/85</p><p>Estrutura geral de RNN bidirecionais.</p><p>As RNN bidirecionais são especialmente interessantes para PLN, pois é</p><p>mais fácil fazer uma predição sobre uma palavra no texto, quando</p><p>conhecemos o contexto. Para analisar um exemplo concreto, considere</p><p>a seguinte frase:</p><p>Eu quero _______ sobre redes neurais recorrentes bidirecionais.</p><p>Nosso objetivo é encontrar uma palavra que preencha a lacuna, de</p><p>modo que a frase faça sentido. Em que palavra você pensaria? Muito</p><p>provavelmente, você escolheria a palavra “aprender”.</p><p>Arquiteturas de redes</p><p>neurais recorrentes</p><p>Está na hora de nosso bate-papo sobre arquitetura das Redes Neurais</p><p>Recorrentes com especial destaque para as arquiteturas LSTM, GRU e</p><p>RNN bidirecionais. Vamos lá!</p><p></p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 41/85</p><p>Falta pouco para atingir seus objetivos.</p><p>Vamos praticar alguns conceitos?</p><p>Questão 1</p><p>Entre as aplicações das RNN estão o PLN e os processamentos de</p><p>séries temporais. Essas categorias de problemas estão presentes</p><p>em diversas situações do dia a dia. Assinale a alternativa que</p><p>justifique a adequação das RNN para PLN e séries temporais:</p><p>A</p><p>Quando o objetivo de uma aplicação é extrair</p><p>informações sobre a dependência dos dados, as</p><p>arquiteturas adequadas de RNN são um-para-muitos</p><p>e muitos-para-um, uma vez que usam o efeito</p><p>multiplicativo da informação.</p><p>B</p><p>Por possuírem arquiteturas do tipo um-para-um, as</p><p>RNN podem relacionar o dado de determinado</p><p>período com o dado do próximo e são ideais para</p><p>processamento de séries temporais.</p><p>C</p><p>As arquiteturas de múltiplas etapas têm a</p><p>capacidade de relacionar dados de diferentes</p><p>períodos e são ideais para classificação de</p><p>imagens.</p><p>D</p><p>As RNN extraem as características de dados</p><p>dependentes por meio do uso de informações</p><p>processadas em etapas anteriores.</p><p>E</p><p>As RNN obtêm a aderência aos dados sequenciais</p><p>por meio de uma arquitetura que combina dados de</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 42/85</p><p>Parabéns! A alternativa D está correta.</p><p>As diferentes arquiteturas de RNN são estruturadas para fazer a</p><p>persistência do aprendizado em etapas anteriores. Portanto, o</p><p>aprendizado é entendido como um processo contínuo. Isso faz com</p><p>que as RNN sejam adequadas para extrair informações de dados</p><p>sequenciais que são por natureza relacionados entre si, como são</p><p>os casos das séries temporais e da linguagem natural.</p><p>Questão 2</p><p>A LSTM é uma arquitetura das RNN que previne o problema da</p><p>dissipação do gradiente. Sua estrutura é constituída por portas com</p><p>objetivos específicos para o funcionamento da rede. Assinale a</p><p>alternativa correta sobre os itens que compõem a estrutura da</p><p>LSTM:</p><p>entrada e saída de forma isolada.</p><p>A</p><p>A complexidade dos dados de entrada é tratada</p><p>pelos componentes da LSTM por meio da função</p><p>ativação Softmax.</p><p>B</p><p>Para a LSTM, todas as informações são importantes</p><p>e consideradas em todas as etapas do</p><p>processamento por seus componentes.</p><p>C</p><p>O processamento dos dados é feito por meio da</p><p>execução de funções de ativação, que medem a</p><p>probabilidade de uma informação ser esquecida.</p><p>D</p><p>O principal objetivo dos elementos constituintes da</p><p>LSTM é garantir que as informações sejam enviadas</p><p>para a próxima etapa.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 43/85</p><p>Parabéns! A alternativa E está correta.</p><p>A LSTM é formada por quatro componentes que são responsáveis</p><p>por memorizar e esquecer a informação, além de controlar a</p><p>entrada e saída das informações ao longo do tempo. Dessa forma,</p><p>a LSTM retém a informação que é, de fato, relevante para extrair as</p><p>características dos dados de treinamento e fazer generalizações.</p><p>3 - Aplicação em séries temporais</p><p>Ao �nal deste módulo, você será capaz de empregar RNN em</p><p>predição de séries temporais.</p><p>Ligando os pontos</p><p>Você sabia que as redes RNN são aplicadas com sucesso para</p><p>problemas de predição? Mas como isso pode ser feito no dia a dia? Para</p><p>respondermos a estas perguntas, vamos analisar algumas situações</p><p>práticas.</p><p>E</p><p>Um dos componentes da LSTM é responsável por</p><p>desconsiderar informações que não são úteis para</p><p>extrair informações do conjunto de treinamento.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 44/85</p><p>A empresa Pague Certo S.A. atua no ramo de análise de precificação de</p><p>investimentos financeiros no setor de energia elétrica. Ela estuda as</p><p>séries históricas das diversas empresas de energia que negociam na</p><p>bolsa de valores e, a partir disso, faz uma predição dos preços dos</p><p>ativos negociados por essas empresas. Dessa forma, ele fornece</p><p>recomendações para seus clientes a respeito dos valores desses ativos.</p><p>Assim, alguns dessas negociações podem gerar uma oportunidade de</p><p>negócio, ou um grande problema, caso os ativos estejam precificados</p><p>acima do que, realmente, valem.</p><p>Para fazer essas estimativas de preços dos ativos, a Pague Certo</p><p>utilizava, até então, técnicas de estatística para análise de séries</p><p>temporais. No entanto, os gestores perceberam algumas limitações</p><p>dessas técnicas e passaram a procurar por novos métodos que fossem</p><p>mais flexíveis e auxiliassem os analistas financeiros a tomarem</p><p>decisões mais robustas. A solução que encontraram foi a utilização de</p><p>redes neurais recorrentes (RNNs). Essas redes têm uma estrutura</p><p>adequada para trabalhar com dados sequenciais, como é o caso de</p><p>séries temporais financeiras. Além disso, sua arquitetura permite extrair</p><p>características dos dados de forma similar à que um especialista faria.</p><p>Isso, por si só, já é uma vantagem, pois simula bem a forma como um</p><p>bom analista faria para analisar os preços dos ativos. Adiciona-se a</p><p>essa vantagem o fato de que utilizar as RNNs permite dar escalabilidade</p><p>ao processo de análise.</p><p>Como sempre, o início da incorporação das redes RNNs teve alguns</p><p>desafios que passam pela necessidade de aprender os conceitos,</p><p>arquiteturas e técnicas de treinamento e validação. No entanto, esses</p><p>desafios foram superados e, atualmente, a Pague Certo tem produzido</p><p>bons resultados para seus clientes.</p><p>E você, concorda com a decisão dos gestores da Pague Certo S.A. de</p><p>utilizar redes RNN para estimar os preços dos ativos do setor de</p><p>energia?</p><p>Após a leitura do case, é hora de aplicar seus conhecimentos! Vamos</p><p>ligar esses pontos?</p><p>Questão 1</p><p>Como você leu no texto, a Pague Certo S.A. utiliza redes RNN para</p><p>estimar preços de ativos do setor elétrico. Analisando a decisão</p><p>dos gestores, na sua visão, qual é o motivo da empresa ter</p><p>escolhido um segmento específico para aplicar as redes RNN?</p><p>A Devido à disponibilidade dos dados históricos.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 45/85</p><p>Parabéns! A alternativa E está correta.</p><p>A Pague Certo S.A. fez a escolha por focar o aprendizado da rede</p><p>RNN no segmento de energia elétrica, com o objetivo de que a rede</p><p>pudesse se especializar em uma área e, assim, aumentar as suas</p><p>chances de acertar os preços dos ativos das empresas daquele</p><p>setor.</p><p>Questão 2</p><p>Como você leu no texto, a Pague Certo S.A. atua com estimativas</p><p>de precificação de ativos de empresas do setor elétrico negociados</p><p>na bolsa de valores. Na sua visão, qual o motivo que levou a Pague</p><p>Certo a escolher as redes RNN para esse objetivo?</p><p>B Na verdade, não há um motivo específico.</p><p>C</p><p>Devido à grande diversidade de dados disponíveis</p><p>no setor de energia elétrica.</p><p>D</p><p>Provavelmente, foi uma estratégia para dominar</p><p>uma área e expandir para outras.</p><p>E</p><p>Para aumentar as chances da rede aprender o</p><p>comportamento dos dados.</p><p>A</p><p>Porque as redes RNN não são muito sensíveis aos</p><p>aspectos estruturais de arquitetura.</p><p>B</p><p>Porque as redes RNN funcionam muito bem para</p><p>predição de séries temporais.</p><p>C</p><p>Porque há preferência dos gestores da Pague Certo</p><p>por esse tipo de modelo</p><p>D</p><p>Porque foi uma maneira de destacar a empresa em</p><p>relação aos concorrentes.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 46/85</p><p>Parabéns! A alternativa B está correta.</p><p>A Pague Certo S.A. escolheu utilizar redes RNNs para estimar</p><p>valores de preços de ativos porque que elas funcionam muito bem</p><p>para esse tipo de aplicação.</p><p>Questão 3</p><p>Considere o seguinte cenário: você foi contratado pela Pague Certo S.A.</p><p>para auxiliar a expandir os negócios da empresa sem mudar o foco de</p><p>atuação. Com base em sua experiência, como você cumpriria essa</p><p>missão?</p><p>Digite sua resposta aqui</p><p>Chave de resposta</p><p>A Pague Certo S.A. atua com predição de preços de ativos de</p><p>empresas do setor elétrico negociados na bolsa de valores</p><p>utilizando redes RNNs. Portanto, é natural procurar outros</p><p>mercados, como o de petróleo e gás para aplicar o mesmo</p><p>processo com alguns ajustes. Dessa forma, não há uma grande</p><p>mudança na forma de trabalhar da empresa e, ainda assim, há</p><p>uma expansão dos negócios, possibilitando a aquisição de novos</p><p>clientes.</p><p>RNN para séries temporais</p><p>Podemos encontrar aplicações de séries temporais em muitas áreas,</p><p>tais como finanças e estimativas de procura e oferta. Basicamente, os</p><p>E</p><p>Porque todas as empresas que trabalham com</p><p>predição estão migrando para usar técnicas de</p><p>inteligência artificial.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 47/85</p><p>problemas de séries temporais são formados por um vetor de valores</p><p>históricos:</p><p>Nosso objetivo é estimar os valores da série para períodos futuros, ou</p><p>seja, queremos encontrar valores aproximados para , ...,</p><p>com base nos dados históricos. Esse tipo de problema é bastante difícil</p><p>na prática, pois as séries temporais são compostas por informações</p><p>que os modelos não incorporam. Por exemplo, no caso das séries</p><p>temporais financeiras, fatores como a ação dos agentes tomadores de</p><p>decisão e a configuração do cenário econômico afetam o</p><p>comportamento dos valores da série. O uso dos modelos de predição é</p><p>um instrumento para apoiar outras linhas de estudos.</p><p>Para fazer as estimativas dos pontos de uma série temporal, temos à</p><p>disposição duas categorias de métodos de predição:</p><p>Métodos estatísticos</p><p>tradicionais</p><p>X = [x1, . . . , xT ]</p><p>xT+1, xT+2</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 48/85</p><p>Métodos baseados em</p><p>modelos de aprendizado de</p><p>máquina</p><p>Em nosso caso, vamos estudar como aplicar RNN para fazer essas</p><p>estimativas com a utilização de:</p><p>Linguagem de programação muito utilizada para aplicações de</p><p>ciência de dados e aprendizado de máquina. Com ela, podemos</p><p>usar muitos recursos que facilitam o desenvolvimento de nossos</p><p>projetos.</p><p>É possível baixar e</p><p>instalar uma versão da linguagem Python</p><p>para a máquina local. Se você fizer isso, sugerimos que utilize o</p><p>PyCharm ou uma plataforma on-line como o Google Colab, que</p><p>foi utilizada para desenvolver o exemplo que veremos um pouco</p><p>mais adiante. O Google Colab já disponibiliza um ambiente</p><p>configurado que facilita iniciar a implementação e os testes do</p><p>projeto.</p><p>Plataforma de código aberto que disponibiliza bibliotecas com</p><p>funções que facilitam a criação e o treinamento das redes</p><p>Linguagem Python </p><p>Framework TensorFlow </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 49/85</p><p>neurais e de outros modelos de aprendizado de máquina. Sem a</p><p>ajuda de um framework como o TensorFlow, teríamos de</p><p>implementar todos os detalhes das RNN. Podemos imaginar</p><p>como seria complicado implementarmos as portas de uma</p><p>LSTM, os algoritmos de otimização, além de diversos detalhes</p><p>que nos afastariam do que realmente queremos realizar: como</p><p>aplicar RNN para fazer a análise de uma série temporal.</p><p>Implementação para</p><p>processamento de séries</p><p>temporais</p><p>Agora, vamos estudar o passo a passo da implementação da arquitetura</p><p>de um modelo de RNN para fazermos uma análise de uma série</p><p>temporal. Para isso, vamos utilizar o Google Colab, a fim de desenvolver</p><p>nosso código em Python com o framework TensorFlow.</p><p>Comentário</p><p>Uma das vantagens do Google Colab é que podemos trabalhar com</p><p>trechos de código e, assim, visualizar com mais clareza os detalhes de</p><p>nossa implementação.</p><p>Para fins didáticos, o projeto está dividido nos seguintes passos:</p><p>1. Geração de dados;</p><p>2. Visualização dos dados;</p><p>3. Normalização dos dados;</p><p>4. Separação dos conjuntos de dados;</p><p>5. Preparação de dados para RNN;</p><p>6. Arquitetura do modelo RNN;</p><p>7. Visualização da arquitetura do modelo;</p><p>8. Compilação do modelo;</p><p>9. Treinamento do modelo;</p><p>10. Salvamento do modelo;</p><p>11. Avaliação do modelo;</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 50/85</p><p>12. Impressão do erro de treinamento;</p><p>13. Predição de dados.</p><p>Veremos cada um dos passos a seguir.</p><p>Passo 1: geração de dados</p><p>Geramos os dados aleatórios para a série temporal, de modo que</p><p>estejam distribuídos uniformemente. A distribuição uniforme recebe</p><p>como parâmetros:</p><p></p><p>A quantidade de pontos da série</p><p>que queremos estudar.</p><p></p><p>Os valores mínimo e máximo que</p><p>os dados podem assumir ao longo</p><p>do tempo.</p><p>O código para geração de dados é:</p><p>Python </p><p>Usamos o pacote numpy para fazer a geração dos dados. Em especial, o</p><p>comando “np.random.seed” é um número usado como gerador de</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 51/85</p><p>valores pseudoaleatórios. Os dados da série temporal estão</p><p>armazenados na variável y. Usamos a variável x para armazenar o</p><p>período de cada ponto da série temporal.</p><p>Passo 2: visualização dos dados</p><p>Depois que geramos os dados, vamos visualizá-los por meio das</p><p>funções da biblioteca “matplotlib.pyplot”. O código que implementamos</p><p>para visualização dos dados é:</p><p>Python </p><p>No início do código, importamos a biblioteca “matplotlib.pyplot”. Depois,</p><p>fazemos algumas parametrizações para exibir os dados. A saída do</p><p>programa é dada pelo gráfico a seguir:</p><p>Gráfico: Cinco registros da base de treinamento.</p><p>Elaborado por: Sérgio Monteiro / Plataforma on-line Google Colab.</p><p>No eixo horizontal, estão os valores da variável x, e, no eixo vertical,</p><p>estão os valores de y.</p><p>Passo 3: normalização dos dados</p><p>Os dados da série temporal estão entre 20 e 40 unidades de valor.</p><p>Podemos pensar nessas unidades como valores monetários. Então,</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 52/85</p><p>vamos fazer a normalização dos dados, para que fiquem no intervalo 0 a</p><p>1. O código para normalização dos dados é:</p><p>Python </p><p>Assim, conseguimos visualizar os dados de uma forma mais clara,</p><p>como podemos observar no gráfico a seguir:</p><p>Gráfico: Dados normalizados da série temporal.</p><p>Elaborado por: Sérgio Monteiro / Plataforma on-line Google Colab.</p><p>Passo 4: separação dos conjuntos</p><p>de dados</p><p>Agora, precisamos organizar os dados para treinamento e validação do</p><p>modelo. Vamos usar os dados de treinamento, para que o modelo</p><p>extraia características da série temporal e seja capaz de fazer</p><p>generalizações. Já os dados de testes são utilizados para avaliarmos a</p><p>qualidade das predições do modelo. O código para separação dos</p><p>conjuntos de dados é:</p><p>Python </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 53/85</p><p>Como podemos ver na primeira linha do código, separamos 80% dos</p><p>dados para treinamento. Nas últimas duas linhas do código, usamos a</p><p>função zip, que agrupa os dados como pares ordenados.</p><p>A fim de visualizar como os dados estão organizados, escrevemos o</p><p>código a seguir para imprimir os cinco primeiros registros no conjunto</p><p>de treinamento:</p><p>Python </p><p>Passo 5: preparação de dados para</p><p>RNN</p><p>O próximo passo é organizar a forma como os dados da série serão</p><p>enviados para nosso modelo. Vamos usar apenas alguns dados do</p><p>histórico para explicar o dado de determinado instante de tempo. Por</p><p>exemplo, usaremos os dados dos períodos e para explicarmos ot1 t2</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 54/85</p><p>dado do período . O código para fazer essa organização dos dados da</p><p>série é:</p><p>Python </p><p>Agora, precisamos chamar a função ‘preparar_dados’. Para isso,</p><p>implementamos o código a seguir:</p><p>Python </p><p>Logo no início desse último trecho de código, aparece a variável</p><p>look_back. É essa variável que determina quantos dados históricos</p><p>utilizaremos para explicar o dado da série em determinado período. Para</p><p>entender melhor a saída, escrevemos o seguinte trecho de programa:</p><p>t3</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 55/85</p><p>Python </p><p>Vamos interpretar esse resultado. Cada linha indica um registro do</p><p>conjunto de treinamento. No caso da primeira linha, significa que nosso</p><p>modelo vai usar os dados 0.18796634 e 0.62472579 para explicar o</p><p>dado 0.43770267010016545.</p><p>Passo 6: arquitetura do modelo</p><p>RNN</p><p>Agora, vamos construir o modelo de RNN. A arquitetura que</p><p>implementamos utiliza uma camada de entrada, duas camadas LSTM e</p><p>uma camada Dropout para prevenir o overfitting (superespecialização).</p><p>Nossa arquitetura é de modelo sequencial. Por isso, teremos de</p><p>importar o pacote “Sequential” do tensorflow.keras. O código que</p><p>implementamos é dado por:</p><p>Python </p><p>Vamos observar alguns detalhes do modelo. A primeira camada LSTM</p><p>possui 100 unidades, e a camada Dropout recebe como parâmetro 0.2.</p><p>Isso significa que 20% das unidades da camada LSTM serão</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 56/85</p><p>“desativadas”, de modo a evitar que a rede fique superespecializada nos</p><p>dados de treinamento.</p><p>Passo 7: visualização da</p><p>arquitetura do modelo</p><p>O TensorFlow permite que possamos visualizar a arquitetura de nossa</p><p>implementação. Para isso, basta implementarmos o código dado por:</p><p>Python </p><p>A saída do programa mostra a arquitetura do modelo, como podemos</p><p>ver na imagem a seguir:</p><p>Arquitetura de nossa implementação de RNN.</p><p>Passo 8: compilação do modelo</p><p>Antes de iniciar o treinamento do modelo, precisamos compilá-lo. Aqui,</p><p>ainda precisamos escolher o método para medida de erro e o algoritmo</p><p>para minimização do erro. No caso, escolhemos a função de erro “raiz</p><p>quadrada do erro médio” e o algoritmo de otimização ADAM. O código é</p><p>dado por:</p><p>Python </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 57/85</p><p>Passo 9: treinamento do modelo</p><p>Finalmente, podemos iniciar a etapa de treinamento. Para isso, basta a</p><p>função “fit”. A seguir, apresentamos</p><p>o código de treinamento do modelo:</p><p>Python </p><p>Devemos notar a última linha do código, que separa 30% dos dados de</p><p>treinamento para fazer a validação do modelo. Aqui, cabe um</p><p>comentário: os dados de validação são usados para fazer ajustes nos</p><p>hiperparâmetros do modelo.</p><p>Outro ponto que devemos observar é que, no treinamento do modelo,</p><p>guardamos o histórico para analisá-lo posteriormente. A saída do</p><p>treinamento é dada por:</p><p>Python </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 58/85</p><p>Perceba algumas informações muito importantes em cada iteração da</p><p>saída: época, valor da função de perda e valor da função de perda</p><p>aplicada para os dados de validação. Para facilitar a visualização das</p><p>informações de saída do treinamento, fazemos a conversão do histórico</p><p>de treinamento para um dataframe. O código é dado a seguir:</p><p>Python </p><p>A saída da execução é dada pela seguinte tabela:</p><p>Tabela: Histórico do treinamento do modelo.</p><p>Elaborada por: Sérgio Monteiro / Plataforma on-line Google Colab.</p><p>Passo 10: salvamento do modelo</p><p>Nosso próximo passo é salvar o modelo para poder carregá-lo em outro</p><p>momento. O código é dado por:</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 59/85</p><p>Python </p><p>Passo 11: avaliação do modelo</p><p>Agora que fizemos o treinamento do modelo, temos de testá-lo. Para</p><p>isso, chamamos a função “evaluate”, passando para ela os valores de</p><p>teste como parâmetros. O código que implementamos é dado por:</p><p>Python </p><p>Após a execução do código, obtemos a seguinte saída:</p><p>1/1 [==============================] - 0s 19ms/step - loss:</p><p>0.0805</p><p>loss: 0.0804748684167862</p><p>Isso significa que o modelo tem um erro de “0.0804748684167862”.</p><p>Devemos lembrar que a qualidade do modelo será melhor quanto mais</p><p>próximo de zero for a função de erro.</p><p>Passo 12: impressão do erro de</p><p>treinamento</p><p>Agora, vamos visualizar como foi o comportamento da função de erro</p><p>ao longo do treinamento do modelo. O código é dado por:</p><p>Python </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 60/85</p><p>O resultado do código é apresentado no gráfico a seguir:</p><p>Gráfico: Comportamento da função de erro ao longo do treinamento.</p><p>Elaborado por: Sérgio Monteiro / Plataforma on-line Google Colab.</p><p>Como podemos ver, a função de erro, realmente, reduz ao longo das</p><p>épocas.</p><p>Passo 13: predição de dados</p><p>Com o modelo treinado, vamos passar para a fase de predição dos</p><p>dados. Vamos usar os dados que separamos para fazer o teste. O</p><p>código que fizemos é o seguinte:</p><p>Python </p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 61/85</p><p>Finalmente, vamos analisar a saída da predição do modelo. Para isso,</p><p>precisamos implementar o código para visualizar o comportamento de</p><p>nosso modelo em relação aos dados de teste:</p><p>Python </p><p>No gráfico a seguir, mostramos o resultado:</p><p>Gráfico: Imagem usada para teste.</p><p>Elaborado por: Sérgio Monteiro / Plataforma on-line Google Colab.</p><p>Analisando o gráfico, podemos ver que o modelo extraiu características</p><p>sobre o movimento da série. Mas ele precisa passar por ajustes para</p><p>melhorar a escala. É um excelente exercício fazer mudanças dos</p><p>parâmetros do modelo e estudar como ele se comporta. Essa é a parte</p><p>mais complicada, pois cada problema tem características particulares</p><p>que tornam a parametrização um desafio.</p><p></p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 62/85</p><p>Predição de séries</p><p>temporais com RNN</p><p>Está na hora de nosso bate-papo sobre os conceitos que relacionam</p><p>Redes Neurais Recorrentes e séries temporais, demonstrando uma</p><p>aplicação prática com emprego do framework TensorFlow. Vamos lá!</p><p>Falta pouco para atingir seus objetivos.</p><p>Vamos praticar alguns conceitos?</p><p>Questão 1</p><p>Uma das aplicações de RNN é na análise de séries temporais. Por</p><p>exemplo, podemos fazer o estudo de séries temporais na área de</p><p>finanças. Assinale a alterativa correta a respeito da aplicação de</p><p>RNN para séries temporais financeiras:</p><p>A</p><p>Como as RNN capturam informações sobre os</p><p>dados sequenciais, elas podem ser utilizadas para</p><p>tomar decisões de investimentos sem a</p><p>necessidade de interferência humana.</p><p>B</p><p>As RNN auxiliam no entendimento do</p><p>comportamento da série e, junto com outros</p><p>estudos, tornam-se um apoio na tomada de decisão.</p><p>C</p><p>As séries financeiras são muito difíceis de serem</p><p>estimadas. Por isso, as RNN não devem ser</p><p>aplicadas para tomada de decisão.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 63/85</p><p>Parabéns! A alternativa B está correta.</p><p>Podemos encontrar aplicações de séries temporais em diversas</p><p>áreas, entre as quais está a de finanças. Séries financeiras são</p><p>especialmente difíceis de serem estimadas, pois são formadas por</p><p>elementos não considerados por RNN. Se fosse algo simples, quem</p><p>usasse as RNN para estimativas de séries financeiras sempre</p><p>acertaria na composição de seus investimentos. Ainda assim, as</p><p>RNN são importantes nesses estudos para capturar</p><p>comportamentos históricos e fornecer material aos especialistas</p><p>para que possam construir cenários e tomar as decisões mais</p><p>adequadas.</p><p>Questão 2</p><p>Aplicações de RNN podem ser implementadas usando recursos</p><p>computacionais. Um desses recursos é o TensorFlow, que facilita a</p><p>construção da arquitetura de um modelo. Em relação ao</p><p>desenvolvimento de modelos de RNN aplicados para análise de</p><p>séries temporais com a utilização do TensorFlow, assinale a</p><p>alternativa correta:</p><p>D</p><p>Ao aplicar RNN para fazer estudos de séries</p><p>financeiras, é possível ajustar o modelo para</p><p>produzir estimativas precisas.</p><p>E</p><p>Séries financeiras não são influenciadas pelo</p><p>comportamento histórico. Portanto, é inadequado</p><p>utilizar RNN para fazer o estudo delas.</p><p>A</p><p>O TensorFlow já vem instalado com a linguagem</p><p>Python. Desse modo, é mais fácil focar atenção aos</p><p>detalhes da arquitetura do modelo.</p><p>B</p><p>O TensorFlow auxilia na avaliação de um modelo,</p><p>mas é responsabilidade do desenvolvedor</p><p>implementar detalhes sobre as RNN, como a porta</p><p>de esquecimento, no caso da LSTM.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 64/85</p><p>Parabéns! A alternativa C está correta.</p><p>O TensorFlow é o framework mais importante aplicado para</p><p>algoritmos de aprendizado de máquina. Ele facilita a</p><p>implementação de um projeto, pois permite que o programador</p><p>possa focar seu esforço na construção da arquitetura do modelo.</p><p>Ainda assim, o desenvolvedor precisa entender os conceitos de</p><p>RNN e do cenário de aplicação para fazer parametrizações e</p><p>ajustes nos dados e no modelo.</p><p>4 - Aplicação em Processamento de</p><p>Linguagem Natural</p><p>Ao �nal deste módulo, você será capaz de empregar RNN em</p><p>Processamento de Linguagem Natural.</p><p>C</p><p>Apesar de o TensorFlow auxiliar na implementação</p><p>do projeto, é responsabilidade do desenvolvedor</p><p>fazer a separação dos dados para treinamento e</p><p>testes.</p><p>D</p><p>Uma das preocupações do desenvolvedor ao usar</p><p>uma LSTM com o TensorFlow é estabelecer a razão</p><p>entre portas de esquecimento e de atualização.</p><p>E</p><p>Uma das vantagens de usar o TensorFlow para</p><p>implementar RNN é que o modelo se ajusta para</p><p>melhorar sua precisão.</p><p>13/03/24, 19:59 Redes Neurais Recorrentes</p><p>https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 65/85</p><p>Ligando os pontos</p><p>Você sabia que uma das aplicações das redes RNN é para o</p><p>processamento de linguagem natural? Mas o que isso significa em</p><p>termos reais? Para respondermos a estas perguntas, vamos analisar</p><p>algumas situações práticas.</p><p>A empresa Tradução S.A. trabalha com tradução de texto de linguagem</p><p>natural livre para textos com termos técnicos. Apesar de existirem</p><p>soluções semelhantes no mercado, ela se destaca por traduzir textos</p><p>que utilizam expressões coloquiais e gírias utilizadas em ambientes de</p><p>manutenção</p>

Mais conteúdos dessa disciplina