Parada antecipada vs validação cruzada

8

Atualmente, estou usando a parada antecipada no meu trabalho para evitar o excesso de ajuste. Especificamente, aqueles tomados em forma de parada antecipada, mas quando? .

Agora estou querendo comparar com outros algoritmos de classificação, onde parece que a validação cruzada de 10 vezes é amplamente usada.

No entanto, estou confuso sobre se a validação cruzada é um método para impedir o excesso de ajuste ou a seleção de bons parâmetros. (ou talvez este seja o mesmo?). Também estou confuso se métodos de parada precoce e validação cruzada podem ser usados ​​no lugar um do outro ou em combinação.

Portanto, a pergunta é: qual é a relação entre parada antecipada e validação cruzada?

Andy T
fonte

Respostas:

4

A validação cruzada é um método para estimar a precisão da generalização de um algoritmo de aprendizado supervisionado.

A parada precoce é um método para evitar ajustes excessivos e requer um método para avaliar a relação entre a precisão da generalização do modelo aprendido e a precisão do treinamento.

Portanto, você pode usar a validação cruzada para substituir o conjunto de validação, mencionado no artigo que você cita, dentro de uma estrutura de parada antecipada. A validação cruzada de dez vezes, por exemplo, seria mais precisa do que usar um único conjunto de validação e normalmente seria uma estimativa melhor do erro de generalização.

Portanto, para resumir, a validação cruzada é uma medida de precisão da generalização que pode ser usada como parte de uma estrutura de parada antecipada.

image_doctor
fonte
1
Isso tudo faz sentido, aplausos. Mas, do que eu posso dizer, 10 a validação cruzada encontrada parece ser usada para escolher os parâmetros para um determinado método, para não parar cedo ao usar esse método. Então, acho que ainda devo estar perdendo alguma coisa.
21715 Andy T (
@ AndyT Talvez a coisa a focar aqui seja a estimativa de generalização. Tanto a seleção de parâmetros quanto a parada precoce requerem um bom estimador de erro de generalização. A validação cruzada N fold é um desses estimadores. Existem outros, como espera repetida e inicialização ou um conjunto de validação simples. O que você está tentando fazer nos dois casos, seleção de parâmetros e parada antecipada é avaliar como o modelo será executado em dados invisíveis para que você possa escolher um bom modelo. Para fazer isso, nos dois casos, você usa um estimador de generalização. Isso ajuda ?
Image0doctor
Sim, está claro. Muito obrigado pelo seu tempo! É muito apreciado.
Andy T
@AndyT Sem problemas, espero que seu projeto corra bem!
image_doctor
1

Além das duas abordagens de generalização mencionadas, existem muitas outras.

  • adicionando termos de regularização em sua função de perda (custo) que minimizam o número e a magnitude de seus parâmetros de modelo diferentes de zero
  • descartar aleatoriamente (zerar) alguma parte dos pesos / parâmetros em seu modelo a cada época de treinamento
  • adicionando uma camada de nós estocásticos no seu modelo (por exemplo, amostragem das "probabilidades" fornecidas pelas saídas das funções logísticas)

Muitas dessas abordagens (incluindo as abordagens de validação cruzada e parada antecipada) podem ser combinadas para maximizar o desempenho do modelo em dados não vistos (desempenho da generalização).

Uma observação sobre a abordagem de parada antecipada. Para redes neurais, Geoffrey Hinton recomenda interromper o treinamento quando a precisão do conjunto de testes atingir o máximo (a perda do conjunto de testes, excluindo os termos de regularização, é mínima). Um outro "ajuste" na abordagem de Hinton é não parar se a precisão do conjunto de testes for melhor (a perda é menor) do que para o seu conjunto de treinamento, mesmo que a precisão do conjunto de testes tenha parado de melhorar (a perda do conjunto de testes parou de diminuir). É improvável que você ganhe mais de uma época de treinamento, mas às vezes isso pode ajudar um pouco, especialmente em pequenos conjuntos de testes. Não faça isso para conjuntos de testes extremamente pequenos (menores que um conjunto de amostras representativo, como às vezes é usado no treinamento e na validação cruzada de dobras em K).

fogão
fonte
0

você não pode usar a parada antecipada e a validação cruzada com dobra K em combinação. como a parada antecipada seleciona o melhor modelo do conjunto de validação, o desempenho precisa ser verificado pelo conjunto de testes. mas na validação cruzada K-fold, não há um conjunto de testes, se você estiver usando a parada antecipada para selecionar o melhor modelo do conjunto de validação, e ele será verificado novamente no conjunto de validação. a validação cruzada K-fold está obtendo o desempenho médio (medido pela precisão) do melhor modelo, e isso não significa nada.

tianyu zhou
fonte
O número de iterações de treinamento pode ser tratado como um hiperparâmetro e selecionado usando a validação cruzada, assim como qualquer outro hiperparâmetro. Alguém poderia razoavelmente chamar isso de "parada antecipada".
User20160
ao usar a parada antecipada na validação cruzada K fold, o número de épocas é fixado pelo conjunto de validações e diferente para cada divisão. Isso fará com que a rede escolha o melhor modelo em cada divisão, o que não representa o desempenho médio.
tianyu zhou 8/08/18
2
A maneira de fazer isso seria: 1) Treine para um número de iterações em cada dobra (por exemplo, até um determinado máximo). 2) Calcule o erro médio do conjunto de validação (entre dobras) como uma função do número de iterações. 3) Selecione o número de iterações que minimiza o erro médio do conjunto de validação.
User20160 08/08/19
Aqui está a minha solução: 1. embaralhe todos os dados, 2. faça 10 vezes por sklearn, kfold = StratifiedKFold (n_splits = 10, shuffle = False) 3, defina retorno de chamada: callbacks_list = [EarlyStopping (monitor = 'val_loss', paciência = 50, detalhado = 0, modo = 'min')] 4. escolha o melhor modelo parando antecipadamente. history = model.fit (X [trem], Y [trem], épocas = 250, lote_size = 512, detalhado = 1, retornos de chamada = callbacks_list, validation_split = 0,1, shuffle = False) defina outro conjunto de validação de divisão automática de X [train ], Y [trem]. 5. teste o desempenho por X [teste] Andy [teste]: pontuação = model.evaluate (X [teste], Y [teste], detalhado = 0)
Tianyu Zhou