[Música] olá bem-vindos ao terceiro vídeo aula da sétima semana do curso de redes neurais nessa vídeo aula Nós faremos aplicação de alguns modelos que nós vimos nas aulas anteriores para fazer predição em séries temporais especificamente Nós faremos uma comparação entre o modelo baseado numa rede densa uma rede Multilaser lá no começo do curso em comparação uma rede recorrente que nós vimos ao longo dessa semana especificamente uma rede lsdm e nós vamos apresentar o desenvolvimento desses modelos para fazer a produção dessa séries temporais geradas artificialmente então para execução do código nós vamos utilizar o ambiente colábico
como nós já fizemos as aulas práticas anteriores a implementação será feita em linguagem Python utilizando Framework vamos lá que nós temos o código então disponibilizado para vocês na Ava a referente a exercício de apoio da semana 7 então ao longo desses códigos nos Faremos o carregamento dos pacotes necessários para implementação na sequência geração dos dados geração da séries temporais eu vou mostrar para vocês como foi feita essas séries a implementação dos dois modelos o modelo denso e o modelo baseado na rede lspm e por fim apresentar algumas especificações do que que a gente espera do
exercício de apoio da semana a que um pequeno observação esse código ele foi extraído do depósito oficial do pai-torq dentro desse repositório tem diversas aplicações de diversos modelos de redes neurais que nós vimos e também modelos que nós não vimos no curso Então a fonte de apoio bastante interessante para quem quiser consultar a implementação de outros modelos em relação aos pacotes nós carregamos os pacotes básicos relacionado a implementação da rede a otimizador que vai ser utilizado para conferar os par âmetros dos modelos o pacote não pai para manipulação de vetores e o pacote livre para
plotagem dos gráficos a geração dos dados eu vou mostrar primeiro para vocês aqui os gráficos em si então nós geramos uma sequência de séries senoides com deslocamento com pequeno lag de uma série para outra como que a gente faz essa séries nós utilizamos a função do Unopar seno definimos um período T aqui representado por 20 o comprimento dessa série é de 1000 pontos ou seja mil estantes de tempo e nós geramos um total de n = 100 ou seja n séries temporais para o conjunto de treinamento e teste que que nós fizemos primeiro cada série
temporal ela tem mil pontos nós vamos separar 999 pontos como sendo a entrada do modelo e um ponto Último Ponto da série como sendo aquele ponto que a gente quer fazer a predição ou seja dados 999 pontos anteriores eu quero para dizer humilhar de um ponto que algo tá sendo feito nesse código aqui é nesses comandos torch a forma não vai o conjunto de treino então ele tem 90 séries dessa série geradas e o nosso conjunto de teste vai ter as 10 as outras 10 séries restantes Tá bom até o plot então de apenas algumas
séries geradas e vamos para o modelo então o primeiro modelo mlp a gente vai trabalhar com o modelo com duas camadas ocultas contendo 51 neurônios na primeira camada oculta e 51 neurônios na segunda camada oculta e a camada de saída ela vai ser uma camada linear simplesmente responsável por gerar o combinador daquela 51 saídas da camada anterior e para dizer qual vai ser o valor daquele ponto a partir dos dados fornecidos na camada de entrada tá então é uma rede bastante simples e a gente vai utilizar essa mesma configuração para definir a rede Listen ou
seja uma rede com duas camadas com 51 neurônios em cada uma das camadas ocultas Aqui tá o laço de laço não a função de propagação da rede ou seja dado a entrada Inicial os 999 pontos nós vamos alimentar nossa rede com 999 pontos e para dizer o milésimo ponto da rede ou seja um instante futuro Observe que essa função for World ela tem um parâmetro chamado Filter nesse momento ele tá igual a zero como defoo quando ele tá igual a zero o que que ele faz ele pega exatamente os 999 pontos e prediz um milésimo
ponto quando o futuro ele está com valor superior a 0 2 3 5 mil independente do valor que tá fornecido o que que essa função World vai fazer ela vai pegar inicialmente os 999 pontos para dizer o milésimo ponto ela vai deslocar essa janela agora do ponto é dois ao ponto 1000 para dizer o milésimo primeiro e assim sucessivamente por todo o futuro estabelecido nessa variável Então você definir mil pontos futuros ela vai definir a partir do primeiro ponto gerado ela vai fazer mil deslocamentos nessa janela sempre concatenando aquele valor gerado no instante anterior como
sendo a entrada do instante posterior Aqui tá o nosso Aço de Treinamento ou seja nosso primeiros definimos a nossa rede Multilaser na sequência a gente define Qual que é a função de custo utilizada a Clear que é uma função que é o erro quadradinho médio e como otimizador nós estamos utilizando o a função o algoritmo Adam com parâmetros definidos aqui em cima tá bom o laço de Treinamento ele é um laço padrão também onde nosso primeiro zeramos os gradientes do modelo para garantir que todo mundo inicialmente tá zero nós apresentamos os dados de treinamento para
o modelo que seria esse out mlp esse áudio então ele recebe os dados fornecidos a partir do impulso introduzido no modelo então nós geramos aquela apresentamos aquelas 99 pontos e ele perde disso pra gente milésimo ponto com isso a gente calcula a função de custo e a cada mil passos a gente bota Qual que é o erro que tá sendo observado naquele instante do tempo então Aqui nós temos o decaimento dos erros a gente observa que cai muito rápido para valores muito próximos de zero ou seja na hora de 10 a menos 7 Então vamos
fazer agora considerando que esse modelo tá treinado com erro baixo fazer a predição de fato dele ou seja o modelo já foi treinado dados 999 pontos ele consegue para dizer o milésimo ponto o que que a gente vai fazer nesse momento eu vou tentar utilizar esse modelo para gerar uma série com estantes futuros ou seja cada ponto gerado pelo próprio modelo vai ser concatenado a entrada para geração do próximo ponto Então a gente vai gerar o ponto no instante T esse ponto é com catenado para gerar o t + 1 esse ponto gerado tem mais
um ele é concatenado para gerar o ponto tem mais dois e assim durante mil interações que é o parâmetro futuro que a gente está utilizando nesse caso tá bom que que a gente observa aqui para diversas séries para alguns exemplos de séries do nosso conjunto de teste a gente tem os estudantes iniciais aqui até mil até 999 que representa exatamente os pontos conhecidos ou seja aquela janela que eu tô apresentando para o modelo e a janela começa então gerando a partir do ponto mil 1001 1002 1003 e o que que a gente consegue observar que
claramente o modelo não consegue aprender embora ele tem um erro muito baixo na produção do milésimo ponto a partir do 999 pontos anteriores eu não consigo concatenar esse ponto gerando uma nova janela de 999 pontos para dizer o milésimo primeiro ponto basicamente a série começa para dizer uma uma função linear reta né ele perde essa capacidade de oscilação do modelo Ou seja é um modelo relativamente complexo ou seja nós temos 51 neurônios da primeira camada 51 neurônios da segunda camada e mesmo assim ele não consegue fazer a tradição dessa série temporal então para mostrar um
contra exemplo aqui utilizando redes e correntes vou apresentar para vocês o modelo desenvolvido utilizando a célula lsdm como eu já comentei anteriormente a gente vai utilizar mesmo estrutura no seguinte sentido eu vou ter também duas camadas ocultas com 51 neurônios em cada uma dessas camadas e como neurônio de saída a gente vai ter um simples neurônio linear que faz a combinação dos Estados do 51 neurônios anteriores gerando aquela saída predita dadas as entradas fornecidas Aqui nós temos uma pequena diferença na função de faword primeiro quando a gente trabalha com redes densas para fazer análises temporais
nós precisamos fazer a entrada dos dados janelados pouco nós fizemos antes ou seja entra com 999 para dizer mil Eu entro com n pontos para dizer o enésimo mais um ponto da série no caso da rede lspm nós sabemos que ela tem uma memória tanto de curto quanto de longo prazo então o que que a gente vai fazer nessa rede eu vou apresentar um primeiro instante do tempo apenas um ponto com esse primeiro ponto eu vou apresentar Vou definir o estado oculto da rede eu vou apresentar o segundo ponto a saída para esse segundo ponto
vai ser apresentação do segundo ponto mais o estado que ela já tinha do ponto anterior isso é feito repetidamente do ponto 1.2.3 até o ponto 999 uma vez que eu carreguei esses 999 pontos na rede eu vou gerar o milésimo ponto aí uma vez que eu gerei um milésimo ponto na fase de predição que que a gente vai fazer a gente vai concatenar esse ponto gerado de novo no como entrada da rede gerando o próximo estado esse próximo estado é apresentado para rede como entrada chamando o próximo estado e assim sucessivamente durante observa que a
gente tem dois laços aqui nesse primeiro laço primeiro laço fora da função Word a gente tá fazendo o processo de propagação daqueles 999 pontos conhecidos ou seja se a gente pensar que eu tô querendo só treinar o modelo e fazer a produção do milésimo ponto a gente só fica nesse primeiro laço quando a gente vai fazer a produção futura a gente entra nesse segundo laço onde ele vai concatenando Aqueles valores gerados pelo modelo na entrada para gerar o próximo ponto e assim sucessivamente tá bom laço de Treinamento ele é exatamente igual ao da rede multilaser
com a diferença aqui que nós estamos carregando uma rede lsdm ao invés da rede mlp tá bom treinamento também mesmo processo a gente fizeram o gradiente calcula a saída do modelo com base nas entradas calcula a função de custo que é nosso loss e apresenta cada 10 passos nesse caso qual que está sendo o valor do Losso obtido naquele instante do tempo você conhece a gente realiza a fase de reto propagação e atualização dos pesos como feito na rede Multilaser aqui a gente observa um decaimento um pouco mais lento dos dados do da função de
custo ou se a gente começa com 0.5 e vai decaindo até um valor baixo Mas não tão baixo quanto aquele que foi gerado para rede Multilaser então a gente pode esperar o erro de predição Aparentemente está superior aquele fornecido pela rede Multilaser Porém quando a gente parte para o processo de validação dos dados ou seja tô fazendo a produção futura agora a partir daqueles 999 pontos iniciais eu quero produzir mil estantes posteriores a gente pode observar que a rede de fato ela consegue aprender o comportamento senoidal ou seja para cada uma das séries apresentadas até
o instante mil são aqueles pontos conhecidos Ou seja eu não tô não tô utilizando pontos gerados pelo próprio modelo como entrada da rede a partir do instante mil a gente Está apresentando como entrada do modelo o próprio ponto gerado no instante anterior ou seja uma rede com uma quantidade bastante inferior de pontos a gente consegue predizer aquele comportamento senoide da séries temporais geradas que que é importante isso daqui quando a gente pensa na rede Multilaser para realizar um processamento de série temporal de você entrar com janela ou seja precisa entrar com 999 eu preciso entrar
com n pontos como entrada do modelo já na rede stm como nós vimos aqui nós não precisamos fazer isso nós temos apenas a apresentação de um ponto esse ponto ele gera a primeira saída nós apresentamos o segundo a segunda entrada para o modelo que já tá carregado já tem um estado oculto com base na primeira saída a gente vai fazendo esse processo repetidas vezes sempre atualizando o estado interno do modelo é com base no estado interno do modelo no instante anterior e a nova entrada apresentada para a rede como exercício de apoio da semana aqui
é primeiro ponto essa rede ela demora bastante para ser treinada tá então era para vocês forem utilizar o colar fazer o treinamento principalmente a rede ltm ela demanda em torno de 15 minutos para fazer o treinamento na configuração atual que ela foi definida então cuidado com o escopo do da quantidade de simulações que vocês forem realizar porque ela pode demandar um certo tempo de processamento um certo tempo para conclusão dos experimentos então o que que a gente espera que vocês façam nessa ao longo dessa dessa atividade de exercício de apoio primeiro treinar modelos com outras
configurações o que que acontece ao invés de utilizar duas camadas ocultas com 51 neurônios utilizar apenas uma camada oculta com n neurônios com 10 neurônios com 100 neurônios qualquer Impacto disso na na predição da rede será que eu consigo treinar uma rede Multilaser para fazer essa tradição Será que alterando a quantidade de camadas a quantidade de neurônios a gente consegue melhorar aquela saída da rede que foi totalmente ineficiente nesse caso apresentado ou seja dado aquele comportamento sendo ódio de repente a rede apresenta uma série linear uma série onde não tem mais aquela oscilação então alterar
esses parâmetros verificar reportar qualquer Impacto disso na rede a gente pode dificultar um pouquinho o problema também no caso específico apresentado a gente utilizou apenas séries senoide simples com pequeno deslocamento Temporal da série com pequeno shift da série A gente pode inserir ruídos nessa série para dificultar um pouco mais o processo de aprendizagem modelo qualquer impacto da inserção desse ruído então para isso basta naquela função seno de colocar alguma função de valor aleatório agregado na geração da função seno na semana quatro nós fizemos algo parecido no Exercício da semana 4 então se vocês quiserem Verificar
como que a gente agrega esse ruído basta ela no Exercício da semana 4 que vocês vão Verificar como que nós geramos essa séries com ruídos o que que acontece nós utilizamos janelas maiores ou menores para rede mlp será que a gente consegue de fato fazer com que essa rede aprenda esse comportamento e a gente não tem apenas a rede elestême como rede recorrente a gente pode utilizar uma célula neural assim como da própria rede Multilaser isso vai ter um impacto ou não na geração então o que que a gente sugere que vocês façam nessa nessa
nesse exercício de apoio troquem aquela célula Ela este m por célula de ru ou mesmo uma célula da rede da rede Multilaser de forma simples ou seja só com a memória de curto prazo Será que essa rede recorrente agora sem a memória de longo prazo ela consegue para dizer o valor da série temporal gerada assim como redeléstm então são várias atividades que vocês podem realizar ao longo da semana não necessariamente Vocês precisam realizar todas mas o que que é interessante desse processo é ao trocar algum parâmetro da rede a gente consegue observar diminuir o número
de camadas o que que aconteceu com a rede aumentei o número de camadas o que que aconteceu com a rede tendo esse sentimento do que que o parâmetro do que que o hiper parâmetro da rede impacta na no resultado final do modelo treinado em especial Será que a gente consegue o desafio né Será que a gente consegue fazer com que uma rede Multilaser percebe que não seja uma unidade não recorrente uma rede não recorrente consiga aprender essa série temporal Então deixa o critério de vocês para realizar esse experimentos e por fim reportar os resultados obtidos
no fórum da semana para que vocês possam comparar entre os alunos que aconteceu porque às vezes algum aluno pode colocar mais camadas outro pode colocar menos camadas qual que foi o impacto disso a partir desse texto desse conteúdo que vocês vão fornecer no fórum da semana a gente pode fazer uma comparação do que que cada um observou alterar esses hiper parâmetros da rede bom agradeço a atenção de todos e por hoje é isso [Música] [Música]