Aqui, dê uma olhada: Você pode ver exatamente onde os dados de treinamento terminam. Os dados de treinamento vão de a 1 .
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.
regression
neural-networks
python
keras
Markus Appel
fonte
fonte
Respostas:
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.
(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 )
fonte
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,
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)
fonte
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.
fonte
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.
fonte
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.
fonte