[Música] Olá bem-vindos a sétima semana do curso de redes Morais essa nossa última semana de conteúdo e na aula de hoje nós vamos aprender um pouco sobre as redes recorrentes não autônomas E também o algoritmo de propagação através do tempo que é utilizado por treinamento dessas redes recorrentes Então nós vamos abordar Primeiro as redes recorrentes na autônomas o que que são essas redes compará-la de certa forma com o processamento que nós temos as redes autônomas que foram vistas anterior entender a ideia de aplicação do algoritmo de propagação através do tempo e apresentar por fim algumas
limitações dessas redes recorrentes tradicionais autônomas a gente qual que é o funcionamento dessa rede primeiro nós definimos um estado inicial para rede cola na máquina de boltra nos definimos aquele padrão que é apresentado na camada visível e a partir desse estado inicial a rede evolui até atingir o equilíbrio térmico até atingir um ponto de mínimo de energia local global no caso da rede de hop Field então alguns exemplos dessa rede a própria máquina rede de Robin Hood a máquina de Bolt uma máquina restrita de boltman e outras máquinas que dependem de energia Então qual que
é ideia eu apresento um padrão e a partir desse padrão inicial a rede evolui até atingir um estado de equilíbrio já nas redes não autônomas nós temos que a própria entrada da rede ela pode variar ao longo do tempo então nós podemos apresentar para essa rede de uma sequência de dados nós temos um dado sequencial por exemplo uma sequência de palavras e essa rede ela vai recebendo essas palavras e realizando o seu processamento com base na nova palavra apresentada e também no estado da rede com base nas palavras anteriormente recebidas alguns exemplos as próprias RN
que são as redes tradicionais basicamente uma rede multilaser com laço de recorrência e as redes de ru e lsdm e as suas respectivas variações sendo que essas duas nós veremos na próxima aula bom qualquer ideia de uma rede recorrente nós somos que o novo estado da rede ele depende tanto daquilo que é fornecido externamente para rede ou seja qual o padrão que está sendo apresentado e também do Estado atual do modelo no momento que ele recebe aquele padrão externo então com isso como a rede lá de alguma forma armazena aqueles padrões que foram apresentados para
ela anteriormente nós podemos ver que essa rede ela apresenta uma memória de curto prazo ela consegue lembrar de informações que ela recebeu nos restantes anteriores alguns modelos conseguem implementar além da memória de curto prazo também memória de longo prazo que é o caso da GR1 e da rede lsdm Então como já mencionei né as redes elas podem Recordar de características importantes observadas os sinais anteriores Por que que isso é importante por exemplo se eu tô trabalhando com o sinal geração de texto eu tenho uma sequência de palavras eu quero gerar a próxima palavra do texto
então se eu tenho um sujeito e eu vou gerar o verbo eu preciso concordar esse verbo com o sujeito então sabendo qual foi o sujeito tendo essa memória armazenada eu consigo saber qual que é a conjugação que eu preciso aplicar naquele verbo específico e ela é bastante utilizada dado que ela tem essa memória ela consegue relembrado de fatos passados ela é bastante utilizada para tratar dados sequenciais por exemplo séries temporais previsão do tempo tratamento de dados textuais com esse exemplo que eu acabei de comentar ou seja para dizer a próxima palavra do texto bastante comum
quando nós estamos trabalhando no WhatsApp tô escrevendo um texto escreva a primeira palavra ele já sugere algumas palavras para mim Possivelmente tem uma rede recorrente implementada ali atrás sugerindo essas próximas palavras com base nas palavras anteriores é dados do mercado financeiro eu quero tentar predizer por exemplo qual que vai ser o valor de uma dada ação no instante Futuro no dia d+5 no dia D mais 20 sendo deu dia atual é processamento de sinais de áudio tanto a geração de áudio quanto a captura de áudio a transdução desse áudio para texto existe uma série de
aplicações que podem ser utilizadas que podem fazer o uso dessas redes recorrentes e por fim aqui às vezes recorrentes elas são máquinas universais ou seja elas são tudo em equivalente qualquer problema contável Teoricamente pode se resolver por uma rede neural recorrente aqui uma situação do professor Lex friedmanit quando que nós precisamos considerar uma rede recorrente como modelo para a solução de um dado problema ele fala o seguinte sempre que há uma sequência de dados e que a dinâmica temporal que conecta os dados é mais importante do que o conteúdo espacial de cada quadro individual Possivelmente
a gente pode utilizar uma rede recorrente para tratar esses dados porque eu não tô preocupado Só com conteúdo do quadro a informação entre os quadros a informação sequencial ela passa a ser importante para a resolução do problema algumas aplicações de redes recorrentes reconhecimento de fala então posso ter um sinal de áudio sendo transcrito para suas respectivas palavras e o a gente utiliza hoje na nesses dispositivos domésticos é onde eu falo um comando ele reconhece pode escrever se esse texto essa informação então pode ser utilizado redes recorrentes geração de música eu posso treinar o modelo para
aprender sequências musicais e depois a partir de uma primeira nota é uma nota semente que a gente fala uma sequência inicial de notas a rede normal pode gerar uma nova música com base naquilo que ela aprendeu do Repertório anterior classificação de sentimentos aqui eu tenho um texto poderia ser um review de um filme um reports de um uso de um usuário usando restaurante indicando-se aquele restaurante é bom não eu quero classificar esse texto como sendo uma informação positiva ou negativa a pessoa ela tá feliz com que ela observou ela está triste com aquela observou então
análise de sentimentos então a gente pode pegar nesse caso por exemplo o melhor filme que já assisti fortemente recomendado claramente é uma resposta positiva um comentário positivo então quer dizer correntes podem ser utilizadas para tratar esses dados textuais gerando esse sentimento de vídeos eu poderia ter uma sequência de quadros aqui e a rede a partir da análise desse quadros indicar para mim que tipo de cena que tá acontecendo ali Ah tem uma cena de crime eu tenho uma pessoa correndo eu tenho uma cena de pássaros voando então a rede Ela poderia partir dessa sequência de
quadros indicar para a gente comportamento dinâmico que está sendo observado naquele vídeo e tradução por exemplo I like traduzindo para Eu gosto de chocolate é bastante utilizada Nesse contexto também entro com uma sequência textual sequência de caracteres ou de palavras e um dado idioma a rede processa isso e gera na sequência a sequência de palavras num segundo idioma Qual que é a grande diferença né quando a gente pensa numa rede recorrente para uma rede alimentar adiante o caso da Multilaser Cetro padrão é a centralizar essa estrutura aqui qual que é a ideia eu vou apresentar
um padrão na entrada da rede esse padrão é propagado até a camada intermediária camada oculta por sua vez as saídas a camada oculta se propaga até a saída a rede emite a saída e acabou um sinal Ele nunca passa duas vezes pelo mesmo nome pelo mesmo neurônio ou seja a rede recebe o sinal processa o sinal até a saída e finaliza o processamento ela não tem uma memória ela não consegue replicar esse sinal revisitar esse sinal ao longo do seu processamento quando a gente pensa numa rede recorrente a gente tem esses laços de realimentação Ou
seja aquele mesmo sinal que já passou por esse neurônio ele pode realimentar o próprio neurônio e sendo utilizado por um reprocessamento ou para uma informação posterior que vai ser calculada por esses neurônios da rede aqui é importante sacar que eu coloquei a alimentação só nos neurônios isolados mas todos eram nós poderiam ser reabilitar automaticamente Tá bom então diferente da rede alimentar adiante na rede recorrente nós temos que um sinal Ele pode ficar preso dentro da rede sendo processado por mais de um instante de tempo aqui um mecanismo bastante interessante que a gente pode utilizar para
entender como que o sinal se propaga numa rede recorrente e também para entender como que o algoritmo de retopropagação faz a retropropagação dos erros calculando os gradientes da camada de saída até a camada de entrada Lembrando que uma rede recorrente como nós somos ilustrando aqui o estado desse neurônio desse dessa rede no tempo tem mais um depende do que eu tô apresentando para rede e do próprio Estado da rede no tempo t ou seja a rede ela vai alimentar a própria rede no instante posterior a saída dessa rede no instante posterior vai alimentar essa rede
novamente no instante posterior e assim sucessivamente então nós podemos desenrolar esse laço de alimentação da seguinte forma eu vou representar que essa daqui é uma rede como se fosse uma rede alimentar adiante no tempo o estado dessa rede no tempo 1 ele vai alimentar a segunda rede no tempo dois que que é importante destacar aqui essa segunda rede Ela não é uma outra rede uma outra camada é a mesma rede do tempo 1 A diferença é que agora ela tá no outro instante do tempo então diferente nas redes alimentadas adiante onde nós temos o conceito
espacial de camadas primeira camada alimenta a segunda que alimenta a terceira na rede recorrente a gente também tem isso mas a gente vai ter esse conceito de alimentação Temporal da rede Então a gente tem uma rede no tempo T alimentando o tempo tem mais um que alimenta o tempo tem mais dois e assim sucessivamente principais arquiteturas é que nós temos uma rede padrão alimentada adiante ou seja só apresenta entrada ela processa e gera a saída nós podemos ter uma rede chamada um para muitos onde eu apresento um sinal de entrada e o estado Zerado por
exemplo estado Inicial ela vai gerar um novo estado intermediário gerar uma saída essa saída realementa a própria camada o próprio neurônio no instante tem mais um gera uma nova saída que alimenta novamente o próprio neurônio a própria camada no tempo tem mais dois e vai fazendo isso até gerar a última saída da rede aqui a gente está desenrolando a rede também tá esse aqui esse quadradinho Verde aqui representa exatamente a mesma rede em diversos instantes do tempo para que que serve esse tipo de abordagem por exemplo aquela para sintetizar música onde eu apresento aqui a
primeira nota e depois a rede começa a Gerar para mim a partitura musical as próximas notas reconhecidas ou geradas por pela rede nós podemos ter uma arquitetura muito para um aqui ao invés de gerar muitas saídas a partir de uma entrada eu vou apresentando para rede diversas entradas essas entradas vão sendo compostas ao longo do tempo ou seja essa primeira entrada gerou um estado para essa para essa rede no tempo 1 esse estado no tempo um alimenta a rede no tempo dois mas a entrada do tempo 2 e a gente vai fazendo isso até o
final e no final a gente era uma saída só que você por exemplo utilizada para classificação de sentimentos onde eu tenho diversas palavras e no final o sentimento é positivo ou negativo ou diversos instantes do valor de uma ação do mercado financeiro e aqui a partição do valor futuro dessa ação uma rede muito para muitos onde eu tenho múltiplas entradas e múltiplas aqui tem diversas aplicações também a gente poderia pensar em ainda no processamento textual eu quero reconhecer se uma dada palavra sujeito se ela é verbo se ela é uma preposição Que tipo de classificação
gramatical tá associada aquela palavra então poderia apresentando as palavras e gerando a sua respectiva classificação ou uma sequência de DNA indicando aqui se aquela sequência ela está associada ou não uma dada proteína esse primeiro pedaço não tá essa é um pedaço frontal o terceiro pedaço tá e assim por diante e uma rede muito para muitos agora um pouco uma estrutura um pouco diferente dessa aqui observem que a gente faz uma espécie de rede muitos para um na primeira etapa e depois uma rede um para muitos na segunda etapa gerando um procedimento muitos para muitos Isso
aqui é uma estrutura que a gente vai chamar nós podemos chamar isso aqui de uma estrutura de alta encolder onde nós temos uma fase de codificação ou um codificador que vai codificar esse sinal gerando um estado de representação dessa rede naquele tempo após a recepção de todas as entradas na sequência esse estado alimenta o decodificador o Decoder que vai ser responsável por gerar as saídas a partir daquele estado gerado na camada anterior ou no codificador anterior isso aqui é bastante utilizado para tradução de texto por exemplo então tenho a recepção do texto e língua portuguesa
e a saída do texto é importante destacar que não necessariamente a quantidade de exemplos que eu tenho aqui deve ser a mesma daqui eu posso ter 10 entradas gerar cinco saídas entradas e gerar 10 saídas e assim sucessivamente Vamos pensar no problema da predição de palavras em texto que eu já comentei várias vezes então tem uma sequência aqui João o inverno não chegou precisamos Qual que é a próxima palavra a gente pode utilizar uma rede oral para fazer isso como que a gente faz isso que que a gente precisa fazer que primeiro preciso codificar cada
palavra do meu dicionário e um vetor numérico a gente precisa transformar esse dado categórico no dado numérico uma das formas de fazer isso utilizando uma Rotam aquilo que nós vimos nas aulas algumas aulas atrás que era um para muitos um de muitos Então tem um vetor aqui esse vetor é um vetor binário onde eu vou ter vários células basicamente todas as células com valor zero e eu vou ter um apenas na posição que representa aquela palavra Então se olhar aqui no dicionário o João representa a posição 4.100 daquele daquele vetor então na posição 4100 vai
estar um nas demais vai tá zero o o é a posição 6.750 então na posição 6.750 ele vai estar um e assim sucessivamente para todas as palavras da rede e é comum a gente inserir uma palavra aqui de desconhecido uma palavra quando tem uma sequência na minha sequência textual se tiver algum caracter desconhecido eu atribuo um termo genérico aqui para não quebrar o processamento Ou seja eu não sei o que que essa palavra Coloca esse termo genérico para realizar o processamento então o que que eu tô fazendo codificando uma sequência de textos em uma sequência
de vetores binários que são utilizados para codificar esse texto a questão primeiro primeira questão aqui nós podemos utilizar uma rede alimentada adiante como a rede Multilaser para tratar esse problema Ou seja predsia a palavra no tempo tem mais um a partir das ter palavras anteriores a gente consegue fazer utilizando uma rede multilaser como fazer isso Qual que é a limitação dessa abordagem uma vez nós estamos falando de redes recorrentes eu tô perguntando se a gente pode utilizar uma rede alimentada adiante agora Então nossa questão resposta curta seria assim a gente pode utilizar uma rede alimentar
adiante para fazer esse processamento essa essa predição da palavra no tempo ter mais uma palavra na sequência tem mais um Então como fazer isso a gente pode definir uma estrutura de uma rede Multilaser Cetro aqui com diversos neurônios ocultos diversos camadas ocultas isso vai preparando para ser ajustado ao longo do treinamento e entrada seria o seguinte eu posso alimentar essa rede com T palavras da minha sequência então sempre vou alimentar a rede com T palavras e ela vai fornecer para mim como saída a próxima palavra do texto Qual que é o problema aqui né cada
palavra dessa aqui não é um escalar não é um número isolado ele é um vetor que depende do tamanho do dicionário naquele nosso exemplo nós temos aproximadamente 10 mil palavras então cada posições cada palavra aqui então o vetor de 10 mil posições se eu tenho 10 palavras eu vou ter uma entrada da rede de 100 mil posições Quais são as limitações desse processo né primeiro a memória limitada tem stands anteriores como eu tenho ter entradas aqui se por alguma por algum motivo essa palavra tem mais um Ela depende de algo que veio antes da palavra
um se a gente pensar que eu tô processando um texto inteiro e essa palavra Depende de algo anterior essa abordagem não consegue tratar isso porque ela é limitada até instantes do tempo número de entradas é fixo o que acontece eu tinha uma entrada agora com três palavras eu quero para dizer a quarta como que eu trato essa rede para fazer isso a gente pode imputar valores zero por exemplo mas fica uma abordagem não muito muito adequada como eu já falei cada palavra ela pode representar um vetor bastante grande num cenário simples aqui que é o
nosso caso com 10 mil palavras 10 possibilidades do nosso dicionário nós teríamos cada palavra sendo representada por um vetor de 10.000 posições E com isso a gente pode ter um excesso de parâmetros nessas primeiras camadas ocultas da rede E além disso a utilizar redes neurais recorrentes a gente as redes tradicionais não necessariamente a gente resolve todos esses problemas mas a gente resolve alguns por exemplo redução do número de parâmetros a questão da limitação do tamanho da entrada fixo a gente já não tem mais isso a gente pode ter uma mesma rede recebendo uma palavra por
vez então se eu recebo três palavras Ok isso eu recebo 10 palavras Ok eu sempre vou para dizer a próxima palavra a partir daquilo que eu recebi da minha entrada bom recordando aqui o nosso rolem o desenrolar da rede Então como nós aplicamos o algoritmo de retropropagação nesse caso nós temos que algoritmo de propagação serve para treinar redes com múltiplas Aqui nós temos uma rede múltiplas mas não camadas apenas espaciais camadas temporais que seria a replicação dessa rede dessa camada ao longo do tempo então como utilizar o algoritmo de propagação para fazer isso vamos lembrar
o seguinte é o gradiente de um neurônio J como que ele é calculado neurônio J da camada oculta para calcular o gradiente desse neurônio aqui eu preciso saber o gradiente de todos os neurônios da camada posterior os quais esse neurônio que alimentou na fase de propagação talvez que eu tenho esses gradientes aqui eu consigo calcular o gradiente desse neurônio da camada anterior utilizando essa equação que nós já vimos as aulas anteriores também porém qualquer aplicação disso nas redes recorrentes né o que que acontece lembra que aqui nós temos uma camada espacial primeira camada segunda camada
quando Nós pensamos na rede recorrente eu tenho a questão temporal camada no tempo um a mesma camada no tempo dois a mesma camada no tempo 3 então para calcular o gradiente de um dado neurônio no tempo um e esse neurônio alimentou esse mesmo neurônio no tempo dois na mesma camada eu preciso calcular o gradiente lá no tempo dois para depois calcular o gradiente no tempo 1 então uma ilustração aqui do processo é vamos pensar o seguinte eu tenho uma rede neural aqui é bastante simples Glória onde eu tenho as redes as camadas ocultas que vão
representar um estado aqui de a de ter onde ter o tempo e elas vão ser definidas como sendo uma função de ativação pode ser tangente parabólica ou qualquer outro e a entrada dela vai ser o vetor externo E o respectivo conjunto de peso externos representados aqui mas o vetor de pesos Associados aos laços de regulamentação representados aqui multiplicados pelo próprio estado da rede no tempo anterior tem menos um e a saída da rede por sua vez vai ter seu próprio conjunto de peso aqui que está representado aqui em cima e recebe como entrada aos Estados
dos neurônios no próprio tempo dele então para definir para utilizar o algoritmo de propagação numa rede recorrente nós precisamos calcular o gradiente de todos os neurônios da rede para isso a gente precisa levar em consideração tanto aspecto espacial quanto o aspecto temporal Então os gradientes neurônio de uma camada posterior precisam ser calculados antes de calcular os neurônios de uma camada anterior espacialmente e também para calcular os gradientes neurônios da própria camada que tem a recorrência nós precisamos calcular os gradientes desse neurônio no tempo tem mais um para calcular o gradiente desse mesmo tempo tem então
a gente precisa voltando esses cálculos ao reto propaganda desses cálculos ao longo do tempo então que é uma ilustração nós começamos apresentando um padrão para a rede essa rede era uma saída o estado dessa rede alimenta a parede que é alimentada com o próximo padrão que gera a próxima saída a gente vai fazendo isso passo a passo até chegar na nossa saída final uma vez que eu defini a sair da final aqui a gente consegue calcular a função de custo todo aquele mesmo procedimento que a gente faz na rede Multilaser só que da gente volta
agora calculando algoritmo de retropropagação para calcular os pesos desse neurônio eu tenho direto o desejado menos obtido aqui na camada de saída Então isso é direto uma vez que eu calculei os gradientes esse neurônios da camada de saída eu posso calcular os gradientes desse enormes a camada oculta aí uma vez que eu calculei os gradientes esse ônibus da camada oculta eu posso reto propagar o tempo e retropropagar no espaço as saídas dessa rede no tempo 3 e calcular os gradientes dessa camada aqui lembrando que essa camada é a mesma dessa só um tempo anterior e
vou fazendo esse procedimento passo a passo até chegar nos pesos da primeira camada no primeiro instante do tempo então que tá o processo de atualização exatamente o mesmo Que nós tínhamos na rede multilaser com a pequena diferença agora que a inveja calcular para calcular um Delta do neurônio J A gente não precisa necessariamente apenas dos deltas dos gradientes do neurônio cá mas também do próprio neurônio J num instante posterior então para calcular o J no tempo o gradiente neuromio J no tempo T eu preciso dele no tempo que tem mais um calculado previamente limitações né
Essa abordagem ela é bastante propícia acarretar no que a gente vê na próxima aula que é o desaparecimento ou a explosão dos gradientes sequências longas elas podem ter dependências longas como eu comentei por exemplo os alunos que estudam na universidade virtual do Estado de São Paulo possuem grande competência eu preciso concordar o sujeito com esse verbo que tá várias palavras à frente então para gerar entender essa sequência e conseguir Recordar fatos que aconteceram várias distantes do tempo passado às vezes recorrentes Tem certas limitações porque elas possuem apenas Memórias de curto prazo tá e na prática
a gente sabe que essas redes Elas têm capacidades semelhantes às redes Multilaser para janeladas aquelas nas quais eu coloco aquela entrada de testantes para tentar para dizer o mais um Claro que eu não tenho aquela limitação da quantidade de entradas no caso da MPB teria exatamente ter entradas no caso da rede recorrente eu posso ter número arbitrário e o número de parâmetros também tende a ser menor mas a do ponto de vista computacional elas possuem praticamente a mesma capacidade então o que que nós vimos nessa aula primeiro nós entendemos o funcionamento das redes neurais recorrentes
na autônomas e compreendemos o funcionamento do algoritmo de propagação através do tempo na próxima aula nós vamos entender um pouco melhor o que que esse problema do desaparecimento da Explosão do Gradiente estudar redes que incorporam memória de longo prazo a Gru e a lspm agradeço novamente a atenção de todos e até a próxima aula [Música] [Música]