Utilizați o abordare centrată pe date pentru a minimiza cantitatea de date necesară pentru antrenarea modelelor Amazon SageMaker

Utilizați o abordare centrată pe date pentru a minimiza cantitatea de date necesară pentru antrenarea modelelor Amazon SageMaker

Pe măsură ce modelele de învățare automată (ML) s-au îmbunătățit, oamenii de știință de date, inginerii și cercetătorii ML și-au îndreptat mai mult atenția către definirea și îmbunătățirea calității datelor. Acest lucru a condus la apariția unei abordări centrate pe date a ML și a diferitelor tehnici de îmbunătățire a performanței modelului, concentrându-se pe cerințele de date. Aplicarea acestor tehnici le permite practicienilor ML să reducă cantitatea de date necesare pentru antrenarea unui model ML.

Ca parte a acestei abordări, au apărut tehnici avansate de selecție a subseturilor de date pentru a accelera antrenamentul prin reducerea cantității de date de intrare. Acest proces se bazează pe selectarea automată a unui număr dat de puncte care aproximează distribuția unui set de date mai mare și utilizarea acestuia pentru antrenament. Aplicarea acestui tip de tehnică reduce timpul necesar antrenării unui model ML.

În această postare, descriem aplicarea principiilor AI centrate pe date cu Amazon SageMaker Ground Adevăr, cum să implementați tehnici de selecție a subsetului de date folosind CORDURI depozitul pe Amazon SageMaker pentru a reduce cantitatea de date necesare pentru antrenarea unui model inițial și cum să rulați experimente folosind această abordare cu Experimente Amazon SageMaker.

O abordare centrată pe date a învățării automate

Înainte de a vă scufunda în tehnici mai avansate centrate pe date, cum ar fi selecția subsetului de date, vă puteți îmbunătăți seturile de date în mai multe moduri, aplicând un set de principii de bază procesului de etichetare a datelor. Pentru aceasta, Ground Truth acceptă diverse mecanisme pentru a îmbunătăți consistența etichetei și calitatea datelor.

Consecvența etichetei este importantă pentru îmbunătățirea performanței modelului. Fără el, modelele nu pot produce o limită de decizie care să separe fiecare punct aparținând unor clase diferite. O modalitate de a asigura consistența este utilizarea consolidarea adnotărilor în Ground Truth, care vă permite să oferiți un exemplu dat mai multor etichetatori și să utilizați eticheta agregată furnizată ca adevăr de bază pentru acel exemplu. Divergența în etichetă este măsurată prin scorul de încredere generat de Ground Truth. Când există divergențe în etichete, ar trebui să vă uitați pentru a vedea dacă există ambiguitate în instrucțiunile de etichetare furnizate etichetatorilor dvs. care pot fi eliminate. Această abordare atenuează efectele părtinirii etichetatorilor individuali, ceea ce este esențial pentru a face etichetele mai consistente.

O altă modalitate de a îmbunătăți performanța modelului prin concentrarea pe date implică dezvoltarea unor metode de analiză a erorilor din etichete pe măsură ce acestea apar pentru a identifica cel mai important subset de date pe care trebuie să îl îmbunătățiți. puteți face acest lucru pentru setul de date de antrenament cu o combinație de eforturi manuale care implică scufundarea în exemplele etichetate și utilizarea Amazon CloudWatch jurnalele și valorile generate de joburile de etichetare Ground Truth. De asemenea, este important să ne uităm la erorile pe care modelul le face la momentul inferenței pentru a conduce următoarea iterație de etichetare pentru setul nostru de date. Pe lângă aceste mecanisme, Amazon SageMaker Clarify permite oamenilor de știință de date și inginerilor ML să ruleze algoritmi precum KernelSHAP pentru a le permite să interpreteze predicțiile făcute de modelul lor. După cum sa menționat, o explicație mai profundă a predicțiilor modelului poate fi legată de procesul inițial de etichetare pentru a-l îmbunătăți.

În cele din urmă, puteți lua în considerare să aruncați exemple zgomotoase sau excesiv de redundante. Acest lucru vă permite să reduceți timpul de antrenament prin eliminarea exemplelor care nu contribuie la îmbunătățirea performanței modelului. Cu toate acestea, identificarea manuală a unui subset util al unui anumit set de date este dificilă și necesită timp. Aplicarea tehnicilor de selecție a subsetului de date descrise în această postare vă permite să automatizați acest proces de-a lungul cadrelor stabilite.

Utilizare caz

După cum am menționat, IA centrată pe date se concentrează pe îmbunătățirea intrării modelului, mai degrabă decât pe arhitectura modelului în sine. Odată ce ați aplicat aceste principii în timpul etichetării datelor sau al ingineriei caracteristicilor, puteți continua să vă concentrați asupra introducerii modelului prin aplicarea selecției subsetului de date în timpul antrenamentului.

Pentru această postare, aplicăm selecția subsetului de date bazată pe generalizare pentru o învățare eficientă și robustă (SCLIPIRE), care este una dintre multele tehnici de selecție a subsetului de date implementate în depozitul CORDS, la algoritmul de antrenament al unui ResNet-18 model pentru a minimiza timpul necesar antrenării unui model pentru clasificare CIFAR-10 imagini. Următoarele sunt câteva exemple de imagini cu etichetele lor respective extrase din setul de date CIFAR-10.

Setul de date CIFAR

ResNet-18 este adesea folosit pentru sarcini de clasificare. Este o rețea neuronală convoluțională adâncă cu 18 straturi. Setul de date CIFAR-10 este adesea folosit pentru a evalua validitatea diferitelor tehnici și abordări în ML. Este compus din 60,000 de imagini color 32×32 etichetate în 10 clase.

În următoarele secțiuni, vă arătăm cum GLISTER vă poate ajuta să răspundeți la următoarea întrebare într-o anumită măsură:

Ce procent dintr-un anumit set de date putem folosi și încă obținem performanțe bune în timpul antrenamentului?

Aplicarea GLISTER la algoritmul de antrenament va introduce fracția ca hiperparametru în algoritmul de antrenament. Acesta reprezintă procentul din setul de date pe care doriți să îl utilizați. Ca și în cazul oricărui hiperparametru, găsirea valorii care produce cel mai bun rezultat pentru modelul și datele dvs. necesită reglare. Nu intrăm în profunzime în reglarea hiperparametrului în această postare. Pentru mai multe informații, consultați Optimizați hiperparametrii cu Amazon SageMaker Automatic Model Tuning.

Efectuăm mai multe teste folosind SageMaker Experiments pentru a măsura impactul abordării. Rezultatele vor varia în funcție de setul de date inițial, așa că este important să testăm abordarea față de datele noastre la diferite dimensiuni ale subsetului.

Deși discutăm despre utilizarea GLISTER pe imagini, îl puteți aplica și la algoritmii de antrenament care lucrează cu date structurate sau tabelare.

Selectarea subsetului de date

Scopul selecției subsetului de date este de a accelera procesul de antrenament minimizând în același timp efectele asupra acurateței și de a crește robustețea modelului. Mai precis, GLISTER-ONLINE selectează un subset pe măsură ce modelul învață încercând să maximizeze probabilitatea de logare a acelui subset de date de antrenament pe setul de validare pe care îl specificați. Optimizarea selecției subsetului de date în acest fel atenuează zgomotul și dezechilibrul de clasă care se găsește adesea în seturile de date din lumea reală și permite ca strategia de selecție a subsetului să se adapteze pe măsură ce modelul învață.

Iniţială Hârtie GLISTER descrie un compromis accelerare/precizie la diferite dimensiuni de subseturi de date, după cum urmează, folosind a LeNet model:

Dimensiunea subsetului SpeedUp Acuratete
10% 6x -3%
30% 2.5x -1.20%
50% 1.5x -0.20%

Pentru a antrena modelul, rulăm a Job de formare SageMaker folosind un script de antrenament personalizat. De asemenea, am încărcat deja setul de date de imagini în Serviciul Amazon de stocare simplă (Amazon S3). Ca și în cazul oricărui job de formare SageMaker, trebuie să definim un Estimator obiect. Estimatorul PyTorch de la sagemaker.pytorch pachetul ne permite să rulăm propriul script de antrenament într-un container PyTorch gestionat. The inputs variabila transmisă estimatorului .fit funcția conține un dicționar al locației S3 a setului de date de formare și validare.

train.py scriptul este rulat atunci când este lansat un job de instruire. În acest script, importăm modelul ResNet-18 din biblioteca CORDS și îi transmitem numărul de clase din setul nostru de date, după cum urmează:

from cords.utils.models import ResNet18 numclasses = 10
model = ResNet18(numclasses)

Apoi, folosim gen_dataset funcția de la CORDS pentru a crea seturi de date de instruire, validare și testare:

from cords.utils.data.datasets.SL import gen_dataset train_set, validation_set, test_set, numclasses = gen_dataset(
datadir="/opt/ml/input/data/training",
dset_name="cifar10",
feature="dss",
type="image")

Din fiecare set de date, creăm un încărcător de date PyTorch echivalent:

train_loader = torch.utils.data.DataLoader(train_set,
batch_size=batch_size,
shuffle=True) validation_loader = torch.utils.data.DataLoader(validation_set,
batch_size=batch_size,
shuffle=False)

În cele din urmă, folosim aceste încărcătoare de date pentru a crea un GLISTERDataLoader din biblioteca CORDS. Utilizează o implementare a strategiei de selecție GLISTER-ONLINE, care aplică selecția subsetului pe măsură ce actualizăm modelul în timpul antrenamentului, așa cum sa discutat mai devreme în această postare.

Pentru a crea obiectul, trecem argumentele specifice strategiei de selecție ca a DotMap obiect împreună cu train_loader, validation_loader, și logger:

import logging
from cords.utils.data.dataloader.SL.adaptive import GLISTERDataLoader
from dotmap import DotMap dss_args = # GLISTERDataLoader specific arguments
dss_args = DotMap(dss_args)
dataloader = GLISTERDataLoader(train_loader,
validation_loader,
dss_args,
logger,
batch_size=batch_size,
shuffle=True,
pin_memory=False)

GLISTERDataLoader poate fi aplicat acum ca un încărcător de date obișnuit la o buclă de antrenament. Acesta va selecta subseturi de date pentru următorul lot de antrenament pe măsură ce modelul învață pe baza pierderii modelului respectiv. După cum s-a demonstrat în tabelul precedent, adăugarea unei strategii de selecție a subsetului de date ne permite să reducem semnificativ timpul de antrenament, chiar și cu pasul suplimentar de selecție a subsetului de date, cu un compromis mic în precizie.

Oamenii de știință de date și inginerii ML trebuie adesea să evalueze validitatea unei abordări comparând-o cu o anumită linie de bază. Demonstrăm cum să faceți acest lucru în secțiunea următoare.

Urmărirea experimentului

Puteți utiliza SageMaker Experiments pentru a măsura validitatea abordării de selecție a subsetului de date. Pentru mai multe informații, vezi Următoarea generație de experimente Amazon SageMaker – Organizați, urmăriți și comparați antrenamentele de învățare automată la scară.

În cazul nostru, efectuăm patru experimente: o linie de bază fără a aplica selecția de subseturi de date și alte trei cu diferite fraction parametri, care reprezintă dimensiunea subsetului în raport cu setul de date total. Desigur, folosind un mai mic fraction parametrul ar trebui să aibă ca rezultat reducerea timpilor de antrenament, dar și o precizie mai scăzută a modelului.

Pentru acest post, fiecare cursă de antrenament este reprezentată ca a Run în SageMaker Experiments. Execuțiile legate de experimentul nostru sunt toate grupate sub unul singur Experiment obiect. Execuțiile pot fi atașate la un experiment comun la crearea Estimator cu SDK-ul. Vezi următorul cod:

from sagemaker.utils import unique_name_from_base
from sagemaker.experiments.run import Run, load_run experiment_name = unique_name_from_base("data-centric-experiment")
with Run(
experiment_name=experiment_name,
sagemaker_session=sess
) as run:
estimator = PyTorch('train.py',
source_dir="source",
role=role,
instance_type=instance_type,
instance_count=1,
framework_version=framework_version,
py_version='py3',
env={ 'SAGEMAKER_REQUIREMENTS': 'requirements.txt',
})
estimator.fit(inputs)

Ca parte a scriptului de antrenament personalizat, puteți colecta valori de rulare utilizând load_run:

from sagemaker.experiments.run import load_run
from sagemaker.session import Session if __name__ == "__main__":
args = parse_args()
session = Session(boto3.session.Session(region_name=args.region))
with load_run(sagemaker_session=session) as run:
train(args, run)

Apoi, folosind obiectul de rulare returnat de operația anterioară, puteți colecta puncte de date pe epocă prin apelare run.log_metric(name, value, step) și furnizarea numelui metricii, a valorii și a numărului epocii curente.

Pentru a măsura validitatea abordării noastre, colectăm valori corespunzătoare pierderii antrenamentului, acurateței antrenamentului, pierderii de validare, preciziei validării și timpului necesar pentru a finaliza o epocă. Apoi, după rularea joburilor de formare, putem revizuiți rezultatele experimentului nostru in Amazon SageMaker Studio sau prin intermediul SDK-ului SageMaker Experiments.

Pentru a vedea exactitatea validării în Studio, alegeți Analiza asupra experimentului Rulează .

Lista de experimente

Adăugați o diagramă, setați proprietățile diagramei și alegeți Crea. După cum se arată în următoarea captură de ecran, veți vedea un grafic al preciziei de validare la fiecare epocă pentru toate rulările.

Diagrama de experimente

SDK-ul vă permite, de asemenea, să preluați informații legate de experiment ca cadru de date Pandas:

from sagemaker.analytics import ExperimentAnalytics trial_component_analytics = ExperimentAnalytics(
sagemaker_session=sess.sagemaker_client,
experiment_name=experiment_name
)
analytic_table = trial_component_analytics.dataframe()

Opțional, joburile de instruire pot fi sortate. De exemplu, am putea adăuga "metrics.validation:accuracy.max" ca valoare a sort_by parametrul transmis la ExperimentAnalytics pentru a returna rezultatul ordonat după acuratețea validării.

După cum era de așteptat, experimentele noastre arată că aplicarea GLISTER și selecția subsetului de date la algoritmul de antrenament reduce timpul de antrenament. Când rulăm algoritmul nostru de antrenament de bază, timpul median pentru a finaliza o singură epocă este de aproximativ 27 de secunde. Prin contrast, aplicarea GLISTER pentru a selecta un subset echivalent cu 50%, 30% și 10% din setul de date total are ca rezultat un timp pentru a finaliza o epocă de aproximativ 13, 8.5 și, respectiv, 2.75 secunde pe instanțe ml.p3.2xlarge .

De asemenea, observăm un impact relativ minim asupra acurateței validării, în special atunci când se utilizează subseturi de date de 50%. După antrenament pentru 100 de epoci, linia de bază produce o precizie de validare de 92.72%. În schimb, aplicarea GLISTER pentru a selecta un subset echivalent cu 50%, 30% și 10% din setul de date total are ca rezultat o acuratețe de validare de 91.42%, 89.76% și, respectiv, 82.82%.

Concluzie

SageMaker Ground Truth și SageMaker Experiments permit o abordare centrată pe date a învățării automate, permițând oamenilor de știință de date și inginerilor ML să producă seturi de date mai consistente și să urmărească impactul tehnicilor mai avansate pe măsură ce le implementează în faza de construire a modelului. Implementarea unei abordări centrate pe date a ML vă permite să reduceți cantitatea de date cerută de modelul dvs. și să îmbunătățiți robustețea acestuia.

Încercați și spuneți-ne ce credeți în comentarii.


Despre autori

Use a data-centric approach to minimize the amount of data required to train Amazon SageMaker models PlatoBlockchain Data Intelligence. Vertical Search. Ai.Nicolas Bernier este arhitect de soluții, parte a echipei din sectorul public canadian de la AWS. În prezent, conduce un master cu o zonă de cercetare în Deep Learning și deține cinci certificări AWS, inclusiv Certificarea de specialitate ML. Nicolas este pasionat să-i ajute pe clienți să-și aprofundeze cunoștințele despre AWS, lucrând cu ei pentru a-și traduce provocările de afaceri în soluții tehnice.

Use a data-centric approach to minimize the amount of data required to train Amazon SageMaker models PlatoBlockchain Data Intelligence. Vertical Search. Ai.Givanildo Alves este arhitect de prototipare cu echipa de prototipare și inginerie în cloud de la Amazon Web Services, ajutând clienții să inoveze și să accelereze, arătând arta posibilului pe AWS, având deja implementat mai multe prototipuri în jurul inteligenței artificiale. Are o carieră lungă în inginerie software și a lucrat anterior ca inginer de dezvoltare software la Amazon.com.br.

Timestamp-ul:

Mai mult de la Învățare automată AWS