Después de leer muchos artículos sobre el aprendizaje profundo, tengo la sensación de que existen muchos trucos en el entrenamiento de la red para obtener un rendimiento mejor que el normal. Desde el punto de vista de la aplicación industrial, es muy difícil desarrollar este tipo de trucos, excepto los grupos de investigación de élite de las grandes empresas tecnológicas, por ejemplo, Google o Facebook. Entonces, ¿cuál es la mejor manera de aplicar los algoritmos de aprendizaje profundo en la práctica? Cualquier idea o sugerencia será muy apreciada.
Respuestas
¿Demasiados anuncios?Es cierto que algunos detalles utilizados para mejorar el rendimiento se consideran trucos y no siempre se sabe si estos trucos producen la misma mejora para sus datos y su red.
Algunas cosas que definitivamente necesitarás:
- Datos , mucho de ello
- GPUs le permitirá realizar experimentos más rápidamente y probar más cosas en menos tiempo.
- Análisis de la curva de aprendizaje. Al final, todo se reduce al rendimiento en el conjunto de pruebas, pero si se observan las métricas de entrenamiento y de prueba se pueden identificar las razones del mal rendimiento. ¿Un fuerte sesgo? ¿Exceso de ajuste por demasiados nodos ocultos?
- El función de activación . No creo que cuente como truco saber qué tipo de función de activación necesitas. ReLU tienen un carácter crítico en que no se saturan como los sigmoides y tanh. Una neurona con ReLU ya no tendrá una salida parecida a la probabilidad, pero de todos modos no necesitas esto para las neuronas de las capas de nivel medio. La ventaja que obtienes es mitigar el desvanecimiento o la explosión de los gradientes y acelerar la convergencia.
- Regularización . Puede que se apliquen como trucos, pero si usas alguna de las principales bibliotecas de aprendizaje profundo puedes conseguir implementaciones listas para usar para la regularización a través del abandono.
- Aumento de datos. Básicamente, está ampliando su conjunto de datos sintéticamente sin el coste añadido de la anotación manual. La clave es aumentar los datos con transformaciones que realmente tengan sentido. Para que la red pueda ver variantes de los datos que puede encontrar en la fase de prueba o cuando se despliegue en el producto. En el caso de los datos visuales, el volteo horizontal es trivial y aporta muchas ventajas. El jitter depende probablemente del tipo de datos y de su nivel de ruido.
- Sumergirse en la exploración de hiperparámetros puede ser frustrante. Empiece con redes pequeñas y procedimientos de entrenamiento sencillos. Las redes más pequeñas son más rápidas de entrenar. Añade más capas cuando veas signos de sobreajuste.
- Buena inicialización . Las inicializaciones aleatorias son apropiadas para medir la capacidad de convergencia de la red, pero no necesariamente conducen a un rendimiento óptimo. Al mismo tiempo, seguir iterando puede hacer que la red se ajuste demasiado a los datos de entrenamiento. Si es posible, utilice una red preentrenada que ya haya aprendido una representación y ajústela a su conjunto de datos. El preentrenamiento no supervisado es otra forma de proceder y puede permitir que el procedimiento de entrenamiento supervisado comience desde una posición mucho más prometedora en el espacio de pesos.
- Escudriñar trucos. Entender lo que realmente hace el truco. Un artículo que describa un pequeño detalle utilizado para mejorar el rendimiento de una red se centrará en ese nuevo aspecto. El artículo puede formar parte de una secuencia de proyectos en los que los autores han estado trabajando. El contexto del truco no siempre está claro de inmediato, pero para los autores no es un truco sino una técnica que resuelve un problema que tenían. A veces una técnica sale a la luz y es tratada como un truco y más tarde alguien analizará su impacto y describirá su función. Por ejemplo que este truco es equivalente a la regularización L2 con la que más gente está familiarizada. Podemos decidir si debemos probar esta nueva técnica o seguir con la regularización L2 que ya conocemos. Muchos de estos trucos intentan resolver problemas en el aprendizaje profundo, como el riesgo de sobreajuste, los cálculos costosos, la sobreparametrización y los pesos altamente redundantes. Vale la pena tomarse el tiempo para entender lo que estos trucos realmente hacen. Entendiendo el problema que intentan resolver podemos juzgar la aplicabilidad de los diferentes trucos y elegir el que funciona bien con las restricciones que podamos tener (por ejemplo, poca potencia de cálculo, conjunto de datos pequeño)
Aquí hay un libro interesante Redes neuronales: Trucos del oficio Una versión actualizada del libro de 2012. Muchos artículos de algunos de los pioneros de las redes neuronales.
ypx ha tocado muy bien un montón de cuestiones prácticas con la formación, así que para tocar las otras cuestiones que has planteado: muchos de los laboratorios industriales de élite siguen publicando sus resultados. Por ejemplo, el equipo de Microsoft Research acaba de ganar la ImageNet 2015 y ha publicado un informe técnico que describe su nuevo módulo de redes profundas: Aprendizaje residual profundo para el reconocimiento de imágenes El equipo de Google también publicó su arquitectura Inception, Profundizar en las convoluciones . En un grado no trivial, todavía existe una cultura en el aprendizaje automático (por ahora) de compartir las grandes innovaciones. Posiblemente porque la clave es el acceso a los datos. Google y Facebook simplemente tienen acceso a datos que nosotros no tenemos. Es difícil decir cuánto mérito tiene la innovación algorítmica en bruto y cuánto las cantidades masivas de datos.
¿Con respecto a lo que ocurrirá en el futuro? Es difícil decirlo. Es una cuestión que mucha gente ha planteado, dado el valor que han adquirido estas empresas impulsadas por los datos y lo competitivo que es el mercado. Pero por ahora, creo que hay un equilibrio suficiente entre lo que comparten y lo que no comparten los laboratorios de investigación industrial. Entiendo que no compartan la implementación exacta de su código. Pero sí comparten algunas innovaciones muy novedosas.
Busque investigadores que publiquen resultados importantes y lea, lea, lea. Creo que en el AMA de Yann LeCun en Reddit mencionó que es un lector voraz. Creo que esto es lo más importante. Y en la medida en que sea práctico, intenta recrear sus puntos de referencia, o aplicar su método a un conjunto de datos que esté dentro de tu presupuesto.
Creo que, independientemente de dónde te encuentres o de cuál sea tu posición en la vida, ésta es la mejor manera de mantenerte alerta y seguir desarrollando tus habilidades. Hay que ser un lector voraz y poner en práctica las cosas y desarrollar la intuición. Personalmente, no dispongo de los recursos necesarios para participar en los concursos de ImageNet, pero la lectura de todos los artículos de los grupos de ImageNet con mejores resultados me ha ayudado enormemente.