Redes Neurais em IA e Deep Learning - página 55

 

Clase 6.3 — El método del impulso



Lección 6.3 — El método del impulso [Redes neuronales para el aprendizaje automático]

En este video, discutiremos varios problemas relacionados con el uso del descenso de gradiente estocástico con mini lotes y exploraremos algunas técnicas para mejorar su efectividad. Estas técnicas a menudo se consideran el "arte negro" de las redes neuronales, y cubriremos algunas de las claves.

En primer lugar, abordemos el problema de la inicialización del peso en una red neuronal. Si dos unidades ocultas tienen pesos y sesgos idénticos, siempre recibirán el mismo gradiente y no podrán aprender diferentes detectores de características. Para permitirles aprender características distintas, es crucial inicializar sus pesos de manera diferente. Logramos esto usando pequeños pesos aleatorios que rompen la simetría. Además, es beneficioso que los pesos iniciales tengan diferentes magnitudes, considerando el fan-in de cada unidad oculta. Por ejemplo, los pesos más grandes pueden conducir a la saturación en unidades con un abanico de entrada significativo, mientras que los pesos más pequeños son adecuados para unidades con un abanico de entrada pequeño. Como regla general, el tamaño de los pesos iniciales debe ser proporcional a la raíz cuadrada del fan-in.

Cambiar las entradas, o agregar una constante a cada componente de entrada, sorprendentemente puede tener un impacto significativo en la velocidad de aprendizaje. Este cambio ayuda con el descenso más pronunciado, ya que puede alterar sustancialmente la superficie de error. A menudo se recomienda cambiar cada componente de entrada para que tenga un valor promedio de cero en todo el conjunto de entrenamiento.

Escalar las entradas es otra consideración importante cuando se usa el descenso más pronunciado. El escalado implica transformar los valores de entrada para garantizar que cada componente tenga una variación unitaria en todo el conjunto de entrenamiento, lo que los convierte en valores típicos de uno o menos uno. Este escalado permite un mejor comportamiento de la superficie de error, evitando una curvatura alta para los componentes de entrada grandes y una curvatura baja para los pequeños.

La descorrelacionación de los componentes de entrada puede facilitar enormemente el aprendizaje. Al eliminar las correlaciones entre los componentes de entrada, reducimos la redundancia y mejoramos la eficiencia del aprendizaje. El análisis de componentes principales (PCA) es una técnica comúnmente utilizada para lograr la descorrelación. Implica eliminar componentes con valores propios pequeños y escalar los componentes restantes dividiéndolos por las raíces cuadradas de sus valores propios. Este proceso conduce a una superficie de error circular para sistemas lineales, lo que simplifica el aprendizaje.

Ahora abordemos algunos problemas comunes que se encuentran en el entrenamiento de redes neuronales. Comenzar con una tasa de aprendizaje excesivamente grande puede conducir a unidades ocultas a estados extremos, donde sus derivados se acercan a cero. Esto hace que el aprendizaje se detenga, dando a menudo la impresión de estar estancado en un mínimo local. En realidad, es probable que la red esté atrapada en una meseta.

Otro desafío surge al clasificar utilizando el error cuadrático o el error de entropía cruzada. Inicialmente, la red aprende rápidamente la mejor estrategia de adivinación, que es hacer que la unidad de salida sea igual a la proporción esperada de ser uno. Sin embargo, la mejora adicional más allá de esta estrategia de adivinanzas puede ser lenta, especialmente con redes profundas y pesos iniciales pequeños.

Al ajustar la tasa de aprendizaje, es esencial encontrar el equilibrio adecuado. Reducir la tasa de aprendizaje demasiado pronto o demasiado puede dificultar el progreso, mientras que reducirla hacia el final del entrenamiento puede ayudar a estabilizar el rendimiento de la red.

Ahora exploremos cuatro métodos específicos para acelerar significativamente el aprendizaje de mini lotes:

  1. Impulso: en lugar de cambiar directamente los pesos en función del gradiente, el impulso implica usar el gradiente para actualizar la velocidad de las actualizaciones de peso. Este impulso permite que la red recuerde gradientes anteriores y ayuda a acelerar el aprendizaje.

  2. Tasas de aprendizaje adaptables: asignar una tasa de aprendizaje separada para cada parámetro y ajustarla lentamente en función de mediciones empíricas puede mejorar el aprendizaje. Si el signo del gradiente sigue cambiando, indicando oscilación, la tasa de aprendizaje disminuye. Si el signo permanece consistente, indicando progreso, la tasa de aprendizaje aumenta.

  3. RMSprop: este método implica dividir las actualizaciones de peso por un promedio móvil de las magnitudes de gradiente recientes. Ajusta dinámicamente las actualizaciones de peso en función de la magnitud de los gradientes, lo que permite un manejo efectivo de varios rangos de gradiente. RMSprop es una adaptación de mini lotes de Rprop.

 

Clase 6.4 — Tasas de aprendizaje adaptativo para cada conexión



Lección 6.4 — Tasas de aprendizaje adaptativo para cada conexión [Redes neuronales para el aprendizaje automático]

En este video, exploraremos un método conocido como tasas de aprendizaje adaptativo, que fue desarrollado inicialmente por Robbie Jacobs a fines de la década de 1980 y posteriormente mejorado por otros investigadores. El concepto detrás de las tasas de aprendizaje adaptables es asignar una tasa de aprendizaje única a cada conexión en una red neuronal, según las observaciones empíricas de cómo se comporta el peso de esa conexión durante las actualizaciones. Este enfoque permite afinar el proceso de aprendizaje al disminuir la tasa de aprendizaje cuando el gradiente del peso continúa invirtiéndose y aumentándola cuando el gradiente permanece constante.

Tener tasas de aprendizaje adaptables separadas para cada conexión es ventajoso, especialmente en redes profundas de múltiples capas. En tales redes, las tasas de aprendizaje pueden variar significativamente entre diferentes pesos, particularmente entre pesos en diferentes capas. Además, el abanico de una unidad, que determina el tamaño de los efectos de sobreimpulso al ajustar varios pesos entrantes para corregir un error, también requiere diferentes tasas de aprendizaje. Los fan-ins más grandes pueden dar lugar a efectos de sobreimpulso más significativos, por lo que es necesario adaptar las tasas de aprendizaje en consecuencia.

Para implementar tasas de aprendizaje adaptables, se establece manualmente una tasa de aprendizaje global y se multiplica por una ganancia local específica para cada peso. Inicialmente, la ganancia local se establece en 1 para cada peso. Luego, la actualización del peso se determina multiplicando la tasa de aprendizaje por la ganancia local y la derivada del error para ese peso. La ganancia local se adapta aumentándola si el gradiente del peso no cambia de signo y disminuyéndola si los gradientes tienen signos opuestos. Se emplean aumentos aditivos y disminuciones multiplicativas, con el objetivo de amortiguar rápidamente grandes ganancias si ocurren oscilaciones.

Es interesante considerar el comportamiento de las tasas de aprendizaje adaptativo cuando los gradientes son aleatorios. En tales casos, habrá un número igual de aumentos y disminuciones en las ganancias, lo que resultará en una ganancia de 1. Si los gradientes tienen constantemente la misma dirección, la ganancia puede volverse mucho mayor que 1, mientras que los gradientes opuestos pueden ser consistentes. haga que la ganancia sea mucho menor que 1, lo que indica una oscilación a través de un barranco.

Para mejorar la eficacia de las tasas de aprendizaje adaptativo, es importante limitar el tamaño de las ganancias dentro de un rango razonable, como 0,1 a 10 o 0,01 a 100. Las ganancias excesivas pueden generar inestabilidad y evitar que los pesos converjan. Si bien las tasas de aprendizaje adaptativo se diseñaron inicialmente para el aprendizaje por lotes completos, también se pueden aplicar con minilotes. Sin embargo, se prefieren minilotes más grandes para minimizar la influencia de los errores de muestreo y garantizar que los cambios de signo en las pendientes reflejen el paso por un barranco.

Es posible combinar tasas de aprendizaje adaptativo con impulso, como sugiere Jacobs. En lugar de comparar el gradiente actual con el anterior, se determina la concordancia de signo entre el gradiente actual y la velocidad (gradiente acumulado) para ese peso. Esta combinación aprovecha los beneficios tanto del impulso como de las tasas de aprendizaje adaptativo. Mientras que las tasas de aprendizaje adaptativo manejan los efectos alineados con el eje, el impulso puede manejar elipses diagonales y navegar rápidamente en direcciones diagonales, lo que las tasas de aprendizaje adaptativo por sí solas no pueden lograr.

Hay algunas consideraciones y técnicas adicionales para mejorar el rendimiento de las tasas de aprendizaje adaptativo. Es crucial lograr un equilibrio y evitar que las ganancias se vuelvan excesivamente grandes. Si las ganancias se vuelven demasiado grandes, pueden provocar inestabilidad y no disminuir lo suficientemente rápido, lo que podría dañar las pesas.

Además, vale la pena señalar que las tasas de aprendizaje adaptativo se diseñaron principalmente para el aprendizaje por lotes completo, donde todos los ejemplos de entrenamiento se procesan en una sola iteración. Sin embargo, también se pueden aplicar al aprendizaje por lotes pequeños, donde los subconjuntos de ejemplos de entrenamiento se procesan a la vez. Cuando se utilizan minilotes, es importante asegurarse de que el tamaño del minilote sea relativamente grande para mitigar la influencia de los errores de muestreo. Esto ayuda a garantizar que los cambios de signo en las pendientes sean indicativos de atravesar un barranco en lugar de que se deban únicamente a la variabilidad de muestreo del minilote.

También es posible combinar tasas de aprendizaje adaptables con impulso, lo que puede mejorar aún más el proceso de optimización. En lugar de comparar el gradiente actual con el gradiente anterior, se puede evaluar la concordancia en el signo entre el gradiente actual y la velocidad (es decir, el gradiente acumulado) para ese peso. Al incorporar el impulso, se puede lograr una sinergia entre las ventajas del impulso y las tasas de aprendizaje adaptativo. Las tasas de aprendizaje adaptativo se centran en el manejo de los efectos alineados con el eje, mientras que el impulso es capaz de lidiar de manera efectiva con elipses diagonales y navegar rápidamente en direcciones diagonales que pueden ser un desafío solo para las tasas de aprendizaje adaptativo.

Las tasas de aprendizaje adaptables ofrecen una forma de ajustar el proceso de aprendizaje en las redes neuronales mediante la asignación de tasas de aprendizaje individuales a cada conexión en función de las observaciones empíricas. Abordan los desafíos de variar las tasas de aprendizaje a través de diferentes pesos en redes profundas de múltiples capas y consideran la distribución de unidades. Técnicas como la limitación del tamaño de las ganancias, la selección adecuada de mini lotes y la combinación de tasas de aprendizaje adaptables con impulso pueden optimizar aún más el proceso de capacitación, lo que resulta en un mejor rendimiento y convergencia.

 

Lección 6.5 — Rmsprop: normalizar el gradiente



Lección 6.5 — Rmsprop: normalizar el gradiente [Redes neuronales para el aprendizaje automático]

El video presenta un método llamado Rprop (Resilient Backpropagation), diseñado inicialmente para el aprendizaje por lotes completo. Comparte similitudes con el popular algoritmo de retropropagación pero con algunas diferencias. Luego, el orador analiza cómo extender Rprop para trabajar con mini lotes, lo cual es esencial para grandes conjuntos de datos redundantes. El método resultante, llamado iRprop (Improved Rprop), combina las ventajas de Rprop con la eficiencia del aprendizaje en mini lotes.

La principal motivación detrás de Rprop es abordar el desafío de las diferentes magnitudes de gradiente. Los gradientes en las redes neuronales pueden variar de pequeños a enormes, lo que dificulta elegir una única tasa de aprendizaje global. Rprop aborda este problema considerando solo el signo del gradiente, asegurando que todas las actualizaciones de peso sean del mismo tamaño. Esta técnica es particularmente útil para escapar de mesetas con pendientes pequeñas, ya que incluso con pendientes pequeñas, las actualizaciones de peso pueden ser sustanciales.

Rprop combina el signo del gradiente con tamaños de paso adaptativos basados en el peso que se actualiza. En lugar de considerar la magnitud del gradiente, se enfoca en el tamaño de paso previamente determinado para ese peso. El tamaño del paso se adapta con el tiempo, aumentando multiplicativamente si los signos de los dos últimos gradientes concuerdan y disminuyendo multiplicativamente si no están de acuerdo. Al limitar los tamaños de los pasos, evita que se vuelvan demasiado grandes o demasiado pequeños.

Si bien Rprop funciona bien para el aprendizaje por lotes completos, enfrenta desafíos cuando se aplica a minilotes. Viola la idea central detrás del descenso de gradiente estocástico, que se basa en promediar gradientes en minilotes sucesivos cuando se usa una tasa de aprendizaje pequeña. El orador explica que Rprop incrementa el peso varias veces con su tamaño de paso actual y solo lo disminuye una vez, lo que genera un aumento no deseado en la magnitud del peso.

Para superar esta limitación, el orador presenta RMSprop (propagación de raíz cuadrática media) como una versión mini-lote de Rprop. RMSprop garantiza que el número utilizado para dividir el gradiente se mantenga constante en los minilotes cercanos. Lo logra manteniendo un promedio móvil de los gradientes cuadrados para cada peso. Los gradientes al cuadrado se ponderan utilizando un factor de disminución (p. ej., 0,9) y se combinan con el cuadrado medio anterior para calcular el cuadrado medio actualizado. La raíz cuadrada del cuadrado medio se usa luego para normalizar el gradiente, lo que permite un aprendizaje más efectivo.

El orador menciona que se pueden realizar más desarrollos en RMSprop, como combinarlo con impulso o tasas de aprendizaje adaptativas en cada conexión. Además, se refieren a métodos relacionados, como el impulso de Nesterov y un método propuesto por el grupo de Yann LeCun, que comparte similitudes con RMSprop.

En resumen, el ponente recomienda diferentes métodos de aprendizaje en función de las características del conjunto de datos. Para conjuntos de datos pequeños o conjuntos de datos grandes sin mucha redundancia, son adecuados los métodos de lotes completos como el gradiente conjugado no lineal, LBFGS o L-BFGS-B. Las tasas de aprendizaje adaptativo o Rprop también se pueden usar para redes neuronales. En el caso de grandes conjuntos de datos redundantes, los métodos de mini lotes son esenciales. La primera opción a probar es el descenso de pendiente estándar con impulso. RMSprop es otro método efectivo a considerar, ya que combina los beneficios de Rprop y el aprendizaje de mini lotes. El orador sugiere explorar más mejoras, pero actualmente no existe una receta simple para entrenar redes neuronales debido a la naturaleza diversa de las redes y tareas.

 

Lección 7.1 — Modelado de secuencias: una breve descripción



Lección 7.1 — Secuencias de modelado: una breve descripción [Redes neuronales para el aprendizaje automático]

En este video, el orador brinda una descripción general de los diferentes tipos de modelos utilizados para las secuencias. Comienzan analizando los modelos autorregresivos, que predicen el siguiente término de una secuencia en función de los términos anteriores. Luego mencionan variaciones más complejas de modelos autorregresivos que incorporan unidades ocultas. El orador continúa presentando modelos con estado y dinámica ocultos, como sistemas dinámicos lineales y modelos ocultos de Markov. Aunque estos modelos son complejos, su propósito es mostrar la relación entre las redes neuronales recurrentes y este tipo de modelos en el contexto del modelado de secuencias.

Cuando se modelan secuencias mediante el aprendizaje automático, el objetivo suele ser transformar una secuencia en otra. Por ejemplo, convertir palabras en inglés a palabras en francés o convertir presiones de sonido en identidades de palabras para el reconocimiento de voz. En algunos casos, puede que no haya una secuencia objetivo separada, por lo que el siguiente término en la secuencia de entrada puede servir como señal de enseñanza. Este enfoque es más natural para las secuencias temporales, ya que existe un orden natural para las predicciones. Sin embargo, también se puede aplicar a imágenes, borrando la distinción entre aprendizaje supervisado y no supervisado.

Luego, el orador brinda una revisión de otros modelos de secuencia antes de sumergirse en las redes neuronales recurrentes (RNN). Explican que los modelos autorregresivos sin memoria se pueden ampliar agregando unidades ocultas en una red neuronal de avance. Sin embargo, enfatizan que los modelos sin memoria son solo una subclase de modelos para secuencias. Otro enfoque es utilizar modelos con estados ocultos y dinámicas internas, que pueden almacenar información durante más tiempo. Estos modelos, como los sistemas dinámicos lineales y los modelos ocultos de Markov, involucran algoritmos de aprendizaje e inferencia probabilística.

Los sistemas dinámicos lineales se utilizan ampliamente en ingeniería y tienen estados ocultos de valor real con dinámica lineal y ruido gaussiano. Los modelos ocultos de Markov, por otro lado, usan distribuciones discretas y transiciones de estado probabilísticas. Se utilizan comúnmente en el reconocimiento de voz y tienen algoritmos de aprendizaje eficientes basados en programación dinámica.

El orador explica las limitaciones de los modelos ocultos de Markov cuando se trata de transmitir grandes cantidades de información entre la primera y la segunda mitad de un enunciado. Esta limitación se debe a la limitada capacidad de memoria del estado oculto. Esto lleva a la introducción de redes neuronales recurrentes, que tienen estados ocultos distribuidos y dinámicas no lineales, haciéndolas más eficientes para recordar información.

Las redes neuronales recurrentes pueden exhibir varios comportamientos, incluida la oscilación, el establecimiento de atractores puntuales (útil para la recuperación de la memoria) y el comportamiento caótico (útil en ciertas circunstancias). Inicialmente se pensó que la idea de que una RNN puede aprender a implementar múltiples programas utilizando diferentes subconjuntos de su estado oculto las haría muy poderosas. Sin embargo, los RNN son computacionalmente desafiantes para entrenar, y explotar todo su potencial ha sido una tarea difícil.

El video brinda una descripción general de diferentes modelos de secuencia, presenta el concepto de redes neuronales recurrentes y destaca su poder computacional y los desafíos en el entrenamiento.

 

Clase 7.2 — Entrenamiento de RNN con retropropagación



Lección 7.2 — Entrenamiento de RNN con retropropagación [Redes neuronales para el aprendizaje automático]

En este video, analizaré el algoritmo de retropropagación a través del tiempo, que es un método común para entrenar redes neuronales recurrentes. El algoritmo es sencillo una vez que comprende la relación entre una red neuronal recurrente y una red neuronal de avance con múltiples capas que representan diferentes pasos de tiempo. También cubriré varios enfoques para proporcionar entradas y salidas deseadas a las redes neuronales recurrentes.

El diagrama ilustra una red recurrente simple con tres neuronas interconectadas. Cada conexión tiene un retraso de tiempo de uno, y la red opera en tiempo discreto con tics enteros. Para entrenar una red recurrente, debemos reconocer que es esencialmente una versión ampliada de una red de avance en el tiempo. La red recurrente comienza en un estado inicial en el momento cero y utiliza sus pesos de conexión para generar un nuevo estado en el momento uno. Repite este proceso, utilizando los mismos pesos para producir nuevos estados posteriores.

La retropropagación es eficaz en el aprendizaje cuando existen limitaciones de peso. Esto también se ha observado en redes convolucionales. Para incorporar restricciones de peso, calculamos los gradientes como de costumbre, ignorando las restricciones y luego modificamos los gradientes para mantener las restricciones. Por ejemplo, si queremos que w1 sea igual a w2, nos aseguramos de que el cambio en w1 sea igual al cambio en w2 tomando las derivadas con respecto a w1 y w2, sumando o promediando, y aplicando la misma cantidad para actualizar ambos pesos. Mientras los pesos satisfagan las restricciones inicialmente, continuarán haciéndolo.

El algoritmo de retropropagación a través del tiempo es simplemente un término que se usa para describir el proceso de tratar una red recurrente como una red de avance con pesos compartidos y entrenarla usando retropropagación. En el dominio del tiempo, el paso hacia adelante acumula actividades en cada intervalo de tiempo, mientras que el paso hacia atrás extrae actividades de la pila y calcula las derivadas de error para cada paso de tiempo. Este paso hacia atrás en cada paso de tiempo le da al algoritmo su nombre: retropropagación a través del tiempo.

Después del paso hacia atrás, sumamos o promediamos las derivadas de todos los pasos de tiempo para cada peso. Luego actualizamos todas las instancias de ese peso por la misma cantidad, proporcional a la suma o promedio de las derivadas. Surge una consideración adicional si no especificamos el estado inicial de todas las unidades, como unidades ocultas o de salida. En este caso, necesitamos comenzarlos en un estado particular. Un enfoque es establecer valores predeterminados, como 0,5, pero es posible que no produzca resultados óptimos. Alternativamente, podemos aprender los estados iniciales tratándolos como parámetros y ajustándolos según el gradiente de la función de error con respecto al estado inicial.

Hay varios métodos para proporcionar entrada a una red neuronal recurrente. Podemos especificar el estado inicial de todas las unidades, un subconjunto de las unidades o los estados en cada paso de tiempo para un subconjunto de las unidades. Este último se usa a menudo cuando se trata de datos secuenciales. De manera similar, existen diferentes formas de especificar los objetivos para una red recurrente. Podemos especificar los estados finales deseados para todas las unidades o para varios pasos de tiempo si queremos entrenarlo para que se asiente en un atractor en particular. Al incluir derivados de cada paso de tiempo durante la retropropagación, podemos incorporar fácilmente estas especificaciones y fomentar el aprendizaje de los atractores.

El algoritmo de retropropagación a través del tiempo es una extensión directa de la retropropagación para entrenar redes neuronales recurrentes. Al tratar la red recurrente como una red de retroalimentación expandida con pesos compartidos, podemos aplicar retropropagación y ajustar los estados y pesos iniciales para optimizar el entrenamiento. Existen varios métodos para proporcionar entradas y salidas deseadas a redes recurrentes, lo que permite flexibilidad en el manejo de datos secuenciales y capacitación para objetivos específicos.

 

Clase 7.3 — Un ejemplo de juguete de entrenamiento de un RNN



Lección 7.3 — Un ejemplo de juguete para entrenar una RNN [Redes neuronales para el aprendizaje automático]

En este video, explicaré cómo una red neuronal recurrente (RNN) resuelve un problema de juguete. Se elige un problema de juguete para mostrar las capacidades de las RNN que no se pueden lograr fácilmente con las redes neuronales de avance. El problema que se muestra aquí es la suma binaria. Después de que la RNN aprenda a resolver el problema, podemos examinar sus estados ocultos y compararlos con los estados ocultos de un autómata de estado finito que resuelve el mismo problema.

Para ilustrar el problema de sumar dos números binarios, podríamos entrenar una red neuronal de avance. Sin embargo, existen limitaciones con este enfoque. Debemos determinar de antemano el número máximo de dígitos tanto para los números de entrada como para el número de salida. Además, el procesamiento aplicado a diferentes bits de los números de entrada no se generaliza. Como resultado, el conocimiento de sumar los dos últimos dígitos y manejar acarreos reside en pesos específicos. Cuando se trata de diferentes partes de un número binario largo, el conocimiento debe codificarse en diferentes pesos, lo que lleva a una falta de generalización automática.

El algoritmo para la suma binaria se muestra en la imagen. Los estados del algoritmo se asemejan a los de un modelo oculto de Markov, excepto que no están realmente ocultos. El sistema opera en un estado a la vez, realizando una acción al ingresar a un estado (ya sea imprimiendo 1 o 0). Cuando está en un estado, recibe una entrada, que consta de dos números de la siguiente columna, lo que provoca una transición a un nuevo estado. Por ejemplo, si está en el estado de acarreo y acaba de imprimir un 1, al encontrar un 1 1, permanece en el mismo estado e imprime otro 1. Sin embargo, si encuentra un 1 0 o un 0 1, pasa al acarreo. pero imprime un 0. De manera similar, un 0 0 lo lleva al estado sin acarreo, donde imprime un 1. Este proceso continúa para cada paso de tiempo.

Una red neuronal recurrente para la suma binaria requiere dos unidades de entrada y una unidad de salida. Recibe dos dígitos de entrada en cada paso de tiempo y produce una salida correspondiente a la columna que encontró hace dos pasos de tiempo. Para tener en cuenta el retraso de tiempo, la red necesita un retraso de dos pasos de tiempo, donde el primer paso actualiza las unidades ocultas en función de las entradas, y el segundo paso genera la salida del estado oculto. La arquitectura de la red consta de tres unidades ocultas interconectadas, aunque se podrían usar más unidades ocultas para un aprendizaje más rápido. Estas unidades ocultas tienen conexiones bidireccionales con diferentes pesos. Las conexiones entre unidades ocultas permiten que el patrón de actividad en un paso de tiempo influya en el patrón de actividad oculto en el siguiente paso de tiempo. Las unidades de entrada tienen conexiones de avance con las unidades ocultas, lo que permite que la red observe los dos dígitos en una columna. De manera similar, las unidades ocultas tienen conexiones de alimentación directa a la unidad de salida, lo que permite la producción de una salida.

Es fascinante analizar lo que aprende la red neuronal recurrente. Aprende cuatro patrones de actividad distintos en sus tres unidades ocultas, que corresponden a los nodos en el autómata de estado finito para la suma binaria. Es crucial no confundir las unidades de una red neuronal con los nodos de un autómata de estado finito. Los nodos del autómata se alinean con los vectores de actividad de la red neuronal recurrente. El autómata está restringido a un estado en cada momento, al igual que las unidades ocultas en la RNN, que tienen precisamente un vector de actividad en cada paso de tiempo. Si bien un RNN puede emular un autómata de estado finito, es exponencialmente más poderoso en representación. Con N neuronas ocultas, puede tener dos elevado a N posibles vectores de actividad binarios. Aunque solo tiene N pesos al cuadrado, es posible que no explote completamente todo el poder de representación. Si el cuello de botella está en la representación, un RNN puede superar a un autómata de estado finito.

Esto es particularmente importante cuando el flujo de entrada contiene dos procesos separados que ocurren simultáneamente. Un autómata de estado finito necesita aumentar exponencialmente su número de estados para manejar los procesos paralelos. Por el contrario, una red neuronal recurrente solo necesita duplicar el número de unidades ocultas, duplicando así el número de unidades y cuadruplicando el número de estados vectoriales binarios que puede representar.

 

Lección 7.4 — ¿Por qué es difícil entrenar a un RNN?



Lección 7.4 — ¿Por qué es difícil entrenar a un RNN? [Redes neuronales para el aprendizaje automático]

En este video, discutiré el problema de los gradientes de explosión y desaparición que dificultan el entrenamiento de redes neuronales recurrentes (RNN). Durante muchos años, los investigadores creyeron que modelar dependencias a largo plazo con RNN era casi imposible. Sin embargo, ahora hay cuatro enfoques efectivos para abordar este problema.

Para comprender por qué entrenar RNN es un desafío, debemos reconocer una diferencia crucial entre los pases hacia adelante y hacia atrás en un RNN. En el pase hacia adelante, se utilizan funciones de aplastamiento como la función logística para evitar que los vectores de actividad exploten. Cada neurona en la RNN emplea una unidad logística, que restringe la salida entre 0 y 1. Esto evita que los niveles de actividad crezcan sin control.

Por el contrario, el pase hacia atrás es completamente lineal. Sorprendentemente, si duplicamos las derivadas de error en la capa final, todas las derivadas de error también se duplicarán durante la retropropagación. Los gradientes están determinados por las pendientes de las curvas logísticas en puntos específicos (marcados con puntos rojos en el video). Una vez que se completa el pase hacia adelante, se fijan las pendientes de estas tangentes. Durante la retropropagación, los gradientes se propagan a través de un sistema lineal en el que se ha fijado la pendiente de la no linealidad. Sin embargo, los sistemas lineales tienden a sufrir el problema de explotar o morir gradientes a medida que iteran. Si los pesos son pequeños, los gradientes se reducen exponencialmente y se vuelven insignificantes. Por el contrario, si los pesos son grandes, los gradientes explotan y dominan el proceso de aprendizaje. Estos problemas son más graves en las RNN en comparación con las redes neuronales de avance, especialmente cuando se trata de secuencias largas.

Incluso con una cuidadosa inicialización del peso, sigue siendo un desafío capturar las dependencias entre la salida actual y los eventos que ocurrieron hace muchos pasos de tiempo. Los RNN luchan con el manejo de dependencias de largo alcance. El video proporciona un ejemplo de cómo los gradientes pueden desaparecer o explotar cuando se entrena una red neuronal recurrente para aprender estados de atracción. Las pequeñas diferencias en los estados iniciales no provocan ningún cambio en el estado final (gradientes que se desvanecen), mientras que ligeras variaciones cerca de los límites dan como resultado una divergencia significativa (gradientes explosivos).

Para abordar estos desafíos, existen cuatro métodos efectivos para capacitar RNN. El primer método es la memoria a corto plazo (LSTM), que altera la arquitectura de la red para mejorar las capacidades de memoria. El segundo enfoque implica el uso de optimizadores avanzados que pueden manejar pequeños gradientes de manera efectiva. La optimización sin hessian, diseñada para redes neuronales, sobresale en la detección de pequeños gradientes con baja curvatura. El tercer método implica la inicialización cuidadosa de los pesos y la creación de un depósito de osciladores débilmente acoplados dentro del estado oculto. Esto permite que la red reverbere y recuerde las secuencias de entrada. A continuación, se entrenan las conexiones entre las unidades ocultas y las salidas, mientras que las conexiones recurrentes permanecen fijas. El cuarto método utiliza el impulso y lo combina con la técnica de inicialización utilizada en redes de estado de eco. Esta modificación mejora la dinámica de la red, haciéndola aún más efectiva.

La capacidad de entrenar RNN ha mejorado con estos enfoques, superando los desafíos que plantean los gradientes de explosión y desaparición.

 

Lección 7.5 — Memoria a corto plazo a largo plazo



Lección 7.5 — Memoria a largo plazo a corto plazo [Redes neuronales para el aprendizaje automático]

En este video, explicaré el enfoque conocido como "Memoria a corto plazo" (LSTM) para entrenar redes neuronales recurrentes. LSTM tiene como objetivo crear una memoria a corto plazo de larga duración en una red neuronal mediante el empleo de módulos especializados que facilitan el acceso de la información.

La celda de memoria en LSTM está diseñada para retener información durante un período prolongado. Consiste en unidades logísticas y lineales con interacciones multiplicativas. Cuando se activa una puerta logística de "escritura", la información ingresa a la celda de memoria desde el resto de la red recurrente. El estado de la puerta de "escritura" está determinado por la red recurrente. La información permanece en la celda de memoria siempre que esté activada la puerta "mantener", que es controlada por el resto del sistema. Para leer la información de la celda de memoria, se activa una puerta logística de "lectura" y el valor almacenado se recupera e influye en los estados futuros de la red neuronal recurrente.

LSTM utiliza unidades logísticas porque tienen propiedades diferenciables, lo que permite la retropropagación a través de ellas. Esto permite que la red aprenda y optimice la celda de memoria en varios pasos de tiempo. La retropropagación a través de la celda de memoria implica la actualización de los pesos en función de las derivadas del error, que se pueden propagar hacia atrás a lo largo de cientos de pasos de tiempo.

LSTM ha sido particularmente exitoso en tareas como el reconocimiento de escritura a mano. Puede almacenar y recuperar información de manera efectiva, incluso en presencia de escritura cursiva. Ha demostrado un rendimiento superior en comparación con otros sistemas en tareas de lectura y escritura, y Canada Post ha comenzado a utilizar sistemas basados en LSTM para tales fines.

En el video se muestra una demostración de un sistema de reconocimiento de escritura a mano basado en LSTM. El sistema toma las coordenadas de la pluma como entrada y produce caracteres reconocidos como salida. La fila superior muestra los caracteres reconocidos, la segunda fila muestra los estados de las celdas de memoria seleccionadas, la tercera fila visualiza la escritura real con las coordenadas del lápiz y la cuarta fila ilustra el gradiente retropropagado a las ubicaciones XY, lo que indica el impacto de eventos pasados en decisiones de reconocimiento de caracteres.

LSTM ha demostrado ser un enfoque poderoso para entrenar redes neuronales recurrentes, lo que permite la captura y utilización de dependencias a largo plazo en datos secuenciales.

 

Lección 8.1 — Una breve descripción de la optimización sin Hessian



Lección 8.1 — Una breve descripción general de la optimización sin Hessian [Redes neuronales para el aprendizaje automático]

El optimizador sin Hessian es un algoritmo complejo que se utiliza para entrenar redes neuronales recurrentes de manera efectiva. Si bien no profundizaré en todos los detalles, proporcionaré una comprensión general de cómo funciona.

Al entrenar redes neuronales, el objetivo es minimizar el error. El optimizador determina la dirección y la distancia de movimiento para lograr la mayor reducción de errores. La reducción depende de la relación gradiente-curvatura, asumiendo una superficie de error cuadrático que es cóncava hacia arriba. El método de Newton aborda la limitación del descenso más pronunciado al transformar las superficies de error elípticas en circulares. Lo hace multiplicando el gradiente por el inverso de la matriz de curvatura, también conocida como Hessian. Sin embargo, invertir la matriz hessiana no es factible para redes neuronales grandes debido a su tamaño. Para superar esto, los métodos aproximados como el libre de arpillera y L-BFGS usan matrices de rango inferior para aproximar la curvatura. Sin hessian se aproxima a la matriz de curvatura y utiliza un gradiente conjugado, un método que minimiza el error en una dirección a la vez. Evita interrumpir la minimización anterior al elegir direcciones conjugadas que no alteran los gradientes de las direcciones anteriores.

El gradiente conjugado encuentra eficientemente el mínimo global de una superficie cuadrática n-dimensional en n pasos o menos. Lo logra reduciendo el error cerca del valor mínimo en muchos menos pasos que n. Se puede aplicar directamente a superficies de error no cuadráticas, como las de las redes neuronales multicapa, y funciona bien con grandes minilotes. El optimizador sin Hessian combina la aproximación cuadrática y el gradiente conjugado para mejorar iterativamente la aproximación a la superficie de error real y acercarse al mínimo.

El optimizador libre de Hessian primero hace una aproximación cuadrática inicial a la superficie de error real. Luego aplica un gradiente conjugado para minimizar el error en esta aproximación cuadrática. Al hacerlo, se acerca a un punto mínimo en esta aproximación. Posteriormente, el optimizador realiza una nueva aproximación a la matriz de curvatura y repite el proceso. Continúa iterativamente, refinando la aproximación y minimizando el error usando gradiente conjugado. Este proceso iterativo ayuda al optimizador a acercarse gradualmente al mínimo real de la superficie de error.

En redes neuronales recurrentes, es importante agregar una penalización por cambios grandes en actividades ocultas. Esto evita efectos excesivos causados por cambios de peso al principio que se propagan a lo largo de la secuencia. Al penalizar los cambios en actividades ocultas, el optimizador garantiza la estabilidad y evita resultados no deseados.

El optimizador sin Hessian combina la aproximación cuadrática, la minimización del gradiente conjugado y la penalización por cambios de actividad ocultos para entrenar redes neuronales recurrentes de manera efectiva. Logra una optimización eficiente y precisa mejorando iterativamente la aproximación y minimizando el error.

 

Lección 8.2 — Modelado de cadenas de caracteres


Lección 8.2 — Modelado de cadenas de caracteres [Redes neuronales para el aprendizaje automático]

Ahora aplicaremos la optimización sin Hessian a la tarea de modelar cadenas de caracteres de Wikipedia. Por lo general, al modelar el lenguaje, uno trabajaría con cadenas de palabras. Sin embargo, dado que la web se compone de cadenas de caracteres, el modelado de información a nivel de caracteres puede proporcionar un enfoque más directo.

El modelado de cadenas de caracteres presenta desafíos únicos, como tratar con morfemas, descomponer palabras en unidades significativas y manejar lenguajes con propiedades aglutinantes. Al centrarnos en el modelado a nivel de carácter, evitamos las complejidades asociadas con el preprocesamiento de texto en palabras y podemos capturar directamente patrones e información a nivel de carácter. Para lograr esto, utilizamos una red neuronal recurrente (RNN) con conexiones multiplicativas. La RNN consta de estados ocultos, con 1500 unidades ocultas en este caso. La dinámica del estado oculto implica considerar el carácter actual y el estado oculto anterior para calcular el nuevo estado oculto. Posteriormente, la RNN intenta predecir el siguiente carácter utilizando una capa softmax, asignando probabilidades a cada posible carácter.

En lugar de utilizar una estructura RNN tradicional, empleamos un enfoque diferente que produce mejores resultados. Organizamos todas las cadenas de caracteres posibles en una estructura similar a un árbol, y cada carácter influye en la transición de estado oculto. Para representar este árbol, usamos vectores de estado ocultos para capturar la información de cada nodo. Esto nos permite compartir información de manera eficiente entre nodos similares, mejorando el rendimiento general del modelo. Para implementar las transiciones específicas de los personajes de manera eficiente, introducimos conexiones multiplicativas usando factores. Cada factor calcula una suma ponderada basada en dos grupos de entrada y usa el resultado para escalar los pesos salientes. Al incorporar factores específicos del personaje, podemos determinar la matriz de transición que impulsa la evolución del estado oculto en función del personaje actual.

Este enfoque nos permite capturar la complejidad del modelado del lenguaje a nivel de carácter mientras utilizamos parámetros de manera eficiente. En lugar de mantener matrices de peso separadas para cada carácter, aprovechamos las similitudes entre los caracteres para compartir parámetros. Este intercambio de parámetros ayuda a evitar el sobreajuste y reduce la carga computacional.

Empleamos optimización sin Hessian para modelar cadenas de caracteres de Wikipedia. Al utilizar conexiones multiplicativas y factores específicos del personaje, podemos capturar de manera eficiente las transiciones entre estados ocultos en función del personaje actual, mejorando así el rendimiento del modelado.