Un transformador (ou transformer, do inglés) é un modelo de aprendizaxe profunda, que adopta un mecanismo de autoponderación, ponderando de forma diferencial a importancia de cada parte dos datos de entrada. A isto coñéceselle como mecanismo de atención, concepto revolucionario que mellorou considerablemente o potencial das redes neurais. Os transformadores úsanse en certos campos como o procesamento da linguaxe naturalVaswani, Ashish; Shazeer, Noam; Parmar, Niki; Uszkoreit, Jakob; Jones, Llion; Gomez, Aidan N.; Kaiser, Lukasz; Polosukhin, Illia (2017-06-12). "Attention Is All You Need" e a visión por ordenador. miniatura|488x488px|Arquitectura dun transformador. Do mesmo xeito que as redes neurais recorrentes, os transformadores están deseñados para procesar datos de entrada secuenciais, como a linguaxe natural, con aplicacións para tarefas como a tradución e o resumo de textos. Con todo, a diferenza das redes neurais recorrentes, os transformadores procesan toda a entrada simultaneamente. O mecanismo de altura proporciona un contexto para calquera posición na secuencia de entrada. Por exemplo, se os datos de entrada son unha frase en linguaxe natural, o transformador non necesita procesar unha palabra sobre outra. Isto permite un maior paralelismo que as redes neurais recorrentes e, polo tanto, reduce os tempos de adestramento.

Unha das técnicas máis populares no campo da aprendizaxe profunda é o modelo Transformer. Desde a súa introdución en 2017, revolucionou o procesamento da linguaxe natural e tamén atopou aplicacións noutros campos como a visión por computadora. En canto ao procesamento da linguaxe natural, tanto para a xeración de textos como para a tradución, o obxectivo dos transformadores é predicir a seguinte palabra da oración.

Unha das vantaxes dos transformadores é que non teñen unidades recorrentes, polo que requiren menos tempo de adestramento que as redes neurais recorrentes.

Arquitectura Un transformador é un modelo de aprendizaxe profunda que utiliza un mecanismo chamado atención autodirixida para procesar datos. Este mecanismo permítelle ao modelo ponderar diferentes partes dos datos de entrada, permitindo que se centre en diferentes aspectos dos datos en función da tarefa que se lle pida realizar.

Está composto por un codificador e un descodificador, cada un deles formado por múltiples capas. O codificador procesa a entrada de datos e crea unha representación intermedia, centrándose nos aspectos máis relevantes para a tarefa en cuestión. Esta representación é logo usada polo descodificador para xerar a saída desexada. Ambas partes, o codificador e o descodificador, utilizan atención autodirixida e redes neurais de avance rápido para transformar os datos. Esta arquitectura permite aos transformadores procesar grandes cantidades de información simultaneamente, o que é crucial para tarefas como o procesamento da linguaxe natural.

A continuación explícanse os diferentes módulos ou fases que constitúen a arquitectura dun transformador. Para comprender mellor o funcionamento de cada módulo, estes explicaranse sobre o problema de procesamento da linguaxe natural, en concreto, sobre a tradución.

Matriz de incrustación Para que un transformador poida traballar, precisa ter os datos codificados nunha linguaxe que entenda. Esta linguaxe trátase de vectores e matrices nun espazo vectorial multidimensional (o número de dimensións escóllese segundo o transformador e o problema co que esteamos tratando, aínda que hai valores comunmente utilizados), onde vectores con dirección e sentido similares, terán un significado similar.

Primeiramente, na etapa de incrustación de entrada, divídese a entrada en diferentes porcións (tokens, en inglés) distinguibles. A cada unha destas porcións asígnaselle un valor numérico, obtendo un vector de dimensión , sendo o número de porcións na entrada. Este vector multiplícase pola matriz de incrustación, unha matriz que se aprende no adestramento, de dimensión , sendo a dimensión escollida para o modelo. Unha vez feita esa multiplicación, obtense unha matriz , que pertence ao espazo vectorial citado anteriormente.

Codificación posicional Por último, antes de comezar o procesamento da entrada no transformador, tense a fase da codificación posicional. A importancia desta fase radica en que como nos transformadores non hai parte recorrente nin convolucional, é necesario algún mecanismo para saber a orde dos elementos. Esta fase consiste en sumar a matriz de codificación posicional (matriz que non se aprende), que indica a posición na que está cada porción dentro da entrada. alt=Codificación posicional|miniatura|311x311px|Diagrama dunha codificación posicional sinusoidal con parámetro . Os valores da matriz de codificación posicional, sendo a posición e a dimensión, son os seguintes:

Este método ten dúas vantaxes: é independente da lonxitude da entrada (a segunda porción, por exemplo, ten sempre a mesma codificación, independentemente da lonxitude) e os valores dos vectores son pequenos, o que é bo para o adestramento do transformador.

Exemplo No problema da tradución, pártese dunha oración en castelán para traducir ao galego: La arquitectura de los transformadores es reciente. Primeiramente divídese a oración en porcións, que xeralmente son as distintas partes das palabras, como o lexema e as desinencias, inda que por simplificación pódese pensar que unha porción é unha palabra. A continuación, asígnaselle a cada porción o seu número correspondente. Deseguida, multiplícase o vector pola matriz de incrustación. Agora, cada fila da matriz correspóndese cunha porción da oración, polo que se na oración a traducir cambiáramos a palabra reciente por nueva, os vectores resultantes estarían próximos nese espazo multidimensional. Mais non só isto, esta relación esténdese tamén con verbos. Neste caso, por exemplo, o vector es tamén estaría relativamente preto delas, pois relaciónase con esas palabras dalgún xeito, e estaría máis preto delas que a palabra son. Destacar que ao ter un espazo de dimensión moi grande, a proximidade dos vectores é difícil de imaxinar, e os vectores que poden estar preto de moitos outros, en función da dirección que se tome. Por último, despois de sumarlle a matriz de codificación posicional, de haber dúas palabras iguais na oración, estas terían codificacións distintas.

Atención Unha función de atención pode describirse como a asignación dunha consulta e un conxunto de pares clave-valor a unha saída, onde a consulta, clave e valor son todos vectores. A saída é unha suma ponderada deses valores, e os pesos se calculan mediante unha función de compatibilidade da consulta coa clave correspondente. Intuitivamente, a atención é o mecanismo no que o transformador pode enfocarse en diferentes partes da entrada cando analiza unha fracción en concreto, para darlle a cada parte a importancia que merece segundo como estean relacionadas coa porción a analizar.

A función de atención, , é a seguinte:

.

A continuación, explícanse os seus elementos. Destacar que se se trata só cunha porción, os valores consulta, clave e valor son vectores, pero se se traballa con varias porcións á vez, como é o caso dos transformadores, son matrices, con un vector porción por cada fila da matriz.

Como se mencionou anteriormente, a entrada da función de atención é a consulta, , a clave, , e o valor, (as letras veñen do inglés, Query-Key-Value). Estes valores obtéñense dunha combinación linear cunhas matrices que se aprenden durante o adestramento, . Por tanto, antes de entrar na capa de atención, temos os valores crus e , que para conseguir a entrada da función de atención, multiplícanse polas matrices correspondentes, é dicir:

alt=Atención|miniatura|377x377px|Bloque de atención do transformador. Unha vez que se ten a entrada da función de activación, o primeiro que se fai é a multiplicación das matrices consulta pola clave, , o que permite ver que porcións son relevantes noutras porcións. Para entender mellor este concepto, supoñamos o caso máis sinxelo onde e son vectores, polo que o produto que se realiza é un produto escalar. Se este número é grande, ambos vectores están relacionados (dise que unhas porcións atenden a outras). Isto débese a que canto máis grande sexa o produto escalar, máis aliñados no espazo estarán eses vectores, e como se explicou antes, os vectores están próximos nese espazo vectorial, o que indica que se atenden entre si.

O seguinte paso da función de atención consiste en escalar ese produto escalar. Divídese o valor resultante (cada elemento da matriz, no caso de tratar con matrices) entre a raíz cadrada da dimensión do espazo de atención, para conseguir estabilidade numérica. De non facelo, para dimensións grandes, o produto escalar é grande, levando á función softmax a valores onde o gradiente é pequeno, polo que non habería apenas diferenza nos cálculos.

Por último, despois de pasar ese resultado pola función softmax, multiplícase a saída da función polo valor, , para ver como ten que variar cada vector de incrustación para que se axuste ao significado da nova interpretación.

Cabezas de atención alt=Multicabeza|miniatura|377x377px|Bloque con múltiples cabezas de atención. O proceso que vén de describirse chámase cabeza de atención. Xeralmente, os transformadores teñen máis dunha cabeza de atención para poder traballar paralelamente con varios valores. Para obter o resultado desexado con varias cabezas, concaténanse tódalas saídas das cabezas de atención e multiplícase por unha matriz aprendida no adestramento. Así, o resultado será unha matriz que captura a información de tódalas cabezas de atención.

Tipos de capas de atención Nos transformadores hai 3 tipos de capas de atención, que se clasifican segundo de onde veña a entrada e onde se procese a información:

Capas de autoatención no codificador: a consulta, clave e valor veñen todos da saída da capa anterior do codificador, polo que os valores de e son todos iguais. Ademais, cada posición no codificador presta atención a tódalas posicións na capa anterior. Capas de atención cruzada: atópanse no descodificador. As consultas veñen da capa anterior do descodificador, mentres que as claves e os valores veñen da saída do codificador (polo que e son distintos). Cada posición no descodificador presta atención a tódalas posicións na secuencia de entrada. Capas de autoatención no descodificador: cada posición no descodificador presta atención a tódalas posicións da capa anterior ata esa posición. Para iso, no adestramento adóitase enmascarar a entrada que vai despois da porción a analizar.

Enmascaramento O enmascaramento consiste en ocultar partes da entrada para poder traballar cos datos que queiramos. Este consiste en engadir na función de atención a suma dunha matriz, , chamada matriz de enmascaramento, quedando a función de atención do seguinte xeito:

.

Os valores dos elementos da matriz serán cero ou menos infinito, en función de se se queren enmascarar valores ou non. Se un elemento da matriz ten o valor cero, o elemento da mesma posición na matriz non estará enmascarado, pois na adición mantense o seu valor. Porén, se o valor é menos infinito, cando se sume co correspondente valor da matriz , a función softmax vaille dar unha probabilidade de cero con respecto ao resto de porcións candidatas a ser o seguinte elemento, o que implica que este elemento non se terá en conta, é dicir, estará enmascarado.