# Afinament (aprenentatge profund)

En l'aprenentatge profund, l'afinament és un enfocament per transferir l'aprenentatge en el qual els pesos d'un model pre-entrenat s'entrenen amb dades noves. L'ajustament es pot fer a tota la xarxa neuronal o només a un subconjunt de les seves capes, en aquest cas les capes que no s'estan ajustant es "congelen" (no s'actualitzen durant el pas de retropropagació). Un model també es pot augmentar amb "adaptadors" que consisteixen en molts menys paràmetres que el model original, i ajustar-se de manera eficient amb els paràmetres ajustant els pesos dels adaptadors i deixant la resta de pesos del model congelats.
Per a algunes arquitectures, com les xarxes neuronals convolucionals, és habitual mantenir congelades les capes anteriors (les més properes a la capa d'entrada) perquè capturen característiques de nivell inferior, mentre que les capes posteriors sovint discerneixen característiques d'alt nivell que poden estar més relacionades amb la tasca en què s'entrena el model.
Els models que s'entrenen prèviament en corpus grans i generals solen ser ajustats reutilitzant els paràmetres del model com a punt de partida i afegint una capa específica per a la tasca entrenada des de zero. Ajustar el model complet també és habitual i sovint dona millors resultats, però és més car computacionalment.
L'ajustament s'aconsegueix normalment amb un aprenentatge supervisat, però també hi ha tècniques per afinar un model mitjançant una supervisió feble. L'ajustament es pot combinar amb un aprenentatge de reforç a partir d'objectius basats en la retroalimentació humana per produir models de llenguatge com ChatGPT (una versió afinada de GPT-3) i Sparrow.

## Robustesa

L'ajustament fins pot degradar la robustesa d'un model als canvis de distribució. Una mitigació és interpolar linealment els pesos d'un model ajustat amb els pesos del model original, la qual cosa pot augmentar molt el rendiment fora de la distribució alhora que es manté en gran manera el rendiment dins de la distribució del model ajustat.

## Variants
### Adaptació de baix rang

L'adaptació de rang baix (LoRA) és una tècnica basada en adaptadors per ajustar de manera eficient els models. La idea bàsica és dissenyar una matriu de rang baix que després s'afegeix a la matriu original.
L'ajustament fi basat en adaptadors permet un rendiment que s'aproxima al de l'afinació del model complet, alhora que redueix dràsticament el nombre de pesos modificats que s'han de desar al disc. Un model d'idioma amb milers de milions de paràmetres es pot ajustar a LoRA amb només diversos milions de paràmetres per estalviar, o fins i tot menys.
L'afinació basada en LoRA s'ha popularitzat a la comunitat de Stable Diffusion. El suport per a LoRA s'està integrant a la biblioteca de difusors de Hugging Face. El suport per a LoRA i tècniques similars també està disponible per a una àmplia gamma d'altres models mitjançant el paquet d'afinació eficient de paràmetres (PEFT) d'Hugging Face.

## Aplicacions
### Processament del llenguatge natural

L'afinació és habitual en el processament del llenguatge natural (PNL), especialment en el domini del modelatge del llenguatge. Els grans models d'idioma com la sèrie de models de base GPT d'OpenAI es poden ajustar a baix. Tasques de PNL per millorar el rendiment respecte al del model pre-entrenat sense modificar.

### Models comercials

De vegades, els models d'idioma que s'ofereixen comercialment es poden ajustar si el proveïdor ofereix una API d'ajustament. A partir del 19 de juny de 2023, OpenAI i Azure OpenAI Service de Microsoft Azure ofereixen API d'ajustament de models d'idioma per a un subconjunt dels seus models, així com Google Cloud Platform per a alguns dels seus models PaLM i altres. Actualment no tots els models comercials admeten l'ajustament.

## Referències

* ↑ Quinn, Joanne. Dive into deep learning: tools for engagement. Thousand Oaks, California: anglès, 2020, p. 551. ISBN 978-1-5443-6137-6.
* ↑ «CS231n Convolutional Neural Networks for Visual Recognition» (en anglès). cs231n.github.io. [Consulta: 9 març 2023].
* ↑ «CS231n Convolutional Neural Networks for Visual Recognition» (en anglès). cs231n.github.io. [Consulta: 9 març 2023].
* ↑ Zeiler, Matthew D; Fergus, Rob "Visualizing and Understanding Convolutional Networks", 2013. arXiv: 1311.2901.
* ↑ Dodge, Jesse; Ilharco, Gabriel; Schwartz, Roy; Farhadi, Ali; Hajishirzi, Hannaneh "Fine-Tuning Pretrained Language Models: Weight Initializations, Data Orders, and Early Stopping", 2020. arXiv: 2002.06305.
* ↑ Dingliwal, Saket; Shenoy, Ashish; Bodapati, Sravan; Gandhe, Ankur; Gadde, Ravi Teja "Prompt Tuning GPT-2 language model for parameter-efficient domain adaptation of ASR systems", 2021. arXiv: 2112.08718.
* ↑ Yu, Yue; Zuo, Simiao; Jiang, Haoming; Ren, Wendi; Zhao, Tuo "Fine-Tuning Pre-trained Language Model with Weak Supervision: A Contrastive-Regularized Self-Training Approach"., 2020. arXiv: 2010.07835.
* ↑ «Introducing ChatGPT» (en anglès). openai.com. [Consulta: 9 març 2023].
* ↑ Glaese, Amelia; McAleese, Nat; Trębacz, Maja; Aslanides, John; Firoiu, Vlad "Improving alignment of dialogue agents via targeted human judgements", 2022. arXiv: 2209.14375.
* ↑ Kumar, Ananya; Raghunathan, Aditi; Jones, Robbie; Ma, Tengyu; Liang, Percy "Fine-Tuning can Distort Pretrained Features and Underperform Out-of-Distribution"., 2022. arXiv: 2202.10054.
* ↑ Hu, Edward J.; Shen, Yelong; Wallis, Phillip; Allen-Zhu, Zeyuan; Li, Yuanzhi (en anglès) "LoRA: Low-Rank Adaptation of Large Language Models", 28-01-2022.
* ↑ Ryu, Simo. «Using Low-rank adaptation to quickly fine-tune diffusion models» (en anglès). GitHub, 13-02-2023. [Consulta: 19 juny 2023].
* ↑ Cuenca, Pedro. «Using LoRA for Efficient Stable Diffusion Fine-Tuning» (en anglès). Hugging Face, 26-01-2023. [Consulta: 19 juny 2023].
* ↑ «Parameter-Efficient Fine-Tuning using 🤗 PEFT» (en anglès). huggingface.co. [Consulta: 20 juny 2023].
* ↑ Dingliwal, Saket; Shenoy, Ashish; Bodapati, Sravan; Gandhe, Ankur; Gadde, Ravi Teja "Prompt Tuning GPT-2 language model for parameter-efficient domain adaptation of ASR systems", 2021. arXiv: 2112.08718.
* ↑ «Fine-tuning» (en anglès). OpenAI. [Consulta: 19 juny 2023].
* ↑ «Learn how to customize a model for your application» (en anglès). Microsoft. [Consulta: 19 juny 2023].
* ↑ «Tune text foundation models» (en anglès). Google. [Consulta: 19 juny 2023].