Tensor se refiere informalmente en el aprendizaje automático a dos conceptos diferentes que organizan y representan datos. Los datos se pueden organizar en una matriz multidimensional ( matriz de M vías) a la que se hace referencia informalmente como "tensor de datos"; sin embargo, en sentido matemático estricto, un tensor es un mapeo multilineal de un conjunto de espacios vectoriales de dominio a un espacio vectorial de rango. Las observaciones, como imágenes, películas, volúmenes, sonidos y relaciones entre palabras y conceptos, almacenadas en una matriz M ("tensor de datos") pueden analizarse mediante redes neuronales artificiales o métodos tensoriales . [1] [2] [3] [4] [5]
La descomposición de tensores puede factorizar tensores de datos en tensores más pequeños. [1] [6] Las operaciones con tensores de datos se pueden expresar en términos de multiplicación de matrices y el producto de Kronecker . [7] El cálculo de gradientes, un aspecto importante del algoritmo de retropropagación , se puede realizar utilizando PyTorch y TensorFlow . [8] [9]
Los cálculos a menudo se realizan en unidades de procesamiento de gráficos (GPU) que utilizan CUDA y en hardware dedicado, como la Unidad de procesamiento Tensor de Google o el núcleo Tensor de Nvidia . Estos desarrollos han acelerado enormemente las arquitecturas de redes neuronales y han aumentado el tamaño y la complejidad de los modelos que se pueden entrenar.
Un tensor es, por definición, un mapa multilineal. En matemáticas, esto puede expresar una relación multilineal entre conjuntos de objetos algebraicos. En física, los campos tensoriales , considerados como tensores en cada punto del espacio, son útiles para expresar mecánicas como la tensión o la elasticidad . En el aprendizaje automático, el uso exacto de los tensores depende del enfoque estadístico que se utilice.
En 2001, el campo del procesamiento de señales y la estadística utilizaba métodos tensoriales. Pierre Comon analiza la adopción temprana de métodos tensoriales en los campos de las telecomunicaciones, la radiovigilancia, la quimiometría y el procesamiento de sensores. Los métodos de rango de tensor lineal (como Parafac/CANDECOMP) analizaron matrices de M vías ("tensores de datos") compuestas de estadísticas de orden superior que se emplearon en problemas de separación ciega de fuentes para calcular un modelo lineal de los datos. Notó varias limitaciones tempranas en la determinación del rango tensorial y la descomposición eficiente del rango tensorial. [10]
A principios de la década de 2000, los métodos tensoriales multilineales [1] [11] pasaron a la visión por computadora, los gráficos por computadora y el aprendizaje automático con artículos de Vasilescu o en colaboración con Terzopoulos, como Human Motion Signatures, [12] [13] TensorFaces [14 ] [15] TensorTexures [16] y Proyección Multilineal. [17] [18] El álgebra multilineal, el álgebra de tensores de orden superior, es un marco adecuado y transparente para analizar la estructura multifactorial de un conjunto de observaciones y para abordar el difícil problema de desenredar los factores causales basados en el segundo orden [14 ] o estadísticas de orden superior asociadas con cada factor causal. [15]
El análisis factorial tensorial (multilineal) desenreda y reduce la influencia de diferentes factores causales con el aprendizaje subespacial multilineal. [19] Cuando se trata una imagen o un vídeo como una matriz de 2 o 3 vías, es decir, "matriz de datos/tensor", los métodos tensoriales reducen las redundancias espaciales o temporales como lo demostraron Wang y Ahuja. [20]
Yoshua Bengio, [21] [22] Geoff Hinton [23] [24] y sus colaboradores analizan brevemente la relación entre las redes neuronales profundas y el análisis factorial tensorial [14] [15] más allá del uso de matrices M-way ("tensores de datos ") como entradas. Uno de los primeros usos de los tensores para redes neuronales apareció en el procesamiento del lenguaje natural . Una sola palabra se puede expresar como un vector mediante Word2vec . [5] Así, una relación entre dos palabras se puede codificar en una matriz. Sin embargo, para relaciones más complejas como sujeto-objeto-verbo, es necesario construir redes de dimensiones superiores. En 2009, el trabajo de Sutsekver introdujo la factorización de tensores agrupados bayesianos para modelar conceptos relacionales al tiempo que se reduce el espacio de parámetros. [25] De 2014 a 2015, los métodos tensoriales se volvieron más comunes en las redes neuronales convolucionales (CNN). Los métodos tensoriales organizan los pesos de las redes neuronales en un "tensor de datos", analizan y reducen la cantidad de pesos de las redes neuronales. [26] [27] Lebedev et al. Redes CNN aceleradas para la clasificación de caracteres (el reconocimiento de letras y dígitos en imágenes) mediante el uso de tensores de kernel 4D. [28]
Sea un campo como los números reales o los números complejos . Un tensor es una matriz sobre :
Aquí, y son números enteros positivos, y es el número de dimensiones, número de formas o modo del tensor. [5]
Un enfoque básico (no el único) para utilizar tensores en el aprendizaje automático es incorporar varios tipos de datos directamente. Por ejemplo, una imagen en escala de grises, comúnmente representada como una función 2D discreta con resolución, puede incrustarse en un tensor de modo 2 como
Una imagen en color con 3 canales para RGB podría incrustarse en un tensor de modo 3 con tres elementos en una dimensión adicional:
En el procesamiento del lenguaje natural, una palabra puede expresarse como un vector mediante el algoritmo Word2vec . Se convierte así en un tensor de modo 1.
La incorporación de la semántica sujeto-objeto-verbo requiere relaciones entre tres palabras. Debido a que una palabra es en sí misma un vector, la semántica sujeto-objeto-verbo podría expresarse usando tensores de modo 3.
En la práctica, el diseñador de redes neuronales se ocupa principalmente de la especificación de incrustaciones, la conexión de capas tensoriales y las operaciones realizadas sobre ellas en una red. Los marcos modernos de aprendizaje automático gestionan la optimización, la factorización del tensor y la retropropagación automáticamente.
Los tensores se pueden utilizar como valores unitarios de redes neuronales que extienden el concepto de valores escalares, vectoriales y matriciales a múltiples dimensiones.
El valor de salida de la unidad de una sola capa es la suma del producto de sus unidades de entrada y los pesos de conexión filtrados a través de la función de activación :
dónde
Si cada elemento de salida es un escalar, entonces tenemos la definición clásica de red neuronal artificial . Al reemplazar cada componente de la unidad con un tensor, la red puede expresar datos de dimensiones superiores, como imágenes o videos:
Este uso de tensores para reemplazar valores unitarios es común en redes neuronales convolucionales donde cada unidad puede ser una imagen procesada a través de múltiples capas. Al incorporar los datos en tensores, dichas estructuras de red permiten el aprendizaje de tipos de datos complejos.
Los tensores también se pueden usar para calcular las capas de una red neuronal completamente conectada, donde el tensor se aplica a toda la capa en lugar de valores unitarios individuales.
El valor de salida de la unidad de una sola capa es la suma del producto de sus unidades de entrada y los pesos de conexión filtrados a través de la función de activación :
Los vectores y de los valores de salida se pueden expresar como tensores de modo 1, mientras que los pesos ocultos se pueden expresar como tensores de modo 2. En este ejemplo, los valores unitarios son escalares, mientras que el tensor adquiere las dimensiones de las capas de la red:
En esta notación, los valores de salida se pueden calcular como un producto tensorial de los tensores de entrada y peso:
que calcula el producto suma como una multiplicación tensorial (similar a la multiplicación de matrices).
Esta formulación de tensores permite calcular de manera eficiente toda la capa de una red completamente conectada asignando las unidades y pesos a los tensores.
Una reformulación diferente de las redes neuronales permite que los tensores expresen las capas convolucionales de una red neuronal. Una capa convolucional tiene múltiples entradas, cada una de las cuales es una estructura espacial como una imagen o un volumen. Las entradas se convolucionan mediante filtrado antes de pasar a la siguiente capa. Un uso típico es realizar detección o aislamiento de características en el reconocimiento de imágenes.
La convolución a menudo se calcula como la multiplicación de una señal de entrada con un núcleo de filtro . En dos dimensiones, la forma finita y discreta es:
¿Dónde está el ancho del núcleo?
Esta definición se puede reformular como un producto matriz-vector en términos de tensores que expresan el núcleo, los datos y la transformada inversa del núcleo. [29]
donde y son la transformada inversa, datos y kernel. La derivación es más compleja cuando el núcleo de filtrado también incluye una función de activación no lineal como sigmoide o ReLU.
Los pesos ocultos de la capa convolucional son los parámetros del filtro. Estos se pueden reducir con una capa de agrupación que reduce la resolución (tamaño) de los datos y también se pueden expresar como una operación tensorial.
Una contribución importante de los tensores al aprendizaje automático es la capacidad de factorizar tensores para descomponer datos en factores constituyentes o reducir los parámetros aprendidos. Las técnicas de modelado de tensores de datos surgen de la descomposición de tensores lineales (descomposición CANDECOMP/Parafac) y de las descomposiciones de tensores multilineales (Tucker).
La descomposición de Tucker , por ejemplo, toma una matriz de 3 vías y descompone el tensor en tres matrices y un tensor más pequeño . La forma de las matrices y el nuevo tensor son tales que se reduce el número total de elementos. Los nuevos tensores tienen formas.
Entonces el tensor original se puede expresar como el producto tensorial de estos cuatro tensores:
En el ejemplo que se muestra en la figura, las dimensiones de los tensores son
El número total de elementos en la factorización de Tucker es
La cantidad de elementos en el original es 144, lo que resulta en una reducción de datos de 144 a 110 elementos, una reducción del 23% en los parámetros o el tamaño de los datos. Para tensores iniciales mucho más grandes, y dependiendo del rango (redundancia) del tensor, las ganancias pueden ser más significativas.
El trabajo de Rabanser et al. proporciona una introducción a los tensores con más detalles sobre la extensión de la descomposición de Tucker a N dimensiones más allá del ejemplo del modo 3 que se proporciona aquí. [5]
Otra técnica para descomponer tensores reescribe el tensor inicial como una secuencia (tren) de tensores de menor tamaño. Un tren tensorial (TT) es una secuencia de tensores de rango reducido, llamados factores canónicos . El tensor original se puede expresar como el producto suma de la secuencia.
Desarrollada en 2011 por Ivan Oseledts, el autor observa que la descomposición de Tucker es "adecuada para dimensiones pequeñas, especialmente para el caso tridimensional. Para d grandes no es adecuada". [30] Por lo tanto, los trenes tensoriales se pueden utilizar para factorizar tensores más grandes en dimensiones más altas.
La arquitectura de datos unificada y la diferenciación automática de tensores han permitido diseños de aprendizaje automático de nivel superior en forma de gráficos tensoriales. Esto conduce a nuevas arquitecturas, como las redes convolucionales de gráficos tensoriales (TGCN), que identifican asociaciones altamente no lineales en los datos, combinan múltiples relaciones y escalan con elegancia, sin dejar de ser sólidas y eficaces. [31]
Estos desarrollos están impactando todas las áreas del aprendizaje automático, como la minería y la agrupación de textos, los datos que varían en el tiempo y las redes neuronales en las que los datos de entrada son un gráfico social y los datos cambian dinámicamente. [32] [33] [34] [35]
Los tensores proporcionan una forma unificada de entrenar redes neuronales para conjuntos de datos más complejos. Sin embargo, la formación es costosa para calcular en hardware de CPU clásico.
En 2014, Nvidia desarrolló cuDNN, CUDA Deep Neural Network, una biblioteca para un conjunto de primitivas optimizadas escritas en el lenguaje CUDA paralelo. [36] CUDA y, por tanto, cuDNN se ejecutan en GPU dedicadas que implementan un paralelismo masivo unificado en el hardware. Estas GPU aún no eran chips dedicados a tensores, sino hardware existente adaptado para la computación paralela en el aprendizaje automático.
En el período 2015-2017, Google inventó la Unidad de Procesamiento Tensorial (TPU). [37] Las TPU son unidades de hardware dedicadas y de función fija que se especializan en las multiplicaciones de matrices necesarias para productos tensoriales. Específicamente, implementan una matriz de 65,536 unidades multiplicadoras que pueden realizar una suma-producto matricial de 256x256 en solo un ciclo de instrucción global. [38]
Más tarde, en 2017, Nvidia lanzó su propio Tensor Core con la arquitectura Volta GPU. Cada Tensor Core es una microunidad que puede realizar una matriz suma-producto de 4x4. Hay ocho núcleos tensoriales para cada bloque de memoria compartida (SM). [39] La primera tarjeta GPU GV100 tiene 108 SM, lo que da como resultado 672 núcleos tensoriales. Este dispositivo aceleró el aprendizaje automático 12 veces más que las GPU Tesla anteriores. [40] El número de núcleos tensoriales aumenta a medida que el número de núcleos y unidades SM continúa creciendo en cada nueva generación de tarjetas.
El desarrollo de hardware GPU, combinado con la arquitectura unificada de núcleos tensoriales, ha permitido el entrenamiento de redes neuronales mucho más grandes. En 2022, la red neuronal más grande fue PaLM de Google con 540 mil millones de parámetros aprendidos (pesos de red) [41] (el modelo de lenguaje GPT-3 más antiguo tiene más de 175 mil millones de parámetros aprendidos que producen texto similar al humano; el tamaño no lo es todo, según Stanford El modelo Alpaca 2023, mucho más pequeño, afirma ser mejor, [42] habiendo aprendido del modelo LLaMA 2023 de Meta/Facebook , la variante más pequeña de 7 mil millones de parámetros). El popular chatbot ChatGPT está construido sobre GPT-3.5 (y después de una actualización GPT-4 ) utilizando aprendizaje supervisado y reforzado.