RNN aprendendo ondas senoidais de diferentes frequências


8

Como um aquecimento com redes neurais recorrentes, estou tentando prever uma onda senoidal de outra onda senoidal de outra frequência.

Meu modelo é um RNN simples, seu passe para frente pode ser expresso da seguinte forma:

rt=σ(Winxt+Wrecrt1))zt=Woutrt
onde é a função sigmóide.σ

Quando tanto a entrada como a entrada e a saída esperada são duas ondas senoidais da mesma frequência, mas com (possivelmente) uma mudança de fase, o modelo é capaz de convergir adequadamente para uma aproximação razoável.

No entanto, no caso a seguir, o modelo converge para um mínimo local e prediz zero o tempo todo:

  • entrada:x=sin(t)
  • saída esperada:y=sin(t2)

Aqui está o que a rede prevê quando recebe a sequência de entrada completa após 10 épocas de treinamento, usando mini-lotes do tamanho 16, uma taxa de aprendizado de 0,01, um comprimento de sequência de 16 e camadas ocultas do tamanho 32:

Previsão de rede após 10 épocas, usando mini-lotes de tamanho 16

O que me leva a pensar que a rede é incapaz de aprender com o tempo e depende apenas da entrada atual para fazer sua previsão.

Tentei ajustar a taxa de aprendizado, o comprimento das sequências e o tamanho das camadas ocultas sem muito sucesso.

Estou tendo exatamente o mesmo problema com um LSTM. Não quero acreditar que essas arquiteturas sejam falhas, alguma dica sobre o que estou fazendo de errado?

Estou usando um pacote rnn para o Torch, o código está em um Gist .

Respostas:


3

Seus dados basicamente não podem ser aprendidos com uma RNN treinada dessa maneira. Sua entrada é é periódica2 π sin ( t ) = sin ( t + 2 π )sin(t)2πsin(t)=sin(t+2π)

mas seu alvo é periódico e4 π sin ( t / 2 ) = - sin ( t + 2 π )sin(t/2)4πsin(t/2)=sin(t+2π)

Portanto, no seu conjunto de dados, você terá pares de entradas idênticas com saídas opostas. Em termos de erro médio quadrático, significa que a solução ideal é uma função nula.

Estas são duas fatias do seu gráfico em que você pode ver entradas idênticas, mas metas opostas insira a descrição da imagem aqui


1
Para elaborar essa resposta, surgiu o problema de usar a mesma inicialização de feedback para diferentes entradas. Resolvi isso fazendo (aleatoriamente) mais para frente do que para trás, a fim de aprender a sequência completa.
296 Simon
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.