# Compressió del model

La compressió de models és una tècnica d'aprenentatge automàtic per reduir la mida dels models entrenats. Els models grans poden aconseguir una gran precisió, però sovint a costa de requeriments importants de recursos. Les tècniques de compressió tenen com a objectiu comprimir models sense una reducció significativa del rendiment. Els models més petits requereixen menys espai d'emmagatzematge i consumeixen menys memòria i càlcul durant la inferència.
Els models comprimits permeten el desplegament en dispositius amb recursos limitats, com ara telèfons intel·ligents, sistemes integrats, dispositius informàtics de punta i ordinadors d'electrònica de consum. La inferència eficient també és valuosa per a les grans corporacions que serveixen grans inferències de models a través d'una API, cosa que els permet reduir els costos computacionals i millorar els temps de resposta dels usuaris.
La compressió del model no s'ha de confondre amb la destil·lació del coneixement, en la qual s'entrena un model "estudiant" més petit i separat per imitar el comportament d'entrada-sortida d'un model de "professor" més gran.

## Tècniques

S'utilitzen diverses tècniques per a la compressió del model.

### Poda

La poda dispersa un model gran posant alguns paràmetres a zero exactament. Això redueix efectivament el nombre de paràmetres. Això permet l'ús d' operacions de matriu dispersa, que són més ràpides que les operacions de matriu densa.
Els criteris de poda es poden basar en magnituds de paràmetres, patró estadístic d'activacions neuronals, valors de Hessian, etc.

### Quantització

La quantificació redueix la precisió numèrica dels pesos i activacions. Per exemple, en lloc d'emmagatzemar pesos com a nombres de coma flotant de 32 bits, es poden representar mitjançant nombres enters de 8 bits. Els paràmetres de poca precisió ocupen menys espai i requereixen menys càlcul per realitzar aritmètica.
També és possible quantificar alguns paràmetres de manera més agressiva que d'altres, de manera que, per exemple, un paràmetre menys important pot tenir una precisió de 8 bits mentre que un altre, més important, pot tenir una precisió de 16 bits. La inferència amb aquests models requereix aritmètica de precisió mixta.
Els models quantificats també es poden utilitzar durant l'entrenament (en lloc de després de l'entrenament). PyTorch implementa la precisió mixta automàtica (AMP), que realitza l'emissió automàtica, l'escala de gradient i l'escala de pèrdues.

### Factorització de rang baix

Les matrius de pes es poden aproximar mitjançant matrius de rang baix. Deixa $W$ ser una matriu de pes de forma $m\times n$. Una aproximació de rang baix és $W\approx UV^{T}$, on $U$ i $V$ són matrius de formes $m\times k,n\times k$. Quan $k$ és petit, això redueix el nombre de paràmetres necessaris per representar $W$ aproximadament, i accelera la multiplicació de matrius per $W$.
Les aproximacions de rang baix es poden trobar mitjançant la descomposició de valors singulars (SVD). L'elecció del rang per a cada matriu de pes és un hiperparàmetre, i s'optimitza conjuntament com un problema d'optimització discret-continu. El rang de matrius de pes també es pot retallar després de l'entrenament, tenint en compte l'efecte de les funcions d'activació com ReLU sobre el rang implícit de les matrius de pes.

### Entrenament

La compressió del model es pot desacoblar de l'entrenament, és a dir, primer s'entrena un model sense tenir en compte com es pot comprimir i després es comprimeix. Tanmateix, també es pot combinar amb la formació.
El mètode "entrena gran, després comprimeix" entrena un model gran per a un nombre reduït de passos d'entrenament (menys del que seria si estigués entrenat per a la convergència), i després comprimeix fortament el model. Es troba que amb el mateix pressupost de càlcul, aquest mètode dóna com a resultat un model millor que els models petits i lleugerament comprimits.
A la compressió profunda, la compressió té tres passos.
* Primer bucle (poda): poda tots els pesos per sota d'un llindar, després ajusta la xarxa i torna a podar, etc.
* Segon bucle (quantització): peses de clúster, després imposar el repartiment de pes entre tots els pesos de cada clúster, després ajustar la xarxa, després agrupar de nou, etc.
* Tercer pas: utilitzeu la codificació Huffman per comprimir el model sense pèrdues.
El document de SqueezeNet va informar que Deep Compression va aconseguir una relació de compressió de 35 a AlexNet i una relació de ~10 a SqueezeNets.

## Referències

* ↑ «4 Popular Model Compression Techniques Explained» (en anglès). [Consulta: 4 març 2025].
* ↑ «Model Compression - an overview | ScienceDirect Topics» (en anglès). [Consulta: 4 març 2025].
* ↑ «The Power of Model Compression: Guide to Pruning, Quantization, and Distillation in Machine Learning» (en anglès). [Consulta: 4 març 2025].
* ↑ Reed, R. IEEE Transactions on Neural Networks, 4, 5, 9-1993, pàg. 740–747. DOI: 10.1109/72.248452. PMID: 18276504.
* ↑ Blalock, Davis; Gonzalez Ortiz, Jose Javier; Frankle, Jonathan; Guttag, John (en anglès) Proceedings of Machine Learning and Systems, 2, 15-03-2020, pàg. 129–146.
* ↑ «Mixed Precision — PyTorch Training Performance Guide» (en anglès). residentmario.github.io. [Consulta: 10 setembre 2024].
* ↑ «What Every User Should Know About Mixed Precision Training in PyTorch» (en anglès). PyTorch. [Consulta: 10 setembre 2024].
* ↑ Li, Zhuohan; Wallace, Eric; Shen, Sheng; Lin, Kevin; Keutzer, Kurt (en anglès) Proceedings of the 37th International Conference on Machine Learning, 21-11-2020, pàg. 5958–5968.