
Mis Cursos en Udemy.
Te invito a conocer el resto de mis formaciones disponibles en la plataforma Udemy.
Y por ser alumno y haber finalizado este curso, te ofrezco un gran descuento en mis cursos online como agradecimiento por tu apoyo y confianza prestada en mis formaciones. Accede al contenido exclusivo de esta lección y consigue tu curso con descuento.
Mis Cursos en Udemy.
Te invito a conocer el resto de mis formaciones disponibles en la plataforma Udemy.
Y por ser alumno y haber finalizado este curso, te ofrezco un gran descuento en mis cursos online como agradecimiento por tu apoyo y confianza prestada en mis formaciones. Accede al contenido exclusivo de esta lección y consigue tu curso con descuento.
Mis Cursos en Udemy.
Te invito a conocer el resto de mis formaciones disponibles en la plataforma Udemy.
Y por ser alumno y haber finalizado este curso, te ofrezco un gran descuento en mis cursos online como agradecimiento por tu apoyo y confianza prestada en mis formaciones. Accede al contenido exclusivo de esta lección y consigue tu curso con descuento.
En la siguiente clase te detallo como está organizado y configurado el curso que estas comenzando. El objetivo es que aproveches al máximo la formación y saques el mayor beneficio de la misma.
¡Comencemos!
Bienvenido al curso de Deep Learning para Lenguaje Natural y Series Temporales con R y Keras. En este curso trataremos la librería Keras de Python para Deep Learning y cómo usarla para desarrollar y evaluar modelos de Deep Learning para Procesamiento del Lenguaje Natural y Series Temporales. En este curso, descubriremos las técnicas, código y habilidades de Deep Learning que luego puede llevar a sus propios proyectos de Aprendizaje profundo para Procesamiento del Lenguaje Natural y Series Temporales con R y Keras.
Si está interesado en Deep Learning, tenemos que comenzar por desarrollar y evaluar modelos de Deep Learning. Luego, si descubres que realmente le gusta o tienes una habilidad especial para ello, más adelante podrás profundizar más en los antecedentes y la teoría, según lo necesites para ayudarte a desarrollar mejores y más valiosos resultados.
Comenzamos nuestro curso de Deep Learning para Redes Neuronales Recurrentes con R y Keras realizando una introducción del proceso paso a paso que se debe de utilizar en el mundo de los problemas de secuencialidad y temporalidad en la plataforma R. Veremos como la plataforma R es un potente lenguaje de programación que nos permitirá analizar y tomar decisiones sobre cualquier conjunto de datos de manera muy sencilla con los conocimientos ya adquiridos de programación que ya deberemos de poseer.
Finalmente, recordarle que la estructura del curso está diseñada de manera que cada unidad está compuesta por una parte de teoría y otra de práctica. Cada una de las unidades dispondrá del PDF de lectura (y presentación) que tendrá todos los conceptos teóricos y varios vídeos que tendrá los conceptos prácticos que deberás reproducir usted en su estudio. Por tanto, es importante, antes de ver la parte de práctica, se entienda y estudie la parte de teoría.
Comenzamos nuestro curso de Deep Learning para Redes Neuronales Recurrentes con R y Keras realizando una introducción del proceso paso a paso que se debe de utilizar en el mundo de los problemas de secuencialidad y temporalidad en la plataforma R. Veremos como la plataforma R es un potente lenguaje de programación que nos permitirá analizar y tomar decisiones sobre cualquier conjunto de datos de manera muy sencilla con los conocimientos ya adquiridos de programación que ya deberemos de poseer.
Finalmente, recordarle que la estructura del curso está diseñada de manera que cada unidad está compuesta por una parte de teoría y otra de práctica. Cada una de las unidades dispondrá del PDF de lectura (y presentación) que tendrá todos los conceptos teóricos y varios vídeos que tendrá los conceptos prácticos que deberás reproducir usted en su estudio. Por tanto, es importante, antes de ver la parte de práctica, se entienda y estudie la parte de teoría.
Comenzamos nuestro curso de Deep Learning para Redes Neuronales Recurrentes con R y Keras realizando una introducción del proceso paso a paso que se debe de utilizar en el mundo de los problemas de secuencialidad y temporalidad en la plataforma R. Veremos como la plataforma R es un potente lenguaje de programación que nos permitirá analizar y tomar decisiones sobre cualquier conjunto de datos de manera muy sencilla con los conocimientos ya adquiridos de programación que ya deberemos de poseer.
Finalmente, recordarle que la estructura del curso está diseñada de manera que cada unidad está compuesta por una parte de teoría y otra de práctica. Cada una de las unidades dispondrá del PDF de lectura (y presentación) que tendrá todos los conceptos teóricos y varios vídeos que tendrá los conceptos prácticos que deberás reproducir usted en su estudio. Por tanto, es importante, antes de ver la parte de práctica, se entienda y estudie la parte de teoría.
Comenzamos nuestro curso de Deep Learning para Redes Neuronales Recurrentes con R y Keras realizando una introducción del proceso paso a paso que se debe de utilizar en el mundo de los problemas de secuencialidad y temporalidad en la plataforma R. Veremos como la plataforma R es un potente lenguaje de programación que nos permitirá analizar y tomar decisiones sobre cualquier conjunto de datos de manera muy sencilla con los conocimientos ya adquiridos de programación que ya deberemos de poseer.
Finalmente, recordarle que la estructura del curso está diseñada de manera que cada unidad está compuesta por una parte de teoría y otra de práctica. Cada una de las unidades dispondrá del PDF de lectura (y presentación) que tendrá todos los conceptos teóricos y varios vídeos que tendrá los conceptos prácticos que deberás reproducir usted en su estudio. Por tanto, es importante, antes de ver la parte de práctica, se entienda y estudie la parte de teoría.
Para ir conociéndonos todos, te invito a presentarte. Ponle cara a tu perfil y sube un par de proyectos, personales o profesionales, compártelos en el foro de esta clase y cuéntanos en qué lugar o proyecto desearías trabajar idealmente.
Recuerda que desde el apartado de "Preguntas y Respuestas" podrás presentarte al resto de alumnos de este curso y plantear todas las inquietudes que tengas.
Sección que dispondrá de una serie de recursos y enlaces interesantes para poder complementar eficazmente la formación del curso.
Materiales sobre esta primera unidad del curso.
Sección que dispondrá de una serie de recursos y enlaces interesantes para poder complementar eficazmente la formación del curso.
Material tipo presentación de esta sección
Clase con conceptos teóricos - Parte 1
Clase con conceptos teóricos - Parte 2
Clase con conceptos teóricos - Parte 3
En esta sesión veremos como instalar Anaconda y Jupyter Notebook como alternativa a RStudio
Clase sobre como se utiliza Jupyter Notebook con el lenguaje de programación R
Sección que dispondrá de una serie de recursos y enlaces interesantes para poder complementar eficazmente la formación del curso.
Materiales que se utilizarán en esta sección de aprendizaje.
Abstracción básica de la Unidad fundamental - La neurona
Desempeño gráfico de cómo trabaja una neurona
Cómo opera el MLP
Coste, sesgo y función de activación
Qué es y cómo opera Backpropagation
Simulación de una arquitectura de red neuronal
Sección que dispondrá de una serie de recursos y enlaces interesantes para poder complementar eficazmente la formación del curso.
La API secuencial de Keras es fácil de entender e implementar. Nos permite crear una red neuronal de forma lineal; es decir, podemos construir una red neuronal capa por capa donde inicializamos un modelo secuencial y luego apilamos una serie de capas ocultas y de salida en él. En sí, estudiaremos:
Como desarrollar un MLP en R con Keras
Ahora vamos a desarrollar con keras nuestro primera red neuronal. Seguidamente vamos a crear unos datos sintéticos para poder desarrollar nuestra red neuronal
Se realizan los siguientes pasos:
Inicializamos un modelo secuencial llamando a la función keras_model_sequential().
Apilamos capas ocultas y de salida mediante el uso de una serie de funciones de capa. La función layer_dense() agrega una capa densamente conectada al modelo definido.
La primera capa del modelo secuencial necesita saber qué forma de entrada debe esperar, por lo que pasamos un valor al argumento input_shape de la primera capa.
En nuestro caso, la forma de entrada era igual a la cantidad de características en el conjunto de datos.
Cuando agregamos capas al modelo secuencial de keras, el objeto del modelo se modifica en el lugar y no es necesario volver a asignar el objeto actualizado al original.
Para nuestro modelo, usamos la función de activación ReLU.
La función layer_activation() crea una capa de activación que toma la entrada de la capa oculta anterior y aplica la activación a la salida de nuestra capa oculta anterior.
También podemos usar diferentes funciones, como ReLU con fugas, Softmax y más (las funciones de activación se discutirán en Implementación de una receta de red neuronal de una sola capa).
En la capa de salida de nuestro modelo, no se aplicó ninguna activación.
También podemos implementar varias funciones de activación para cada capa pasando un valor al argumento de activation en la función layer_dense() en lugar de agregar una capa de activación explícitamente.
Para entrenar un modelo, necesitamos configurar el proceso de aprendizaje. Hicimos esto usando la función compile()
En nuestro proceso de entrenamiento, aplicamos un optimizador de descenso de gradiente estocástico para encontrar los pesos y sesgos que minimizan nuestra función de pérdida objetiva; es decir, el error cuadrático medio.
El argumento de métricas calcula la métrica que el modelo evaluará durante train/test.
Miramos el resumen del modelo; nos muestra información sobre cada capa, como la forma de la salida de cada capa y los parámetros de cada capa.
En el último paso, entrenamos nuestro modelo para un número fijo de iteraciones en el conjunto de datos.
Aquí, el argumento epochs define el número de iteraciones.
El argumento validation_split puede tomar valores flotantes entre 0 y 1. Especifica una fracción de los datos de entrenamiento que se utilizarán como datos de validación.
Finalmente, batch_size define el número de muestras que se propagan a través de la red.
En este tutorial vamos a utilizar el conjunto de datos Pima Indians Diabetes. Describe los datos de los registros médicos de los pacientes y si tuvieron una aparición de diabetes dentro de los cinco años. Es un problema de clasificación binaria (aparición de diabetes como 1 o no como 0). Las variables de entrada que describen a cada paciente son numéricas y tienen escalas variables. A continuación, se enumeran los ocho atributos del conjunto de datos:
Número de embarazos.
Concentración de glucosa en plasma a 2 horas en una prueba de tolerancia a la glucosa oral.
Presión arterial diastólica (mm Hg).
Espesor del pliegue cutáneo del tríceps (mm).
Insulina sérica de 2 horas (mu U/ml).
Índice de masa corporal.
Función del pedigrí de la diabetes.
Años de edad.
Clase, aparición de diabetes en cinco años.
Dado que todos los atributos son numéricos, es fácil de usar directamente con redes neuronales que esperan entradas y valores de salida numéricos, y es ideal para nuestra primera red neuronal en Keras.
Los modelos en Keras se definen como una secuencia de capas. Creamos un modelo Secuencial y agregamos capas de una en una hasta que estemos satisfechos con nuestra topología de red.
Lo primero que debe hacer bien es asegurarse de que la capa de entrada tenga el número correcto de entradas. Esto se puede especificar al crear la primera capa con el argumento input_shape y establecerlo en 8 para las 8 variables de entrada.
¿Cómo sabemos la cantidad de capas que debemos usar y sus tipos?
Ésta es una pregunta muy difícil. Hay heurísticas que podemos usar y, a menudo, la mejor estructura de red se encuentra a través de un proceso de experimentación de prueba y error. Por lo general, necesita una red lo suficientemente grande para capturar la estructura del problema. En este ejemplo usaremos una estructura de red completamente conectada con tres capas.
En sí el procedimiento a utilizar será:
Creamos un modelo secuencial con la clase keras_model_sequential().
Las capas completamente conectadas se definen mediante la clase layer_dense(). Se puede especificar:
El número de neuronas en la capa como primer argumento units.
Especificar la función de activación usando el parámetro activation.
El tercer argumento es input_shape que indica el número de variables en la capa de entrada.
Usaremos la función de activación del rectificador (ReLU), activation = relu, en las dos primeras capas. Solía ser el caso que las funciones de activación Sigmoid y TANH eran preferidas para todas las capas pero ReLU obtiene mejores resultados.
Usamos una función de activación sigmoidea, activation = sigmoid, en la capa de salida para garantizar que la salida de nuestra red esté entre 0 y 1 y sea fácil de asignar a una probabilidad de clase 1 o ajustar a una clasificación estricta de cualquier clase con un umbral predeterminado de 0,5.
Podemos juntarlo todo agregando cada capa:
La primera capa oculta tiene 12 neuronas y espera 8 variables de entrada (por ejemplo, input_shape = 8).
La segunda capa oculta tiene 8 neuronas y finalmente la capa de salida tiene 1 neurona para predecir la clase (aparición de diabetes o no).
Hemos entrenado nuestra red neuronal en todo el conjunto de datos y podemos evaluar el rendimiento de la red en el mismo conjunto de datos. Esto solo nos dará una idea de qué tan bien hemos modelado el conjunto de datos (por ejemplo, Accuracy en el entrenamiento), pero no tenemos idea de qué tan bien podría funcionar el algoritmo con los datos nuevos. Hemos hecho esto por simplicidad, pero idealmente, podría separar sus datos en conjuntos de datos en entrenamiento/validación.
Puedes evaluar tu modelo en tu conjunto de datos de entrenamiento usando la función evaluate() en tu modelo y pasarle la misma entrada y salida que usaste para entrenar el modelo. Esto generará una predicción para cada par de entrada y salida y recopilará puntuaciones, incluida la pérdida promedio y cualquier métrica que haya configurado, como la Accuracy.
En esta sección crearemos un modelo de red neuronal de referencia para el problema de regresión. Comencemos importando todas las funciones y objetos que necesitaremos para este tutorial.
Posteriormente, cargamos nuestro conjunto de datos desde un archivo en el directorio local. Luego, podemos dividir los atributos de entrada (X) y salida (Y) para que sean más fáciles de modelar con Keras.
Hay una librería muy interesante, neuronalnet, que nos permite dibujar una red neuronal para comprender su desarrollo. En esta sección veremos como dibujar, además de entender su comportamiento
Es un hecho que las redes neuronales funcionan mejor cuando los datos están normalizados. Aunque puede probar con el paquete caret para realizar una normalización aquí lo vamos a realizar de manera directa con la siguiente fórmula.
Construimos nuestro modelo secuencial con Keras. Esta clase toma una función que crea y devuelve nuestro modelo de red neuronal. También toma argumentos que pasará a la llamada a fit() como el número de épocas y el tamaño del batch. Comencemos por definir la función que crea nuestro modelo de línea de base.
Es un modelo secuencial con `keras_model_sequential() que tiene una sola capa oculta completamente conectada con el mismo número de neuronas que los atributos de entrada (13).
La red utiliza buenas prácticas como la función de activación ReLu para la capa oculta.
No se utiliza ninguna función de activación para la capa de salida porque es un problema de regresión y estamos interesados en predecir valores numéricos directamente sin transformar.
Creamos una priemra capa oculta, layer_dense, de 5 neuronas y función de activación ReLU.
Una capa de salida, layer_dense, con una neurona.
Se utiliza el algoritmo de optimización rmsprop y se optimiza una función de pérdida de error cuadrático medio.
Es una métrica deseable porque al sacar la raíz cuadrada de un valor de error nos da un resultado que podemos entender directamente en el contexto del problema con las unidades en miles de dólares.
En Loss utilizamos del Error Cuadrático Medio (mae)
Creamos el modelo de red neuronal como algunos parámetros para pasar a la función fit() del modelo, como el número de épocas y el tamaño de batchs.
El paso final es evaluar este modelo de línea de base. Usaremos una validación cruzada una partición de 80:20.
Hay muchas preocupaciones que se pueden optimizar para un modelo de red neuronal. Quizás el punto de mayor apalancamiento es la estructura de la red en sí, incluida la cantidad de capas y la cantidad de neuronas en cada capa. En esta sección evaluaremos dos topologías en un esfuerzo por mejorar aún más el rendimiento del modelo. Examinaremos una topología de red tanto más profunda como más amplia.
Esto viene justificado ya que anteriormente nos ha dado un error muy alto aspecto que debe de replantearse con la adición de más capas ocultas, por ejemplo.
Sección que dispondrá de una serie de recursos y enlaces interesantes para poder complementar eficazmente la formación del curso.
Sesión de teoría - Background
Sesión de teoría - Introducción
Diferencias principales entre las redes totalmente conectadas con las redes feed forward.
Sesión de teoría - Redes Neuronales Recurrentes
Sesión de teoría - Redes LSTM
Sesión de teoría - Aprendizaje por Refuerzo: Fundamentos
Sesión de teoría - Algoritmos DRL
Sesión de teoría - Aplicaciones DRL
Sección que dispondrá de una serie de recursos y enlaces interesantes para poder complementar eficazmente la formación del curso.
Sección que dispondrá de una serie de recursos y enlaces interesantes para poder complementar eficazmente la formación del curso.
Keras proporciona acceso al conjunto de datos de IMDB integrado. La función imdb.load data() permite cargar el conjunto de datos en un formato que está listo para usar en modelos. Las palabras han sido reemplazadas por números enteros que indican la popularidad absoluta de la palabra en el conjunto de datos. Por lo tanto, las oraciones de cada revisión se componen de una secuencia de números enteros.
Llamar a imdb.load data() por primera vez descargará el conjunto de datos IMDB a su computadora y lo almacenará en su directorio personal en ~/.keras/datasets/imdb.pkl como un archivo de 32 megabytes.
De manera útil, la función imdb.load data() proporciona argumentos adicionales, como:
El número de palabras principales para cargar (donde las palabras con un número entero inferior se marcan como cero en los datos devueltos)
El número de palabras principales para omitir (como "the's")
La duración máxima de las revisiones para respaldar.
Carguemos el conjunto de datos y calculemos algunas de sus propiedades. Comenzaremos cargando algunas bibliotecas y cargando todo el conjunto de datos de IMDB como un conjunto de datos de entrenamiento.
Un avance reciente en el campo del procesamiento del lenguaje natural se llama incrustación de palabras (word embeddings). Se trata de una técnica en la que las palabras se codifican como vectores de valor real en un espacio de alta dimensión, donde la similitud entre palabras en términos de significado se traduce en cercanía en el espacio vectorial. Las palabras discretas se asignan a vectores de números continuos. Esto es útil cuando se trabaja con problemas de lenguaje natural con redes neuronales, ya que necesitamos números como valores de entrada.
Keras proporciona una forma conveniente de convertir representaciones enteras positivas de palabras en una incrustación de palabras mediante una capa de incrustación. La capa toma argumentos que definen el mapeo, incluido el número máximo de palabras esperadas, también llamado tamaño de vocabulario (por ejemplo, el valor entero más grande que se verá como entrada). La capa también le permite especificar la dimensionalidad de cada vector de palabra, denominada dimensión de salida.
Nos gustaría utilizar una representación de incrustación de palabras para el conjunto de datos de IMDB. Supongamos que solo nos interesan las primeras 5,000 palabras más utilizadas en el conjunto de datos. Por lo tanto, nuestro tamaño de vocabulario será de 5,000. Podemos optar por utilizar un vector de 32 dimensiones para representar cada palabra. Finalmente, podemos optar por limitar la extensión máxima de la reseña a 500 palabras, truncando las reseñas más largas y rellenando las reseñas más cortas con valores 0. Cargaríamos el conjunto de datos de IMDB de la siguiente manera:
dataset_imdb(num_words=5000)
Luego, usaríamos la utilidad Keras para truncar o rellenar el conjunto de datos a una longitud de 500 para cada observación usando la función pad_sequences().
X_train <- pad_sequences(X_train, maxlen=500)
X_test <- pad_sequences(X_test, maxlen=500)
Las redes neuronales convolucionales se diseñaron para honrar la estructura espacial en los datos de la imagen y al mismo tiempo ser robustas a la posición y orientación de los objetos aprendidos en la escena. Este mismo principio se puede utilizar en secuencias, como la secuencia unidimensional de palabras en una reseña de películas.
Las mismas propiedades que hacen atractivo el modelo de CNN para aprender a reconocer objetos en imágenes pueden ayudar a aprender la estructura en párrafos de palabras, es decir, las técnicas de invarianza a la posición específica de las características.
Ahora podemos definir nuestro modelo de red neuronal convolucional. Esta vez:
Después de la capa de entrada Embedding, insertamos una capa layer_conv_1d.
Esta capa convolucional tiene 32 mapas de características y lee representaciones de palabras incrustadas 3 elementos vectoriales de la palabra incrustada a la vez.
Con una capa de convolución 2D, una ventana de convolución de 3×3 contiene 3 * 3 = 9 vectores de características; pero
Con una capa de convolución 1D, una ventana de convolución de tamaño 3 contiene solo 3 vectores de características. Por lo tanto, puede permitirse fácilmente ventanas de convolución 1D de tamaño 7 o 9.
La capa convolucional va seguida de una capa MaxPooling1D con una longitud y un paso de 2 que divide a la mitad el tamaño de los mapas de características de la capa convolucional.
El resto de la red es igual que la red neuronal anterior.
En esta sección, usaremos el conjunto de datos de IMDB, que contiene reseñas de películas y opiniones asociadas. Podemos importar conjuntos de datos de la biblioteca de keras. Estas revisiones están preprocesadas y codificadas como una secuencia de índices de palabras. Estas palabras están indexadas por su frecuencia general en el conjunto de datos; por ejemplo, la palabra índice 8 se refiere a la octava palabra más frecuente en los datos.
Para descartar las palabras que no se usan con frecuencia, proporcionamos un umbral de 1,000; es decir, mantenemos solo las 1000 palabras más frecuentes en nuestro conjunto de datos de entrenamiento e ignoramos el resto. Este procedimiento se realiza con el parámetro num_words.
Construimos el modelo para la clasificación de reseñas con RNN.
La primera capa es la capa de incrustación (embedding) y se utiliza para generar el contexto de las secuencias de palabras a partir de nuestros datos y proporcionar información sobre las características relevantes.
En una incrustación, las palabras se representan mediante representaciones vectoriales densas.
Cada vector representa la proyección de la palabra en un espacio vectorial continuo, que luego se aprende del texto y se basa en las palabras que rodean una palabra en particular.
La posición de la palabra en el espacio vectorial se conoce como su incrustación (embedding).
Cuando hacemos la incrustación, representamos cada revisión en términos de algunos factores latentes. Por ejemplo, la palabra brillant se puede representar mediante un vector; digamos, [.32, .02, .48, .21, .56, .15].
Esto es computacionalmente eficiente cuando usamos conjuntos de datos masivos, ya que reduce la dimensionalidad.
Los vectores integrados también se actualizan durante el proceso de entrenamiento de la red neuronal profunda, lo que ayuda a identificar palabras similares en un espacio multidimensional.
Las incrustaciones de palabras también reflejan cómo las palabras se relacionan semánticamente entre sí. Por ejemplo, palabras como talking y talked se pueden considerar relacionadas de la misma manera que swimming se relaciona con swam.
La capa de incrustación se define especificando tres argumentos:
input_dim: el tamaño del vocabulario en los datos de texto. En nuestro ejemplo, los datos de texto son un número entero que se ha codificado en valores entre 0 y 999. Debido a esto, el tamaño del vocabulario es de 1,000 palabras.
output_dim: este es el tamaño del espacio vectorial en el que se incrustarán las palabras. Lo especificamos como 128.
input_length: Esta es la longitud de las secuencias de entrada, como la definimos para cualquier capa de entrada de un modelo de Keras.
En la siguiente capa, definimos un modelo RNN simple con 32 unidades ocultas. Si ?n es el número de dimensiones de entrada y ?d es el número de unidades ocultas en la capa RNN, entonces el número de parámetros entrenables puede estar dado por la siguiente ecuación:
((?+?)∗?)+?((n+d)∗d)+d
La última capa está densamente conectada con un solo nodo de salida. Aquí, usamos la función de activación sigmoidea ya que esta es una tarea de clasificación binaria.
Las redes neuronales recurrentes bidireccionales son una extensión de las RNN, donde los datos de entrada se alimentan en orden de tiempo normal e inverso a dos redes.
La salida que se recibe de ambas redes se combina en cada paso de tiempo utilizando varios tipos de modos de combinación, como suma, concatenación, multiplicación y promediado.
Las RNN bidireccionales se utilizan principalmente en desafíos donde el contexto de toda la declaración o el texto depende de la secuencia completa y no solo de una interpretación lineal.
Los RNN bidireccionales son costosos de entrenar debido a sus largas cadenas de gradientes.
En esta sección, usaremos el conjunto de datos de IMDB, que contiene reseñas de películas y opiniones asociadas. Podemos importar conjuntos de datos de la biblioteca de keras. Estas revisiones están preprocesadas y codificadas como una secuencia de índices de palabras. Estas palabras están indexadas por su frecuencia general en el conjunto de datos; por ejemplo, la palabra índice 8 se refiere a la octava palabra más frecuente en los datos.
Para descartar las palabras que no se usan con frecuencia, proporcionamos un umbral de 1,000; es decir, mantenemos solo las 1000 palabras más frecuentes en nuestro conjunto de datos de entrenamiento e ignoramos el resto. Este procedimiento se realiza con el parámetro num_words.
Construimos el modelo para la clasificación de reseñas con RNN.
Agregamos una capa de incrustación, que redujo la dimensionalidad del espacio de características de entrada.
Agregamos un RNN simple en un contenedor bidireccional con merge_mode = 'concat'.
merge_mode define cómo combinar las salidas de los RNN hacia adelante y hacia atrás.
Otros modos incluyen sum, mul, ave y NULL.
Finalmente, agregamos una capa densa con una unidad oculta y usamos sigmoide como función de activación.
Las redes neuronales recurrentes enfrentan dificultades para transportar información correctamente, especialmente cuando existen dependencias de orden largo entre capas en redes grandes. Las redes de memoria de corto y largo plazo, generalmente denominadas redes LSTM, son una extensión de las RNN que son capaces de aprender las dependencias a largo plazo y se utilizan ampliamente en el aprendizaje profundo para evitar el problema del desvanecimiento de gradiente que enfrentan las RNN.
Las LSTM combaten los gradientes que desaparecen a través de un mecanismo de activación y pueden eliminar o agregar información al estado de la celda. Este estado de la celda está cuidadosamente regulado por las puertas, que controlan la información que pasa a través de ellas. Los LSTM tienen tres tipos de puertas: entrada, salida y olvido.
La puerta de olvido controla cuánta información del estado anterior queremos pasar a la siguiente celda.
El estado de entrada define cuánta información del estado recién calculado queremos pasar a los estados sucesivos para la entrada actual, ??xt,
La puerta de salida define cuánta información de estado interno queremos pasar al siguiente estado.
Las redes neuronales recurrentes enfrentan dificultades para transportar información correctamente, especialmente cuando existen dependencias de orden largo entre capas en redes grandes. Las redes de memoria de corto y largo plazo, generalmente denominadas redes LSTM, son una extensión de las RNN que son capaces de aprender las dependencias a largo plazo y se utilizan ampliamente en el aprendizaje profundo para evitar el problema del desvanecimiento de gradiente que enfrentan las RNN.
Las LSTM combaten los gradientes que desaparecen a través de un mecanismo de activación y pueden eliminar o agregar información al estado de la celda. Este estado de la celda está cuidadosamente regulado por las puertas, que controlan la información que pasa a través de ellas. Los LSTM tienen tres tipos de puertas: entrada, salida y olvido.
La puerta de olvido controla cuánta información del estado anterior queremos pasar a la siguiente celda.
El estado de entrada define cuánta información del estado recién calculado queremos pasar a los estados sucesivos para la entrada actual, ??xt,
La puerta de salida define cuánta información de estado interno queremos pasar al siguiente estado.
Definimos nuestra red neuronal LSTM.
Inicializamos un modelo secuencial y luego le agregamos una capa de incrustación.
La capa de incrustación transforma el espacio de características de entrada en una característica latente con una dimensión d;
En nuestro ejemplo, lo transformó en 128 características latentes.
Agregamos la capa LSTM con 50 unidades.
La predicción de palabras es un problema de clasificación en el que predecimos la siguiente palabra del vocabulario.
Debido a esto, agregamos una capa densa con unidades iguales al número de palabras en el vocabulario con una función de activación softmax.
La clasificación de secuencias es un problema de modelado predictivo en el que tiene alguna secuencia de entradas en el espacio o el tiempo y la tarea es predecir una categoría para la secuencia. Lo que dificulta este problema es que las secuencias pueden variar en longitud, estar compuestas por un vocabulario muy amplio de símbolos de entrada y pueden requerir que el modelo aprenda el contexto a largo plazo o las dependencias entre símbolos en la secuencia de entrada. En este proyecto, descubrirá cómo puede desarrollar modelos de redes neuronales recurrentes LSTM para problemas de clasificación de secuencias en R utilizando la biblioteca de aprendizaje profundo de Keras. Después de completar este proyecto, sabrá:
Cómo desarrollar un modelo LSTM para un problema de clasificación de secuencias.
Cómo reducir el sobreajuste en sus modelos LSTM mediante el uso de abandonos.
Cómo combinar modelos LSTM con redes neuronales convolucionales que sobresalen en el aprendizaje de relaciones espaciales.
Sección que dispondrá de una serie de recursos y enlaces interesantes para poder complementar eficazmente la formación del curso.
La predicción de series temporales es un problema difícil de enmarcar y de abordar con el Machine Learning. En esta lección, descubrirá cómo desarrollar modelos de redes neuronales para la predicción de series de tiempo en R. Después de leer esta lección, sabrá:
Sobre el problema de predicción de series de tiempo univariadas de pasajeros de aerolíneas.
Cómo formular la predicción de series de tiempo como un problema de regresión y desarrollar un modelo de red neuronal para ello.
Cómo enmarcar la predicción de series de tiempo con un desfase de tiempo y desarrollar un modelo de red neuronal para ello.
Ahora podemos definir una función para crear un nuevo conjunto de datos como se describe arriba. La función toma dos argumentos, el conjunto de datos, que es una matriz que queremos convertir en un conjunto de datos, y la vista hacia atrás, que es el número de pasos de tiempo anteriores para usar como variables de entrada para predecir el próximo período de tiempo, en este caso, predeterminado a 1. Este valor predeterminado creará un conjunto de datos donde ?X es el número de pasajeros en un momento dado (?)(t) e ?Y es el número de pasajeros en el siguiente momento (?+1)(t+1).
Se puede configurar y veremos cómo construir un conjunto de datos de forma diferente en la siguiente sección.
Ahora podemos ajustar un modelo de perceptrón multicapa a los datos de entrenamiento. Usamos una red simple con 1 entrada, 1 capa oculta con 8 neuronas y una capa de salida. El modelo se ajusta usando el error cuadrático medio, si tomamos la raíz cuadrada nos da una puntuación de error en las unidades del conjunto de datos.
También podemos formular el problema de modo que se puedan usar varios pasos de tiempo recientes para hacer la predicción para el próximo paso de tiempo. Esto se denomina método de ventana y el tamaño de la ventana es un parámetro que se puede ajustar para cada problema.
Por ejemplo, dado el tiempo actual (?)(t) que queremos predecir el valor en el próximo tiempo en la secuencia (?+1)(t+1), podemos usar el tiempo actual (?)(t) así como los dos tiempos anteriores (?−1t−1 y ?−2t−2). Cuando se expresa como un problema de regresión, las variables de entrada son ?−2t−2, ?−1t−1, ?t y la variable de salida es ?+1t+1.
El códi que escribimos en la sección anterior nos permite crear esta formulación del problema de series de tiempo aumentando el look_back de 1 a 3. Una muestra del conjunto de datos con esta formulación se ve como sigue:
X1 X2 X3 Y
112 118 132 129
118 132 129 121
132 129 121 135
129 121 135 148
121 135 148 148
Podemos volver a ejecutar el ejemplo de la sección anterior con el tamaño de ventana más grande. Aumentaremos la capacidad de la red para manejar la información adicional. La primera capa oculta se aumenta a 14 neuronas y se agrega una segunda capa oculta con 8 neuronas. El número de épocas también se incrementa a 400.
A diferencia de los LSTM, los GRU (Gated Recurrent Unit) no utilizan una unidad de memoria para controlar el flujo de información y pueden hacer uso directo de todos los estados ocultos. En lugar de utilizar un estado de celda, las GRU utilizan el estado oculto para transferir información.
Las GRU generalmente se entrenan más rápido que otras redes neuronales basadas en memoria debido al hecho de que tienen menos parámetros para entrenar, menos operaciones de tensor y pueden funcionar bien con menos datos.
Las GRU tienen dos puertas:
La puerta de reinicio se utiliza para determinar cómo combinar nuevas entradas con la memoria anterior
La puerta de actualización determina cuánta información conservar del estado anterior.
Si compara esto con los LSTM, la puerta de actualización en un GRU es comparable a lo que hacen las puertas de entrada y olvido en un LSTM. Decide qué información agregar o eliminar. Los GRU también fusionan el estado de la celda y el estado oculto de tal manera que los modelos resultantes son simples.
A diferencia de los LSTM, los GRU (Gated Recurrent Unit) no utilizan una unidad de memoria para controlar el flujo de información y pueden hacer uso directo de todos los estados ocultos. En lugar de utilizar un estado de celda, las GRU utilizan el estado oculto para transferir información.
Las GRU generalmente se entrenan más rápido que otras redes neuronales basadas en memoria debido al hecho de que tienen menos parámetros para entrenar, menos operaciones de tensor y pueden funcionar bien con menos datos.
Las GRU tienen dos puertas:
La puerta de reinicio se utiliza para determinar cómo combinar nuevas entradas con la memoria anterior
La puerta de actualización determina cuánta información conservar del estado anterior.
Si compara esto con los LSTM, la puerta de actualización en un GRU es comparable a lo que hacen las puertas de entrada y olvido en un LSTM. Decide qué información agregar o eliminar. Los GRU también fusionan el estado de la celda y el estado oculto de tal manera que los modelos resultantes son simples.
Finalmente, más adelante, la primera capa de nuestro modelo sería una capa GRU creada usando la clase layer_gru de la siguiente manera:
layer_gru(units,
stateful=TRUE,
batch_input_shape = c(batch_size, dim(x_train)[2], dim(x_train)[3]))
Los GRU esperan datos en un formato específico de la forma [batch_size, timesteps, features].
Batch_size define el número de observaciones que se enviarán al modelo en cada lote.
Pasos de tiempo representan el número de pasos de tiempo que el modelo necesita para mirar hacia atrás en los datos históricos para realizar predicciones.
En este ejemplo, lo establecemos en 1.
Features representa el número de predictores que usaremos, que es 1 en nuestro caso.
Los problemas de predicción de series de tiempo son un tipo difícil de problema de modelado predictivo. A diferencia del modelo predictivo de regresión, las series de tiempo también agregan la complejidad de una dependencia de secuencia entre las variables de entrada. Un tipo poderoso de red neuronal diseñada para manejar la dependencia de secuencia se denomina redes neuronales recurrentes. La red LSTM es un tipo de red neuronal recurrente que se utiliza en el Deep Learning porque se pueden entrenar con éxito arquitecturas muy grandes.
Después de completar este tutorial, sabrá cómo implementar y desarrollar redes LSTM para sus propios problemas de predicción de series de tiempo y otros problemas de secuencia más generales. Lo sabrás:
Cómo desarrollar redes LSTM para un problema de predicción de series de tiempo enmarcado como regresión.
Cómo desarrollar redes LSTM para un problema de predicción de series de tiempo usando una ventana para características y pasos de tiempo.
Cómo desarrollar y hacer predicciones utilizando redes LSTM que mantienen el estado (memoria) en secuencias muy largas.
A continuación, normalizamos los datos dentro de la escala de la función de activación que vamos a utilizar.
Las LSTM son sensibles a la escala de los datos de entrada, específicamente cuando se utilizan las funciones de activación Sigmoidea (predeterminada) o Tanh. Puede ser una buena práctica cambiar la escala de los datos al rango de 0 a 1, también llamado normalización.
Usamos escala mínima-máxima en este caso:
Los valores del coeficiente de escala deben calcularse en el conjunto de datos de train y aplicarse para escalar el conjunto de datos de test.
Esto se hace para evitar sesgos en el experimento debido a cualquier tipo de conocimiento del conjunto de datos de prueba.
Es por eso que, aquí, los valores mínimo y máximo de los datos de train se utilizan como referencia para escalar tanto los datos de train como los de test y también los valores predichos.
También podemos formular el problema de modo que se puedan usar varios pasos de tiempo recientes para hacer la predicción para el próximo paso de tiempo. Esto se denomina método de ventana y el tamaño de la ventana es un parámetro que se puede ajustar para cada problema.
Por ejemplo, dado el tiempo actual (?)(t) que queremos predecir el valor en el próximo tiempo en la secuencia (?+1)(t+1), podemos usar el tiempo actual (?)(t) así como los dos tiempos anteriores (?−1t−1 y ?−2t−2). Cuando se expresa como un problema de regresión, las variables de entrada son ?−2t−2, ?−1t−1, ?t y la variable de salida es ?+1t+1.
El códi que escribimos en la sección anterior nos permite crear esta formulación del problema de series de tiempo aumentando el look_back de 1 a 3. Una muestra del conjunto de datos con esta formulación se ve como sigue:
X1 X2 X3 Y
112 118 132 129
118 132 129 121
132 129 121 135
129 121 135 148
121 135 148 148
Podemos volver a ejecutar el ejemplo de la sección anterior con el tamaño de ventana más grande. Por tanto únicamente cambiamos el tamaño de ventana al proceso realizado anteriormente.
Normalmente, el estado dentro de la red se restablece después de cada batch de entrenamiento al ajustar el modelo, así como cada llamada a model %>% predict() o model %>% evaluate(). Podemos obtener un control más preciso sobre cuándo se borra el estado interno de la red LSTM en Keras haciendo que la capa LSTM tenga estado (parámetro stateful).
Esto significa que puede generar un estado en toda la secuencia de entrenamiento e incluso mantener ese estado si es necesario para hacer predicciones.
Requiere que los datos de entrenamiento no se mezclen al ajustar la red.
También requiere un restablecimiento explícito del estado de la red después de cada exposición a los datos de entrenamiento (época) mediante llamadas a model %>% reset_states().
Esto significa que debemos crear nuestro propio bucle externo de épocas y dentro de cada época llamar model %>% fit() y model %>% reset_states().
Sección que dispondrá de una serie de recursos y enlaces interesantes para poder complementar eficazmente la formación del curso.
En esta clase dispones de un espacio para resolver las dudas y consultas que te surjan durante el curso.
Plantea tus dudas y te ayudaré a resolverla. De esta forma todos los alumnos de esta formación podrán participar de las aportaciones mías como instructor como del resto de compañeros del curso.
¡Enhorabuena, finalizaste con éxito la formación!
En esta última clase podrás solicitar tu certificado de finalización del curso, que te será de gran ayuda para complementar tu curriculum vitae.
Deep Learning para Lenguaje Natural y Series Temporales en R.
Aprendizaje profundo con Redes Neuronales Recurrentes en Procesamiento del Lenguaje Natural y Series Temporales.
Instructores: PhD. Manuel Castillo.
Requisitos previos: Antes de realizar el curso se recomienda encarecidamente tener conocimientos sobre Machine Learning. Este es el curso continuación del también curso de Udemy llamado:
Deep Learning para datos tabulares con R y Keras: Aprendizaje profundo con R para Tidy Data. Aprende a desarrollar modelos basados en redes neuronales de básico a experto.
Descripción del Curso:
Bienvenido al curso de Deep Learning para Lenguaje Natural y Series Temporales con R y Keras. En este curso trataremos la librería Keras de Python para Deep Learning y cómo usarla para desarrollar y evaluar modelos de Deep Learning para Procesamiento del Lenguaje Natural y Series Temporales. En este curso, descubriremos las técnicas, código y habilidades de Deep Learning que luego puede llevar a sus propios proyectos de Aprendizaje profundo para Procesamiento del Lenguaje Natural y Series Temporales con R y Keras.
Si está interesado en Deep Learning, tenemos que comenzar por desarrollar y evaluar modelos de Deep Learning. Luego, si descubres que realmente le gusta o tienes una habilidad especial para ello, más adelante podrás profundizar más en los antecedentes y la teoría, según lo necesites para ayudarte a desarrollar mejores y más valiosos resultados.
En este contexto, para este curso se ha escogido la mejor plataforma para comenzar y desarrollar muy rápidamente modelos de Deep Learning potentes a través de la librería Keras de R.
La librería Keras envuelve la complejidad de la computación numérica de Theano y TensorFlow proporcionando una API concisa que usaremos para desarrollar nuestra propia red neuronal y modelos Deep Learning. Además, trataremos las habilidades de Deep Learning para llevar esta nueva tecnología asombrosa a nuestros propios proyectos.
El curso está dirigido a personas que tengan conocimientos de Machine Learning, conocimientos intermedios del lenguaje de programación y que quieran adentrarse a este apasionante mundo de dentro del campo de Deep Learning y redes neuronales.
Contenidos del Curso:
MÓDULO I. Introducción - Teoría / Pŕactica.
Anaconda como nuestro gestor de trabajo.
Jupyter Notebook o RStudio como nuestro entorno de Deep Learning.
Curso rápido de R.
Introducción a la librerías Keras
MÓDULO II. Fundamentos de Deep Learning - Teoría / Pŕactica.
¿Qué son las redes neuronales?
Historia de las redes neuronales.
Curso intensivo en perceptrones multicapa.
Desarrolle su primera red neuronal con Keras.
Utilice modelos de Keras para Machine Learning general.
MÓDULO III. Fundamentos de Redes Neuronales - Teoría
Neurona como unidad fundamental.
Como trabaja una neuronal.
Perceptrón multicapa.
Cómo opera el perceptrón multicapa.
Simulación de una arquitectura de red neuronal.
MÓDULO IV. Fundamentos de Redes Neuronales - Práctica
Nuestra primera red neuronal.
Desarrollar la primera red neuronal para Tidy Data.
Desarrollo del percertrón multicapa para Tidy Data.
MLP para problemas de regresión
MLP para problema de imágenes.
MÓDULO V. RNN para series temporales
Multilayer percetrón en Series temporales con tamaño ventanas.
Series temporales con GRU.
Series Temporales con LSTM.
Series Temporales con LSTM con tamaño de ventanas.
Series Temporales con LSTM con memoria entre batchs.
Conceptos avanzados en series temporales.
MÓDULO VI. RNN para Procesamiento del Lenguaje Natural
Clasificación de opiniones en revisión de películas (sentiment analysis) con CNN.
Clasificación de opiniones en revisión de películas (sentiment analysis) con RNN.
Clasificación de opiniones en revisión de películas (sentiment analysis) con RNN Bidireccionales.
Generación de texto con LSTM.
Conceptos avanzados en PLN.
Actividad virtual
Sesiones de videoconferencias
Análisis de casos
Foros de discusión
Trabajos parciales de los módulos
Examen tipo test
Lecturas comentadas y
Búsquedas de información científica.
Procedimiento de la formación:
La formación te permitirá convertirte en un experto en la materia, y todo ello desde una formación principalmente práctica. A través de variadas actividades y proyectos completos podrás adquirir los conocimientos suficientes para ejercer profesionalmente de forma solvente. Además conocerás en detalle mi flujo de trabajo a la hora de afrontar un proyecto profesional. Para la realización de este curso no vas a necesitar el equipo informático más potente del mercado, ya que el software empleado durante formación online se encuentra perfectamente optimizado y su uso es muy fluido en todo tipo de equipos, tanto en PC como en Mac.
El aprendizaje será un proceso continuo donde los estudiantes tienen la oportunidad de ir trabajando con el editor de texto practicando lo expuesto en la parte de teoría.
Puedes elegir ver todas las lecciones de forma secuencial (lineal) y aprovecharlas al máximo la formación. Pero también puedes decidir ver este curso como una guía de referencia. Las clases están claramente organizadas en secciones lógicas y puedes decidir visualizar solo las clases que te resulten más importantes según tus necesidades formativas. A excepción de las lecciones PRO, la mayoría de las lecciones son independientes para que puedas comprender los conceptos de cada lección sin tener que ver las lecciones anteriores del curso.
Es excepcional el aumento en la demanda de profesionales en este ámbito por parte de las empresas de todo el mundo actualmente. Para desarrollar el programa formativo propuesto no ser requieren grandes conocimientos previos, ya que la formación se acomete desde un nivel de usuario 0. El curso está orientado a aquellos creativos que quieran ampliar sus skills (habilidades) y conocer múltiples trucos, consejos, recursos y recomendaciones, de la mano del instructor Dr. Manuel Castillo-Cara. Además todas las formaciones de Udemy disponen acceso automático al curso, sin limitación de tiempo, disponibilidad 24/7 (24 horas al día los 7 días de la semana), sin caducidad y con garantía de devolución.
Características del Curso:
Recuerda que esta formación incluye lecciones en vídeo fullHD con audio de estudio (compatible con TV, PC, Mac, tablet y smartphone), artículos didácticos, actividades, proyectos paso a paso, recursos descargables, links de interés, acceso de por vida, certificado de finalización, tutorización online, y una exclusiva comunidad de aprendizaje privada que nos ayudamos aportando nuestras experiencias en el foro de comunicación del curso.
¿A qué esperas?, este curso es ideal para ti, atrévete a convertirte en un experto. Adelante, nos vemos dentro de la formación.