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

 

Redes adversarias generativas (DL 23)



En la última lección, cubrimos los codificadores automáticos variacionales, que son un tipo de enfoque de modelado generativo. El objetivo principal del codificador automático es aprender variables latentes que se pueden utilizar para el muestreo de la distribución generativa. Otra forma de pensar en generar muestras a partir de una distribución es a través de generadores computacionales de números aleatorios .

Cuando se utiliza una biblioteca aleatoria en la programación, las muestras de las distribuciones aleatorias se generan en función de una secuencia de bits aleatorios o pseudoaleatorios. El generador de números aleatorios realiza cálculos para transformar esta secuencia de bits en muestras de una distribución diferente. Muchas distribuciones se construyen sobre distribuciones uniformes en estos generadores.

Este enfoque alternativo al modelado generativo implica entrenar una red neuronal generadora. El generador toma ruido aleatorio como entrada y lo transforma en una muestra aleatoria de una distribución de datos. Por ejemplo, si el conjunto de datos consta de imágenes de cachorros, el objetivo es entrenar la red neuronal para generar imágenes aleatorias de cachorros con cualquier ruido de entrada.

Para entrenar la red del generador, se utiliza una red neuronal adicional llamada discriminador. El discriminador toma entradas de datos de entrenamiento reales o la salida de la red del generador y determina si la entrada es real o falsa. La red generadora tiene como objetivo producir muestras que puedan engañar al discriminador, mientras que el discriminador tiene como objetivo distinguir los datos reales de los datos falsos. Esto crea una relación de confrontación entre las dos redes.

El proceso de entrenamiento implica entrenar primero al discriminador, permitiéndole aprender la distribución de datos reales. Luego, el generador se entrena para producir salidas que se asemejan a datos reales y pueden engañar al discriminador. El entrenamiento alterna entre el discriminador y el generador para mejorar su desempeño.

La función de pérdida para la red del generador puede ser la opuesta a la pérdida del discriminador o una función de pérdida completamente diferente. Los gradientes se pueden propagar a través del discriminador hacia la red del generador para actualizar sus pesos en función de la función de pérdida. Esto permite que el generador aprenda a mejorar su función objetivo.

Se pueden usar diferentes funciones de pérdida para las redes generadoras y discriminadoras, especialmente cuando el objetivo es generar muestras para categorías específicas dentro de la distribución de datos. El generador se puede condicionar a información adicional, como etiquetas, para producir muestras que engañen al discriminador para que genere categorías específicas.

Al entrenar las redes antagónicas, existen posibles modos de falla a considerar. Un modo de falla es que la red del generador simplemente produzca muestras de la distribución de datos reales, lo que no estaría minimizando su función objetivo. El sobreajuste es otra preocupación, ya que el generador podría memorizar los datos reales en lugar de generar diversas muestras.

Para evitar el sobreajuste, es importante limitar la exposición del generador a los datos reales y asegurarse de que no tenga demasiadas oportunidades para memorizarlos. El conjunto de datos reales no se ingresa directamente en la red del generador. El generador aprende de los datos reales indirectamente cuando influye en los pesos en la red discriminadora, lo que luego afecta la pérdida devuelta al generador.

Si tiene éxito, una red de generadores capacitados puede generar muestras que se asemejan a los datos reales pero van más allá. Esto puede ser útil para el aumento de datos en el entrenamiento de otras redes neuronales y con fines artísticos. En la conferencia se discutieron ejemplos de redes antagónicas generativas que se utilizan para el arte y el aumento de datos.

Además, las redes de generadores capacitados pueden ser valiosas en varias aplicaciones más allá del aumento de datos y el arte. Una de esas aplicaciones es la generación de datos sintéticos para mejorar el entrenamiento de redes neuronales para resolver otros problemas importantes.

Al aprovechar la red del generador, podemos generar muestras de datos que se adaptan específicamente para mejorar el entrenamiento de las redes neuronales. Por ejemplo, si tenemos un problema de clasificación donde las clases están desequilibradas, podemos usar el generador para generar muestras adicionales para la clase subrepresentada. Esto puede ayudar a equilibrar el conjunto de datos y mejorar la capacidad del modelo para aprender la clase minoritaria.

Además, las redes antagónicas generativas tienen el potencial de generar muestras que exploran el espacio entre diferentes categorías o combinaciones de características. Por ejemplo, si proporcionamos al generador una combinación de características como 0,5 perros y 0,5 gatos, puede producir una muestra que combine características de perros y gatos. Esta capacidad de interpolar entre diferentes categorías o características abre posibilidades para productos creativos y novedosos.

Las redes antagónicas generativas han encontrado aplicaciones en varios dominios. En el campo de la visión por computadora, se han utilizado para generar imágenes realistas, mejorar la calidad de la imagen e incluso crear falsificaciones profundas. En el procesamiento del lenguaje natural, se han empleado para generar texto realista, traducir entre idiomas e incluso crear chatbots.

Es importante tener en cuenta que entrenar redes antagónicas generativas puede ser una tarea desafiante. Requiere un ajuste cuidadoso de los hiperparámetros, la selección de las funciones de pérdida apropiadas y la gestión del equilibrio entre las redes del generador y del discriminador. Además, garantizar la estabilidad del entrenamiento y evitar el colapso del modo, donde el generador solo produce un conjunto limitado de muestras, son consideraciones importantes.

A pesar de estos desafíos, las redes antagónicas generativas han demostrado capacidades impresionantes para generar muestras realistas y diversas. La investigación en curso continúa avanzando en el campo, explorando nuevas arquitecturas, funciones de pérdida y técnicas de capacitación para mejorar aún más el rendimiento y la confiabilidad de estas redes.

En conclusión, las redes antagónicas generativas ofrecen un marco poderoso para el modelado generativo. Al entrenar una red generadora y discriminadora de manera antagónica, podemos aprender a generar muestras que se asemejan a la distribución de datos real. Esto abre interesantes posibilidades en el aumento de datos, aplicaciones creativas y mejora de la capacitación para diversas tareas de aprendizaje automático.

 

AlphaGo y AlphaGo Zero (DL 24)



AlphaGo y AlphaGo Zero (DL 24)

AlphaGo y AlphaGo Zero son dos agentes de juego desarrollados por DeepMind, subsidiaria de Google. Estos sistemas combinan redes neuronales convolucionales profundas con aprendizaje de refuerzo de juego automático para lograr avances significativos en los algoritmos de juego. En 2016, AlphaGo se convirtió en la primera IA en derrotar a un campeón mundial humano. En este video, exploraremos cómo DeepMind creó estos sistemas y discutiremos los hallazgos clave de los trabajos de investigación publicados tanto en AlphaGo como en AlphaGo Zero.

Go es un juego para dos jugadores con reglas simples: los jugadores se turnan para colocar piedras blancas y negras en una intersección vacía del tablero. Las piedras o grupos de piedras rodeados por las piezas del oponente se capturan y retiran del tablero. El juego termina cuando ambos jugadores pasan, y la puntuación está determinada por la cantidad de piedras y las intersecciones vacías rodeadas.

Desarrollar un algoritmo de IA para ir requiere planificar múltiples movimientos por adelantado. Los motores de ajedrez como Deep Blue lograron esto considerando todas las secuencias de movimientos posibles y evaluando las posiciones del tablero resultantes. Sin embargo, evaluar la calidad de una posición en el tablero de go es más desafiante debido a la complejidad del juego y al mayor factor de ramificación. Restringir el espacio de búsqueda a movimientos prometedores y determinar la calidad de la posición del tablero fueron problemas importantes que AlphaGo abordó mediante el aprendizaje profundo.

AlphaGo resolvió estos problemas entrenando redes neuronales profundas para estimar el valor y la política de los estados de la junta. La red de valor predice la probabilidad de ganar de un estado dado, mientras que la red de políticas estima la calidad del movimiento. Estos modelos guían el algoritmo de planificación restringiendo la atención a movimientos prometedores y proporcionando estimaciones de calidad.

La arquitectura de AlphaGo y AlphaGo Zero es diferente. El AlphaGo original usaba redes separadas de políticas y valores, mientras que AlphaGo Zero empleaba una sola red con cabezales separados para salidas de políticas y valores. Ambas arquitecturas incorporan bloques residuales para extraer información importante sobre el estado de la placa. Los datos de entrenamiento para AlphaGo incluían juegos jugados por aficionados de alto nivel, mientras que AlphaGo Zero usaba datos únicamente de auto-juego.

Entrenar la red de valor es relativamente simple, usando representaciones de estado de tablero y etiquetas de ganancias/pérdidas. El entrenamiento de la red de políticas es más complejo, ya que requiere predecir la calidad del movimiento. AlphaGo Zero mejoró esto al capacitar a la red de políticas sobre las estimaciones de calidad de movimiento generadas por el algoritmo de búsqueda durante las implementaciones. Con el tiempo, la red de políticas aprende a estimar la calidad de la mudanza varios pasos hacia el futuro.

Tanto AlphaGo como AlphaGo Zero utilizan Monte Carlo Tree Search (MCTS) como algoritmo de planificación. MCTS realiza despliegues para recopilar información sobre los valores de la secuencia de movimiento y la incertidumbre. El algoritmo de búsqueda utiliza las redes de políticas y valores para evaluar los estados del tablero y estimar la calidad de los movimientos. A través del aprendizaje de refuerzo de juego automático, ambos sistemas mejoran las estimaciones de calidad de sus redes y se vuelven jugadores más fuertes.

En general, el desarrollo de AlphaGo y AlphaGo Zero representa un hito significativo en la IA de juegos go. Estos sistemas combinan el aprendizaje profundo con el aprendizaje por refuerzo y los algoritmos de planificación para lograr un rendimiento notable y un juego estratégico en el juego de go.

 

Gráficos de computación (DL 25)



Gráficos de computación (DL 25)

Esta lección se enfoca en gráficos computacionales, que son representaciones visuales del flujo de datos y la secuencia de cálculos en un programa. Si bien los gráficos computacionales se usan comúnmente para comprender la propagación hacia adelante y hacia atrás en las redes neuronales, se pueden aplicar a cualquier programa. Al hacer explícitas las operaciones implícitas en una red neuronal, los gráficos computacionales brindan una comprensión más clara de los cálculos involucrados.

En un gráfico computacional, cada nodo representa un cálculo, como multiplicar pesos por activaciones, sumar entradas ponderadas, calcular funciones de activación o calcular pérdidas. Las conexiones entre nodos representan dependencias entre variables en el programa. Al saber cómo tomar la derivada de cualquier nodo en el gráfico, podemos representar los pasos de propagación hacia adelante y hacia atrás en una red neuronal.

Para calcular las derivadas parciales necesarias para el descenso de gradiente en una red neuronal, propagamos las derivadas hacia atrás a través de la red utilizando la regla de la cadena. En cada paso, multiplicamos la derivada de la operación actual por la derivada del nodo anterior. Cuando un nodo tiene múltiples salidas, sumamos las derivadas de cada salida.

El gráfico computacional nos permite computar las salidas de una red neuronal y calcular las derivadas parciales de la pérdida con respecto a cada peso. Al trabajar hacia atrás a través de una clasificación topológica del gráfico y propagar las derivadas, podemos determinar las derivadas parciales para cualquier parámetro en la red.

La lección también proporciona ejemplos de gráficos computacionales, que ilustran cómo se calculan los valores intermedios y las derivadas. Al dividir funciones en cálculos más pequeños y asignar nombres a valores intermedios, podemos calcular tanto los resultados de las funciones como sus derivadas parciales usando el gráfico computacional.

Además, los gráficos computacionales pueden manejar no solo variables escalares sino también variables que representan vectores, matrices o tensores. Mediante el uso de variables que corresponden a objetos de dimensiones superiores, como vectores de activación y matrices de peso, podemos aplicar gráficos computacionales a redes neuronales densamente conectadas y otros cálculos complejos.

Para ampliar el gráfico computacional de una red neuronal densamente conectada, podemos introducir variables que correspondan a vectores de activaciones o matrices de pesos. Llamemos al vector de activaciones en toda esta capa de la red como "a1", indicado por un símbolo de sombrero de vector (^). De manera similar, podemos representar los pesos como una matriz W1.

En este gráfico ampliado, la entrada a cada nodo en la capa es el producto escalar del vector de activaciones (a1) y la matriz de pesos correspondiente (W1). Podemos representar esta operación como una multiplicación de matrices: a1 * W1.

Además, podemos introducir un vector de sesgo (b1) asociado a cada nodo de la capa. El término de sesgo se agrega elemento a elemento al producto escalar de activaciones y pesos antes de aplicar una función de activación.

A continuación, aplicamos una función de activación (como un sigmoide o ReLU) por elementos al vector resultante. Denotemos este vector como "a2" (con un símbolo de sombrero), que representa las activaciones de la siguiente capa.

Podemos repetir este proceso para capas posteriores en la red neuronal, conectando los nodos con bordes y propagando las activaciones y pesos a través del gráfico.

Para calcular el paso hacia adelante en este gráfico computacional ampliado, comenzaríamos con los valores de entrada (como las intensidades de píxel de una imagen) y los propagaríamos hacia adelante a través del gráfico, aplicando multiplicaciones de matrices, sumas de elementos y funciones de activación en cada nodo. hasta obtener el resultado final.

Cuando se trata de retropropagación, el objetivo es calcular las derivadas parciales de la función de pérdida con respecto a cada peso en la red. Al extender el gráfico computacional, podemos rastrear el flujo de gradientes hacia atrás a través de la red, lo que nos permite calcular de manera eficiente estas derivadas parciales usando la regla de la cadena.

Durante la retropropagación, comenzamos con la derivada de la función de pérdida con respecto a la salida final y usamos la regla de la cadena para propagarla hacia atrás a través del gráfico. En cada nodo, multiplicamos la derivada entrante por la derivada de la operación correspondiente (función de activación, multiplicación de matrices, etc.) con respecto a sus entradas.

Siguiendo este proceso, podemos calcular los gradientes para cada peso en la red, lo que nos permite actualizar los pesos usando algoritmos de optimización como el descenso de gradiente y sus variantes.

En resumen, extender el gráfico computacional para representar una red neuronal densamente conectada nos permite visualizar y calcular los pasos de propagación hacia adelante y hacia atrás. Permite el cálculo eficiente de los gradientes y facilita la optimización de la red a través de actualizaciones de peso.

 

Diferenciación Automática (DL 26)



Diferenciación Automática (DL 26)

La diferenciación automática (AD) en modo inverso es una técnica utilizada para calcular los gradientes de funciones. En Julia, la biblioteca Zygote proporciona capacidades de diferenciación automática. Cuando se trabaja en proyectos de aprendizaje automático a gran escala en Julia, se usa comúnmente la biblioteca de aprendizaje profundo Flux, construida sobre Zygote.

Zygote ofrece una función de "gradiente" que toma otra función y argumentos de entrada, y calcula automáticamente el gradiente en esos puntos. Por ejemplo, dada una función y la entrada (1, 2, -1), Zygote puede calcular el gradiente como (22, 4, -12). Esta característica es conveniente pero similar a lo que podría haber implementado en Project Zero.

El poder de la diferenciación automática radica en su capacidad para calcular gradientes para funciones más complejas. Por ejemplo, consideremos una función para calcular el n-ésimo elemento de la sucesión de Fibonacci. Usando la función de gradiente de Zygote, podemos calcular el gradiente de esta función de Fibonacci. En las entradas (0, 1, 12), la derivada parcial con respecto a "a" es 89 y con respecto a "b" es 144. Sin embargo, no hay derivada parcial con respecto a "n" ya que no es un continuo variable en esta función.

Para comprender cómo Zygote calcula el gradiente para tales funciones, podemos observar la diferenciación automática en modo inverso. En modo inverso AD, se crea un gráfico de cálculo a medida que se ejecuta la función, y las derivadas parciales se propagan hacia atrás a través del gráfico. Para lograr esto, los valores numéricos de las variables se reemplazan con objetos que almacenan tanto el valor como información adicional para el cálculo de derivadas.

En estos objetos se pueden almacenar dos tipos de información: (1) el valor de la variable y sus derivadas parciales con respecto a cada entrada (modo directo AD), o (2) el valor de la variable y las variables precedentes en el cálculo y la función utilizada para calcular su valor (modo inverso AD). Para el aprendizaje profundo, el modo inverso AD es más útil ya que escala mejor en la cantidad de salidas (generalmente una) en lugar de entradas (por ejemplo, parámetros de peso en una red neuronal).

Al crear estos objetos de diferenciación automática en modo inverso y construir un gráfico de cálculo durante la evaluación de la función, podemos realizar la propagación hacia atrás más adelante. Las variables intermedias almacenan los resultados de los cálculos y los bordes principales de los objetos indican las dependencias entre los nodos del gráfico. El gráfico computacional, incluidos los nodos de función y las dependencias, se construye implícitamente. Aplicando la regla de la cadena a cada nodo, las derivadas se pueden propagar hacia atrás a través del gráfico.

Esta colección de objetos de diferenciación automática en modo inverso, con sus valores, padres y funciones, se almacena normalmente en una cinta de degradado. Con este enfoque, incluso las funciones con cálculos intermedios más complejos se pueden diferenciar, siempre que se conozcan las derivadas de los componentes. Los valores de estas variables pueden ser escalares, vectores, matrices o tensores, lo que permite diferenciar funciones con varios tipos de datos.

En resumen, la diferenciación automática en modo inverso, respaldada por bibliotecas como Zygote en Julia, nos permite calcular gradientes para funciones de manera eficiente. Al construir un gráfico de computación y propagar derivadas a través de él, podemos automatizar el proceso de computación de gradientes, haciéndolo adecuado para el aprendizaje profundo y otras aplicaciones complejas.

 

Coursera Neural Networks for Machine Learning — Geoffrey Hinton - Clase 1.1 — ¿Por qué necesitamos el aprendizaje automático?



Lección 1.1 — ¿Por qué necesitamos el aprendizaje automático? [Redes neuronales para el aprendizaje automático]

¡Bienvenido al curso de Coursera sobre redes neuronales para el aprendizaje automático! En este curso, exploraremos el fascinante campo de las redes neuronales y sus aplicaciones en el aprendizaje automático. Antes de sumergirnos en las complejidades de los algoritmos de aprendizaje de redes neuronales, tomemos un momento para analizar la importancia del aprendizaje automático, sus usos y brindamos algunos ejemplos para ilustrar sus capacidades.

El aprendizaje automático es necesario para resolver problemas complejos que son difíciles de abordar con los enfoques de programación tradicionales. Por ejemplo, reconocer un objeto tridimensional desde diferentes puntos de vista, bajo diferentes condiciones de iluminación y en escenas abarrotadas es una tarea desafiante. La complejidad radica en el hecho de que no entendemos completamente cómo nuestros cerebros realizan dicho reconocimiento, lo que dificulta escribir programas explícitos para resolver estos problemas. Incluso si descubrimos el programa subyacente, podría ser extremadamente complicado implementarlo de manera efectiva.

Otro ejemplo es la detección de transacciones fraudulentas con tarjetas de crédito. Los sistemas tradicionales basados en reglas luchan por capturar las complejidades de los patrones de fraude, ya que requieren combinar numerosas reglas poco confiables que cambian constantemente con el tiempo. El aprendizaje automático ofrece un enfoque alternativo al aprovechar una gran cantidad de ejemplos que especifican salidas correctas para entradas dadas. Un algoritmo de aprendizaje procesa estos ejemplos para producir un programa que aborda la tarea de manera efectiva. El programa resultante puede verse diferente de los programas artesanales tradicionales, y puede contener millones de números ponderados. Sin embargo, si se implementa correctamente, puede generalizarse bien a nuevos casos y adaptarse a datos cambiantes al volver a capacitarse con información actualizada.

El aprendizaje automático sobresale en el reconocimiento de patrones, como objetos en escenas reales, expresiones faciales o palabras habladas. También es eficaz para identificar anomalías, como secuencias inusuales de transacciones con tarjetas de crédito o lecturas anormales de sensores en una planta de energía nuclear. Además, el aprendizaje automático es valioso en las tareas de predicción, como pronosticar los precios de las acciones o predecir las preferencias de los usuarios en función de sus elecciones pasadas y el comportamiento de los demás.

A lo largo de este curso, utilizaremos la base de datos MNIST de dígitos escritos a mano como ejemplo estándar para explicar muchos algoritmos de aprendizaje automático. Esta base de datos es ampliamente utilizada y permite una comparación efectiva de diferentes métodos. Al usar tales tareas, podemos comprender mejor los conceptos y principios subyacentes del aprendizaje automático.

Estos ejemplos solo rascan la superficie de las notables capacidades del aprendizaje automático y las redes neuronales. Con los avances tecnológicos y los recursos computacionales fácilmente disponibles, los modelos complejos de aprendizaje automático se pueden entrenar e implementar de manera eficiente. Estos modelos tienen el potencial de abordar tareas cada vez más complejas, ampliando los límites de lo que podemos lograr con el aprendizaje automático.

En este curso, profundizaremos en las complejidades de las redes neuronales, discutiendo sus arquitecturas, algoritmos de entrenamiento y técnicas prácticas de implementación. Al final del curso, tendrá una base sólida en redes neuronales y estará equipado para aplicarlas a una amplia gama de problemas.

Únase a nosotros en este emocionante viaje al mundo de las redes neuronales para el aprendizaje automático. ¡Prepárese para expandir su conocimiento, mejorar sus habilidades y desbloquear el potencial de esta tecnología transformadora!

 

Lección 1.2 — ¿Qué son las redes neuronales?



Clase 1.2 — ¿Qué son las redes neuronales? [Redes neuronales para el aprendizaje automático]

En este video, hablaré sobre las neuronas reales en el cerebro, que sirven como base para las redes neuronales artificiales que exploraremos en este curso. Aunque no nos centraremos mucho en las neuronas reales durante la mayor parte del curso, inicialmente quería ofrecer una breve descripción general.

Hay varias razones para estudiar cómo pueden computar las redes de neuronas. En primer lugar, nos ayuda a comprender el funcionamiento del cerebro. Si bien realizar experimentos directamente en el cerebro parece lógico, es un órgano complejo y delicado que no resiste bien la manipulación. Por lo tanto, las simulaciones por computadora son esenciales para comprender los hallazgos empíricos.

En segundo lugar, el estudio de las redes neuronales nos permite comprender el concepto de computación paralela, inspirado en la capacidad del cerebro para calcular a través de una vasta red de neuronas relativamente lentas. Comprender este estilo de cómputo paralelo podría conducir a avances en las computadoras paralelas, que difieren significativamente de los procesadores en serie convencionales. Es particularmente efectivo para tareas en las que el cerebro sobresale, como la visión, pero no es adecuado para tareas como la multiplicación.

La tercera razón, relevante para este curso, implica la resolución de problemas prácticos utilizando algoritmos de aprendizaje innovadores inspirados en el cerebro. Estos algoritmos pueden ser muy valiosos incluso si no imitan con precisión las operaciones del cerebro. Por lo tanto, aunque no profundizaremos en cómo funciona el cerebro, sirve como fuente de inspiración, lo que indica que grandes redes paralelas de neuronas pueden realizar cálculos complejos.

En este video, proporcionaré más información sobre el funcionamiento del cerebro. Una neurona cortical típica consta de un cuerpo celular, un axón para enviar mensajes a otras neuronas y un árbol dendrítico para recibir mensajes de otras neuronas. En el punto donde el axón de una neurona se conecta con el árbol dendrítico de otra neurona, encontramos una sinapsis. Cuando un pico de actividad viaja a lo largo del axón, inyecta carga en la neurona postsináptica.

Una neurona genera picos cuando la carga recibida en su árbol dendrítico despolariza una región llamada montículo axónico. Una vez despolarizada, la neurona transmite un pico a lo largo de su axón, que es esencialmente una onda de despolarización.

Las propias sinapsis tienen una estructura interesante. Contienen vesículas llenas de químicos transmisores. Cuando un pico alcanza el axón, desencadena la migración y liberación de estas vesículas en la hendidura sináptica. Las moléculas transmisoras se difunden a través de la hendidura sináptica y se unen a las moléculas receptoras en la membrana de la neurona postsináptica. Esta unión altera la forma de las moléculas, creando agujeros en la membrana que permiten que iones específicos entren o salgan de la neurona postsináptica, cambiando así su estado de despolarización.

Las sinapsis son relativamente lentas en comparación con la memoria de la computadora, pero poseen ventajas sobre la memoria de acceso aleatorio en las computadoras. Son pequeños, de bajo consumo y adaptables. La adaptabilidad es crucial ya que permite que las sinapsis cambien su fuerza utilizando señales disponibles localmente. Esta adaptabilidad facilita el aprendizaje y la capacidad de realizar cálculos complejos.

Entonces surge la pregunta: ¿Cómo deciden las sinapsis cómo cambiar su fuerza? ¿Cuáles son las reglas para su adaptación? Estas son consideraciones esenciales.

Para resumir, el cerebro funciona a través de neuronas que reciben información de otras neuronas. Solo una pequeña fracción de las neuronas recibe información de los receptores sensoriales. Las neuronas se comunican dentro de la corteza mediante la transmisión de picos de actividad. El efecto de una entrada en una neurona depende de su peso sináptico, que puede ser positivo o negativo. Estos pesos sinápticos se adaptan, lo que permite que toda la red aprenda y realice varios cálculos, como el reconocimiento de objetos, la comprensión del lenguaje, la planificación y el control motor.

El cerebro está compuesto por aproximadamente 10^11 neuronas, cada una con alrededor de 10^4 pesos sinápticos. En consecuencia, el cerebro contiene una inmensa cantidad de pesos sinápticos, muchos de los cuales contribuyen a los cálculos en curso en milisegundos. Esto proporciona al cerebro un ancho de banda superior para almacenar conocimiento en comparación con las estaciones de trabajo modernas.

Otro aspecto intrigante del cerebro es su modularidad. Diferentes regiones de la corteza terminan especializándose en diferentes funciones. Las entradas de los sentidos se dirigen genéticamente a regiones específicas, lo que influye en su funcionalidad final. El daño local al cerebro produce efectos específicos, como la pérdida de la comprensión del lenguaje o el reconocimiento de objetos. La flexibilidad del cerebro es evidente en el hecho de que las funciones pueden trasladarse a otras partes del cerebro en respuesta a un daño temprano. Esto sugiere que la corteza contiene un algoritmo de aprendizaje universal y flexible que puede adaptarse a tareas particulares en función de la experiencia.

En conclusión, el cerebro realiza cálculos paralelos rápidos una vez que ha aprendido, combinado con una notable flexibilidad. Es similar a un FPGA, donde se construye hardware paralelo estándar y la información posterior determina el cálculo paralelo específico que se realizará. Las computadoras convencionales logran flexibilidad a través de la programación secuencial, pero esto requiere procesos centrales rápidos para acceder a las líneas del programa y realizar cálculos secuenciales extensos.

 

Clase 1.3 — Algunos modelos simples de neuronas



Lección 1.3 — Algunos modelos simples de neuronas [Redes neuronales para el aprendizaje automático]

Describiré algunos modelos simples de neuronas, incluidas las neuronas lineales, las neuronas de umbral y modelos más complejos. Estos modelos son más simples que las neuronas reales, pero aun así nos permiten crear redes neuronales para el aprendizaje automático. Al comprender los sistemas complejos, necesitamos simplificarlos e idealizarlos para comprender su funcionamiento. Esto implica eliminar detalles no esenciales y aplicar matemáticas y analogías. Si bien es importante no pasar por alto las propiedades esenciales, puede ser valioso estudiar modelos que se sabe que son incorrectos pero que aún son útiles en la práctica. Por ejemplo, las redes neuronales a menudo usan neuronas que comunican valores reales en lugar de picos discretos, aunque las neuronas corticales reales se comportan de manera diferente.

El tipo de neurona más simple es la neurona lineal, que tiene limitaciones computacionales pero proporciona información sobre neuronas más complejas. Su salida está determinada por un sesgo y la suma ponderada de las actividades de entrada. Una gráfica del sesgo más las actividades ponderadas forma una línea recta. Por el contrario, las neuronas umbral binarias, introducidas por McCulloch y Pitts, envían un pico de actividad si la suma ponderada supera un umbral. Estos picos representan valores de verdad que las neuronas combinan para producir su propio valor de verdad. Si bien la lógica alguna vez se consideró el paradigma principal para comprender la mente, ahora se cree que el cerebro combina varias fuentes de evidencia poco confiables, lo que hace que la lógica sea menos adecuada.

Las neuronas umbral binarias se pueden describir mediante dos ecuaciones equivalentes. La entrada total es la suma de las actividades de entrada multiplicada por pesos, y la salida es uno si la entrada total está por encima del umbral. Alternativamente, la entrada total incluye un término de sesgo y la salida es uno si la entrada total es superior a cero. Una neurona lineal rectificada combina propiedades de neuronas lineales y neuronas umbral binarias. Calcula una suma ponderada lineal pero aplica una función no lineal para determinar la salida. La salida es cero si la suma está por debajo de cero e igual a la suma si está por encima de cero, lo que da como resultado una salida no lineal pero lineal por encima de cero.

Las neuronas sigmoideas se utilizan comúnmente en redes neuronales artificiales. Proporcionan una salida de valor real que es una función suave y acotada de la entrada total. A menudo se usa la función logística, donde la salida es uno dividido por uno más el exponente negativo de la entrada total. Para entradas positivas grandes, la salida es uno, mientras que para entradas negativas grandes, la salida es cero. La función sigmoidea tiene derivadas suaves, facilitando el aprendizaje en redes neuronales.

Las neuronas binarias estocásticas usan las mismas ecuaciones que las unidades logísticas, pero en lugar de generar la probabilidad como un número real, toman una decisión probabilística y generan uno o cero. La probabilidad representa la probabilidad de producir un pico. Si la entrada es muy positiva, probablemente producirán un uno, mientras que una entrada muy negativa probablemente dará como resultado un cero. Las unidades lineales rectificadas siguen un principio similar pero introducen aleatoriedad en la producción de picos. La salida de una unidad lineal rectificada representa la tasa de producción de picos, y los tiempos de pico reales están determinados por un proceso de Poisson aleatorio dentro de la unidad.

Estos comportamientos estocásticos en neuronas binarias y unidades lineales rectificadas introducen aleatoriedad intrínseca en la red neuronal. Si bien la tasa de producción de picos es determinista, el momento real de los picos se convierte en un proceso aleatorio. Esta aleatoriedad agrega variabilidad y estocasticidad al sistema.

Comprender estos diferentes modelos de neuronas nos proporciona una gama de capacidades computacionales. Las neuronas lineales están computacionalmente limitadas pero pueden ofrecer información sobre sistemas más complejos. Las neuronas de umbral binario permiten la toma de decisiones basadas en comparaciones de umbral. Las neuronas lineales rectificadas combinan linealidad y no linealidad, lo que permite la toma de decisiones y el procesamiento lineal simultáneamente. Las neuronas sigmoideas proporcionan salidas suaves y limitadas y se usan comúnmente en redes neuronales debido a su naturaleza diferenciable. Las neuronas binarias estocásticas y las unidades lineales rectificadas introducen aleatoriedad en el sistema, lo que permite la toma de decisiones probabilísticas y la introducción de variabilidad.

Al combinar diferentes tipos de neuronas en redes neuronales, podemos crear modelos poderosos para tareas de aprendizaje automático. Estas redes pueden aprender de los datos, adaptar sus pesos y sesgos y hacer predicciones o clasificaciones basadas en patrones aprendidos. Comprender los principios y comportamientos de estos modelos de neuronas nos ayuda a diseñar y entrenar redes neuronales efectivas.

Sin embargo, es esencial recordar que estos modelos de neuronas son abstracciones simplificadas de neuronas reales en el cerebro. El cerebro es un sistema increíblemente complejo y dinámico, y estos modelos sirven como aproximaciones para capturar ciertos aspectos del procesamiento neuronal. Si bien es posible que no capturen toda la complejidad de las neuronas reales, brindan herramientas útiles para construir modelos computacionales y lograr impresionantes capacidades de aprendizaje automático.

El estudio de diferentes modelos de neuronas, incluidas las neuronas lineales, las neuronas de umbral, las neuronas lineales rectificadas, las neuronas sigmoideas y las neuronas binarias estocásticas, nos permite comprender varias propiedades y comportamientos computacionales. Estos modelos forman la base para construir redes neuronales y nos permiten realizar diversas tareas de aprendizaje automático. Aunque simplificados, ofrecen información valiosa sobre el funcionamiento de los sistemas neuronales.

 

Lección 1.4 — Un ejemplo simple de aprendizaje



Lección 1.4 — Un ejemplo simple de aprendizaje [Redes neuronales para el aprendizaje automático]

En este ejemplo de aprendizaje automático, exploraremos una red neuronal simple que aprende a reconocer dígitos. A lo largo del proceso, serás testigo de la evolución de los pesos utilizando un algoritmo básico de aprendizaje.

Nuestro objetivo es entrenar una red sencilla para identificar formas escritas a mano. La red consta de dos capas: neuronas de entrada que representan intensidades de píxeles y neuronas de salida que representan clases. El objetivo es que la neurona de salida correspondiente a una forma específica se active cuando se presente esa forma.

Cada píxel activo "vota" por las formas de las que forma parte, y estos votos tienen distintas intensidades. La forma con más votos gana, suponiendo que haya competencia entre las unidades de salida. Profundizaremos en este aspecto competitivo en una conferencia posterior.

Para visualizar los pesos, necesitamos una pantalla que pueda acomodar miles de pesos. En lugar de escribir los pesos en conexiones individuales entre unidades de entrada y salida, crearemos pequeños mapas para cada unidad de salida. Estos mapas representan la fuerza de las conexiones de los píxeles de entrada mediante el uso de manchas en blanco y negro. El área de cada blob indica la magnitud, mientras que el color representa el signo de la conexión.

Inicialmente, a los pesos se les asignan pequeños valores aleatorios. Para mejorar los pesos, presentaremos la red con datos y la entrenaremos para ajustar los pesos en consecuencia. Cuando se muestra una imagen, incrementamos los pesos de los píxeles activos a la clase correcta. Sin embargo, para evitar que los pesos se vuelvan demasiado grandes, también disminuimos los pesos de los píxeles activos a la clase que adivina la red. Este enfoque de capacitación guía a la red para que tome las decisiones correctas en lugar de apegarse a sus tendencias iniciales.

Después de mostrarle a la red varios cientos de ejemplos de entrenamiento, observamos los pesos nuevamente. Comienzan a formar patrones regulares. Con más ejemplos de entrenamiento, los pesos continúan cambiando y finalmente se estabilizan. En este punto, los pesos parecen plantillas para las formas. Por ejemplo, los pesos que entran en la unidad "uno" sirven como plantilla para identificarlos. De manera similar, los pesos que entran en la unidad "nueve" se enfocan en discriminar entre nueves y sietes en función de la presencia o ausencia de características específicas.

Vale la pena señalar que este algoritmo de aprendizaje, debido a la simplicidad de la red, solo puede lograr una capacidad limitada para discriminar formas. Los pesos aprendidos funcionan efectivamente como plantillas, y la red determina el ganador en función de la superposición entre la plantilla y la tinta. Sin embargo, este enfoque se queda corto frente a la complejidad de las variaciones en los dígitos manuscritos. Para abordar esto, necesitamos extraer características y analizar sus arreglos, ya que la simple combinación de plantillas de formas completas no puede resolver el problema adecuadamente.

En resumen, el ejemplo demuestra el entrenamiento de una red neuronal simple para reconocer dígitos. Si bien los pesos de la red evolucionan y se asemejan a plantillas para las formas, las limitaciones de este enfoque se hacen evidentes cuando se enfrentan a las intrincadas variaciones en los dígitos escritos a mano.

 

Lección 1.5 — Tres tipos de aprendizaje



Lección 1.5 — Tres tipos de aprendizaje [Redes neuronales para el aprendizaje automático]

En este video, analizaré tres tipos principales de aprendizaje automático: aprendizaje supervisado, aprendizaje por refuerzo y aprendizaje no supervisado. El curso se centrará principalmente en el aprendizaje supervisado en la primera mitad y el aprendizaje no supervisado en la segunda mitad. Desafortunadamente, debido a limitaciones de tiempo, no cubriremos el aprendizaje por refuerzo.

El aprendizaje supervisado implica predecir una salida dado un vector de entrada. El objetivo es predecir con precisión un número real o una etiqueta de clase. La regresión trata con números reales, como predecir precios de acciones, mientras que la clasificación implica asignar etiquetas, como distinguir entre casos positivos y negativos o reconocer dígitos escritos a mano. El aprendizaje supervisado se basa en una clase de modelo, que es un conjunto de modelos candidatos representados por funciones que asignan entradas a salidas utilizando parámetros numéricos (W). Estos parámetros se ajustan para minimizar la discrepancia entre la salida prevista (Y) y la salida correcta (t).

El aprendizaje por refuerzo se centra en seleccionar acciones o secuencias de acción para maximizar las recompensas recibidas. Las acciones se eligen en función de las recompensas ocasionales y el objetivo es maximizar la suma esperada de recompensas futuras. Por lo general, se emplea un factor de descuento para priorizar las recompensas inmediatas sobre las distantes. El aprendizaje por refuerzo presenta desafíos debido a las recompensas retrasadas y la información limitada que transmiten las recompensas escalares.

El aprendizaje no supervisado, que se cubrirá ampliamente en la segunda mitad del curso, implica descubrir representaciones internas útiles de los datos de entrada. Durante muchos años, se pasó por alto el aprendizaje no supervisado en favor de la agrupación, ya que era un desafío definir los objetivos del aprendizaje no supervisado. Sin embargo, el aprendizaje no supervisado tiene varios propósitos, incluida la creación de representaciones internas beneficiosas para el aprendizaje supervisado o de refuerzo posterior. Su objetivo es generar representaciones compactas y de baja dimensión de entradas de alta dimensión, como imágenes, mediante la identificación de variedades subyacentes. El aprendizaje no supervisado también puede proporcionar representaciones económicas utilizando funciones aprendidas, donde las entradas se pueden expresar en códigos binarios o dispersos. Además, el aprendizaje no supervisado abarca el agrupamiento, que puede verse como un caso extremo de búsqueda de características dispersas, con una característica por grupo.

Este video cubre los tres tipos principales de aprendizaje automático: aprendizaje supervisado, aprendizaje por refuerzo y aprendizaje no supervisado. Mientras que el aprendizaje supervisado se enfoca en predecir resultados, el aprendizaje por refuerzo se centra en maximizar las recompensas a través de la selección de acciones. El aprendizaje no supervisado tiene como objetivo descubrir representaciones internas útiles, como representaciones de baja dimensión o características aprendidas, e incluye la identificación de grupos subyacentes.

 

Lección 2.1 — Tipos de arquitecturas de redes neuronales



Lección 2.1 — Tipos de arquitecturas de redes neuronales [Redes neuronales para el aprendizaje automático]

Las redes neuronales pueden tener diferentes tipos de arquitecturas, que se refieren a cómo se conectan las neuronas. La arquitectura más común en aplicaciones prácticas es una red neuronal de avance, donde la información fluye desde las unidades de entrada a través de capas ocultas hasta las unidades de salida. Por otro lado, las redes neuronales recurrentes son más interesantes ya que permiten que la información fluya en ciclos, lo que permite la memoria a largo plazo y la dinámica compleja. Entrenar redes recurrentes es un desafío debido a su complejidad, pero el progreso reciente las ha hecho más entrenables y capaces de realizar tareas impresionantes.

Otro tipo de arquitectura son las redes conectadas simétricamente, donde los pesos entre unidades son los mismos en ambas direcciones. Estas redes siguen una función de energía y son más fáciles de analizar en comparación con las redes recurrentes. Sin embargo, sus capacidades están más restringidas y no pueden modelar ciclos.

En las redes neuronales de avance, cada capa calcula transformaciones entre la entrada y la salida, lo que da como resultado nuevas representaciones en cada capa. Las funciones no lineales se aplican a las actividades de las neuronas en cada capa para capturar la similitud y la diferencia entre las entradas. Por el contrario, las redes neuronales recurrentes utilizan ciclos dirigidos en su gráfico de conexión, lo que permite una dinámica compleja y un modelado de datos secuenciales. Se utilizan los mismos pesos en cada paso de tiempo y los estados de las unidades ocultas determinan los estados del siguiente paso de tiempo.

Las redes neuronales recurrentes tienen la capacidad de recordar información durante mucho tiempo en sus estados ocultos, pero entrenarlas para utilizar esta capacidad es un desafío. Sin embargo, los algoritmos recientes han hecho un progreso significativo en el entrenamiento de redes recurrentes. Estas redes se pueden usar para tareas como predecir el siguiente carácter en una secuencia, generar texto o modelar datos secuenciales.

En general, las arquitecturas de redes neuronales pueden variar en sus conexiones y capacidades, desde redes de avance para cálculos sencillos hasta redes recurrentes para memoria y dinámicas complejas.

Razón de la queja: