¿Qué es la retropropagación?

Grupo de jóvenes empresarios con ropa informal elegante trabajando juntos en una oficina creativa

Autores

Dave Bergmann

Senior Staff Writer, AI Models

IBM Think

Cole Stryker

Staff Editor, AI Models

IBM Think

¿Qué es la retropropagación?

La retropropagación es una técnica de machine learning esencial para la optimización de las redes neuronales. Facilita el uso de algoritmos de descenso gradiente para actualizar las ponderaciones de la red, que es como "aprenden" los modelos de deep learning que impulsan la inteligencia artificial (IA) moderna.

Abreviatura de "propagación hacia atrás del error", la retropropagación es un método elegante para calcular cómo los cambios en cualquiera de las ponderaciones o sesgos de una red neuronal afectarán a la precisión de las predicciones del modelo. Es esencial el uso del aprendizaje supervisado, el aprendizaje semisupervisado o el aprendizaje autosupervisado para entrenar redes neuronales.

Aunque se propusieron de forma independiente equivalentes y predecesores de la retropropagación en diversos contextos que se remontan a la década de 1960, David E. Rumelhart, Geoffrey Hinton y Ronald J. Williams publicaron por primera vez el algoritmo de aprendizaje formal. Su artículo de 1986, "Learning representations by back-propagating errors (Aprendizaje de representaciones mediante errores de retropropagación)", proporcionó la derivación del algoritmo de retropropagación tal como se utiliza y entiende en un contexto moderno de machine learning.

La lógica de la retropropagación es que las capas de neuronas de las redes neuronales artificiales son básicamente una serie de funciones matemáticas anidadas. Durante el entrenamiento, esas ecuaciones interconectadas se anidan en otra función más: una "función de pérdida" que mide la diferencia (o "pérdida") entre la salida deseada (o "verdad fundamental") para una entrada dada y la salida real de las redes neuronales.

Por lo tanto, podemos usar la "regla de la cadena", un principio de cálculo que data del siglo XVII, para calcular la tasa a la que cada neurona contribuye a la pérdida total. Al hacerlo, podemos calcular el impacto de los cambios en cualquier variable, es decir, en cualquier ponderación o sesgo, dentro de las ecuaciones que representan esas neuronas.

Matemáticamente hablando, la retropropagación funciona hacia atrás desde la salida para calcular eficazmente el "gradiente" de la función de pérdida: un vector de derivadas para cada ecuación de la red. Este gradiente indica a los algoritmos de optimización, como el "descenso de gradiente", qué ecuaciones ajustar y en qué dirección ajustarlas para reducir las pérdidas.

Estos tres procesos entrelazados (una función de pérdida que rastrea el error del modelo en diferentes entradas, la propagación hacia atrás de ese error para ver cómo las diferentes partes de la red contribuyen al error y los algoritmos de descenso de gradiente que ajustan las ponderaciones del modelo en consecuencia) son la forma en que los modelos de deep learning “aprenden”. Como tal, la retropropagación es fundamental para entrenar modelos de redes neuronales, desde los perceptrones multicapa más básicos hasta las complejas arquitecturas de redes neuronales profundas utilizadas para la IA generativa.

Las últimas novedades sobre tecnología, respaldadas por conocimientos de expertos

Manténgase al día sobre las tendencias más importantes e intrigantes del sector en materia de IA, automatización, datos y mucho más con el boletín Think. Consulte la Declaración de privacidad de IBM.

¡Gracias! Está suscrito.

Su suscripción se enviará en inglés. Encontrará un enlace para darse de baja en cada boletín. Puede gestionar sus suscripciones o darse de baja aquí. Consulte nuestra Declaración de privacidad de IBM para obtener más información.

¿Cómo funcionan las redes neuronales?

Dado que el proceso de retropropagación es tan fundamental para el entrenamiento de las redes neuronales, una explicación útil del proceso requiere una comprensión práctica de cómo las redes neuronales hacen predicciones.

Y todavía más importante es entender el propósito y el contexto de las "ponderaciones" y los "sesgos": los parámetros ajustables del modelo que se optimizan mediante retropropagación y descenso de gradiente.

Estructura de las redes neuronales

Las redes neuronales pretenden imitar aproximadamente la estructura del cerebro humano. Están compuestas de muchos nodos interconectados (o neuronas), dispuestos en capas. Las redes neuronales hacen predicciones cuando los datos de entrada originales han realizado un "paso hacia adelante" a través de toda la red.

Las neuronas en la "capa de entrada" reciben datos de entrada, generalmente como una incrustación vectorial, y cada neurona de entrada recibe una característica individual del vector de entrada. Por ejemplo, un modelo que trabaja con imágenes en escala de grises de 10x10 píxeles normalmente tendrá 100 neuronas en su capa de entrada, y cada neurona de entrada corresponde a un píxel individual. Por lo tanto, las redes neuronales suelen requerir entradas de tamaño fijo, aunque técnicas como la agrupación o la normalización pueden proporcionar cierta flexibilidad.

En una red neuronal feedforward estándar, cada neurona de la capa de entrada está conectada a cada una de las neuronas de la siguiente capa, que a su vez están conectadas a las neuronas de la siguiente capa, y así sucesivamente hasta la capa de salida donde se realizan las predicciones finales. Las capas intermedias entre la capa de entrada y la capa de salida, llamadas capas ocultas de la red, son donde se produce la mayor parte del "aprendizaje".

Aunque algunas arquitecturas de redes neuronales especializadas, como la mezcla de modelos expertos o las redes neuronales convolucionales, implican variaciones, adiciones o excepciones a esta sencilla disposición, todas las redes neuronales emplean esta estructura central.

Ponderaciones y sesgos

Aunque cada neurona recibe entradas de cada nodo de la capa anterior, no todas esas entradas tienen la misma importancia. A cada conexión entre dos neuronas se le asigna una "ponderación" única: un multiplicador que aumenta o disminuye la contribución de una neurona a una neurona en la siguiente capa.

A cada neurona individual también se le puede dar un "sesgo": un valor constante añadido a la suma de las entradas ponderadas de las neuronas en la capa anterior.

El objetivo final de la retropropagación y el descenso de gradiente es calcular las ponderaciones y sesgos que producirán las mejores predicciones del modelo. Las neuronas correspondientes a características de datos que se correlacionan significativamente con predicciones precisas reciben mayor ponderación; a otras conexiones se les puede dar ponderaciones cercanas a cero.

Las redes neuronales profundas modernas, a menudo con docenas de capas ocultas y cada una con muchas neuronas, pueden comprender miles, millones o, en el caso de la mayoría de los grandes modelos lingüísticos (LLM), miles de millones de parámetros ajustables de este tipo.

Funciones de activación

Cada neurona está configurada para realizar una operación matemática, llamada "función de activación", sobre la suma de entradas de diferente ponderación que recibe de los nodos de la capa anterior. Las funciones de activación introducen "no linealidad", lo que permite que el modelo capture patrones complejos en los datos de entrada y produzca gradientes que se pueden optimizar. El uso exclusivo de funciones de activación lineal esencialmente colapsa la red neuronal en un modelo de regresión lineal.

Las funciones de activación comunes en redes neuronales incluyen:

  • La función sigmoide , que asigna cualquier entrada a un valor entre 0 y 1.
  • La tangente hiperbólica (o tanh) , que asigna entradas a un valor entre -1 y 1.
  • La unidad lineal rectificada (o ReLU), que asigna cualquier entrada negativa a 0 y deja sin cambios cualquier entrada positiva.
  • La función softmax, que convierte un vector de entradas en un vector cuyos elementos oscilan entre 0 y 1 y, en conjunto, suman 1.

Considere una unidad oculta hipotética z, con una función de activación tanh y un término de sesgo t, en la segunda capa de una red neuronal con 3 nodos de entrada, a, b y c, en su capa de entrada. Cada una de las conexiones entre los nodos de entrada y el nodo z tiene una ponderación única, w. Podemos describir el valor de salida que el nodo z pasará a las neuronas de la capa siguiente con la ecuación simplificada z = tanh(waz*a + wbz*b + wcz*c + t).

La neurona z está conectada a las neuronas de la siguiente capa. Esa ecuación para z es, por lo tanto, parte de las funciones de activación en la siguiente capa y, por extensión, también parte de cada función de activación para cualquier neurona en cualquier capa posterior.

¿Por qué utilizar la retropropagación?

Como se explicará en las siguientes secciones, la retropropagación es un algoritmo notablemente rápido y eficiente para desenredar la enorme red de variables y ecuaciones interconectadas en una red neuronal.

Para ilustrar la eficiencia de la retropropagación, Michael Nielsen la compara con un enfoque alternativo simple e intuitivo para calcular el gradiente de la función de pérdida de una red neuronal en su libro digital, "Neural Networks and Deep Learning".

Como explica Nielsen, se puede estimar fácilmente el impacto de los cambios en cualquier ponderación específica wj en la red simplemente completando un paso hacia adelante para dos valores ligeramente diferentes de wj, manteniendo todos los demás parámetros sin cambios y comparando la pérdida resultante para cada paso. Al formalizar ese proceso en una ecuación sencilla e implementar unas pocas líneas de código en Python, se puede automatizar ese proceso para cada ponderación de la red.

Pero ahora imagine que su modelo tiene 1 millón de ponderaciones, algo bastante modesto para un modelo moderno de deep learning. Para calcular todo el gradiente, necesitaría completar 1 000 001 pasos hacia adelante a través de la red: uno para establecer una línea de base y luego otro paso para evaluar los cambios en cada uno de los millones de ponderaciones.

La retropropagación puede lograr el mismo objetivo en 2 pasos: 1 paso hacia adelante y 1 paso hacia atrás.

Mixture of Experts | 28 de agosto, episodio 70

Descifrar la IA: resumen semanal de noticias

Únase a nuestro panel de ingenieros, investigadores, responsables de producto y otros profesionales de talla mundial que se abren paso entre el bullicio de la IA para ofrecerle las últimas noticias y conocimientos al respecto.

Conceptos matemáticos clave para la retropropagación

Para simplificar la explicación de cómo funciona la retropropagación, sería útil revisar primero algunos conceptos matemáticos y terminología básicos.

  • Una derivada es la tasa de cambio en una ecuación en un instante específico. En una ecuación lineal, la tasa de cambio es una pendiente constante. En una ecuación no lineal , como las que se utilizan para las funciones de activación, esta pendiente varía. La diferenciación es el proceso de encontrar la derivada de una función específica. Al diferenciar una función no lineal, podemos encontrar la pendiente (su tasa de cambio instantánea) en cualquier punto específico de la curva.
  • En funciones con múltiples variables, una derivada parcial es la derivada de una variable con respecto a las demás. Si cambiamos una variable, pero mantenemos las demás iguales, ¿cómo cambia el resultado de la función general? Las funciones de activación de los nodos individuales en una red neuronal tienen muchas variables, incluidas las muchas entradas de las neuronas en capas anteriores y las ponderaciones aplicadas a esas entradas. Cuando se trata de un nodo específico n, encontrar las derivadas parciales de las funciones de activación de las neuronas de la capa anterior nos permite aislar el impacto de cada una en la salida general de la propia función de activación de n .
  • Un gradiente es un vector que contiene todas las derivadas parciales de una función con múltiples variables. Básicamente, representa todos los factores que afectan a la velocidad a la que cambiará la salida de una ecuación compleja tras un cambio en la entrada.
  • La regla de la cadena es una fórmula para calcular las derivadas de funciones que implican no solo múltiples variables, sino múltiples funciones. Por ejemplo, considere una función compuesta ƒ(x) = A(B(x)). La derivada de la función compuesta, f, es igual a la derivada de la función externa (A) multiplicada por la derivada de la función interna (B).

La regla de la cadena es esencial para calcular las derivadas de las funciones de activación en redes neuronales, que se componen de las salidas de las funciones de activación de otras neuronas de las capas anteriores.

Aunque la lógica detrás de la retropropagación es relativamente sencilla, las matemáticas y la notación pueden volverse muy complejas, especialmente para aquellos que no están familiarizados con el cálculo de variables.

¿Cómo funciona la retropropagación?

Trabajando hacia atrás desde la salida del modelo, la retropropagación aplica la "regla de la cadena" para calcular la influencia de los cambios en cada parámetro individual de las redes neuronales en el error general de las predicciones del modelo.

Hablando de manera abstracta, el propósito de la retropropagación es entrenar una red neuronal para hacer mejores predicciones a través del aprendizaje supervisado. Más fundamentalmente, el objetivo de la retropropagación es determinar cómo se deben ajustar las ponderaciones y los sesgos del modelo para minimizar el error medido por una "función de pérdida".

A nivel técnico y matemático, el objetivo de la retropropagación es calcular el gradiente de la función de pérdida con respecto a cada uno de los parámetros individuales de las redes neuronales. En términos más simples, la retropropagación utiliza la regla de la cadena para calcular la tasa a la que cambia la pérdida en respuesta a cualquier cambio en una ponderación específica (o sesgo) en la red.

En términos generales, entrenar redes neuronales con retropropagación implica los siguientes pasos:

  • Un paso hacia adelante, haciendo predicciones sobre datos de entrenamiento.
  • Una función de pérdida mide el error de las predicciones del modelo durante ese avance.
  • Propagación hacia atrás del error, o paso hacia atrás, para calcular las derivadas parciales de la función de pérdida.
  • Descenso de gradiente, para actualizar los ponderaciones del modelo.

Paso hacia adelante

Las redes neuronales emiten predicciones a través de la propagación hacia adelante. La propagación directa es básicamente una larga serie de ecuaciones anidadas, con las salidas de las funciones de activación de una capa de neuronas que sirven como entradas para las funciones de activación de las neuronas en la siguiente capa.

El entrenamiento de modelos normalmente comienza con una inicialización aleatoria de las ponderaciones y los sesgos. Los hiperparámetros del modelo, como el número de capas ocultas, el número de nodos de cada capa y las funciones de activación de neuronas específicas, se configuran manualmente y no están sujetos a entrenamiento.

En cada paso hacia adelante, se muestrea una entrada del conjunto de datos de entrenamiento. Los nodos de la capa de entrada reciben el vector de entrada y cada uno pasa su valor, multiplicado por una ponderación inicial aleatorio, a los nodos de la primera capa oculta. Las unidades ocultas toman la suma ponderada de estos valores de salida como entrada para una función de activación, cuyo valor de salida (condicionado por una ponderación inciial aleatoria) sirve como entrada para las neuronas de la siguiente capa. Esto continúa hasta la capa de salida, donde se produce una predicción final.

Veamos este ejemplo simplificado de una red neuronal que clasifica las entradas en una de 5 categorías:

  • La capa de entrada recibe una representación numérica de un ejemplo muestreado a partir de los datos de entrenamiento.
  • Los nodos de entrada pasan sus valores a las unidades ocultas de la siguiente capa. Las unidades ocultas utilizan una función de activación ReLU.
  • Los datos fluyen a través de las capas ocultas, cada una de las cuales extrae progresivamente las características clave hasta que llegan a la capa de salida.
  • La capa de salida contiene 5 neuronas, cada una de las cuales corresponde a una categoría potencial.
  • Las neuronas de salida utilizan una función de activación de softmax. El valor de salida de la función softmax de cada neurona de salida corresponde a la probabilidad, sobre 1, de que la entrada se clasifique como la categoría que representa la neurona.
  • La red predice que la entrada original pertenece a las categorías de cualquier neurona de salida que tenga el valor softmax más alto.

En una red bien entrenada, este modelo emitirá sistemáticamente un valor de probabilidad alto para la clasificación correcta y emitirá valores de probabilidad bajos para las otras clasificaciones incorrectas. Sin embargo, esta red neuronal aún no está entrenada. En este punto, sus ponderaciones y sesgos tienen valores iniciales aleatorios, por lo que sus predicciones suelen ser inexactas.

Función de pérdida

Después de cada paso hacia adelante, una "función de pérdidamide la diferencia (o "pérdida") entre la salida prevista del modelo para una entrada dada y las predicciones correctas (o "verdad fundamental") para esa entrada. En otras palabras, mide qué tan diferente es el resultado real del modelo del resultado deseado.

En el aprendizaje supervisado, que utiliza datos etiquetados, la verdad fundamental la proporcionan las anotaciones manuales. En el aprendizaje autosupervisado, que enmascara o transforma partes de muestras de datos no etiquetadas y modelos de tarea con su reconstrucción, la propia muestra original sirve como verdad fundamental.

El objetivo de esta función de pérdida es cuantificar la imprecisión de una manera que refleje adecuadamente tanto la naturaleza como la magnitud del error de la salida del modelo para cada entrada. Las diferentes fórmulas matemáticas para la pérdida se adaptan mejor a tareas específicas: por ejemplo, las variantes del error cuadrático medio funcionan bien para problemas de regresión, mientras que las variantes de pérdida de entropía cruzada funcionan bien para la clasificación.

Dado que la función de pérdida toma la salida de una red neuronal como entrada, y esa salida de red neuronal es una función compuesta que comprende muchas funciones de activación anidadas de neuronas individuales, diferenciar la función de pérdida implica diferenciar toda la red neuronal. Para ello, la retropropagación utiliza la regla de la cadena.

¿"Función de pérdida", "función de coste" o "función de error"?
Vale la pena señalar rápidamente que, en algunos contextos, los términos función de coste o función de error se utilizan en lugar de función de pérdida, con "coste" o "error" en sustitución de "pérdida".

Aunque algunas publicaciones sobre machine learning asignan matices únicos a cada término, generalmente son intercambiables.1 Una función objetivo es un término más amplio para cualquier función de evaluación que queramos minimizar o maximizar. La función de pérdida, la función de coste o la función de error se refieren específicamente a los términos que queremos minimizar.

Paso hacia atrás

A partir de la capa final, un "paso hacia atrás" diferencia la función de pérdida para calcular cómo cada parámetro individual de la red contribuye al error global para una sola entrada.

Volviendo a nuestro ejemplo anterior del modelo clasificador, empezaríamos con las 5 neuronas de la capa final, a la que llamaremos capa L. El valor softmax de cada neurona de salida representa la probabilidad, sobre 1, de que una entrada pertenezca a sus categorías. En un modelo perfectamente entrenado, la neurona que representa la clasificación correcta tendría un valor de salida cercano a 1 y las otras neuronas tendrían un valor de salida cercano a 0.

Por ahora, nos centraremos en la unidad de salida que representa la predicción correcta, a la que llamaremos Lc. La función de activación de Lces una función compuesta, que contiene las muchas funciones de activación anidadas de toda la red neuronal, desde la capa de entrada hasta la capa de salida. Minimizar la función de pérdida implicaría realizar ajustes en toda la red que acerquen la salida de la función de activación de Lc a 1.

Para hacerlo, necesitaremos saber cómo cualquier cambio en las capas anteriores cambiará la propia salida de Lc . En otras palabras, tendremos que encontrar las derivadas parciales de la función de activación de Lc .

La salida de la función de activación de Lc depende de las contribuciones que recibe de las neuronas de la penúltima capa, que llamaremos capa L-1. Una forma de cambiar la salida de Lces cambiar las ponderaciones entre las neuronas en L-1 y Lc. Al calcular la derivada parcial de cada ponderación L-1 con respecto a las otras ponderaciones, podemos ver cómo aumentar o disminuir cualquiera de ellos acercará la salida de Lc (o la alejará) de 1.

Pero esa no es la única forma de cambiar la salida de Lc . Las contribuciones que Lc recibe de las neuronas L-1 están determinadas no solo por las ponderaciones aplicadas a los valores de salida de L-1 , sino por los propios valores de salida reales (preponderados). Los valores de salida de las neuronas L-1 , a su vez, están influenciados por las ponderaciones aplicadas a las entradas que reciben de L-2. Así que podemos diferenciar las funciones de activación en L-1 para encontrar las derivadas parciales de las ponderaciones aplicadas a las contribuciones de L-2 . Estas derivadas parciales nos muestran cómo cualquier cambio en una ponderación L-2 afectará a las salidas en L-1, lo que posteriormente afectaría al valor de salida de Lc y, por lo tanto, a la función de pérdida.

Por esa misma lógica, también podríamos influir en los valores de salida que las neuronas L-1 reciben de las neuronas L-2 ajustando las contribuciones que las neuronas L-2 reciben de las neuronas en L-3. Así que encontramos las derivadas parciales en L-3, y así sucesivamente, repitiendo de forma recurrente este proceso hasta que hayamos llegado a la capa de entrada. Cuando hayamos terminado, tenemos el gradiente de la función de pérdida: un vector de su derivada parcial para cada parámetro de ponderación y sesgo de la red.

Ya hemos completado un paso hacia adelante y un paso hacia atrás para un solo ejemplo de entrenamiento. Sin embargo, nuestro objetivo es entrenar el modelo para que se generalice bien a las nuevas entradas. Para ello es necesario entrenarse con un gran número de muestras que reflejen la diversidad y la gama de entradas. El modelo se encargará de hacer predicciones después del entrenamiento.

Descenso gradiente

Ahora que tenemos los gradientes de la función de pérdida con respecto a cada parámetro de ponderación y sesgo de la red, podemos minimizar la función de pérdida (y, por lo tanto, optimizar el modelo) utilizando el descenso de gradiente para actualizar los parámetros del modelo.

Descendiendo (bajando) el gradiente de la función de pérdida disminuirá la pérdida. Dado que el gradiente que calculamos durante la retropropagación contiene las derivadas parciales de cada parámetro del modelo, sabemos en qué dirección "escalonar" cada uno de nuestros parámetros para reducir la pérdida.

Cada paso refleja el "aprendizaje" del modelo a partir de sus datos de entrenamiento. Nuestro objetivo es actualizar iterativamente las ponderaciones hasta que hayamos alcanzado el gradiente mínimo. El objetivo de los algoritmos de descenso de gradiente es encontrar los ajustes de parámetros específicos que nos moverán hacia abajo en el gradiente de la manera más eficiente.

Índice de aprendizaje

El tamaño de cada paso es un hiperparámetro ajustable, llamado tasa de aprendizaje. Elegir la velocidad de aprendizaje adecuada es importante para una formación eficiente y eficaz.

Recuerde que las funciones de activación en una red neuronal son no lineales. Algunos gradientes pueden tener aproximadamente forma de U: dar un paso en una dirección hace bajar la pendiente, pero seguir dando pasos en esa dirección hará que suba la pendiente.

Una baja tasa de aprendizaje garantiza que siempre avancemos en la dirección correcta, pero calcular tantos cambios lleva mucho tiempo y es costoso desde el punto de vista computacional. Una tasa de aprendizaje alta es computacionalmente eficiente, pero corre el riesgo de superar el mínimo.

Tamaño de lote

Otra consideración en el descenso de gradiente es con qué frecuencia se deben actualizar las ponderaciones. Una opción es calcular los gradientes para cada ejemplo en el conjunto de datos de entrenamiento y, a continuación, tomar un promedio de esos gradientes y usarlo para actualizar los parámetros. El proceso se repite de forma iterativa en una serie de épocas de entrenamiento hasta que la tasa de error se estabiliza. Este método es el descenso de gradiente por lotes.

Cuando el conjunto de datos de entrenamiento es muy grande, como suele ocurrir en el deep learning, el descenso de gradientes por lotes implica tiempos de procesamiento prohibitivos. Calcular los gradientes de millones de ejemplos para cada iteración de actualizaciones de ponderación se vuelve ineficiente. En el descenso en gradiente estocástico (SGD), cada época utiliza un único ejemplo de entrenamiento para cada paso. Aunque las pérdidas pueden fluctuar de una época a otra, rápidamente convergen hacia el mínimo a lo largo de muchas actualizaciones.

El descenso de gradiente de minilotes representa un enfoque intermedio. Los ejemplos de entrenamiento se muestrean al azar en lotes de tamaño fijo y, a continuación, sus gradientes se calculan y se promedian juntos. Esto mitiga los requisitos de almacenamiento de memoria del descenso del gradiente por lotes, al tiempo que reduce la inestabilidad relativa de SGD.

Soluciones relacionadas
IBM watsonx.ai

Entrene, valide, ajuste e implemente IA generativa, modelos fundacionales y capacidades de machine learning con IBM watsonx.ai, un estudio empresarial de nueva generación para desarrolladores de IA. Cree aplicaciones de IA en menos tiempo y con menos datos.

Descubra watsonx.ai
Soluciones de inteligencia artificial

Ponga la IA a trabajar en su negocio con la experiencia líder en IA del sector de IBM y junto a su cartera de soluciones.

Explore las soluciones de IA
Consultoría y servicios de IA

Reinvente las operaciones y flujos de trabajo críticos añadiendo IA para maximizar las experiencias, la toma de decisiones en tiempo real y el valor empresarial.

Explore los servicios de IA
Dé el siguiente paso

Obtenga acceso único a capacidades que abarcan el ciclo de vida de desarrollo de la IA. Produzca potentes soluciones de IA con interfaces intuitivas, flujos de trabajo y acceso a API y SDK estándar del sector.

Explore watsonx.ai Solicite una demostración en directo
Notas a pie de página


¹ "Deep Learning". Goodfellow et al. MIT Press. 2016.