Como faço para melhorar minha rede neural na previsão de ondas senoidais?

21

Aqui, dê uma olhada: Onda senoidal gerada Você pode ver exatamente onde os dados de treinamento terminam. Os dados de treinamento vão de a 1 .11

Usei Keras e uma rede densa 1-100-100-2 com ativação tanh. Calculo o resultado de dois valores, peq como p / q. Dessa forma, posso obter qualquer tamanho de número usando apenas valores menores que 1.

Por favor, note que ainda sou iniciante neste campo, portanto, vá com calma comigo.

Markus Appel
fonte
1
Para esclarecer, seus dados de treinamento variam de -1,5 a +1,5. Portanto, a rede aprendeu isso com precisão? Portanto, sua pergunta é sobre extrapolar o resultado para números invisíveis fora do intervalo de dados de treinamento?
Neil Slater
11
Você pode tentar Fourier transformando tudo e trabalhando no domínio da frequência.
Nick Alger
4
Para futuros revisores: não sei por que isso está sendo sinalizado para fechamento. Parece perfeitamente claro para mim: trata-se de estratégias para modelar dados periódicos com redes neurais.
Sycorax diz Reinstate Monica
1
Eu acho que é uma pergunta razoável para um iniciante no domínio do aprendizado de máquina, que devemos acomodar aqui. Eu não iria fechá-lo #
1100 Aksakal
1
Não sei se isso vai ajudar, mas, fora da caixa, um NN de baunilha só poderá aprender funções polinomiais. Na prática, isso é bom, pois você pode fazer um polinômio fechar arbitrariamente em um intervalo fixo. Mas isso significa que você nunca pode aprender uma onda senoidal que se estende além dos fins do intervalo. O truque que outras respostas apontaram abaixo é transformar o problema em um que possa ser resolvido dessa maneira. É isso que a transformação de Fourier sugerida faz e, nesse caso, aprender uma onda senoidal é apenas aprender uma constante.
Ukko

Respostas:

19

Você está usando uma rede feed-forward; as outras respostas estão corretas, dizendo que os FFNNs não são bons em extrapolação além do alcance dos dados de treinamento.

No entanto, como os dados têm uma qualidade periódica, o problema pode ser passível de modelagem com um LSTM. Os LSTMs são uma variedade de células da rede neural que operam em seqüências e têm uma "memória" sobre o que "viram" antes. O resumo deste capítulo do livro sugere que uma abordagem LSTM é um sucesso qualificado em problemas periódicos.

(xi,sin(xi))xi+1xi+nni

(Jimenez-Guarneros, Magdiel e Gomez-Gil, Pilar e Fonseca-Delgado, Rigoberto e Ramirez-Cortes, Manuel e Alarcon-Aquino, Vicente, "Previsão a longo prazo de uma função seno usando uma rede neural LSTM", em Nature- Design inspirado de sistemas inteligentes híbridos )

Sycorax diz restabelecer Monica
fonte
2
Qual é a sequência que está sendo modelada aqui? Quais são as etapas do tempo? Isso me parece uma aplicação simples de ajuste de curvas.
David J. Harris
@ DavidJ.Harris Atualizei minha resposta.
Sycorax diz Restabelecer Monica
1/(2π)
É assim que eles fazem previsões de mercado, por exemplo?
Markus Appel
3
Não, não é assim que você faz previsões de mercado. Pelo menos não como você faz isso para ganhar dinheiro.
Aksakal
13

Se o que você quer fazer é aprender funções periódicas simples como essa, você pode usar os Processos Gaussianos. Os GPs permitem que você imponha o conhecimento do seu domínio até certo ponto, especificando uma função de covariância apropriada; neste exemplo, como você sabe que os dados são periódicos, você pode escolher um kernel periódico e o modelo extrapolará essa estrutura. Você pode ver um exemplo na figura; aqui, estou tentando ajustar dados de altura da maré, para que eu saiba que ele possui uma estrutura periódica. Como estou usando uma estrutura periódica, o modelo extrapola essa periodicidade (mais ou menos) corretamente. OFC, se você está tentando aprender sobre redes neurais, isso não é realmente relevante, mas pode ser uma abordagem um pouco melhor do que os recursos de engenharia manual. Aliás, redes neurais e gp's estão intimamente relacionados em teoria,insira a descrição da imagem aqui

Os GPs nem sempre são úteis porque, diferentemente das redes neurais, são difíceis de dimensionar para grandes conjuntos de dados e redes profundas, mas se você estiver interessado em problemas de baixa dimensão como esse, provavelmente será mais rápido e confiável.

(na figura, os pontos pretos são dados de treinamento e o vermelho são os alvos; você pode ver que, embora não acerte exatamente, o modelo aprende a periodicidade aproximadamente. As faixas coloridas são os intervalos de confiança do modelo. predição)

lsgs
fonte
2
Esse enredo é lindo.
Sycorax diz Restabelecer Monica
11

Os algoritmos de aprendizado de máquina - incluindo redes neurais - podem aprender a aproximar funções arbitrárias, mas apenas no intervalo em que há densidade suficiente de dados de treinamento.

Os algoritmos de aprendizado de máquina baseados em estatística funcionam melhor quando eles executam interpolação - prevendo valores próximos ou intermediários dos exemplos de treinamento.

Fora dos seus dados de treinamento, você espera extrapolação. Mas não há uma maneira fácil de conseguir isso. Uma rede neural nunca aprende uma função analiticamente, apenas aproximadamente via estatística - isso é verdade para quase todas as técnicas de aprendizado supervisionado de ML. Os algoritmos mais avançados podem se aproximar arbitrariamente de uma função escolhida, com exemplos suficientes (e parâmetros livres no modelo), mas ainda assim o farão apenas no intervalo de dados de treinamento fornecidos.

O modo como a rede (ou outro ML) se comporta fora do intervalo de seus dados de treinamento dependerá de sua arquitetura, incluindo as funções de ativação usadas.

sinsin(x),sin(2x+π/4)sin função de .

Neil Slater
fonte
"Uma rede neural nunca aprende uma função analiticamente, apenas aproximadamente via estatística". - o mesmo pode ser dito quase sobre qualquer coisa usada na prática, por exemplo, a FFT também não aprende analiticamente. Você pode aumentar a taxa de amostragem e o período até o infinito e se aproximar infinitamente da função verdadeira, mas o mesmo acontece com NN.
Aksakal
@Aksakal: Sim, isso é verdade. No entanto, eu não queria afirmar que "Todos os algoritmos de ML nunca aprendem funções analiticamente..." porque alguém, sem dúvida, viria com um contra-exemplo de algum aluno analítica Bayesiana ou programação genética etc etc. Vou tentar editá-lo para torná-lo mais geral
Neil Slater
9

Em alguns casos, a abordagem sugerida pelo @Neil Slater de transformar seus recursos com uma função periódica funcionará muito bem e pode ser a melhor solução. A dificuldade aqui é que você pode precisar escolher o período / comprimento de onda manualmente (consulte esta pergunta ).

Se você deseja que a periodicidade seja incorporada mais profundamente à rede, a maneira mais fácil seria usar sin / cos como sua função de ativação em uma ou mais camadas. Este artigo discute possíveis dificuldades e estratégias para lidar com funções de ativação periódicas.

Como alternativa, este artigo adota uma abordagem diferente, na qual os pesos da rede dependem de uma função periódica. O artigo também sugere o uso de splines em vez de sin / cos, uma vez que são mais flexíveis. Este foi um dos meus artigos favoritos no ano passado, por isso vale a pena ler (ou pelo menos assistir ao vídeo), mesmo que você não use essa abordagem.

David J. Harris
fonte
9

Você adotou uma abordagem errada, nada pode ser feito com essa abordagem para corrigir o problema.

Existem várias maneiras diferentes de resolver o problema. Vou sugerir o mais óbvio através da engenharia de recursos. Em vez de inserir o tempo como um recurso linear, coloque-o como restante do módulo T = 1. Por exemplo, t = 0,2, 1,2 e 2,2 se tornarão um recurso t1 = 0,1 etc. Enquanto T for maior que o período de onda, isso funcionará. Conecte essa coisa à sua rede e veja como ela funciona.

A engenharia de recursos é subestimada. Existe essa tendência na IA / ML, em que os vendedores afirmam que você despeja todos os seus insumos na rede e, de alguma forma, ele descobre o que fazer com eles. Claro que sim, como você viu no seu exemplo, mas depois quebra com a mesma facilidade. Este é um ótimo exemplo que mostra o quão importante é criar bons recursos, mesmo em alguns casos mais simples.

Além disso, espero que você perceba que este é o exemplo mais cruel da engenharia de recursos. É apenas para lhe dar uma idéia do que você poderia fazer com isso.

Aksakal
fonte