Modelo de lenguaje Performer: un marco de atención general basado en la arquitectura Transformer
- Interpretación del papel del intérprete.
- Complejidad temporal de la atención.
- Evite el cuello de botella de Softmax
- Encuentre el kernel Softmax a través del kernel gaussiano
- Buscando un kernel Softmax más estable
- Encuentre Q' y V' usando la función del kernel Softmax
- Resumir
- Disponibilidad de código
- Link de referencia
Performer es una arquitectura de red neuronal para procesar eficientemente el mecanismo de autoatención (Self-Attention) . Los mecanismos de autoatención han logrado excelentes resultados en muchas tareas de procesamiento del lenguaje natural y visión por computadora, pero tienen problemas cuando procesan secuencias largas porque su complejidad computacional es proporcional al cuadrado de la longitud de la secuencia. Para resolver estos problemas, Google AI presenta Performer, una arquitectura Transformer con escalabilidad lineal y su mecanismo de atención es linealmente escalable . El marco se implementa a través del algoritmo (FAVOR+), que proporciona estimaciones escalables, de baja varianza e imparciales que pueden expresar mecanismos de atención representados por la descomposición estocástica de mapas de características (en particular, atención softmax convencional
Fast Attention Via Positive Orthogonal Random Features
)
.
Este mapeo ayuda a mantener la complejidad del espacio y el tiempo lineal.
La idea central de Performer es utilizar una aproximación de bajo rango para reemplazar la matriz de autoatención tradicional totalmente conectada, reduciendo así la complejidad computacional . Específicamente, Performer utiliza las siguientes técnicas clave:
- Atención rápida : en el mecanismo tradicional de autoatención, es necesario calcular los pesos de atención entre todas las posiciones , lo que da como resultado una complejidad computacional de O (n 2) O(n^2)O ( n.2 ), dondennn es la longitud de la secuencia. Performerreduce esta complejidad computacional aO ( n ) O(n)introduciendo una matriz de proyección aleatoria fija.O ( n ) . Esta técnica hace que la complejidad temporal del cálculo de la autoatención esté relacionada linealmente con la longitud de la secuencia, en lugar de cuadráticamente.
- Características aleatorias ortogonales : Performer utiliza características aleatorias ortogonales , que pueden mejorar aún más la eficiencia computacional mientras se mantiene el rendimiento del modelo. Estas características pueden hacer que el cálculo de la matriz de proyección sea más eficiente.
- Memoria eficiente : Performer también propone una variante de memoria eficiente que puede manejar secuencias largas sin estar restringido por límites de memoria. Este método se implementa calculando la matriz de autoatención en bloques .
- Asintóticas favorables : en comparación con la autoatención estándar, Performer tiene una mejor complejidad computacional asintótica a medida que aumenta la longitud de la secuencia , lo que significa que tiene una clara ventaja al procesar secuencias largas.
En general, el algoritmo Performer mejora significativamente la eficiencia computacional de los modelos de autoatención al introducir características aleatorias y aproximación de rango bajo , así como algunas otras técnicas, lo que permite aplicarlas a secuencias más largas sin sacrificar el rendimiento del modelo . Esto le otorga un amplio potencial para aplicaciones en el procesamiento del lenguaje natural y otros campos.
Interpretación del papel del intérprete.
Resumen del artículo : Presentamos Performer, una arquitectura Transformer que estima con precisión los Transformers con atención regular (softmax) de rango completo, pero utilizando solo complejidad de espacio y tiempo lineal (en lugar de complejidad cuadrática) y sin estar sujeto a condiciones previas, como escasez o bajo rango. Para aproximar el núcleo de atención softmax, los artistas intérpretes o ejecutantes utilizan una novedosa atención rápida a través del método de características aleatorias ortogonales positivasFAVOR+
( ), que puede ser de interés independiente para los métodos de núcleo escalables. FAVOR+ también se puede utilizar para modelar eficientemente mecanismos de atención kernelizables más allá de softmax. Esta capacidad de representación es crucial para comparar con precisión softmax con otras funciones del kernel por primera vez en tareas a gran escala, lo que está más allá del alcance de los Transformers convencionales y también permite el estudio de funciones del kernel de atención óptima. Los ejecutantes son arquitecturas lineales que son totalmente compatibles con los Transformers normales y tienen sólidas garantías teóricas: estimación imparcial o casi imparcial de la matriz de atención, convergencia uniforme y baja varianza de estimación. Probamos a los artistas intérpretes o ejecutantes en un amplio conjunto de tareas, desde la predicción de píxeles hasta el modelado de texto y el modelado de secuencias de proteínas, logrando resultados competitivos que superaron a otros métodos de atención densa y dispersa eficientes y comprobados, lo que demuestra la eficacia de los artistas intérpretes o ejecutantes del novedoso paradigma de aprendizaje atencional utilizado.
En palabras humanas : Performer es una arquitectura Transformer y su mecanismo de atención se puede expandir linealmente, por un lado, permite que el modelo se entrene más rápido y, por otro lado, también permite que el modelo procese secuencias de entrada más largas. Esto es ciertamente excelente para ciertos conjuntos de datos de imágenes (como ImageNet64) y conjuntos de datos de texto (como PG-19). Performer utiliza un marco de atención general eficiente (lineal) en el que se pueden implementar varios mecanismos de atención utilizando diferentes medidas de similitud (es decir, varios métodos del núcleo). El marco se FAVOR+
implementa mediante el algoritmo (Atención rápida a través de características aleatorias ortogonales positivas, Atención rápida a través de características aleatorias ortogonales), que proporciona un mecanismo de atención de estimación escalable, de baja varianza e imparcial que se puede descomponer mediante mapas de características aleatorias. Este método garantiza, por un lado, complejidad lineal en el espacio y el tiempo, y precisión, por otro. Además, este método se puede utilizar solo para operaciones softmax y también se puede utilizar junto con otras técnicas, como las capas reversibles.
Para aplicaciones que requieren atención a larga distancia, algunos investigadores han propuesto algunos métodos rápidos y que ahorran espacio, entre los cuales el método más común es la atención escasa .
Figura: Técnica de dispersión estándar.
Sin embargo, los métodos de atención escasa también tienen algunas limitaciones . Primero, requieren operaciones eficientes de multiplicación de matrices dispersas , que no todos los aceleradores pueden hacer; segundo, generalmente no pueden proporcionar garantías teóricas estrictas para sus capacidades de representación ; tercero, están dirigidos principalmente a modelos Transformer y predicciones generadas. entrenamiento para optimizar; finalmente, Por lo general, acumulan más capas de atención para compensar la escasa representación , lo que dificulta su uso con otros modelos previamente entrenados, requiere reentrenamiento y consume mucha energía.
Además, los escasos mecanismos de atención suelen ser insuficientes para resolver todos los problemas que surgen al aplicar métodos de atención convencionales, como las redes de punteros. También hay algunas operaciones que no se pueden dispersar, como la operación softmax de uso común.
Mecanismo de Atención Regular
En el mecanismo de atención convencional, la Consulta y la Clave correspondientes a las filas y columnas de la matriz se multiplican y luego se calcula la matriz de puntuación de atención a través de Softmax. La fórmula es la siguiente:
Atención ( Q , K , V ) = softmax ( QKT d ) V \text{Atención}(Q,K,V)=\text{softmax}(\frac{QK^T}{\sqrt {d} })VAtención ( Q ,k ,V )=softmax (dq kt) V
enQ , K , VQ, K, VP ,k ,V (las dimensiones sonL × d L \times dl×d ) son las matrices de consultas, claves y valores respectivamente. LLL es la longitud de la oración,ddd es la dimensión (arbitraria) de los vectores de consultas, claves y valores. El problema con Transformer viene de la función softmax, veamos por qué.
Este método no puede descomponer la clave de consulta en la operación softmax no lineal y descomponer el resultado nuevamente en la clave y la consulta originales , pero puede descomponer la matriz de atención en el producto de la función no lineal aleatoria de la consulta y la clave originales , que es la las llamadas características aleatorias ( ) para que la información de similitudrandom features
se pueda codificar de manera más eficiente . La matriz de atención estándar incluye el coeficiente de similitud de cada par de entradas, que consta de cálculos de softmax en la consulta y la clave, representados por q y k.
La atención softmax regular puede verse como un caso especial de funciones no lineales definidas por funciones exponenciales y proyecciones gaussianas . Aquí también podemos razonar a la inversa, implementando primero algunas funciones no lineales más generalizadas que definen implícitamente otros tipos de medidas de similitud o funciones del núcleo en los resultados de la clave de consulta . Los investigadores lo definieron como atención universal ( ) basándose en el método del núcleo inicial . Aunque no existen soluciones de forma cerrada para la mayoría de las funciones del kernel, este mecanismo aún se puede aplicar porque no depende de soluciones de forma cerrada.generalized attention
El artículo demuestra por primera vez que en la aplicación de Transformer aguas abajo, cualquier matriz de atención se puede aproximar de manera efectiva a través de características aleatorias . Un nuevo mecanismo para lograr esto utiliza positive random features
(características aleatorias directas), que son funciones no lineales positivas de la consulta y la clave originales. Esto evita la inestabilidad durante el entrenamiento y logra una aproximación más precisa a la atención normal de softmax.
FAVOR+: Atención rápida mediante correlación matricial
A través de la descomposición anterior, se puede obtener la matriz de atención implícita de complejidad espacial lineal (en lugar de cuadrática) . De manera similar, se puede obtener un mecanismo de atención en tiempo lineal mediante descomposición. La forma original es multiplicar la matriz de atención con el valor de entrada para obtener el resultado final, pero después de descomponer la matriz de atención , la multiplicación de la matriz se puede reorganizar para aproximar los resultados del mecanismo de atención convencional sin construir explícitamente una matriz de atención de tamaño cuadrático. . Finalmente se generó un nuevo algoritmo FAVOR+
.
Figura: Aproximación del mecanismo de atención regular AV mediante mapas de características (aleatorios) (en D − 1 D^{−1}D− 1 antes de la normalización). Los bloques discontinuos representan el orden de los cálculos, junto con la complejidad temporal correspondiente. Izquierda: cálculo del módulo de atención estándar, donde el resultado final esperado se calcula realizando la multiplicación de matrices con la matriz A y el valor del tensor V; derecha: desacoplando la matriz Q ′ utilizada en la descomposición de rango bajo deAQ ′ yK′ K′K ′ y realizando multiplicaciones de matrices en el orden indicado en el cuadro de puntos, los investigadores obtuvieron una matriz de atención lineal sin construir explícitamenteAAA o su aproximación.
El análisis anterior está relacionado con la atención bidireccional (es decir, atención no causal) y no distingue entre pasado y futuro. Entonces, ¿cómo lograr solo una parte de la secuencia de entrada, es decir, atención causal unidireccional? Simplemente use el cálculo de la suma del prefijo ( prefix-sum computation
) y almacene solo el número total de ejecuciones del cálculo matricial durante el proceso de cálculo , en lugar de almacenar la matriz de atención regular triangular inferior completa .
Figura: Muestra una representación visual del algoritmo de suma de prefijo para atención unidireccional . Para mayor claridad, omitimos la normalización de la atención en esta visualización. Este algoritmo conserva la suma del prefijo, que es una matriz obtenida sumando el producto externo de las características aleatorias correspondientes a las claves y el vector de valores. En cada iteración dada del algoritmo de suma de prefijos, el vector de características aleatorias correspondiente a la consulta se multiplica por la suma de prefijos más cercana (obtenida sumando los productos externos correspondientes a todos los tokens anteriores), lo que da como resultado la salida del mecanismo de atención . AVNueva fila de AV (nueva fila). Es decir,el mapeo aleatorio de características del vector clave y el vector de valor se produce externamente para obtener la suma del prefijo, y este proceso se construye dinámicamente. Finalmente, el vector de características aleatorias se deja multiplicado por la consulta para obtener una nueva fila en la matriz final. AAa la izquierdaA significa que la atención unidireccional estándar requiere una matriz de atención de máscara para obtener su parte triangular inferior.
Complejidad temporal de la atención.
Para revisar, las dimensiones son n × mn\times mnorte×m ym × pm\veces pmetro×La complejidad temporal de multiplicar dos matrices de p es O (nmp) O(nmp)O ( nm p ) . Si miramos la ecuación de atención, vemos que estamos multiplicando tres matrices:QQQ (la dimensión esL × d L\times dl×d ),KTK^TkT (la dimensión esd × L d\times Ld×L ) yVVV (dimensiónL × d L\times dl×d ). Obtendremos diferentes complejidades según el orden en que las multipliquemos. Ignore softmax y el denominadord \sqrt{d}d(que es solo un escalar), podemos ver: Primero por QKT QK^Tq kEl producto de T nos daO ( L 2 d ) O(L^2d)O ( L2d )complejidad, si dejamosKTVK^TVkPrimero se multiplica TV y obtenemosO(d^2L)O ( re2 L)complejidad.
Obviamente, deberíamos elegirO ( d 2 L ) O(d^2L)O ( re2 L), porqueddd es un parámetro que podemos elegir y podemos tenerd < L d < Ld<L._ _ Sin embargo, en realidad no podemos hacer las multiplicaciones en este orden porqueQKT QK^Tq kT está "atascado" dentro del softmax y no hay una manera fácil de sacarlo. Esto significa que tenemos que lidiar conO ( L 2 d ) O(L^2d)O ( L2 d), que tiene una longitud de secuencia cuadrática (por lo que procesar secuencias más largas se vuelve cada vez más costoso desde el punto de vista computacional). Por lo tanto, softmax es el cuello de botella de los transformadores y nos gustaría encontrar una manera de resolver este problema.
Evite el cuello de botella de Softmax
A alto nivel, el enfoque propuesto en este artículo es muy simple. ¿ Podemos encontrar una manera de aproximar softmax que nos permita elegir el orden en el que se calculan las matrices? Básicamente, queremos encontrar alguna matriz Q ′ Q'q′ yK ′ K'k′ , satisfaciendoQ ′ K ′ ≈ softmax ( QKT / d ) Q'K'\approx \text{softmax}(QK^T/\sqrt{d})q′ k′≈softmax ( QK _t /d) El objetivo es simple, pero los detalles de cómo lograrlo son un poco más complicados.
Primero, recordemos que softmax es una función dada una longitud de nnVectorz \mathbf{z} de nz , todos los elementoszi \mathbf{z}_izyo归一化的:σ ( z ) i = ezi ∑ j = 1 nezj \sigma (\mathbf{z} )_i=\frac{e^{z_i}}{\sum j=\mathbf{1}^ne^ {z_j} }σ ( z )yo=∑j=1es decir _zjmizyoDado esto, tenga en cuenta que podemos reescribir softmax en la ecuación de atención como : softmax ( QKT d ) = D − 1 A \text{softmax}(\frac{QK^T}{\sqrt{d}}) =D^{ -1}Asoftmax (dq kt)=D− 1 AdondeA = exp ( QKT / d ) A=exp(QK^T/\sqrt{d})A=e x p ( Q Kt /d),D = diag ( A 1 L ) D=\text{diag}(A\mathbf{1}_L)D=diagnóstico ( A 1L) , diag convierte un vector de entrada en una matriz diagonal,1 L \mathbf{1}_L1LEntonces es una longitud de LLL es un vector de todos los unos. Esa es la fórmula (1) del artículo:
donde el exponencial enAAA se aplica elemento por elemento,DDD es la matriz diagonal con elementosA 1 LA\mathbf{1}_Lun 1L。diagonal ( A 1 L ) \text{diagonal}(A\mathbf{1}_L)diagnóstico ( A 1L) es para suma,D − 1 D^{-1}D− 1 convierte estas sumas en recíprocas, por lo queD − 1 AD^{-1}AD− 1 Aseguido desoftmax ( QKT / dk ) \text{softmax}(QK^T/\sqrt{d_k})softmax ( QK _t /dk) son equivalentes. De hecho,A 1 LA\mathbf{1}_Lun 1LSólo una longitud de LLel vector de L , que pasa por el parAASe obtiene sumando las columnas de A.
Nota: AAEl exponencial de elementos de A es el verdadero problema aquí, por lo que nuestro objetivo es factorizarlo de alguna manera. Podemos ignorar el denominador escalard \sqrt{d}dPorque solo se usa para la normalización, pero podemos normalizar consultas y claves de manera equivalente. Esto significa que nuestro objetivo es encontrar algo de Q′ Q′q′ yK ′ K'k′,满足:Q ′ K ′ ≈ exp ( QKT ) Q'K'\approx \text{exp}(QK^T)q′ k′≈exp ( QK _T )
Encuentre el kernel Softmax a través del kernel gaussiano
En la fórmula anterior, AAA es el producto de dos matrices divididas por una constante y luego se realiza una operación exponencial para obtener una matriz de atención. Aquí se introduce el método del kernel para aproximar esta matriz de atención A. Aquí es donde entra en juego el enfoque nuclear.
El método específico es el siguiente:
sabemos que los núcleos son equivalentes a un determinado mapa de características (mapa de características) φ \varphiFunciones del producto escalar de φ . ParaQQQ yKKCualquier vectorqi q_i en Kqyoy kj k_jkj, el resultado de su similitud original sin considerar la normalización es exp (qikj) exp(q_ik_j)e x p ( qyokj) . Después de introducir el método del kernel, el método de cálculo se convierte en: K ( x , y ) = E [ ϕ ( x ) T , ϕ ( y ) T ] K(x, y)=\mathbb{E}[\phi(x ) ^T, \phi(y)^T]K ( x ,y )=mi [ ϕ ( x )T ,ϕ ( y )T ]Generalmente, dado un cierto mapa de características de alta dimensiónφ \varphiφ , nos interesa encontrar una función equivalenteKKK , lo que nos permitirá evitarφ \varphiLos cálculos se realizan en el espacio de alta dimensión de φ . Sin embargo, en nuestro caso iríamos en realidad al revés: si asumimosAAA es un elemento que contieneA ( i , j ) = K ( qi , kj ) = exp ( qikj T ) A(i,j)=K(q_i,k_j)=exp(q_ik_j^T)A ( yo ,j )=k ( qyo,kj)=e x p ( qyokjt) (en el queqi q_iqyoy kj k_jkjson qqQ yKKK vector de fila) matriz del núcleo, podemos encontrar un mapa de característicasφ \varphiφ para ayudarnos a descomponerAAA吗? A ( i , j ) = K ( qi , kj ) = exp ( qjkj T ) = ϕ ( qi ) T ϕ ( kj ) \mathbf{A}(i,j)=K(q_i,k_j)= \text{exp}(q_jk_j^T)=\phi(q_i)^T\phi(k_j)A ( yo ,j )=k ( qyo,kj)=exp ( qjkjt)=ϕ ( qyo)T ϕ(kj)
Ahora, la mayoría de los núcleos se pueden representar mediante mapas de características de la forma φ \varphiφ para aproximar:
dondehhh yf 1 , . . . , fl f_1, ..., f_lF1,... ,Fyoson diferentes funciones de mapeo deterministas, w 1 , . . . , wm w_1, ..., w_mw1,... ,wmLuego de una distribución DDSe toman muestras de D , es decir, se distribuyen de forma independiente e idéntica. Por lo tantoφ ( x ) \varphi(x)φ ( x ) es una función conl × ml\times myo×Vector de m elementos.
- Cuando h ( x ) = 1 h(x)=1h ( x )=1 ,l = 1 l=1yo=1 ,D = N (0, I d) D=N(0, I_d)D=norte ( 0 ,Ire) , este núcleo es lo que se llama
PNG-kernel
. - Cuando h ( x ) = 1 h(x)=1h ( x )=1 ,l = 2 l=2yo=2 ,f 1 = pecado f_1=pecadoF1=s en ,f 2 = cos f_2=cosF2=Cuando se trata de cos , es
shift-invariant
el núcleo. En este momento, siD = N ( 0 , I d ) D=N(0, \mathbf{I}_d)D=norte ( 0 ,Ire) , entonces esun núcleo gaussiano.
Es decir, si extraemos w de una distribución normal con media 0 y varianza unitaria, podemos obtener el núcleo gaussiano usando un mapa característico:
ϕ (x) gauss = 1 m (sen (w 1 T x), . . . , sin ( wm T x ) , cos ( w 1 T x ) , . . . , cos ( wm T x ) ) \phi(\mathbf{x})_{gauss}=\frac{1}{\ sqrt{ m}}(\text{sin}(w_1^T\mathbf{x}),...,\text{sin}(w_m^T\mathbf{x}),\text{cos}(w_1^ T\ mathbf{x}),...,\text{cos}(w_m^T\mathbf{x}))ϕ ( x )g a u ss=metro1( pecado ( w1tx ) ,... ,pecado ( wmetrotx ) ,porque ( w1tx ) ,... ,porque ( wmetrotx )) Tenga en cuenta que el núcleo gaussiano con varianza unitaria viene dado por:
K gauss = exp ( − ∣ ∣ x − y ∣ ∣ 2 2 ) \mathbf{K}_{gauss}=\text{exp}(- \frac {||\mathbf{x}-\mathbf{y}||^2}{2} )kg a u ss=exp ( -2∣∣x _−y ∣ ∣2) Ahora recuerde que queremos encontrar un kernel softmax:
KSM ( x , y ) = exp ( x T y ) \mathbf{K}_{SM}(\mathbf{x},\mathbf{y})= \text {exp}(\mathbf{x}^T\mathbf{y})kSM( x ,y )=exp ( xT y)Podemos ver quela estructura del kernel Softmax no está muy alejada del kernel gaussiano. Resulta que podemos aprovechar esta similitud para encontrar el kernel softmax. De hecho, tenga en cuenta que
esto significa que podemosreescribir el kernel softmaxcomo:
Y podemos hacer esto convirtiendohhfunción h de h ( x ) = 1 h(x)=1h ( x )=1 se cambia a la siguiente forma, reutilizando el mapa de características que conduce al núcleo gaussiano.
h ( x ) = exp ( ∣ ∣ x ∣ ∣ 2 2 ) h(x)=\text{exp}(\frac{||x||^2}{2})h ( x )=exp (2∣∣ x ∣ ∣2)
Esta es una buena aproximación, pero tiene algunos problemas. La función softmax siempre genera valores positivos, por lo queA \mathbf{A}Todos los elementos de A deben ser valores positivos. Sin embargo, el uso de este núcleo para aproximar softmax puede dar algunos valores negativos. De hecho, dado que estamos extrayendo w de una distribución normal con media 0, algunos de sus valores serán negativos, lo que a su vez significa queA \mathbf{A}Algunos valores de A serán negativos. Esto puede causar problemas y comportamientos inesperados.
Buscando un kernel Softmax más estable
Los investigadores descubrieron que el kernel softmax también se puede reescribir como:
(La prueba de que en realidad se trata de un kernel softmax se puede encontrar en el apéndice del artículo). Por lo tanto, simplemente podemos tomar la forma del mapa de características anterior y configurar h ( x ) = exp ( − ∣ ∣ x ∣ ∣ 2 2 ) , l = 1 , f 1 = exp , D = N ( 0 , I d ) h(\mathbf{x})=\text{exp}(-\frac{ ||x ||^2}{2}),l=1,f_1=\text{exp},\mathcal{D}=\mathcal{N}(0,\mathbf{I}_d)h ( x )=exp ( -2∣∣ x ∣ ∣2) ,yo=1 ,F1=exp ,D=norte ( 0 ,Ire)以得到ϕ ( x ) SM = 1 m exp ( − ∣ ∣ x ∣ ∣ 2 2 ) ( exp ( w 1 T x ) , . . . , exp ( wm T x ) ) \phi(\mathbf{x} )_{SM}=\frac{1}{\sqrt{m}}\text{exp}(-\frac{||\mathbf{x}||^2}{2})(\text{exp} (w_1^T\mathbf{x}),...,\text{exp}(w_m^T\mathbf{x}))ϕ ( x )SM=metro1exp ( -2∣∣ x ∣ ∣2) ( exp ( w1tx ) ,... ,exp ( wmetrotx ))
Al hacer esto podemos ver quetodos los valores son positivosya que estamos usandoexp \text{exp}exp , resolviendo así el problema anterior. Los autores también propusieron un mapa de características alternativo que conduce al mismo núcleo. Si está interesado, puede leer el artículo original.
Descripción del contenido anterior en el artículo:
Encuentre Q' y V' usando la función del kernel Softmax
Revisemos. Comenzamos con la ecuación de atención Atención ( Q , K , V ) = softmax ( QKT d ) V \text{Attention}(\mathbf{Q},\mathbf{K},\mathbf{V})=\text{softmax }(\frac{\mathbf{Q}\mathbf{K}^T}{\sqrt{d}})\mathbf{V}Atención ( Q ,k ,V )=softmax (dq kt) V descubrió que podemos reescribirlo como:
Luego, encontramos el mapa característico del núcleo Softmax, que puede usarse para aproximar la matrizA \mathbf{A}A :
ϕ ( x ) SM = 1 m exp ( − ∣ ∣ x ∣ ∣ 2 2 ) ( exp ( w 1 T x ) , . . . , exp ( wm T x ) ) \phi(\mathbf{x}) _{SM}=\frac{1}{\sqrt{m}}\text{exp}(-\frac{||\mathbf{x}||^2}{2})(\text{exp}( w_1^T\mathbf{x}),...,\text{exp}(w_m^T\mathbf{x}))ϕ ( x )SM=metro1exp ( -2∣∣ x ∣ ∣2) ( exp ( w1tx ) ,... ,exp ( wmetrotx )) Por lo tanto, ahora podemos reemplazar A \mathbf{A}
con un mapa de característicasElementos en A
: A ( i , j ) = K ( qi , kj ) = exp ( qikj T ) = ϕ SM ( qi T ) ϕ SM ( kj ) \mathbf{A}(i,j)=\mathbf{ K }(\mathbf{q}_i,\mathbf{k}_j)=\text{exp}(\mathbf{q}_i\mathbf{k}_j^T)=\phi_{SM}(\mathbf{q } _i^T)\phi_{SM}(\mathbf{k}_j)A ( yo ,j )=k ( qyo,kj)=exp ( qyokjt)=ϕSM( qit) ϕSM( kj)
Tenga en cuenta que comenzamos con la longitudLLVector qi de L \mathbf{q}_iqyo,kj \mathbf{k}_jkjMover a longitud mmVectorϕ SM ( qi ) de m \phi_{SM}(\mathbf{q}_i)ϕSM( qyo),ϕ SM ( kj ) \phi_{SM}(\mathbf{k}_j)ϕSM( kj)。
Ahora podemos convertir A \mathbf{A}A se descompone enQ ′ Q'q′ yK ′ K'k′ , dondeQ ′ Q'q′ yK ′ K'kLos elementos de ′ sonϕ SM ( qi ) \phi_{SM}(\mathbf{q}_i)ϕSM( qyo)和ϕ SM ( kj ) \phi_{SM}(\mathbf{k}_j)ϕSM( kj)。
Finalmente, somos libres de cambiar el orden de las multiplicaciones de matrices y cambiar la complejidad del tiempo de O ( L 2 d ) O(L^2d)O ( L2 d)se reduce aO ( L md ) O(Lmd)O ( L m d ) , logrando así una complejidad lineal en lugar de cuadrática a lo largo de la longitud de la secuencia.
Resumir
Esencialmente, en este artículo, los autores lograron encontrar una manera de aproximar la función softmax utilizando el producto escalar de mapas de características . Debido a esto, la complejidad temporal del cálculo de la atención en transformadores se puede reducir de cuadrática a lineal para la longitud de la secuencia, es decir, la operación exponencial se divide y aproxima. Esto acelerará significativamente los transformadores cuando trabajen con secuencias largas. Al mismo tiempo, en la medida que se garantiza la aproximación, se utilizan técnicas como el método kernel, valores positivos y ortogonalidad.
Además, cabe señalar que:
- Aunque este método se desarrolló pensando en los transformadores, se puede aplicar a prácticamente cualquier modelo que requiera softmax .
- Los autores señalan que este enfoque no sólo es más rápido sino también más eficiente en cuanto a memoria . Esto se puede ver observando las dimensiones de la matriz que debe almacenarse.
Disponibilidad de código
Una implementación de PyTorch de Performer:, https://libraries.io/pypi/performer-pytorch
el método de instalación es el siguiente:
pip install performer-pytorch==1.1.4
Ejemplo de uso:
import torch
from performer_pytorch import PerformerLM
model = PerformerLM(
num_tokens = 20000,
max_seq_len = 2048, # max sequence length
dim = 512, # dimension
depth = 12, # layers
heads = 8, # heads
causal = False, # auto-regressive or not
nb_features = 256, # number of random features, if not set, will default to (d * log(d)), where d is the dimension of each head
feature_redraw_interval = 1000, # how frequently to redraw the projection matrix, the more frequent, the slower the training
generalized_attention = False, # defaults to softmax approximation, but can be set to True for generalized attention
kernel_fn = torch.nn.ReLU(), # the kernel function to be used, if generalized attention is turned on, defaults to Relu
reversible = True, # reversible layers, from Reformer paper
ff_chunks = 10, # chunk feedforward layer, from Reformer paper
use_scalenorm = False, # use scale norm, from 'Transformers without Tears' paper
use_rezero = False, # use rezero, from 'Rezero is all you need' paper
ff_glu = True, # use GLU variant for feedforward
emb_dropout = 0.1, # embedding dropout
ff_dropout = 0.1, # feedforward dropout
attn_dropout = 0.1, # post-attn dropout
local_attn_heads = 4, # 4 heads are local attention, 4 others are global performers
local_window_size = 256, # window size of local attention
rotary_position_emb = True, # use rotary positional embedding, which endows linear attention with relative positional encoding with no learned parameters. should always be turned on unless if you want to go back to old absolute positional encoding
shift_tokens = True # shift tokens by 1 along sequence dimension before each block, for better convergence
)
x = torch.randint(0, 20000, (1, 2048))
mask = torch.ones_like(x).bool()
model(x, mask = mask) # (1, 2048, 20000)
Link de referencia
- Google AI presenta Performer: un marco de atención generalizado basado en la arquitectura Transformer
- Intérprete - Pytorch
- De transformadores a artistas intérpretes o ejecutantes: atención aproximada
- Repensar la atención con los artistas intérpretes o ejecutantes
- Funciones aleatorias para máquinas Kernel a gran escala
- Algunas notas sobre el intérprete