Você está na página 1de 86

18/10/23, 20:04 Redes Neurais Recorrentes

Redes Neurais Recorrentes


Prof. Sérgio Monteiro

false

Descrição

Conceitos sobre Redes Neurais Recorrentes – Recurrent Neural Network


(RNN): diferentes arquiteturas, aplicações para Processamento de
Linguagem Natural (PLN) e estudo de séries temporais.

Propósito

Compreender os conceitos das RNN é fundamental para profissionais


da área de ciência de dados por sua larga utilização no reconhecimento
de padrões em sequências de dados, como textos, números, genomas,
caligrafia, áudio e vídeo.

Preparação

É necessário criar uma conta no Google Colab para executar os


exemplos que foram desenvolvidos na linguagem Python.

Objetivos

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 1/86
18/10/23, 20:04 Redes Neurais Recorrentes

Módulo 1

Fundamentos
Descrever fundamentos das RNN e suas aplicações.

Módulo 2

Arquiteturas
Distinguir as principais variações de arquiteturas de RNN.

Módulo 3

Aplicação em séries temporais


Empregar RNN em predição de séries temporais.

Módulo 4

Aplicação em Processamento de
Linguagem Natural
Empregar RNN em Processamento de Linguagem Natural.

Introdução
Atualmente, temos à disposição tecnologias que nos ajudam a
fazer escolhas de produtos e serviços. Cada vez que acessamos
essas tecnologias, estamos consumindo e, ao mesmo tempo,
produzindo dados. Esses dados revelam muitas coisas sobre nosso
comportamento: o que pensamos sobre determinados assuntos,
quais são nossos interesses profissionais e de entretenimento e
quais são nossos anseios.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 2/86
18/10/23, 20:04 Redes Neurais Recorrentes

Para processar tantos dados e conseguir extrair características que


nos permitam fazer generalizações, podemos utilizar métodos de
aprendizado de máquina. Entre os modelos disponíveis estão as
Redes Neurais Recorrentes – Recurrent Neural Network (RNN).

Essas redes possuem como principal característica trabalhar com


dados sequenciais, o que as torna muito interessantes para lidar
com Processamento de Linguagem Natural (PLN) e estudar séries
temporais. Ambos os assuntos têm diversas aplicações práticas e
métodos bem consolidados que nos permitem desenvolver
projetos com base em RNN.

1 - Fundamentos
Ao final deste módulo, você será capaz de descrever fundamentos
das RNN e suas aplicações.

Ligando os pontos
Você sabia que existem diferentes tipos de redes neurais de
aprendizado de máquina profundo? Sabia que algumas dessas redes
são aplicadas para problemas de predição? Para respondermos a estas
perguntas, vamos analisar algumas situações práticas.

A empresa Sentimentos Classificados S.A. atua no ramo de pesquisa de


mercado. Ela presta serviço para outras companhias com o objetivo de

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 3/86
18/10/23, 20:04 Redes Neurais Recorrentes

fazer um levantamento da opinião do público-alvo a respeito da


qualidade dos serviços e da força da marca dessas empresas.

A fonte de dados da Sentimentos Classificados está, principalmente,


nas redes sociais, onde segue a sequência de passos:

Identificar comentários sobre as empresas do seu portfólio de


clientes

Detectar se o comentário foi feito por uma pessoa ou um programa

Classificar o comentário como positivo, negativo, ou neutro

Até então, esse trabalho era feito por profissionais que utilizavam
ferramentas para auxiliá-los. No entanto, a empresa está tendo muitas
dificuldades de atender a demanda de seus clientes, além, é claro, não
tem nenhuma possibilidade de expandir os negócios dela no atual
cenário. Diante desse quadro, os gestores da empresa tiveram algumas
reuniões para reverter essa situação. Uma das ideias propostas foi a de
utilizar técnicas de aprendizado profundo no contexto do
processamento de linguagem natural. Em especial, foi dado destaque
para um modelo computacional chamado de Rede Neural Recorrente,
ou, como é mais conhecida, RNN. Isso porque esse modelo de rede é
aplicado com bastante sucesso exatamente para esse tipo de situação
que a Sentimentos Classificados atua.

A ideia teve uma boa recepção, mas não foi simples transformá-la em
realidade. Um dos principais problemas foi a carência de profissionais
que dominassem o conhecimento sobre as redes RNN. Em resumo, a
empresa traçou e executou um plano para qualificar seus profissionais,
além de fazer parcerias com algumas instituições de ensino para
acelerar o aprendizado e intensificar a colaboração. Hoje em dia, a
Sentimentos Classificados utiliza redes RNN nas suas soluções e está
obtendo excelentes resultados para seus clientes.

E você, concorda com a estratégia dos gestores da Sentimentos


Classificados S.A. para qualificar os colaboradores dela?

Após a leitura do case, é hora de aplicar seus conhecimentos! Vamos


ligar esses pontos?

Questão 1

A empresa Sentimentos Classificados S.A. utiliza as redes sociais


como uma fonte de dados para realizar análises. Analisando a
estratégia acima, qual o seu entendimento de como as redes RNNs
são úteis para auxiliar esse processo de análise?

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 4/86
18/10/23, 20:04 Redes Neurais Recorrentes

A As redes RNNs são adequadas para identificar os


perfis dos usuários das redes sociais.

A melhor forma de utilizar as redes RNNs são com


B textos não estruturados como é o caso das redes
sociais.

As redes RNNs são a única opção de modelo


C computacional para tratar processamento de
linguagem natural.

As redes RNNs são utilizadas com sucesso para


D
processamento de linguagem natural.

As redes RNNs são muito simples de serem


E aplicadas para processamento de linguagem
natural.

Parabéns! A alternativa D está correta.


A Sentimentos Classificados S.A. observou duas coisas: primeira
delas é que as redes RNNs são excelentes para processamento de
linguagem natural; A segunda coisa é que elas não são simples de
serem usadas na prática. É necessário estudar bastante para
dominá-las e fazer com que apresentem resultados úteis.

Questão 2

O nome da empresa Sentimentos Classificados S.A. é bastante


curioso. Você relacionaria esse nome com as redes RNNs?

Sim, pois chama a atenção do público para a


A
utilização de técnicas de inteligência artificial.

Sim, pois as redes RNNs podem ser úteis para


B
classificar qualquer coisa.

Sim, pois as redes RNNs são adequadas para


C classificar quais sentimentos são refletidos em um
https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 5/86
18/10/23, 20:04 Redes Neurais Recorrentes

texto.

Não, pois as redes RNN não são adequadas para


D
classificar sentimentos.

Não, pois o objetivo da empresa foi apenas fazer um


E
jogo com as palavras.

Parabéns! A alternativa C está correta.


O nome da empresa Sentimentos Classificados é devido ao fato de
que ela classifica um texto escrito em linguagem natural em
positivo, negativo ou neutro. E, para fazer isso, ela utiliza redes
RNNs que são adequadas para este tipo de situação.

Questão 3

Considere o seguinte cenário: os gestores da Sentimentos Classificados


S.A. desejam expandir sua área de atuação para classificar notícias de
redes sociais como falsas, ou verdadeiras. Você acha que faz sentido
utilizar uma rede RNN para esse tipo de aplicação?

Digite sua resposta aqui

Chave de respostaexpand_more

Sim, pois o problema descrito na questão condiz exatamente a


uma aplicação de processamento de linguagem natural. O desafio
aqui é treinar a rede para ser capaz de aprender o que é uma
notícia falsa, ou verdadeira.

Redes neurais
https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 6/86
18/10/23, 20:04 Redes Neurais Recorrentes

As redes neurais artificiais são modelos computacionais baseados no


funcionamento das células neurais biológicas. Elas são aplicadas com
sucesso em diversos contextos relacionados ao reconhecimento de
padrões. Entre as evoluções das redes neurais estão as Redes Neurais
Recorrentes – Recurrent Neural Network (RNN).

Rede Neural Recorrente.

As RNN são modelos de aprendizado profundo que se caracterizam por


usar dados sequenciais ou dados de séries temporais. Entre as
aplicações em que são utilizadas estão:

translate
Processamento de Linguagem
Natural (PLN)
Fazem a tradução entre idiomas, reconhecimento de voz e legenda de
imagens.

calculate
Estimativa de valores
Obtêm o provável próximo valor de uma série temporal a partir da
análise do histórico.

Atenção!
Semelhantemente ao que ocorre com outros tipos de redes neurais
artificiais, as RNN também passam por algoritmos de treinamento, em

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 7/86
18/10/23, 20:04 Redes Neurais Recorrentes

que extraem características dos dados para fazer generalizações.

Conceitos essenciais
As RNN têm muitos conceitos que precisamos conhecer antes de
estudarmos as particularidades de suas arquiteturas. Como veremos, os
termos das redes neurais são bastante referenciados pelos termos
originais em inglês. É importante sabermos disso, pois nos ajuda no uso
de pacotes computacionais para fazermos implementações. Aqui,
vamos apresentar alguns deles de forma resumida:

Características (Features) expand_more

Itens que se destacam nos dados de treinamento e que são


usados para que a rede aprenda. Em muitos textos, são
chamados de “recursos”.

Exemplos expand_more

Conjuntos de dados que são fornecidos para treinar as RNN. São


formados por pares de entrada e saída. A ideia é que o modelo
faça associação entre as características de uma entrada com
determinada saída.

Rótulos (Label) expand_more

Saídas do modelo, também referenciadas como dados nominais.

Camada (Layer) expand_more

Conjunto de nós conectados entre si em uma rede neural. O


modo como as camadas são estruturadas caracteriza as
arquiteturas dos modelos.

Modelo (Model) expand_more

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 8/86
18/10/23, 20:04 Redes Neurais Recorrentes

Representação formal da rede neural.

Camada densa e totalmente conectada expand_more

Todos os nós em uma camada são conectados a cada nó na


camada anterior.

Pesos sinápticos e vieses (Biases) expand_more

Variáveis internas do modelo. São essas variáveis que queremos


otimizar, pois é por meio delas que aplicamos nosso modelo, a
fim de resolver os problemas para os quais foi projetado.

Função de perda (loss) expand_more

Diferença entre a saída desejada e a saída real. Também é


referenciada como função de erro e função de custo.

Erro Quadrático Médio – Mean Squared Error (MSE) expand_more

Tipo de função de perda que considera um pequeno número de


grandes discrepâncias como pior do que um grande número de
pequenas discrepâncias.

Algoritmo de descida do gradiente (Gradient descent) expand_more

Utilizado para ajustar as variáveis internas do modelo, visando


minimizar a função de perda. O método calcula o gradiente da
função de custo associada a cada peso

(w k )

e obtém o vetor gradiente,

ΔJ (w k )

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 9/86
18/10/23, 20:04 Redes Neurais Recorrentes

, usando a seguinte equação:

w k+1 = w k − ηΔJ (w k )

Em que η corresponde ao parâmetro de taxa de aprendizagem.

Otimizador expand_more

Implementação específica do algoritmo de descida de gradiente.


Existem vários algoritmos que podem ser utilizados para isso,
como ADAptive with Momentum (ADAM).

Taxa de aprendizagem expand_more

Valor usado para ajustar os pesos sinápticos durante a execução


do algoritmo de descida do gradiente.

Lote (Batch) expand_more

Conjunto de exemplos usados durante o treinamento da rede


neural.

Época (Epoch) expand_more

Passagem completa sobre todo o conjunto de dados de


treinamento.

Passo para frente (Forward pass) expand_more

Cálculo dos valores de saída a partir da camada de entrada.


Corresponde à primeira fase do algoritmo de treinamento
backpropagation.

Passo de volta (Backward pass) expand_more

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 10/86
18/10/23, 20:04 Redes Neurais Recorrentes

Fase de ajustes das variáveis internas do modelo, de acordo com


o algoritmo do otimizador. O fluxo de execução começa da
camada de saída e vai até a camada de entrada.

Funções de ativação
Este tipo de função é usado para ativar um neurônio por meio de um
sinal. A ideia, basicamente, é que um neurônio receba um valor,
calculado pela combinação da multiplicação dos pesos com suas
respectivas entradas e seus vieses, e o utilize como entrada para uma
função de ativação. Conheça as principais funções de ativação a seguir.

Função sigmoide ou logística


Sua fórmula e derivada são dadas por:

1
σ(z) =
−z
1 + e

σ (z) = σ(z)(1 − σ(z))

Função tangente hiperbólica


Sua fórmula e derivada são dadas por:

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 11/86
18/10/23, 20:04 Redes Neurais Recorrentes

tanh(z) = 2σ(2z) − 1

′ 2
tanh (z) = 1 − tanh (z)

Função ReLU
Sua fórmula e derivada são dadas por:

ReLU(s) = max{0, s}

1, se x ≥ 0

ReLU (s) = {
0, caso contr rio á

Softmax
É uma função que fornece probabilidades para cada classe de saída
possível. Ela é usada no final de uma rede neural. Sua fórmula é dada
por:

zi
e
pi = n zj
∑ e
j=1

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 12/86
18/10/23, 20:04 Redes Neurais Recorrentes

Em que:

pi

i-ésimo resultado da função Softmax.

zi

Resultado para o i-ésimo neurônio de saída.

Quantidade de neurônios de saída.

Aspectos intrínsecos
Nas redes neurais profundas tradicionais, as entradas e saídas são
consideradas independentes entre si. No caso das RNN, as informações
de entradas anteriores são usadas para influenciar a entrada e a saída
atuais, ou seja, a saída delas depende dos elementos anteriores da
sequência.

Exemplo
Quando queremos expressar que apreciamos um filme, podemos usar
uma frase do tipo: “O filme foi muito legal!”. Mas se disséssemos “Legal
muito foi o filme!”, apesar de termos aplicado exatamente as mesmas
palavras, a frase não faria sentido, pois a ordem das palavras é
importante para que a ideia fique clara. Esse exemplo ilustra como as
RNN consideram a posição de cada palavra na frase e usam essa
informação para prever a próxima palavra na sequência.

Outro fato em relação às características que distinguem as RNN de


outros modelos de redes neurais é a forma como o fluxo das
informações é processado. Veja dois exemplos de outros modelos:

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 13/86
18/10/23, 20:04 Redes Neurais Recorrentes

FNN
Quando uma rede neural processa as informações em uma única
direção, que vai da camada de entrada para a camada de saída, ela é
chamada de feedforward (Feedforward Neural Network - FNN), também
conhecida como rede sem realimentação e, ainda, rede direta ou
alimentação avante.

CNN
As Redes Neurais Convolucionais (Convolutional Neural Networks - CNN)
extraem características dos objetos de forma automática e adaptativa
usando camadas em estruturas de hierarquias espaciais e são
aplicadas, principalmente, em visão computacional e reconhecimento de
imagens.

No caso das RNN, as camadas podem ser organizadas para processar


informações em duas direções. Elas usam estruturas de laços para
obter informações ao longo do processo computacional, as quais são
usadas para enviar informações de volta à rede. Isso conecta as
entradas e permite que as RNN processem dados sequenciais e
temporais (BENGIO; SIMARD; FRASCONI, 1994). Na imagem a seguir,
apresentamos o esquema conceitual de RNN:

Esquema básico de RNN.

No esquema, temos:

U = peso da camada oculta;


V = peso da camada de saída;
W = peso da camada de estado oculta;
xt = vetor de entrada no instante t;
st = estado oculto no instante t, calculado como
s t = f (U x t + W s t − 1) , em que f representa a função de ativação.
No caso das RNN, as funções de ativação mais comuns são sigmoide e
ReLU;

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 14/86
18/10/23, 20:04 Redes Neurais Recorrentes

ot = vetor de saída no instante t, calculado como o t .


= f (V s t )

Processo de aprendizado
Para que as RNN possam ser aplicadas para resolver problemas
práticos, elas precisam passar por um processo de aprendizado
parecido com o que ocorre com outras redes neurais tradicionais. As
redes neurais tradicionais são treinadas por meio do algoritmo
backpropagation, que atualiza os pesos sinápticos entre os neurônios,
de modo a extrair características (features) dos dados de treinamento,
usadas para fazer generalizações.

Como vimos, as RNN usam as entradas atuais e consideram as que


ocorreram antes delas para obter suas saídas. Isso representa uma
relação de dependência da saída atual com a entrada atual e das
entradas anteriores, o que chamamos de “memória”. As RNN são
treinadas, principalmente, pelo algoritmo BPTT, que tem o mesmo
princípio de funcionamento do backpropagation: treinar o modelo a
partir do cálculo dos erros de sua camada de saída para sua camada de
entrada. Esse cálculo nos permite ajustar os parâmetros do modelo de
forma adequada. Como as RNN compartilham seus parâmetros em
cada camada, o BPTT soma os erros em cada etapa de tempo, enquanto
as redes feedforward não precisam somar os erros, pois não
compartilham parâmetros entre suas camadas.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 15/86
18/10/23, 20:04 Redes Neurais Recorrentes

Nuvem de palavras.

BPTT
Backpropagation Through Time ou Retropropagação ao Longo do Tempo.

Devido às características das RNN, existem dois problemas que podem


ocorrer no processo de treinamento, devido à dependência das
camadas: dissipação do gradiente e explosão do gradiente. Felizmente,
existem soluções para esses problemas.

Dissipação do gradiente (Vanishing


gradient)
Quando este problema ocorre, o modelo não aprende nada. Nessa
situação, o gradiente se torna muito pequeno. Isso significa que a

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 16/86
18/10/23, 20:04 Redes Neurais Recorrentes

mudança dos pesos é insignificante para minimizar a função de erro. As


soluções para esse problema são:

Atribuir pesos iniciais


Para evitar que o algoritmo de treinamento atribua valores muito
pequenos para os pesos.

Aplicar o modelo indicado


Algumas redes neurais que já são estruturadas para evitar esse tipo de
problema – a mais importante é a LSMT.

LSTM
Long Short-Term Memory Networks ou Unidades de Memória Longa de
Curto Prazo

Explosão do gradiente
Nesta situação, ocorre exatamente o contrário em relação ao caso da
dissipação: o gradiente cresce excessivamente, e o modelo nunca
converge. As soluções para esse problema são:

Parar de retropropagar após determinada quantidade de iterações;


Penalizar ou reduzir artificialmente o gradiente;
Impor um limite máximo em um gradiente – técnica chamada de
“recorte de gradiente”.

Aplicações
As RNN são aplicadas em contextos em que os dados são sequenciais,
como nos casos de problemas de predição de séries temporais e
processamento de linguagem natural (SOCHER et al., 2013; BAHDANAU;
CHO; BENGIO, 2015).

Vamos apresentar alguns exemplos que nos ajudarão a visualizar casos


de sucesso de aplicações de RNN e como podemos adaptá-las para
outras situações.

Modelagem de linguagem e
https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 17/86
18/10/23, 20:04 Redes Neurais Recorrentes

geração de texto
Quando assistimos a algum filme ou lemos alguma história e
observamos os diálogos dos personagens, em muitos casos, podemos
ter uma boa noção do que eles vão falar em seguida. Isso ocorre porque
fazemos analogias com outras situações que já observamos e
conseguimos capturar características que nos ajudam a fazer
generalizações. De forma semelhante ocorre com as RNN.

As RNN recebem uma sequência de palavras


como entrada e, em seguida, tentam
predizer a possibilidade da próxima palavra.

No contexto de tradução de idiomas, essa abordagem é bastante


interessante, pois a frase mais provável tem mais chances de ser a
correta.

Máquina de tradução
No exemplo de aplicação anterior, estávamos interessados em predizer
a próxima palavra. Agora, nosso interesse é entender como as RNN
podem ser usadas para traduzir texto de um idioma para outro.

Se você já usou uma ferramenta para tradução de idiomas, é bastante


provável que tenha sido com RNN, pois muitos sistemas de tradução
aplicam alguma versão desse tipo de rede neural. Basicamente, essas
aplicações recebem como entrada um texto com o idioma de origem e
produzem um texto traduzido para o idioma de destino que o usuário
solicitou.

Um dos grandes exemplos de programas de tradução que utiliza RNN é o Google Translate.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 18/86
18/10/23, 20:04 Redes Neurais Recorrentes

Reconhecimento de fala

Reconhecimento de fala.

Uma aplicação bastante interessante de RNN é o reconhecimento de


fala. Para isso, é necessário que as RNN recebam ondas sonoras como
fonte de entrada para predizer segmentos fonéticos.

E como podemos fornecer esses dados como entrada para o modelo?

Por meio do processamento das ondas sonoras, com a transformação


em sequências numéricas, que podem ser trabalhadas pela rede. A rede
RNN calculará os fonemas e, na sequência, gerará um segmento
fonético.

Gerando descrições de imagens


Este problema consiste em descrever o que está ocorrendo dentro de
uma imagem. Vamos ver um exemplo para entender melhor:

Pessoas correndo.

O que podemos interpretar da foto que estamos vendo?

Algumas pessoas estão participando de uma competição de corrida em


um dia claro. Se olharmos com mais cuidado, poderemos encontrar

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 19/86
18/10/23, 20:04 Redes Neurais Recorrentes

mais características que informam melhor sobre o que está


acontecendo. Essas descrições das imagens podem ser obtidas com
uma combinação de CNN e RNN.

As redes CNN são um tipo de rede neural utilizado para problemas que
envolvem visão computacional. Então, o processo tem duas etapas:

segment description
CNN RNN
Fazem a segmentação.
arrow_forward Usam os dados
segmentados para
recriar a descrição.

Tag de vídeo
Outra situação muito útil para aplicação de RNN é fazer pesquisa de
vídeo: fornecemos como entrada para o modelo uma descrição da
imagem de um vídeo, e a rede retorna o quadro do vídeo.

Resumo do texto
Este tipo de aplicação ajuda a resumir o conteúdo de textos, por meio do
processamento de linguagem natural, e a personalizá-los para entrega
em aplicativos que não podem suportar grandes volumes.

Análise de centros de suporte


Atualmente, muitos serviços de suporte são realizados remotamente
por meio de chamadas telefônicas. Ao final das chamadas, há duas
situações:

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 20/86
18/10/23, 20:04 Redes Neurais Recorrentes

thumb_up thumb_down_alt
O problema foi
close O problema não foi
resolvido. resolvido.

Uma aplicação muito interessante para RNN é fazer o processamento


do áudio do suporte e analisá-lo com base no resultado da chamada.
Em outras palavras, estamos interessados em saber se a equipe de
suporte teve sucesso e quais foram as medidas tomadas para resolver o
problema do cliente. Dessa forma, esse aprendizado pode ser analisado
e reaplicado a outros cenários semelhantes ou pode servir para treinar
outras pessoas de suporte.

A evolução desse processo é fazer a


automatização com base no uso de RNN, de
modo a processar e sintetizar a fala real da
chamada para fins de análise.

Aplicações em séries temporais


As séries temporais são mais um exemplo de dados sequenciais. Há
muitas situações em que estamos interessados em estimar qual será o
próximo valor da série e identificar comportamentos anômalos. Entre as
aplicações de séries temporais estão a análise de séries financeiras,
níveis de poluição e estudos de fenômenos meteorológicos.

Exemplo de série temporal.

Saiba mais
https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 21/86
18/10/23, 20:04 Redes Neurais Recorrentes

É claro que as aplicações de RNN não se limitam às que apresentamos


aqui. Existem exemplos de aplicações para aprendizado de ritmo,
composição musical, reconhecimento de caligrafia, aprendizagem de
gramática, reconhecimento de ações humanas, além de diversas tarefas
de previsão na área de gerenciamento de processos de negócios e
previsão em caminhos de assistência médica.

Vantagens e desvantagens
Conheça as vantagens e desvantagens de utilizar as RNN:

add_circle remove_circle
Vantagens Desvantagens
Podem processar O cálculo de
entradas de qualquer treinamento é lento
comprimento. devido à sua natureza
Lembram de cada recorrente.
close
informação ao longo do São propensas a
tempo e, por causa problemas como
disso, encaixam-se bem explosão e
em diversas aplicações desaparecimento de
sequenciais. gradiente.
Os pesos podem ser
compartilhados entre as
etapas de tempo.

video_library
Fundamentos das redes
recorrentes
Está na hora de nosso bate-papo sobre os principais conceitos sobre
Redes Neurais Recorrentes com foco na arquitetura básica da rede e em
algumas de suas principais aplicações. Vamos lá!

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 22/86
18/10/23, 20:04 Redes Neurais Recorrentes

Falta pouco para atingir seus objetivos.


Vamos praticar alguns conceitos?

Questão 1

As RNN fazem parte dos algoritmos de aprendizado de máquina.


Como se trata de um tipo de rede neural, elas incorporam diversos
aspectos fundamentais para seu funcionamento. Assinale a
alternativa que apresenta um desses aspectos:

As RNN são adequadas para situações em que os


A
dados não possuem dependência entre si.

As RNN são caracterizadas por processos


B sequenciais de processamento, que reduzem sua
dependência do conjunto de dados de testes.

As RNN precisam ser implementadas com funções


C
de ativação ReLU para fazer classificações.

O processo de incorporação de conhecimento das


D RNN está diretamente relacionado à diversidade do
conjunto de dados de treinamento.

A principal característica das RNN é a utilização de


E camadas ocultas, que eliminam a dependência
relacional entre os dados.

Parabéns! A alternativa D está correta.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 23/86
18/10/23, 20:04 Redes Neurais Recorrentes

De forma semelhante ao que ocorre com outros tipos de redes


neurais, as RNN têm por objetivo extrair informações do conjunto
de dados de treinamento que sejam úteis para fazer generalizações.
Essas informações são chamadas de características, também
conhecidas como recursos.

Questão 2

A recorrência é uma propriedade explorada por diversos problemas


de computação. Um exemplo clássico de aplicação de recorrência
ocorre no fatorial de um número, em que o cálculo do fatorial de
determinado número natural n depende do fatorial de n-1. Assinale
a alternativa que apresenta a aplicação correta das RNN para
resolver problemas:

Uma das aplicações clássicas de recorrência é a


A segmentação de imagens, que é resolvida com
sucesso por RNN.

Devido à sua natureza recorrente, as RNN são


B especialmente adequadas para reconhecimento de
imagens.

As RNN são adequadas para prever a próxima


C
palavra de uma conversa.

Devido às características de recorrência das RNN,


D sua aplicação mais adequada é para a resolução de
problemas de combinatória.

As RNN têm a capacidade de gerar informações que


E as colocam como um exemplo de aprendizado de
máquina não supervisionado.

Parabéns! A alternativa C está correta.


O principal aspecto das RNN que as destacam em relação a outros
tipos de redes neurais é a captura de dependências entre os dados.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 24/86
18/10/23, 20:04 Redes Neurais Recorrentes

Isso as torna especialmente interessantes para tratar problemas de


séries temporais e PLN.

2 - Arquiteturas
Ao final deste módulo, você será capaz de distinguir as principais
variações de arquiteturas de RNN.

Ligando os pontos
Você sabe qual a importância de uma arquitetura de rede neural RNN?
Sabia que elas podem ter diferentes arquiteturas? Para respondermos a
estas perguntas, vamos analisar algumas situações práticas.

A empresa RNN Arquitetura S.A. é especializada no desenvolvimento de


arquitetura para redes neurais recorrentes (RNNs). É um ramo muito
específico, mas, ainda assim, tem altíssimo valor agregado. Isso porque
essas redes podem ser aplicadas a diversas áreas, como:

Previsão de preços de ativos do mercado financeiro;

Previsão de chuvas para determinada região;

Construção de legendas automáticas;

Análise de sentimentos de textos de escrita livre.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 25/86
18/10/23, 20:04 Redes Neurais Recorrentes

E a lista de aplicações está bem longe de se encerrar, mas já dá uma


boa ideia da importância desse tipo de rede. Mas para construir uma
rede RNN que produza excelentes resultados é necessário investir em
uma arquitetura e valores de parâmetros eficientes. E isso não é um
trabalho trivial. Muito pelo contrário! Foi aí que os fundadores da RNN
Arquitetura encontraram uma oportunidade de negócio: projetar e
desenvolver arquiteturas eficientes, além de realizar um elaborado
processo de testes que auxiliasse para fornecer os valores adequados
para os parâmetros da rede.

Existe mais um ponto que torna o modelo de negócio da RNN


Arquitetura ainda mais interessante: ela atua com diversas arquiteturas
de RNNs. Isso é fundamental, pois a utilização da rede para
determinadas finalidades está completamente vinculada à sua
arquitetura.

Para trabalhar em ramo tão específico, a RNN Arquitetura conta com um


programa de treinamento intenso em que são fornecidos cursos para
seus colaboradores. Além disso, ela faz parcerias com instituições de
ensino para buscar talentos que ainda estejam se formando.

E você, acha que a estratégia dos gestores da RNN Arquitetura vai


ajudar a expandir os negócios?

Após a leitura do case, é hora de aplicar seus conhecimentos! Vamos


ligar esses pontos?

Questão 1

Como você viu, a empresa RNN Arquitetura S.A. atua em um ramo


muito específico que é o de projetar e ajustar a arquitetura de uma
rede RNN. Na sua visão e no contexto da estratégia acima, qual a
importância da estrutura de uma arquitetura para uma rede RNN?

Garante que os resultados produzidos pela rede


A
serão de excelente qualidade.

Permite que a rede RNN possa ser aplicada para


B
aplicações de visão computacional.

C Torna mais fácil de se resolver problemas.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 26/86
18/10/23, 20:04 Redes Neurais Recorrentes

Permite que várias pessoas possam colaborar no


D
processo de construção.

E Influencia todo o comportamento da rede.

Parabéns! A alternativa E está correta.


Aspectos da arquitetura de uma rede RNN são fundamentais para o
tipo de aplicação que ela poderá ser utilizada, portanto influenciam
o comportamento da rede, como bem foi observado pela RNN
Arquitetura.

Questão 2

Como você viu, a parametrização de uma rede RNN também tem


considerável impacto sobre o desempenho dela. Como você
visualiza ser possível fornecer bons valores para as redes RNN?

A Utilizando valores padrões fornecidos na literatura.

B Através de muitos testes.

Basta colocar todos os valores iniciais iguais a zero


C que a rede vai se ajustar quando iniciar o
treinamento.

D O ideal é produzir valores aleatórios.

O mais importante é que os valores sempre sejam


E
os mesmos para todas as rodadas da rede.

Parabéns! A alternativa B está correta.


A RNN Arquitetura nos mostrou no texto que o processo de
parametrização de uma rede RNN envolve muitos testes. Logo que
fizermos a execução deles, precisamos estudar o comportamento
da rede e adotar os valores dos que produziram o melhor resultado.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 27/86
18/10/23, 20:04 Redes Neurais Recorrentes

Questão 3

Considere o seguinte cenário: na empresa que você trabalha, existe um


movimento para utilizar as redes RNN, mas também existe uma
resistência quanto a isso, pois alguns argumentam que a arquitetura
dela é muito complexa. Neste cenário, como você argumentaria a favor
do uso das redes RNN?

Digite sua resposta aqui

Chave de respostaexpand_more

De fato, a arquitetura de uma rede RNN não é simples. Como


vimos no caso da RNN Arquitetura S.A., existem muitos detalhes
que devem ser tratados explicitamente e não há uma referência
padrão que possa ser usada, é necessário realizar testes. Por
outro lado, as redes RNNs possuem excelentes casos de sucesso
para tratar problemas de dados sequenciais, como processamento
de linguagem natural e predição de valores. Portanto, vale a pena o
investimento para aprender como atuam e aplicá-las para resolver
problemas para as quais funcionam muito bem.

Visão geral da arquitetura


As RNN são redes neurais usadas para processar dados sequenciais.
Como vimos nas aplicações de redes recorrentes, existem muitos
exemplos em que os dados são sequenciais. Vejamos alguns:

ondemand_video
Os vídeos são formados por uma sequência de quadros.

music_note
https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 28/86
18/10/23, 20:04 Redes Neurais Recorrentes

A música é a combinação de uma sequência de elementos sonoros.

font_download
O texto é tipicamente sequencial, pois surge de uma combinação de
caracteres.

As RNN fazem a modelagem de dados sequenciais por meio da


persistência dos dados que foram aprendidos nas instâncias anteriores.

Exemplo
Em um diálogo entre personagens, os argumentos são construídos com
o que um personagem disse em dado momento, para que haja
coerência no fluxo da conversa. De modo semelhante, as RNN
aprendem e se lembram dos dados para formular uma decisão baseada
no aprendizado adquirido na instância anterior.

Uma característica das RNN que as diferencia de outras redes neurais é


que elas não limitam nem a entrada, nem a saída como um conjunto de
tamanho fixo, e nos permitem treinar o modelo como uma sequência de
dados. Portanto, para que possamos utilizar as RNN da melhor forma,
precisamos conhecer aspectos sobre sua arquitetura.

Vamos começar nossa abordagem com os tipos de RNN. Essas redes


neurais podem ser classificadas em quatro tipos básicos de estrutura.
São eles:

Um-para-um

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 29/86
18/10/23, 20:04 Redes Neurais Recorrentes

Um-para-muitos

Muitos-para-um

Muitos-para-muitos
Vamos analisar essas categorias com mais detalhes.

Estrutura um-para-um
É uma estrutura de rede neural em que os comprimentos da entrada e
da saída são fixos e independentes da informação anterior. Na imagem
a seguir, apresentamos um exemplo de RNN com estrutura um-para-um:

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 30/86
18/10/23, 20:04 Redes Neurais Recorrentes

Estrutura um-para-um.

Esse tipo de estrutura de RNN pode ser aplicado, por exemplo, para
classificação de imagens.

Estrutura um-para-muitos
É uma estrutura de RNN em que a entrada possui um tamanho fixo de
informação e que fornece uma sequência de dados como saída. Esse
tipo de estrutura é aplicado a problemas sequenciais em que os dados
de entrada têm uma etapa de tempo, e a saída contém um vetor de
valores múltiplos ou etapas de tempo múltiplas. Assim, há uma única
entrada e uma sequência de saídas. Na imagem a seguir, mostramos
um exemplo dessa estrutura de RNN:

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 31/86
18/10/23, 20:04 Redes Neurais Recorrentes

Estrutura um-para-muitos.

Um exemplo de aplicação dessa estrutura ocorre na legendagem de


imagens, quando o modelo recebe uma imagem como entrada e produz
uma frase de palavras que faz uma descrição dela.

Estrutura muitos-para-um
Neste caso, a rede recebe uma sequência de informações como entrada
e produz uma saída de tamanho fixo. Na imagem a seguir, mostramos
esse tipo de estrutura:

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 32/86
18/10/23, 20:04 Redes Neurais Recorrentes

Estrutura muitos-para-um.

Essa estrutura pode ser aplicada para fazer a análise de sentimentos e a


classificação de texto. No caso da análise de sentimentos, a entrada de
dados é uma frase, e a saída é uma classificação que expressa o
sentimento positivo ou negativo da frase.

Estrutura muitos-para-muitos
Esta estrutura recebe uma sequência de informações como entrada e
produz uma sequência de saídas recorrentes. Veja:

Estrutura muitos-para-muitos.

Um exemplo de aplicação dessa arquitetura é a tradução automática. As


RNN leem qualquer frase em um idioma de origem e, em seguida,
produzem a frase em um idioma de destino.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 33/86
18/10/23, 20:04 Redes Neurais Recorrentes

Existe, ainda, outra versão para a estrutura muitos-para-muitos, em que


o comprimento da entrada é igual ao da saída. Na imagem a seguir,
apresentamos um exemplo:

Outra versão de estrutura muitos-para-muitos.

Essa outra estrutura pode ser aplicada no problema de reconhecimento


de entidades nomeadas. Tal problema consiste em identificar elementos
no texto que sejam relevantes para a compreensão dentro de um
contexto. Um exemplo aplicado à segurança pública corresponde a
identificar acusados e vítimas dentro do texto do Boletim de Ocorrência.

Arquiteturas LSTM e GRU


As arquiteturas LSTM e GRU foram criadas como solução para tratar o
problema de desaparecimento de gradiente que ocorre nas redes
recorrentes tradicionais. Elas têm mecanismos internos, chamados
portas, que podem regular o fluxo de informações. Devido à importância
dessas arquiteturas, vamos analisá-las com mais detalhes.

GRU
Gate Recurrent Unit ou Unidade Recorrente Bloqueada.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 34/86
18/10/23, 20:04 Redes Neurais Recorrentes

LSTM
As RNN são apropriadas para trabalhar com dados baseados em
sequência, mas, à medida que as sequências aumentam, elas começam
a perder informações sobre a sequência de dados ao longo do tempo.
Como consequência, as saídas podem ser bem diferentes do que
esperávamos.

Para tratar o problema de perda de


informações, foi desenvolvida a arquitetura
de rede LSTM.

As LSTM têm a capacidade de lembrar de informações de dados


baseados em sequências bastante longas – esse é o motivo do nome
“memória longa” – e evitar problemas de dissipação do gradiente, que
pode ocorrer em redes neurais tradicionais treinadas pelo algoritmo
backpropagation. Normalmente, as LSTM são compostas por quatro
componentes:

Uma célula de memória


Guarda informações importantes por intervalos arbitrários de tempo.

Uma porta de entrada


Controla a entrada de informações em cada intervalo de tempo.

Uma porta de saída


Controla quanta informação é enviada para a próxima célula ou camada
superior.

Uma porta de esquecimento


Controla a quantidade de dados que serão perdidos em cada etapa de
tempo.

Cada porta está conectada a outra por meio de sua entrada e saída, e
várias conexões são recorrentes. Na imagem a seguir, apresentamos a
estrutura de uma LSTM:

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 35/86
18/10/23, 20:04 Redes Neurais Recorrentes

Estrutura de uma LSTM.

Aqui, vemos muitos elementos estruturais que compõem a arquitetura


da LSTM. Vamos analisá-los com cuidado:

east Ct

O símbolo C t representa blocos de memória,


chamados células, que compõem a LSTM.

east ht

O símbolo h t representa o estado oculto. Dois


estados são transferidos para a próxima célula: o
estado da célula C t e o estado oculto h t . O estado
da célula é a cadeia principal do fluxo de dados, o
que permite aos dados fluir para frente sem ser
alterados.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 36/86
18/10/23, 20:04 Redes Neurais Recorrentes

σ e tanh
east
Os símbolos σ e tanh representam,
respectivamente, as funções sigmoide e tangente
hiperbólica. Os dados podem ser adicionados ou
removidos do estado da célula por meio de portas
sigmoides. Uma porta é semelhante a uma camada
ou série de operações de matriz, que contêm pesos
individuais diferentes, representados pelo símbolo
W.

east ft

O símbolo f t representa a função de ativação da


porta de esquecimento. Sua fórmula é dada por:

f t = σ (W f [h t−1 , x t ] + b f )

~
east Ct

~
O símbolo C t representa o vetor candidato. Sua
fórmula é dada por:

~
C t = tanh (W C [h t−1 , x t ] + b C )

east it

O símbolo i t representa a função de ativação da


porta de entrada que será combinada com o vetor
~
candidato (C t ). Sua fórmula é dada por:

i t = σ (W i [h t−1 , x t ] + b i )

Ainda há mais alguns passos.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 37/86
18/10/23, 20:04 Redes Neurais Recorrentes

east Precisamos calcular os valores da célula C t , de o t e


ht . O valor da célula C t é obtido pela fórmula:

~
C t = f t C t−1 + i t C t

east Por fim, os valores de o t e h t são obtidos pelas


fórmulas:

o t = σ (W o [h t−1 , x t ] + b o )

h t = o t tanh (C t )

Atenção!
As LSTM são projetadas para evitar o problema de dependência de
longo prazo, porque usam portas para controlar o processo de
memorização.

GRU
Uma arquitetura de RNN que pode ser vista como uma simplificação da
LSTM é a GRU. Ela combina as portas de esquecimento e de entrada em
uma única porta, que é chamada de porta de atualização (update gate).
Além disso, a GRU possui uma porta de redefinição (reset gate). Na
imagem a seguir, mostramos um diagrama simplificado da GRU:

Arquitetura básica da GRU.

Semelhante à LSTM, a GRU trata do problema da dissipação do


gradiente por meio de suas portas. Agora, vamos analisar um pouco
mais a função das portas da GRU:

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 38/86
18/10/23, 20:04 Redes Neurais Recorrentes

Porta de atualização (update gate) expand_more

Esta porta é responsável pelas informações que serão passadas


adiante. A fórmula da porta de atualização para a etapa de
tempo (t) é dada por:

z t = σ (W z x t + U z h t−1 )

Isso significa que, quando x_t conecta-se à unidade de rede, ele


será multiplicado por seu próprio peso (W z ). A mesma lógica se
aplica para h t−1 , que contém as informações das unidades t-1
anteriores e é multiplicado por seu próprio peso (U z ). Em
seguida, somamos os resultados das multiplicações e aplicamos
uma função de ativação sigmoide, que vai produzir um valor
entre 0 e 1.

Porta de redefinição (reset gate) expand_more

O modelo usa esta porta para decidir quanto das informações


anteriores deve ser esquecido. A fórmula da porta de redefinição
é dada por:

r t = σ (W r x t + U r h t−1 )

Como podemos notar, essa fórmula é muito parecida com a da


porta de atualização. Basicamente, a diferença entre elas está
nos pesos. Como fizemos anteriormente, multiplicamos h t−1 e
xt por seus respectivos pesos, somamos os resultados e
aplicamos a função sigmoide.

Ainda precisamos tratar de mais dois passos: obter o conteúdo da


memória atual e a memória final na etapa de tempo atual. Então, vamos
analisar como esses passos são feitos:

Conteúdo da memória atual expand_more

Primeiro, começamos com o uso da porta de redefinição (reset


gate). Calculamos o novo conteúdo de memória da seguinte
forma:

~
h t = tanh (W x t + r t ⊙ U h t−1 )

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 39/86
18/10/23, 20:04 Redes Neurais Recorrentes

O símbolo ⊙ é usado para representar o produto de Hadamard,


que, basicamente, multiplica os elementos correspondentes de
duas matrizes e obtém uma matriz de mesmas dimensões. Por
exemplo, vamos imaginar duas matrizes (A e B), ambas com
duas linhas e duas colunas. Agora, vamos aplicar o produto de
Hadamard:

a 11 a 12 b 11 b 12 a 11 b 11 a 12 b 12
[ ] ⊙ [ ] = [ ]
a 21 a 22 b 21 b 22 a 21 b 21 a 22 b 22

Conteúdo da memória final na etapa de tempo atual expand_more

A rede precisa calcular o vetor h t , que contém as informações da


unidade atual e as transmite para a rede. Para isso, ela utiliza a
porta de atualização por meio do conteúdo da memória atual e
das etapas anteriores. Isso é feito da seguinte maneira:

~
h t = z t ⊙ h t−1 + (1 − z t ) ⊙ h t

Todas essas etapas mostram como as GRU são capazes de armazenar


e filtrar as informações, usando suas portas de atualização e
redefinição. Dessa forma, a arquitetura GRU elimina o problema do
gradiente de desaparecimento, pois o modelo não está levando a nova
entrada todas as vezes, mas mantém as informações relevantes,
passando-as para as próximas etapas de tempo da rede.

RNN bidirecionais
Uma variação da arquitetura das RNN são as RNN bidirecionais. Elas
são formadas por uma composição de duas RNN que extraem
informações dos dados em dois sentidos distintos. Dessa forma, podem
extrair características das entradas anteriores para fazer predições
sobre o estado atual, semelhante às RNN convencionais, e extrair
informações sobre dados futuros para melhorar a precisão das
estimativas. Na imagem a seguir, apresentamos uma RNN bidirecional:

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 40/86
18/10/23, 20:04 Redes Neurais Recorrentes

Estrutura geral de RNN bidirecionais.

As RNN bidirecionais são especialmente interessantes para PLN, pois é


mais fácil fazer uma predição sobre uma palavra no texto, quando
conhecemos o contexto. Para analisar um exemplo concreto, considere
a seguinte frase:

Eu quero _______ sobre redes neurais recorrentes bidirecionais.

Nosso objetivo é encontrar uma palavra que preencha a lacuna, de


modo que a frase faça sentido. Em que palavra você pensaria? Muito
provavelmente, você escolheria a palavra “aprender”.

video_library
Arquiteturas de redes
neurais recorrentes
Está na hora de nosso bate-papo sobre arquitetura das Redes Neurais
Recorrentes com especial destaque para as arquiteturas LSTM, GRU e
RNN bidirecionais. Vamos lá!

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 41/86
18/10/23, 20:04 Redes Neurais Recorrentes

Falta pouco para atingir seus objetivos.


Vamos praticar alguns conceitos?

Questão 1

Entre as aplicações das RNN estão o PLN e os processamentos de


séries temporais. Essas categorias de problemas estão presentes
em diversas situações do dia a dia. Assinale a alternativa que
justifique a adequação das RNN para PLN e séries temporais:

Quando o objetivo de uma aplicação é extrair


informações sobre a dependência dos dados, as
A arquiteturas adequadas de RNN são um-para-muitos
e muitos-para-um, uma vez que usam o efeito
multiplicativo da informação.

Por possuírem arquiteturas do tipo um-para-um, as


RNN podem relacionar o dado de determinado
B
período com o dado do próximo e são ideais para
processamento de séries temporais.

As arquiteturas de múltiplas etapas têm a


capacidade de relacionar dados de diferentes
C
períodos e são ideais para classificação de
imagens.

As RNN extraem as características de dados


D dependentes por meio do uso de informações
processadas em etapas anteriores.

As RNN obtêm a aderência aos dados sequenciais


E por meio de uma arquitetura que combina dados de
https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 42/86
18/10/23, 20:04 Redes Neurais Recorrentes

entrada e saída de forma isolada.

Parabéns! A alternativa D está correta.


As diferentes arquiteturas de RNN são estruturadas para fazer a
persistência do aprendizado em etapas anteriores. Portanto, o
aprendizado é entendido como um processo contínuo. Isso faz com
que as RNN sejam adequadas para extrair informações de dados
sequenciais que são por natureza relacionados entre si, como são
os casos das séries temporais e da linguagem natural.

Questão 2

A LSTM é uma arquitetura das RNN que previne o problema da


dissipação do gradiente. Sua estrutura é constituída por portas com
objetivos específicos para o funcionamento da rede. Assinale a
alternativa correta sobre os itens que compõem a estrutura da
LSTM:

A complexidade dos dados de entrada é tratada


A pelos componentes da LSTM por meio da função
ativação Softmax.

Para a LSTM, todas as informações são importantes


B e consideradas em todas as etapas do
processamento por seus componentes.

O processamento dos dados é feito por meio da


C execução de funções de ativação, que medem a
probabilidade de uma informação ser esquecida.

O principal objetivo dos elementos constituintes da


D LSTM é garantir que as informações sejam enviadas
para a próxima etapa.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 43/86
18/10/23, 20:04 Redes Neurais Recorrentes

Um dos componentes da LSTM é responsável por


E desconsiderar informações que não são úteis para
extrair informações do conjunto de treinamento.

Parabéns! A alternativa E está correta.


A LSTM é formada por quatro componentes que são responsáveis
por memorizar e esquecer a informação, além de controlar a
entrada e saída das informações ao longo do tempo. Dessa forma,
a LSTM retém a informação que é, de fato, relevante para extrair as
características dos dados de treinamento e fazer generalizações.

3 - Aplicação em séries temporais


Ao final deste módulo, você será capaz de empregar RNN em
predição de séries temporais.

Ligando os pontos
Você sabia que as redes RNN são aplicadas com sucesso para
problemas de predição? Mas como isso pode ser feito no dia a dia? Para
respondermos a estas perguntas, vamos analisar algumas situações
práticas.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 44/86
18/10/23, 20:04 Redes Neurais Recorrentes

A empresa Pague Certo S.A. atua no ramo de análise de precificação de


investimentos financeiros no setor de energia elétrica. Ela estuda as
séries históricas das diversas empresas de energia que negociam na
bolsa de valores e, a partir disso, faz uma predição dos preços dos
ativos negociados por essas empresas. Dessa forma, ele fornece
recomendações para seus clientes a respeito dos valores desses ativos.
Assim, alguns dessas negociações podem gerar uma oportunidade de
negócio, ou um grande problema, caso os ativos estejam precificados
acima do que, realmente, valem.

Para fazer essas estimativas de preços dos ativos, a Pague Certo


utilizava, até então, técnicas de estatística para análise de séries
temporais. No entanto, os gestores perceberam algumas limitações
dessas técnicas e passaram a procurar por novos métodos que fossem
mais flexíveis e auxiliassem os analistas financeiros a tomarem
decisões mais robustas. A solução que encontraram foi a utilização de
redes neurais recorrentes (RNNs). Essas redes têm uma estrutura
adequada para trabalhar com dados sequenciais, como é o caso de
séries temporais financeiras. Além disso, sua arquitetura permite extrair
características dos dados de forma similar à que um especialista faria.
Isso, por si só, já é uma vantagem, pois simula bem a forma como um
bom analista faria para analisar os preços dos ativos. Adiciona-se a
essa vantagem o fato de que utilizar as RNNs permite dar escalabilidade
ao processo de análise.

Como sempre, o início da incorporação das redes RNNs teve alguns


desafios que passam pela necessidade de aprender os conceitos,
arquiteturas e técnicas de treinamento e validação. No entanto, esses
desafios foram superados e, atualmente, a Pague Certo tem produzido
bons resultados para seus clientes.

E você, concorda com a decisão dos gestores da Pague Certo S.A. de


utilizar redes RNN para estimar os preços dos ativos do setor de
energia?

Após a leitura do case, é hora de aplicar seus conhecimentos! Vamos


ligar esses pontos?

Questão 1

Como você leu no texto, a Pague Certo S.A. utiliza redes RNN para
estimar preços de ativos do setor elétrico. Analisando a decisão
dos gestores, na sua visão, qual é o motivo da empresa ter
escolhido um segmento específico para aplicar as redes RNN?

A Devido à disponibilidade dos dados históricos.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 45/86
18/10/23, 20:04 Redes Neurais Recorrentes

B Na verdade, não há um motivo específico.

Devido à grande diversidade de dados disponíveis


C
no setor de energia elétrica.

Provavelmente, foi uma estratégia para dominar


D
uma área e expandir para outras.

Para aumentar as chances da rede aprender o


E
comportamento dos dados.

Parabéns! A alternativa E está correta.


A Pague Certo S.A. fez a escolha por focar o aprendizado da rede
RNN no segmento de energia elétrica, com o objetivo de que a rede
pudesse se especializar em uma área e, assim, aumentar as suas
chances de acertar os preços dos ativos das empresas daquele
setor.

Questão 2

Como você leu no texto, a Pague Certo S.A. atua com estimativas
de precificação de ativos de empresas do setor elétrico negociados
na bolsa de valores. Na sua visão, qual o motivo que levou a Pague
Certo a escolher as redes RNN para esse objetivo?

Porque as redes RNN não são muito sensíveis aos


A
aspectos estruturais de arquitetura.

Porque as redes RNN funcionam muito bem para


B
predição de séries temporais.

Porque há preferência dos gestores da Pague Certo


C
por esse tipo de modelo

Porque foi uma maneira de destacar a empresa em


D
relação aos concorrentes.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 46/86
18/10/23, 20:04 Redes Neurais Recorrentes

Porque todas as empresas que trabalham com


E predição estão migrando para usar técnicas de
inteligência artificial.

Parabéns! A alternativa B está correta.


A Pague Certo S.A. escolheu utilizar redes RNNs para estimar
valores de preços de ativos porque que elas funcionam muito bem
para esse tipo de aplicação.

Questão 3

Considere o seguinte cenário: você foi contratado pela Pague Certo S.A.
para auxiliar a expandir os negócios da empresa sem mudar o foco de
atuação. Com base em sua experiência, como você cumpriria essa
missão?

Digite sua resposta aqui

Chave de respostaexpand_more

A Pague Certo S.A. atua com predição de preços de ativos de


empresas do setor elétrico negociados na bolsa de valores
utilizando redes RNNs. Portanto, é natural procurar outros
mercados, como o de petróleo e gás para aplicar o mesmo
processo com alguns ajustes. Dessa forma, não há uma grande
mudança na forma de trabalhar da empresa e, ainda assim, há
uma expansão dos negócios, possibilitando a aquisição de novos
clientes.

RNN para séries temporais


Podemos encontrar aplicações de séries temporais em muitas áreas,
tais como finanças e estimativas de procura e oferta. Basicamente, os

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 47/86
18/10/23, 20:04 Redes Neurais Recorrentes

problemas de séries temporais são formados por um vetor de valores


históricos:

X = [x 1 , . . . , x T ]

Nosso objetivo é estimar os valores da série para períodos futuros, ou


seja, queremos encontrar valores aproximados para x T +1 , x T +2 , ...,
com base nos dados históricos. Esse tipo de problema é bastante difícil
na prática, pois as séries temporais são compostas por informações
que os modelos não incorporam. Por exemplo, no caso das séries
temporais financeiras, fatores como a ação dos agentes tomadores de
decisão e a configuração do cenário econômico afetam o
comportamento dos valores da série. O uso dos modelos de predição é
um instrumento para apoiar outras linhas de estudos.

Para fazer as estimativas dos pontos de uma série temporal, temos à


disposição duas categorias de métodos de predição:

Métodos estatísticos
tradicionais

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 48/86
18/10/23, 20:04 Redes Neurais Recorrentes

Métodos baseados em
modelos de aprendizado de
máquina
Em nosso caso, vamos estudar como aplicar RNN para fazer essas
estimativas com a utilização de:

Linguagem Python expand_more

Linguagem de programação muito utilizada para aplicações de


ciência de dados e aprendizado de máquina. Com ela, podemos
usar muitos recursos que facilitam o desenvolvimento de nossos
projetos.

É possível baixar e instalar uma versão da linguagem Python


para a máquina local. Se você fizer isso, sugerimos que utilize o
PyCharm ou uma plataforma on-line como o Google Colab, que
foi utilizada para desenvolver o exemplo que veremos um pouco
mais adiante. O Google Colab já disponibiliza um ambiente
configurado que facilita iniciar a implementação e os testes do
projeto.

Framework TensorFlow expand_more

Plataforma de código aberto que disponibiliza bibliotecas com


funções que facilitam a criação e o treinamento das redes

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 49/86
18/10/23, 20:04 Redes Neurais Recorrentes

neurais e de outros modelos de aprendizado de máquina. Sem a


ajuda de um framework como o TensorFlow, teríamos de
implementar todos os detalhes das RNN. Podemos imaginar
como seria complicado implementarmos as portas de uma
LSTM, os algoritmos de otimização, além de diversos detalhes
que nos afastariam do que realmente queremos realizar: como
aplicar RNN para fazer a análise de uma série temporal.

Implementação para
processamento de séries
temporais
Agora, vamos estudar o passo a passo da implementação da arquitetura
de um modelo de RNN para fazermos uma análise de uma série
temporal. Para isso, vamos utilizar o Google Colab, a fim de desenvolver
nosso código em Python com o framework TensorFlow.

Comentário
Uma das vantagens do Google Colab é que podemos trabalhar com
trechos de código e, assim, visualizar com mais clareza os detalhes de
nossa implementação.

Para fins didáticos, o projeto está dividido nos seguintes passos:

1. Geração de dados;

2. Visualização dos dados;

3. Normalização dos dados;

4. Separação dos conjuntos de dados;

5. Preparação de dados para RNN;

6. Arquitetura do modelo RNN;

7. Visualização da arquitetura do modelo;

8. Compilação do modelo;

9. Treinamento do modelo;

10. Salvamento do modelo;

11. Avaliação do modelo;

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 50/86
18/10/23, 20:04 Redes Neurais Recorrentes

12. Impressão do erro de treinamento;

13. Predição de dados.

Veremos cada um dos passos a seguir.

Passo 1: geração de dados


Geramos os dados aleatórios para a série temporal, de modo que
estejam distribuídos uniformemente. A distribuição uniforme recebe
como parâmetros:

code
A quantidade de pontos da série
que queremos estudar.
code
Os valores mínimo e máximo que
os dados podem assumir ao longo
do tempo.
O código para geração de dados é:

Python
content_copy

Usamos o pacote numpy para fazer a geração dos dados. Em especial, o


comando “np.random.seed” é um número usado como gerador de

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 51/86
18/10/23, 20:04 Redes Neurais Recorrentes

valores pseudoaleatórios. Os dados da série temporal estão


armazenados na variável y. Usamos a variável x para armazenar o
período de cada ponto da série temporal.

Passo 2: visualização dos dados


Depois que geramos os dados, vamos visualizá-los por meio das
funções da biblioteca “matplotlib.pyplot”. O código que implementamos
para visualização dos dados é:

Python
content_copy

No início do código, importamos a biblioteca “matplotlib.pyplot”. Depois,


fazemos algumas parametrizações para exibir os dados. A saída do
programa é dada pelo gráfico a seguir:

Gráfico: Cinco registros da base de treinamento.


Elaborado por: Sérgio Monteiro / Plataforma on-line Google Colab.

No eixo horizontal, estão os valores da variável x, e, no eixo vertical,


estão os valores de y.

Passo 3: normalização dos dados


Os dados da série temporal estão entre 20 e 40 unidades de valor.
Podemos pensar nessas unidades como valores monetários. Então,

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 52/86
18/10/23, 20:04 Redes Neurais Recorrentes

vamos fazer a normalização dos dados, para que fiquem no intervalo 0 a


1. O código para normalização dos dados é:

Python
content_copy

Assim, conseguimos visualizar os dados de uma forma mais clara,


como podemos observar no gráfico a seguir:

Gráfico: Dados normalizados da série temporal.


Elaborado por: Sérgio Monteiro / Plataforma on-line Google Colab.

Passo 4: separação dos conjuntos


de dados
Agora, precisamos organizar os dados para treinamento e validação do
modelo. Vamos usar os dados de treinamento, para que o modelo
extraia características da série temporal e seja capaz de fazer
generalizações. Já os dados de testes são utilizados para avaliarmos a
qualidade das predições do modelo. O código para separação dos
conjuntos de dados é:

Python
content_copy

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 53/86
18/10/23, 20:04 Redes Neurais Recorrentes

Como podemos ver na primeira linha do código, separamos 80% dos


dados para treinamento. Nas últimas duas linhas do código, usamos a
função zip, que agrupa os dados como pares ordenados.

A fim de visualizar como os dados estão organizados, escrevemos o


código a seguir para imprimir os cinco primeiros registros no conjunto
de treinamento:

Python
content_copy

Passo 5: preparação de dados para


RNN
O próximo passo é organizar a forma como os dados da série serão
enviados para nosso modelo. Vamos usar apenas alguns dados do
histórico para explicar o dado de determinado instante de tempo. Por
exemplo, usaremos os dados dos períodos t 1 e t 2 para explicarmos o

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 54/86
18/10/23, 20:04 Redes Neurais Recorrentes

dado do período t 3 . O código para fazer essa organização dos dados da


série é:

Python
content_copy

Agora, precisamos chamar a função ‘preparar_dados’. Para isso,


implementamos o código a seguir:

Python
content_copy

Logo no início desse último trecho de código, aparece a variável


look_back. É essa variável que determina quantos dados históricos
utilizaremos para explicar o dado da série em determinado período. Para
entender melhor a saída, escrevemos o seguinte trecho de programa:

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 55/86
18/10/23, 20:04 Redes Neurais Recorrentes

Python
content_copy

Vamos interpretar esse resultado. Cada linha indica um registro do


conjunto de treinamento. No caso da primeira linha, significa que nosso
modelo vai usar os dados 0.18796634 e 0.62472579 para explicar o
dado 0.43770267010016545.

Passo 6: arquitetura do modelo


RNN
Agora, vamos construir o modelo de RNN. A arquitetura que
implementamos utiliza uma camada de entrada, duas camadas LSTM e
uma camada Dropout para prevenir o overfitting (superespecialização).
Nossa arquitetura é de modelo sequencial. Por isso, teremos de
importar o pacote “Sequential” do tensorflow.keras. O código que
implementamos é dado por:

Python
content_copy

Vamos observar alguns detalhes do modelo. A primeira camada LSTM


possui 100 unidades, e a camada Dropout recebe como parâmetro 0.2.
Isso significa que 20% das unidades da camada LSTM serão
https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 56/86
18/10/23, 20:04 Redes Neurais Recorrentes

“desativadas”, de modo a evitar que a rede fique superespecializada nos


dados de treinamento.

Passo 7: visualização da
arquitetura do modelo
O TensorFlow permite que possamos visualizar a arquitetura de nossa
implementação. Para isso, basta implementarmos o código dado por:

Python
content_copy

A saída do programa mostra a arquitetura do modelo, como podemos


ver na imagem a seguir:

Arquitetura de nossa implementação de RNN.

Passo 8: compilação do modelo


Antes de iniciar o treinamento do modelo, precisamos compilá-lo. Aqui,
ainda precisamos escolher o método para medida de erro e o algoritmo
para minimização do erro. No caso, escolhemos a função de erro “raiz
quadrada do erro médio” e o algoritmo de otimização ADAM. O código é
dado por:

Python
content_copy

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 57/86
18/10/23, 20:04 Redes Neurais Recorrentes

Passo 9: treinamento do modelo


Finalmente, podemos iniciar a etapa de treinamento. Para isso, basta a
função “fit”. A seguir, apresentamos o código de treinamento do modelo:

Python
content_copy

Devemos notar a última linha do código, que separa 30% dos dados de
treinamento para fazer a validação do modelo. Aqui, cabe um
comentário: os dados de validação são usados para fazer ajustes nos
hiperparâmetros do modelo.

Outro ponto que devemos observar é que, no treinamento do modelo,


guardamos o histórico para analisá-lo posteriormente. A saída do
treinamento é dada por:

Python
content_copy

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 58/86
18/10/23, 20:04 Redes Neurais Recorrentes

Perceba algumas informações muito importantes em cada iteração da


saída: época, valor da função de perda e valor da função de perda
aplicada para os dados de validação. Para facilitar a visualização das
informações de saída do treinamento, fazemos a conversão do histórico
de treinamento para um dataframe. O código é dado a seguir:

Python
content_copy

A saída da execução é dada pela seguinte tabela:

Tabela: Histórico do treinamento do modelo.


Elaborada por: Sérgio Monteiro / Plataforma on-line Google Colab.

Passo 10: salvamento do modelo


Nosso próximo passo é salvar o modelo para poder carregá-lo em outro
momento. O código é dado por:

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 59/86
18/10/23, 20:04 Redes Neurais Recorrentes

Python
content_copy

Passo 11: avaliação do modelo


Agora que fizemos o treinamento do modelo, temos de testá-lo. Para
isso, chamamos a função “evaluate”, passando para ela os valores de
teste como parâmetros. O código que implementamos é dado por:

Python
content_copy

Após a execução do código, obtemos a seguinte saída:

1/1 [==============================] - 0s 19ms/step - loss:


0.0805

loss: 0.0804748684167862

Isso significa que o modelo tem um erro de “0.0804748684167862”.


Devemos lembrar que a qualidade do modelo será melhor quanto mais
próximo de zero for a função de erro.

Passo 12: impressão do erro de


treinamento
Agora, vamos visualizar como foi o comportamento da função de erro
ao longo do treinamento do modelo. O código é dado por:

Python
content_copy

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 60/86
18/10/23, 20:04 Redes Neurais Recorrentes

O resultado do código é apresentado no gráfico a seguir:

Gráfico: Comportamento da função de erro ao longo do treinamento.


Elaborado por: Sérgio Monteiro / Plataforma on-line Google Colab.

Como podemos ver, a função de erro, realmente, reduz ao longo das


épocas.

Passo 13: predição de dados


Com o modelo treinado, vamos passar para a fase de predição dos
dados. Vamos usar os dados que separamos para fazer o teste. O
código que fizemos é o seguinte:

Python
content_copy

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 61/86
18/10/23, 20:04 Redes Neurais Recorrentes

Finalmente, vamos analisar a saída da predição do modelo. Para isso,


precisamos implementar o código para visualizar o comportamento de
nosso modelo em relação aos dados de teste:

Python
content_copy

No gráfico a seguir, mostramos o resultado:

Gráfico: Imagem usada para teste.


Elaborado por: Sérgio Monteiro / Plataforma on-line Google Colab.

Analisando o gráfico, podemos ver que o modelo extraiu características


sobre o movimento da série. Mas ele precisa passar por ajustes para
melhorar a escala. É um excelente exercício fazer mudanças dos
parâmetros do modelo e estudar como ele se comporta. Essa é a parte
mais complicada, pois cada problema tem características particulares
que tornam a parametrização um desafio.

video_library
https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 62/86
18/10/23, 20:04 Redes Neurais Recorrentes

Predição de séries
temporais com RNN
Está na hora de nosso bate-papo sobre os conceitos que relacionam
Redes Neurais Recorrentes e séries temporais, demonstrando uma
aplicação prática com emprego do framework TensorFlow. Vamos lá!

Falta pouco para atingir seus objetivos.


Vamos praticar alguns conceitos?

Questão 1

Uma das aplicações de RNN é na análise de séries temporais. Por


exemplo, podemos fazer o estudo de séries temporais na área de
finanças. Assinale a alterativa correta a respeito da aplicação de
RNN para séries temporais financeiras:

Como as RNN capturam informações sobre os


dados sequenciais, elas podem ser utilizadas para
A
tomar decisões de investimentos sem a
necessidade de interferência humana.

As RNN auxiliam no entendimento do


B comportamento da série e, junto com outros
estudos, tornam-se um apoio na tomada de decisão.

As séries financeiras são muito difíceis de serem


C estimadas. Por isso, as RNN não devem ser
aplicadas para tomada de decisão.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 63/86
18/10/23, 20:04 Redes Neurais Recorrentes

Ao aplicar RNN para fazer estudos de séries


D financeiras, é possível ajustar o modelo para
produzir estimativas precisas.

Séries financeiras não são influenciadas pelo


E comportamento histórico. Portanto, é inadequado
utilizar RNN para fazer o estudo delas.

Parabéns! A alternativa B está correta.


Podemos encontrar aplicações de séries temporais em diversas
áreas, entre as quais está a de finanças. Séries financeiras são
especialmente difíceis de serem estimadas, pois são formadas por
elementos não considerados por RNN. Se fosse algo simples, quem
usasse as RNN para estimativas de séries financeiras sempre
acertaria na composição de seus investimentos. Ainda assim, as
RNN são importantes nesses estudos para capturar
comportamentos históricos e fornecer material aos especialistas
para que possam construir cenários e tomar as decisões mais
adequadas.

Questão 2

Aplicações de RNN podem ser implementadas usando recursos


computacionais. Um desses recursos é o TensorFlow, que facilita a
construção da arquitetura de um modelo. Em relação ao
desenvolvimento de modelos de RNN aplicados para análise de
séries temporais com a utilização do TensorFlow, assinale a
alternativa correta:

O TensorFlow já vem instalado com a linguagem


A Python. Desse modo, é mais fácil focar atenção aos
detalhes da arquitetura do modelo.

O TensorFlow auxilia na avaliação de um modelo,


mas é responsabilidade do desenvolvedor
B
implementar detalhes sobre as RNN, como a porta
de esquecimento, no caso da LSTM.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 64/86
18/10/23, 20:04 Redes Neurais Recorrentes

Apesar de o TensorFlow auxiliar na implementação


C
do projeto, é responsabilidade do desenvolvedor
fazer a separação dos dados para treinamento e
testes.

Uma das preocupações do desenvolvedor ao usar


D uma LSTM com o TensorFlow é estabelecer a razão
entre portas de esquecimento e de atualização.

Uma das vantagens de usar o TensorFlow para


E implementar RNN é que o modelo se ajusta para
melhorar sua precisão.

Parabéns! A alternativa C está correta.


O TensorFlow é o framework mais importante aplicado para
algoritmos de aprendizado de máquina. Ele facilita a
implementação de um projeto, pois permite que o programador
possa focar seu esforço na construção da arquitetura do modelo.
Ainda assim, o desenvolvedor precisa entender os conceitos de
RNN e do cenário de aplicação para fazer parametrizações e
ajustes nos dados e no modelo.

4 - Aplicação em Processamento de
Linguagem Natural
Ao final deste módulo, você será capaz de empregar RNN em
Processamento de Linguagem Natural.
https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 65/86
18/10/23, 20:04 Redes Neurais Recorrentes

Ligando os pontos
Você sabia que uma das aplicações das redes RNN é para o
processamento de linguagem natural? Mas o que isso significa em
termos reais? Para respondermos a estas perguntas, vamos analisar
algumas situações práticas.

A empresa Tradução S.A. trabalha com tradução de texto de linguagem


natural livre para textos com termos técnicos. Apesar de existirem
soluções semelhantes no mercado, ela se destaca por traduzir textos
que utilizam expressões coloquiais e gírias utilizadas em ambientes de
manutenção de equipamentos. Esse tipo de texto é bastante complexo,
pois tem significado técnico importante, que é compreendido apenas
pelas pessoas que atuam naquele contexto. Por exemplo, a expressão
“motor babando” significa que está ocorrendo um “vazamento de óleo
no motor”. Semelhante a esse exemplo, existem muitos outros que
possuem um significado importante e, quando traduzidos, geram a
oportunidade de produzir análises ricas que possibilitam descobrir
padrões de problemas recorrentes. Essa solução da Tradução S.A.
possui alto valor agregado, mas nem sempre foi, assim.

Até pouco tempo, a tradução dos textos era feita por especialistas. Na
prática, o processo era lento, subjetivo e caro. Era comum ocorrer
situações em que dois especialistas traduziam de forma diferente o
mesmo texto. Depois de perceber o problema, os gestores da Tradução
S.A. contrataram um professor universitário que trabalhava com
problemas semelhantes com finalidades acadêmicas. Esse professor
viu uma oportunidade muito interessante de usar seus conhecimentos
para resolver problemas reais. Tentou aplicar as técnicas que dominava,
mas não foi bem-sucedido de imediato. Ele chegou à conclusão de que
não era só uma questão de aplicar a melhor técnica, mas de
compreender o contexto da aplicação e fazer ajustes. Depois de mais
algumas tentativas e muito estudo, ele conseguiu desenvolver uma
solução robusta. O resultado de aplicar as RNNs para fazer a tradução
de textos coloquiais para termos técnicos superou a expectativa inicial
dos gestores da empresa e, assim, passaram a utilizar essas redes nas
suas soluções e o professor, agora, faz parte do quadro permanente da
empresa, ocupando um papel de destaque na área de pesquisa e
desenvolvimento aplicados.

E você, consegue visualizar outras aplicações para redes RNN


relacionadas ao processamento de linguagem natural?

Após a leitura do case, é hora de aplicar seus conhecimentos! Vamos


ligar esses pontos?

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 66/86
18/10/23, 20:04 Redes Neurais Recorrentes

Questão 1

Como você leu no texto, o fundador da Tradução S.A. utilizava


outras soluções para realizar o tratamento de textos em linguagem
livre antes de utilizar as redes RNN. Na sua opinião, o que motivou
essa mudança?

A utilização das redes RNNs foi uma decisão de


A
publicidade da empresa.

Devido a simplicidade de aplicar redes RNN para


B
tratar esse tipo de problema.

É muito simples encontrar profissionais que sabem


C
trabalhar com redes RNN.

O processo de aplicar redes RNNs não exigiu


D
nenhum tipo de esforço inicial.

A solução anterior era subjetiva e difícil de ser


E
obtida.

Parabéns! A alternativa E está correta.


A solução que a Tradução S.A. utilizava antes das RNNs envolvia
especialistas no assunto. Isso tinha vários problemas, desde
encontrar esses especialistas, até mesmo na subjetividade das
opiniões deles que, em alguns momentos, eram conflitantes. A
utilização das redes RNN auxiliou na padronização e aumento de
escala do processo de tradução da empresa.

Questão 2

Em dado momento, os gestores da Tradução S.A. perceberam a


necessidade de modificar o processo de tratamento dos textos e
contrataram um professor universitário para auxiliá-los nesse
processo. Na sua análise, o que teria levado os gestores a tomar
essa decisão?

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 67/86
18/10/23, 20:04 Redes Neurais Recorrentes

Porque, em termos de custo, faz mais sentido


A
contratar um profissional para desenvolver uma
solução com RNN do que adquirir uma solução
pronta do mercado.

Por entender o potencial de agregação de valor e a


B
complexidade das redes RNNs.

C Porque foi a oportunidade que surgiu no momento.

Pela vasta experiência do professor em utilizar as


D redes RNNs para fazer tradução de texto em
linguagem livre aplicado para manutenção.

Devido às claras oportunidades e processo


E determinístico de utilizar redes RNNs para
tratamento de texto em linguagem natural.

Parabéns! A alternativa B está correta.


Está claro que a motivação dos gestores da Tradução S.A. foi a
necessidade de melhorar a solução que tinham, pois, além de cara
era subjetiva. Eles contrataram um professor universitário porque
entenderam que não se tratava de uma mera questão de trocar uma
solução por outra e, mesmo não sendo especialista no tratamento
de texto em linguagem livre voltado para manutenção, o professor
possuía conhecimento e metodologia de estudo suficientes para
aprofundar no assunto e desenvolver uma nova solução, como o
que aconteceu na prática.

Questão 3

Considere o seguinte cenário: você tem uma entrevista de emprego na


Tradução S.A. e deseja causar uma boa impressão, pois está muito
interessado em aprender como utilizar redes RNNs para tratar textos em
linguagem natural na prática. Com base em sua experiência, como você
se prepararia para essa entrevista?

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 68/86
18/10/23, 20:04 Redes Neurais Recorrentes

Digite sua resposta aqui

Chave de respostaexpand_more

A primeira coisa a ser feita é aprender sobre a história da empresa,


sua filosofia de trabalho, área de atuação e perfis dos clientes.
Junto com isso, aprofundar o conhecimento nos conceitos de
redes RNNs e suas aplicações voltadas para tratamento de
linguagem natural, além de estudar bibliotecas computacionais
que disponibilizem funções para trabalhar especificamente com
redes RNNs. Feito esse dever de casa, preparar-se para a
entrevista e demonstrar interesse, de forma que seja viável para a
empresa fazer a sua contratação.

Aplicação de RNN para PLN


O Processamento de Linguagem Natural (PLN) consiste em um
conjunto de técnicas para tratamento automático de fala e texto. Alguns
exemplos de PLN são a análise de sentimentos, a tradução de texto e a
composição literária. Os problemas de PLN envolvem dados
sequenciais.

Como já estudamos até aqui, as RNN tratam exatamente esse tipo de


problema (SUSTSKEVER; VINYALS; LE, 2014). O primeiro passo para que
as RNN possam trabalhar com PLN é aplicarmos algumas técnicas de
transformações, pois essas redes neurais precisam de uma estrutura
matemática para trabalhar. Algumas dessas técnicas mais conhecidas
são:

Tokenização expand_more

Processo de separar um texto em palavras. Por exemplo,


considere o seguinte texto:

x ='o futebol é o esporte mais conhecido do país'

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 69/86
18/10/23, 20:04 Redes Neurais Recorrentes

Sua tokenização por espaços é:

x_t =['o','futebol','é','o','esporte','mais','conhecido','do','país' ]

Stemming expand_more

Forma de obter o radical de palavra base por meio da remoção


de prefixos e sufixos. Alguns exemplos de Stemming são:

Stemming(rapidamente) = rapida
Stemming(previsto) = visto

Lematização expand_more

Remove apenas as desinências flexionais das palavras. É muito


útil para fazermos buscas sem a necessidade de nos
preocuparmos com as diversas flexões que uma palavra pode
ter. Alguns exemplos de lematização são:

Lematização(sabia, soube, saberei) = saber


Lematização(carro, carrinho, carrão) = carro

Geração de listas polarizadas expand_more

Nesta abordagem, as palavras recebem valores +1 ou -1 para


indicar uma interpretação semântica oposta. Ela é bastante útil
na análise de sentimentos. A seguir, apresentamos um exemplo
dessa técnica:

Tabela: Mapeamento entre palavras e sentimentos.


Elaborada por: Sérgio Monteiro.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 70/86
18/10/23, 20:04 Redes Neurais Recorrentes

Hot code e vetores de


palavras
Agora, vamos abordar duas técnicas que merecem uma atenção
especial: hot code e vetores de palavras. Essas técnicas são úteis para
transformar palavras em números, o que é um pré-requisito para
podermos aplicar RNN para PLN.

Hot code
A ideia é associar as palavras a números. Para isso, existem duas
abordagens. São elas:

Codificação única Codificação com


número
Também conhecida
como one-hot encoder. É uma variação da
Ela cria um vetor de codificação única, em
zeros do comprimento que cada palavra é
do vocabulário para close associada a um número
cada palavra distinta no natural.
texto e com o número 1
no índice que
corresponde à palavra.

Exemplo
Seja o texto: x = “gato cachorro leão golfinho”. A codificação das
palavras do texto é:

Na codificação única:

codificação_única(gato) = [1 0 0 0]
codificação_única(cachorro) = [0 1 0 0]
codificação_única(leão) = [0 0 1 0]
codificação_única(golfinho) = [0 0 0 1]

Na codificação com número:

codificação_número(gato) = 1
codificação_número(cachorro) = 2
codificação_número (leão) = 3

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 71/86
18/10/23, 20:04 Redes Neurais Recorrentes

codificação_número (golfinho) = 4

Vetores de palavras
Na técnica anterior, o vetor que representava o vocabulário (conjunto de
palavras) tinha muitos zeros. É o que chamamos de vetor esparso. Além
disso, os valores associados às palavras não traziam nenhuma
informação sobre o contexto em que elas apareciam.

Na técnica de vetores de palavras – mais conhecida pelo termo inglês


word embedding –, cada palavra é representada por um vetor de
tamanho fixo – que não depende do tamanho do vocabulário. Os valores
são obtidos por meio de uma rede neural que leva em consideração o
contexto em que as palavras estão relacionadas. A primeira camada da
rede RNN para trabalhar com PLN é a de embedding. A imagem a seguir
apresenta um exemplo:

Visão simplificada de RNN para análise de sentimentos.

Implementação de RNN
para PLN
Vamos apresentar o código de RNN para PLN. Esse exemplo é voltado
para a análise de sentimentos. Para fins didáticos, nossa
implementação é dividida nos seguintes passos:

1. Carga da base de dados;

2. Compreensão dos dados;

3. Separação dos dados;

4. Arquitetura do modelo RNN;

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 72/86
18/10/23, 20:04 Redes Neurais Recorrentes

5. Compilação e treinamento do modelo;

6. Avaliação do modelo;

7. Uso do modelo para predições.

Estudaremos cada passo a seguir.

Passo 1: carga da base de dados


O TensorFlow disponibiliza algumas bases de dados que facilitam o
trabalho de testes do modelo. No caso, vamos fazer a importação dos
dados da Internet Movie Database (IMDB) por meio da biblioteca
tensorflow_datasets.

Para iniciar o projeto, temos de importar as bibliotecas do TensorFlow e


carregar os dados da IMDB, como no código a seguir:

Internet Movie Database (IMDB)


Base de textos com comentários sobre filmes.

Python
content_copy

Os dados da IMDB já estão em um formato que facilita o trabalho com o


TensorFlow.

Passo 2: compreensão dos dados


Os dados já estão disponíveis na variável dataset. A variável info tem
informações sobre esses dados. Então, vamos codificar o programa
para ver informações sobre os dados que acabamos de importar.
Apresentamos o código a seguir:

Python
content_copy

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 73/86
18/10/23, 20:04 Redes Neurais Recorrentes

A saída da execução do código traz informações sobre o nome da base


de dados, qual o tamanho do vocabulário (palavras distintas), quantos
registros estão na base e como os dados estão separados para
treinamento e testes.

Passo 3: separação dos dados


Chegou o momento de realizar a separação dos dados. Como fizemos a
importação a partir do próprio TensorFlow, essa tarefa é bem simples.
Basta acessarmos a variável dataset e selecionarmos os índices 'train' e
'test'. No código a seguir, mostramos como fazer a separação do
conjunto de dados para treinamento e teste:

Python
content_copy

Agora, vamos manipular os dados para aumentar a aleatoriedade em


que eles aparecem na base. Além disso, precisamos fazer um
preenchimento dos dados para que as sequências tenham o mesmo
comprimento. O código para essa finalidade é dado por:

Python
content_copy

Com a função shuffle, fizemos o embaralhamento dos dados do


conjunto de treinamento e limitamos o comprimento das sequências
com a função padded_batch.

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 74/86
18/10/23, 20:04 Redes Neurais Recorrentes

Passo 4: arquitetura do modelo


RNN
Nosso próximo passo é construir a arquitetura de nossas RNN para
PLN. De início, precisamos carregar os pacotes responsáveis pelas
camadas da rede, pela função de erro (ou função de perda) e algoritmo
de otimização, conforme podemos ver a seguir:

Python
content_copy

Aqui, a parte intrínseca das RNN são as camadas Bidirectional e LSTM.


A camada Embedding vai ser utilizada para transformar os dados de
entrada em vetores densos (não esparsos) de tamanho fixo.

Agora, fazemos a criação do modelo com as camadas devidamente


configuradas: basicamente, uma camada de codificação, duas camadas
LSTM envoltas em camadas bidirecionais, duas camadas densas e uma
camada de exclusão (YALÇIN, 2021, p. 177):

Python
content_copy

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 75/86
18/10/23, 20:04 Redes Neurais Recorrentes

Para vermos a arquitetura do modelo, implementamos o código a seguir:

Python
content_copy

Dessa forma, podemos visualizar a arquitetura de nosso modelo:

Arquitetura do modelo.

O TensorFlow oferece uma maneira bastante interessante de visualizar


as RNN. Apresentamos o código a seguir de como fazer essa
visualização:

Python
content_copy

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 76/86
18/10/23, 20:04 Redes Neurais Recorrentes

Passo 5: compilação e
treinamento do modelo
Depois de criar o modelo, precisamos escolher a função de perda, o
algoritmo de otimização e a métrica para medir a qualidade do
aprendizado que ocorre durante o treinamento. Para isso,
implementamos o seguinte código:

Python
content_copy

O próximo passo é treinar o modelo. Basta chamarmos a função fit do


objeto model e passarmos os parâmetros de treinamento, conforme
podemos ver no código a seguir:

Python
content_copy

Também podemos visualizar o comportamento da função de erro para


os dados de treinamento e de validação com o seguinte código:

Python
content_copy

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 77/86
18/10/23, 20:04 Redes Neurais Recorrentes

Esse código produz como saída o gráfico a seguir:

Gráfico: Comportamento da função de erro durante o treinamento.


Elaborado por: Sérgio Monteiro / Plataforma on-line Google Colab.

Passo 6: avaliação do modelo


Nosso modelo já foi treinado. Então, precisamos verificar a qualidade do
treinamento. Para isso, utilizamos a função evaluate e medimos o erro e
a acurácia. A qualidade do treinamento será considerada melhor quando
o erro ou a perda for mais próximo de zero, e a acurácia, mais próxima
de 1, o que significa que o modelo está mais próximo do alvo.
Apresentamos aqui o código para avaliar o modelo:

Python
content_copy

A seguir, podemos ver o resultado da execução do código:

Teste de Perda

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 78/86
18/10/23, 20:04 Redes Neurais Recorrentes

0.3297092616558075

Teste de Acurácia
0.8688799738883972

Passo 7: uso do modelo para


predições
Finalmente, podemos usar nosso modelo para fazer predições. Antes de
chamar a função para realizar a análise de sentimentos, precisamos
fazer um tratamento nos dados de entrada, da mesma forma que
tivemos de fazer para enviar os dados ao processo de treinamento.
Então, faremos o preenchimento de um texto com zeros sempre que for
necessário por meio da seguinte função:

Python
content_copy

Também precisamos codificar numericamente o texto de entrada,


conforme a função:

Python
content_copy

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 79/86
18/10/23, 20:04 Redes Neurais Recorrentes

Por fim, vamos verificar como nosso modelo funciona, na prática, para
fazer análises de sentimentos. Vamos escrever um comentário para
fazer a classificação:

Python
content_copy

Agora, chamamos a função predict, que recebe como parâmetro o


comentário devidamente ajustado e codificado numericamente.
Podemos ver, a seguir, o código da classificação de uma entrada:

Python
content_copy

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 80/86
18/10/23, 20:04 Redes Neurais Recorrentes

Enfim, temos o resultado da classificação:

Classificação de sentimentos.

Para classificar um comentário como positivo, o valor do modelo deve


ser maior do que 0.5. Caso contrário, ele é classificado como negativo.
No nosso exemplo, o comentário teve uma avaliação positiva.

video_library
Processamento de
linguagem natural com
RNN
Está na hora de nosso bate-papo sobre os conceitos que relacionam
RNN e processamento de linguagem natural, demonstrando uma
aplicação prática usando o framework TensorFlow. Vamos lá!

Falta pouco para atingir seus objetivos.


Vamos praticar alguns conceitos?

Questão 1

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 81/86
18/10/23, 20:04 Redes Neurais Recorrentes

O PLN tem muitas aplicações práticas, como na tradução de texto.


Assinale a alternativa correta a respeito da aplicação de RNN para
PLN:

Uma das preocupações do desenvolvedor de uma


A aplicação de RNN para PLN é a transformação das
sentenças em números.

As palavras precisam passar pelo processo de


B Stemming explicitamente antes que possam ser
processadas pelas RNN.

As RNN podem ser aplicadas para PLN, pois são um


exemplo de dados sequenciais. Portanto, as
C
palavras devem ser passadas sem nenhum tipo de
transformação para as RNN.

Uma das técnicas para transformação de palavras é


D a lematização, que consiste na separação das
palavras dentro de um texto.

As aplicações de PLN são complexas, pois


E envolvem a interpretação de um texto. Portanto, o
uso de RNN é bastante limitado para PLN.

Parabéns! A alternativa A está correta.


Aplicações de PLN envolvem dados sequenciais. Por isso, são
exemplos de aplicações adequadas para serem tratadas com RNN.
No entanto, é necessário que as palavras passem por um processo
de transformação, de modo que sejam transformadas em números,
o que é um pré-requisito para a aplicação de RNN.

Questão 2

As RNN podem ser aplicadas para PLN. Um dos frameworks mais


importantes para esse tipo de desenvolvimento é o TensorFlow. A
respeito da utilização desse framework, assinale a alternativa
correta:

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 82/86
18/10/23, 20:04 Redes Neurais Recorrentes

Após o treinamento das RNN para PLN, devemos


A fazer a avaliação do modelo com os dados de
treinamento.

Uma das imposições do TensorFlow para o


B desenvolvedor é a utilização da camada de Dropout
para aumentar a taxa de aprendizado da rede.

Antes de os dados de treinamento de PLN serem


C enviados para a rede, eles precisam ser
normalizados.

Antes de os dados serem enviados para as RNN,


D eles precisam ser tratados pela camada Embedding,
que faz a transformação de palavras em números.

Devido à subjetividade da interpretação de um texto,


não é possível medir a acurácia de um modelo.
E
Portanto, é necessário fazer a interpretação de cada
predição do modelo.

Parabéns! A alternativa D está correta.


O TensorFlow é um framework utilizado para aplicações de
aprendizado de máquina. Para construir RNN, ele oferece pacotes
sobre o modelo (tensorflow.keras.models) e sobre as camadas
(tensorflow.keras.layers), o que facilita bastante o processo de
implementação. Antes de enviar os dados para a rede, é necessário
que eles sejam transformados em números. Isso é feito facilmente
pela camada Embedding.

Considerações finais
https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 83/86
18/10/23, 20:04 Redes Neurais Recorrentes

Ao longo do conteúdo, abordamos os conceitos relacionados às RNN. A


principal característica desse tipo de rede neural é trabalhar com dados
sequenciais. Podemos encontrar muitas aplicações que envolvem esse
tipo de dados, como séries temporais e PLN.

A arquitetura das RNN envolve a combinação de elementos estruturais,


chamados portas, que decidem quais informações devem ser enviadas
para a rede e quais devem ser esquecidas. Algumas variações
importantes de RNN são as redes LSTM, GRU e bidirecionais.

Ao final, fizemos a implementação de projetos de aplicações de séries


temporais e PLN, utilizando a linguagem de programação Python e o
framework TensorFlow.

Há muito o que estudar para dominar as RNN, mas é um fato que as


demandas acadêmicas e de mercado por esse assunto têm crescido e
que compensam os esforços envolvidos nesse estudo.

headset
Podcast
Para encerrar, saiba mais sobre redes neurais recorrentes e suas
aplicações práticas.

Explore +
Pesquise o site oficial do pacote Tutoriais – TensorFlow e navegue pelos
conteúdos disponíveis para textos (embedding de palavras) e dados
estruturados (previsão de série temporal).

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 84/86
18/10/23, 20:04 Redes Neurais Recorrentes

Referências
BAHDANAU, D.; CHO, K.; BENGIO, Y. Neural machine translation by
jointly learning to align and translate. San Diego: ICLR, 2015.

BENGIO, Y.; SIMARD, P.; FRASCONI, P. Learning long-term dependencies


with gradient descent is difficult. IEEE Transactions on Neural Networks,
v. 5, n. 2, p. 157-166, mar. 1994.

SOCHER, R. et al. Recursive deep models for semantic compositionality


over a sentiment treebank. In: CONFERENCE ON EMPIRICAL METHODS
IN NATURAL LANGUAGE PROCESSING, 2013, Seattle. Proceedings […].
Seattle: Association for Computational Linguistics, p. 1631-1642, 2013.

SUSTSKEVER, I.; VINYALS, O.; LE, Q. V. Sequence to sequence learning


with neural networks. In: INTERNATIONAL CONFERENCE ON NEURAL
INFORMATION PROCESSING SYSTEMS, 27, 2014, Montreal. Proceedings
[…]. Montreal: NIPS'14, v. 2, p. 3104-3112, 2014.

YALÇIN, O. G. Applied Neural Networks with TensorFlow 2: API oriented


deep learning with Python. California: Apress, 2021.

YU, Y. et al. A review of Recurrent Neural Networks: LSTM cells and


network architectures. Neural Computation, v. 31, n. 7, p. 1235-1270,
2019.

Material para download


Clique no botão abaixo para fazer o download do
conteúdo completo em formato PDF.

Download material

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 85/86
18/10/23, 20:04 Redes Neurais Recorrentes

O que você achou do conteúdo?

Relatar problema

https://stecine.azureedge.net/repositorio/00212ti/04165/index.html# 86/86

Você também pode gostar