Tutorial de red neuronal: Ejemplo de TensorFlow ANN

¿Qué es la Red Neural Artificial?

Una red neuronal artificial (ANN) se compone de cuatro objetos principales:

  • Capas: todo el aprendizaje ocurre en las capas. Hay 3 capas 1) Entrada 2) Oculto y 3) Salida
  • entidad y etiqueta: datos de entrada a la red (entidades) y salida de la red (etiquetas)
  • función de pérdida: métrica utilizada para estimar el rendimiento de la fase de aprendizaje
  • optimizador: Mejorar el aprendizaje mediante la actualización de los conocimientos en la red

Una red neuronal tomará los datos de entrada y los empujará a un conjunto de capas. La red necesita evaluar su rendimiento con una función de pérdida. La función de pérdida da a la red una idea del camino que debe tomar antes de dominar el conocimiento. La red necesita mejorar sus conocimientos con la ayuda de un optimizador.

Si echa un vistazo a la figura a continuación, comprenderá el mecanismo subyacente.

El programa toma algunos valores de entrada y los empuja a dos capas completamente conectadas. Imagina que tienes un problema matemático, lo primero que haces es leer el capítulo correspondiente para resolver el problema. Aplicas tus nuevos conocimientos para resolver el problema. Hay una gran probabilidad de que no marcará muy bien. Es lo mismo para una red. La primera vez que vea los datos y haga una predicción, no coincidirá perfectamente con los datos reales.

Para mejorar sus conocimientos, la red utiliza un optimizador. En nuestra analogía, un optimizador puede ser considerado como releer el capítulo. Obtienes nuevas percepciones/lecciones leyendo de nuevo. Del mismo modo, la red utiliza el optimizador, actualiza sus conocimientos y pone a prueba sus nuevos conocimientos para comprobar cuánto aún necesita aprender. El programa repetirá este paso hasta que realice el error más bajo posible.

En nuestra analogía de problemas matemáticos, significa que usted lee el capítulo del libro de texto muchas veces hasta que usted entiende a fondo el contenido del curso. Incluso después de leer varias veces, si sigues cometiendo un error, significa que has alcanzado la capacidad de conocimiento con el material actual. Es necesario utilizar diferentes libros de texto o probar diferentes métodos para mejorar su puntuación. Para una red neuronal, es el mismo proceso. Si el error está lejos de 100%, pero la curva es plana, significa con la arquitectura actual; no puede aprender nada más. La red debe optimizarse mejor para mejorar los conocimientos.

En este tutorial, usted aprenderá –

Arquitectura de red neuronal

Capas

Una capa es donde todo el aprendizaje tiene lugar. Dentro de una capa, hay una cantidad infinita de pesos (neuronas). Una red neuronal típica suele ser procesada por capas densamente conectadas (también llamadas capas completamente conectadas). Significa que todas las entradas están conectadas a la salida.

Una red neuronal típica toma un vector de entrada y un escalar que contiene las etiquetas. La configuración más cómoda es una clasificación binaria con solo dos clases: 0 y 1.

La red toma una entrada, la envía a todos los nodos conectados y calcula la señal con una función de activación.

La figura anterior traza esta idea. La primera capa son los valores de entrada para la segunda capa, llamada capa oculta, recibe la entrada ponderada de la capa anterior

  1. El primer nodo son los valores de entrada
  2. La neurona se descompone en la parte de entrada y la función de activación. La parte izquierda recibe toda la entrada de la capa anterior. La parte derecha es la suma de la entrada pasa a una función de activación.
  3. Valor de salida calculado a partir de las capas ocultas y utilizado para hacer una predicción. Para la clasificación, es igual al número de clase. Para la regresión, solo se predice un valor.

Función de activación

La función de activación de un nodo define la salida dada un conjunto de entradas. Necesita una función de activación para permitir que la red aprenda un patrón no lineal. Una función de activación común es una unidad lineal Relu rectificada. La función da un cero para todos los valores negativos.

Las otras funciones de activación son:

  • Lineal a piezas
  • Sigmoide
  • Tanh
  • Relu con fugas

La decisión crítica a tomar al construir una red neuronal es:

  • ¿Cuántas capas en la red neuronal
  • Cuántas unidades ocultas para cada capa

La red neuronal con muchas capas y unidades ocultas puede aprender una representación compleja de los datos, pero hace que el cálculo de la red sea muy caro.

Función de pérdida

Después de haber definido las capas ocultas y la función de activación, debe especificar la función de pérdida y el optimizador.

Para la clasificación binaria, es práctica común usar una función de pérdida de entropía cruzada binaria. En la regresión lineal, se utiliza el error cuadrado medio.

La función de pérdida es una métrica importante para estimar el rendimiento del optimizador. Durante el entrenamiento, esta métrica se minimizará. Debe seleccionar esta cantidad cuidadosamente dependiendo del tipo de problema que esté tratando.

Optimizador

La función de pérdida es una medida del rendimiento del modelo. El optimizador ayudará a mejorar los pesos de la red con el fin de disminuir la pérdida. Hay diferentes optimizadores disponibles, pero el más común es el Descenso de Gradiente Estocástico.

Los optimizadores convencionales son:

  • Optimización del impulso,
  • Gradiente acelerado Nesterov
  • Adagrad,
  • Optimización de Adam

Limitaciones de la red neuronal

Sobreajuste

Un problema común con la red neuronal compleja son las dificultades para generalizar datos no vistos. Una red neuronal con muchos pesos puede identificar detalles específicos en el conjunto del tren muy bien, pero a menudo conduce a un exceso de ajuste. Si los datos están desequilibrados dentro de los grupos (es decir, no hay suficientes datos disponibles en algunos grupos), la red aprenderá muy bien durante el entrenamiento, pero no tendrá la capacidad de generalizar dicho patrón a datos nunca vistos antes.

Hay una compensación en el aprendizaje automático entre la optimización y la generalización.

Optimizar un modelo requiere encontrar los mejores parámetros que minimicen la pérdida del conjunto de entrenamiento.

Sin embargo, la generalización indica cómo se comporta el modelo para los datos no vistos.

Para evitar que el modelo capture detalles específicos o patrones no deseados de los datos de entrenamiento, puede utilizar diferentes técnicas. El mejor método es tener un conjunto de datos equilibrado con cantidad suficiente de datos. El arte de reducir el exceso de ajuste se llama regularización. Revisemos algunas técnicas convencionales.

Tamaño de red

Una red neuronal con demasiadas capas y unidades ocultas es conocida por ser altamente sofisticada. Una forma sencilla de reducir la complejidad del modelo es reducir su tamaño. No hay una práctica recomendada para definir el número de capas. Debe comenzar con una pequeña cantidad de capa y aumenta su tamaño hasta que encuentre el sobreajuste del modelo.

Regularización del Peso

Una técnica estándar para evitar el exceso de ajuste es agregar restricciones a los pesos de la red. La restricción obliga al tamaño de la red a tomar sólo valores pequeños. La restricción se agrega a la función de pérdida del error. Existen dos tipos de regularización:

L1: Lasso: El coste es proporcional al valor absoluto de los coeficientes de peso

L2: Ridge: El costo es proporcional al cuadrado del valor de los coeficientes de peso

Estudiante

La deserción es una técnica extraña pero útil. Una red con deserción significa que algunos pesos se establecerán aleatoriamente en cero. Imagine que tiene una matriz de pesos [0.1, 1.7, 0.7, -0.9]. Si la red neuronal tiene una deserción, se convertirá en [0.1, 0, 0, -0.9] con 0 distribuido aleatoriamente. El parámetro que controla la deserción es la tasa de deserción. La tasa define el número de pesos que se van a establecer en ceros. Tener una tasa entre 0.2 y 0.5 es común.

Ejemplo de red neuronal en TensorFlow

Veamos en acción cómo funciona una red neuronal para un problema de clasificación típico. Hay dos entradas, x1 y x2 con un valor aleatorio. La salida es una clase binaria. El objetivo es clasificar la etiqueta en función de las dos entidades. Para llevar a cabo esta tarea, la arquitectura de red neuronal se define de la siguiente manera:

  • Dos capas ocultas
  • La primera capa tiene cuatro neuronas completamente conectadas
  • La segunda capa tiene dos neuronas completamente conectadas
  • La función de activación es un Relu
  • Añadir una Regularización L2 con una tasa de aprendizaje de 0.003

La red optimizará el peso durante 180 épocas con un tamaño de lote de 10. En el siguiente vídeo se puede ver cómo evolucionan los pesos y cómo la red mejora el mapeo de clasificación.

En primer lugar, la red asigna valores aleatorios a todos los pesos.

  • Con los pesos aleatorios, es decir, sin optimización, la pérdida de salida es 0.453. La siguiente imagen representa la red con diferentes colores.
  • En general, el color naranja representa valores negativos mientras que los colores azules muestran los valores positivos.
  • Los puntos de datos tienen la misma representación; los azules son las etiquetas positivas y el naranja las etiquetas negativas.

Dentro de la segunda capa oculta, las líneas se colorean siguiendo el signo de los pesos. Las líneas anaranjadas asignan pesos negativos y la azul pesos positivos

Como puede ver, en la asignación de salida, la red está cometiendo muchos errores. Veamos cómo se comporta la red después de la optimización.

La siguiente imagen muestra los resultados de la red optimizada. En primer lugar, observa que la red ha aprendido con éxito cómo clasificar el punto de datos. Se puede ver en la imagen anterior; el peso inicial fue -0.43 mientras que después de la optimización resulta en un peso de -0.95.

La idea puede generalizarse para redes con capas más ocultas y neuronas. Puedes jugar en el enlace.

Entrena una red neuronal con TensorFlow

En esta parte del tutorial, aprenderá a entrenar una red neuronal con TensorFlow usando el estimador DNNClassifier de la API.

Usaremos el conjunto de datos MNIST para entrenar su primera red neuronal. El entrenamiento de una red neuronal con Tensorflow no es muy complicado. El paso de preprocesamiento tiene exactamente el mismo aspecto que en los tutoriales anteriores. Procederás de la siguiente manera:

  • Paso 1: Importar los datos
  • Paso 2: Transformar los datos
  • Paso 3: Construir el tensor
  • Paso 4: Construye el modelo
  • Paso 5: Entrenar y evaluar el modelo
  • Paso 6: Mejore el modelo

Paso 1) Importar los datos

En primer lugar, debe importar la biblioteca necesaria. Puede importar el dataset MNIST usando scikit learn.

El dataset MNIST es el conjunto de datos comúnmente utilizado para probar nuevas técnicas o algoritmos. Este conjunto de datos es una colección de imagen de 28×28 píxeles con un dígito escrito a mano de 0 a 9. Actualmente, el error más bajo en la prueba es 0.27 por ciento con un comité de 7 redes neuronales convolucionales.

Puede descargar scikit learn temporalmente en esta dirección. Copie y pegue el conjunto de datos en una carpeta conveniente. Para importar los datos a python, puede usar fetch_mldata de scikit learn. Pegue la ruta del archivo dentro de fetch_mldata para obtener los datos.

Después de eso, importa los datos y obtiene la forma de ambos datasets.

Paso 2) Transformar los datos

En el tutorial anterior, aprendiste que necesitas transformar los datos para limitar el efecto de los valores atípicos. En este tutorial, transformará los datos utilizando el escalador min-max. La fórmula es:

Scikit aprende ya tiene una función para eso: minMaxScaler ()

Paso 3) Construir el tensor

Ahora está familiarizado con la forma de crear un tensor en Tensorflow. Puede convertir el conjunto de trenes en una columna numérica.

Paso 4) Construir el modelo

La arquitectura de la red neuronal contiene 2 capas ocultas con 300 unidades para la primera capa y 100 unidades para la segunda. Utilizamos estos valores basados en nuestra propia experiencia. Puede ajustar estos valores y ver cómo afecta a la precisión de la red.

Para crear el modelo, utilice el estimador DNNClassifier. Puede agregar el número de capas a los argumentos feature_columns. Debe establecer el número de clases en 10, ya que hay diez clases en el conjunto de entrenamiento. Ya está familiarizado con la sintaxis del objeto estimador. Los argumentos características columnas, número de clases y model_dir son exactamente los mismos que en el tutorial anterior. El nuevo argumento hidden_unit controla el número de capas y cuántos nodos se conectan a la red neuronal. En el siguiente código, hay dos capas ocultas con una primera que conecta 300 nodos y la segunda con 100 nodos.

Para crear el estimador, utilice tf.estimator.dnnClassifier con los siguientes parámetros:

  • feature_columns: Define las columnas a usar en la red
  • hidden_units: Define el número de neuronas ocultas
  • n_classes: Define el número de clases a predecir
  • model_dir: Definir la ruta de TensorBoard

Paso 5) Capacitar y evaluar el modelo

Puede usar el método numpy para entrenar el modelo y evaluarlo

Salida:

La arquitectura actual conduce a una precisión en el conjunto de evaluación del 96 por ciento.

Paso 6) Mejorar el modelo

Puede intentar mejorar el modelo agregando parámetros de regularización.

Utilizaremos un optimizador Adam con una tasa de deserción de 0.3, L1 de X y L2 de y. En TensorFlow, puede controlar el optimizador usando el tren de objetos siguiendo por el nombre del optimizador. TensorFlow es una API integrada para el optimizador Proximal Adagrad.

Para agregar regularización a la red neuronal profunda, puede usar tf.train.proximaladagradoptimizer con el siguiente parámetro

  • Tasa de aprendizaje: learning_rate
  • Regularización L1: l1_regularization_strength
  • Regularización L2: l2_regularization_strength

Salida:

Los valores elegidos para reducir el sobreajuste no mejoraron la precisión del modelo. Su primer modelo tenía una precisión del 96% mientras que el modelo con regularizer L2 tiene una precisión del 95%. Puede probar con diferentes valores y ver cómo afecta la precisión.

Resumen

En este tutorial, aprenderá a construir una red neuronal. Una red neuronal requiere:

  • Número de capas ocultas
  • Número de nodo completamente conectado
  • Función de activación
  • Optimizador
  • Número de clases

En TensorFlow, puede entrenar una red neuronal para problemas de clasificación con:

  • tf.estimator.dnnClassifier

El estimador requiere especificar:

  • feature_columns=feature_columnas,
  • unidades hidden_= [300, 100]
  • n_clases=10
  • directo_modelo

Puede mejorar el modelo mediante el uso de diferentes optimizadores. En este tutorial aprendiste a usar el optimizador Adam Grad con una tasa de aprendizaje y a agregar un control para evitar el exceso de ajuste.

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *