23 votos

Ajuste fino vs. Transferlearning vs. Aprendizaje desde cero

En mi tesis de maestría, estoy investigando sobre transfer learning en un caso de uso específico, un detector de señales de tráfico implementado como un Detector de un solo disparo con una red base VGG16 para clasificación. La investigación se centra en el problema de tener un detector que esté bien entrenado e interfiera en el conjunto de datos de señales de tráfico para el que fue entrenado (utilicé el conjunto de datos de detección de señales de tráfico de Bélgica), pero cuando se trata de usar el detector en otro país (Alemania, Austria, Italia, España,...) las señales de tráfico se ven más o menos diferentes lo que resulta en una cierta pérdida no deseada. Para obtener una visión general sobre este tema, recomendaría el artículo de wikipedia

\~ la siguiente sección es sobre mis preguntas de investigación ~

Entonces, teniendo un par de ejemplos de señales de tráfico en el nuevo país, ¿es mejor

  • ajustar finamente la red
  • transferir el aprendizaje de la red y congelar algunas de las capas de convolución
  • (como comparación) aprender el nuevo país desde cero

Incluso el primer detector (el entrenado desde cero en el completo conjunto de datos de Bélgica), ¿tiene alguna ventaja en cargar pesos preentrenados de modelos publicados de Zoos (por ejemplo VGG16/COCO) y luego ajustar/fine-tunear basado en esto?

Ahora, ¿qué estoy preguntando aquí? He implementado mi detector no por mi cuenta, sino basado en un puerto original SSD a Keras/Tensorflow (desde aquí) y ya lo he entrenado con diferentes variaciones (Bélgica desde cero, preentrenado con MS COCO, Transferencia a Alemania, Convolución congelada, ajuste fino a Alemania) y después de semanas de entrenamiento ahora puedo decir que Bélgica con pesos aleatorios desde cero está convergiendo más rápido (después de solo 40 épocas/2 días mi función de pérdida personalizada de SSD ha disminuido a un valor de 3) mientras que todas las demás variaciones necesitan mucho más tiempo, más épocas y la pérdida nunca baja de un valor de 9.

También encontré pesos preentrenados para clasificación de señales de tráfico con VGG16 que pensé deberían ser la base ideal para el transfer learning en este tema, pero este detector fue el peor hasta ahora (la pérdida se estancó en 11, incluso cuando se cambia la tasa de aprendizaje y después de 100 épocas se sobreajustó).

Parece que el transfer learning o el ajuste fino en estos detectores no tiene ninguna ventaja en absoluto. Es probable que esté haciendo algo mal o que no entienda el propósito del transfer learning correctamente (pensé que debería acelerar el aprendizaje, ya que la mayoría de las capas no son entrenables y, por lo tanto, no se realiza ningún cálculo).

No sé si esta es la plataforma adecuada para discutir sobre este tema, quizás conozcas un canal de slack o gitter al que pertenezca esto. Simplemente no sé si estoy atascado, o si estoy haciendo algo terriblemente mal.

29voto

user224758 Puntos 13

El aprendizaje por transferencia es cuando un modelo desarrollado para una tarea se reutiliza para trabajar en una segunda tarea. El ajuste fino es un enfoque para el aprendizaje por transferencia en el que se cambia la salida del modelo para que se ajuste a la nueva tarea y se entrena solo el modelo de salida.

En Aprendizaje por Transferencia o Adaptación de Dominio, entrenamos el modelo con un conjunto de datos. Luego, entrenamos el mismo modelo con otro conjunto de datos que tiene una distribución diferente de clases, o incluso con otras clases distintas a las del primer conjunto de entrenamiento).

En Ajuste Fino, un enfoque del Aprendizaje por Transferencia, tenemos un conjunto de datos, y utilizamos, digamos, el 90% de este en el entrenamiento. Luego, entrenamos el mismo modelo con el 10% restante. Por lo general, cambiamos la tasa de aprendizaje a una más baja, para que no tenga un impacto significativo en los pesos ya ajustados. También puedes tener un modelo base que funcione para una tarea similar y luego congelar algunas de las capas para mantener el conocimiento anterior al realizar la nueva sesión de entrenamiento con los nuevos datos. La capa de salida también puede ser diferente y tener algunas partes congeladas en relación al entrenamiento.

En mi experiencia, aprender desde cero conduce a mejores resultados, pero es mucho más costoso que los demás, especialmente en términos de tiempo y recursos consumidos.

Al utilizar el Aprendizaje por Transferencia, debes congelar algunas capas, principalmente las pre-entrenadas y solo entrenar las agregadas, y disminuir la tasa de aprendizaje para ajustar los pesos sin mezclar su significado para la red. Si aceleras la tasa de aprendizaje, normalmente te enfrentarás a resultados pobres debido a los grandes pasos en la optimización del descenso de gradiente. Esto puede llevar a un estado en el que la red neuronal no puede encontrar el mínimo global sino solo uno local.

Usar un modelo pre-entrenado en una tarea similar, generalmente da excelentes resultados cuando utilizamos Ajuste Fino. Sin embargo, si no tienes suficientes datos en el nuevo conjunto de datos o tus hiperparámetros no son los mejores, puedes obtener resultados insatisfactorios. El aprendizaje automático siempre depende de su conjunto de datos y de los parámetros de la red. Y en ese caso, deberías utilizar solo el Aprendizaje por Transferencia "estándar".

Entonces, debemos evaluar el equilibrio entre el consumo de recursos y tiempo con la precisión que deseamos, para elegir el mejor enfoque.

3voto

AK_ Puntos 101

El ajuste fino, el aprendizaje por transferencia y el aprendizaje desde cero son similares en el sentido de que son enfoques para entrenar un modelo en algunos datos. Pero hay diferencias importantes.

Tanto el ajuste fino como el aprendizaje por transferencia se basan en el conocimiento (parámetros) que un modelo existente ha aprendido de datos anteriores, mientras que el entrenamiento desde cero no se basa en el conocimiento que un modelo ha aprendido previamente.

Además, podemos diferenciar entre el ajuste fino y el aprendizaje por transferencia basado en cómo exactamente estos dos enfoques se basan en el conocimiento existente. En el aprendizaje por transferencia, se congelan los parámetros tomados del modelo existente.

En el ajuste fino, se entrena más a los parámetros tomados del modelo existente.

Tenga en cuenta que los tres enfoques se pueden combinar durante el entrenamiento. Por ejemplo, podrías crear un nuevo modelo agregando nuevas capas a un modelo existente. Luego, al entrenar este nuevo modelo, podrías congelar solo parte del modelo existente (las capas inferiores), ajustar fino el resto del modelo existente (las capas superiores) y entrenar las nuevas capas que agregaste desde cero. Por lo tanto, el aprendizaje por transferencia, el ajuste fino y el entrenamiento desde cero pueden coexistir.

También tenga en cuenta que el aprendizaje por transferencia no se puede usar por sí solo al aprender de nuevos datos debido a los parámetros congelados. El aprendizaje por transferencia debe combinarse ya sea con ajuste fino o con entrenamiento desde cero al aprender de nuevos datos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X