Clase 5: Model Training
A diferencia de un Modelo de Machine Learning, las Redes Neuronales se entrenan de manera progresiva (se espera una mejora en cada Epoch). Si nuestra Arquitectura es apropiada nosotros deberíamos esperar que el
Loss
de nuestra red siempre disminuya. ¿Por qué?
Probablemente el concepto más importante para determinar si un modelo tiene potencial o no. Corresponden a dos tipos de errores que pueden sufrir los modelos de ML.
En general hay que buscar el equilibrio entre ambos tipos de errores:
Se refiere al proceso de entrenar un modelo en una cierta porción de los datos, pero validar sus rendimiento y capacidad de generalización en un set de datos no vistos por el modelo al momento de entrenar.
Los dos métodos más populares que se usan en Machine Learning son Holdout y K-Fold. Más métodos se pueden encontrar en los docs de Scikit-Learn.
Debido a los volúmenes de datos utilizados, el esquema de validación más utilizado es el Holdout.
Train
Se utiliza para entrenar.
Validation
Se utiliza para medir el nivel de generalización del modelo.
Test
Se utiliza para evaluar reportando una métrica de diseño del Modelo.
OJO
Loss
no es lo mismo que métrica
. ¿Cuál es la diferencia?
A diferencia de un modelo de Machine Learning el proceso de validación del modelo se realiza en paralelo con el entrenamiento. Es decir, se entrena y valida el modelo Epoch a Epoch.
Corresponde al proceso de Holdout pero repetido \(K\) veces.
La Evaluación del Modelo se hará en torno a una métrica definida a priori por el modelador. ¿Entonces es un Hiperparámetro?
La métrica a utilizar está íntimamente ligada al tipo de modelo.
Es posible utilizar métricas para ir monitoreando el progreso del modelo Epoch a Epoch.
Corresponde a la modificación del Training Loop con el Objetivo de Entrenar y Validar de manera simultánea.
Se realiza un Forward Pass con datos de Train y se calcula el Loss asociado. Internamente, Pytorch comienza a acumular Gradientes.
Se realiza un Backward Pass, se aplican los gradientes y se aplica el Update Rule.
Se realiza un nuevo Forward Pass, pero esta vez con los datos de Validación. En este caso Pytorch internamente sigue acumulando gradientes, lo cual no es correcto. Para ello se debe utilizar un with torch.no_grad()
. Se calcula un Validation Loss.
Es importante ser capaz de identificar el momento exacto en el cual el momento comienza su overfitting. Para ello se utiliza el “Checkpointing”.
Checkpoint
EarlyStopping