Rede Neural: Por que não consigo me ajustar demais?

8

Eu tenho uma rede neural (camada única feed-forward) com a qual tento prever uma variável relacionada ao ambiente a partir de duas variáveis ​​financeiras (regressão). Eu uso a função "train" do pacote de intercalação.

Eu uso o nnet()algoritmo no pacote de sinal de intercalação. Eu tenho dois preditores contínuos e 420 pontos de dados.

Para o entendimento teórico, tento superabordar propositadamente o meu modelo; no meu entendimento, isso normalmente deve funcionar com todos os conjuntos de dados, por exemplo, antes de aumentar o "tamanho" (ou seja, o número de unidades ocultas). No entanto, aumentar drasticamente o tamanho das unidades ocultas não leva ao ajuste excessivo.

Portanto, é errado supor que você possa superestimar todas as redes neurais aumentando o "tamanho"? Que outra variável poderia levar a um excesso de ajuste?

grid <- expand.grid(size = 20
                    )

control <- trainControl(method = "cv", 
                        number = 10,
                        verboseIter = TRUE
                        )

fit <- train(x=train_parametres, y=train_result, 
             method = "mlp", 
             metric = "Rsquared",
             learnFunc = "Std_Backpropagation",
             learnFuncParams = c(0.2, 0.0),
             maxit = 1000,
             trControl = control,
             tuneGrid = grid,
             preProcess = c("center", "scale"), 
             linout = T,
             verbose = T,
             allowParallel = T
)
Requin
fonte

Respostas:

2

O motivo para tentar ajustar demais um conjunto de dados é entender a capacidade do modelo necessária para representar seu conjunto de dados.

Se a capacidade do nosso modelo for muito baixa, você não poderá representar seu conjunto de dados. Quando você aumenta a capacidade do modelo até poder representar completamente seu conjunto de dados, sabe que encontrou a capacidade mínima.

O sobreajuste não é o objetivo aqui, é um subproduto. Seu modelo provavelmente representa o conjunto de dados e não necessariamente o conceito . Se você tentar este modelo em um conjunto de testes, o desempenho provavelmente será menor, indicando o excesso de ajuste.

No entanto, a capacidade do modelo não é a única razão pela qual um modelo não pode representar um conceito. É possível que o conceito não pertença à família de funções representadas pelo seu modelo - como quando o seu NN é linear e o conceito não. É possível que a entrada não seja suficiente para diferir entre as amostras ou que seu algoritmo de otimização simplesmente não encontrou a solução adequada.

No seu caso, você tem apenas dois preditores. Se eles eram binários, era bem provável que você não pudesse representar muito com eles. Supondo que eles sejam limitados e suaves, você pode tentar classificá-los. Se você obtiver alta entropia em compartimentos (por exemplo, um compartimento com distribuição de 50% a 50%), nenhuma lógica de retransmissão apenas nesses recursos poderá diferenciá-los.

DaL
fonte
Obrigado pela sua resposta. Não tenho certeza se eu entendo completamente: não consigo ajustar demais (no sentido de obter um R2 próximo de 1) porque a "capacidade" dos modelos não é grande o suficiente? Com relação à função que o NN está usando: Eu tenho que especificar "linout = T" - isso significa que o NN que estou usando é limitado a funções lineares e que essa pode ser uma razão pela qual o algoritmo não se encaixa melhor o conjunto de treinamento?
Requin
Geralmente tentamos atingir o excesso de ajustes para estimar a capacidade necessária. Isso funcionará se o modelo puder realmente representar o conjunto de dados, com capacidade suficiente. Como você tem um pequeno conjunto de dados, acredito que a capacidade não é seu problema. O que acontece até a metade está faltando informações que você pode tentar verificar usando as caixas sugeridas na resposta. Outro motivo possível são amostras anômalas. A que nível de desempenho você alcança o conjunto de trens. Quanto às funções lineares, era uma possibilidade geral, não específica para o seu caso. Eu não uso esta biblioteca e não estou familiarizado com seus parâmetros.
DaL 28/11
1

Eu tive o mesmo problema, mantive zero regularização e taxa de aprendizado ideal. mas o declínio da taxa de aprendizado foi definido como zero. Depois de definir o declínio da taxa de aprendizado para algum valor como 0,95, funcionou e aumentou o número de épocas

Niranjan SD
fonte