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

 

¿Qué puede calcular una sola neurona? (DL 03)



¿Qué puede calcular una sola neurona? (DL 03)

Las redes neuronales consisten en numerosos nodos con una gran cantidad de conexiones. Para comprenderlos mejor, concentrémonos en una neurona individual y exploremos sus capacidades, los tipos de modelos que puede representar y cómo se pueden entrenar estos modelos.

Un nodo en una red neuronal recibe entradas y realiza un cálculo simple para generar una salida numérica. Este cálculo implica dos etapas: primero, las entradas se multiplican por los pesos correspondientes y se suman; luego, la suma de las entradas ponderadas se pasa a través de una función de activación para producir la salida.

Matemáticamente, la salida se obtiene aplicando una función de activación (denotada como f) a la suma de las entradas ponderadas. Por lo tanto, la salida es el resultado de aplicar la función de activación a la suma de cada peso multiplicado por su entrada correspondiente, más un término de sesgo.

El sesgo permite que la suma sea distinta de cero incluso si todas las entradas son cero. Podemos pensar en el sesgo como otro peso y representarlo con una flecha adicional que ingresa al nodo. Cada neurona realiza una suma ponderada sobre sus entradas, pero diferentes neuronas pueden tener diferentes funciones de activación.

Para un modelo de una sola neurona, dos funciones de activación notables son las funciones lineales y escalonadas. La función de activación lineal permite que la neurona realice la regresión, mientras que la función de paso le permite realizar la clasificación.

En el caso de una neurona con una sola entrada, la suma ponderada de las entradas se calcula multiplicando la entrada por el peso y sumando el sesgo. La función de activación lineal elegida, y = x, nos permite expresar cualquier función lineal de x1 usando los parámetros de peso (w1) y sesgo (b). Así, esta neurona puede calcular cualquier función lineal con una entrada unidimensional (x1) y una salida unidimensional (y).

Si la neurona tiene más entradas, el mapeo se extiende a entradas multidimensionales pero sigue siendo una función lineal adecuada para la regresión. Sin embargo, visualizar la función se vuelve un desafío a medida que aumenta la dimensión de entrada.

En el caso de una neurona con dos entradas, la función de paso se utiliza como activación. La suma ponderada de las entradas aún se calcula y la activación pasa de cero a uno cuando la suma se vuelve positiva. La activación se puede describir utilizando una función por partes, y el límite de decisión entre las entradas que dan como resultado una salida de 0 o 1 es donde la suma ponderada de las entradas es igual a cero. Esta configuración es adecuada para tareas de clasificación, donde las entradas se etiquetan como 0 o 1 según la salida de la neurona.

Para realizar una regresión o clasificación utilizando neuronas individuales, necesitamos un conjunto de datos que consta de pares de entrada-salida. La función de activación elegida depende de si la salida es binaria (0 o 1) o continua. La dimensionalidad de los ejemplos de entrada determina el número de entradas y pesos en el modelo de neurona única.

Entrenar una red neuronal o una sola neurona implica definir una función de pérdida que cuantifique la desviación del modelo de los datos. Para las tareas de regresión, se puede usar la suma de los errores al cuadrado, mientras que las tareas de clasificación con salidas binarias pueden emplear otras funciones de pérdida adecuadas.

El objetivo del entrenamiento es actualizar los parámetros (pesos y sesgos) de una manera que minimice la pérdida y mejore la precisión del modelo. El descenso de gradiente es una técnica de optimización común utilizada para actualizar los parámetros y reducir la pérdida.

En el siguiente video, profundizaremos en el concepto de descenso de gradiente y cómo facilita la actualización de parámetros para mejorar el rendimiento del modelo.

 

Cómo entrenar tu neurona (DL 04)



Cómo entrenar tu neurona (DL 04)

En nuestro video anterior, exploramos el cálculo de una sola neurona. Aprendimos que una neurona calcula tomando una suma ponderada de entradas, agregando un sesgo y aplicando una función de activación. El uso de una función de paso para la activación nos da un clasificador binario, mientras que una función lineal nos da un regresor.

También analizamos la medición de la pérdida de un modelo en su conjunto de datos mediante la suma de los errores cuadráticos y el entrenamiento del modelo mediante el gradiente de la función de pérdida. La función de pérdida depende de los parámetros del modelo, a saber, los pesos y el sesgo. El error cuadrático medio se usa comúnmente como una función de pérdida en los cálculos.

Para comprender cómo la función de pérdida depende de los parámetros y cómo podemos modificarlos para reducir la pérdida, calculamos la pérdida en un pequeño conjunto de datos de regresión. Al sumar las diferencias al cuadrado entre las salidas correctas y predichas, obtuvimos el valor de pérdida.

A continuación, nos enfocamos en encontrar el gradiente de la función de pérdida. Derivamos las derivadas parciales de la pérdida con respecto a cada parámetro. Estas derivadas parciales forman el gradiente, que nos guía para disminuir la pérdida. Al actualizar los parámetros en la dirección opuesta del gradiente, podemos minimizar la pérdida y mejorar la representación del conjunto de datos en nuestro modelo.

Visualizamos la función de pérdida como una superficie en el espacio de parámetros y discutimos cómo el gradiente indica la dirección del aumento más pronunciado de la pérdida. Al dar pequeños pasos en la dirección opuesta del gradiente, podemos disminuir iterativamente la pérdida y refinar nuestro modelo.

Para las tareas de clasificación, encontramos un desafío al tomar la derivada de la activación de la función de paso. Para superar esto, reemplazamos la función de paso con una aproximación suave llamada función sigmoidea. Explicamos el comportamiento de la función sigmoidea y su capacidad para producir salidas probabilísticas entre 0 y 1.

Aplicamos la función sigmoidea a un ejemplo de clasificación y demostramos cómo calcular la pérdida y el gradiente usando la nueva activación. El proceso de actualización de los parámetros y mejora del modelo sigue siendo el mismo que en la regresión.

Finalmente, enfatizamos que los conceptos discutidos se pueden extender a dimensiones más altas al aplicar las mismas fórmulas a múltiples pesos y puntos de datos. Los principios generales de calcular la pérdida, calcular el gradiente y actualizar los parámetros se mantienen independientemente de la dimensionalidad de la entrada.

En general, comprender el cálculo de una sola neurona, la función de pérdida y el gradiente proporciona la base para entrenar redes neuronales y mejorar su rendimiento.

 

La tubería de análisis de datos (DL 05)



La tubería de análisis de datos (DL 05)

En nuestra clase de aprendizaje profundo, profundizaremos en el estudio de las redes neuronales. Sin embargo, es importante recordar que una red neuronal, o cualquier modelo de aprendizaje automático, es solo una parte de un sistema más grande. Antes de que los datos puedan ingresar a una red neuronal, deben recopilarse y procesarse en un formato que la red pueda entender. De manera similar, los resultados de una red neuronal a menudo requieren un procesamiento posterior o un análisis adicional.

A lo largo del semestre, será útil tener en cuenta la metáfora de una canalización de análisis de datos. Esta analogía enfatiza que nuestro objetivo en el aprendizaje automático es transformar las observaciones del mundo en predicciones sobre el mundo, y la red neuronal es solo un paso en este proceso. La canalización nos recuerda que debemos considerar las etapas por las que pasan nuestros datos y cómo cada etapa contribuye a la siguiente.

Diferentes problemas requieren diferentes etapas en la tubería. Si bien los conjuntos de datos estandarizados o simulados pueden permitirnos omitir ciertas etapas, las aplicaciones del aprendizaje profundo en el mundo real requieren que consideremos los aspectos prácticos del análisis de datos.

Analicemos algunos aspectos importantes de las canalizaciones de análisis de datos con más detalle. La primera etapa es la recopilación de datos. Aunque en algunos casos se pueden utilizar conjuntos de datos preexistentes, si queremos resolver un problema nuevo con aprendizaje profundo, debemos determinar qué datos son adecuados para entrenar nuestro modelo. Al recopilar datos, debemos asegurarnos de tener una cantidad suficiente, considerando que los éxitos recientes del aprendizaje profundo se han basado en grandes conjuntos de datos. Sin embargo, también existe el exceso de datos, especialmente cuando los recursos computacionales son limitados. En ciertos casos, trabajar con una cantidad limitada de datos puede resultar beneficioso, especialmente durante la exploración y el descubrimiento de problemas. Es crucial asegurarse de que el conjunto de datos que usamos para el entrenamiento sea representativo del problema que pretendemos resolver. Esto implica considerar factores como la representación de todas las clases deseadas en una tarea de clasificación y no pasar por alto valores atípicos importantes que el modelo debería reconocer.

Otro desafío es identificar los sesgos sistemáticos en los conjuntos de datos. Los sesgos pueden surgir de varias maneras, como una representación excesiva de imágenes tomadas en días soleados, lo que genera dificultades para un clasificador de imágenes en condiciones nubladas. Los sesgos también pueden afectar las predicciones relacionadas con la salud o la educación, atribuyendo factores individuales a estructuras sociales más amplias. Es esencial tener en cuenta los posibles sesgos durante la recopilación de datos. Sin embargo, abordar y corregir los sesgos es un problema complejo que requiere una investigación continua de aprendizaje profundo.

Después de recopilar datos, a menudo necesitamos limpiarlos antes de aplicar el aprendizaje automático u otras técnicas de procesamiento. Este paso implica manejar los datos faltantes, decidir qué dimensiones de los datos son relevantes y tratar con diferentes dimensionalidades en los ejemplos. El etiquetado adecuado de los datos es crucial para el aprendizaje supervisado. Obtener etiquetas apropiadas puede ser un desafío, particularmente cuando se transcribe lenguaje de señas o se trata de inconsistencias de voz a texto. Las etiquetas deben representar con precisión los aspectos de los datos que queremos que aprenda nuestro modelo.

A continuación, debemos transformar los datos en un formato numérico adecuado para entrenar nuestra red neuronal o modelo de aprendizaje automático. Las redes neuronales esperan entradas numéricas en forma de vectores o matrices. El proceso de codificación numérica varía en dificultad según el problema. Por ejemplo, el procesamiento de datos de imágenes es relativamente sencillo debido a la representación basada en píxeles que ya utilizan las computadoras. Sin embargo, el manejo de datos de texto codificados en formato ASCII requiere representaciones alternativas. Transformar la representación de datos o incluso la dimensionalidad se vuelve cada vez más importante a medida que los problemas se vuelven más complejos.

Además, puede ser beneficioso normalizar los datos, especialmente si las redes neuronales tienden a generar valores en el rango de cero a uno. La normalización implica escalar el rango de valores de datos, asegurando que las entradas a la red neuronal estén más juntas. Después de la salida de la red neuronal, es posible que debamos realizar pasos de posprocesamiento. Esto incluye decodificar la salida de la red en el formato de predicción deseado, transmitir confianza en la predicción y considerar la aplicación o el algoritmo que usará las predicciones del modelo.

Una vez que hayamos procesado los datos y entrenado nuestra red neuronal, podemos pasar a la etapa de evaluación y ajuste. Aquí es donde evaluamos el rendimiento de nuestro modelo y realizamos mejoras. La evaluación implica el uso del conjunto de prueba que reservamos anteriormente. Al aplicar la red neuronal entrenada a estos datos invisibles, podemos medir qué tan bien se generaliza a nuevos ejemplos. Por lo general, usamos métricas como exactitud, precisión, recuperación y puntaje F1 para evaluar el rendimiento de nuestro modelo. Estas métricas brindan información sobre la eficacia con la que la red neuronal realiza predicciones.

En función de los resultados de la evaluación, podemos identificar áreas en las que el modelo puede tener un rendimiento inferior o presentar limitaciones. Esta información nos guía para hacer los ajustes y mejoras necesarios. Podemos iterar sobre la arquitectura del modelo, los hiperparámetros o incluso recopilar datos adicionales si es necesario. El objetivo es refinar el rendimiento del modelo y garantizar que logre la precisión y confiabilidad deseadas.

Durante el proceso de ajuste, experimentamos con diferentes configuraciones y ajustes para optimizar el rendimiento del modelo. Esto incluye el ajuste de hiperparámetros como la tasa de aprendizaje, el tamaño del lote y las técnicas de regularización. A través de la exploración y la experimentación sistemáticas, nuestro objetivo es encontrar la mejor combinación de configuraciones que maximice la eficacia de la red neuronal.

Además de afinar el modelo en sí, también consideramos el contexto más amplio de su aplicación. Tomamos en cuenta el problema específico que estamos tratando de resolver y las implicaciones del mundo real de las predicciones del modelo. Esto implica examinar los aspectos sociales, éticos y legales de implementar el modelo en la práctica. Es crucial asegurarse de que el modelo sea justo, imparcial y alineado con los valores y requisitos del dominio del problema.

Como profesionales del aprendizaje profundo, nuestra responsabilidad se extiende más allá del desarrollo de modelos precisos. Debemos analizar críticamente e interpretar los resultados, teniendo en cuenta cualquier posible sesgo o limitación. Es necesario revisar y reevaluar periódicamente el rendimiento del modelo para mantener su eficacia a lo largo del tiempo.

Estudiar redes neuronales en una clase de aprendizaje profundo implica comprender que son parte de un sistema más grande. La tubería de análisis de datos, desde la recopilación de datos hasta el preprocesamiento, la capacitación y la evaluación, abarca múltiples etapas que requieren una consideración cuidadosa. Al tener en cuenta todo el proceso y mejorar continuamente nuestros modelos, podemos aprovechar de manera efectiva el poder del aprendizaje profundo para hacer predicciones precisas y resolver problemas del mundo real.

 

Validación fuera de muestra (DL 06)



Validación fuera de muestra (DL 06)

En el aprendizaje automático, evaluar un modelo implica hacer nuevas predicciones y probarlas con datos no vistos. En esta discusión, exploraremos cómo usar de manera efectiva nuestros datos para validar y mejorar nuestros modelos de aprendizaje automático.

El proceso de selección de modelos comienza con la identificación de las opciones disponibles para resolver un problema dado. Esto nos lleva al concepto de espacio de hipótesis de un modelo, que define los tipos de funciones que el modelo puede representar. El espacio de hipótesis está limitado por factores como la representación de entrada elegida y el tipo de salida requerido.

Una vez que hemos elegido un modelo específico o un algoritmo de aprendizaje automático, hay varios aspectos del modelo que se pueden ajustar. Esto incluye ajustar los parámetros del modelo, como pesos y sesgos, que se entrenan utilizando los datos. Además, otros aspectos, como la tasa de aprendizaje o el número de iteraciones, pueden considerarse como hiperparámetros que influyen en el rendimiento del modelo.

Para explorar y probar diferentes opciones de manera efectiva, confiamos en la validación experimental. Esto implica dividir nuestro conjunto de datos en conjuntos de entrenamiento y de prueba. El conjunto de entrenamiento se usa para entrenar el modelo, mientras que el conjunto de prueba se usa para evaluar su rendimiento en datos no vistos. Al comparar diferentes modelos o hiperparámetros en el conjunto de prueba, podemos determinar cuáles son más efectivos para generalizar a nuevos datos.

La generalización es un aspecto crítico del aprendizaje automático, ya que nuestro objetivo es desarrollar modelos que puedan hacer predicciones precisas sobre datos nuevos e invisibles. El sobreajuste, donde un modelo se vuelve demasiado específico para los datos de entrenamiento, es un desafío común para lograr una buena generalización. Al separar una parte de los datos para la validación fuera de la muestra, podemos evaluar si un modelo se está sobreajustando o generalizando con éxito.

Al explorar múltiples hiperparámetros, podemos variar sistemáticamente sus valores o tomar muestras aleatoriamente de un rango plausible. La aleatorización nos permite explorar una gama más amplia de valores de manera eficiente. Sin embargo, si la experimentación extensiva lleva a sobreajustar el conjunto de prueba, puede ser necesaria una mayor separación de los datos en conjuntos de entrenamiento, validación y prueba o el uso de validación cruzada.

La validación cruzada implica dividir los datos en múltiples subconjuntos y entrenar y probar iterativamente el modelo en diferentes combinaciones de estos subconjuntos. Este enfoque proporciona una estimación más robusta del rendimiento y la capacidad de generalización del modelo.

La idea clave en el aprendizaje automático es validar experimentalmente nuestros modelos separando los datos de entrenamiento y prueba. Esto nos permite evaluar su rendimiento en ejemplos no vistos y tomar decisiones informadas sobre la selección de modelos y el ajuste de hiperparámetros.

 

Redes neuronales de avance (DL 07)



Redes neuronales de avance (DL 07)

Las redes neuronales, a diferencia de las neuronas individuales, constan de múltiples capas y realizan cálculos a través de nodos. Cada nodo calcula la suma ponderada de las entradas y aplica una función de activación. En una red neuronal, la entrada de un nodo puede provenir de activaciones de nodos anteriores y su activación calculada se puede pasar a nodos posteriores.

Por ejemplo, la neurona 8 en una red recibe entradas de las neuronas 5, 6 y 7. La suma ponderada de las entradas realizadas por la neurona 8 es la suma de las activaciones de esas neuronas multiplicada por los pesos correspondientes, más el sesgo. A continuación, se aplica la función de activación a la suma ponderada. La salida de la neurona 8 se usa como entrada para los nodos 11 y 12. Se pueden usar diferentes funciones de activación en una red neuronal, como la tangente hiperbólica y la unidad lineal rectificadora (ReLU).

Para realizar cálculos utilizando una red neuronal para hacer predicciones, comenzamos configurando las activaciones de los nodos de la capa de entrada en función de los datos de entrada. Los nodos de la capa de entrada simplemente almacenan los valores del vector de entrada. El tamaño de las capas de entrada y salida depende de la dimensionalidad de los datos y la predicción deseada. Las neuronas ocultas en la red, organizadas en capas, realizan cálculos entre las entradas y salidas. Al calcular las activaciones para cada capa, podemos pasar las entradas a la siguiente capa, haciendo referencia a las activaciones anteriores. Estas activaciones también son necesarias para el descenso de pendientes durante las actualizaciones de peso. La presencia de capas ocultas en una red neuronal proporciona la capacidad de utilizar funciones de activación no lineales. Las activaciones lineales no ofrecen ninguna ventaja en las redes multicapa. Las funciones de activación no lineales, como la función sigmoidea, permiten la representación de varias funciones.

Las neuronas que representan operaciones lógicas como AND, OR y NOT se pueden construir utilizando clasificadores de funciones escalonadas. Al aproximar estas operaciones lógicas mediante activaciones sigmoideas, una red neuronal puede representar cualquier función booleana. Para entrenar una red neuronal, usamos gradiente descendente para actualizar los pesos y sesgos. Los parámetros de la red incluyen todos los pesos y sesgos en toda la red. La función de pérdida en una red con múltiples neuronas de salida puede ser el error cuadrático medio sumado sobre todas las neuronas de salida. El objetivo es reducir la pérdida actualizando los parámetros de forma iterativa.

El descenso de gradiente se realiza calculando los gradientes de pérdida con respecto a los parámetros, dando pasos en la dirección opuesta de los gradientes para minimizar la pérdida. Este proceso se conoce como retropropagación y permite que la red aprenda y mejore sus predicciones. En el siguiente video, profundizaremos en los detalles del algoritmo de retropropagación, que se utiliza para realizar actualizaciones de gradiente descendente en una red neuronal. La retropropagación permite el cálculo eficiente de los gradientes de pérdida con respecto a los parámetros de la red.

El proceso comienza calculando el gradiente de la función de pérdida con respecto a las activaciones de salida. Este gradiente representa la sensibilidad de la pérdida a cambios en las activaciones de salida. Se puede obtener aplicando la regla de la cadena, ya que la pérdida depende de las activaciones de salida a través de la función de activación y la diferencia al cuadrado con los valores objetivo. Una vez que se calcula el gradiente de la pérdida con respecto a las activaciones de salida, se propaga hacia atrás a través de la red. En cada capa, los gradientes se multiplican por la derivada de la función de activación con respecto a la suma ponderada de las entradas. Esta derivada captura la sensibilidad de la activación a cambios en la suma ponderada.

Al propagar los gradientes hacia atrás, podemos calcular los gradientes de pérdida con respecto a las activaciones de la capa anterior. Estos gradientes indican cuánto contribuye a la pérdida cada activación en la capa anterior. Usando los gradientes de pérdida con respecto a las activaciones, podemos calcular los gradientes de pérdida con respecto a los pesos y sesgos en cada capa. Estos gradientes se obtienen multiplicando la activación de la capa anterior por el correspondiente gradiente de la función de activación. Finalmente, con los gradientes de pérdida con respecto a los parámetros, podemos actualizar los pesos y sesgos usando el algoritmo de descenso de gradiente. Al dar pasos en la dirección opuesta a los gradientes, optimizamos gradualmente los parámetros de la red para minimizar la pérdida.

Este proceso iterativo de propagación hacia adelante, propagación hacia atrás y actualizaciones de parámetros se repite durante un cierto número de épocas o hasta que la pérdida converge a un valor satisfactorio. A través de este proceso de entrenamiento, la red neuronal aprende a hacer mejores predicciones ajustando sus pesos y sesgos en función de los datos de entrenamiento proporcionados.

Las redes neuronales utilizan múltiples capas y funciones de activación no lineales para realizar cálculos complejos y hacer predicciones. Al emplear el algoritmo de retropropagación y el descenso de gradiente, las redes neuronales pueden aprender de los datos y optimizar sus parámetros para mejorar sus capacidades predictivas.

 

Propagación inversa de redes neuronales (DL 08)



Propagación inversa de redes neuronales (DL 08)

En este video, derivaremos el algoritmo de retropropagación, que se usa para entrenar una red neuronal a través de un paso de descenso de gradiente estocástico. El algoritmo consta de tres pasos principales.

Primero, realizamos un pase feedforward para hacer predicciones sobre un punto de datos. Estas predicciones determinan la pérdida, que representa el error entre las salidas previstas y las salidas reales. A continuación, realizamos un paso hacia atrás para calcular las derivadas parciales de la pérdida. Calculamos una cantidad llamada "delta" para cada neurona en las capas de salida y ocultas. Delta representa la derivada parcial de la pérdida con respecto a la suma ponderada de entradas en esa neurona. Al aplicar la regla de la cadena, podemos calcular delta para cada neurona considerando su impacto en la pérdida.

Para calcular delta para las neuronas de la capa de salida, usamos la derivada de la función de activación y la diferencia entre el objetivo y la activación. Este cálculo considera la relación entre la pérdida y la suma ponderada de las entradas. Para las neuronas de la capa oculta, consideramos su impacto en las neuronas de la siguiente capa y calculamos recursivamente delta sumando las contribuciones de los nodos de la siguiente capa, multiplicados por los pesos y la derivada de activación. Una vez que hemos calculado los deltas para todas las neuronas, podemos usarlos para calcular las derivadas parciales de los pesos y sesgos.

La derivada parcial para cada peso es el producto del delta correspondiente y la activación de la neurona de la capa anterior. De manera similar, la derivada parcial de cada sesgo es igual a su delta correspondiente.

Para realizar el descenso de gradiente, promediamos las derivadas parciales sobre un subconjunto de los puntos de datos, llamado lote. Este enfoque se conoce como descenso de gradiente estocástico. Al actualizar los pesos y sesgos con las derivadas parciales promedio multiplicadas por una tasa de aprendizaje, movemos los parámetros en la dirección que minimiza la pérdida.

En la práctica, en lugar de calcular los deltas y las derivadas parciales para cada punto de datos, a menudo usamos el descenso de gradiente estocástico con lotes aleatorios. Muestreamos aleatoriamente un subconjunto de los datos, calculamos la pérdida promedio y su gradiente en ese subconjunto y realizamos las actualizaciones de parámetros en consecuencia. Esto acelera el proceso de entrenamiento, especialmente para grandes conjuntos de datos.

El algoritmo de retropropagación combina pases hacia adelante y hacia atrás para calcular los deltas y las derivadas parciales, que luego se utilizan para las actualizaciones de descenso de gradiente estocástico. Al actualizar iterativamente los parámetros, la red neuronal aprende a minimizar la pérdida y mejorar sus predicciones.

 

Mejor activación y pérdida para la clasificación: Softmax y Crossentropía categórica (DL 09)



Mejor activación y pérdida para la clasificación: Softmax y Crossentropía categórica (DL 09)

Cuando se realiza una clasificación multiclase utilizando una red neuronal con neuronas sigmoideas, surgen ciertas limitaciones. Anteriormente, cuando se trataba de solo dos clases, una sola neurona podía generar 0 o 1. Sin embargo, cuando se involucran varias etiquetas, como clasificar dígitos escritos a mano del 0 al 9, se necesita una representación diferente.

Un enfoque común es codificar las etiquetas como un vector activo, donde cada etiqueta tiene su propia dimensión y solo se activa una dimensión a la vez. Por ejemplo, un vector de cinco dimensiones puede indicar cinco etiquetas posibles, con la dimensión cuatro activada para representar la cuarta etiqueta. Si bien una capa de salida basada en neuronas sigmoideas puede producir potencialmente este tipo de salida, existen problemas prácticos.

El primer problema es que la capa sigmoidea puede generar valores relativamente grandes para varias etiquetas, lo que dificulta la interpretación de la predicción. Idealmente, nos gustaría que la capa de salida produzca ceros y unos o algo que refleje la confianza en diferentes etiquetas posibles. El segundo problema surge durante el entrenamiento de la capa de salida sigmoidea. Cuando el objetivo es un vector caliente, se usa el descenso de gradiente para empujar la activación hacia uno para la etiqueta correcta y hacia cero para las otras etiquetas. Sin embargo, debido a la naturaleza de la función sigmoidea, las neuronas con errores más grandes pueden tener deltas más pequeños, lo que dificulta corregir predicciones erróneas con confianza.

Un problema similar, conocido como el problema del gradiente de fuga, también ocurre cuando se usan activaciones sigmoideas para neuronas ocultas. Sin embargo, en este video, nos enfocamos en una combinación alternativa de activaciones de salida y función de pérdida para abordar estos problemas. En lugar de activaciones sigmoideas, presentamos activaciones softmax para la capa de salida. Las activaciones de Softmax se calculan en toda la capa, magnificando las diferencias entre las entradas y normalizando las activaciones para que sumen una. Esto da como resultado resultados que son más interpretables como predicciones y pueden verse como la confianza de la red en cada etiqueta posible.

Para usar de manera efectiva las activaciones softmax, las emparejamos con la función categórica de pérdida de entropía cruzada. La pérdida de entropía cruzada calcula el logaritmo negativo de la activación de la neurona objetivo, que se simplifica al logaritmo de la activación cuando se utilizan vectores one-hot. Esta combinación permite actualizaciones efectivas de descenso de gradiente. Para calcular los deltas para la capa de salida, derivamos las derivadas parciales de la pérdida con respecto a las activaciones. Para la neurona objetivo, la derivada es -1 dividida por la activación. Para las otras neuronas, las derivadas son cero. Debido a la interdependencia de las activaciones de softmax, aunque solo la neurona objetivo tiene una derivada distinta de cero, se obtienen deltas distintos de cero para todas las entradas.

Al usar estas fórmulas, podemos calcular los deltas tanto para la neurona objetivo como para las otras neuronas en la capa de salida. El delta para la neurona objetivo es sencillo de calcular, ya que es la activación menos uno. Los deltas para las otras neuronas se simplifican a la propia activación negativa.

Con esta combinación de activaciones softmax y pérdida de entropía cruzada categórica, logramos resultados significativos para problemas de clasificación y obtenemos gradientes que impulsan de manera eficiente los resultados hacia predicciones correctas. El uso de activaciones softmax y la pérdida de entropía cruzada categórica nos brinda un marco poderoso para la clasificación de clases múltiples. Profundicemos en cómo estos componentes funcionan juntos para permitir el entrenamiento efectivo de las redes neuronales.

Una vez que hemos calculado los deltas para la capa de salida, estos deltas sirven como punto de partida para la retropropagación, donde propagamos los gradientes de error hacia atrás a través de la red para actualizar los pesos. Para actualizar los pesos que conectan la capa de salida con la capa anterior, podemos usar los valores delta y aplicar el algoritmo de descenso de gradiente. La actualización del peso se determina multiplicando el delta de cada neurona de salida por la activación de entrada del peso correspondiente y ajustando el peso por una tasa de aprendizaje.

Al propagar hacia atrás los deltas a través de la red, también se pueden calcular los gradientes de los pesos en las capas ocultas. Esto nos permite actualizar los pesos en las capas ocultas en consecuencia, refinando aún más el rendimiento de la red. Es importante tener en cuenta que cuando se usan activaciones softmax y pérdida de entropía cruzada categórica, debemos asegurarnos de que softmax solo se aplique a la capa de salida. Para las capas ocultas, es recomendable utilizar funciones de activación como ReLU (Unidad Lineal Rectificada) o tanh. Las activaciones de Softmax nos permiten obtener resultados que se pueden interpretar como probabilidades o puntajes de confianza para cada clase. Los valores en el vector de salida suman 1, lo que nos permite medir la confianza de la red en sus predicciones. Un valor más alto indica una mayor confianza para una clase en particular.

La pérdida de entropía cruzada categórica complementa las activaciones softmax al medir de manera efectiva la discrepancia entre las probabilidades predichas y las etiquetas verdaderas. Alienta a la red a minimizar la diferencia entre las probabilidades predichas y el vector objetivo codificado en caliente, lo que empuja a la red hacia predicciones más precisas.

Al combinar activaciones softmax y pérdida de entropía cruzada categórica, logramos varios beneficios. Obtenemos resultados significativos e interpretables, lo que nos permite comprender las predicciones de la red y los niveles de confianza para diferentes clases. Los gradientes derivados de la pérdida de entropía cruzada categórica guían las actualizaciones de peso de una manera que conduce a un aprendizaje más efectivo y una mayor precisión. Vale la pena mencionar que hay otras funciones de activación y funciones de pérdida disponibles, cada una adecuada para diferentes tipos de problemas. Sin embargo, las activaciones softmax con pérdida de entropía cruzada categórica han demostrado ser una combinación exitosa para tareas de clasificación de clases múltiples, que ofrecen interpretabilidad y dinámicas de entrenamiento efectivas.

En resumen, el uso de activaciones softmax y pérdida de entropía cruzada categórica en redes neuronales de clasificación multiclase nos permite obtener predicciones significativas, interpretar niveles de confianza y realizar actualizaciones eficientes de descenso de gradiente. Esta combinación juega un papel crucial en el logro de resultados precisos y confiables en varias tareas de clasificación.

 

Hacer que las redes neuronales sean rápidas con la vectorización (DL 10)



Hacer que las redes neuronales sean rápidas con la vectorización (DL 10)

Para comprender el funcionamiento interno de una red neuronal, es beneficioso profundizar en el nivel de una neurona individual y considerar las conexiones entre las neuronas. Durante el pase hacia adelante, que calcula las activaciones, y el pase hacia atrás, que calcula los deltas, pensar en términos de nodos y bordes puede ayudar a desarrollar la intuición. Sin embargo, el aprendizaje profundo en realidad no funciona de esta manera. Para construir redes neuronales a gran escala que puedan entrenarse de manera eficiente, debemos pasar a un nivel más alto de abstracción y pensar en términos de vectores, matrices y tensores.

El primer paso hacia este nivel superior de abstracción es representar las activaciones de una capa como un vector. Si nuestra red neuronal está organizada en capas, podemos recopilar las activaciones de una capa en un vector. Por ejemplo, el vector A^l almacena todas las activaciones de la capa l, con tantas entradas como nodos haya en esa capa. De manera similar, podemos recopilar los deltas de una capa en un vector durante la retropropagación. También podemos usar vectores para representar los sesgos o entradas de una capa.

Para expresar los cálculos en esta notación vectorizada, primero consideremos cómo un nodo calcula su suma ponderada de entradas. La entrada X^5 que entra en la función de activación del nodo 5 se calcula como una suma ponderada de las activaciones de la capa anterior más un sesgo. Al recopilar las activaciones de la capa anterior en el vector A^K y tener un vector de pesos en el nodo 5, la suma ponderada de las entradas se puede representar como un producto escalar entre estos dos vectores. Otra forma de escribir el producto punto es transponer el primer vector y realizar una multiplicación de matrices entre el vector fila y el vector columna. Por lo tanto, podemos expresar la entrada al nodo 5 como el vector de peso que ingresa al nodo 5 (transpuesto) multiplicado por el vector de activación de la capa anterior, más el sesgo del nodo 5.

Esta notación vectorizada puede ir más allá y permitirnos calcular todo el vector de entradas a la capa l a la vez. Al combinar el vector fila de pesos para el nodo 5 con vectores fila de pesos para otras neuronas en esa capa, obtenemos una matriz que contiene todos los pesos desde la capa K hasta la capa l. Esta matriz de pesos tiene tantas filas como nodos en la capa l (cada fila representa un vector de pesos en una de las neuronas de la capa l) y tantas columnas como nodos en la capa anterior K (cada columna representa un vector de pesos). pesos que salen de uno de los nodos de la capa K). Al multiplicar esta matriz de pesos por el vector de activación de la capa K, se obtiene un vector en el que cada elemento representa la suma ponderada de las entradas de uno de los nodos de la capa l. Para obtener las entradas de la función de activación, agregamos los sesgos a este vector, que se han recopilado en un vector.

Ahora, usando la multiplicación de vectores de matriz, la suma de vectores y las funciones de elementos, podemos expresar las operaciones para calcular todas las entradas a una capa. Anteriormente, estos cálculos habrían requerido bucles anidados, pero ahora podemos realizarlos de manera eficiente de forma vectorizada.

En el futuro, también podemos extender este enfoque vectorizado al pase hacia atrás. En lugar de considerar una neurona a la vez, podemos calcular el delta para un nodo en la capa K como una suma ponderada de todos los deltas en la siguiente capa, multiplicada por la derivada de la función de activación de ese nodo. Nuevamente, podemos expresar esta suma ponderada como un producto escalar. Al multiplicar un vector de fila de pesos que sale del nodo 3 por el vector de deltas para la capa l y luego multiplicar por la derivada de activación, podemos calcular el vector delta para la capa K. Usando una matriz de peso que recopila todos los pesos para la capa l neuronas y multiplicándolo por el vector de deltas para la capa l, podemos obtener una matriz cuyas dimensiones coinciden con la matriz de peso.

Al aprovechar las operaciones matriciales, podemos lograr ganancias de rendimiento significativas en redes neuronales densamente conectadas de alimentación hacia adelante. Esto es particularmente ventajoso porque las operaciones matriciales se pueden ejecutar de manera eficiente en hardware especializado, como procesadores gráficos (GPU), que pueden acelerar en gran medida estos cálculos.

Cuando representamos los cálculos de nuestra red neuronal mediante matrices, podemos realizar el pase hacia adelante, el pase hacia atrás y las actualizaciones de peso de una manera altamente eficiente y paralelizada. Recapitulemos los pasos clave:

  1. Pase hacia adelante: podemos calcular las activaciones de cada capa para un lote completo de datos realizando la multiplicación de vectores de matriz y la aplicación de la función de activación por elementos. Al organizar las activaciones en una matriz, donde cada columna representa las activaciones para un punto de datos diferente, podemos calcular de manera eficiente las activaciones para todo el lote.

  2. Pase hacia atrás: Del mismo modo, podemos calcular los deltas (gradientes de error) para cada capa de forma vectorizada. Al representar los deltas como una matriz, donde cada columna corresponde a los deltas para un punto de datos específico, podemos realizar multiplicaciones de vectores de matriz y multiplicaciones por elementos con derivadas de activación para calcular de manera eficiente los deltas para todo el lote.

  3. Actualizaciones de peso: para actualizar los pesos y sesgos, podemos usar operaciones de matriz para calcular el producto punto entre la matriz de deltas y la transposición de la matriz de peso. Esta operación produce una matriz de actualizaciones de peso, donde cada entrada representa la actualización de un peso específico. Al dividir los productos punto por el tamaño del lote, obtenemos la actualización promedio y luego podemos actualizar los pesos restando la tasa de aprendizaje multiplicada por la actualización promedio. Las actualizaciones de sesgo se calculan tomando el promedio de los vectores delta en las columnas y restando la tasa de aprendizaje multiplicada por el promedio de los sesgos.

Al vectorizar estos cálculos y aprovechar las operaciones matriciales, podemos lograr una eficiencia computacional significativa y aprovechar la aceleración de hardware para el procesamiento paralelo. Este enfoque nos permite entrenar redes neuronales a gran escala de manera eficiente, lo que hace posible el aprendizaje profundo en una amplia gama de tareas y conjuntos de datos.

Vale la pena señalar que, si bien el texto proporcionó una descripción general de alto nivel de las operaciones de matriz de vectorización y aprovechamiento, los detalles de implementación reales pueden variar según el lenguaje de programación o el marco utilizado. Diferentes lenguajes y marcos pueden tener sus propias funciones y bibliotecas optimizadas para operaciones matriciales, lo que mejora aún más el rendimiento.

Además de los beneficios de rendimiento, aprovechar las operaciones matriciales en el aprendizaje profundo tiene otras ventajas:

  1. Simplicidad y legibilidad del código: mediante el uso de operaciones matriciales, el código para los cálculos de redes neuronales se vuelve más conciso y más fácil de entender. En lugar de escribir bucles explícitos para puntos de datos individuales, podemos expresar los cálculos de una forma más compacta e intuitiva mediante operaciones matriciales.

  2. Compatibilidad de software: muchos marcos y bibliotecas populares de aprendizaje profundo, como TensorFlow y PyTorch, proporcionan implementaciones eficientes de operaciones matriciales. Estos marcos a menudo utilizan bibliotecas de álgebra lineal optimizadas, como BLAS (Subprogramas de álgebra lineal básica) o cuBLAS (Subprogramas de álgebra lineal básica de CUDA), para acelerar los cálculos matriciales en CPU o GPU. Al aprovechar estos marcos, podemos beneficiarnos de sus implementaciones optimizadas y garantizar la compatibilidad con otros componentes de la canalización de aprendizaje profundo.

  3. Generalización a otros tipos de capas: las operaciones matriciales se pueden aplicar no solo a capas densamente conectadas, sino también a otros tipos de capas, como capas convolucionales y capas recurrentes. Al expresar los cálculos en forma de matriz, podemos aprovechar las mismas optimizaciones y operaciones de matriz eficientes en diferentes tipos de capas, lo que simplifica la implementación y mejora el rendimiento general.

  4. Integración con aceleración de hardware: el hardware especializado, como GPU o unidades de procesamiento de tensor (TPU), está diseñado para acelerar los cálculos matriciales. Estos aceleradores de hardware se destacan en la realización de operaciones matriciales paralelas a gran escala, lo que los hace ideales para cargas de trabajo de aprendizaje profundo. Al utilizar operaciones matriciales, podemos integrarnos sin problemas con estos aceleradores de hardware y aprovechar al máximo sus capacidades, lo que lleva a una aceleración significativa en los tiempos de entrenamiento e inferencia.

En resumen, aprovechar las operaciones de matriz en el aprendizaje profundo ofrece beneficios de rendimiento, simplicidad de código, compatibilidad de software e integración con aceleradores de hardware. Al expresar los cálculos de redes neuronales en forma de matriz y utilizar operaciones de matriz optimizadas, podemos entrenar e implementar de manera eficiente modelos de aprendizaje profundo en una variedad de tareas y plataformas.

 

Gradientes que desaparecen (o explotan) (DL 11)



Gradientes que desaparecen (o explotan) (DL 11)

A medida que profundizamos en la ampliación de las redes neuronales para resolver problemas más grandes, se hace necesario agregar más capas. Sin embargo, las redes más profundas pueden encontrar problemas durante el entrenamiento causados por gradientes que desaparecen o explotan. Consideremos una red neuronal profunda con activaciones sigmoideas para las capas ocultas. Visualizar una red de este tipo con numerosos nodos y capas se vuelve poco práctico. En cambio, podemos representarlo con un diagrama de bloques, donde cada columna representa una capa y las funciones de activación se indican dentro de cada bloque.

Otra forma de visualizar la red es a través de un gráfico computacional, que muestra la secuencia de operaciones aplicadas a cada lote de datos. Comenzando con matrices de entrada, realizamos multiplicaciones de matrices, sumas de sesgos y aplicamos funciones de activación en cada capa. Este proceso continúa a través de las capas ocultas hasta llegar a la capa de salida, donde la función de activación cambia a softmax. La pérdida se calcula a partir de las activaciones y los objetivos.

Expresando los cálculos matemáticamente, multiplicamos matrices de peso por matrices de entrada, agregamos sesgos y aplicamos funciones de activación. Las expresiones continúan a través de las capas ocultas, llegando finalmente a la capa de salida donde se aplica la activación de softmax. Las activaciones de salida y los objetivos se utilizan para calcular la pérdida.

Cuando se calculan las derivadas para las actualizaciones de descenso de gradiente, la regla de la cadena se aplica repetidamente. A partir de la capa de salida, calculamos deltas multiplicando con la transposición de matrices de peso y multiplicando elementos con la derivada de la función de activación. Este proceso propaga deltas hacia atrás a través de las capas ocultas.

El problema del gradiente de fuga surge cuando se utilizan funciones de activación sigmoidea para capas ocultas. La derivada de un sigmoide tiende a tener valores pequeños, lo que hace que los deltas disminuyan con cada propagación hacia atrás. Como resultado, los gradientes se vuelven cada vez más pequeños, lo que dificulta la actualización efectiva de los pesos, especialmente en las primeras capas.

El aprendizaje profundo enfrentó dificultades para entrenar redes neuronales profundas debido al problema del gradiente de fuga. Sin embargo, hace aproximadamente una década, se idearon enfoques para superar este desafío. Un método es cambiar la inicialización de la matriz de pesos, generando pesos aleatorios iniciales más grandes para contrarrestar los deltas decrecientes causados por las derivadas sigmoideas.

El avance más significativo se produjo con la adopción de unidades lineales rectificadoras (ReLU) como funciones de activación. A diferencia de los derivados sigmoides, los derivados ReLU tienden a no reducir los deltas significativamente. Esta propiedad hizo que las activaciones de ReLU fueran más populares, ya que facilitaban el entrenamiento de redes neuronales profundas.

Sin embargo, el uso de activaciones de ReLU presenta el riesgo de explotar gradientes, donde los deltas pueden volverse más grandes a medida que nos propagamos hacia atrás. Para mitigar esto, es recomendable elegir pesos iniciales más pequeños en comparación con las activaciones sigmoideas.

Las neuronas ReLU se prefieren para capas ocultas debido a su facilidad de entrenamiento y eficiencia computacional. La inicialización de los pesos depende de la función de activación empleada, y la comunidad de aprendizaje profundo ha logrado un progreso sustancial en la determinación de los métodos de inicialización de pesos apropiados para diferentes tipos de activación. Las bibliotecas modernas de aprendizaje profundo a menudo manejan la inicialización del peso automáticamente en función de las activaciones especificadas.

 

Evitar el sobreajuste de redes neuronales (DL 12)



Evitar el sobreajuste de redes neuronales (DL 12)

A medida que trabajamos con redes neuronales más grandes para el aprendizaje profundo, el riesgo de sobreajuste aumenta significativamente. Es crucial comprender las causas del sobreajuste y cómo detectarlo y prevenirlo. El sobreajuste ocurre cuando un modelo de aprendizaje automático se vuelve demasiado específico para el conjunto de entrenamiento y no se puede generalizar a nuevos datos. La causa principal es cuando un modelo tiene una libertad de parámetros excesiva en comparación con la cantidad de datos de entrenamiento, lo que hace que los modelos con altos grados de libertad o pequeños conjuntos de entrenamiento sean más susceptibles.

En la regresión polinomial, por ejemplo, aumentar el grado del polinomio proporciona más parámetros para ajustar, lo que permite que el modelo se ajuste a los datos de entrenamiento con mayor precisión. Sin embargo, esto puede dificultar su capacidad de generalizar a ejemplos más allá del conjunto de entrenamiento.

En el contexto de las redes neuronales, los pesos y sesgos sirven como parámetros. A medida que las redes neuronales se vuelven más grandes con más pesos, tienen mayor libertad para elegir sus parámetros. Por lo tanto, cuando se entrena una red neuronal grande, es importante estar atento a posibles sobreajustes, siendo el método principal de identificación monitorear el conjunto de validación.

Dividir el conjunto de datos en conjuntos de entrenamiento, validación y prueba ayuda a evaluar la generalización de la red. Cuando se produce un sobreajuste, existe una discrepancia notable en la pérdida o la precisión entre el conjunto de entrenamiento y el conjunto de validación. Idealmente, la pérdida del conjunto de entrenamiento debería disminuir a lo largo de las épocas, pero si comienza a aumentar, indica un problema. De manera similar, la pérdida del conjunto de validación debe disminuir en línea con la pérdida del conjunto de entrenamiento, y si comienza a aumentar mientras la pérdida del conjunto de entrenamiento continúa disminuyendo, significa un fuerte sobreajuste. La precisión del modelo en ambos conjuntos también puede revelar un sobreajuste en los problemas de clasificación.

Para abordar el sobreajuste, un enfoque es abordar directamente sus causas. Los datos insuficientes se pueden mitigar mediante la adquisición de más datos, como se ve en los éxitos de aprendizaje profundo a gran escala que utilizan grandes conjuntos de datos. Sin embargo, si no es factible obtener más datos, reducir el modelo puede ayudar a combatir el sobreajuste y mejorar la eficiencia. La pauta general es elegir una arquitectura de red neuronal que tenga el tamaño adecuado para el problema específico en cuestión.

Si persisten las preocupaciones sobre el sobreajuste, existen técnicas avanzadas a considerar. Una de estas técnicas es la detención anticipada, donde el entrenamiento se detiene cuando se observa una separación entre los conjuntos de entrenamiento y validación, incluso antes de alcanzar el número máximo de épocas. Además, se pueden emplear métodos como el abandono y la regularización del peso para evitar el sobreajuste.

El abandono implica poner a cero aleatoriamente algunas activaciones en la red durante el entrenamiento para evitar que neuronas específicas tengan un impacto excesivo. Al descartar neuronas, las capas posteriores de la red se ven obligadas a aprender funciones que no dependen demasiado de esas neuronas, lo que reduce el sobreajuste. Los ajustes se realizan durante las pruebas para tener en cuenta la ausencia de deserción.

La regularización del peso combate el sobreajuste al evitar que los pesos se vuelvan demasiado grandes. Esto se logra incorporando un término de penalización en la función de pérdida que desalienta los pesos grandes. Una forma común de regularización de pesos es la regularización L2, donde la suma de los cuadrados de todos los pesos se agrega como un término de penalización cuadrático. Este término de regularización, controlado por un hiperparámetro, equilibra el énfasis en la regularización frente a la función de pérdida original.

Es crucial monitorear el sobreajuste cuando se entrenan redes neuronales. Tenga en cuenta el tamaño del modelo y los datos disponibles, y emplee técnicas como la detención anticipada, el abandono y la regularización para abordar el sobreajuste cuando sea necesario.

Razón de la queja: