Gracias por el A2A.
Primero, desea elegir un conjunto de datos desafiante, aunque algo comparado, para poder comparar la validez de su implementación de red profunda.
Recomendaría el conjunto de datos MNISt, pero tal vez eso esté un poco exagerado. Puede tomar el conjunto de datos CIFAR-10 (conjuntos de datos CIFAR-10 y CIFAR-100) para construir una red neuronal convolucional profunda, o incluso trabajar con imagenet (ImageNet) si tiene paciencia para descargar. Personalmente, elegiría algo más interesante y trabajaría con una red neuronal recurrente semi profunda (2 capas), como LSTM o GRU apilada, para entrenar en la predicción de personajes con la que puedes encontrar algunas cosas muy interesantes, como enseñar una red neuronal a escriba como Shakespeare e incluso escriba códigos fuente de Linux: la efectividad irracional de las redes neuronales recurrentes
- Máquinas de factorización: ¿cómo hacen los FM para hacer predicciones y aprender?
- ¿Qué es la regresión no lineal vs regresión lineal?
- ¿Por qué funciona la función de costo de regresión logística?
- ¿Cuáles son los últimos algoritmos de aprendizaje de los vecinos más cercanos? Me refiero a todo lo que se basa en datos, como métodos basados en instancias, kNN, algoritmos de aprendizaje vecinos y métricos, todo en un solo lugar.
- ¿Cuál es el número mínimo de árboles que debo usar en un bosque aleatorio?
. En cualquier caso, las pautas generales son las siguientes:
1. Configurar el entorno del paquete ML: Primero es configurar su paquete ML, la elección del paquete depende de usted. Recomendaría Theano (Bienvenido – Documentación de Theano 0.7) si es nuevo y desea configurarlo rápidamente y comenzar a construir sus redes profundas. Siempre se recomienda ejecutar en un entorno Linux (uso Ubuntu), sin embargo, creo que es posible instalarlo y ejecutarlo en Windows.
Después de instalar Theano, puede instalar los paquetes de aprendizaje profundo creados sobre Theano, como Keras o Lasagne. Esto le permite romper rápidamente una red neuronal profunda en muy pocas líneas en comparación con Theano puro.
Una nota sobre la estación de trabajo: si eres como yo y no tienes una computadora dedicada con GPU lo suficientemente buena como para jugar con redes neuronales profundas, te recomiendo obtener una instancia de AWS EC2 o incluso GPU y ejecutar tu entrenamiento de red allí.
2. Preprocesamiento de datos: el preprocesamiento de datos para redes neuronales no es demasiado tedioso. Por lo general, para mí la normalización de las características de valor real es más que suficiente, aunque algunas personas también restan la media de cada característica de entrada. Hay un documento reciente sobre la realización de la Normalización por lotes (Aceleración del entrenamiento de redes profundas mediante la reducción del cambio de covariable interno) que parece ser muy beneficioso para el entrenamiento de redes profundas. De hecho, esta característica ya está incorporada en la biblioteca ML de Tensorflow de Google, si estoy en lo cierto.
Para las características categóricas pequeñas (<20 ish) es suficiente aplicar la codificación One-hot como preprocesamiento. Para las características puramente cegóricas, como las palabras, puede emplear los diversos métodos, como N-gram, bolsa de palabras o la implementación más reciente de word2vec.
Y, por supuesto, debe dividir sus datos en particiones de capacitación y validación (90-10, 80-20). La validación cruzada no es necesaria ya que sus conjuntos de datos generalmente serán muy grandes (> 10 K ejemplos)
3. Arquitectura de red: suponiendo que tenga una comprensión decente de las estructuras de red neuronal, las activaciones no lineales y las funciones de pérdida, las pautas a continuación son muy aproximadas.
Para las tareas de regresión general, por lo general, el error cuadrático medio es suficiente, puede probar algunas de las otras variantes si cree que ayudará (raíz cuadrática media, error absoluto medio). La arquitectura de red suele tener la forma (capa 1- Capa de entrada de características de tamaño N, Capa 1 oculta de tamaño H1, H2, H3 … Capa de salida lineal, pérdida de MSE). Como mencioné antes, los paquetes como Keras y Lasagne construidos sobre Theano le permiten apilar muy intuitivamente una red neuronal capa por capa, asignar funciones de activación no lineales, asignar pérdidas, asignar parámetros de entrenamiento, etc.
Para la clasificación, la arquitectura de red será similar, espere que ahora reemplace la última capa lineal en regresión con una capa softmax de tamaño K, o K número de clases. Idealmente, siempre se usa la pérdida de entropía cruzada para la clasificación multiclase.
Nota: La práctica actual para la activación no lineal es siempre usar unidades lineales rectificadas en lugar de Sigmoid o Tanh. Las unidades lineales rectificadas (Relu) mejoran en gran medida el flujo de retorno del gradiente de error durante el entrenamiento, lo que realmente ayuda en arquitecturas de red profundas (más de 4 o 5 capas de profundidad). Casi el 99% de los trabajos que he leído con arquitecturas profundas generales utilizan la activación Relu.
Para aplicaciones de visión, deberá utilizar varias combinaciones de capas de convolución y agrupación máxima. Para una gran introducción intuitiva a CovNets, vea este curso en línea de Stanford: CS231n Redes neuronales convolucionales para el reconocimiento visual
Para trabajar con redes neuronales recurrentes, puede apilar capas LSTMS y GRU exactamente de la misma manera que las redes neuronales de avance. Sin embargo, en general, su red LSTM “profunda” no necesita ser tan profunda (máximo para mí, generalmente 2 capas) para capturar algunas relaciones bastante complejas.
Un ejemplo de preprocesamiento para entrenar un LSTM para aprender y predecir el próximo personaje usando todo el trabajo de Shakespeare es primero recolectar un archivo de texto concatenado de todo su trabajo, luego uno de K codifica cada personaje en ese archivo concatenado (todo en inglés caracteres, tanto en minúsculas como en mayúsculas, más comas, puntos, etc.) Así que aproximadamente ingrese un tamaño de ~ (26 x 2 + 4). Algunos paquetes ML (como Keras y Lasagne) tienen funciones específicas de preprocesamiento solo para fines de PNL.
4. Entrenamiento y ajuste de hiperparámetros:
La capacitación en mini lotes es una necesidad y un estándar para conjuntos de datos tan grandes. En cuanto al algoritmo de entrenamiento, puede emplear el gradiente de gradiente estocástico general u otras variantes como RMsprop, adagrad, etc. (generalmente uso SGD y RMSprop). Para otros hiperparámetros como el impulso, la tasa de aprendizaje, etc., todo es realmente una cuestión de prueba y error. Recomiendo usar la configuración predeterminada y verificar otras cosas antes de cambiar los hiperparámetros
5. Consejos y puntos generales:
La arquitectura de red (es decir, cuántas capas debo usar, cuántas neuronas en cada capa, etc.) y la selección de hiperparámetros (épocas de entrenamiento, tasa de aprendizaje, impulso, pérdida de peso, etc.) vienen con experiencia, ya que no hay una regla realmente difícil sobre cómo recogerlos En general, desea utilizar una estructura tan simple como sea posible (número mínimo de parámetros para entrenar).
El tiempo de capacitación, dependiendo de sus conjuntos de datos y el tamaño de la red, puede variar de unas pocas horas a unos pocos días. La mayoría de los paquetes tienen etiquetas simples de encendido y apagado para usar GPU Nvidia para los cálculos de la matriz en lugar de su CPU. Deberá seguir las instrucciones específicas de su paquete ML que integran la GPU, pero generalmente implica la instalación de CUDA para su GPU Nvidia específica, entre otras cosas.
Vigile los resultados de su conjunto de entrenamiento y validación a medida que su red entrena. Una vez más, esta característica está disponible en la mayoría de los paquetes ML, donde trazará o imprimirá el rendimiento de la red en el conjunto de datos de capacitación y validación una vez cada N iteraciones o, a veces, epocas. Use esto para evaluar si debe aumentar la regularización cuando las dos curvas de entrenamiento divergen, o tal vez su red es demasiado grande y se ajusta demasiado (reduzca el tamaño de su red).
Si desea probar el paquete de tensorflow de Google, puede intentarlo. Solo un punto, la similitud entre tensorflow y theano significa que la transición entre los dos paquetes es relativamente simple.
Espero que ayude.