En el aprendizaje automático , el término tensor se refiere informalmente a dos conceptos diferentes para organizar y representar datos. Los datos pueden organizarse en una matriz multidimensional ( matriz de M -way), informalmente denominada "tensor de datos"; sin embargo, en el sentido matemático estricto, un tensor es un mapeo multilineal sobre 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 de M -way ("tensor de datos"), pueden analizarse mediante redes neuronales artificiales o métodos tensoriales . [1] [2] [3] [4] [5]
La descomposición de tensores factoriza los 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 crucial de la retropropagación , se puede realizar utilizando bibliotecas de software como PyTorch y TensorFlow . [8] [9]
Los cálculos suelen realizarse en unidades de procesamiento gráfico (GPU) que utilizan CUDA y en hardware dedicado, como la unidad de procesamiento Tensor de Google o el núcleo Tensor de Nvidia . Estos avances 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 las estadísticas utilizaban métodos tensoriales. Pierre Comon analiza la adopción temprana de métodos tensoriales en los campos de las telecomunicaciones, la vigilancia por radio, la quimiometría y el procesamiento de sensores. Los métodos de rango tensorial lineal (como Parafac/CANDECOMP) analizaron matrices de M-way ("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. Señaló 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] se trasladaron 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 Multilinear Projection. [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 estadísticas de segundo orden [14] o 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 de subespacios multilineales. [19] Al tratar una imagen o un video 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 discuten 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 a través de Word2vec . [5] Por lo tanto, 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 Sutskever introdujo la factorización tensorial agrupada bayesiana para modelar conceptos relacionales al tiempo que reducía 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 el número de pesos de las redes neuronales. [26] [27] Lebedev et al. aceleraron las redes CNN para la clasificación de caracteres (el reconocimiento de letras y dígitos en imágenes) utilizando tensores de kernel 4D. [28]
Sea un cuerpo 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 la única forma) de 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 incorporarse en un tensor de modo 2 como
Una imagen en color con 3 canales para RGB podría estar incrustada 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 . De este modo, se convierte en un tensor de modo 1.
La incorporación de la semántica de sujeto-objeto-verbo requiere la incorporación de relaciones entre tres palabras. Como una palabra es en sí misma un vector, la semántica de sujeto-objeto-verbo podría expresarse utilizando tensores de modo 3
En la práctica, el diseñador de redes neuronales se ocupa principalmente de la especificación de las incrustaciones, la conexión de las capas tensoriales y las operaciones que se realizan sobre ellas en una red. Los marcos de aprendizaje automático modernos gestionan la optimización, la factorización tensorial y la retropropagación de forma automática.
Los tensores pueden usarse 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 una unidad de capa única 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 de es un escalar, entonces tenemos la definición clásica de una red neuronal artificial . Al reemplazar cada componente unitario con un tensor, la red puede expresar datos de mayor dimensión, 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, estas estructuras de red permiten el aprendizaje de tipos de datos complejos.
Los tensores también se pueden utilizar para calcular las capas de una red neuronal totalmente conectada, donde el tensor se aplica a toda la capa en lugar de a valores unitarios individuales.
El valor de salida de una unidad de capa única 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 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 de tensores (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 al asignar las unidades y los pesos a los tensores.
Una reformulación diferente de las redes neuronales permite que los tensores expresen las capas de convolución 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 pasarlas a la siguiente capa. Un uso típico es realizar la detección o el aislamiento de características en el reconocimiento de imágenes.
La convolución suele calcularse como la multiplicación de una señal de entrada por un núcleo de filtro . En dos dimensiones, la forma discreta y finita es:
¿Dónde está el ancho del núcleo?
Esta definición puede reformularse 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, los datos y el núcleo. 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 de convolución 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 en el aprendizaje automático es la capacidad de factorizar tensores para descomponer los datos en factores constituyentes o reducir los parámetros aprendidos. Las técnicas de modelado de tensores de datos se derivan de la descomposición tensorial lineal (descomposición CANDECOMP/Parafac) y las descomposiciones tensoriales 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 del 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
El número de elementos del original es 144, lo que da como resultado 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 de modo 3 dado aquí. [5]
Otra técnica para descomponer tensores reescribe el tensor inicial como una secuencia (tren) de tensores de menor tamaño. Un tren de tensores (TT) es una secuencia de tensores de rango reducido, llamados factores canónicos . El tensor original se puede expresar como la suma-producto 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 superiores.
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, al tiempo que siguen siendo robustas y eficientes. [31]
Estos avances están afectando a todas las áreas del aprendizaje automático, como la minería y 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 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, el entrenamiento es costoso de 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 paralelo CUDA. [36] CUDA y, por lo tanto, cuDNN se ejecutan en GPU dedicadas que implementan paralelismo masivo unificado en hardware. Estas GPU aún no eran chips dedicados para tensores, sino hardware existente adaptado para computación paralela en 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 los productos tensoriales. Específicamente, implementan una matriz de 65,536 unidades de multiplicación que pueden realizar una suma-producto de matrices de 256x256 en solo un ciclo de instrucción global. [38]
Más tarde, en 2017, Nvidia lanzó su propio núcleo Tensor con la arquitectura de GPU Volta. Cada núcleo Tensor es una microunidad que puede realizar una suma-producto de matriz 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 con respecto a las GPU Tesla anteriores. [40] La cantidad de núcleos tensoriales aumenta a medida que la cantidad de núcleos y unidades SM continúa creciendo en cada nueva generación de tarjetas.
El desarrollo del hardware de 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, el modelo Alpaca 2023 de Stanford, 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 chatbot ampliamente popular ChatGPT está construido sobre GPT-3.5 (y después de una actualización GPT-4 ) utilizando aprendizaje supervisado y de refuerzo.