Como treinar o modelo LSTM em vários dados de séries temporais?

13

Como treinar o modelo LSTM em vários dados de séries temporais?

Caso de uso: tenho vendas semanais de 20.000 agentes nos últimos 5 anos. Precisa prever as próximas vendas semanais para cada agente.

Preciso seguir uma técnica de processamento em lote - pegue um agente de cada vez, treine o modelo LSTM e faça a previsão? Alguma maneira melhor?

Aljo Jose
fonte
você descobriu isso? Estou olhando para um problema semelhante.
Vishnu Viswanath
@vishnuviswanath estamos trabalhando no desenvolvimento de uma rede neural (RNN), que pode ser um modelo único para todos os agentes.
Aljo Jose
obrigado. como você está treinando o modelo para vários agentes? você está treinando um agente por lote.
Vishnu Viswanath
ainda estamos em fase de construção. kaggle.com/c/web-traffic-time-series-forecasting/discussion/… pode ajudar.
Aljo Jose

Respostas:

11

Torne a identidade do agente um dos recursos e treine todos os dados. Provavelmente, treine um minilote de, por exemplo, 128 agentes de cada vez: percorra a série cronológica do início ao fim para esses 128 agentes e selecione um novo minilote de agentes. Para cada mini-lote, execute uma fatia dos digamos 50 timesteps e depois faça backprop. Mantenha os estados finais dessa fatia e execute os próximos 50 timesteps, a partir desses estados finais. Enxágüe e repita até chegar ao final dos intervalos de tempo, para aquele mini-lote de ~ 128 agentes.

Ao colocar a identidade de cada agente como um dos recursos, você possibilita à rede:

  • aprenda com todos os seus dados, maximizando assim a utilização de seus dados e
  • aprenda as características exclusivas de cada agente, para que ele não faça a média de todos os agentes juntos
  • ao prever o futuro de um agente específico, use os recursos de identificação de agente correspondentes e a rede ajustará as previsões de acordo.

Edit: Alpo Jose escreveu:

ok, preciso usar uma codificação quente para fazer a identidade do agente?

Ooo, isso é verdade. Existem 20.000 deles. Isso é muito. Eu acho que o que você pode querer fazer é incorporá-los. Tenha uma camada de pesquisa, que capte um ID de agente (expresso como um número inteiro, um índice) e produza um vetor de alta dimensão, como algo como um vetor de comprimento 50-300, provavelmente um vetor cujo comprimento corresponda aproximadamente ao tamanho oculto de seu LSTM.

Matematicamente, uma tabela de pesquisa, também chamada de 'camada de incorporação', é equivalente a transformar os IDs do agente em vetores quentes, passando então por uma camada linear (totalmente conectada). No entanto, os requisitos de memória são muito reduzidos para a camada de incorporação.

Em termos do que a camada de incorporação aprenderá, à medida que você a treina, a camada de incorporação formará algum tipo de representação latente de cada agente. A representação latente provavelmente não será legível / interpretável, mas permitirá que o modelo aprenda coisas como 'ok, esse agente, 1524, é relativamente eficaz, mas não nos fins de semana; onde 1526 é ótimo todos os dias; etc .... '. As dimensões latentes do vetor de incorporação podem realmente significar coisas, mas ninguém nunca tenta descobrir o que elas significam (acho que seria difícil / impossível). No entanto, as combinações de alta dimensão por agente permitem que o modelo aprenda algo sobre o comportamento de cada agente e modele isso nas previsões de séries temporais.

Hugh Perkins
fonte
ok, preciso usar uma codificação quente para fazer a identidade do agente?
Aljo Jose
@AljoJose atualizou a resposta para ter em conta esta questão
Hugh Perkins
Eu entendo agora, vai dar uma chance. obrigado Hugh.
Aljo Jose
Eu tenho um problema semelhante, mas, diferentemente dos agentes aqui, tenho várias séries temporais como instâncias do mesmo processo, mas cada uma com comprimento variável. Portanto, não preciso do agente (processo, no meu caso) como um recurso. Alguma sugestão de como lidar com isso?
Anakin