Com a simples inspeção do seu enredo, eu poderia tirar algumas conclusões e listar as coisas a tentar. (Isso sem você saber mais sobre sua configuração: parâmetros de treinamento e hiperparâmetros do modelo).
Parece que a perda está diminuindo (coloque uma linha de melhor ajuste na perda de validação). Também parece que você pode treinar por mais tempo para melhorar os resultados, pois a curva ainda está voltada para baixo.
Primeiro, tentarei responder à sua pergunta do título:
qual é a causa da flutuação na perda de validação?
Eu posso pensar em três possibilidades:
- Regularização - para ajudar a suavizar o processo de aprendizado e tornar os pesos do modelo mais robustos. Adicionar / aumentar sua regularização impedirá a introdução de grandes atualizações nos pesos.
- Tamanho do lote - é relativamente pequeno (por exemplo, <20?). Isso significa que o erro médio medido no final da rede é calculado usando apenas algumas amostras. Com um tamanho de lote de, digamos
8
, a 4/8
correção e a comparação com a 6/8
correção têm uma grande diferença relativa ao observar a perda. Tomar a média dos erros com lotes tão pequenos levará a uma curva de perda não tão suave. Se você tiver memória / RAM GPU suficientes, tente aumentar o tamanho do lote.
- Taxa de aprendizado - pode ser muito grande. Isso é semelhante ao primeiro ponto em relação à regularização. Para fazer melhorias mais suaves, pode ser necessário diminuir o ritmo do aprendizado ao se aproximar de um mínimo de perda. Você pode fazer isso, talvez, ser executado de acordo com um cronograma, em que é reduzido por algum fator (por exemplo, multiplique-o por 0,5) toda vez que a perda de validação não melhorar depois, digamos as
6
épocas. Isso impedirá que você dê grandes passos e, talvez, ultrapasse um mínimo e apenas salte ao redor dele.
Específico à sua tarefa, eu também sugeriria tentar descongelar outra camada , para aumentar o escopo do seu ajuste fino. Isso dará ao Resnet-18 um pouco mais de liberdade para aprender, com base em seus dados.
Em relação à sua última pergunta:
É algo com que eu deveria me preocupar ou devo escolher o modelo com a melhor pontuação na minha medida de desempenho (precisão)?
Você deveria estar preocupado? Em suma, não. Uma curva de perda de validação como a sua pode ser perfeitamente adequada e fornecer resultados razoáveis; no entanto, eu tentaria algumas das etapas mencionadas acima antes de me decidir.
Você deve apenas escolher o modelo com melhor desempenho? Se você quer dizer tomar o modelo no seu ponto com a melhor perda de validação (precisão da validação), então eu diria para ter mais cuidado. No seu gráfico acima, isso pode ser equivalente à época 30, mas eu pessoalmente consideraria um ponto que treinou um pouco mais, em que a curva fica um pouco menos volátil. Novamente, depois de ter tentado algumas das etapas descritas acima.