Saltar ao contido

Transformador (modelo de aprendizaxe automática)

Na Galipedia, a Wikipedia en galego.
Transformer
Publicación inicial2017
Última versión2023
Tipomodelo de aprendizaxe automática

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 natural[1] e a visión por ordenador.[2]

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.[1]

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.[3]

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

Arquitectura

[editar | editar a fonte]

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.[4]

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

[editar | editar a fonte]

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.[5]

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.[1]

Codificación posicional

[editar | editar a fonte]

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.

Codificación posicional
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.[1]

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.[5] 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.[1]

Atención

[editar | editar a fonte]

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:

Atención
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.[1]

Cabezas de atención

[editar | editar a fonte]
Multicabeza
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.[1]

Tipos de capas de atención

[editar | editar a fonte]

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.[1]

Enmascaramento

[editar | editar a fonte]

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.

Nos transformadores, o enmascaramento utilízase con dous fines distintos. Por unha banda, na capa de autoatención multicabeza do descodificador, emprégase no adestramento. Nesta fase, ao transformador pásaselle toda a entrada, pero el vai analizando porción por porción. Isto tradúcese en que cando está analizando a porción -ésima, non debe saber cales son o resto de porcións a partir da posición , porque é o que quere predicir. Por outra banda, nas outras capas de atención, emprégase para non ter que cambiar a arquitectura segundo o tamaño da entrada. Nos transformadores fíxase un tamaño de entrada máximo, e se a entrada que se lle mete é máis pequena, enmascáranse todas esas posicións, é dicir, trabállase con elas (porque a arquitectura está deseñada para traballar con ese tamaño) pero ignóranse por estaren enmascaradas.[1]

No problema da tradución, na oración La arquitectura de los transformadores es reciente, supoñamos que temos traducida A arquitectura dos transformadores e na seguinte volta no transformador, predirase a seguinte palabra. A función de atención distinguirá as diferentes relacións entre palabras (La con arquitectura, arquitectura con transformadores, es con arquitectura, etc), e baseándose niso, nunha época concreta do adestramento, será capaz de predicir que a seguinte palabra é é.

Capa de avance

[editar | editar a fonte]

Ademais das capas de atención, cada bloque do codificador ou descodificador contén unha capa de avance totalmente conectada, que consiste en dúas transformacións lineares cunha función ReLU, , entre elas, é dicir: . Outra forma de describir esta operación é a de facer dúas convolucións con tamaño de filtro 1.[1]

Suma e normalización

[editar | editar a fonte]

Despois de pasar polas diferentes capas de atención e avance, súmase ese valor de saída co valor previo e despois normalízase, restando a media e dividindo pola desviación típica.[1]

Transformación linear e función softmax

[editar | editar a fonte]

Despois de pasar por tódolos descodificadores, na última etapa faise unha transformación linear e un paso pola función de activación softmax para predicir a probabilidade do seguinte elemento.[1]

No problema de tradución, a transformación dá os logits, e despois de pasar pola función softmax obtense a probabilidade que cada palabra do vocabulario ten para ser a seguinte palabra da oración. Supoñamos que temos xa traducida A arquitectura dos transformadores. A saída da función softmax podería darnos un 30% de probabilidade para a palabra é, un 15% para o carácter ".", un 10% para a palabra ten... Un método común que se adoita utilizar para seleccionar o seguinte elemento é escoller como seguinte palabra a que ten a máxima probabilidade.

Importancia

[editar | editar a fonte]

Antes dos transformadores, os modelos populares de procesamento da linguaxe natural, como as redes neurais recorrentes e a memoria de longo e curto prazo (LSTM), procesaban os datos secuencialmente. Isto significaba que tiñan dificultades para manexar secuencias moi longas de datos, un problema que os transformadores solucionaron ao procesar todos os datos simultaneamente.

Ademais, os transformadores foron pioneiros na aplicación de técnicas de atención autodirixida á aprendizaxe profunda. Estas técnicas permiten aos modelos centrarse en diferentes partes dos datos de entrada, o que é especialmente útil para tarefas como a tradución automática, a xeración de texto ou mesmo a previsión de emocións.[3]

Modelos que utilizan transformadores

[editar | editar a fonte]

Dende a súa introdución, os transformadores foron usados para crear varios modelos de NLP de alto rendemento. Estes inclúen ChatGPT, un modelo que pode xerar textos realistas, e BERT, un modelo que pode entender o contexto das palabras nunha frase e que se usa para mellorar os resultados dos motores de busca.[6]

En relación coa visión por computadora, utilízase o transformador de visión (ViT, das súas siglas en inglés, Vision Transformer), que non ten descodificador; os autocodificadores de máscaras (MAE, das súas siglas en inglés, Masked Autoencoders), similar a BERT pero na visión por computadora; e o Axuste de Indicacións Visuais (Visual Prompt Tuning, en inglés), que non só adestra os pesos do transformador, senón tamén adestra algúns valores da entrada.

Para mellorar o axuste fino, utilízase un modelo chamado LoRA, onde se conxelan algúns pesos do transformador e se adestran outros diferentes. Así, conséguese adestrar menos parámetros do transformador, pero coa mesma eficacia e en menos tempo que se se adestrase o transformador completo.

Transformadores en galego

[editar | editar a fonte]

Investigadores do CiTIUS crearon en 2022 a aplicación SemantiGal, unha ferramenta en liña para visualizar os vectores das representacións en lingua galega. Tal e como se explicaba no apartado da Matriz de incrustación, cada porción ou palabra represéntase como un vector, e palabras con significados similares estarán próximos no espazo. En SemantiGal permiten ver como funciona a predición en contexto, un medidor da semellanza entre palabras, a proporción dunha palabra semellante a outra dada e as operacións vectoriais no espazo de palabras.[7]

Véxase tamén

[editar | editar a fonte]

Outros artigos

[editar | editar a fonte]

Ligazóns externas

[editar | editar a fonte]