Una guia ràpida sobre l'aprenentatge de transferència i com aplicar-lo a la vostra xarxa neuronal

Exemples per a la classificació d’imatges i el processament del llenguatge natural

També disponible en castellà | També disponible en espanyol

Els grans avenços aconseguits recentment al món de l'aprenentatge profund no es podrien explicar sense la unió de diversos factors, com l'evolució i la democratització de les eines de processament, la introducció de noves plataformes i marcs o l'arribada de múltiples tècniques per millorar la neuronalitat. formació en xarxa Però en termes d'efectivitat o precisió trobem un factor clau que ha revolucionat els camps de Visió per ordinador o de llenguatge natural. En aquest article explicaré què és l'aprenentatge de transferència i un parell de casos d'ús.

Foto de Doug Linstedt a Unsplash

Nota: la major part del que explico aquí ho vaig aprendre del curs Deep Learning for Coders impartit per Jeremy Howard a la Universitat de San Francisco.

Quan ens trobem amb un problema que requereix l’aplicació de Machine Learning per a la seva resolució, i decidim utilitzar una xarxa neuronal profunda, com a primera tasca haurem de triar l’arquitectura més adequada per al nostre cas concret. Un cop presa aquesta decisió de disseny, ens plantegem inicialitzar els seus paràmetres (pesos i biaix) per a cada capa de la nostra xarxa. Fins fa poc, el procediment més habitual era inicialitzar aleatòriament aquests paràmetres dins d’un rang reduït, per ajudar d’alguna manera a l’algoritme encarregat d’ajustar aquests valors en el procés d’entrenament. Com a punt de partida, no és dolent (sempre millor que inicialitzar-los a zero), però sempre va ser un tema amb prou marge per millorar.

Primer gran beneficiari: Computer Vision

Imagineu-vos per un moment que ens trobem davant d’un problema de classificació d’imatges, havent de diferenciar les races de gats.

El Brady Bunch, versió per a gats

Què passa si en lloc d’inicialitzar aleatòriament els paràmetres de la nostra xarxa comencem per utilitzar els valors obtinguts després d’entrenar la mateixa arquitectura base amb un enorme conjunt d’imatges etiquetades on ja existien gats (entre altres coses)? D’aquesta manera transferiríem els coneixements adquirits en una tasca més genèrica al nostre cas particular i no començaríem del tot.

Això és el que aconseguim quan adoptem models prèviament formats sobre l’immens conjunt de dades d’ImnNet, que actualment conté més de 14 milions d’imatges i gairebé 22.000 etiquetes diferents. Potser el cas més conegut és l’arquitectura ResNet, guanyadora del concurs de reconeixement d’imatges realitzat per ImageNet el 2015. El fet d’utilitzar la mateixa arquitectura amb els mateixos paràmetres que el model pre-entrenat donarà a la nostra xarxa la possibilitat de reconèixer moltes coses. des del principi, que també implicarà un temps d’entrenament molt curt. L'ús de les dades de ImageNet com a punt de partida ha suposat un salt enorme en el camp Computer Vision.

Una mostra de dades de ImageNet

Com ja hem dit, el que farem en primer lloc és triar l’arquitectura base, que depèn del problema particular a resoldre i del nostre coneixement de les millors tècniques existents per a l’escenari específic (més sobre aquest tema més endavant. articles). Inicialitzarem aquesta arquitectura amb els valors dels paràmetres del model pre-format, de manera que els resultats finals seran millors i assolits molt abans. El que segueix a continuació és eliminar la capa de sortida de l'arquitectura base i adjuntar capes addicionals, de manera que podem retocar el model original per adaptar-lo al nostre cas concret.

En l’exemple de races de gats utilitzarem un model de ResNet pre-entrenat a les dades d’ImageNet com a punt de partida; a continuació, traieu la capa de sortida responsable de decidir si teníem un gat o un peix (o una altra cosa) i, finalment, afegim un parell de capes finals per reorientar la tasca del model inicial, centrant-nos en la classificació de les races de gats segons les diferències observades. entre ells.

Exemple (Mathworks)

Un truc que he après del curs Fast.ai: en aplicar els resultats d’aprenentatge de transferència es pot millorar molt si primer entrenem el nostre model amb versions reduïdes de les imatges originals i, després, l’entrenem amb imatges més grans. Els resultats es milloren perquè a la vista de la xarxa sembla un conjunt de dades diferent. Aquesta tècnica es coneix com a redimensionament progressiu i funciona per una mida mínima d’imatge de 64x64 píxels.

Estratègia de formació per a la xarxa neuronal amb aprenentatge de transferència

Podem seguir un procediment gairebé genèric quan entrenem qualsevol xarxa mitjançant l'aprenentatge de transferències. Aplicarem una estratègia en dues etapes:

A la primera etapa, congelarem els paràmetres de l'arquitectura base. Seria una mica absurd tornar a ajustar els paràmetres de les primeres capes de la mateixa manera que els dels recentment afegits, ja que difícilment millorarem la capacitat del model base de detectar formes senzilles, com les diagonals o gradients (cosa que ja aconsegueix la primera capa). Escollirem una taxa d’aprenentatge adequada per a l’ajustament dels paràmetres de les capes addicionals (no massa elevat per evitar oscil·lacions ni massa baixos per evitar que s’esperen per sempre). El temps de formació serà reduït perquè no hi ha molts paràmetres a ajustar; haurien de ser suficients unes poques èpoques (iteracions completes de totes les dades).

En la segona etapa, intentarem millorar el model mitjançant un ajustament fi. El primer que farem és descongelar els paràmetres de les capes base per ajustar lleugerament els seus valors. Escollirem un rang per a la taxa màxima d’aprenentatge a través de les diferents capes de manera que els pesos de les capes de base gairebé no canvien, mentre que els pesos finals tenen un marge de modificació més gran (tot i que serà inferior al de la primera etapa). Entrenarem la nostra xarxa per a més èpoques; bàsicament fins que l’error de validació empitjori constantment.

Transferència d'aprenentatge per al processament del llenguatge natural

La principal causa de les millores dràstiques aconseguides fa un parell d’anys en el camp del Processament del Llenguatge Natural (PNL) també va ser Transfer Transfer Learning.

Partim d’una premissa: normalment el nostre conjunt de dades estarà limitat dins d’un tema específic, i no serà prou gran per permetre’ns entendre la complexitat que hi ha al darrere de l’idioma.

L’any 2018 Jeremy Howard i Sebastian Ruder van publicar un article on s’introduïa ULMFiT (Universal Language Model Fine-Tuning), un mètode genèric per aplicar Transfer Learning a qualsevol problema NLP, portant a aquest camp els avenços prèviament assolits a l’àrea Computer Vision. La conseqüència: els millors resultats que s’han vist fins a la data (amb una millora de la precisió del 18-24%) en diversos conjunts de dades clàssics, com ara el que es va utilitzar per classificar les ressenyes de pel·lícules d’IMDB en positives i negatives.

El processament del llenguatge natural no és tan senzill

Els passos fets per a aquest exemple i altres problemes similars serien els següents:

1. Trieu un model pre-format (o creeu-ne un de nou) en una tasca de text més genèrica com a punt de partida. A NLP utilitzarem el que es coneix com a model d’idioma, que intenta, per exemple, predir la següent paraula en una frase, com podem veure en els teclats predictius. Aquesta tasca requereix un coneixement profund de la llengua i del món que ens envolta; treballar amb n-grams (paraules que solen aparèixer juntes) com abans no és suficient per adquirir la capacitat necessària per continuar les frases. Però ... i si apliquem l'aprenentatge profund amb un conjunt de dades més gran, com ara una gran quantitat d'articles extrets de la Viquipèdia? Sembla una bona idea! Preveure la paraula següent no serà molt útil per a la nostra tasca de classificació final, però aconseguirem que adquirirem un coneixement molt valuós de la llengua i sobre la realitat on s'aplica. Molt millor que començar amb paràmetres aleatoris, no és així?

Aquest primer pas no es repetirà fins i tot si el nostre problema o domini canvia, sempre que s’utilitzi el mateix idioma.

2. Afineu el model d’idioma aplicant Transfer Learning, per crear-ne un de nou que pugui predir la propera paraula però dins del nostre domini específic; en aquest cas, ressenyes de cinema. Alimentarem la xarxa amb el nostre conjunt de dades, també anomenat corpus de destinació, i aplicarem tokenització (segmentació del text en unitats o fitxes mínimes), normalització i numeralització (amb compte amb fitxes especials). Es recomana utilitzar totes les dades disponibles, incloses les mostres de prova; ja que les seves etiquetes (que s’utilitzaran per a la classificació) no són necessàries per predir la següent paraula. Ens unirem a totes les mostres i reservarem per exemple un 10% del total per validar el model.

No cal mantenir el model complet; n’hi ha prou amb el codificador, que és la part que ha après l’idioma (i no la que genera la següent paraula).

Fins al moment tenim el que es coneix com aprenentatge autosupervisat, sense necessitat d’utilitzar mostres etiquetades per humans, ja que el conjunt de dades ja les inclou. El model en el nostre cas aprendrà com s’escriuen les ressenyes de cinema, fins i tot sense saber si són positives o negatives.

3. Crear el classificador específic per a la nostra tasca particular (per diferenciar entre ressenyes positives i negatives), transferint el que el model anterior va aprendre (aquest model també seria vàlid per a qualsevol altre classificador basat en les mateixes dades).

Imatge transferida des de fast.ai

En una primera fase, només entrenarem les capes adjuntes. Continuarem entrenant en una segona fase però sense descongelar tota la xarxa alhora com ho vam fer per a la classificació d’imatges; primer desemmotllarem les últimes capes de l’arquitectura base i l’entrenarem una estona ... després desbloquejarem unes quantes capes més i entrenarem una mica ... etcètera fins que no es desencallin completament i l’entrenem per última vegada.

El model resultant després d’aquest punt ja podrà distingir si una revisió és positiva o negativa :)

Conclusió

Quan treballem un problema d’aprenentatge automàtic relacionat amb imatges o text, sempre és convenient considerar Transfer Learning per a la inicialització dels nostres paràmetres de xarxa neuronal.

Per resoldre problemes emmarcats dins d’aquests camps, comptem amb molts models pre-formats que ens seran de gran utilitat; només hem de triar l’adequat:

  • Computer Vision: models per a PyTorch, Keras
  • Processament del llenguatge natural: Transformadors ([*] BERT, GPT-2, ...), ULMFiT, etc.
Ernie, Elmo i Bert

Transfer Learning és una tècnica relativament nova, amb marge de millora en els camps anteriors (apareixen nous models cada setmana) i encara per ser explorats i explotats en alguns altres. Sens dubte és un tema a seguir de prop i val la pena investigar si treballes amb xarxes neuronals :)

PS: Fes una ullada a aquests quaderns Python per obtenir exemples complets amb fastai: Classificació d'imatges + Classificació de revisió IMDB.

Espero que us hagi agradat! Subscriviu-vos a #yottabytes perquè no us perdeu articles com aquest :)